@aws-amplify/data-schema 0.17.0 → 0.18.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aws-amplify/data-schema",
3
- "version": "0.17.0",
3
+ "version": "0.18.0",
4
4
  "license": "Apache-2.0",
5
5
  "repository": {
6
6
  "type": "git",
@@ -74,14 +74,17 @@ type InternalClientSchema<
74
74
  ResolvedFields,
75
75
  NonModelTypes
76
76
  >['customOperations']
77
- > &
78
- ResolvedFields & {
79
- [__modelMeta__]: IdentifierMeta &
80
- SecondaryIndexes &
81
- RelationalMetadata<ResolvedSchema, ResolvedFields, IdentifierMeta> &
82
- NonModelTypes &
83
- ResolveCustomOperations<Schema, ResolvedFields, NonModelTypes>;
77
+ > & {
78
+ [K in keyof ResolvedFields]: {
79
+ type: ResolvedFields[K];
84
80
  };
81
+ } & {
82
+ [__modelMeta__]: IdentifierMeta &
83
+ SecondaryIndexes &
84
+ RelationalMetadata<ResolvedSchema, ResolvedFields, IdentifierMeta> &
85
+ NonModelTypes &
86
+ ResolveCustomOperations<Schema, ResolvedFields, NonModelTypes>;
87
+ };
85
88
 
86
89
  type GetInternalClientSchema<Schema> =
87
90
  Schema extends GenericModelSchema<any> ? InternalClientSchema<Schema> : never;
@@ -200,7 +200,7 @@ type IndividualCustomHandlerTypes<Op extends CustomOperationMinimalDef> = {
200
200
  * }
201
201
  * ```
202
202
  */
203
- functionHandlerArguments: Op['arguments'];
203
+ args: Op['arguments'];
204
204
 
205
205
  /**
206
206
  * The return type expected by a lambda function handler.
@@ -217,7 +217,7 @@ type IndividualCustomHandlerTypes<Op extends CustomOperationMinimalDef> = {
217
217
  * }
218
218
  * ```
219
219
  */
220
- functionHandlerResult: LambdaReturnType<Op['returnType']>;
220
+ returnType: LambdaReturnType<Op['returnType']>;
221
221
  };
222
222
 
223
223
  /**
@@ -1,4 +1,3 @@
1
- import { IsEmptyStringOrNever } from '@aws-amplify/data-schema-types';
2
1
  import { ModelIndexType } from '../ModelIndex';
3
2
 
4
3
  type ModelIndexTypeShape = ModelIndexType<any, any, any, any, any>;
@@ -34,31 +33,28 @@ export type SecondaryIndexToIR<
34
33
  *
35
34
  * @remarks - the IR type alias is defined as SecondaryIndexIrShape in data-schema-types
36
35
  */
37
- type SingleIndexIrFromType<
38
- Idx extends ModelIndexTypeShape,
39
- ResolvedFields,
40
- > = Idx extends ModelIndexType<
41
- any,
42
- infer PK extends string,
43
- infer SK,
44
- infer QueryField extends string | never,
45
- any
46
- >
47
- ? {
48
- queryField: IsEmptyStringOrNever<QueryField> extends true
49
- ? `listBy${QueryFieldLabelFromTuple<SK, Capitalize<PK>>}`
50
- : QueryField;
51
- pk: PK extends keyof ResolvedFields
52
- ? {
53
- [Key in PK]: Exclude<ResolvedFields[PK], null>;
54
- }
55
- : never;
56
- // distribute ResolvedFields over SK
57
- sk: unknown extends SK
58
- ? never
59
- : ResolvedSortKeyFields<SK, ResolvedFields>;
60
- }
61
- : never;
36
+ type SingleIndexIrFromType<Idx extends ModelIndexTypeShape, ResolvedFields> =
37
+ Idx extends ModelIndexType<
38
+ any,
39
+ infer PK extends string,
40
+ infer SK,
41
+ infer QueryField extends string | never,
42
+ any
43
+ >
44
+ ? {
45
+ defaultQueryFieldSuffix: `${QueryFieldLabelFromTuple<SK, Capitalize<PK>>}`;
46
+ queryField: QueryField;
47
+ pk: PK extends keyof ResolvedFields
48
+ ? {
49
+ [Key in PK]: Exclude<ResolvedFields[PK], null>;
50
+ }
51
+ : never;
52
+ // distribute ResolvedFields over SK
53
+ sk: unknown extends SK
54
+ ? never
55
+ : ResolvedSortKeyFields<SK, ResolvedFields>;
56
+ }
57
+ : never;
62
58
 
63
59
  /**
64
60
  * @typeParam SK - tuple of SortKey field names, e.g. ['viewCount', 'createdAt']
@@ -810,12 +810,13 @@ type TransformedSecondaryIndexes = {
810
810
  * @returns default query field name
811
811
  */
812
812
  const secondaryIndexDefaultQueryField = (
813
+ modelName: string,
813
814
  pk: string,
814
815
  sk?: readonly string[],
815
816
  ): string => {
816
817
  const skName = sk?.length ? 'And' + sk?.map(capitalize).join('And') : '';
817
818
 
818
- const queryField = `listBy${capitalize(pk)}${skName}`;
819
+ const queryField = `list${capitalize(modelName)}By${capitalize(pk)}${skName}`;
819
820
 
820
821
  return queryField;
821
822
  };
@@ -825,6 +826,7 @@ const secondaryIndexDefaultQueryField = (
825
826
  * and the value is an array of transformed Amplify @index directives with all supplied attributes
826
827
  */
827
828
  const transformedSecondaryIndexesForModel = (
829
+ modelName: string,
828
830
  secondaryIndexes: readonly InternalModelIndexType[],
829
831
  ): TransformedSecondaryIndexes => {
830
832
  const indexDirectiveWithAttributes = (
@@ -835,6 +837,7 @@ const transformedSecondaryIndexesForModel = (
835
837
  ): string => {
836
838
  if (!sortKeys.length && !indexName && !queryField) {
837
839
  return `@index(queryField: "${secondaryIndexDefaultQueryField(
840
+ modelName,
838
841
  partitionKey,
839
842
  )}")`;
840
843
  }
@@ -856,6 +859,7 @@ const transformedSecondaryIndexesForModel = (
856
859
  } else {
857
860
  attributes.push(
858
861
  `queryField: "${secondaryIndexDefaultQueryField(
862
+ modelName,
859
863
  partitionKey,
860
864
  sortKeys,
861
865
  )}"`,
@@ -1164,6 +1168,7 @@ const schemaPreprocessor = (
1164
1168
  const [partitionKey] = identifier;
1165
1169
 
1166
1170
  const transformedSecondaryIndexes = transformedSecondaryIndexesForModel(
1171
+ typeName,
1167
1172
  typeDef.data.secondaryIndexes,
1168
1173
  );
1169
1174
 
@@ -8,6 +8,7 @@ import {
8
8
  Equal,
9
9
  __modelMeta__,
10
10
  ExtractModelMeta,
11
+ IsEmptyStringOrNever,
11
12
  } from '@aws-amplify/data-schema-types';
12
13
  import type { Observable } from 'rxjs';
13
14
 
@@ -494,10 +495,11 @@ type ModelMetaShape = {
494
495
 
495
496
  // TODO: remove export. added for debugging.
496
497
  export type ModelTypesClient<
498
+ ModelName extends string,
497
499
  Model extends Record<string, unknown>,
498
500
  ModelMeta extends ModelMetaShape,
499
501
  FlatModel extends Record<string, unknown> = ResolvedModel<Model>,
500
- > = IndexQueryMethodsFromIR<ModelMeta['secondaryIndexes'], Model> & {
502
+ > = IndexQueryMethodsFromIR<ModelMeta['secondaryIndexes'], ModelName, Model> & {
501
503
  create: (
502
504
  model: Prettify<CreateModelInput<Model, ModelMeta>>,
503
505
  options?: {
@@ -589,10 +591,11 @@ export type ModelTypesClient<
589
591
  };
590
592
 
591
593
  type ModelTypesSSRCookies<
594
+ ModelName extends string,
592
595
  Model extends Record<string, unknown>,
593
596
  ModelMeta extends ModelMetaShape,
594
597
  FlatModel extends Record<string, unknown> = ResolvedModel<Model>,
595
- > = IndexQueryMethodsFromIR<ModelMeta['secondaryIndexes'], Model> & {
598
+ > = IndexQueryMethodsFromIR<ModelMeta['secondaryIndexes'], ModelName, Model> & {
596
599
  create: (
597
600
  model: Prettify<CreateModelInput<Model, ModelMeta>>,
598
601
  options?: {
@@ -641,10 +644,11 @@ type ModelTypesSSRCookies<
641
644
  };
642
645
 
643
646
  type ModelTypesSSRRequest<
647
+ ModelName extends string,
644
648
  Model extends Record<string, unknown>,
645
649
  ModelMeta extends ModelMetaShape,
646
650
  FlatModel extends Record<string, unknown> = ResolvedModel<Model>,
647
- > = IndexQueryMethodsFromIR<ModelMeta['secondaryIndexes'], Model> & {
651
+ > = IndexQueryMethodsFromIR<ModelMeta['secondaryIndexes'], ModelName, Model> & {
648
652
  create: (
649
653
  // TODO: actual type
650
654
  contextSpec: any,
@@ -716,11 +720,23 @@ export type ModelTypes<
716
720
  >]: ModelName extends string
717
721
  ? Schema[ModelName] extends Record<string, unknown>
718
722
  ? Context extends 'CLIENT'
719
- ? ModelTypesClient<Schema[ModelName], ModelMeta[ModelName]>
723
+ ? ModelTypesClient<
724
+ ModelName,
725
+ Schema[ModelName]['type'],
726
+ ModelMeta[ModelName]
727
+ >
720
728
  : Context extends 'COOKIES'
721
- ? ModelTypesSSRCookies<Schema[ModelName], ModelMeta[ModelName]>
729
+ ? ModelTypesSSRCookies<
730
+ ModelName,
731
+ Schema[ModelName]['type'],
732
+ ModelMeta[ModelName]
733
+ >
722
734
  : Context extends 'REQUEST'
723
- ? ModelTypesSSRRequest<Schema[ModelName], ModelMeta[ModelName]>
735
+ ? ModelTypesSSRRequest<
736
+ ModelName,
737
+ Schema[ModelName]['type'],
738
+ ModelMeta[ModelName]
739
+ >
724
740
  : never
725
741
  : never
726
742
  : never;
@@ -847,6 +863,7 @@ export type CustomHeaders =
847
863
  * SecondaryIndex index types and query methods
848
864
  */
849
865
  export type SecondaryIndexIrShape = {
866
+ defaultQueryFieldSuffix: string;
850
867
  queryField: string;
851
868
  pk: { [key: string]: string | number };
852
869
  sk: { [key: string]: string | number };
@@ -854,20 +871,30 @@ export type SecondaryIndexIrShape = {
854
871
 
855
872
  type IndexQueryMethodsFromIR<
856
873
  SecondaryIdxTuple extends SecondaryIndexIrShape[],
874
+ ModelName extends string,
857
875
  Model extends Record<string, unknown>,
858
876
  Res = unknown, // defaulting `unknown` because it gets absorbed in an intersection, e.g. `{a: 1} & unknown` => `{a: 1}`
859
877
  > = SecondaryIdxTuple extends [
860
878
  infer A extends SecondaryIndexIrShape,
861
879
  ...infer B extends SecondaryIndexIrShape[],
862
880
  ]
863
- ? IndexQueryMethodsFromIR<B, Model, IndexQueryMethodSignature<A, Model> & Res>
881
+ ? IndexQueryMethodsFromIR<
882
+ B,
883
+ ModelName,
884
+ Model,
885
+ IndexQueryMethodSignature<A, ModelName, Model> & Res
886
+ >
864
887
  : Res;
865
888
 
866
889
  type IndexQueryMethodSignature<
867
890
  Idx extends SecondaryIndexIrShape,
891
+ ModelName extends string,
868
892
  Model extends Record<string, unknown>,
869
- > = {
870
- [K in Idx['queryField'] & string]: <
893
+ > = Record<
894
+ IsEmptyStringOrNever<Idx['queryField']> extends false
895
+ ? Idx['queryField']
896
+ : `list${ModelName}By${Idx['defaultQueryFieldSuffix']}`,
897
+ <
871
898
  FlatModel extends Record<string, unknown> = ResolvedModel<Model>,
872
899
  SelectionSet extends ReadonlyArray<ModelPath<FlatModel>> = never[],
873
900
  >(
@@ -886,8 +913,8 @@ type IndexQueryMethodSignature<
886
913
  authToken?: string;
887
914
  headers?: CustomHeaders;
888
915
  },
889
- ) => ListReturnValue<Prettify<ReturnValue<Model, FlatModel, SelectionSet>>>;
890
- };
916
+ ) => ListReturnValue<Prettify<ReturnValue<Model, FlatModel, SelectionSet>>>
917
+ >;
891
918
 
892
919
  type FilteredKeys<T> = {
893
920
  [P in keyof T]: T[P] extends never ? never : P;