electrodb 1.10.2 → 1.12.1

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/index.d.ts CHANGED
@@ -1,3 +1,4 @@
1
+
1
2
  export type DocumentClientMethod = (parameters: any) => {promise: () => Promise<any>};
2
3
 
3
4
  export type DocumentClient = {
@@ -79,6 +80,7 @@ export type CollectionWhereCallback<E extends {[name: string]: Entity<any, any,
79
80
 
80
81
  export type CollectionWhereClause<E extends {[name: string]: Entity<any, any, any, any>}, A extends string, F extends string, C extends string, S extends Schema<A,F,C>, I extends Partial<AllEntityAttributes<E>>, T> = (where: CollectionWhereCallback<E, I>) => T;
81
82
 
83
+
82
84
  export interface WhereRecordsActionOptions<E extends {[name: string]: Entity<any, any, any, any>}, A extends string, F extends string, C extends string, S extends Schema<A,F,C>, I extends Partial<AllEntityAttributes<E>>, Items, IndexCompositeAttributes> {
83
85
  go: GoRecord<Items>;
84
86
  params: ParamRecord;
@@ -349,6 +351,13 @@ export type CollectionItem<SERVICE extends Service<any>, COLLECTION extends keyo
349
351
  : never>
350
352
  : never
351
353
 
354
+ export interface QueryBranches<A extends string,
355
+ F extends string, C extends string, S extends Schema<A,F,C>, ResponseItem, IndexCompositeAttributes> {
356
+ go: GoQueryTerminal<A,F,C,S,ResponseItem>;
357
+ params: ParamTerminal<A,F,C,S,ResponseItem>;
358
+ page: PageQueryTerminal<A,F,C,S,ResponseItem,IndexCompositeAttributes>;
359
+ where: WhereClause<A,F,C,S,Item<A,F,C,S,S["attributes"]>,QueryBranches<A,F,C,S,ResponseItem,IndexCompositeAttributes>>
360
+ }
352
361
 
353
362
  export interface RecordsActionOptions<A extends string,
354
363
  F extends string, C extends string, S extends Schema<A,F,C>, Items, IndexCompositeAttributes> {
@@ -359,11 +368,16 @@ export interface RecordsActionOptions<A extends string,
359
368
  }
360
369
 
361
370
  export interface SingleRecordOperationOptions<A extends string, F extends string, C extends string, S extends Schema<A,F,C>, ResponseType> {
362
- go: GoRecord<ResponseType, QueryOptions>;
363
- params: ParamRecord<QueryOptions>;
371
+ go: GoGetTerminal<A,F,C,S, ResponseType>;
372
+ params: ParamTerminal<A,F,C,S,ResponseType>;
364
373
  where: WhereClause<A,F,C,S,Item<A,F,C,S,S["attributes"]>,SingleRecordOperationOptions<A,F,C,S,ResponseType>>;
365
374
  }
366
375
 
376
+ export interface BatchGetRecordOperationOptions<A extends string, F extends string, C extends string, S extends Schema<A,F,C>, ResponseType> {
377
+ go: GoBatchGetTerminal<A,F,C,S,ResponseType>
378
+ params: ParamTerminal<A,F,C,S,ResponseType>;
379
+ }
380
+
367
381
  export interface PutRecordOperationOptions<A extends string, F extends string, C extends string, S extends Schema<A,F,C>, ResponseType> {
368
382
  go: GoRecord<ResponseType, PutQueryOptions>;
369
383
  params: ParamRecord<PutQueryOptions>;
@@ -406,17 +420,17 @@ export type RemoveRecord<A extends string, F extends string, C extends string, S
406
420
  export type DataUpdateMethodRecord<A extends string, F extends string, C extends string, S extends Schema<A,F,C>, SetAttr, IndexCompositeAttributes, TableItem> =
407
421
  DataUpdateMethod<A,F,C,S, UpdateData<A,F,C,S>, SetRecordActionOptions<A,F,C,S, SetAttr, IndexCompositeAttributes, TableItem>>
408
422
 
409
- interface QueryOperations<A extends string, F extends string, C extends string, S extends Schema<A,F,C>, CompositeAttributes, TableItem, IndexCompositeAttributes> {
410
- between: (skCompositeAttributesStart: CompositeAttributes, skCompositeAttributesEnd: CompositeAttributes) => RecordsActionOptions<A,F,C,S, Array<TableItem>,IndexCompositeAttributes>;
411
- gt: (skCompositeAttributes: CompositeAttributes) => RecordsActionOptions<A,F,C,S, Array<TableItem>,IndexCompositeAttributes>;
412
- gte: (skCompositeAttributes: CompositeAttributes) => RecordsActionOptions<A,F,C,S, Array<TableItem>,IndexCompositeAttributes>;
413
- lt: (skCompositeAttributes: CompositeAttributes) => RecordsActionOptions<A,F,C,S, Array<TableItem>,IndexCompositeAttributes>;
414
- lte: (skCompositeAttributes: CompositeAttributes) => RecordsActionOptions<A,F,C,S, Array<TableItem>,IndexCompositeAttributes>;
415
- begins: (skCompositeAttributes: CompositeAttributes) => RecordsActionOptions<A,F,C,S, Array<TableItem>,IndexCompositeAttributes>;
416
- go: GoRecord<Array<TableItem>>;
417
- params: ParamRecord;
418
- page: PageRecord<Array<TableItem>,IndexCompositeAttributes>;
419
- where: WhereClause<A,F,C,S,Item<A,F,C,S,S["attributes"]>,RecordsActionOptions<A,F,C,S,Array<TableItem>,IndexCompositeAttributes>>
423
+ interface QueryOperations<A extends string, F extends string, C extends string, S extends Schema<A,F,C>, CompositeAttributes, ResponseItem, IndexCompositeAttributes> {
424
+ between: (skCompositeAttributesStart: CompositeAttributes, skCompositeAttributesEnd: CompositeAttributes) => QueryBranches<A,F,C,S, ResponseItem, IndexCompositeAttributes>;
425
+ gt: (skCompositeAttributes: CompositeAttributes) => QueryBranches<A,F,C,S, ResponseItem,IndexCompositeAttributes>;
426
+ gte: (skCompositeAttributes: CompositeAttributes) => QueryBranches<A,F,C,S, ResponseItem,IndexCompositeAttributes>;
427
+ lt: (skCompositeAttributes: CompositeAttributes) => QueryBranches<A,F,C,S, ResponseItem,IndexCompositeAttributes>;
428
+ lte: (skCompositeAttributes: CompositeAttributes) => QueryBranches<A,F,C,S, ResponseItem,IndexCompositeAttributes>;
429
+ begins: (skCompositeAttributes: CompositeAttributes) => QueryBranches<A,F,C,S, ResponseItem,IndexCompositeAttributes>;
430
+ go: GoQueryTerminal<A,F,C,S,ResponseItem>;
431
+ params: ParamTerminal<A,F,C,S,ResponseItem>;
432
+ page: PageQueryTerminal<A,F,C,S,ResponseItem,IndexCompositeAttributes>;
433
+ where: WhereClause<A,F,C,S,Item<A,F,C,S,S["attributes"]>,QueryBranches<A,F,C,S,ResponseItem,IndexCompositeAttributes>>
420
434
  }
421
435
 
422
436
  export type Queries<A extends string, F extends string, C extends string, S extends Schema<A,F,C>> = {
@@ -424,7 +438,7 @@ export type Queries<A extends string, F extends string, C extends string, S exte
424
438
  IndexSKAttributes<A,F,C,S,I> extends infer SK
425
439
  // If there is no SK, dont show query operations (when an empty array is provided)
426
440
  ? [keyof SK] extends [never]
427
- ? RecordsActionOptions<A,F,C,S, ResponseItem<A,F,C,S>[], AllTableIndexCompositeAttributes<A,F,C,S> & Required<CompositeAttributes>>
441
+ ? QueryBranches<A,F,C,S, ResponseItem<A,F,C,S>, AllTableIndexCompositeAttributes<A,F,C,S> & Required<CompositeAttributes>>
428
442
  // If there is no SK, dont show query operations (When no PK is specified)
429
443
  : S["indexes"][I] extends IndexWithSortKey
430
444
  ? QueryOperations<
@@ -434,7 +448,7 @@ export type Queries<A extends string, F extends string, C extends string, S exte
434
448
  ResponseItem<A,F,C,S>,
435
449
  AllTableIndexCompositeAttributes<A,F,C,S> & Required<CompositeAttributes> & SK
436
450
  >
437
- : RecordsActionOptions<A,F,C,S, ResponseItem<A,F,C,S>[], AllTableIndexCompositeAttributes<A,F,C,S> & Required<CompositeAttributes> & SK>
451
+ : QueryBranches<A,F,C,S, ResponseItem<A,F,C,S>, AllTableIndexCompositeAttributes<A,F,C,S> & Required<CompositeAttributes> & SK>
438
452
  : never
439
453
  }
440
454
 
@@ -464,7 +478,8 @@ export interface QueryOptions {
464
478
  }
465
479
 
466
480
  // subset of QueryOptions
467
- export interface ParseOptions {
481
+ export interface ParseOptions<Attributes> {
482
+ attributes?: ReadonlyArray<Attributes>;
468
483
  ignoreOwnership?: boolean;
469
484
  }
470
485
 
@@ -510,6 +525,162 @@ export type OptionalDefaultEntityIdentifiers = {
510
525
  __edb_v__?: string;
511
526
  }
512
527
 
528
+ interface GoBatchGetTerminalOptions<Attributes> {
529
+ raw?: boolean;
530
+ table?: string;
531
+ limit?: number;
532
+ params?: object;
533
+ includeKeys?: boolean;
534
+ originalErr?: boolean;
535
+ ignoreOwnership?: boolean;
536
+ pages?: number;
537
+ attributes?: ReadonlyArray<Attributes>;
538
+ unprocessed?: "raw" | "item";
539
+ concurrency?: number;
540
+ preserveBatchOrder?: boolean;
541
+ listeners?: Array<ElectroEventListener>;
542
+ logger?: ElectroEventListener;
543
+ }
544
+
545
+ interface GoQueryTerminalOptions<Attributes> {
546
+ raw?: boolean;
547
+ table?: string;
548
+ limit?: number;
549
+ params?: object;
550
+ includeKeys?: boolean;
551
+ originalErr?: boolean;
552
+ ignoreOwnership?: boolean;
553
+ pages?: number;
554
+ attributes?: ReadonlyArray<Attributes>;
555
+ listeners?: Array<ElectroEventListener>;
556
+ logger?: ElectroEventListener;
557
+ }
558
+
559
+ interface PageQueryTerminalOptions<Attributes> extends GoQueryTerminalOptions<Attributes> {
560
+ pager?: "raw" | "item" | "named";
561
+ raw?: boolean;
562
+ table?: string;
563
+ limit?: number;
564
+ includeKeys?: boolean;
565
+ originalErr?: boolean;
566
+ ignoreOwnership?: boolean;
567
+ attributes?: ReadonlyArray<Attributes>;
568
+ listeners?: Array<ElectroEventListener>;
569
+ logger?: ElectroEventListener;
570
+ }
571
+
572
+ export interface ParamTerminalOptions<Attributes> {
573
+ table?: string;
574
+ limit?: number;
575
+ params?: object;
576
+ originalErr?: boolean;
577
+ attributes?: ReadonlyArray<Attributes>;
578
+ response?: "default" | "none" | 'all_old' | 'updated_old' | 'all_new' | 'updated_new';
579
+ }
580
+
581
+ type GoBatchGetTerminal<A extends string, F extends string, C extends string, S extends Schema<A,F,C>, ResponseItem> = <Options extends GoBatchGetTerminalOptions<keyof ResponseItem>>(options?: Options) =>
582
+ Options extends GoBatchGetTerminalOptions<infer Attr>
583
+ ? 'preserveBatchOrder' extends keyof Options
584
+ ? Options['preserveBatchOrder'] extends true
585
+ ? Promise<[
586
+ Array<Resolve<{
587
+ [
588
+ Name in keyof ResponseItem as Name extends Attr
589
+ ? Name
590
+ : never
591
+ ]: ResponseItem[Name]
592
+ } | null>>, Array<Resolve<AllTableIndexCompositeAttributes<A,F,C,S>>>
593
+ ]>
594
+ : Promise<[
595
+ Array<Resolve<{
596
+ [
597
+ Name in keyof ResponseItem as Name extends Attr
598
+ ? Name
599
+ : never
600
+ ]: ResponseItem[Name]
601
+ }>>, Array<Resolve<AllTableIndexCompositeAttributes<A,F,C,S>>>
602
+ ]>
603
+ : Promise<[
604
+ Array<Resolve<{
605
+ [
606
+ Name in keyof ResponseItem as Name extends Attr
607
+ ? Name
608
+ : never
609
+ ]: ResponseItem[Name]
610
+ }>>, Array<Resolve<AllTableIndexCompositeAttributes<A,F,C,S>>>
611
+ ]>
612
+ : 'preserveBatchOrder' extends keyof Options
613
+ ? Options['preserveBatchOrder'] extends true
614
+ ? [Array<Resolve<ResponseItem | null>>, Array<Resolve<AllTableIndexCompositeAttributes<A,F,C,S>>>]
615
+ : [Array<Resolve<ResponseItem>>, Array<Resolve<AllTableIndexCompositeAttributes<A,F,C,S>>>]
616
+ : [Array<Resolve<ResponseItem>>, Array<Resolve<AllTableIndexCompositeAttributes<A,F,C,S>>>]
617
+
618
+ type GoGetTerminal<A extends string, F extends string, C extends string, S extends Schema<A,F,C>, ResponseItem> = <Options extends GoQueryTerminalOptions<keyof ResponseItem>>(options?: Options) =>
619
+ Options extends GoQueryTerminalOptions<infer Attr>
620
+ ? Promise<{
621
+ [
622
+ Name in keyof ResponseItem as Name extends Attr
623
+ ? Name
624
+ : never
625
+ ]: ResponseItem[Name]
626
+ } | null>
627
+ : Promise<ResponseItem | null>
628
+
629
+ export type GoQueryTerminal<A extends string, F extends string, C extends string, S extends Schema<A,F,C>, Item> = <Options extends GoQueryTerminalOptions<keyof Item>>(options?: Options) =>
630
+ Options extends GoQueryTerminalOptions<infer Attr>
631
+ ? Promise<Array<{
632
+ [
633
+ Name in keyof Item as Name extends Attr
634
+ ? Name
635
+ : never
636
+ ]: Item[Name]
637
+ }>>
638
+ : Promise<Array<Item>>
639
+
640
+ export type EntityParseSingleItem<A extends string, F extends string, C extends string, S extends Schema<A,F,C>, ResponseItem> =
641
+ <Options extends ParseOptions<keyof ResponseItem>>(item: ParseSingleInput, options?: Options) =>
642
+ Options extends ParseOptions<infer Attr>
643
+ ? {
644
+ [
645
+ Name in keyof ResponseItem as Name extends Attr
646
+ ? Name
647
+ : never
648
+ ]: ResponseItem[Name]
649
+ } | null
650
+ : ResponseItem | null
651
+
652
+ export type EntityParseMultipleItems<A extends string, F extends string, C extends string, S extends Schema<A,F,C>, ResponseItem> =
653
+ <Options extends ParseOptions<keyof ResponseItem>>(item: ParseMultiInput, options?: Options) =>
654
+ Options extends ParseOptions<infer Attr>
655
+ ? Array<{
656
+ [
657
+ Name in keyof ResponseItem as Name extends Attr
658
+ ? Name
659
+ : never
660
+ ]: ResponseItem[Name]
661
+ }>
662
+ : Array<ResponseItem>
663
+
664
+
665
+ export type PageQueryTerminal<A extends string, F extends string, C extends string, S extends Schema<A,F,C>, Item, CompositeAttributes> = <Options extends PageQueryTerminalOptions<keyof Item>>(page?: (CompositeAttributes & OptionalDefaultEntityIdentifiers) | null, options?: Options) =>
666
+ Options extends GoQueryTerminalOptions<infer Attr>
667
+ ? Promise<[
668
+ (CompositeAttributes & OptionalDefaultEntityIdentifiers) | null,
669
+ Array<{
670
+ [
671
+ Name in keyof Item as Name extends Attr
672
+ ? Name
673
+ : never
674
+ ]: Item[Name]
675
+ }>
676
+ ]>
677
+ : Promise<[
678
+ (CompositeAttributes & OptionalDefaultEntityIdentifiers) | null,
679
+ Array<ResponseType>
680
+ ]>;
681
+
682
+ export type ParamTerminal<A extends string, F extends string, C extends string, S extends Schema<A,F,C>, ResponseItem> = <P extends any = any, Options extends ParamTerminalOptions<keyof ResponseItem> = ParamTerminalOptions<keyof ResponseItem>>(options?: Options) => P;
683
+
513
684
  export type GoRecord<ResponseType, Options = QueryOptions> = <T = ResponseType>(options?: Options) => Promise<T>;
514
685
 
515
686
  export type BatchGoRecord<ResponseType, AlternateResponseType> = <O extends BulkOptions>(options?: O) =>
@@ -678,7 +849,6 @@ export interface NestedEnumAttribute {
678
849
  readonly label?: string;
679
850
  }
680
851
 
681
-
682
852
  export interface EnumAttribute {
683
853
  readonly type: ReadonlyArray<string>;
684
854
  readonly required?: boolean;
@@ -862,6 +1032,60 @@ export interface NestedStringSetAttribute {
862
1032
  readonly field?: string;
863
1033
  }
864
1034
 
1035
+ export interface NestedEnumNumberSetAttribute {
1036
+ readonly type: "set";
1037
+ readonly items: ReadonlyArray<number>;
1038
+ readonly required?: boolean;
1039
+ readonly hidden?: boolean;
1040
+ readonly readOnly?: boolean;
1041
+ readonly get?: (val: Array<number>, item: any) => Array<number> | undefined | void;
1042
+ readonly set?: (val?: Array<number>, item?: any) => Array<number> | undefined | void;
1043
+ readonly default?: Array<number> | (() => Array<number>);
1044
+ readonly validate?: ((val: Array<number>) => boolean) | ((val: Array<number>) => void) | ((val: Array<number>) => string | void) | RegExp;
1045
+ readonly field?: string;
1046
+ }
1047
+
1048
+ export interface EnumNumberSetAttribute {
1049
+ readonly type: "set";
1050
+ readonly items: ReadonlyArray<number>;
1051
+ readonly required?: boolean;
1052
+ readonly hidden?: boolean;
1053
+ readonly readOnly?: boolean;
1054
+ readonly get?: (val: Array<number>, item: any) => Array<number> | undefined | void;
1055
+ readonly set?: (val?: Array<number>, item?: any) => Array<number> | undefined | void;
1056
+ readonly default?: Array<number> | (() => Array<number>);
1057
+ readonly validate?: ((val: Array<number>) => boolean) | ((val: Array<number>) => void) | ((val: Array<number>) => string | void) | RegExp;
1058
+ readonly field?: string;
1059
+ readonly watch?: ReadonlyArray<string> | "*";
1060
+ }
1061
+
1062
+ export interface NestedEnumStringSetAttribute {
1063
+ readonly type: "set";
1064
+ readonly items: ReadonlyArray<string>;
1065
+ readonly required?: boolean;
1066
+ readonly hidden?: boolean;
1067
+ readonly readOnly?: boolean;
1068
+ readonly get?: (val: Array<string>, item: any) => Array<string> | undefined | void;
1069
+ readonly set?: (val?: Array<string>, item?: any) => Array<string> | undefined | void;
1070
+ readonly default?: Array<string> | (() => Array<string>);
1071
+ readonly validate?: ((val: Array<string>) => boolean) | ((val: Array<string>) => void) | ((val: Array<string>) => string | void) | RegExp;
1072
+ readonly field?: string;
1073
+ }
1074
+
1075
+ export interface EnumStringSetAttribute {
1076
+ readonly type: "set";
1077
+ readonly items: ReadonlyArray<string>;
1078
+ readonly required?: boolean;
1079
+ readonly hidden?: boolean;
1080
+ readonly readOnly?: boolean;
1081
+ readonly get?: (val: Array<string>, item: any) => Array<string> | undefined | void;
1082
+ readonly set?: (val?: Array<string>, item?: any) => Array<string> | undefined | void;
1083
+ readonly default?: Array<string> | (() => Array<string>);
1084
+ readonly validate?: ((val: Array<string>) => boolean) | ((val: Array<string>) => void) | ((val: Array<string>) => string | void) | RegExp;
1085
+ readonly field?: string;
1086
+ readonly watch?: ReadonlyArray<string> | "*";
1087
+ }
1088
+
865
1089
  export interface StringSetAttribute {
866
1090
  readonly type: "set";
867
1091
  readonly items: "string";
@@ -903,6 +1127,25 @@ export interface NumberSetAttribute {
903
1127
  readonly watch?: ReadonlyArray<string> | "*";
904
1128
  }
905
1129
 
1130
+ type StaticAttribute = {
1131
+ readonly type: "static";
1132
+ readonly hidden?: boolean;
1133
+ value: string | number | boolean;
1134
+ readonly field?: string;
1135
+ }
1136
+
1137
+ type CustomAttribute<T extends any = any> = {
1138
+ readonly type: "custom";
1139
+ readonly [CustomAttributeSymbol]: T;
1140
+ readonly hidden?: boolean;
1141
+ readonly get?: (val: T, item: any) => T | undefined | void;
1142
+ readonly set?: (val?: T, item?: any) => T | undefined | void;
1143
+ readonly default?: T | (() => T);
1144
+ readonly validate?: ((val: T) => boolean) | ((val: T) => void) | ((val: T) => string | void);
1145
+ readonly field?: string;
1146
+ readonly watch?: ReadonlyArray<string> | "*";
1147
+ };
1148
+
906
1149
  export type Attribute =
907
1150
  BooleanAttribute
908
1151
  | NumberAttribute
@@ -914,7 +1157,11 @@ export type Attribute =
914
1157
  | NumberSetAttribute
915
1158
  | StringListAttribute
916
1159
  | NumberListAttribute
917
- | MapListAttribute;
1160
+ | MapListAttribute
1161
+ | StaticAttribute
1162
+ | CustomAttribute
1163
+ | EnumNumberSetAttribute
1164
+ | EnumStringSetAttribute;
918
1165
 
919
1166
  export type NestedAttributes =
920
1167
  NestedBooleanAttribute
@@ -927,7 +1174,10 @@ export type NestedAttributes =
927
1174
  | NestedMapListAttribute
928
1175
  | NestedStringSetAttribute
929
1176
  | NestedNumberSetAttribute
930
- | NestedEnumAttribute;
1177
+ | NestedEnumAttribute
1178
+ | NestedEnumAttribute
1179
+ | NestedEnumNumberSetAttribute
1180
+ | NestedEnumStringSetAttribute;
931
1181
 
932
1182
  export interface IndexWithSortKey {
933
1183
  readonly sk: {
@@ -1001,7 +1251,9 @@ type PartialDefinedKeys<T> = {
1001
1251
  }
1002
1252
 
1003
1253
  export type ItemAttribute<A extends Attribute> =
1004
- A["type"] extends infer R
1254
+ A extends CustomAttribute<infer T>
1255
+ ? T
1256
+ : A["type"] extends infer R
1005
1257
  ? R extends "string" ? string
1006
1258
  : R extends "number" ? number
1007
1259
  : R extends "boolean" ? boolean
@@ -1030,28 +1282,20 @@ export type ItemAttribute<A extends Attribute> =
1030
1282
  ? A["items"] extends infer I
1031
1283
  ? I extends "string" ? string[]
1032
1284
  : I extends "number" ? number[]
1033
- : never
1285
+ : I extends ReadonlyArray<infer ENUM> ? ENUM[]
1286
+ : never
1034
1287
  : never
1035
1288
  : never
1036
1289
  : R extends "any" ? any
1037
1290
  : never
1038
1291
  : never
1039
1292
 
1040
- type FormattedPutMapAttributes<A extends MapAttribute> = {
1041
- [P in keyof A["properties"]]: A["properties"][P] extends infer M
1042
- ? M extends HiddenAttribute
1043
- ? false
1044
- : M extends DefaultedAttribute
1045
- ? false
1046
- : M extends RequiredAttribute
1047
- ? true
1048
- : false
1049
- : false
1050
- }
1051
-
1052
1293
  export type ReturnedAttribute<A extends Attribute> =
1053
- A["type"] extends infer R
1054
- ? R extends "string" ? string
1294
+ A extends CustomAttribute<infer T>
1295
+ ? T
1296
+ : A["type"] extends infer R
1297
+ ? R extends "static" ? never
1298
+ : R extends "string" ? string
1055
1299
  : R extends "number" ? number
1056
1300
  : R extends "boolean" ? boolean
1057
1301
  : R extends ReadonlyArray<infer E> ? E
@@ -1079,27 +1323,6 @@ export type ReturnedAttribute<A extends Attribute> =
1079
1323
  : never
1080
1324
  : never
1081
1325
  }
1082
- // SkipKeys<{
1083
- // [P in keyof A["properties"]]: A["properties"][P] extends infer M
1084
- // ? M extends Attribute
1085
- // ? M extends HiddenAttribute
1086
- // ? SkipValue
1087
- // : M extends RequiredAttribute
1088
- // ? ReturnedAttribute<M>
1089
- // : SkipValue
1090
- // : never
1091
- // : never
1092
- // }> & SkipKeys<{
1093
- // [P in keyof A["properties"]]?: A["properties"][P] extends infer M
1094
- // ? M extends Attribute
1095
- // ? M extends HiddenAttribute
1096
- // ? SkipValue
1097
- // : M extends RequiredAttribute
1098
- // ? SkipValue
1099
- // : ReturnedAttribute<M> | undefined
1100
- // : never
1101
- // : never
1102
- // }>
1103
1326
  : never
1104
1327
  : R extends "list"
1105
1328
  ? "items" extends keyof A
@@ -1114,7 +1337,8 @@ export type ReturnedAttribute<A extends Attribute> =
1114
1337
  ? A["items"] extends infer I
1115
1338
  ? I extends "string" ? string[]
1116
1339
  : I extends "number" ? number[]
1117
- : never
1340
+ : I extends ReadonlyArray<infer ENUM> ? ENUM[]
1341
+ : never
1118
1342
  : never
1119
1343
  : never
1120
1344
  : R extends "any" ? any
@@ -1122,8 +1346,11 @@ export type ReturnedAttribute<A extends Attribute> =
1122
1346
  : never
1123
1347
 
1124
1348
  export type CreatedAttribute<A extends Attribute> =
1125
- A["type"] extends infer R
1126
- ? R extends "string" ? string
1349
+ A extends CustomAttribute<infer T>
1350
+ ? T
1351
+ : A["type"] extends infer R
1352
+ ? R extends "static" ? never
1353
+ : R extends "string" ? string
1127
1354
  : R extends "number" ? number
1128
1355
  : R extends "boolean" ? boolean
1129
1356
  : R extends ReadonlyArray<infer E> ? E
@@ -1151,27 +1378,6 @@ export type CreatedAttribute<A extends Attribute> =
1151
1378
  : never
1152
1379
  : never
1153
1380
  }
1154
- // ? SkipKeys<{
1155
- // [P in keyof A["properties"]]: A["properties"][P] extends infer M
1156
- // ? M extends Attribute
1157
- // ? M extends HiddenAttribute
1158
- // ? SkipValue
1159
- // : M extends DefaultedAttribute
1160
- // ? SkipValue
1161
- // : M extends RequiredAttribute
1162
- // ? CreatedAttribute<M>
1163
- // : SkipValue
1164
- // : never
1165
- // : never
1166
- // }> & SkipKeys<{
1167
- // [P in keyof A["properties"]]?: A["properties"][P] extends infer M
1168
- // ? M extends Attribute
1169
- // ? M extends HiddenAttribute
1170
- // ? SkipValue
1171
- // : CreatedAttribute<M> | undefined
1172
- // : never
1173
- // : never
1174
- // }>
1175
1381
  : never
1176
1382
  : R extends "list"
1177
1383
  ? "items" extends keyof A
@@ -1186,7 +1392,8 @@ export type CreatedAttribute<A extends Attribute> =
1186
1392
  ? A["items"] extends infer I
1187
1393
  ? I extends "string" ? string[]
1188
1394
  : I extends "number" ? number[]
1189
- : never
1395
+ : I extends ReadonlyArray<infer ENUM> ? ENUM[]
1396
+ : never
1190
1397
  : never
1191
1398
  : never
1192
1399
  : R extends "any" ? any
@@ -1202,10 +1409,13 @@ export type CreatedItem<A extends string, F extends string, C extends string, S
1202
1409
  }
1203
1410
 
1204
1411
  export type EditableItemAttribute<A extends Attribute> =
1205
- A extends ReadOnlyAttribute
1412
+ A extends CustomAttribute<infer T>
1413
+ ? T
1414
+ : A extends ReadOnlyAttribute
1206
1415
  ? never
1207
1416
  : A["type"] extends infer R
1208
- ? R extends "string" ? string
1417
+ ? R extends "static" ? never
1418
+ : R extends "string" ? string
1209
1419
  : R extends "number" ? number
1210
1420
  : R extends "boolean" ? boolean
1211
1421
  : R extends ReadonlyArray<infer E> ? E
@@ -1237,7 +1447,8 @@ export type EditableItemAttribute<A extends Attribute> =
1237
1447
  ? A["items"] extends infer I
1238
1448
  ? I extends "string" ? string[]
1239
1449
  : I extends "number" ? number[]
1240
- : never
1450
+ : I extends ReadonlyArray<infer ENUM> ? ENUM[]
1451
+ : never
1241
1452
  : never
1242
1453
  : never
1243
1454
  : R extends "any" ? any
@@ -1245,10 +1456,13 @@ export type EditableItemAttribute<A extends Attribute> =
1245
1456
  : never
1246
1457
 
1247
1458
  export type UpdatableItemAttribute<A extends Attribute> =
1248
- A extends ReadOnlyAttribute
1459
+ A extends CustomAttribute<infer T>
1460
+ ? T
1461
+ : A extends ReadOnlyAttribute
1249
1462
  ? never
1250
1463
  : A["type"] extends infer R
1251
- ? R extends "string" ? string
1464
+ ? R extends "static" ? never
1465
+ : R extends "string" ? string
1252
1466
  : R extends "number" ? number
1253
1467
  : R extends "boolean" ? boolean
1254
1468
  : R extends ReadonlyArray<infer E> ? E
@@ -1295,7 +1509,8 @@ export type UpdatableItemAttribute<A extends Attribute> =
1295
1509
  ? A["items"] extends infer I
1296
1510
  ? I extends "string" ? string[]
1297
1511
  : I extends "number" ? number[]
1298
- : never
1512
+ : I extends ReadonlyArray<infer ENUM> ? ENUM[]
1513
+ : never
1299
1514
  : never
1300
1515
  : never
1301
1516
  : R extends "any" ? any
@@ -1303,10 +1518,13 @@ export type UpdatableItemAttribute<A extends Attribute> =
1303
1518
  : never
1304
1519
 
1305
1520
  export type RemovableItemAttribute<A extends Attribute> =
1306
- A extends ReadOnlyAttribute | RequiredAttribute
1521
+ A extends CustomAttribute<infer T>
1522
+ ? T
1523
+ : A extends ReadOnlyAttribute | RequiredAttribute
1307
1524
  ? never
1308
1525
  : A["type"] extends infer R
1309
- ? R extends "string" ? string
1526
+ ? R extends "static" ? never
1527
+ : R extends "string" ? string
1310
1528
  : R extends "number" ? number
1311
1529
  : R extends "boolean" ? boolean
1312
1530
  : R extends ReadonlyArray<infer E> ? E
@@ -1338,7 +1556,8 @@ export type RemovableItemAttribute<A extends Attribute> =
1338
1556
  ? A["items"] extends infer I
1339
1557
  ? I extends "string" ? string[]
1340
1558
  : I extends "number" ? number[]
1341
- : never
1559
+ : I extends ReadonlyArray<infer ENUM> ? ENUM[]
1560
+ : never
1342
1561
  : never
1343
1562
  : never
1344
1563
  : R extends "any" ? any
@@ -1483,7 +1702,7 @@ export type RemoveItem<A extends string, F extends string, C extends string, S e
1483
1702
  export type AppendItem<A extends string, F extends string, C extends string, S extends Schema<A,F,C>> =
1484
1703
  {
1485
1704
  [
1486
- P in keyof ItemTypeDescription<A,F,C,S> as ItemTypeDescription<A,F,C,S>[P] extends 'list' | 'any'
1705
+ P in keyof ItemTypeDescription<A,F,C,S> as ItemTypeDescription<A,F,C,S>[P] extends 'list' | 'any' | 'custom'
1487
1706
  ? P
1488
1707
  : never
1489
1708
  ]?: P extends keyof SetItem<A,F,C,S>
@@ -1494,7 +1713,7 @@ export type AppendItem<A extends string, F extends string, C extends string, S e
1494
1713
  export type AddItem<A extends string, F extends string, C extends string, S extends Schema<A,F,C>> =
1495
1714
  {
1496
1715
  [
1497
- P in keyof ItemTypeDescription<A,F,C,S> as ItemTypeDescription<A,F,C,S>[P] extends "number" | "any" | "set"
1716
+ P in keyof ItemTypeDescription<A,F,C,S> as ItemTypeDescription<A,F,C,S>[P] extends 'number' | 'any' | 'set' | 'custom'
1498
1717
  ? P
1499
1718
  : never
1500
1719
  ]?: P extends keyof SetItem<A,F,C,S>
@@ -1505,7 +1724,7 @@ export type AddItem<A extends string, F extends string, C extends string, S exte
1505
1724
  export type SubtractItem<A extends string, F extends string, C extends string, S extends Schema<A,F,C>> =
1506
1725
  {
1507
1726
  [
1508
- P in keyof ItemTypeDescription<A,F,C,S> as ItemTypeDescription<A,F,C,S>[P] extends "number" | "any"
1727
+ P in keyof ItemTypeDescription<A,F,C,S> as ItemTypeDescription<A,F,C,S>[P] extends 'number' | 'any' | 'custom'
1509
1728
  ? P
1510
1729
  : never
1511
1730
  ]?: P extends keyof SetItem<A,F,C,S>
@@ -1516,7 +1735,7 @@ export type SubtractItem<A extends string, F extends string, C extends string, S
1516
1735
  export type DeleteItem<A extends string, F extends string, C extends string, S extends Schema<A,F,C>> =
1517
1736
  {
1518
1737
  [
1519
- P in keyof ItemTypeDescription<A,F,C,S> as ItemTypeDescription<A,F,C,S>[P] extends "any" | "set"
1738
+ P in keyof ItemTypeDescription<A,F,C,S> as ItemTypeDescription<A,F,C,S>[P] extends 'any' | 'set' | 'custom'
1520
1739
  ? P
1521
1740
  : never
1522
1741
  ]?: P extends keyof SetItem<A,F,C,S>
@@ -1526,6 +1745,7 @@ export type DeleteItem<A extends string, F extends string, C extends string, S e
1526
1745
 
1527
1746
  export declare const WhereSymbol: unique symbol;
1528
1747
  export declare const UpdateDataSymbol: unique symbol;
1748
+ export declare const CustomAttributeSymbol: unique symbol;
1529
1749
 
1530
1750
  export type WhereAttributeSymbol<T extends any> =
1531
1751
  { [WhereSymbol]: void }
@@ -1632,9 +1852,8 @@ export class Entity<A extends string, F extends string, C extends string, S exte
1632
1852
  private config?: EntityConfiguration;
1633
1853
  constructor(schema: S, config?: EntityConfiguration);
1634
1854
 
1635
- get(key: AllTableIndexCompositeAttributes<A,F,C,S>): SingleRecordOperationOptions<A,F,C,S, ResponseItem<A,F,C,S> | null>;
1636
- get(key: AllTableIndexCompositeAttributes<A,F,C,S>[]): BulkRecordOperationOptions<A,F,C,S, [Array<Resolve<ResponseItem<A,F,C,S>>>, Array<Resolve<AllTableIndexCompositeAttributes<A,F,C,S>>>], [Array<Resolve<ResponseItem<A,F,C,S>> | null>, Array<Resolve<AllTableIndexCompositeAttributes<A,F,C,S>>>]>;
1637
-
1855
+ get(key: AllTableIndexCompositeAttributes<A,F,C,S>): SingleRecordOperationOptions<A,F,C,S, ResponseItem<A,F,C,S>>;
1856
+ get(key: AllTableIndexCompositeAttributes<A,F,C,S>[]): BatchGetRecordOperationOptions<A,F,C,S, ResponseItem<A,F,C,S>>;
1638
1857
  delete(key: AllTableIndexCompositeAttributes<A,F,C,S>): DeleteRecordOperationOptions<A,F,C,S, ResponseItem<A,F,C,S>>;
1639
1858
  delete(key: AllTableIndexCompositeAttributes<A,F,C,S>[]): BulkRecordOperationOptions<A,F,C,S, AllTableIndexCompositeAttributes<A,F,C,S>[], AllTableIndexCompositeAttributes<A,F,C,S>[]>;
1640
1859
 
@@ -1671,8 +1890,26 @@ export class Entity<A extends string, F extends string, C extends string, S exte
1671
1890
  scan: RecordsActionOptions<A,F,C,S, ResponseItem<A,F,C,S>[], TableIndexCompositeAttributes<A,F,C,S>>;
1672
1891
  query: Queries<A,F,C,S>;
1673
1892
 
1674
- parse(item: ParseSingleInput, options?: ParseOptions): ResponseItem<A,F,C,S> | null;
1675
- parse(item: ParseMultiInput, options?: ParseOptions): ResponseItem<A,F,C,S>[];
1893
+ parse<Options extends ParseOptions<keyof ResponseItem<A,F,C,S>>>(item: ParseSingleInput, options?: Options):
1894
+ Options extends ParseOptions<infer Attr>
1895
+ ? {
1896
+ [
1897
+ Name in keyof ResponseItem<A,F,C,S> as Name extends Attr
1898
+ ? Name
1899
+ : never
1900
+ ]: ResponseItem<A,F,C,S>[Name]
1901
+ } | null
1902
+ : ResponseItem<A,F,C,S> | null
1903
+ parse<Options extends ParseOptions<keyof ResponseItem<A,F,C,S>>>(item: ParseMultiInput, options?: Options):
1904
+ Options extends ParseOptions<infer Attr>
1905
+ ? Array<{
1906
+ [
1907
+ Name in keyof ResponseItem<A,F,C,S> as Name extends Attr
1908
+ ? Name
1909
+ : never
1910
+ ]: ResponseItem<A,F,C,S>[Name]
1911
+ }>
1912
+ : Array<ResponseItem<A,F,C,S>>
1676
1913
  setIdentifier(type: "entity" | "version", value: string): void;
1677
1914
  client: any;
1678
1915
  }
@@ -1688,4 +1925,18 @@ export class Service<E extends {[name: string]: Entity<any, any, any, any>}> {
1688
1925
  entities: E;
1689
1926
  collections: CollectionQueries<E, CollectionAssociations<E>>
1690
1927
  constructor(entities: E, config?: ServiceConfiguration);
1691
- }
1928
+ }
1929
+
1930
+ type CustomAttributeDefinition<T> = {
1931
+ readonly required?: boolean;
1932
+ readonly hidden?: boolean;
1933
+ readonly readOnly?: boolean;
1934
+ readonly get?: (val: T, item: any) => T | undefined | void;
1935
+ readonly set?: (val?: T, item?: any) => T | undefined | void;
1936
+ readonly default?: T | (() => T);
1937
+ readonly validate?: ((val: T) => boolean) | ((val: T) => void) | ((val: T) => string | void);
1938
+ readonly field?: string;
1939
+ readonly watch?: ReadonlyArray<string> | "*";
1940
+ }
1941
+
1942
+ declare function createCustomAttribute<T>(definition?: CustomAttributeDefinition<T>): CustomAttribute<T>;