@decaf-ts/for-typeorm 0.0.6

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 (109) hide show
  1. package/LICENSE.md +21 -0
  2. package/README.md +93 -0
  3. package/dist/for-typeorm.cjs +2553 -0
  4. package/dist/for-typeorm.esm.cjs +2538 -0
  5. package/lib/TypeORMAdapter.cjs +1129 -0
  6. package/lib/TypeORMAdapter.d.ts +221 -0
  7. package/lib/TypeORMDispatch.cjs +134 -0
  8. package/lib/TypeORMDispatch.d.ts +87 -0
  9. package/lib/TypeORMEventSubscriber.cjs +96 -0
  10. package/lib/TypeORMEventSubscriber.d.ts +56 -0
  11. package/lib/TypeORMRepository.cjs +209 -0
  12. package/lib/TypeORMRepository.d.ts +125 -0
  13. package/lib/constants.cjs +43 -0
  14. package/lib/constants.d.ts +39 -0
  15. package/lib/errors.cjs +28 -0
  16. package/lib/errors.d.ts +21 -0
  17. package/lib/esm/TypeORMAdapter.d.ts +221 -0
  18. package/lib/esm/TypeORMAdapter.js +1124 -0
  19. package/lib/esm/TypeORMDispatch.d.ts +87 -0
  20. package/lib/esm/TypeORMDispatch.js +130 -0
  21. package/lib/esm/TypeORMEventSubscriber.d.ts +56 -0
  22. package/lib/esm/TypeORMEventSubscriber.js +93 -0
  23. package/lib/esm/TypeORMRepository.d.ts +125 -0
  24. package/lib/esm/TypeORMRepository.js +206 -0
  25. package/lib/esm/constants.d.ts +39 -0
  26. package/lib/esm/constants.js +40 -0
  27. package/lib/esm/errors.d.ts +21 -0
  28. package/lib/esm/errors.js +24 -0
  29. package/lib/esm/index.d.ts +22 -0
  30. package/lib/esm/index.js +25 -0
  31. package/lib/esm/indexes/generator.d.ts +50 -0
  32. package/lib/esm/indexes/generator.js +95 -0
  33. package/lib/esm/indexes/index.d.ts +1 -0
  34. package/lib/esm/indexes/index.js +2 -0
  35. package/lib/esm/overrides/Column.d.ts +74 -0
  36. package/lib/esm/overrides/Column.js +70 -0
  37. package/lib/esm/overrides/CreateDateColumn.d.ts +2 -0
  38. package/lib/esm/overrides/CreateDateColumn.js +9 -0
  39. package/lib/esm/overrides/Entity.d.ts +11 -0
  40. package/lib/esm/overrides/Entity.js +28 -0
  41. package/lib/esm/overrides/PrimaryColumn.d.ts +20 -0
  42. package/lib/esm/overrides/PrimaryColumn.js +53 -0
  43. package/lib/esm/overrides/PrimaryGeneratedColumn.d.ts +24 -0
  44. package/lib/esm/overrides/PrimaryGeneratedColumn.js +51 -0
  45. package/lib/esm/overrides/UpdateDateColumn.d.ts +2 -0
  46. package/lib/esm/overrides/UpdateDateColumn.js +9 -0
  47. package/lib/esm/overrides/utils.d.ts +2 -0
  48. package/lib/esm/overrides/utils.js +29 -0
  49. package/lib/esm/query/Paginator.d.ts +86 -0
  50. package/lib/esm/query/Paginator.js +124 -0
  51. package/lib/esm/query/Statement.d.ts +131 -0
  52. package/lib/esm/query/Statement.js +242 -0
  53. package/lib/esm/query/constants.d.ts +52 -0
  54. package/lib/esm/query/constants.js +74 -0
  55. package/lib/esm/query/index.d.ts +4 -0
  56. package/lib/esm/query/index.js +5 -0
  57. package/lib/esm/query/translate.d.ts +34 -0
  58. package/lib/esm/query/translate.js +42 -0
  59. package/lib/esm/raw/postgres.d.ts +36 -0
  60. package/lib/esm/raw/postgres.js +2 -0
  61. package/lib/esm/sequences/Sequence.d.ts +67 -0
  62. package/lib/esm/sequences/Sequence.js +117 -0
  63. package/lib/esm/sequences/index.d.ts +1 -0
  64. package/lib/esm/sequences/index.js +2 -0
  65. package/lib/esm/types.d.ts +67 -0
  66. package/lib/esm/types.js +28 -0
  67. package/lib/esm/utils.d.ts +16 -0
  68. package/lib/esm/utils.js +29 -0
  69. package/lib/index.cjs +42 -0
  70. package/lib/index.d.ts +22 -0
  71. package/lib/indexes/generator.cjs +98 -0
  72. package/lib/indexes/generator.d.ts +50 -0
  73. package/lib/indexes/index.cjs +18 -0
  74. package/lib/indexes/index.d.ts +1 -0
  75. package/lib/overrides/Column.cjs +73 -0
  76. package/lib/overrides/Column.d.ts +74 -0
  77. package/lib/overrides/CreateDateColumn.cjs +12 -0
  78. package/lib/overrides/CreateDateColumn.d.ts +2 -0
  79. package/lib/overrides/Entity.cjs +31 -0
  80. package/lib/overrides/Entity.d.ts +11 -0
  81. package/lib/overrides/PrimaryColumn.cjs +56 -0
  82. package/lib/overrides/PrimaryColumn.d.ts +20 -0
  83. package/lib/overrides/PrimaryGeneratedColumn.cjs +54 -0
  84. package/lib/overrides/PrimaryGeneratedColumn.d.ts +24 -0
  85. package/lib/overrides/UpdateDateColumn.cjs +12 -0
  86. package/lib/overrides/UpdateDateColumn.d.ts +2 -0
  87. package/lib/overrides/utils.cjs +32 -0
  88. package/lib/overrides/utils.d.ts +2 -0
  89. package/lib/query/Paginator.cjs +128 -0
  90. package/lib/query/Paginator.d.ts +86 -0
  91. package/lib/query/Statement.cjs +246 -0
  92. package/lib/query/Statement.d.ts +131 -0
  93. package/lib/query/constants.cjs +77 -0
  94. package/lib/query/constants.d.ts +52 -0
  95. package/lib/query/index.cjs +21 -0
  96. package/lib/query/index.d.ts +4 -0
  97. package/lib/query/translate.cjs +45 -0
  98. package/lib/query/translate.d.ts +34 -0
  99. package/lib/raw/postgres.cjs +3 -0
  100. package/lib/raw/postgres.d.ts +36 -0
  101. package/lib/sequences/Sequence.cjs +121 -0
  102. package/lib/sequences/Sequence.d.ts +67 -0
  103. package/lib/sequences/index.cjs +18 -0
  104. package/lib/sequences/index.d.ts +1 -0
  105. package/lib/types.cjs +31 -0
  106. package/lib/types.d.ts +67 -0
  107. package/lib/utils.cjs +32 -0
  108. package/lib/utils.d.ts +16 -0
  109. package/package.json +128 -0
