@aws-amplify/data-schema 1.3.10 → 1.4.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.
Files changed (102) hide show
  1. package/dist/cjs/ModelType.js +5 -0
  2. package/dist/cjs/ModelType.js.map +1 -1
  3. package/dist/cjs/SchemaProcessor.js +58 -1
  4. package/dist/cjs/SchemaProcessor.js.map +1 -1
  5. package/dist/cjs/runtime/addSchemaToClient.js +1 -0
  6. package/dist/cjs/runtime/addSchemaToClient.js.map +1 -1
  7. package/dist/cjs/runtime/addSchemaToClientWithInstance.js +1 -0
  8. package/dist/cjs/runtime/addSchemaToClientWithInstance.js.map +1 -1
  9. package/dist/cjs/runtime/internals/APIClient.js +63 -42
  10. package/dist/cjs/runtime/internals/APIClient.js.map +1 -1
  11. package/dist/cjs/runtime/internals/cancellation.js +48 -0
  12. package/dist/cjs/runtime/internals/cancellation.js.map +1 -0
  13. package/dist/cjs/runtime/internals/clientUtils.js +45 -3
  14. package/dist/cjs/runtime/internals/clientUtils.js.map +1 -1
  15. package/dist/cjs/runtime/internals/index.js +3 -1
  16. package/dist/cjs/runtime/internals/index.js.map +1 -1
  17. package/dist/cjs/runtime/internals/operations/custom.js +91 -85
  18. package/dist/cjs/runtime/internals/operations/custom.js.map +1 -1
  19. package/dist/cjs/runtime/internals/operations/get.js +71 -65
  20. package/dist/cjs/runtime/internals/operations/get.js.map +1 -1
  21. package/dist/cjs/runtime/internals/operations/indexQuery.js +66 -60
  22. package/dist/cjs/runtime/internals/operations/indexQuery.js.map +1 -1
  23. package/dist/cjs/runtime/internals/operations/list.js +90 -84
  24. package/dist/cjs/runtime/internals/operations/list.js.map +1 -1
  25. package/dist/cjs/runtime/internals/server/generateModelsProperty.js +3 -3
  26. package/dist/cjs/runtime/internals/server/generateModelsProperty.js.map +1 -1
  27. package/dist/cjs/runtime/internals/utils/clientProperties/generateModelsProperty.js +3 -3
  28. package/dist/cjs/runtime/internals/utils/clientProperties/generateModelsProperty.js.map +1 -1
  29. package/dist/cjs/runtime/utils/index.js +3 -1
  30. package/dist/cjs/runtime/utils/index.js.map +1 -1
  31. package/dist/cjs/runtime/utils/selfAwareAsync.js +40 -0
  32. package/dist/cjs/runtime/utils/selfAwareAsync.js.map +1 -0
  33. package/dist/esm/Authorization.d.ts +1 -1
  34. package/dist/esm/ClientSchema/Core/ClientModel.d.ts +20 -1
  35. package/dist/esm/ClientSchema/utilities/ResolveField.d.ts +5 -1
  36. package/dist/esm/ModelType.d.ts +6 -0
  37. package/dist/esm/ModelType.mjs +5 -0
  38. package/dist/esm/ModelType.mjs.map +1 -1
  39. package/dist/esm/SchemaProcessor.mjs +58 -1
  40. package/dist/esm/SchemaProcessor.mjs.map +1 -1
  41. package/dist/esm/runtime/addSchemaToClient.mjs +2 -0
  42. package/dist/esm/runtime/addSchemaToClient.mjs.map +1 -1
  43. package/dist/esm/runtime/addSchemaToClientWithInstance.mjs +2 -0
  44. package/dist/esm/runtime/addSchemaToClientWithInstance.mjs.map +1 -1
  45. package/dist/esm/runtime/bridge-types.d.ts +2 -2
  46. package/dist/esm/runtime/client/index.d.ts +6 -6
  47. package/dist/esm/runtime/internals/APIClient.d.ts +2 -2
  48. package/dist/esm/runtime/internals/APIClient.mjs +64 -42
  49. package/dist/esm/runtime/internals/APIClient.mjs.map +1 -1
  50. package/dist/esm/runtime/internals/cancellation.d.ts +10 -0
  51. package/dist/esm/runtime/internals/cancellation.mjs +44 -0
  52. package/dist/esm/runtime/internals/cancellation.mjs.map +1 -0
  53. package/dist/esm/runtime/internals/clientUtils.d.ts +78 -1
  54. package/dist/esm/runtime/internals/clientUtils.mjs +45 -3
  55. package/dist/esm/runtime/internals/clientUtils.mjs.map +1 -1
  56. package/dist/esm/runtime/internals/index.d.ts +1 -0
  57. package/dist/esm/runtime/internals/index.mjs +1 -0
  58. package/dist/esm/runtime/internals/index.mjs.map +1 -1
  59. package/dist/esm/runtime/internals/operations/custom.d.ts +1 -1
  60. package/dist/esm/runtime/internals/operations/custom.mjs +91 -85
  61. package/dist/esm/runtime/internals/operations/custom.mjs.map +1 -1
  62. package/dist/esm/runtime/internals/operations/get.d.ts +1 -1
  63. package/dist/esm/runtime/internals/operations/get.mjs +71 -65
  64. package/dist/esm/runtime/internals/operations/get.mjs.map +1 -1
  65. package/dist/esm/runtime/internals/operations/indexQuery.d.ts +1 -1
  66. package/dist/esm/runtime/internals/operations/indexQuery.mjs +66 -60
  67. package/dist/esm/runtime/internals/operations/indexQuery.mjs.map +1 -1
  68. package/dist/esm/runtime/internals/operations/list.d.ts +1 -1
  69. package/dist/esm/runtime/internals/operations/list.mjs +90 -84
  70. package/dist/esm/runtime/internals/operations/list.mjs.map +1 -1
  71. package/dist/esm/runtime/internals/server/generateModelsProperty.mjs +4 -4
  72. package/dist/esm/runtime/internals/server/generateModelsProperty.mjs.map +1 -1
  73. package/dist/esm/runtime/internals/utils/clientProperties/generateModelsProperty.mjs +4 -4
  74. package/dist/esm/runtime/internals/utils/clientProperties/generateModelsProperty.mjs.map +1 -1
  75. package/dist/esm/runtime/utils/index.d.ts +1 -0
  76. package/dist/esm/runtime/utils/index.mjs +1 -0
  77. package/dist/esm/runtime/utils/index.mjs.map +1 -1
  78. package/dist/esm/runtime/utils/selfAwareAsync.d.ts +19 -0
  79. package/dist/esm/runtime/utils/selfAwareAsync.mjs +37 -0
  80. package/dist/esm/runtime/utils/selfAwareAsync.mjs.map +1 -0
  81. package/dist/meta/cjs.tsbuildinfo +1 -1
  82. package/package.json +2 -2
  83. package/src/ClientSchema/Core/ClientModel.ts +29 -0
  84. package/src/ClientSchema/utilities/ResolveField.ts +26 -6
  85. package/src/ModelType.ts +31 -0
  86. package/src/SchemaProcessor.ts +77 -2
  87. package/src/runtime/addSchemaToClient.ts +2 -0
  88. package/src/runtime/addSchemaToClientWithInstance.ts +2 -0
  89. package/src/runtime/bridge-types.ts +2 -2
  90. package/src/runtime/client/index.ts +207 -184
  91. package/src/runtime/internals/APIClient.ts +67 -23
  92. package/src/runtime/internals/cancellation.ts +57 -0
  93. package/src/runtime/internals/clientUtils.ts +61 -1
  94. package/src/runtime/internals/index.ts +1 -0
  95. package/src/runtime/internals/operations/custom.ts +117 -109
  96. package/src/runtime/internals/operations/get.ts +111 -95
  97. package/src/runtime/internals/operations/indexQuery.ts +100 -94
  98. package/src/runtime/internals/operations/list.ts +132 -119
  99. package/src/runtime/internals/server/generateModelsProperty.ts +31 -28
  100. package/src/runtime/internals/utils/clientProperties/generateModelsProperty.ts +36 -33
  101. package/src/runtime/utils/index.ts +1 -0
  102. package/src/runtime/utils/selfAwareAsync.ts +39 -0
