@arcaelas/dynamite 1.0.29 → 3.1.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 (142) hide show
  1. package/README.md +13 -13
  2. package/{src → build/cjs}/@types/index.d.ts +26 -1
  3. package/build/cjs/@types/index.js.map +1 -0
  4. package/{src → build/cjs}/core/client.d.ts +22 -19
  5. package/build/cjs/core/client.js +384 -0
  6. package/build/cjs/core/client.js.map +1 -0
  7. package/build/cjs/core/decorator.d.ts +50 -0
  8. package/build/cjs/core/decorator.js +52 -0
  9. package/build/cjs/core/decorator.js.map +1 -0
  10. package/build/cjs/core/table.d.ts +73 -0
  11. package/build/cjs/core/table.js +953 -0
  12. package/build/cjs/core/table.js.map +1 -0
  13. package/build/cjs/decorators/hooks.d.ts +35 -0
  14. package/build/cjs/decorators/hooks.js +50 -0
  15. package/build/cjs/decorators/hooks.js.map +1 -0
  16. package/build/cjs/decorators/indexes.d.ts +20 -0
  17. package/build/cjs/decorators/indexes.js +45 -0
  18. package/build/cjs/decorators/indexes.js.map +1 -0
  19. package/{src → build/cjs}/decorators/relations.d.ts +8 -7
  20. package/{src → build/cjs}/decorators/relations.js +9 -8
  21. package/build/cjs/decorators/relations.js.map +1 -0
  22. package/build/cjs/decorators/timestamps.d.ts +20 -0
  23. package/build/cjs/decorators/timestamps.js +34 -0
  24. package/build/cjs/decorators/timestamps.js.map +1 -0
  25. package/build/cjs/decorators/transforms.d.ts +41 -0
  26. package/build/cjs/decorators/transforms.js +98 -0
  27. package/build/cjs/decorators/transforms.js.map +1 -0
  28. package/{src → build/cjs}/index.d.ts +7 -3
  29. package/{src → build/cjs}/index.js +15 -6
  30. package/build/cjs/index.js.map +1 -0
  31. package/build/cjs/package.json +1 -0
  32. package/build/cjs/test/basic.d.ts +1 -0
  33. package/build/cjs/test/basic.js +248 -0
  34. package/build/cjs/test/basic.js.map +1 -0
  35. package/build/cjs/test/bulk.d.ts +1 -0
  36. package/build/cjs/test/bulk.js +108 -0
  37. package/build/cjs/test/bulk.js.map +1 -0
  38. package/build/cjs/test/contracts.d.ts +1 -0
  39. package/build/cjs/test/contracts.js +343 -0
  40. package/build/cjs/test/contracts.js.map +1 -0
  41. package/build/cjs/test/filters.d.ts +1 -0
  42. package/build/cjs/test/filters.js +190 -0
  43. package/build/cjs/test/filters.js.map +1 -0
  44. package/build/cjs/test/hooks.d.ts +1 -0
  45. package/build/cjs/test/hooks.js +191 -0
  46. package/build/cjs/test/hooks.js.map +1 -0
  47. package/build/cjs/test/index.js +38 -0
  48. package/build/cjs/test/index.js.map +1 -0
  49. package/build/cjs/test/query_scan.d.ts +1 -0
  50. package/build/cjs/test/query_scan.js +195 -0
  51. package/build/cjs/test/query_scan.js.map +1 -0
  52. package/build/cjs/test/relations.d.ts +1 -0
  53. package/build/cjs/test/relations.js +246 -0
  54. package/build/cjs/test/relations.js.map +1 -0
  55. package/build/cjs/test/transactions.d.ts +1 -0
  56. package/build/cjs/test/transactions.js +145 -0
  57. package/build/cjs/test/transactions.js.map +1 -0
  58. package/{src → build/cjs}/utils/relations.js +1 -8
  59. package/build/cjs/utils/relations.js.map +1 -0
  60. package/build/cjs/utils/ulid.d.ts +10 -0
  61. package/build/cjs/utils/ulid.js +55 -0
  62. package/build/cjs/utils/ulid.js.map +1 -0
  63. package/build/esm/@types/index.d.ts +213 -0
  64. package/build/esm/@types/index.js +8 -0
  65. package/build/esm/@types/index.js.map +1 -0
  66. package/build/esm/core/client.d.ts +96 -0
  67. package/build/esm/core/client.js +375 -0
  68. package/build/esm/core/client.js.map +1 -0
  69. package/build/esm/core/decorator.d.ts +50 -0
  70. package/build/esm/core/decorator.js +47 -0
  71. package/build/esm/core/decorator.js.map +1 -0
  72. package/build/esm/core/table.d.ts +73 -0
  73. package/build/esm/core/table.js +950 -0
  74. package/build/esm/core/table.js.map +1 -0
  75. package/build/esm/decorators/hooks.d.ts +35 -0
  76. package/build/esm/decorators/hooks.js +47 -0
  77. package/build/esm/decorators/hooks.js.map +1 -0
  78. package/build/esm/decorators/indexes.d.ts +20 -0
  79. package/build/esm/decorators/indexes.js +42 -0
  80. package/build/esm/decorators/indexes.js.map +1 -0
  81. package/build/esm/decorators/relations.d.ts +75 -0
  82. package/build/esm/decorators/relations.js +112 -0
  83. package/build/esm/decorators/relations.js.map +1 -0
  84. package/build/esm/decorators/timestamps.d.ts +20 -0
  85. package/build/esm/decorators/timestamps.js +31 -0
  86. package/build/esm/decorators/timestamps.js.map +1 -0
  87. package/build/esm/decorators/transforms.d.ts +41 -0
  88. package/build/esm/decorators/transforms.js +92 -0
  89. package/build/esm/decorators/transforms.js.map +1 -0
  90. package/build/esm/index.d.ts +19 -0
  91. package/build/esm/index.js +26 -0
  92. package/build/esm/index.js.map +1 -0
  93. package/build/esm/package.json +1 -0
  94. package/build/esm/test/basic.d.ts +1 -0
  95. package/build/esm/test/basic.js +245 -0
  96. package/build/esm/test/basic.js.map +1 -0
  97. package/build/esm/test/bulk.d.ts +1 -0
  98. package/build/esm/test/bulk.js +105 -0
  99. package/build/esm/test/bulk.js.map +1 -0
  100. package/build/esm/test/contracts.d.ts +1 -0
  101. package/build/esm/test/contracts.js +340 -0
  102. package/build/esm/test/contracts.js.map +1 -0
  103. package/build/esm/test/filters.d.ts +1 -0
  104. package/build/esm/test/filters.js +187 -0
  105. package/build/esm/test/filters.js.map +1 -0
  106. package/build/esm/test/hooks.d.ts +1 -0
  107. package/build/esm/test/hooks.js +188 -0
  108. package/build/esm/test/hooks.js.map +1 -0
  109. package/build/esm/test/index.d.ts +1 -0
  110. package/build/esm/test/index.js +33 -0
  111. package/build/esm/test/index.js.map +1 -0
  112. package/build/esm/test/query_scan.d.ts +1 -0
  113. package/build/esm/test/query_scan.js +192 -0
  114. package/build/esm/test/query_scan.js.map +1 -0
  115. package/build/esm/test/relations.d.ts +1 -0
  116. package/build/esm/test/relations.js +243 -0
  117. package/build/esm/test/relations.js.map +1 -0
  118. package/build/esm/test/transactions.d.ts +1 -0
  119. package/build/esm/test/transactions.js +142 -0
  120. package/build/esm/test/transactions.js.map +1 -0
  121. package/build/esm/utils/relations.d.ts +42 -0
  122. package/build/esm/utils/relations.js +207 -0
  123. package/build/esm/utils/relations.js.map +1 -0
  124. package/build/esm/utils/ulid.d.ts +10 -0
  125. package/build/esm/utils/ulid.js +52 -0
  126. package/build/esm/utils/ulid.js.map +1 -0
  127. package/package.json +31 -9
  128. package/src/core/client.js +0 -296
  129. package/src/core/decorator.d.ts +0 -29
  130. package/src/core/decorator.js +0 -103
  131. package/src/core/table.d.ts +0 -81
  132. package/src/core/table.js +0 -892
  133. package/src/decorators/indexes.d.ts +0 -38
  134. package/src/decorators/indexes.js +0 -59
  135. package/src/decorators/timestamps.d.ts +0 -54
  136. package/src/decorators/timestamps.js +0 -72
  137. package/src/decorators/transforms.d.ts +0 -99
  138. package/src/decorators/transforms.js +0 -166
  139. package/src/index.test.js +0 -37
  140. /package/{src → build/cjs}/@types/index.js +0 -0
  141. /package/{src/index.test.d.ts → build/cjs/test/index.d.ts} +0 -0
  142. /package/{src → build/cjs}/utils/relations.d.ts +0 -0
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+ /**
3
+ * @file decorator.ts
4
+ * @description Minimal decorator system with Symbol storage
5
+ * @description Sistema de decoradores minimalista con Symbol storage
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.SCHEMA = void 0;
9
+ exports.getSchema = getSchema;
10
+ exports.decorator = decorator;
11
+ exports.SCHEMA = Symbol('dynamite:schema');
12
+ function toSnakePlural(str) {
13
+ const snake = str
14
+ .replace(/([A-Z])/g, "_$1")
15
+ .toLowerCase()
16
+ .replace(/^_/, "");
17
+ return snake.endsWith("s") ? snake : snake + "s";
18
+ }
19
+ /**
20
+ * @description Get (or lazily create) the Schema bound to a model class, with columns and hooks initialized.
21
+ * @description Obtiene (o crea perezosamente) el Schema asociado a una clase de modelo, con columns y hooks inicializados.
22
+ * @param ctor Model class constructor / Constructor de la clase del modelo
23
+ */
24
+ function getSchema(ctor) {
25
+ if (!Object.prototype.hasOwnProperty.call(ctor, exports.SCHEMA)) {
26
+ ctor[exports.SCHEMA] = {
27
+ name: toSnakePlural(ctor.name),
28
+ primary_key: 'id',
29
+ gsis: new Set(),
30
+ hooks: { beforeCreate: [], afterCreate: [], beforeUpdate: [], afterUpdate: [], beforeDestroy: [], afterDestroy: [] },
31
+ columns: {},
32
+ };
33
+ }
34
+ return ctor[exports.SCHEMA];
35
+ }
36
+ function resolve(target, propertyKey) {
37
+ const schema = getSchema(target.constructor);
38
+ const key = String(propertyKey);
39
+ schema.columns[key] ||= { name: key, get: [], set: [], store: {} };
40
+ return [schema, schema.columns[key]];
41
+ }
42
+ /**
43
+ * @description Factory to create decorators with argument support and composition
44
+ * @description Factory para crear decoradores con soporte de argumentos y composición
45
+ */
46
+ function decorator(callback) {
47
+ return (...params) => (target, propertyKey) => {
48
+ const [, col] = resolve(target, propertyKey);
49
+ callback(target.constructor, col, params);
50
+ };
51
+ }
52
+ //# sourceMappingURL=decorator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decorator.js","sourceRoot":"","sources":["../../../src/core/decorator.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AAuDH,8BAWC;AAaD,8BAKC;AAlFY,QAAA,MAAM,GAAG,MAAM,CAAC,iBAAiB,CAAC,CAAC;AAwChD,SAAS,aAAa,CAAC,GAAW;IAChC,MAAM,KAAK,GAAG,GAAG;SACd,OAAO,CAAC,UAAU,EAAE,KAAK,CAAC;SAC1B,WAAW,EAAE;SACb,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IACrB,OAAO,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,GAAG,CAAC;AACnD,CAAC;AAED;;;;GAIG;AACH,SAAgB,SAAS,CAAC,IAAS;IACjC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,cAAM,CAAC,EAAE,CAAC;QACxD,IAAI,CAAC,cAAM,CAAC,GAAG;YACb,IAAI,EAAE,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC;YAC9B,WAAW,EAAE,IAAI;YACjB,IAAI,EAAE,IAAI,GAAG,EAAU;YACvB,KAAK,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE;YACpH,OAAO,EAAE,EAAE;SACZ,CAAC;IACJ,CAAC;IACD,OAAO,IAAI,CAAC,cAAM,CAAC,CAAC;AACtB,CAAC;AAED,SAAS,OAAO,CAAC,MAAW,EAAE,WAA4B;IACxD,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IAC7C,MAAM,GAAG,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;IAChC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;IACnE,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;AACvC,CAAC;AAED;;;GAGG;AACH,SAAgB,SAAS,CAAC,QAAmF;IAC3G,OAAO,CAAC,GAAG,MAAa,EAAE,EAAE,CAAC,CAAC,MAAW,EAAE,WAA4B,EAAE,EAAE;QACzE,MAAM,CAAC,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;QAC7C,QAAQ,CAAC,MAAM,CAAC,WAAW,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;IAC5C,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,73 @@
1
+ import type { InferAttributes, PickByType, QueryOperator, WhereOptions } from "../@types/index";
2
+ import { TransactionContext } from "./client";
3
+ import type { Schema } from "./decorator";
4
+ import { SCHEMA } from "./decorator";
5
+ type WhereFilters<M> = {
6
+ [K in keyof InferAttributes<M>]?: InferAttributes<M>[K] | {
7
+ [N in QueryOperator]?: InferAttributes<M>[K];
8
+ };
9
+ };
10
+ /**
11
+ * @description Lifecycle hook signature. `this` is the model instance; update hooks receive the changes delta.
12
+ * @description Firma de un hook de ciclo de vida. `this` es la instancia del modelo; los hooks de update reciben el delta de cambios.
13
+ */
14
+ export type HookFn<T = any> = (this: T, changes?: Partial<InferAttributes<T>>) => void | Promise<void>;
15
+ /**
16
+ * @description Options for mutation operations. `hook` is opt-in (default false); `tx` runs the operation inside a transaction.
17
+ * @description Opciones para operaciones de mutación. `hook` es opt-in (default false); `tx` ejecuta la operación dentro de una transacción.
18
+ */
19
+ export interface MutationOptions {
20
+ hook?: boolean;
21
+ tx?: TransactionContext;
22
+ }
23
+ export default class Table<T = any> {
24
+ static [SCHEMA]: Schema;
25
+ constructor(props?: Partial<T>);
26
+ toJSON(): Record<string, unknown>;
27
+ /**
28
+ * @description Convierte la instancia a un payload listo para DynamoDB
29
+ * @returns Objeto con nombres de columnas de DB y valores apropiados
30
+ */
31
+ private _toDBPayload;
32
+ toString(): string;
33
+ save(options?: MutationOptions): Promise<boolean>;
34
+ update(data: Partial<InferAttributes<T>>, options?: MutationOptions): Promise<boolean>;
35
+ destroy(options?: MutationOptions): Promise<null>;
36
+ forceDestroy(options?: MutationOptions): Promise<null>;
37
+ attach<R>(RelatedModel: new () => R, related_id: string, pivot_data?: Record<string, any>): Promise<void>;
38
+ detach<R>(RelatedModel: new () => R, related_id: string): Promise<void>;
39
+ /**
40
+ * Sincronizar relación ManyToMany reemplazando todas las relaciones existentes
41
+ * @param RelatedModel Modelo relacionado
42
+ * @param related_ids Array de IDs a sincronizar
43
+ */
44
+ sync<R>(RelatedModel: new () => R, related_ids: string[]): Promise<void>;
45
+ /**
46
+ * @description Run the registered hooks of a given type on an instance, in declaration order.
47
+ * @description Ejecuta los hooks registrados de un tipo dado sobre una instancia, en orden de declaración.
48
+ */
49
+ private static _run_hooks;
50
+ static create<M extends Table>(this: new (data: any) => M, data: Partial<InferAttributes<M>>, options?: MutationOptions): Promise<M>;
51
+ /**
52
+ * @description Extract PK value from filters if the filter is a simple PK equality. Returns null otherwise.
53
+ * @description Extrae el valor de PK de los filtros si es una igualdad simple por PK. Retorna null en otro caso.
54
+ */
55
+ private static _extractPK;
56
+ static update<M extends Table>(this: new (data: any) => M, updates: Partial<InferAttributes<M>>, filters: Partial<InferAttributes<M>>, options?: MutationOptions): Promise<number>;
57
+ static delete<M extends Table>(this: new (data: any) => M, filters: Partial<InferAttributes<M>>, options?: MutationOptions): Promise<number>;
58
+ /**
59
+ * @description Atomically increment a numeric field by amount. Uses DynamoDB SET expression.
60
+ * @description Incrementa atómicamente un campo numérico. Usa expresión SET de DynamoDB.
61
+ */
62
+ private static _atomicAdd;
63
+ static increment<M extends Table>(this: new (data: any) => M, field: keyof PickByType<InferAttributes<M>, number>, amount: number, filters: WhereFilters<M>, options?: MutationOptions): Promise<number>;
64
+ static decrement<M extends Table>(this: new (data: any) => M, field: keyof PickByType<InferAttributes<M>, number>, amount: number, filters: WhereFilters<M>, options?: MutationOptions): Promise<number>;
65
+ increment<K extends keyof PickByType<InferAttributes<T>, number>>(field: K, amount?: number): Promise<void>;
66
+ decrement<K extends keyof PickByType<InferAttributes<T>, number>>(field: K, amount?: number): Promise<void>;
67
+ static where<M extends Table>(this: new (props?: any) => M, key: keyof InferAttributes<M>, value: InferAttributes<M>[typeof key], options?: WhereOptions<M>): Promise<M[]>;
68
+ static where<M extends Table>(this: new (props?: any) => M, key: keyof InferAttributes<M>, operator: QueryOperator, value: any, options?: WhereOptions<M>): Promise<M[]>;
69
+ static where<M extends Table>(this: new (props?: any) => M, filters: WhereFilters<M>, options?: WhereOptions<M>): Promise<M[]>;
70
+ static first<M extends Table>(this: new (props?: any) => M, filters: WhereFilters<M>, options?: WhereOptions<M>): Promise<M | undefined>;
71
+ static last<M extends Table>(this: new (props?: any) => M, filters?: WhereFilters<M>, options?: WhereOptions<M>): Promise<M | undefined>;
72
+ }
73
+ export {};