@@ -0,0 +1,131 @@
1
+ import { Condition, GroupOperator, Operator, Paginator, Statement } from "@decaf-ts/core";
2
+ import { Model } from "@decaf-ts/decorator-validation";
3
+ import { TypeORMQuery } from "../types";
4
+ import { TypeORMAdapter } from "../TypeORMAdapter";
5
+ import { SelectQueryBuilder } from "typeorm";
6
+ import { FindOptionsWhere } from "typeorm/find-options/FindOptionsWhere";
7
+ /**
8
+ * @description Statement builder for TypeORM-backed queries.
9
+ * @summary Provides a fluent interface for building SQL queries via TypeORM's SelectQueryBuilder with type safety and Decaf.ts abstractions.
10
+ * @template M The model type that extends Model.
11
+ * @template R The result type returned from execution.
12
+ * @param {TypeORMAdapter} adapter The TypeORM adapter.
13
+ * @class TypeORMStatement
14
+ * @example
15
+ * // Example using TypeORMStatement
16
+ * const statement = new TypeORMStatement<User, User[]>(adapter);
17
+ * const users = await statement
18
+ * .from(User)
19
+ * .where(Condition.attribute<User>('age').gt(18))
20
+ * .orderBy('lastName', 'asc')
21
+ * .limit(10)
22
+ * .execute();
23
+ */
24
+ export declare class TypeORMStatement<M extends Model, R> extends Statement<TypeORMQuery<M>, M, R> {
25
+ protected adapter: TypeORMAdapter;
26
+ constructor(adapter: TypeORMAdapter);
27
+ /**
28
+ * @description Builds a TypeORM SelectQueryBuilder from the statement.
29
+ * @summary Converts the statement's conditions, selectors, and options into a TypeORM-backed query object.
30
+ * @return {TypeORMQuery} The built TypeORM query container.
31
+ * @throws {Error} If there are invalid query conditions.
32
+ * @mermaid
33
+ * sequenceDiagram
34
+ * participant Statement
35
+ * participant Repository
36
+ * participant parseCondition
37
+ *
38
+ * Statement->>Statement: build()
39
+ * Note over Statement: Initialize query
40
+ * Statement->>Repository: Get table name
41
+ * Repository-->>Statement: Return table name
42
+ * Statement->>Statement: Create base query
43
+ *
44
+ * alt Has selectSelector
45
+ * Statement->>Statement: Add columns to query
46
+ * end
47
+ *
48
+ * alt Has whereCondition
49
+ * Statement->>Statement: Create combined condition with table
50
+ * Statement->>parseCondition: Parse condition
51
+ * parseCondition-->>Statement: Return parsed conditions
52
+ * Statement->>Statement: Add conditions to query
53
+ * end
54
+ *
55
+ * alt Has orderBySelector
56
+ * Statement->>Statement: Add orderBy to query
57
+ * end
58
+ *
59
+ * alt Has limitSelector
60
+ * Statement->>Statement: Set limit
61
+ * else
62
+ * Statement->>Statement: Use default limit
63
+ * end
64
+ *
65
+ * alt Has offsetSelector
66
+ * Statement->>Statement: Set offset
67
+ * end
68
+ *
69
+ * Statement-->>Statement: Return query
70
+ */
71
+ protected build(): TypeORMQuery<M>;
72
+ /**
73
+ * @description Creates a paginator for the statement.
74
+ * @summary Builds the query and returns a TypeORMPaginator for paginated results.
75
+ * @template R The result type.
76
+ * @param {number} size The page size.
77
+ * @return {Promise<Paginator<M, R, TypeORMQuery>>} A promise that resolves to a paginator.
78
+ * @throws {InternalError} If there's an error building the query.
79
+ */
80
+ paginate<R>(size: number): Promise<Paginator<M, R, TypeORMQuery>>;
81
+ /**
82
+ * @description Processes a record.
83
+ * @summary Converts a raw result row to a model instance using the adapter.
84
+ * @param {any} r The raw record.
85
+ * @param {keyof M} pkAttr The primary key attribute of the model.
86
+ * @param {"Number" | "BigInt" | undefined} sequenceType The type of the sequence.
87
+ * @return {any} The processed record.
88
+ */
89
+ private processRecord;
90
+ /**
91
+ * @description Executes a raw TypeORM query builder.
92
+ * @summary Sends the built SelectQueryBuilder to the database via TypeORM and returns the results.
93
+ * @template R The result type.
94
+ * @param {TypeORMQuery} rawInput The query container to execute.
95
+ * @return {Promise<R>} A promise that resolves to the query results.
96
+ */
97
+ raw<R>(rawInput: TypeORMQuery<M>): Promise<R>;
98
+ protected parseConditionForPagination(condition: Condition<M>, tableName: string, counter?: number, conditionalOp?: GroupOperator | Operator): FindOptionsWhere<M>[] | FindOptionsWhere<M>;
99
+ /**
100
+ * @description Parses a condition into PostgreSQL conditions
101
+ * @summary Converts a Condition object into PostgreSQL condition structures
102
+ * @param {Condition<M>} condition - The condition to parse
103
+ * @param {string} [tableName] - the positional index of the arguments
104
+ * @return {TypeORMQuery} The PostgresSQL condition
105
+ * @mermaid
106
+ * sequenceDiagram
107
+ * participant Statement
108
+ * participant translateOperators
109
+ * participant parseCondition
110
+ *
111
+ * Statement->>Statement: parseCondition(condition)
112
+ *
113
+ * Note over Statement: Extract condition parts
114
+ *
115
+ * alt Simple comparison operator
116
+ * Statement->>translateOperators: translateOperators(operator)
117
+ * translateOperators-->>Statement: Return PostgreSQL operator
118
+ * Statement->>Statement: Create condition with column, operator, and value
119
+ * else NOT operator
120
+ * Statement->>Statement: parseCondition(attr1)
121
+ * Statement->>Statement: Add NOT to conditions
122
+ * else AND/OR operator
123
+ * Statement->>Statement: parseCondition(attr1)
124
+ * Statement->>Statement: parseCondition(comparison)
125
+ * Statement->>Statement: Combine conditions with AND/OR
126
+ * end
127
+ *
128
+ * Statement-->>Statement: Return conditions array
129
+ */
130
+ protected parseCondition(condition: Condition<M>, tableName: string, qb: SelectQueryBuilder<any>, counter?: number, conditionalOp?: GroupOperator | Operator): TypeORMQuery<M>;
131
+ }
@@ -0,0 +1,77 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TypeORMConst = exports.TypeORMGroupOperator = exports.TypeORMOperator = exports.TypeORMQueryLimit = void 0;
4
+ const types_1 = require("./../types.cjs");
5
+ /**
6
+ * @description Default query limit for TypeORM-backed queries.
7
+ * @summary Maximum number of records to return in a single page when paginating results.
8
+ * @const TypeORMQueryLimit
9
+ * @memberOf module:for-typeorm
10
+ */
11
+ exports.TypeORMQueryLimit = 250;
12
+ /**
13
+ * @description Mapping of operator names to SQL operators.
14
+ * @summary Constants for comparison operators used when translating high-level filters into SQL via TypeORM.
15
+ * @typedef {Object} PostgreSQLOperatorType
16
+ * @property {string} EQUAL Equality operator (=)
17
+ * @property {string} DIFFERENT Inequality operator (<>)
18
+ * @property {string} BIGGER Greater than operator (>)
19
+ * @property {string} BIGGER_EQ Greater than or equal operator (>=)
20
+ * @property {string} SMALLER Less than operator (<)
21
+ * @property {string} SMALLER_EQ Less than or equal operator (<=)
22
+ * @property {string} NOT Negation operator (NOT)
23
+ * @property {string} IN In array operator (IN)
24
+ * @property {string} REGEXP Regular expression operator (~)
25
+ * @property {string} IREGEXP Case-insensitive regular expression operator (~*)
26
+ * @property {string} LIKE Pattern matching operator (LIKE)
27
+ * @property {string} ILIKE Case-insensitive pattern matching operator (ILIKE)
28
+ * @property {string} BETWEEN Range operator (BETWEEN)
29
+ * @property {string} IS_NULL NULL check operator (IS NULL)
30
+ * @property {string} IS_NOT_NULL NOT NULL check operator (IS NOT NULL)
31
+ * @const TypeORMOperator
32
+ * @type {PostgreSQLOperatorType}
33
+ * @memberOf module:for-typeorm
34
+ */
35
+ exports.TypeORMOperator = {
36
+ EQUAL: types_1.SQLOperator.EQUAL,
37
+ DIFFERENT: types_1.SQLOperator.NOT_EQUAL,
38
+ BIGGER: types_1.SQLOperator.GREATER_THAN,
39
+ BIGGER_EQ: types_1.SQLOperator.GREATER_THAN_OR_EQUAL,
40
+ SMALLER: types_1.SQLOperator.LESS_THAN,
41
+ SMALLER_EQ: types_1.SQLOperator.LESS_THAN_OR_EQUAL,
42
+ BETWEEN: types_1.SQLOperator.BETWEEN,
43
+ NOT: "NOT",
44
+ IN: types_1.SQLOperator.IN,
45
+ IS_NULL: types_1.SQLOperator.IS_NULL,
46
+ IS_NOT_NULL: types_1.SQLOperator.IS_NOT_NULL,
47
+ REGEXP: "~",
48
+ IREGEXP: "~*",
49
+ LIKE: types_1.SQLOperator.LIKE,
50
+ ILIKE: types_1.SQLOperator.ILIKE,
51
+ };
52
+ /**
53
+ * @description Mapping of logical operator names to SQL operators.
54
+ * @summary Constants for logical operators used when building WHERE clause groups in TypeORM queries.
55
+ * @typedef {Object} PostgreSQLGroupOperatorType
56
+ * @property {string} AND Logical AND operator (AND)
57
+ * @property {string} OR Logical OR operator (OR)
58
+ * @const TypeORMGroupOperator
59
+ * @type {PostgreSQLGroupOperatorType}
60
+ * @memberOf module:for-typeorm
61
+ */
62
+ exports.TypeORMGroupOperator = {
63
+ AND: "AND",
64
+ OR: "OR",
65
+ };
66
+ /**
67
+ * @description Special constant values used in queries.
68
+ * @summary String constants representing special values used while composing SQL with TypeORM.
69
+ * @typedef {Object} PostgreSQLConstType
70
+ * @property {string} NULL String representation of null value.
71
+ * @const TypeORMConst
72
+ * @memberOf module:for-typeorm
73
+ */
74
+ exports.TypeORMConst = {
75
+ NULL: "NULL",
76
+ };
77
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3F1ZXJ5L2NvbnN0YW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwwQ0FBdUM7QUFFdkM7Ozs7O0dBS0c7QUFDVSxRQUFBLGlCQUFpQixHQUFHLEdBQUcsQ0FBQztBQUVyQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXNCRztBQUNVLFFBQUEsZUFBZSxHQUF5QztJQUNuRSxLQUFLLEVBQUUsbUJBQVcsQ0FBQyxLQUFLO0lBQ3hCLFNBQVMsRUFBRSxtQkFBVyxDQUFDLFNBQVM7SUFDaEMsTUFBTSxFQUFFLG1CQUFXLENBQUMsWUFBWTtJQUNoQyxTQUFTLEVBQUUsbUJBQVcsQ0FBQyxxQkFBcUI7SUFDNUMsT0FBTyxFQUFFLG1CQUFXLENBQUMsU0FBUztJQUM5QixVQUFVLEVBQUUsbUJBQVcsQ0FBQyxrQkFBa0I7SUFDMUMsT0FBTyxFQUFFLG1CQUFXLENBQUMsT0FBTztJQUM1QixHQUFHLEVBQUUsS0FBSztJQUNWLEVBQUUsRUFBRSxtQkFBVyxDQUFDLEVBQUU7SUFDbEIsT0FBTyxFQUFFLG1CQUFXLENBQUMsT0FBTztJQUM1QixXQUFXLEVBQUUsbUJBQVcsQ0FBQyxXQUFXO0lBQ3BDLE1BQU0sRUFBRSxHQUFHO0lBQ1gsT0FBTyxFQUFFLElBQUk7SUFDYixJQUFJLEVBQUUsbUJBQVcsQ0FBQyxJQUFJO0lBQ3RCLEtBQUssRUFBRSxtQkFBVyxDQUFDLEtBQUs7Q0FDekIsQ0FBQztBQUVGOzs7Ozs7Ozs7R0FTRztBQUNVLFFBQUEsb0JBQW9CLEdBQTJCO0lBQzFELEdBQUcsRUFBRSxLQUFLO0lBQ1YsRUFBRSxFQUFFLElBQUk7Q0FDVCxDQUFDO0FBRUY7Ozs7Ozs7R0FPRztBQUNVLFFBQUEsWUFBWSxHQUEyQjtJQUNsRCxJQUFJLEVBQUUsTUFBTTtDQUNiLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTUUxPcGVyYXRvciB9IGZyb20gXCIuLi90eXBlc1wiO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBEZWZhdWx0IHF1ZXJ5IGxpbWl0IGZvciBUeXBlT1JNLWJhY2tlZCBxdWVyaWVzLlxuICogQHN1bW1hcnkgTWF4aW11bSBudW1iZXIgb2YgcmVjb3JkcyB0byByZXR1cm4gaW4gYSBzaW5nbGUgcGFnZSB3aGVuIHBhZ2luYXRpbmcgcmVzdWx0cy5cbiAqIEBjb25zdCBUeXBlT1JNUXVlcnlMaW1pdFxuICogQG1lbWJlck9mIG1vZHVsZTpmb3ItdHlwZW9ybVxuICovXG5leHBvcnQgY29uc3QgVHlwZU9STVF1ZXJ5TGltaXQgPSAyNTA7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIE1hcHBpbmcgb2Ygb3BlcmF0b3IgbmFtZXMgdG8gU1FMIG9wZXJhdG9ycy5cbiAqIEBzdW1tYXJ5IENvbnN0YW50cyBmb3IgY29tcGFyaXNvbiBvcGVyYXRvcnMgdXNlZCB3aGVuIHRyYW5zbGF0aW5nIGhpZ2gtbGV2ZWwgZmlsdGVycyBpbnRvIFNRTCB2aWEgVHlwZU9STS5cbiAqIEB0eXBlZGVmIHtPYmplY3R9IFBvc3RncmVTUUxPcGVyYXRvclR5cGVcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBFUVVBTCBFcXVhbGl0eSBvcGVyYXRvciAoPSlcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBESUZGRVJFTlQgSW5lcXVhbGl0eSBvcGVyYXRvciAoPD4pXG4gKiBAcHJvcGVydHkge3N0cmluZ30gQklHR0VSIEdyZWF0ZXIgdGhhbiBvcGVyYXRvciAoPilcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBCSUdHRVJfRVEgR3JlYXRlciB0aGFuIG9yIGVxdWFsIG9wZXJhdG9yICg+PSlcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBTTUFMTEVSIExlc3MgdGhhbiBvcGVyYXRvciAoPClcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBTTUFMTEVSX0VRIExlc3MgdGhhbiBvciBlcXVhbCBvcGVyYXRvciAoPD0pXG4gKiBAcHJvcGVydHkge3N0cmluZ30gTk9UIE5lZ2F0aW9uIG9wZXJhdG9yIChOT1QpXG4gKiBAcHJvcGVydHkge3N0cmluZ30gSU4gSW4gYXJyYXkgb3BlcmF0b3IgKElOKVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFJFR0VYUCBSZWd1bGFyIGV4cHJlc3Npb24gb3BlcmF0b3IgKH4pXG4gKiBAcHJvcGVydHkge3N0cmluZ30gSVJFR0VYUCBDYXNlLWluc2Vuc2l0aXZlIHJlZ3VsYXIgZXhwcmVzc2lvbiBvcGVyYXRvciAofiopXG4gKiBAcHJvcGVydHkge3N0cmluZ30gTElLRSBQYXR0ZXJuIG1hdGNoaW5nIG9wZXJhdG9yIChMSUtFKVxuICogQHByb3BlcnR5IHtzdHJpbmd9IElMSUtFIENhc2UtaW5zZW5zaXRpdmUgcGF0dGVybiBtYXRjaGluZyBvcGVyYXRvciAoSUxJS0UpXG4gKiBAcHJvcGVydHkge3N0cmluZ30gQkVUV0VFTiBSYW5nZSBvcGVyYXRvciAoQkVUV0VFTilcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBJU19OVUxMIE5VTEwgY2hlY2sgb3BlcmF0b3IgKElTIE5VTEwpXG4gKiBAcHJvcGVydHkge3N0cmluZ30gSVNfTk9UX05VTEwgTk9UIE5VTEwgY2hlY2sgb3BlcmF0b3IgKElTIE5PVCBOVUxMKVxuICogQGNvbnN0IFR5cGVPUk1PcGVyYXRvclxuICogQHR5cGUge1Bvc3RncmVTUUxPcGVyYXRvclR5cGV9XG4gKiBAbWVtYmVyT2YgbW9kdWxlOmZvci10eXBlb3JtXG4gKi9cbmV4cG9ydCBjb25zdCBUeXBlT1JNT3BlcmF0b3I6IFJlY29yZDxzdHJpbmcsIFNRTE9wZXJhdG9yIHwgc3RyaW5nPiA9IHtcbiAgRVFVQUw6IFNRTE9wZXJhdG9yLkVRVUFMLFxuICBESUZGRVJFTlQ6IFNRTE9wZXJhdG9yLk5PVF9FUVVBTCxcbiAgQklHR0VSOiBTUUxPcGVyYXRvci5HUkVBVEVSX1RIQU4sXG4gIEJJR0dFUl9FUTogU1FMT3BlcmF0b3IuR1JFQVRFUl9USEFOX09SX0VRVUFMLFxuICBTTUFMTEVSOiBTUUxPcGVyYXRvci5MRVNTX1RIQU4sXG4gIFNNQUxMRVJfRVE6IFNRTE9wZXJhdG9yLkxFU1NfVEhBTl9PUl9FUVVBTCxcbiAgQkVUV0VFTjogU1FMT3BlcmF0b3IuQkVUV0VFTixcbiAgTk9UOiBcIk5PVFwiLFxuICBJTjogU1FMT3BlcmF0b3IuSU4sXG4gIElTX05VTEw6IFNRTE9wZXJhdG9yLklTX05VTEwsXG4gIElTX05PVF9OVUxMOiBTUUxPcGVyYXRvci5JU19OT1RfTlVMTCxcbiAgUkVHRVhQOiBcIn5cIixcbiAgSVJFR0VYUDogXCJ+KlwiLFxuICBMSUtFOiBTUUxPcGVyYXRvci5MSUtFLFxuICBJTElLRTogU1FMT3BlcmF0b3IuSUxJS0UsXG59O1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBNYXBwaW5nIG9mIGxvZ2ljYWwgb3BlcmF0b3IgbmFtZXMgdG8gU1FMIG9wZXJhdG9ycy5cbiAqIEBzdW1tYXJ5IENvbnN0YW50cyBmb3IgbG9naWNhbCBvcGVyYXRvcnMgdXNlZCB3aGVuIGJ1aWxkaW5nIFdIRVJFIGNsYXVzZSBncm91cHMgaW4gVHlwZU9STSBxdWVyaWVzLlxuICogQHR5cGVkZWYge09iamVjdH0gUG9zdGdyZVNRTEdyb3VwT3BlcmF0b3JUeXBlXG4gKiBAcHJvcGVydHkge3N0cmluZ30gQU5EIExvZ2ljYWwgQU5EIG9wZXJhdG9yIChBTkQpXG4gKiBAcHJvcGVydHkge3N0cmluZ30gT1IgTG9naWNhbCBPUiBvcGVyYXRvciAoT1IpXG4gKiBAY29uc3QgVHlwZU9STUdyb3VwT3BlcmF0b3JcbiAqIEB0eXBlIHtQb3N0Z3JlU1FMR3JvdXBPcGVyYXRvclR5cGV9XG4gKiBAbWVtYmVyT2YgbW9kdWxlOmZvci10eXBlb3JtXG4gKi9cbmV4cG9ydCBjb25zdCBUeXBlT1JNR3JvdXBPcGVyYXRvcjogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgQU5EOiBcIkFORFwiLFxuICBPUjogXCJPUlwiLFxufTtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gU3BlY2lhbCBjb25zdGFudCB2YWx1ZXMgdXNlZCBpbiBxdWVyaWVzLlxuICogQHN1bW1hcnkgU3RyaW5nIGNvbnN0YW50cyByZXByZXNlbnRpbmcgc3BlY2lhbCB2YWx1ZXMgdXNlZCB3aGlsZSBjb21wb3NpbmcgU1FMIHdpdGggVHlwZU9STS5cbiAqIEB0eXBlZGVmIHtPYmplY3R9IFBvc3RncmVTUUxDb25zdFR5cGVcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBOVUxMIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBudWxsIHZhbHVlLlxuICogQGNvbnN0IFR5cGVPUk1Db25zdFxuICogQG1lbWJlck9mIG1vZHVsZTpmb3ItdHlwZW9ybVxuICovXG5leHBvcnQgY29uc3QgVHlwZU9STUNvbnN0OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICBOVUxMOiBcIk5VTExcIixcbn07XG4iXX0=
@@ -0,0 +1,52 @@
1
+ import { SQLOperator } from "../types";
2
+ /**
3
+ * @description Default query limit for TypeORM-backed queries.
4
+ * @summary Maximum number of records to return in a single page when paginating results.
5
+ * @const TypeORMQueryLimit
6
+ * @memberOf module:for-typeorm
7
+ */
8
+ export declare const TypeORMQueryLimit = 250;
9
+ /**
10
+ * @description Mapping of operator names to SQL operators.
11
+ * @summary Constants for comparison operators used when translating high-level filters into SQL via TypeORM.
12
+ * @typedef {Object} PostgreSQLOperatorType
13
+ * @property {string} EQUAL Equality operator (=)
14
+ * @property {string} DIFFERENT Inequality operator (<>)
15
+ * @property {string} BIGGER Greater than operator (>)
16
+ * @property {string} BIGGER_EQ Greater than or equal operator (>=)
17
+ * @property {string} SMALLER Less than operator (<)
18
+ * @property {string} SMALLER_EQ Less than or equal operator (<=)
19
+ * @property {string} NOT Negation operator (NOT)
20
+ * @property {string} IN In array operator (IN)
21
+ * @property {string} REGEXP Regular expression operator (~)
22
+ * @property {string} IREGEXP Case-insensitive regular expression operator (~*)
23
+ * @property {string} LIKE Pattern matching operator (LIKE)
24
+ * @property {string} ILIKE Case-insensitive pattern matching operator (ILIKE)
25
+ * @property {string} BETWEEN Range operator (BETWEEN)
26
+ * @property {string} IS_NULL NULL check operator (IS NULL)
27
+ * @property {string} IS_NOT_NULL NOT NULL check operator (IS NOT NULL)
28
+ * @const TypeORMOperator
29
+ * @type {PostgreSQLOperatorType}
30
+ * @memberOf module:for-typeorm
31
+ */
32
+ export declare const TypeORMOperator: Record<string, SQLOperator | string>;
33
+ /**
34
+ * @description Mapping of logical operator names to SQL operators.
35
+ * @summary Constants for logical operators used when building WHERE clause groups in TypeORM queries.
36
+ * @typedef {Object} PostgreSQLGroupOperatorType
37
+ * @property {string} AND Logical AND operator (AND)
38
+ * @property {string} OR Logical OR operator (OR)
39
+ * @const TypeORMGroupOperator
40
+ * @type {PostgreSQLGroupOperatorType}
41
+ * @memberOf module:for-typeorm
42
+ */
43
+ export declare const TypeORMGroupOperator: Record<string, string>;
44
+ /**
45
+ * @description Special constant values used in queries.
46
+ * @summary String constants representing special values used while composing SQL with TypeORM.
47
+ * @typedef {Object} PostgreSQLConstType
48
+ * @property {string} NULL String representation of null value.
49
+ * @const TypeORMConst
50
+ * @memberOf module:for-typeorm
51
+ */
52
+ export declare const TypeORMConst: Record<string, string>;
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./constants.cjs"), exports);
18
+ __exportStar(require("./Paginator.cjs"), exports);
19
+ __exportStar(require("./Statement.cjs"), exports);
20
+ __exportStar(require("./translate.cjs"), exports);
21
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcXVlcnkvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLGtEQUE0QjtBQUM1QixrREFBNEI7QUFDNUIsa0RBQTRCO0FBQzVCLGtEQUE0QiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gXCIuL2NvbnN0YW50c1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vUGFnaW5hdG9yXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9TdGF0ZW1lbnRcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3RyYW5zbGF0ZVwiO1xuIl19
@@ -0,0 +1,4 @@
1
+ export * from "./constants";
2
+ export * from "./Paginator";
3
+ export * from "./Statement";
4
+ export * from "./translate";
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.translateOperators = translateOperators;
4
+ const constants_1 = require("./constants.cjs");
5
+ const core_1 = require("@decaf-ts/core");
6
+ /**
7
+ * @description Translates core operators to TypeORM SQL operators.
8
+ * @summary Converts Decaf.ts core operators to their equivalent SQL operators used by the TypeORM adapter.
9
+ * @param {GroupOperator | Operator} operator The core operator to translate.
10
+ * @return {SQLOperator | string} The equivalent SQL operator.
11
+ * @throws {QueryError} If no translation exists for the given operator.
12
+ * @function translateOperators
13
+ * @memberOf module:for-typeorm
14
+ * @mermaid
15
+ * sequenceDiagram
16
+ * participant Caller
17
+ * participant translateOperators
18
+ * participant PostgreSQLOperator
19
+ * participant PostgreSQLGroupOperator
20
+ *
21
+ * Caller->>translateOperators: operator
22
+ *
23
+ * translateOperators->>PostgreSQLOperator: Check for match
24
+ * alt Found in PostgreSQLOperator
25
+ * PostgreSQLOperator-->>translateOperators: Return matching operator
26
+ * translateOperators-->>Caller: Return SQLOperator
27
+ * else Not found
28
+ * translateOperators->>PostgreSQLGroupOperator: Check for match
29
+ * alt Found in PostgreSQLGroupOperator
30
+ * PostgreSQLGroupOperator-->>translateOperators: Return matching operator
31
+ * translateOperators-->>Caller: Return string
32
+ * else Not found
33
+ * translateOperators-->>Caller: Throw QueryError
34
+ * end
35
+ * end
36
+ */
37
+ function translateOperators(operator) {
38
+ for (const operators of [constants_1.TypeORMOperator, constants_1.TypeORMGroupOperator]) {
39
+ const el = Object.keys(operators).find((k) => k === operator);
40
+ if (el)
41
+ return operators[el];
42
+ }
43
+ throw new core_1.QueryError(`Could not find adapter translation for operator ${operator}`);
44
+ }
45
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNsYXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3F1ZXJ5L3RyYW5zbGF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQW9DQSxnREFVQztBQTdDRCwrQ0FBb0U7QUFDcEUseUNBQTRDO0FBRzVDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E4Qkc7QUFDSCxTQUFnQixrQkFBa0IsQ0FDaEMsUUFBa0M7SUFFbEMsS0FBSyxNQUFNLFNBQVMsSUFBSSxDQUFDLDJCQUFlLEVBQUUsZ0NBQW9CLENBQUMsRUFBRSxDQUFDO1FBQ2hFLE1BQU0sRUFBRSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssUUFBUSxDQUFDLENBQUM7UUFDOUQsSUFBSSxFQUFFO1lBQUUsT0FBTyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUNELE1BQU0sSUFBSSxpQkFBVSxDQUNsQixtREFBbUQsUUFBUSxFQUFFLENBQzlELENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgR3JvdXBPcGVyYXRvciwgT3BlcmF0b3IgfSBmcm9tIFwiQGRlY2FmLXRzL2NvcmVcIjtcbmltcG9ydCB7IFR5cGVPUk1Hcm91cE9wZXJhdG9yLCBUeXBlT1JNT3BlcmF0b3IgfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IFF1ZXJ5RXJyb3IgfSBmcm9tIFwiQGRlY2FmLXRzL2NvcmVcIjtcbmltcG9ydCB7IFNRTE9wZXJhdG9yIH0gZnJvbSBcIi4uL3R5cGVzXCI7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIFRyYW5zbGF0ZXMgY29yZSBvcGVyYXRvcnMgdG8gVHlwZU9STSBTUUwgb3BlcmF0b3JzLlxuICogQHN1bW1hcnkgQ29udmVydHMgRGVjYWYudHMgY29yZSBvcGVyYXRvcnMgdG8gdGhlaXIgZXF1aXZhbGVudCBTUUwgb3BlcmF0b3JzIHVzZWQgYnkgdGhlIFR5cGVPUk0gYWRhcHRlci5cbiAqIEBwYXJhbSB7R3JvdXBPcGVyYXRvciB8IE9wZXJhdG9yfSBvcGVyYXRvciBUaGUgY29yZSBvcGVyYXRvciB0byB0cmFuc2xhdGUuXG4gKiBAcmV0dXJuIHtTUUxPcGVyYXRvciB8IHN0cmluZ30gVGhlIGVxdWl2YWxlbnQgU1FMIG9wZXJhdG9yLlxuICogQHRocm93cyB7UXVlcnlFcnJvcn0gSWYgbm8gdHJhbnNsYXRpb24gZXhpc3RzIGZvciB0aGUgZ2l2ZW4gb3BlcmF0b3IuXG4gKiBAZnVuY3Rpb24gdHJhbnNsYXRlT3BlcmF0b3JzXG4gKiBAbWVtYmVyT2YgbW9kdWxlOmZvci10eXBlb3JtXG4gKiBAbWVybWFpZFxuICogc2VxdWVuY2VEaWFncmFtXG4gKiAgIHBhcnRpY2lwYW50IENhbGxlclxuICogICBwYXJ0aWNpcGFudCB0cmFuc2xhdGVPcGVyYXRvcnNcbiAqICAgcGFydGljaXBhbnQgUG9zdGdyZVNRTE9wZXJhdG9yXG4gKiAgIHBhcnRpY2lwYW50IFBvc3RncmVTUUxHcm91cE9wZXJhdG9yXG4gKlxuICogICBDYWxsZXItPj50cmFuc2xhdGVPcGVyYXRvcnM6IG9wZXJhdG9yXG4gKlxuICogICB0cmFuc2xhdGVPcGVyYXRvcnMtPj5Qb3N0Z3JlU1FMT3BlcmF0b3I6IENoZWNrIGZvciBtYXRjaFxuICogICBhbHQgRm91bmQgaW4gUG9zdGdyZVNRTE9wZXJhdG9yXG4gKiAgICAgUG9zdGdyZVNRTE9wZXJhdG9yLS0+PnRyYW5zbGF0ZU9wZXJhdG9yczogUmV0dXJuIG1hdGNoaW5nIG9wZXJhdG9yXG4gKiAgICAgdHJhbnNsYXRlT3BlcmF0b3JzLS0+PkNhbGxlcjogUmV0dXJuIFNRTE9wZXJhdG9yXG4gKiAgIGVsc2UgTm90IGZvdW5kXG4gKiAgICAgdHJhbnNsYXRlT3BlcmF0b3JzLT4+UG9zdGdyZVNRTEdyb3VwT3BlcmF0b3I6IENoZWNrIGZvciBtYXRjaFxuICogICAgIGFsdCBGb3VuZCBpbiBQb3N0Z3JlU1FMR3JvdXBPcGVyYXRvclxuICogICAgICAgUG9zdGdyZVNRTEdyb3VwT3BlcmF0b3ItLT4+dHJhbnNsYXRlT3BlcmF0b3JzOiBSZXR1cm4gbWF0Y2hpbmcgb3BlcmF0b3JcbiAqICAgICAgIHRyYW5zbGF0ZU9wZXJhdG9ycy0tPj5DYWxsZXI6IFJldHVybiBzdHJpbmdcbiAqICAgICBlbHNlIE5vdCBmb3VuZFxuICogICAgICAgdHJhbnNsYXRlT3BlcmF0b3JzLS0+PkNhbGxlcjogVGhyb3cgUXVlcnlFcnJvclxuICogICAgIGVuZFxuICogICBlbmRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRyYW5zbGF0ZU9wZXJhdG9ycyhcbiAgb3BlcmF0b3I6IEdyb3VwT3BlcmF0b3IgfCBPcGVyYXRvclxuKTogU1FMT3BlcmF0b3IgfCBzdHJpbmcge1xuICBmb3IgKGNvbnN0IG9wZXJhdG9ycyBvZiBbVHlwZU9STU9wZXJhdG9yLCBUeXBlT1JNR3JvdXBPcGVyYXRvcl0pIHtcbiAgICBjb25zdCBlbCA9IE9iamVjdC5rZXlzKG9wZXJhdG9ycykuZmluZCgoaykgPT4gayA9PT0gb3BlcmF0b3IpO1xuICAgIGlmIChlbCkgcmV0dXJuIG9wZXJhdG9yc1tlbF07XG4gIH1cbiAgdGhyb3cgbmV3IFF1ZXJ5RXJyb3IoXG4gICAgYENvdWxkIG5vdCBmaW5kIGFkYXB0ZXIgdHJhbnNsYXRpb24gZm9yIG9wZXJhdG9yICR7b3BlcmF0b3J9YFxuICApO1xufVxuIl19
@@ -0,0 +1,34 @@
1
+ import { GroupOperator, Operator } from "@decaf-ts/core";
2
+ import { SQLOperator } from "../types";
3
+ /**
4
+ * @description Translates core operators to TypeORM SQL operators.
5
+ * @summary Converts Decaf.ts core operators to their equivalent SQL operators used by the TypeORM adapter.
6
+ * @param {GroupOperator | Operator} operator The core operator to translate.
7
+ * @return {SQLOperator | string} The equivalent SQL operator.
8
+ * @throws {QueryError} If no translation exists for the given operator.
9
+ * @function translateOperators
10
+ * @memberOf module:for-typeorm
11
+ * @mermaid
12
+ * sequenceDiagram
13
+ * participant Caller
14
+ * participant translateOperators
15
+ * participant PostgreSQLOperator
16
+ * participant PostgreSQLGroupOperator
17
+ *
18
+ * Caller->>translateOperators: operator
19
+ *
20
+ * translateOperators->>PostgreSQLOperator: Check for match
21
+ * alt Found in PostgreSQLOperator
22
+ * PostgreSQLOperator-->>translateOperators: Return matching operator
23
+ * translateOperators-->>Caller: Return SQLOperator
24
+ * else Not found
25
+ * translateOperators->>PostgreSQLGroupOperator: Check for match
26
+ * alt Found in PostgreSQLGroupOperator
27
+ * PostgreSQLGroupOperator-->>translateOperators: Return matching operator
28
+ * translateOperators-->>Caller: Return string
29
+ * else Not found
30
+ * translateOperators-->>Caller: Throw QueryError
31
+ * end
32
+ * end
33
+ */
34
+ export declare function translateOperators(operator: GroupOperator | Operator): SQLOperator | string;
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9zdGdyZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcmF3L3Bvc3RncmVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBkZXNjcmlwdGlvbiBEZWZpbml0aW9uIG9mIGEgUG9zdGdyZVNRTCByZXN1bHQgZmllbGQuXG4gKiBAc3VtbWFyeSBEZXNjcmliZXMgbWV0YWRhdGEgZm9yIGEgY29sdW1uIHJldHVybmVkIGluIGEgUG9zdGdyZVNRTCBxdWVyeSByZXN1bHQsIGluY2x1ZGluZyBpZGVudGlmaWVycyBhbmQgdHlwZSBpbmZvcm1hdGlvbi5cbiAqIEBpbnRlcmZhY2UgRmllbGREZWZcbiAqIEBtZW1iZXJPZiBtb2R1bGU6Zm9yLXR5cGVvcm1cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaWVsZERlZiB7XG4gIG5hbWU6IHN0cmluZztcbiAgdGFibGVJRDogbnVtYmVyO1xuICBjb2x1bW5JRDogbnVtYmVyO1xuICBkYXRhVHlwZUlEOiBudW1iZXI7XG4gIGRhdGFUeXBlU2l6ZTogbnVtYmVyO1xuICBkYXRhVHlwZU1vZGlmaWVyOiBudW1iZXI7XG4gIGZvcm1hdDogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBCYXNlIHNoYXBlIGZvciBQb3N0Z3JlU1FMIHF1ZXJ5IHJlc3VsdHMuXG4gKiBAc3VtbWFyeSBDb250YWlucyBjb21tb24gcHJvcGVydGllcyBwcmVzZW50IGluIGFsbCBQb3N0Z3JlU1FMIHF1ZXJ5IHJlc3VsdHMgc3VjaCBhcyB0aGUgZXhlY3V0ZWQgY29tbWFuZCwgcm93IGNvdW50LCBvaWQsIGFuZCBmaWVsZHMgbWV0YWRhdGEuXG4gKiBAaW50ZXJmYWNlIFF1ZXJ5UmVzdWx0QmFzZVxuICogQG1lbWJlck9mIG1vZHVsZTpmb3ItdHlwZW9ybVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFF1ZXJ5UmVzdWx0QmFzZSB7XG4gIGNvbW1hbmQ6IHN0cmluZztcbiAgcm93Q291bnQ6IG51bWJlciB8IG51bGw7XG4gIG9pZDogbnVtYmVyO1xuICBmaWVsZHM6IEZpZWxkRGVmW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUXVlcnlSZXN1bHRSb3cge1xuICBbY29sdW1uOiBzdHJpbmddOiBhbnk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUXVlcnlSZXN1bHQ8UiBleHRlbmRzIFF1ZXJ5UmVzdWx0Um93ID0gYW55PlxuICBleHRlbmRzIFF1ZXJ5UmVzdWx0QmFzZSB7XG4gIHJvd3M6IFJbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBRdWVyeUFycmF5UmVzdWx0PFIgZXh0ZW5kcyBhbnlbXSA9IGFueVtdPlxuICBleHRlbmRzIFF1ZXJ5UmVzdWx0QmFzZSB7XG4gIHJvd3M6IFJbXTtcbn1cbiJdfQ==
@@ -0,0 +1,36 @@
1
+ /**
2
+ * @description Definition of a PostgreSQL result field.
3
+ * @summary Describes metadata for a column returned in a PostgreSQL query result, including identifiers and type information.
4
+ * @interface FieldDef
5
+ * @memberOf module:for-typeorm
6
+ */
7
+ export interface FieldDef {
8
+ name: string;
9
+ tableID: number;
10
+ columnID: number;
11
+ dataTypeID: number;
12
+ dataTypeSize: number;
13
+ dataTypeModifier: number;
14
+ format: string;
15
+ }
16
+ /**
17
+ * @description Base shape for PostgreSQL query results.
18
+ * @summary Contains common properties present in all PostgreSQL query results such as the executed command, row count, oid, and fields metadata.
19
+ * @interface QueryResultBase
20
+ * @memberOf module:for-typeorm
21
+ */
22
+ export interface QueryResultBase {
23
+ command: string;
24
+ rowCount: number | null;
25
+ oid: number;
26
+ fields: FieldDef[];
27
+ }
28
+ export interface QueryResultRow {
29
+ [column: string]: any;
30
+ }
31
+ export interface QueryResult<R extends QueryResultRow = any> extends QueryResultBase {
32
+ rows: R[];
33
+ }
34
+ export interface QueryArrayResult<R extends any[] = any[]> extends QueryResultBase {
35
+ rows: R[];
36
+ }
@@ -0,0 +1,121 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TypeORMSequence = void 0;
4
+ const db_decorators_1 = require("@decaf-ts/db-decorators");
5
+ const core_1 = require("@decaf-ts/core");
6
+ /**
7
+ * @description Abstract implementation of a database sequence for TypeORM.
8
+ * @summary Provides the basic functionality for {@link Sequence}s, delegating to the {@link TypeORMAdapter} to fetch and increment values while handling type parsing and error translation.
9
+ * @param {SequenceOptions} options The sequence configuration options (name, type, startWith, incrementBy, etc.).
10
+ * @param {TypeORMAdapter} adapter The TypeORM adapter used to execute sequence operations.
11
+ * @class TypeORMSequence
12
+ * @implements Sequence
13
+ * @example
14
+ * // Create and use a TypeORM-backed sequence
15
+ * const seq = new TypeORMSequence({ name: "user_id_seq", type: "Number", startWith: 1, incrementBy: 1 }, adapter);
16
+ * const nextId = await seq.next();
17
+ *
18
+ * @mermaid
19
+ * sequenceDiagram
20
+ * participant App
21
+ * participant Seq as TypeORMSequence
22
+ * participant Adapter as TypeORMAdapter
23
+ * participant DB as Database
24
+ * App->>Seq: next()
25
+ * Seq->>Seq: current()
26
+ * Seq->>Adapter: raw(SELECT current_value ...)
27
+ * Adapter->>DB: Query current value
28
+ * DB-->>Adapter: current_value
29
+ * Adapter-->>Seq: value
30
+ * Seq->>Seq: increment(current)
31
+ * Seq->>Adapter: raw(nextval(name))
32
+ * Adapter->>DB: nextval()
33
+ * DB-->>Adapter: next value
34
+ * Adapter-->>Seq: value
35
+ * Seq-->>App: parsed next value
36
+ */
37
+ class TypeORMSequence extends core_1.Sequence {
38
+ constructor(options, adapter) {
39
+ super(options);
40
+ this.adapter = adapter;
41
+ }
42
+ /**
43
+ * @summary Retrieves the current value for the sequence
44
+ * @protected
45
+ */
46
+ async current() {
47
+ const { name } = this.options;
48
+ try {
49
+ const seq = await this.adapter.raw({
50
+ query: `SELECT current_value FROM information_schema.sequences WHERE sequence_name = $1`,
51
+ values: [name],
52
+ });
53
+ return this.parse(seq.current_value);
54
+ }
55
+ catch (e) {
56
+ throw this.adapter.parseError(e);
57
+ }
58
+ }
59
+ /**
60
+ * @summary Parses the {@link Sequence} value
61
+ *
62
+ * @protected
63
+ * @param value
64
+ */
65
+ parse(value) {
66
+ return core_1.Sequence.parseValue(this.options.type, value);
67
+ }
68
+ /**
69
+ * @summary increments the sequence
70
+ * @description Sequence specific implementation
71
+ *
72
+ * @param {string | number | bigint} current
73
+ * @param count
74
+ * @protected
75
+ */
76
+ async increment(current, count) {
77
+ const { type, incrementBy, name, startWith } = this.options;
78
+ if (type !== "Number" && type !== "BigInt")
79
+ throw new db_decorators_1.InternalError(`Cannot increment sequence of type ${type} with ${count}`);
80
+ let next;
81
+ try {
82
+ next = await this.adapter.raw({
83
+ query: `SELECT nextval($1);`,
84
+ values: [name],
85
+ });
86
+ }
87
+ catch (e) {
88
+ if (!(e instanceof db_decorators_1.NotFoundError))
89
+ throw e;
90
+ next = await this.adapter.raw({
91
+ query: `CREATE SEQUENCE IF NOT EXISTS $1 START WITH $2 INCREMENT BY $3 NO CYCLE;`,
92
+ values: [name, startWith, incrementBy],
93
+ });
94
+ }
95
+ return next;
96
+ }
97
+ /**
98
+ * @summary Generates the next value in th sequence
99
+ * @description calls {@link Sequence#parse} on the current value
100
+ * followed by {@link Sequence#increment}
101
+ *
102
+ */
103
+ async next() {
104
+ const current = await this.current();
105
+ return this.increment(current);
106
+ }
107
+ async range(count) {
108
+ const current = (await this.current());
109
+ const incrementBy = this.parse(this.options.incrementBy);
110
+ const next = await this.increment(current, this.parse(count) * incrementBy);
111
+ const range = [];
112
+ for (let i = 1; i <= count; i++) {
113
+ range.push(current + incrementBy * this.parse(i));
114
+ }
115
+ if (range[range.length - 1] !== next)
116
+ throw new db_decorators_1.InternalError("Miscalculation of range");
117
+ return range;
118
+ }
119
+ }
120
+ exports.TypeORMSequence = TypeORMSequence;
121
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2VxdWVuY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VxdWVuY2VzL1NlcXVlbmNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDJEQUF1RTtBQUV2RSx5Q0FBMEM7QUFHMUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQThCRztBQUNILE1BQWEsZUFBZ0IsU0FBUSxlQUFRO0lBQzNDLFlBQ0UsT0FBd0IsRUFDZCxPQUF1QjtRQUVqQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFGTCxZQUFPLEdBQVAsT0FBTyxDQUFnQjtJQUduQyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsS0FBSyxDQUFDLE9BQU87UUFDWCxNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztRQUM5QixJQUFJLENBQUM7WUFDSCxNQUFNLEdBQUcsR0FBUSxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDO2dCQUN0QyxLQUFLLEVBQUUsaUZBQWlGO2dCQUN4RixNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUM7YUFDZixDQUFDLENBQUM7WUFDSCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLGFBQWdDLENBQUMsQ0FBQztRQUMxRCxDQUFDO1FBQUMsT0FBTyxDQUFVLEVBQUUsQ0FBQztZQUNwQixNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQVUsQ0FBQyxDQUFDO1FBQzVDLENBQUM7SUFDSCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSyxLQUFLLENBQUMsS0FBK0I7UUFDM0MsT0FBTyxlQUFRLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0ssS0FBSyxDQUFDLFNBQVMsQ0FDckIsT0FBaUMsRUFDakMsS0FBYztRQUVkLE1BQU0sRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO1FBQzVELElBQUksSUFBSSxLQUFLLFFBQVEsSUFBSSxJQUFJLEtBQUssUUFBUTtZQUN4QyxNQUFNLElBQUksNkJBQWEsQ0FDckIscUNBQXFDLElBQUksU0FBUyxLQUFLLEVBQUUsQ0FDMUQsQ0FBQztRQUNKLElBQUksSUFBOEIsQ0FBQztRQUNuQyxJQUFJLENBQUM7WUFDSCxJQUFJLEdBQUcsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQztnQkFDNUIsS0FBSyxFQUFFLHFCQUFxQjtnQkFDNUIsTUFBTSxFQUFFLENBQUMsSUFBSSxDQUFDO2FBQ2YsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUFDLE9BQU8sQ0FBVSxFQUFFLENBQUM7WUFDcEIsSUFBSSxDQUFDLENBQUMsQ0FBQyxZQUFZLDZCQUFhLENBQUM7Z0JBQUUsTUFBTSxDQUFDLENBQUM7WUFDM0MsSUFBSSxHQUFHLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUM7Z0JBQzVCLEtBQUssRUFBRSwwRUFBMEU7Z0JBQ2pGLE1BQU0sRUFBRSxDQUFDLElBQUksRUFBRSxTQUFTLEVBQUUsV0FBVyxDQUFDO2FBQ3ZDLENBQUMsQ0FBQztRQUNMLENBQUM7UUFFRCxPQUFPLElBQWdDLENBQUM7SUFDMUMsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsS0FBSyxDQUFDLElBQUk7UUFDUixNQUFNLE9BQU8sR0FBRyxNQUFNLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNyQyxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVELEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBYTtRQUN2QixNQUFNLE9BQU8sR0FBRyxDQUFDLE1BQU0sSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFXLENBQUM7UUFDakQsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBVyxDQUFDO1FBQ25FLE1BQU0sSUFBSSxHQUE2QixNQUFNLElBQUksQ0FBQyxTQUFTLENBQ3pELE9BQU8sRUFDTixJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBWSxHQUFHLFdBQVcsQ0FDNUMsQ0FBQztRQUNGLE1BQU0sS0FBSyxHQUFpQyxFQUFFLENBQUM7UUFDL0MsS0FBSyxJQUFJLENBQUMsR0FBVyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEtBQUssRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ3hDLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxHQUFHLFdBQVcsR0FBSSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBWSxDQUFDLENBQUM7UUFDaEUsQ0FBQztRQUNELElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSTtZQUNsQyxNQUFNLElBQUksNkJBQWEsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO1FBQ3JELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztDQUNGO0FBL0ZELDBDQStGQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEludGVybmFsRXJyb3IsIE5vdEZvdW5kRXJyb3IgfSBmcm9tIFwiQGRlY2FmLXRzL2RiLWRlY29yYXRvcnNcIjtcbmltcG9ydCB7IFNlcXVlbmNlT3B0aW9ucyB9IGZyb20gXCJAZGVjYWYtdHMvY29yZVwiO1xuaW1wb3J0IHsgU2VxdWVuY2UgfSBmcm9tIFwiQGRlY2FmLXRzL2NvcmVcIjtcbmltcG9ydCB7IFR5cGVPUk1BZGFwdGVyIH0gZnJvbSBcIi4uL1R5cGVPUk1BZGFwdGVyXCI7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIEFic3RyYWN0IGltcGxlbWVudGF0aW9uIG9mIGEgZGF0YWJhc2Ugc2VxdWVuY2UgZm9yIFR5cGVPUk0uXG4gKiBAc3VtbWFyeSBQcm92aWRlcyB0aGUgYmFzaWMgZnVuY3Rpb25hbGl0eSBmb3Ige0BsaW5rIFNlcXVlbmNlfXMsIGRlbGVnYXRpbmcgdG8gdGhlIHtAbGluayBUeXBlT1JNQWRhcHRlcn0gdG8gZmV0Y2ggYW5kIGluY3JlbWVudCB2YWx1ZXMgd2hpbGUgaGFuZGxpbmcgdHlwZSBwYXJzaW5nIGFuZCBlcnJvciB0cmFuc2xhdGlvbi5cbiAqIEBwYXJhbSB7U2VxdWVuY2VPcHRpb25zfSBvcHRpb25zIFRoZSBzZXF1ZW5jZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgKG5hbWUsIHR5cGUsIHN0YXJ0V2l0aCwgaW5jcmVtZW50QnksIGV0Yy4pLlxuICogQHBhcmFtIHtUeXBlT1JNQWRhcHRlcn0gYWRhcHRlciBUaGUgVHlwZU9STSBhZGFwdGVyIHVzZWQgdG8gZXhlY3V0ZSBzZXF1ZW5jZSBvcGVyYXRpb25zLlxuICogQGNsYXNzIFR5cGVPUk1TZXF1ZW5jZVxuICogQGltcGxlbWVudHMgU2VxdWVuY2VcbiAqIEBleGFtcGxlXG4gKiAvLyBDcmVhdGUgYW5kIHVzZSBhIFR5cGVPUk0tYmFja2VkIHNlcXVlbmNlXG4gKiBjb25zdCBzZXEgPSBuZXcgVHlwZU9STVNlcXVlbmNlKHsgbmFtZTogXCJ1c2VyX2lkX3NlcVwiLCB0eXBlOiBcIk51bWJlclwiLCBzdGFydFdpdGg6IDEsIGluY3JlbWVudEJ5OiAxIH0sIGFkYXB0ZXIpO1xuICogY29uc3QgbmV4dElkID0gYXdhaXQgc2VxLm5leHQoKTtcbiAqXG4gKiBAbWVybWFpZFxuICogc2VxdWVuY2VEaWFncmFtXG4gKiAgIHBhcnRpY2lwYW50IEFwcFxuICogICBwYXJ0aWNpcGFudCBTZXEgYXMgVHlwZU9STVNlcXVlbmNlXG4gKiAgIHBhcnRpY2lwYW50IEFkYXB0ZXIgYXMgVHlwZU9STUFkYXB0ZXJcbiAqICAgcGFydGljaXBhbnQgREIgYXMgRGF0YWJhc2VcbiAqICAgQXBwLT4+U2VxOiBuZXh0KClcbiAqICAgU2VxLT4+U2VxOiBjdXJyZW50KClcbiAqICAgU2VxLT4+QWRhcHRlcjogcmF3KFNFTEVDVCBjdXJyZW50X3ZhbHVlIC4uLilcbiAqICAgQWRhcHRlci0+PkRCOiBRdWVyeSBjdXJyZW50IHZhbHVlXG4gKiAgIERCLS0+PkFkYXB0ZXI6IGN1cnJlbnRfdmFsdWVcbiAqICAgQWRhcHRlci0tPj5TZXE6IHZhbHVlXG4gKiAgIFNlcS0+PlNlcTogaW5jcmVtZW50KGN1cnJlbnQpXG4gKiAgIFNlcS0+PkFkYXB0ZXI6IHJhdyhuZXh0dmFsKG5hbWUpKVxuICogICBBZGFwdGVyLT4+REI6IG5leHR2YWwoKVxuICogICBEQi0tPj5BZGFwdGVyOiBuZXh0IHZhbHVlXG4gKiAgIEFkYXB0ZXItLT4+U2VxOiB2YWx1ZVxuICogICBTZXEtLT4+QXBwOiBwYXJzZWQgbmV4dCB2YWx1ZVxuICovXG5leHBvcnQgY2xhc3MgVHlwZU9STVNlcXVlbmNlIGV4dGVuZHMgU2VxdWVuY2Uge1xuICBjb25zdHJ1Y3RvcihcbiAgICBvcHRpb25zOiBTZXF1ZW5jZU9wdGlvbnMsXG4gICAgcHJvdGVjdGVkIGFkYXB0ZXI6IFR5cGVPUk1BZGFwdGVyXG4gICkge1xuICAgIHN1cGVyKG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBzdW1tYXJ5IFJldHJpZXZlcyB0aGUgY3VycmVudCB2YWx1ZSBmb3IgdGhlIHNlcXVlbmNlXG4gICAqIEBwcm90ZWN0ZWRcbiAgICovXG4gIGFzeW5jIGN1cnJlbnQoKTogUHJvbWlzZTxzdHJpbmcgfCBudW1iZXIgfCBiaWdpbnQ+IHtcbiAgICBjb25zdCB7IG5hbWUgfSA9IHRoaXMub3B0aW9ucztcbiAgICB0cnkge1xuICAgICAgY29uc3Qgc2VxOiBhbnkgPSBhd2FpdCB0aGlzLmFkYXB0ZXIucmF3KHtcbiAgICAgICAgcXVlcnk6IGBTRUxFQ1QgY3VycmVudF92YWx1ZSBGUk9NIGluZm9ybWF0aW9uX3NjaGVtYS5zZXF1ZW5jZXMgV0hFUkUgc2VxdWVuY2VfbmFtZSA9ICQxYCxcbiAgICAgICAgdmFsdWVzOiBbbmFtZV0sXG4gICAgICB9KTtcbiAgICAgIHJldHVybiB0aGlzLnBhcnNlKHNlcS5jdXJyZW50X3ZhbHVlIGFzIHN0cmluZyB8IG51bWJlcik7XG4gICAgfSBjYXRjaCAoZTogdW5rbm93bikge1xuICAgICAgdGhyb3cgdGhpcy5hZGFwdGVyLnBhcnNlRXJyb3IoZSBhcyBFcnJvcik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBzdW1tYXJ5IFBhcnNlcyB0aGUge0BsaW5rIFNlcXVlbmNlfSB2YWx1ZVxuICAgKlxuICAgKiBAcHJvdGVjdGVkXG4gICAqIEBwYXJhbSB2YWx1ZVxuICAgKi9cbiAgcHJpdmF0ZSBwYXJzZSh2YWx1ZTogc3RyaW5nIHwgbnVtYmVyIHwgYmlnaW50KTogc3RyaW5nIHwgbnVtYmVyIHwgYmlnaW50IHtcbiAgICByZXR1cm4gU2VxdWVuY2UucGFyc2VWYWx1ZSh0aGlzLm9wdGlvbnMudHlwZSwgdmFsdWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBzdW1tYXJ5IGluY3JlbWVudHMgdGhlIHNlcXVlbmNlXG4gICAqIEBkZXNjcmlwdGlvbiBTZXF1ZW5jZSBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvblxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZyB8IG51bWJlciB8IGJpZ2ludH0gY3VycmVudFxuICAgKiBAcGFyYW0gY291bnRcbiAgICogQHByb3RlY3RlZFxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBpbmNyZW1lbnQoXG4gICAgY3VycmVudDogc3RyaW5nIHwgbnVtYmVyIHwgYmlnaW50LFxuICAgIGNvdW50PzogbnVtYmVyXG4gICk6IFByb21pc2U8c3RyaW5nIHwgbnVtYmVyIHwgYmlnaW50PiB7XG4gICAgY29uc3QgeyB0eXBlLCBpbmNyZW1lbnRCeSwgbmFtZSwgc3RhcnRXaXRoIH0gPSB0aGlzLm9wdGlvbnM7XG4gICAgaWYgKHR5cGUgIT09IFwiTnVtYmVyXCIgJiYgdHlwZSAhPT0gXCJCaWdJbnRcIilcbiAgICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKFxuICAgICAgICBgQ2Fubm90IGluY3JlbWVudCBzZXF1ZW5jZSBvZiB0eXBlICR7dHlwZX0gd2l0aCAke2NvdW50fWBcbiAgICAgICk7XG4gICAgbGV0IG5leHQ6IHN0cmluZyB8IG51bWJlciB8IGJpZ2ludDtcbiAgICB0cnkge1xuICAgICAgbmV4dCA9IGF3YWl0IHRoaXMuYWRhcHRlci5yYXcoe1xuICAgICAgICBxdWVyeTogYFNFTEVDVCBuZXh0dmFsKCQxKTtgLFxuICAgICAgICB2YWx1ZXM6IFtuYW1lXSxcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGU6IHVua25vd24pIHtcbiAgICAgIGlmICghKGUgaW5zdGFuY2VvZiBOb3RGb3VuZEVycm9yKSkgdGhyb3cgZTtcbiAgICAgIG5leHQgPSBhd2FpdCB0aGlzLmFkYXB0ZXIucmF3KHtcbiAgICAgICAgcXVlcnk6IGBDUkVBVEUgU0VRVUVOQ0UgSUYgTk9UIEVYSVNUUyAkMSBTVEFSVCBXSVRIICQyIElOQ1JFTUVOVCBCWSAkMyBOTyBDWUNMRTtgLFxuICAgICAgICB2YWx1ZXM6IFtuYW1lLCBzdGFydFdpdGgsIGluY3JlbWVudEJ5XSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBuZXh0IGFzIHN0cmluZyB8IG51bWJlciB8IGJpZ2ludDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAc3VtbWFyeSBHZW5lcmF0ZXMgdGhlIG5leHQgdmFsdWUgaW4gdGggc2VxdWVuY2VcbiAgICogQGRlc2NyaXB0aW9uIGNhbGxzIHtAbGluayBTZXF1ZW5jZSNwYXJzZX0gb24gdGhlIGN1cnJlbnQgdmFsdWVcbiAgICogZm9sbG93ZWQgYnkge0BsaW5rIFNlcXVlbmNlI2luY3JlbWVudH1cbiAgICpcbiAgICovXG4gIGFzeW5jIG5leHQoKTogUHJvbWlzZTxudW1iZXIgfCBzdHJpbmcgfCBiaWdpbnQ+IHtcbiAgICBjb25zdCBjdXJyZW50ID0gYXdhaXQgdGhpcy5jdXJyZW50KCk7XG4gICAgcmV0dXJuIHRoaXMuaW5jcmVtZW50KGN1cnJlbnQpO1xuICB9XG5cbiAgYXN5bmMgcmFuZ2UoY291bnQ6IG51bWJlcik6IFByb21pc2U8KG51bWJlciB8IHN0cmluZyB8IGJpZ2ludClbXT4ge1xuICAgIGNvbnN0IGN1cnJlbnQgPSAoYXdhaXQgdGhpcy5jdXJyZW50KCkpIGFzIG51bWJlcjtcbiAgICBjb25zdCBpbmNyZW1lbnRCeSA9IHRoaXMucGFyc2UodGhpcy5vcHRpb25zLmluY3JlbWVudEJ5KSBhcyBudW1iZXI7XG4gICAgY29uc3QgbmV4dDogc3RyaW5nIHwgbnVtYmVyIHwgYmlnaW50ID0gYXdhaXQgdGhpcy5pbmNyZW1lbnQoXG4gICAgICBjdXJyZW50LFxuICAgICAgKHRoaXMucGFyc2UoY291bnQpIGFzIG51bWJlcikgKiBpbmNyZW1lbnRCeVxuICAgICk7XG4gICAgY29uc3QgcmFuZ2U6IChudW1iZXIgfCBzdHJpbmcgfCBiaWdpbnQpW10gPSBbXTtcbiAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAxOyBpIDw9IGNvdW50OyBpKyspIHtcbiAgICAgIHJhbmdlLnB1c2goY3VycmVudCArIGluY3JlbWVudEJ5ICogKHRoaXMucGFyc2UoaSkgYXMgbnVtYmVyKSk7XG4gICAgfVxuICAgIGlmIChyYW5nZVtyYW5nZS5sZW5ndGggLSAxXSAhPT0gbmV4dClcbiAgICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKFwiTWlzY2FsY3VsYXRpb24gb2YgcmFuZ2VcIik7XG4gICAgcmV0dXJuIHJhbmdlO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,67 @@
1
+ import { SequenceOptions } from "@decaf-ts/core";
2
+ import { Sequence } from "@decaf-ts/core";
3
+ import { TypeORMAdapter } from "../TypeORMAdapter";
4
+ /**
5
+ * @description Abstract implementation of a database sequence for TypeORM.
6
+ * @summary Provides the basic functionality for {@link Sequence}s, delegating to the {@link TypeORMAdapter} to fetch and increment values while handling type parsing and error translation.
7
+ * @param {SequenceOptions} options The sequence configuration options (name, type, startWith, incrementBy, etc.).
8
+ * @param {TypeORMAdapter} adapter The TypeORM adapter used to execute sequence operations.
9
+ * @class TypeORMSequence
10
+ * @implements Sequence
11
+ * @example
12
+ * // Create and use a TypeORM-backed sequence
13
+ * const seq = new TypeORMSequence({ name: "user_id_seq", type: "Number", startWith: 1, incrementBy: 1 }, adapter);
14
+ * const nextId = await seq.next();
15
+ *
16
+ * @mermaid
17
+ * sequenceDiagram
18
+ * participant App
19
+ * participant Seq as TypeORMSequence
20
+ * participant Adapter as TypeORMAdapter
21
+ * participant DB as Database
22
+ * App->>Seq: next()
23
+ * Seq->>Seq: current()
24
+ * Seq->>Adapter: raw(SELECT current_value ...)
25
+ * Adapter->>DB: Query current value
26
+ * DB-->>Adapter: current_value
27
+ * Adapter-->>Seq: value
28
+ * Seq->>Seq: increment(current)
29
+ * Seq->>Adapter: raw(nextval(name))
30
+ * Adapter->>DB: nextval()
31
+ * DB-->>Adapter: next value
32
+ * Adapter-->>Seq: value
33
+ * Seq-->>App: parsed next value
34
+ */
35
+ export declare class TypeORMSequence extends Sequence {
36
+ protected adapter: TypeORMAdapter;
37
+ constructor(options: SequenceOptions, adapter: TypeORMAdapter);
38
+ /**
39
+ * @summary Retrieves the current value for the sequence
40
+ * @protected
41
+ */
42
+ current(): Promise<string | number | bigint>;
43
+ /**
44
+ * @summary Parses the {@link Sequence} value
45
+ *
46
+ * @protected
47
+ * @param value
48
+ */
49
+ private parse;
50
+ /**
51
+ * @summary increments the sequence
52
+ * @description Sequence specific implementation
53
+ *
54
+ * @param {string | number | bigint} current
55
+ * @param count
56
+ * @protected
57
+ */
58
+ private increment;
59
+ /**
60
+ * @summary Generates the next value in th sequence
61
+ * @description calls {@link Sequence#parse} on the current value
62
+ * followed by {@link Sequence#increment}
63
+ *
64
+ */
65
+ next(): Promise<number | string | bigint>;
66
+ range(count: number): Promise<(number | string | bigint)[]>;
67
+ }
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./Sequence.cjs"), exports);
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VxdWVuY2VzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxpREFBMkIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tIFwiLi9TZXF1ZW5jZVwiO1xuIl19
@@ -0,0 +1 @@
1
+ export * from "./Sequence";