@@ -507,202 +507,225 @@ type IndexQueryMethod<
507
507
  type ModelTypesClient<
508
508
  Model extends ClientSchemaByEntityTypeBaseShape['models'][string],
509
509
  FlatModel extends Record<string, unknown> = ResolvedModel<Model['type']>,
510
- > = IndexQueryMethods<Model> & {
511
- create: (
512
- model: Model['createType'],
513
- options?: {
514
- authMode?: AuthMode;
515
- authToken?: string;
516
- headers?: CustomHeaders;
517
- },
518
- ) => SingularReturnValue<Model['type']>;
519
- update: (
520
- model: Model['updateType'],
521
- options?: {
522
- authMode?: AuthMode;
523
- authToken?: string;
524
- headers?: CustomHeaders;
525
- },
526
- ) => SingularReturnValue<Model['type']>;
527
- delete: (
528
- identifier: Model['deleteType'],
529
- options?: {
530
- authMode?: AuthMode;
531
- authToken?: string;
532
- headers?: CustomHeaders;
533
- },
534
- ) => SingularReturnValue<Model['type']>;
535
- get<SelectionSet extends ReadonlyArray<ModelPath<FlatModel>> = never[]>(
536
- identifier: Model['identifier'],
537
- options?: {
538
- selectionSet?: SelectionSet;
539
- authMode?: AuthMode;
540
- authToken?: string;
541
- headers?: CustomHeaders;
542
- },
543
- ): SingularReturnValue<Prettify<ReturnValue<Model, FlatModel, SelectionSet>>>;
544
- list<SelectionSet extends ReadonlyArray<ModelPath<FlatModel>> = never[]>(
545
- options?: ListCpkOptions<Model> & {
546
- filter?: ModelFilter<Model>;
547
- limit?: number;
548
- nextToken?: string | null;
549
- selectionSet?: SelectionSet;
550
- authMode?: AuthMode;
551
- authToken?: string;
552
- headers?: CustomHeaders;
510
+ > = IndexQueryMethods<Model> &
511
+ // Omit any disabled operations
512
+ Omit<
513
+ {
514
+ create: (
515
+ model: Model['createType'],
516
+ options?: {
517
+ authMode?: AuthMode;
518
+ authToken?: string;
519
+ headers?: CustomHeaders;
520
+ },
521
+ ) => SingularReturnValue<Model['type']>;
522
+ update: (
523
+ model: Model['updateType'],
524
+ options?: {
525
+ authMode?: AuthMode;
526
+ authToken?: string;
527
+ headers?: CustomHeaders;
528
+ },
529
+ ) => SingularReturnValue<Model['type']>;
530
+ delete: (
531
+ identifier: Model['deleteType'],
532
+ options?: {
533
+ authMode?: AuthMode;
534
+ authToken?: string;
535
+ headers?: CustomHeaders;
536
+ },
537
+ ) => SingularReturnValue<Model['type']>;
538
+
539
+ get<SelectionSet extends ReadonlyArray<ModelPath<FlatModel>> = never[]>(
540
+ identifier: Model['identifier'],
541
+ options?: {
542
+ selectionSet?: SelectionSet;
543
+ authMode?: AuthMode;
544
+ authToken?: string;
545
+ headers?: CustomHeaders;
546
+ },
547
+ ): SingularReturnValue<
548
+ Prettify<ReturnValue<Model, FlatModel, SelectionSet>>
549
+ >;
550
+ list<SelectionSet extends ReadonlyArray<ModelPath<FlatModel>> = never[]>(
551
+ options?: ListCpkOptions<Model> & {
552
+ filter?: ModelFilter<Model>;
553
+ limit?: number;
554
+ nextToken?: string | null;
555
+ selectionSet?: SelectionSet;
556
+ authMode?: AuthMode;
557
+ authToken?: string;
558
+ headers?: CustomHeaders;
559
+ },
560
+ ): ListReturnValue<Prettify<ReturnValue<Model, FlatModel, SelectionSet>>>;
561
+
562
+ onCreate<
563
+ SelectionSet extends ReadonlyArray<ModelPath<FlatModel>> = never[],
564
+ >(options?: {
565
+ filter?: ModelSubscriptionFilter<Model>;
566
+ selectionSet?: SelectionSet;
567
+ authMode?: AuthMode;
568
+ authToken?: string;
569
+ headers?: CustomHeaders;
570
+ }): ObservedReturnValue<
571
+ Prettify<ReturnValue<Model, FlatModel, SelectionSet>>
572
+ >;
573
+ onUpdate<
574
+ SelectionSet extends ReadonlyArray<ModelPath<FlatModel>> = never[],
575
+ >(options?: {
576
+ filter?: ModelSubscriptionFilter<Model>;
577
+ selectionSet?: SelectionSet;
578
+ authMode?: AuthMode;
579
+ authToken?: string;
580
+ headers?: CustomHeaders;
581
+ }): ObservedReturnValue<
582
+ Prettify<ReturnValue<Model, FlatModel, SelectionSet>>
583
+ >;
584
+ onDelete<
585
+ SelectionSet extends ReadonlyArray<ModelPath<FlatModel>> = never[],
586
+ >(options?: {
587
+ filter?: ModelSubscriptionFilter<Model>;
588
+ selectionSet?: SelectionSet;
589
+ authMode?: AuthMode;
590
+ authToken?: string;
591
+ headers?: CustomHeaders;
592
+ }): ObservedReturnValue<
593
+ Prettify<ReturnValue<Model, FlatModel, SelectionSet>>
594
+ >;
595
+ observeQuery<
596
+ SelectionSet extends ModelPath<FlatModel>[] = never[],
597
+ >(options?: {
598
+ filter?: ModelFilter<Model>;
599
+ selectionSet?: SelectionSet;
600
+ authMode?: AuthMode;
601
+ authToken?: string;
602
+ }): ObserveQueryReturnValue<
603
+ Prettify<ReturnValue<Model, FlatModel, SelectionSet>>
604
+ >;
553
605
  },
554
- ): ListReturnValue<Prettify<ReturnValue<Model, FlatModel, SelectionSet>>>;
555
- onCreate<
556
- SelectionSet extends ReadonlyArray<ModelPath<FlatModel>> = never[],
557
- >(options?: {
558
- filter?: ModelSubscriptionFilter<Model>;
559
- selectionSet?: SelectionSet;
560
- authMode?: AuthMode;
561
- authToken?: string;
562
- headers?: CustomHeaders;
563
- }): ObservedReturnValue<
564
- Prettify<ReturnValue<Model, FlatModel, SelectionSet>>
565
- >;
566
- onUpdate<
567
- SelectionSet extends ReadonlyArray<ModelPath<FlatModel>> = never[],
568
- >(options?: {
569
- filter?: ModelSubscriptionFilter<Model>;
570
- selectionSet?: SelectionSet;
571
- authMode?: AuthMode;
572
- authToken?: string;
573
- headers?: CustomHeaders;
574
- }): ObservedReturnValue<
575
- Prettify<ReturnValue<Model, FlatModel, SelectionSet>>
576
- >;
577
- onDelete<
578
- SelectionSet extends ReadonlyArray<ModelPath<FlatModel>> = never[],
579
- >(options?: {
580
- filter?: ModelSubscriptionFilter<Model>;
581
- selectionSet?: SelectionSet;
582
- authMode?: AuthMode;
583
- authToken?: string;
584
- headers?: CustomHeaders;
585
- }): ObservedReturnValue<
586
- Prettify<ReturnValue<Model, FlatModel, SelectionSet>>
606
+ keyof Model['__meta']['disabledOperations']
587
607
  >;
588
- observeQuery<
589
- SelectionSet extends ModelPath<FlatModel>[] = never[],
590
- >(options?: {
591
- filter?: ModelFilter<Model>;
592
- selectionSet?: SelectionSet;
593
- authMode?: AuthMode;
594
- authToken?: string;
595
- }): ObserveQueryReturnValue<
596
- Prettify<ReturnValue<Model, FlatModel, SelectionSet>>
597
- >;
598
- };
599
608
 
600
609
  type ModelTypesSSRCookies<
601
610
  Model extends ClientSchemaByEntityTypeBaseShape['models'][string],
602
611
  FlatModel extends Record<string, unknown> = ResolvedModel<Model['type']>,
603
- > = IndexQueryMethods<Model> & {
604
- create: (
605
- model: Model['createType'],
606
- options?: {
607
- authMode?: AuthMode;
608
- authToken?: string;
609
- headers?: CustomHeaders;
610
- },
611
- ) => SingularReturnValue<Model['type']>;
612
- update: (
613
- model: Model['updateType'],
614
- options?: {
615
- authMode?: AuthMode;
616
- authToken?: string;
617
- headers?: CustomHeaders;
618
- },
619
- ) => SingularReturnValue<Model['type']>;
620
- delete: (
621
- identifier: Model['deleteType'],
622
- options?: {
623
- authMode?: AuthMode;
624
- authToken?: string;
625
- headers?: CustomHeaders;
626
- },
627
- ) => SingularReturnValue<Model['type']>;
628
- get<SelectionSet extends ReadonlyArray<ModelPath<FlatModel>> = never[]>(
629
- identifier: Model['identifier'],
630
- options?: {
631
- selectionSet?: SelectionSet;
632
- authMode?: AuthMode;
633
- authToken?: string;
634
- headers?: CustomHeaders;
635
- },
636
- ): SingularReturnValue<Prettify<ReturnValue<Model, FlatModel, SelectionSet>>>;
637
- list<SelectionSet extends ReadonlyArray<ModelPath<FlatModel>> = never[]>(
638
- options?: ListCpkOptions<Model> & {
639
- filter?: ModelFilter<Model>;
640
- sortDirection?: ModelSortDirection;
641
- limit?: number;
642
- nextToken?: string | null;
643
- selectionSet?: SelectionSet;
644
- authMode?: AuthMode;
645
- authToken?: string;
646
- headers?: CustomHeaders;
612
+ > = IndexQueryMethods<Model> &
613
+ Omit<
614
+ {
615
+ create: (
616
+ model: Model['createType'],
617
+ options?: {
618
+ authMode?: AuthMode;
619
+ authToken?: string;
620
+ headers?: CustomHeaders;
621
+ },
622
+ ) => SingularReturnValue<Model['type']>;
623
+ update: (
624
+ model: Model['updateType'],
625
+ options?: {
626
+ authMode?: AuthMode;
627
+ authToken?: string;
628
+ headers?: CustomHeaders;
629
+ },
630
+ ) => SingularReturnValue<Model['type']>;
631
+ delete: (
632
+ identifier: Model['deleteType'],
633
+ options?: {
634
+ authMode?: AuthMode;
635
+ authToken?: string;
636
+ headers?: CustomHeaders;
637
+ },
638
+ ) => SingularReturnValue<Model['type']>;
639
+
640
+ get<SelectionSet extends ReadonlyArray<ModelPath<FlatModel>> = never[]>(
641
+ identifier: Model['identifier'],
642
+ options?: {
643
+ selectionSet?: SelectionSet;
644
+ authMode?: AuthMode;
645
+ authToken?: string;
646
+ headers?: CustomHeaders;
647
+ },
648
+ ): SingularReturnValue<
649
+ Prettify<ReturnValue<Model, FlatModel, SelectionSet>>
650
+ >;
651
+ list<SelectionSet extends ReadonlyArray<ModelPath<FlatModel>> = never[]>(
652
+ options?: ListCpkOptions<Model> & {
653
+ filter?: ModelFilter<Model>;
654
+ sortDirection?: ModelSortDirection;
655
+ limit?: number;
656
+ nextToken?: string | null;
657
+ selectionSet?: SelectionSet;
658
+ authMode?: AuthMode;
659
+ authToken?: string;
660
+ headers?: CustomHeaders;
661
+ },
662
+ ): ListReturnValue<Prettify<ReturnValue<Model, FlatModel, SelectionSet>>>;
647
663
  },
648
- ): ListReturnValue<Prettify<ReturnValue<Model, FlatModel, SelectionSet>>>;
649
- };
664
+ keyof Model['__meta']['disabledOperations']
665
+ >;
650
666
 
651
667
  type ModelTypesSSRRequest<
652
668
  Model extends ClientSchemaByEntityTypeBaseShape['models'][string],
653
669
  FlatModel extends Record<string, unknown> = ResolvedModel<Model['type']>,
654
- > = IndexQueryMethods<Model, 'REQUEST'> & {
655
- create: (
656
- contextSpec: AmplifyServer.ContextSpec,
657
- model: Model['createType'],
658
- options?: {
659
- authMode?: AuthMode;
660
- authToken?: string;
661
- headers?: CustomHeaders;
662
- },
663
- ) => SingularReturnValue<Model['type']>;
664
- update: (
665
- contextSpec: AmplifyServer.ContextSpec,
666
- model: Model['updateType'],
667
- options?: {
668
- authMode?: AuthMode;
669
- authToken?: string;
670
- headers?: CustomHeaders;
671
- },
672
- ) => SingularReturnValue<Model['type']>;
673
- delete: (
674
- contextSpec: AmplifyServer.ContextSpec,
675
- identifier: Model['deleteType'],
676
- options?: {
677
- authMode?: AuthMode;
678
- authToken?: string;
679
- headers?: CustomHeaders;
680
- },
681
- ) => SingularReturnValue<Model['type']>;
682
- get<SelectionSet extends ReadonlyArray<ModelPath<FlatModel>> = never[]>(
683
- contextSpec: AmplifyServer.ContextSpec,
684
- identifier: Model['identifier'],
685
- options?: {
686
- selectionSet?: SelectionSet;
687
- authMode?: AuthMode;
688
- authToken?: string;
689
- headers?: CustomHeaders;
670
+ > = IndexQueryMethods<Model, 'REQUEST'> &
671
+ Omit<
672
+ {
673
+ create: (
674
+ contextSpec: AmplifyServer.ContextSpec,
675
+ model: Model['createType'],
676
+ options?: {
677
+ authMode?: AuthMode;
678
+ authToken?: string;
679
+ headers?: CustomHeaders;
680
+ },
681
+ ) => SingularReturnValue<Model['type']>;
682
+ update: (
683
+ contextSpec: AmplifyServer.ContextSpec,
684
+ model: Model['updateType'],
685
+ options?: {
686
+ authMode?: AuthMode;
687
+ authToken?: string;
688
+ headers?: CustomHeaders;
689
+ },
690
+ ) => SingularReturnValue<Model['type']>;
691
+ delete: (
692
+ contextSpec: AmplifyServer.ContextSpec,
693
+ identifier: Model['deleteType'],
694
+ options?: {
695
+ authMode?: AuthMode;
696
+ authToken?: string;
697
+ headers?: CustomHeaders;
698
+ },
699
+ ) => SingularReturnValue<Model['type']>;
700
+
701
+ get<SelectionSet extends ReadonlyArray<ModelPath<FlatModel>> = never[]>(
702
+ contextSpec: AmplifyServer.ContextSpec,
703
+ identifier: Model['identifier'],
704
+ options?: {
705
+ selectionSet?: SelectionSet;
706
+ authMode?: AuthMode;
707
+ authToken?: string;
708
+ headers?: CustomHeaders;
709
+ },
710
+ ): SingularReturnValue<
711
+ Prettify<ReturnValue<Model, FlatModel, SelectionSet>>
712
+ >;
713
+ list<SelectionSet extends ReadonlyArray<ModelPath<FlatModel>> = never[]>(
714
+ contextSpec: AmplifyServer.ContextSpec,
715
+ options?: ListCpkOptions<Model> & {
716
+ filter?: ModelFilter<Model>;
717
+ sortDirection?: ModelSortDirection;
718
+ limit?: number;
719
+ nextToken?: string | null;
720
+ selectionSet?: SelectionSet;
721
+ authMode?: AuthMode;
722
+ authToken?: string;
723
+ headers?: CustomHeaders;
724
+ },
725
+ ): ListReturnValue<Prettify<ReturnValue<Model, FlatModel, SelectionSet>>>;
690
726
  },
691
- ): SingularReturnValue<Prettify<ReturnValue<Model, FlatModel, SelectionSet>>>;
692
- list<SelectionSet extends ReadonlyArray<ModelPath<FlatModel>> = never[]>(
693
- contextSpec: AmplifyServer.ContextSpec,
694
- options?: ListCpkOptions<Model> & {
695
- filter?: ModelFilter<Model>;
696
- sortDirection?: ModelSortDirection;
697
- limit?: number;
698
- nextToken?: string | null;
699
- selectionSet?: SelectionSet;
700
- authMode?: AuthMode;
701
- authToken?: string;
702
- headers?: CustomHeaders;
703
- },
704
- ): ListReturnValue<Prettify<ReturnValue<Model, FlatModel, SelectionSet>>>;
705
- };
727
+ keyof Model['__meta']['disabledOperations']
728
+ >;
706
729
 
707
730
  type ContextType = 'CLIENT' | 'COOKIES' | 'REQUEST';
708
731
 
@@ -21,7 +21,8 @@ import {
21
21
  } from '../bridge-types';
22
22
 
23
23
  import { CustomHeaders } from '../client';
24
- import { resolveOwnerFields, capitalize } from '../utils';
24
+ import { resolveOwnerFields, capitalize, selfAwareAsync } from '../utils';
25
+ import { extendCancellability } from './cancellation';
25
26
 
26
27
  import type { IndexMeta } from './operations/indexQuery';
27
28
 
@@ -246,6 +247,11 @@ export function initializeModel(
246
247
  {},
247
248
  );
248
249
 
250
+ // if get is disabled on the related model
251
+ if ((client as any).models[relatedModelName].get === undefined) {
252
+ break;
253
+ }
254
+
249
255
  if (context) {
250
256
  initializedRelationalFields[fieldName] = (
251
257
  contextSpec: AmplifyServer.ContextSpec,
@@ -333,21 +339,33 @@ export function initializeModel(
333
339
  },
334
340
  );
335
341
 
342
+ // if list is disabled on the related model
343
+ if ((client as any).models[relatedModelName].list === undefined) {
344
+ break;
345
+ }
346
+
336
347
  if (context) {
337
348
  initializedRelationalFields[fieldName] = (
338
349
  contextSpec: AmplifyServer.ContextSpec,
339
350
  options?: LazyLoadOptions,
340
351
  ) => {
341
352
  if (record[parentPk]) {
342
- return (client as any).models[relatedModelName]
343
- .list(contextSpec, {
353
+ return selfAwareAsync(async (resultPromise) => {
354
+ const basePromise = (client as any).models[
355
+ relatedModelName
356
+ ].list(contextSpec, {
344
357
  filter: { and: hasManyFilter },
345
358
  limit: options?.limit,
346
359
  nextToken: options?.nextToken,
347
360
  authMode: options?.authMode || authMode,
348
361
  authToken: options?.authToken || authToken,
349
- })
350
- .then(mapResult);
362
+ });
363
+ const extendedBase = extendCancellability(
364
+ basePromise,
365
+ resultPromise,
366
+ );
367
+ return mapResult((await extendedBase) as any);
368
+ });
351
369
  }
352
370
 
353
371
  return [];
@@ -357,15 +375,22 @@ export function initializeModel(
357
375
  options?: LazyLoadOptions,
358
376
  ) => {
359
377
  if (record[parentPk]) {
360
- return (client as any).models[relatedModelName]
361
- .list({
378
+ return selfAwareAsync(async (resultPromise) => {
379
+ const basePromise = (client as any).models[
380
+ relatedModelName
381
+ ].list({
362
382
  filter: { and: hasManyFilter },
363
383
  limit: options?.limit,
364
384
  nextToken: options?.nextToken,
365
385
  authMode: options?.authMode || authMode,
366
386
  authToken: options?.authToken || authToken,
367
- })
368
- .then(mapResult);
387
+ });
388
+ const extendedBase = extendCancellability(
389
+ basePromise,
390
+ resultPromise,
391
+ );
392
+ return mapResult((await extendedBase) as any);
393
+ });
369
394
  }
370
395
 
371
396
  return [];
@@ -385,21 +410,33 @@ export function initializeModel(
385
410
  },
386
411
  );
387
412
 
413
+ // if list is disabled on the related model
414
+ if ((client as any).models[relatedModelName].list === undefined) {
415
+ break;
416
+ }
417
+
388
418
  if (context) {
389
419
  initializedRelationalFields[fieldName] = (
390
420
  contextSpec: AmplifyServer.ContextSpec,
391
421
  options?: LazyLoadOptions,
392
422
  ) => {
393
423
  if (record[parentPk]) {
394
- return (client as any).models[relatedModelName]
395
- .list(contextSpec, {
424
+ return selfAwareAsync(async (resultPromise) => {
425
+ const basePromise = (client as any).models[
426
+ relatedModelName
427
+ ].list(contextSpec, {
396
428
  filter: { and: hasManyFilter },
397
429
  limit: options?.limit,
398
430
  nextToken: options?.nextToken,
399
431
  authMode: options?.authMode || authMode,
400
432
  authToken: options?.authToken || authToken,
401
- })
402
- .then(mapResult);
433
+ });
434
+ const extendedBase = extendCancellability(
435
+ basePromise,
436
+ resultPromise,
437
+ );
438
+ return mapResult((await extendedBase) as any);
439
+ });
403
440
  }
404
441
 
405
442
  return [];
@@ -409,15 +446,22 @@ export function initializeModel(
409
446
  options?: LazyLoadOptions,
410
447
  ) => {
411
448
  if (record[parentPk]) {
412
- return (client as any).models[relatedModelName]
413
- .list({
449
+ return selfAwareAsync(async (resultPromise) => {
450
+ const basePromise = (client as any).models[
451
+ relatedModelName
452
+ ].list({
414
453
  filter: { and: hasManyFilter },
415
454
  limit: options?.limit,
416
455
  nextToken: options?.nextToken,
417
456
  authMode: options?.authMode || authMode,
418
457
  authToken: options?.authToken || authToken,
419
- })
420
- .then(mapResult);
458
+ });
459
+ const extendedBase = extendCancellability(
460
+ basePromise,
461
+ resultPromise,
462
+ );
463
+ return mapResult((await extendedBase) as any);
464
+ });
421
465
  }
422
466
 
423
467
  return [];
@@ -437,7 +481,7 @@ export function initializeModel(
437
481
 
438
482
  export const graphQLOperationsInfo = {
439
483
  CREATE: { operationPrefix: 'create', usePlural: false },
440
- READ: { operationPrefix: 'get', usePlural: false },
484
+ GET: { operationPrefix: 'get', usePlural: false },
441
485
  UPDATE: { operationPrefix: 'update', usePlural: false },
442
486
  DELETE: { operationPrefix: 'delete', usePlural: false },
443
487
  LIST: { operationPrefix: 'list', usePlural: true },
@@ -445,7 +489,7 @@ export const graphQLOperationsInfo = {
445
489
  ONCREATE: { operationPrefix: 'onCreate', usePlural: false },
446
490
  ONUPDATE: { operationPrefix: 'onUpdate', usePlural: false },
447
491
  ONDELETE: { operationPrefix: 'onDelete', usePlural: false },
448
- OBSERVE_QUERY: { operationPrefix: 'observeQuery', usePlural: false },
492
+ OBSERVEQUERY: { operationPrefix: 'observeQuery', usePlural: false },
449
493
  } as const;
450
494
  export type ModelOperation = keyof typeof graphQLOperationsInfo;
451
495
 
@@ -999,7 +1043,7 @@ export function generateGraphQLDocument(
999
1043
  graphQLOperationType ?? (graphQLOperationType = 'mutation');
1000
1044
  // TODO(Eslint): this this case clause correct without the break statement?
1001
1045
  // eslint-disable-next-line no-fallthrough
1002
- case 'READ':
1046
+ case 'GET':
1003
1047
  graphQLArguments ?? (graphQLArguments = getPkArgs);
1004
1048
  graphQLSelectionSet ?? (graphQLSelectionSet = selectionSetFields);
1005
1049
  // TODO(Eslint): this this case clause correct without the break statement?
@@ -1047,7 +1091,7 @@ export function generateGraphQLDocument(
1047
1091
  graphQLOperationType ?? (graphQLOperationType = 'subscription');
1048
1092
  graphQLSelectionSet ?? (graphQLSelectionSet = selectionSetFields);
1049
1093
  break;
1050
- case 'OBSERVE_QUERY':
1094
+ case 'OBSERVEQUERY':
1051
1095
  default:
1052
1096
  throw new Error(
1053
1097
  'Internal error: Attempted to generate graphql document for observeQuery. Please report this error.',
@@ -1120,7 +1164,7 @@ export function buildGraphQLVariables(
1120
1164
  : {},
1121
1165
  };
1122
1166
  break;
1123
- case 'READ':
1167
+ case 'GET':
1124
1168
  case 'DELETE':
1125
1169
  // only identifiers are sent
1126
1170
  if (arg) {
@@ -1194,7 +1238,7 @@ export function buildGraphQLVariables(
1194
1238
  variables = { filter: arg.filter };
1195
1239
  }
1196
1240
  break;
1197
- case 'OBSERVE_QUERY':
1241
+ case 'OBSERVEQUERY':
1198
1242
  throw new Error(
1199
1243
  'Internal error: Attempted to build variables for observeQuery. Please report this error.',
1200
1244
  );
@@ -0,0 +1,57 @@
1
+ import { BaseClient } from '../bridge-types';
2
+
3
+ /**
4
+ * A map of cancellable promise "extensions".
5
+ *
6
+ * Each entry value must either be a directly `cancel()`-able promise, or must
7
+ * refer to another entry.
8
+ *
9
+ * When cancellation of a promise is requested, cancel
10
+ * will check to see if the promise exists in the map. If it does, it pulls
11
+ * the value and repeats the check. If not, it will perform the underlying
12
+ * cancel operation.
13
+ */
14
+ const promiseMap = new WeakMap<Promise<any>, Promise<any>>();
15
+
16
+ export function extendCancellability<T>(
17
+ existingCancellablePromise: Promise<T>,
18
+ newPromiseToRegister: Promise<any>,
19
+ ): Promise<T> {
20
+ promiseMap.set(newPromiseToRegister, existingCancellablePromise);
21
+
22
+ return existingCancellablePromise.finally(() => {
23
+ promiseMap.delete(newPromiseToRegister);
24
+ });
25
+ }
26
+
27
+ /**
28
+ * Wraps the existing `cancel()` method with logic to iteratively search for
29
+ * the corresponding base level promise, if needed, that the core graphql client
30
+ * knows how to cancel.
31
+ *
32
+ * @param client
33
+ */
34
+ export function upgradeClientCancellation(client: BaseClient) {
35
+ const innerCancel = client.cancel.bind(client);
36
+
37
+ client.cancel = function (
38
+ promise: Promise<any>,
39
+ message?: string | undefined,
40
+ ): boolean {
41
+ const visited = new Set<Promise<any>>();
42
+ let targetPromise: Promise<any> | undefined = promise;
43
+
44
+ while (targetPromise && promiseMap.has(targetPromise)) {
45
+ if (visited.has(targetPromise))
46
+ throw new Error(
47
+ 'A cycle was detected in the modeled graphql cancellation chain. This is a bug. Please report it!',
48
+ );
49
+ visited.add(targetPromise);
50
+ targetPromise = promiseMap.get(targetPromise);
51
+ }
52
+
53
+ // call `innerCancel` with `targetPromise!` to defer to existing implementation
54
+ // on how to handle `null | undefined` or otherwise "non-cancellable" objects.
55
+ return innerCancel(targetPromise!, message);
56
+ };
57
+ }