@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/dist/cjs/SchemaProcessor.js +6 -6
- package/dist/cjs/SchemaProcessor.js.map +1 -1
- package/dist/esm/ClientSchema.d.ts +5 -1
- package/dist/esm/MappedTypes/CustomOperations.d.ts +2 -2
- package/dist/esm/MappedTypes/MapSecondaryIndexes.d.ts +2 -2
- package/dist/esm/SchemaProcessor.mjs +6 -6
- package/dist/esm/SchemaProcessor.mjs.map +1 -1
- package/dist/esm/runtime/client/index.d.ts +20 -21
- package/dist/meta/cjs.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/src/ClientSchema.ts +10 -7
- package/src/MappedTypes/CustomOperations.ts +2 -2
- package/src/MappedTypes/MapSecondaryIndexes.ts +22 -26
- package/src/SchemaProcessor.ts +6 -1
- package/src/runtime/client/index.ts +38 -11
package/package.json
CHANGED
package/src/ClientSchema.ts
CHANGED
|
@@ -74,14 +74,17 @@ type InternalClientSchema<
|
|
|
74
74
|
ResolvedFields,
|
|
75
75
|
NonModelTypes
|
|
76
76
|
>['customOperations']
|
|
77
|
-
> &
|
|
78
|
-
ResolvedFields
|
|
79
|
-
[
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
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']
|
package/src/SchemaProcessor.ts
CHANGED
|
@@ -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 = `
|
|
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<
|
|
723
|
+
? ModelTypesClient<
|
|
724
|
+
ModelName,
|
|
725
|
+
Schema[ModelName]['type'],
|
|
726
|
+
ModelMeta[ModelName]
|
|
727
|
+
>
|
|
720
728
|
: Context extends 'COOKIES'
|
|
721
|
-
? ModelTypesSSRCookies<
|
|
729
|
+
? ModelTypesSSRCookies<
|
|
730
|
+
ModelName,
|
|
731
|
+
Schema[ModelName]['type'],
|
|
732
|
+
ModelMeta[ModelName]
|
|
733
|
+
>
|
|
722
734
|
: Context extends 'REQUEST'
|
|
723
|
-
? ModelTypesSSRRequest<
|
|
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<
|
|
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
|
-
|
|
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;
|