@aws-amplify/amplify-api-next-alpha
Advanced tools
Comparing version 0.3.2 to 0.4.0
@@ -8,16 +8,16 @@ import { schema } from './src/ModelSchema'; | ||
declare const a: { | ||
id: () => import("./src/ModelField").ModelField<string, never, undefined>; | ||
string: () => import("./src/ModelField").ModelField<string, never, undefined>; | ||
integer: () => import("./src/ModelField").ModelField<number, never, undefined>; | ||
float: () => import("./src/ModelField").ModelField<number, never, undefined>; | ||
boolean: () => import("./src/ModelField").ModelField<boolean, never, undefined>; | ||
date: () => import("./src/ModelField").ModelField<Date, never, undefined>; | ||
time: () => import("./src/ModelField").ModelField<Date, never, undefined>; | ||
datetime: () => import("./src/ModelField").ModelField<Date, never, undefined>; | ||
timestamp: () => import("./src/ModelField").ModelField<number, never, undefined>; | ||
email: () => import("./src/ModelField").ModelField<string, never, undefined>; | ||
id: () => import("./src/ModelField").ModelField<string | null, never, undefined>; | ||
string: () => import("./src/ModelField").ModelField<string | null, never, undefined>; | ||
integer: () => import("./src/ModelField").ModelField<number | null, never, undefined>; | ||
float: () => import("./src/ModelField").ModelField<number | null, never, undefined>; | ||
boolean: () => import("./src/ModelField").ModelField<boolean | null, never, undefined>; | ||
date: () => import("./src/ModelField").ModelField<Date | null, never, undefined>; | ||
time: () => import("./src/ModelField").ModelField<Date | null, never, undefined>; | ||
datetime: () => import("./src/ModelField").ModelField<Date | null, never, undefined>; | ||
timestamp: () => import("./src/ModelField").ModelField<number | null, never, undefined>; | ||
email: () => import("./src/ModelField").ModelField<string | null, never, undefined>; | ||
json: () => import("./src/ModelField").ModelField<any, never, undefined>; | ||
phone: () => import("./src/ModelField").ModelField<string, never, undefined>; | ||
url: () => import("./src/ModelField").ModelField<string, never, undefined>; | ||
ipAddress: () => import("./src/ModelField").ModelField<string, never, undefined>; | ||
phone: () => import("./src/ModelField").ModelField<string | null, never, undefined>; | ||
url: () => import("./src/ModelField").ModelField<string | null, never, undefined>; | ||
ipAddress: () => import("./src/ModelField").ModelField<string | null, never, undefined>; | ||
schema: typeof schema; | ||
@@ -39,3 +39,3 @@ model: typeof model; | ||
to: <SELF extends import("./src/Authorization").Authorization<any, any>>(this: SELF, operations: ("create" | "update" | "delete" | "read" | "get" | "list" | "sync" | "listen" | "search")[]) => Omit<SELF, "to">; | ||
inField: <SELF_1 extends import("./src/Authorization").Authorization<any, any>, Field extends string>(this: SELF_1, field: Field) => (Omit<SELF_1, "inField"> extends infer T extends {} ? { [K in keyof T as Omit<SELF_1, "inField">[K] extends (...args: any) => any ? K : never]: Omit<SELF_1, "inField">[K]; } : never) & import("./src/Authorization").Authorization<Field, SELF_1[typeof import("./src/Authorization").__data]["multiOwner"]>; | ||
inField: <SELF_1 extends import("./src/Authorization").Authorization<any, any>, Field extends string>(this: SELF_1, field: Field) => (Omit<SELF_1, "inField"> extends infer T extends object ? { [K in keyof T as Omit<SELF_1, "inField">[K] extends (...args: any) => any ? K : never]: Omit<SELF_1, "inField">[K]; } : never) & import("./src/Authorization").Authorization<Field, SELF_1[typeof import("./src/Authorization").__data]["multiOwner"]>; | ||
identityClaim: <SELF_2 extends import("./src/Authorization").Authorization<any, any>>(this: SELF_2, property: string) => Omit<SELF_2, "identityClaim">; | ||
@@ -45,3 +45,3 @@ }; | ||
to: <SELF extends import("./src/Authorization").Authorization<any, any>>(this: SELF, operations: ("create" | "update" | "delete" | "read" | "get" | "list" | "sync" | "listen" | "search")[]) => Omit<SELF, "to">; | ||
inField: <SELF_1 extends import("./src/Authorization").Authorization<any, any>, Field extends string>(this: SELF_1, field: Field) => (Omit<SELF_1, "inField"> extends infer T_1 extends {} ? { [K in keyof T_1 as Omit<SELF_1, "inField">[K] extends (...args: any) => any ? K : never]: Omit<SELF_1, "inField">[K]; } : never) & import("./src/Authorization").Authorization<Field, SELF_1[typeof import("./src/Authorization").__data]["multiOwner"]>; | ||
inField: <SELF_1 extends import("./src/Authorization").Authorization<any, any>, Field extends string>(this: SELF_1, field: Field) => (Omit<SELF_1, "inField"> extends infer T_1 extends object ? { [K in keyof T_1 as Omit<SELF_1, "inField">[K] extends (...args: any) => any ? K : never]: Omit<SELF_1, "inField">[K]; } : never) & import("./src/Authorization").Authorization<Field, SELF_1[typeof import("./src/Authorization").__data]["multiOwner"]>; | ||
identityClaim: <SELF_2 extends import("./src/Authorization").Authorization<any, any>>(this: SELF_2, property: string) => Omit<SELF_2, "identityClaim">; | ||
@@ -48,0 +48,0 @@ }; |
@@ -56,4 +56,4 @@ import { UnionToIntersection } from './util'; | ||
}; | ||
export type OwnerField = {}; | ||
type BuilderMethods<T extends {}> = { | ||
export type OwnerField = object; | ||
type BuilderMethods<T extends object> = { | ||
[K in keyof T as T[K] extends (...args: any) => any ? K : never]: T[K]; | ||
@@ -136,3 +136,3 @@ }; | ||
[K in Field]?: string; | ||
} : {} : {}; | ||
} : object : object; | ||
/** | ||
@@ -139,0 +139,0 @@ * Turns the type from a list of `Authorization` rules like this: |
@@ -48,5 +48,5 @@ import type { Authorization, ImpliedAuthFields } from './Authorization'; | ||
type ModelImpliedAuthFields<Schema extends ModelSchema<any>> = { | ||
[ModelKey in keyof Schema['data']['models']]: Schema['data']['models'][ModelKey] extends ModelType<infer Model, any> ? ImpliedAuthFields<Model['authorization'][number]> & ImpliedAuthFieldsFromFields<Model> : {}; | ||
[ModelKey in keyof Schema['data']['models']]: Schema['data']['models'][ModelKey] extends ModelType<infer Model, any> ? ImpliedAuthFields<Model['authorization'][number]> & ImpliedAuthFieldsFromFields<Model> : object; | ||
}; | ||
type ImpliedAuthFieldsFromFields<T> = UnionToIntersection<T extends ModelTypeParamShape ? T['fields'][keyof T['fields']] extends ModelField<any, any, infer Auth> | ModelRelationalField<any, any, any, infer Auth> ? Auth extends Authorization<any, any> ? ImpliedAuthFields<Auth> : {} : {} : {}>; | ||
type ImpliedAuthFieldsFromFields<T> = UnionToIntersection<T extends ModelTypeParamShape ? T['fields'][keyof T['fields']] extends ModelField<any, any, infer Auth> | ModelRelationalField<any, any, any, infer Auth> ? Auth extends Authorization<any, any> ? ImpliedAuthFields<Auth> : object : object : object>; | ||
/** | ||
@@ -63,3 +63,3 @@ * infer and massage field types | ||
type InjectImplicitModels<Schema> = Prettify<Schema & ExtractImplicitModelNames<Schema>>; | ||
type GetRelationshipRef<T, RM extends keyof T, TypeArg extends ModelRelationalFieldParamShape, Flat extends boolean, ResolvedModel = ResolveRelationalFieldsForModel<T, RM, Flat>, Model = TypeArg['valueOptional'] extends true ? ResolvedModel | null | undefined : ResolvedModel, Value = TypeArg['array'] extends true ? TypeArg['arrayOptional'] extends true ? Array<Model> | null | undefined : Array<Model> : Model> = Flat extends true ? Value : () => Promise<Prettify<Value>>; | ||
type GetRelationshipRef<T, RM extends keyof T, TypeArg extends ModelRelationalFieldParamShape, Flat extends boolean, ResolvedModel = ResolveRelationalFieldsForModel<T, RM, Flat>, Model = TypeArg['valueRequired'] extends true ? ResolvedModel : ResolvedModel | null | undefined, Value = TypeArg['array'] extends true ? TypeArg['arrayRequired'] extends true ? Array<Model> : Array<Model> | null | undefined : Model> = Flat extends true ? Value : () => Promise<Prettify<Value>>; | ||
type ResolveRelationalFieldsForModel<Schema, ModelName extends keyof Schema, Flat extends boolean> = { | ||
@@ -66,0 +66,0 @@ [FieldName in keyof Schema[ModelName]]: Schema[ModelName][FieldName] extends ModelRelationalFieldParamShape ? Schema[ModelName][FieldName]['relatedModel'] extends keyof Schema ? GetRelationshipRef<Schema, Schema[ModelName][FieldName]['relatedModel'], Schema[ModelName][FieldName], Flat> : never : Schema[ModelName][FieldName]; |
@@ -31,5 +31,5 @@ import { Authorization } from './Authorization'; | ||
fieldType: ModelFieldType; | ||
optional: boolean; | ||
required: boolean; | ||
array: boolean; | ||
arrayOptional: boolean; | ||
arrayRequired: boolean; | ||
default: undefined | ModelFieldTypeParamOuter; | ||
@@ -40,4 +40,9 @@ authorization: Authorization<any, any>[]; | ||
type ModelFieldTypeParamOuter = ModelFieldTypeParamInner | Array<ModelFieldTypeParamInner> | null; | ||
type ToArray<T> = [T] extends [ModelFieldTypeParamInner] ? Array<T> : never; | ||
/** | ||
* Field type arg mutators | ||
*/ | ||
type ToOptional<T> = T | null; | ||
type ToRequired<T> = Exclude<T, null>; | ||
type ToArray<T> = [T] extends [ModelFieldTypeParamInner] ? Array<T> | null : never; | ||
/** | ||
* Public API for the chainable builder methods exposed by Model Field. | ||
@@ -50,4 +55,4 @@ * The type is narrowing e.g., after calling .array() it will be omitted from intellisense suggestions | ||
export type ModelField<T extends ModelFieldTypeParamOuter, K extends keyof ModelField<T> = never, Auth = undefined> = Omit<{ | ||
optional(): ModelField<T | null, K | 'optional'>; | ||
array(): ModelField<ToArray<T>, Exclude<K, 'optional'> | 'array'>; | ||
required(): ModelField<ToRequired<T>, K | 'required'>; | ||
array(): ModelField<ToArray<T>, Exclude<K, 'required'> | 'array'>; | ||
default(val: ModelFieldTypeParamOuter): ModelField<T, K | 'default'>; | ||
@@ -65,16 +70,16 @@ authorization<AuthRuleType extends Authorization<any, any>>(rules: AuthRuleType[]): ModelField<T, K | 'authorization', AuthRuleType>; | ||
}; | ||
declare function id(): ModelField<string>; | ||
declare function string(): ModelField<string>; | ||
declare function integer(): ModelField<number>; | ||
declare function float(): ModelField<number>; | ||
declare function boolean(): ModelField<boolean>; | ||
declare function date(): ModelField<Date>; | ||
declare function time(): ModelField<Date>; | ||
declare function datetime(): ModelField<Date>; | ||
declare function timestamp(): ModelField<number>; | ||
declare function email(): ModelField<string>; | ||
declare function json(): ModelField<any>; | ||
declare function phone(): ModelField<string>; | ||
declare function url(): ModelField<string>; | ||
declare function ipAddress(): ModelField<string>; | ||
declare function id(): ModelField<ToOptional<string>>; | ||
declare function string(): ModelField<ToOptional<string>>; | ||
declare function integer(): ModelField<ToOptional<number>>; | ||
declare function float(): ModelField<ToOptional<number>>; | ||
declare function boolean(): ModelField<ToOptional<boolean>>; | ||
declare function date(): ModelField<ToOptional<Date>>; | ||
declare function time(): ModelField<ToOptional<Date>>; | ||
declare function datetime(): ModelField<ToOptional<Date>>; | ||
declare function timestamp(): ModelField<ToOptional<number>>; | ||
declare function email(): ModelField<ToOptional<string>>; | ||
declare function json(): ModelField<ToOptional<any>>; | ||
declare function phone(): ModelField<ToOptional<string>>; | ||
declare function url(): ModelField<ToOptional<string>>; | ||
declare function ipAddress(): ModelField<ToOptional<string>>; | ||
export declare const fields: { | ||
@@ -81,0 +86,0 @@ id: typeof id; |
@@ -38,6 +38,6 @@ "use strict"; | ||
* @example | ||
* string() => T = string | ||
* string().array() => T = string[] | ||
* string().array().optional() => T = string[] | null | ||
* string().optional().array().optional() => T = (string | null)[] | null | ||
* string() => T = string | null | ||
* string().array() => T = Array<string | null> | null | ||
* string().array().required() => T = Array<string | null> | ||
* string().required().array().required() => T = Array<string> | ||
* | ||
@@ -52,5 +52,5 @@ * @param fieldType - stores the GraphQL data type of the field | ||
fieldType, | ||
optional: false, | ||
required: false, | ||
array: false, | ||
arrayOptional: false, | ||
arrayRequired: false, | ||
default: undefined, | ||
@@ -60,10 +60,10 @@ authorization: [], | ||
const builder = { | ||
optional() { | ||
required() { | ||
if (_meta.lastInvokedMethod === 'array') { | ||
data.arrayOptional = true; | ||
data.arrayRequired = true; | ||
} | ||
else { | ||
data.optional = true; | ||
data.required = true; | ||
} | ||
_meta.lastInvokedMethod = 'optional'; | ||
_meta.lastInvokedMethod = 'required'; | ||
return this; | ||
@@ -70,0 +70,0 @@ }, |
@@ -1,2 +0,2 @@ | ||
type RelationalMethods = "hasOne" | "hasMany" | "belongsTo" | "manyToMany"; | ||
type RelationalMethods = 'hasOne' | 'hasMany' | 'belongsTo' | 'manyToMany'; | ||
type ModelRefTypeParamShape = { | ||
@@ -14,12 +14,12 @@ model: string; | ||
hasOne(): ModelRef<T & { | ||
relationshipType: "hasOne"; | ||
relationshipType: 'hasOne'; | ||
}, K | RelationalMethods>; | ||
hasMany(): ModelRef<T & { | ||
relationshipType: "hasMany"; | ||
relationshipType: 'hasMany'; | ||
}, K | RelationalMethods>; | ||
belongsTo(): ModelRef<T & { | ||
relationshipType: "belongsTo"; | ||
relationshipType: 'belongsTo'; | ||
}, K | RelationalMethods>; | ||
manyToMany(): ModelRef<T & { | ||
relationshipType: "manyToMany"; | ||
relationshipType: 'manyToMany'; | ||
}, K | RelationalMethods>; | ||
@@ -26,0 +26,0 @@ }, K>; |
@@ -12,15 +12,15 @@ "use strict"; | ||
hasOne() { | ||
data.relationshipType = "hasOne"; | ||
data.relationshipType = 'hasOne'; | ||
return this; | ||
}, | ||
hasMany() { | ||
data.relationshipType = "hasMany"; | ||
data.relationshipType = 'hasMany'; | ||
return this; | ||
}, | ||
belongsTo() { | ||
data.relationshipType = "belongsTo"; | ||
data.relationshipType = 'belongsTo'; | ||
return this; | ||
}, | ||
manyToMany() { | ||
data.relationshipType = "manyToMany"; | ||
data.relationshipType = 'manyToMany'; | ||
return this; | ||
@@ -27,0 +27,0 @@ }, |
@@ -19,4 +19,4 @@ import { SetTypeSubArg } from './util'; | ||
array: boolean; | ||
valueOptional: boolean; | ||
arrayOptional: boolean; | ||
valueRequired: boolean; | ||
arrayRequired: boolean; | ||
connectionName?: string; | ||
@@ -29,10 +29,10 @@ authorization: Authorization<any, any>[]; | ||
relatedModel: string; | ||
valueOptional: boolean; | ||
array: boolean; | ||
arrayOptional: boolean; | ||
valueRequired: boolean; | ||
arrayRequired: boolean; | ||
connectionName?: string; | ||
}; | ||
export type ModelRelationalField<T extends ModelRelationalFieldParamShape, RM extends string | symbol, K extends keyof ModelRelationalField<T, RM> = never, Auth = undefined> = Omit<{ | ||
valueOptional(): ModelRelationalField<SetTypeSubArg<T, 'valueOptional', true>, K | 'valueOptional'>; | ||
arrayOptional(): ModelRelationalField<SetTypeSubArg<T, 'arrayOptional', true>, K | 'arrayOptional'>; | ||
valueRequired(): ModelRelationalField<SetTypeSubArg<T, 'valueRequired', true>, K | 'valueRequired'>; | ||
arrayRequired(): ModelRelationalField<SetTypeSubArg<T, 'arrayRequired', true>, K | 'arrayRequired'>; | ||
authorization<AuthRuleType extends Authorization<any, any>>(rules: AuthRuleType[]): ModelRelationalField<T, K | 'authorization', K, AuthRuleType>; | ||
@@ -54,4 +54,4 @@ }, K> & { | ||
array: IsArray; | ||
valueOptional: false; | ||
arrayOptional: false; | ||
valueRequired: false; | ||
arrayRequired: false; | ||
connectionName: ConnectionName; | ||
@@ -58,0 +58,0 @@ }; |
@@ -22,4 +22,4 @@ "use strict"; | ||
array: false, | ||
valueOptional: false, | ||
arrayOptional: false, | ||
valueRequired: false, | ||
arrayRequired: false, | ||
connectionName, | ||
@@ -32,8 +32,8 @@ authorization: [], | ||
const builder = { | ||
valueOptional() { | ||
data.valueOptional = true; | ||
valueRequired() { | ||
data.valueRequired = true; | ||
return this; | ||
}, | ||
arrayOptional() { | ||
data.arrayOptional = true; | ||
arrayRequired() { | ||
data.arrayRequired = true; | ||
return this; | ||
@@ -40,0 +40,0 @@ }, |
@@ -25,3 +25,3 @@ "use strict"; | ||
function scalarFieldToGql(fieldDef, identifier) { | ||
const { fieldType, optional, array, arrayOptional, default: _default, } = fieldDef; | ||
const { fieldType, required, array, arrayRequired, default: _default, } = fieldDef; | ||
let field = fieldType; | ||
@@ -39,3 +39,3 @@ if (identifier !== undefined) { | ||
} | ||
if (optional === false) { | ||
if (required === true) { | ||
field += '!'; | ||
@@ -45,3 +45,3 @@ } | ||
field = `[${field}]`; | ||
if (arrayOptional === false) { | ||
if (arrayRequired === true) { | ||
field += '!'; | ||
@@ -56,8 +56,8 @@ } | ||
function modelFieldToGql(fieldDef) { | ||
const { type, relatedModel, array, valueOptional, arrayOptional, connectionName, } = fieldDef; | ||
const { type, relatedModel, array, connectionName, valueRequired, arrayRequired, } = fieldDef; | ||
let field = relatedModel; | ||
// TODO: once we flip default to nullable, uncomment | ||
// if (valueOptional === false) { | ||
// field += "!"; | ||
// } | ||
if (valueRequired === true) { | ||
field += '!'; | ||
} | ||
if (array) { | ||
@@ -67,5 +67,5 @@ field = `[${field}]`; | ||
// TODO: once we flip default to nullable, uncomment | ||
// if (arrayOptional === false) { | ||
// field += "!"; | ||
// } | ||
if (arrayRequired === true) { | ||
field += '!'; | ||
} | ||
field += ` @${type}`; | ||
@@ -112,6 +112,6 @@ // TODO: accept other relationship options e.g. `fields` | ||
if (rule.multiOwner) { | ||
authFields[rule.groupOrOwnerField] = ModelField_1.fields.string().array().optional(); | ||
authFields[rule.groupOrOwnerField] = ModelField_1.fields.string().array(); | ||
} | ||
else { | ||
authFields[rule.groupOrOwnerField] = ModelField_1.fields.string().optional(); | ||
authFields[rule.groupOrOwnerField] = ModelField_1.fields.string(); | ||
} | ||
@@ -118,0 +118,0 @@ } |
@@ -15,3 +15,3 @@ /** | ||
}; | ||
export type Prettify<T> = T extends () => {} ? () => ReturnType<T> : T extends object ? { | ||
export type Prettify<T> = T extends () => any ? () => ReturnType<T> : T extends object ? { | ||
[P in keyof T]: Prettify<T[P]>; | ||
@@ -38,3 +38,3 @@ } : T; | ||
*/ | ||
export type ExcludeEmpty<U> = U extends U ? ({} extends U ? never : U) : never; | ||
export type ExcludeEmpty<U> = U extends U ? object extends U ? never : U : never; | ||
export type Expect<T extends true> = T; | ||
@@ -52,3 +52,3 @@ export type ExpectTrue<T extends true> = T; | ||
}; | ||
export type ObjectIsNonEmpty<T extends {}> = keyof T extends never ? false : true; | ||
export type ObjectIsNonEmpty<T extends object> = keyof T extends never ? false : true; | ||
export {}; |
{ | ||
"name": "@aws-amplify/amplify-api-next-alpha", | ||
"version": "0.3.2", | ||
"version": "0.4.0", | ||
"license": "Apache-2.0", | ||
@@ -14,4 +14,4 @@ "repository": { | ||
"clean": "rimraf lib-esm tsconfig.tsbuildinfo", | ||
"test": "jest __tests__", | ||
"lint": "eslint \"**/*.ts*\"" | ||
"test": "jest", | ||
"lint": "eslint ." | ||
}, | ||
@@ -18,0 +18,0 @@ "dependencies": { |
@@ -10,3 +10,3 @@ ## amplify-api-next | ||
defineData, | ||
} from "@aws-amplify/amplify-api-next-alpha"; | ||
} from '@aws-amplify/amplify-api-next-alpha'; | ||
@@ -17,3 +17,3 @@ const schema = a.schema({ | ||
title: a.string(), | ||
comments: a.hasMany("Comment"), | ||
comments: a.hasMany('Comment'), | ||
}), | ||
@@ -23,3 +23,3 @@ Comment: a.model({ | ||
content: a.string(), | ||
post: a.belongsTo("Post"), | ||
post: a.belongsTo('Post'), | ||
}), | ||
@@ -26,0 +26,0 @@ }); |
Sorry, the diff of this file is not supported yet
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
1452
0
103521