@rawsql-ts/ztd-cli 0.14.4 → 0.16.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 (130) hide show
  1. package/README.md +25 -11
  2. package/dist/commands/init.js +27 -10
  3. package/dist/commands/init.js.map +1 -1
  4. package/dist/commands/lint.d.ts +59 -0
  5. package/dist/commands/lint.js +338 -0
  6. package/dist/commands/lint.js.map +1 -0
  7. package/dist/index.js +2 -0
  8. package/dist/index.js.map +1 -1
  9. package/dist/utils/sqlLintHelpers.d.ts +18 -0
  10. package/dist/utils/sqlLintHelpers.js +270 -0
  11. package/dist/utils/sqlLintHelpers.js.map +1 -0
  12. package/package.json +11 -4
  13. package/templates/AGENTS.md +95 -53
  14. package/templates/README.md +45 -67
  15. package/templates/dist/drivers/pg-testkit/src/driver/PgTestkitClient.d.ts +38 -0
  16. package/templates/dist/drivers/pg-testkit/src/driver/PgTestkitClient.js +117 -0
  17. package/templates/dist/drivers/pg-testkit/src/driver/PgTestkitClient.js.map +1 -0
  18. package/templates/dist/drivers/pg-testkit/src/driver/createPgTestkitPool.d.ts +4 -0
  19. package/templates/dist/drivers/pg-testkit/src/driver/createPgTestkitPool.js +71 -0
  20. package/templates/dist/drivers/pg-testkit/src/driver/createPgTestkitPool.js.map +1 -0
  21. package/templates/dist/drivers/pg-testkit/src/index.d.ts +5 -0
  22. package/templates/dist/drivers/pg-testkit/src/index.js +11 -0
  23. package/templates/dist/drivers/pg-testkit/src/index.js.map +1 -0
  24. package/templates/dist/drivers/pg-testkit/src/proxy/wrapPgClient.d.ts +3 -0
  25. package/templates/dist/drivers/pg-testkit/src/proxy/wrapPgClient.js +79 -0
  26. package/templates/dist/drivers/pg-testkit/src/proxy/wrapPgClient.js.map +1 -0
  27. package/templates/dist/drivers/pg-testkit/src/types.d.ts +69 -0
  28. package/templates/dist/drivers/pg-testkit/src/types.js +3 -0
  29. package/templates/dist/drivers/pg-testkit/src/types.js.map +1 -0
  30. package/templates/dist/drivers/pg-testkit/src/utils/fixtureState.d.ts +15 -0
  31. package/templates/dist/drivers/pg-testkit/src/utils/fixtureState.js +34 -0
  32. package/templates/dist/drivers/pg-testkit/src/utils/fixtureState.js.map +1 -0
  33. package/templates/dist/drivers/pg-testkit/src/utils/fixtureValidation.d.ts +12 -0
  34. package/templates/dist/drivers/pg-testkit/src/utils/fixtureValidation.js +53 -0
  35. package/templates/dist/drivers/pg-testkit/src/utils/fixtureValidation.js.map +1 -0
  36. package/templates/dist/mapper-core/src/index.d.ts +160 -0
  37. package/templates/dist/mapper-core/src/index.js +637 -0
  38. package/templates/dist/mapper-core/src/index.js.map +1 -0
  39. package/templates/dist/testkit-core/src/errors/index.d.ts +49 -0
  40. package/templates/dist/testkit-core/src/errors/index.js +111 -0
  41. package/templates/dist/testkit-core/src/errors/index.js.map +1 -0
  42. package/templates/dist/testkit-core/src/fixtures/ColumnAffinity.d.ts +5 -0
  43. package/templates/dist/testkit-core/src/fixtures/ColumnAffinity.js +29 -0
  44. package/templates/dist/testkit-core/src/fixtures/ColumnAffinity.js.map +1 -0
  45. package/templates/dist/testkit-core/src/fixtures/DdlFixtureLoader.d.ts +37 -0
  46. package/templates/dist/testkit-core/src/fixtures/DdlFixtureLoader.js +182 -0
  47. package/templates/dist/testkit-core/src/fixtures/DdlFixtureLoader.js.map +1 -0
  48. package/templates/dist/testkit-core/src/fixtures/FixtureProvider.d.ts +20 -0
  49. package/templates/dist/testkit-core/src/fixtures/FixtureProvider.js +121 -0
  50. package/templates/dist/testkit-core/src/fixtures/FixtureProvider.js.map +1 -0
  51. package/templates/dist/testkit-core/src/fixtures/FixtureStore.d.ts +51 -0
  52. package/templates/dist/testkit-core/src/fixtures/FixtureStore.js +199 -0
  53. package/templates/dist/testkit-core/src/fixtures/FixtureStore.js.map +1 -0
  54. package/templates/dist/testkit-core/src/fixtures/TableDefinitionSchemaRegistry.d.ts +10 -0
  55. package/templates/dist/testkit-core/src/fixtures/TableDefinitionSchemaRegistry.js +28 -0
  56. package/templates/dist/testkit-core/src/fixtures/TableDefinitionSchemaRegistry.js.map +1 -0
  57. package/templates/dist/testkit-core/src/fixtures/TableNameResolver.d.ts +18 -0
  58. package/templates/dist/testkit-core/src/fixtures/TableNameResolver.js +80 -0
  59. package/templates/dist/testkit-core/src/fixtures/TableNameResolver.js.map +1 -0
  60. package/templates/dist/testkit-core/src/fixtures/ddlLint.d.ts +59 -0
  61. package/templates/dist/testkit-core/src/fixtures/ddlLint.js +489 -0
  62. package/templates/dist/testkit-core/src/fixtures/ddlLint.js.map +1 -0
  63. package/templates/dist/testkit-core/src/fixtures/naming.d.ts +1 -0
  64. package/templates/dist/testkit-core/src/fixtures/naming.js +6 -0
  65. package/templates/dist/testkit-core/src/fixtures/naming.js.map +1 -0
  66. package/templates/dist/testkit-core/src/index.d.ts +17 -0
  67. package/templates/dist/testkit-core/src/index.js +47 -0
  68. package/templates/dist/testkit-core/src/index.js.map +1 -0
  69. package/templates/dist/testkit-core/src/logger/NoopLogger.d.ts +8 -0
  70. package/templates/dist/testkit-core/src/logger/NoopLogger.js +16 -0
  71. package/templates/dist/testkit-core/src/logger/NoopLogger.js.map +1 -0
  72. package/templates/dist/testkit-core/src/provider/TestkitProvider.d.ts +57 -0
  73. package/templates/dist/testkit-core/src/provider/TestkitProvider.js +149 -0
  74. package/templates/dist/testkit-core/src/provider/TestkitProvider.js.map +1 -0
  75. package/templates/dist/testkit-core/src/rewriter/ResultSelectRewriter.d.ts +43 -0
  76. package/templates/dist/testkit-core/src/rewriter/ResultSelectRewriter.js +473 -0
  77. package/templates/dist/testkit-core/src/rewriter/ResultSelectRewriter.js.map +1 -0
  78. package/templates/dist/testkit-core/src/rewriter/SelectAnalyzer.d.ts +9 -0
  79. package/templates/dist/testkit-core/src/rewriter/SelectAnalyzer.js +38 -0
  80. package/templates/dist/testkit-core/src/rewriter/SelectAnalyzer.js.map +1 -0
  81. package/templates/dist/testkit-core/src/rewriter/SelectFixtureRewriter.d.ts +42 -0
  82. package/templates/dist/testkit-core/src/rewriter/SelectFixtureRewriter.js +298 -0
  83. package/templates/dist/testkit-core/src/rewriter/SelectFixtureRewriter.js.map +1 -0
  84. package/templates/dist/testkit-core/src/sql/SqliteValuesBuilder.d.ts +12 -0
  85. package/templates/dist/testkit-core/src/sql/SqliteValuesBuilder.js +63 -0
  86. package/templates/dist/testkit-core/src/sql/SqliteValuesBuilder.js.map +1 -0
  87. package/templates/dist/testkit-core/src/types/index.d.ts +69 -0
  88. package/templates/dist/testkit-core/src/types/index.js +3 -0
  89. package/templates/dist/testkit-core/src/types/index.js.map +1 -0
  90. package/templates/dist/testkit-core/src/utils/queryHelpers.d.ts +28 -0
  91. package/templates/dist/testkit-core/src/utils/queryHelpers.js +81 -0
  92. package/templates/dist/testkit-core/src/utils/queryHelpers.js.map +1 -0
  93. package/templates/dist/writer-core/src/index.d.ts +34 -0
  94. package/templates/dist/writer-core/src/index.js +115 -0
  95. package/templates/dist/writer-core/src/index.js.map +1 -0
  96. package/templates/dist/ztd-cli/templates/src/db/sql-client.d.ts +20 -0
  97. package/templates/dist/ztd-cli/templates/src/db/sql-client.js +3 -0
  98. package/templates/dist/ztd-cli/templates/src/db/sql-client.js.map +1 -0
  99. package/templates/dist/ztd-cli/templates/src/repositories/user-accounts.d.ts +36 -0
  100. package/templates/dist/ztd-cli/templates/src/repositories/user-accounts.js +85 -0
  101. package/templates/dist/ztd-cli/templates/src/repositories/user-accounts.js.map +1 -0
  102. package/templates/dist/ztd-cli/templates/tests/generated/ztd-row-map.generated.d.ts +20 -0
  103. package/templates/dist/ztd-cli/templates/tests/generated/ztd-row-map.generated.js +33 -0
  104. package/templates/dist/ztd-cli/templates/tests/generated/ztd-row-map.generated.js.map +1 -0
  105. package/templates/dist/ztd-cli/templates/tests/support/global-setup.d.ts +10 -0
  106. package/templates/dist/ztd-cli/templates/tests/support/global-setup.js +29 -0
  107. package/templates/dist/ztd-cli/templates/tests/support/global-setup.js.map +1 -0
  108. package/templates/dist/ztd-cli/templates/tests/support/testkit-client.d.ts +66 -0
  109. package/templates/dist/ztd-cli/templates/tests/support/testkit-client.js +552 -0
  110. package/templates/dist/ztd-cli/templates/tests/support/testkit-client.js.map +1 -0
  111. package/templates/dist/ztd-cli/templates/tests/user-profiles.test.d.ts +1 -0
  112. package/templates/dist/ztd-cli/templates/tests/user-profiles.test.js +82 -0
  113. package/templates/dist/ztd-cli/templates/tests/user-profiles.test.js.map +1 -0
  114. package/templates/dist/ztd-cli/templates/tests/writer-constraints.test.d.ts +1 -0
  115. package/templates/dist/ztd-cli/templates/tests/writer-constraints.test.js +29 -0
  116. package/templates/dist/ztd-cli/templates/tests/writer-constraints.test.js.map +1 -0
  117. package/templates/dist/ztd-cli/templates/tests/ztd-layout.generated.d.ts +7 -0
  118. package/templates/dist/ztd-cli/templates/tests/ztd-layout.generated.js +10 -0
  119. package/templates/dist/ztd-cli/templates/tests/ztd-layout.generated.js.map +1 -0
  120. package/templates/src/db/sql-client.ts +1 -1
  121. package/templates/src/repositories/user-accounts.ts +179 -0
  122. package/templates/tests/AGENTS.md +59 -6
  123. package/templates/tests/support/global-setup.ts +1 -1
  124. package/templates/tests/support/testkit-client.ts +4 -4
  125. package/templates/tests/user-profiles.test.ts +161 -0
  126. package/templates/tests/writer-constraints.test.ts +32 -0
  127. package/templates/tests/ztd-layout.generated.ts +0 -2
  128. package/templates/tsconfig.json +1 -2
  129. package/templates/ztd/AGENTS.md +10 -85
  130. package/templates/ztd/README.md +10 -79
@@ -0,0 +1,637 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Mapper = exports.EntityMapping = exports.simpleMapPresets = void 0;
4
+ exports.entity = entity;
5
+ exports.columnMapFromPrefix = columnMapFromPrefix;
6
+ exports.createMapper = createMapper;
7
+ exports.createMapperFromExecutor = createMapperFromExecutor;
8
+ exports.toRowsExecutor = toRowsExecutor;
9
+ exports.mapRows = mapRows;
10
+ exports.mapSimpleRows = mapSimpleRows;
11
+ /**
12
+ * Named presets for simple mapping that avoid implicit inference.
13
+ */
14
+ exports.simpleMapPresets = {
15
+ safe() {
16
+ return {
17
+ keyTransform: 'none',
18
+ coerceDates: false,
19
+ };
20
+ },
21
+ pgLike() {
22
+ return {
23
+ keyTransform: 'snake_to_camel',
24
+ coerceDates: true,
25
+ };
26
+ },
27
+ };
28
+ /**
29
+ * Builds an entity mapping that can be consumed by {@link Mapper#query} or {@link mapRows}.
30
+ */
31
+ class EntityMapping {
32
+ constructor(options) {
33
+ var _a, _b, _c;
34
+ this.parents = [];
35
+ this.name = options.name;
36
+ this.key = options.key;
37
+ this.prefix = (_a = options.prefix) !== null && _a !== void 0 ? _a : '';
38
+ this.columnMap = {};
39
+ this.overrideLookup = new Map();
40
+ if (options.columnMap) {
41
+ for (const [property, column] of Object.entries(options.columnMap)) {
42
+ if (typeof column !== 'string') {
43
+ throw new Error(`EntityMapping "${this.name}" columnMap["${property}"] must be a string.`);
44
+ }
45
+ this.columnMap[property] = column;
46
+ this.overrideLookup.set(column.toLowerCase(), property);
47
+ }
48
+ }
49
+ if (!this.prefix && this.overrideLookup.size === 0) {
50
+ throw new Error(`EntityMapping "${this.name}" must define either "prefix" or "columnMap".`);
51
+ }
52
+ this.prefixNormalized = this.prefix.toLowerCase();
53
+ this.prefixLength = this.prefixNormalized.length;
54
+ this.shouldCoerce = (_b = options.coerce) !== null && _b !== void 0 ? _b : true;
55
+ this.coerceFn = (_c = options.coerceFn) !== null && _c !== void 0 ? _c : coerceColumnValue;
56
+ }
57
+ /**
58
+ * Registers a parent relationship that will be attached after the current row is mapped.
59
+ */
60
+ belongsTo(propertyName, parent, localKey, options) {
61
+ var _a;
62
+ const optional = (_a = options === null || options === void 0 ? void 0 : options.optional) !== null && _a !== void 0 ? _a : false;
63
+ this.parents.push({
64
+ propertyName: String(propertyName),
65
+ parent,
66
+ localKey,
67
+ optional,
68
+ });
69
+ return this;
70
+ }
71
+ /**
72
+ * Registers a parent relationship with an explicit local key.
73
+ */
74
+ belongsToWithLocalKey(propertyName, parent, localKey) {
75
+ return this.belongsTo(propertyName, parent, localKey);
76
+ }
77
+ /**
78
+ * Registers an optional parent relationship with an explicit local key.
79
+ */
80
+ belongsToOptional(propertyName, parent, localKey) {
81
+ if (localKey == null) {
82
+ throw new Error(`localKey is required when declaring optional relation "${String(propertyName)}" on "${this.name}"`);
83
+ }
84
+ return this.belongsTo(propertyName, parent, localKey, { optional: true });
85
+ }
86
+ matchColumn(columnName) {
87
+ const normalized = columnName.toLowerCase();
88
+ const override = this.overrideLookup.get(normalized);
89
+ if (override) {
90
+ return override;
91
+ }
92
+ if (!this.prefixNormalized) {
93
+ // When no prefix is provided we rely on explicit column overrides.
94
+ return undefined;
95
+ }
96
+ if (!normalized.startsWith(this.prefixNormalized)) {
97
+ return undefined;
98
+ }
99
+ // prefix is expected to include trailing '_' (e.g. 'item_') so remainder begins with the column part.
100
+ // Prefix matching is case-insensitive and purely string-based.
101
+ // If the prefix lacks '_', remainder may begin mid-token; prefer "item_" style prefixes.
102
+ const remainder = normalized.slice(this.prefixLength);
103
+ return remainder ? toCamelCase(remainder) : undefined;
104
+ }
105
+ resolveColumnName(propertyName) {
106
+ if (this.columnMap[propertyName]) {
107
+ return this.columnMap[propertyName];
108
+ }
109
+ if (!this.prefix) {
110
+ return propertyName;
111
+ }
112
+ if (propertyName.toLowerCase().startsWith(this.prefixNormalized)) {
113
+ return propertyName;
114
+ }
115
+ return `${this.prefix}${toSnakeCase(propertyName)}`;
116
+ }
117
+ readKeyValue(ctx) {
118
+ const column = this.resolveColumnName(this.key);
119
+ return getRowValue(ctx, column);
120
+ }
121
+ assignFields(target, ctx) {
122
+ for (const column of Object.keys(ctx.row)) {
123
+ const propertyName = this.matchColumn(column);
124
+ if (!propertyName) {
125
+ continue;
126
+ }
127
+ target[propertyName] = this.normalizeColumnValue(ctx.row[column]);
128
+ }
129
+ }
130
+ normalizeColumnValue(value) {
131
+ if (!this.shouldCoerce) {
132
+ return value;
133
+ }
134
+ return this.coerceFn(value);
135
+ }
136
+ }
137
+ exports.EntityMapping = EntityMapping;
138
+ /**
139
+ * Creates a new entity mapping from the provided options.
140
+ */
141
+ function entity(options) {
142
+ return new EntityMapping(options);
143
+ }
144
+ /**
145
+ * Builds a column map by prefixing each property with the provided prefix and
146
+ * converting property names to snake_case.
147
+ */
148
+ function columnMapFromPrefix(prefix, properties) {
149
+ const columnMap = {};
150
+ for (const property of properties) {
151
+ columnMap[property] = `${prefix}${toSnakeCase(String(property))}`;
152
+ }
153
+ return columnMap;
154
+ }
155
+ /**
156
+ * Executes SQL via the provided executor and maps the rows using the supplied mapping.
157
+ */
158
+ class Mapper {
159
+ constructor(executor, defaults = undefined) {
160
+ this.executor = executor;
161
+ this.defaults = defaults;
162
+ }
163
+ async query(sql, params = [], mappingOrOptions) {
164
+ const rows = await this.executor(sql, params);
165
+ if (mappingOrOptions instanceof EntityMapping) {
166
+ return mapRows(rows, mappingOrOptions);
167
+ }
168
+ return mapSimpleRows(rows, mergeSimpleMapOptions(this.defaults, mappingOrOptions));
169
+ }
170
+ async queryOne(sql, params = [], mappingOrOptions) {
171
+ // Narrow mappingOrOptions before invoking the overload so the compiler can
172
+ // select the expected signature.
173
+ if (mappingOrOptions instanceof EntityMapping) {
174
+ const rows = await this.query(sql, params, mappingOrOptions);
175
+ return rows[0];
176
+ }
177
+ const rows = await this.query(sql, params, mappingOrOptions);
178
+ return rows[0];
179
+ }
180
+ }
181
+ exports.Mapper = Mapper;
182
+ /**
183
+ * This package maps rows and does not manage DB drivers.
184
+ * Inject a query executor rather than wiring connections inside the mapper.
185
+ */
186
+ function createMapper(executor, defaults) {
187
+ return new Mapper(executor, defaults);
188
+ }
189
+ /**
190
+ * Creates a mapper using the supplied executor and user defaults.
191
+ * This helper is the recommended entry point when wiring an executor because
192
+ * it clearly signals where defaults are configured.
193
+ */
194
+ function createMapperFromExecutor(executor, defaults) {
195
+ return createMapper(executor, defaults);
196
+ }
197
+ /**
198
+ * Normalizes an executor returning `{ rows }` so it can be consumed by the mapper.
199
+ */
200
+ function toRowsExecutor(executorOrTarget, methodName) {
201
+ if (typeof executorOrTarget === 'function') {
202
+ return async (sql, params) => {
203
+ const result = await executorOrTarget(sql, params);
204
+ if (Array.isArray(result)) {
205
+ return result;
206
+ }
207
+ if ('rows' in result) {
208
+ return result.rows;
209
+ }
210
+ return [];
211
+ };
212
+ }
213
+ const executor = async (sql, params) => {
214
+ if (!methodName) {
215
+ throw new Error('Method name is required when passing an object/key pair');
216
+ }
217
+ const method = executorOrTarget[methodName];
218
+ if (typeof method !== 'function') {
219
+ throw new Error(`Method "${methodName}" not found on target`);
220
+ }
221
+ const result = await method.call(executorOrTarget, sql, params);
222
+ if (Array.isArray(result)) {
223
+ return result;
224
+ }
225
+ if (result && typeof result === 'object' && 'rows' in result) {
226
+ return result.rows;
227
+ }
228
+ return [];
229
+ };
230
+ return executor;
231
+ }
232
+ /**
233
+ * Maps a pre-fetched row array into typed objects defined by an entity mapping.
234
+ * Row values remain `unknown`, and the mapper only applies the general-purpose
235
+ * coercion rules declared in `coerceColumnValue`.
236
+ */
237
+ function mapRows(rows, mapping) {
238
+ const cache = new Map();
239
+ const roots = new Map();
240
+ // Deduplicate root entities by key so joined rows map back to the same object.
241
+ for (const row of rows) {
242
+ const ctx = createRowContext(row);
243
+ const keyValue = mapping.readKeyValue(ctx);
244
+ if (keyValue === undefined || keyValue === null) {
245
+ throw new Error(`Missing key column for root entity "${mapping.name}" in row ${JSON.stringify(row)}`);
246
+ }
247
+ const keyString = stringifyKey(keyValue);
248
+ const entity = buildEntity(ctx, mapping, cache, new Set(), [], undefined);
249
+ // Always hydrate parents per row; cache reuses existing entity references.
250
+ if (!roots.has(keyString)) {
251
+ roots.set(keyString, entity);
252
+ }
253
+ }
254
+ return Array.from(roots.values());
255
+ }
256
+ const builtinSimpleMapOptions = {
257
+ keyTransform: 'snake_to_camel',
258
+ idKeysAsString: true,
259
+ };
260
+ function mergeTypeHints(defaults, overrides) {
261
+ if (!defaults && !overrides) {
262
+ return undefined;
263
+ }
264
+ return {
265
+ ...(defaults !== null && defaults !== void 0 ? defaults : {}),
266
+ ...(overrides !== null && overrides !== void 0 ? overrides : {}),
267
+ };
268
+ }
269
+ function mergeSimpleMapOptions(defaults, overrides) {
270
+ var _a, _b, _c, _d, _e, _f;
271
+ const keyTransform = (_b = (_a = overrides === null || overrides === void 0 ? void 0 : overrides.keyTransform) !== null && _a !== void 0 ? _a : defaults === null || defaults === void 0 ? void 0 : defaults.keyTransform) !== null && _b !== void 0 ? _b : builtinSimpleMapOptions.keyTransform;
272
+ const coerceDates = (_c = overrides === null || overrides === void 0 ? void 0 : overrides.coerceDates) !== null && _c !== void 0 ? _c : defaults === null || defaults === void 0 ? void 0 : defaults.coerceDates;
273
+ const coerceFn = (_d = overrides === null || overrides === void 0 ? void 0 : overrides.coerceFn) !== null && _d !== void 0 ? _d : defaults === null || defaults === void 0 ? void 0 : defaults.coerceFn;
274
+ const typeHints = mergeTypeHints(defaults === null || defaults === void 0 ? void 0 : defaults.typeHints, overrides === null || overrides === void 0 ? void 0 : overrides.typeHints);
275
+ const idKeysAsString = (_f = (_e = overrides === null || overrides === void 0 ? void 0 : overrides.idKeysAsString) !== null && _e !== void 0 ? _e : defaults === null || defaults === void 0 ? void 0 : defaults.idKeysAsString) !== null && _f !== void 0 ? _f : builtinSimpleMapOptions.idKeysAsString;
276
+ return {
277
+ keyTransform,
278
+ coerceDates,
279
+ coerceFn,
280
+ typeHints,
281
+ idKeysAsString,
282
+ };
283
+ }
284
+ function createKeyTransformFn(transform) {
285
+ if (!transform || transform === 'snake_to_camel') {
286
+ return snakeToCamel;
287
+ }
288
+ if (transform === 'none') {
289
+ return (column) => column;
290
+ }
291
+ if (typeof transform === 'function') {
292
+ return transform;
293
+ }
294
+ return snakeToCamel;
295
+ }
296
+ /**
297
+ * Maps pre-fetched rows into typed DTOs using the simple map preset, honoring key transforms, type hints, and optional coercion settings.
298
+ *
299
+ * @template T Target DTO shape.
300
+ * @param rows Rows produced by the SQL executor.
301
+ * @param options Optional overrides that control key normalization, coercion, and type hints.
302
+ * @returns An array of `T` instances synthesized from `rows`.
303
+ */
304
+ function mapSimpleRows(rows, options) {
305
+ var _a, _b, _c;
306
+ const coerceFn = options === null || options === void 0 ? void 0 : options.coerceFn;
307
+ const keyTransform = (_a = options === null || options === void 0 ? void 0 : options.keyTransform) !== null && _a !== void 0 ? _a : builtinSimpleMapOptions.keyTransform;
308
+ const keyTransformFn = createKeyTransformFn(keyTransform);
309
+ const shouldCoerceDates = (_b = options === null || options === void 0 ? void 0 : options.coerceDates) !== null && _b !== void 0 ? _b : false;
310
+ const typeHints = options === null || options === void 0 ? void 0 : options.typeHints;
311
+ const idKeysAsString = (_c = options === null || options === void 0 ? void 0 : options.idKeysAsString) !== null && _c !== void 0 ? _c : builtinSimpleMapOptions.idKeysAsString;
312
+ return rows.map((row) => {
313
+ var _a;
314
+ const dto = {};
315
+ const seen = new Map();
316
+ // Map each column to a camelCase key while detecting naming collisions.
317
+ for (const [column, rawValue] of Object.entries(row)) {
318
+ const propertyName = keyTransformFn(column);
319
+ if (!propertyName) {
320
+ continue;
321
+ }
322
+ const existing = seen.get(propertyName);
323
+ if (existing && existing !== column) {
324
+ throw new Error(`Column "${column}" conflicts with "${existing}" after camelCase normalization ("${propertyName}").`);
325
+ }
326
+ seen.set(propertyName, column);
327
+ const columnHint = typeHints === null || typeHints === void 0 ? void 0 : typeHints[propertyName];
328
+ let normalizedValue = rawValue;
329
+ if (columnHint) {
330
+ normalizedValue = applyTypeHint(normalizedValue, columnHint, propertyName);
331
+ }
332
+ else if (shouldCoerceDates && typeof normalizedValue === 'string') {
333
+ normalizedValue = coerceDateValue(normalizedValue);
334
+ }
335
+ if (!columnHint && idKeysAsString && isIdentifierProperty(propertyName)) {
336
+ normalizedValue = stringifyIdentifierValue(normalizedValue);
337
+ }
338
+ dto[propertyName] =
339
+ (_a = coerceFn === null || coerceFn === void 0 ? void 0 : coerceFn({
340
+ key: propertyName,
341
+ sourceKey: column,
342
+ value: normalizedValue,
343
+ })) !== null && _a !== void 0 ? _a : normalizedValue;
344
+ }
345
+ return dto;
346
+ });
347
+ }
348
+ function coerceDateValue(value) {
349
+ const trimmed = value.trim();
350
+ let normalized = trimmed.includes(' ')
351
+ ? trimmed.replace(' ', 'T')
352
+ : trimmed;
353
+ if (/[+-]\d{2}$/.test(normalized)) {
354
+ normalized = `${normalized}:00`;
355
+ }
356
+ if (isoDateTimeRegex.test(normalized)) {
357
+ const parsed = Date.parse(normalized);
358
+ if (!Number.isNaN(parsed)) {
359
+ return new Date(parsed);
360
+ }
361
+ }
362
+ return value;
363
+ }
364
+ function applyTypeHint(value, hint, propertyName) {
365
+ if (value === undefined || value === null) {
366
+ return value;
367
+ }
368
+ switch (hint) {
369
+ case 'string':
370
+ if (typeof value === 'string') {
371
+ return value;
372
+ }
373
+ if (typeof value === 'number' || typeof value === 'bigint') {
374
+ return String(value);
375
+ }
376
+ return value;
377
+ case 'number':
378
+ if (typeof value === 'number') {
379
+ return value;
380
+ }
381
+ if (typeof value === 'string') {
382
+ const parsed = Number(value);
383
+ if (!Number.isNaN(parsed)) {
384
+ return parsed;
385
+ }
386
+ }
387
+ return value;
388
+ case 'boolean':
389
+ if (typeof value === 'boolean') {
390
+ return value;
391
+ }
392
+ if (typeof value === 'string') {
393
+ const normalized = value.trim().toLowerCase();
394
+ if (normalized === 'true') {
395
+ return true;
396
+ }
397
+ if (normalized === 'false') {
398
+ return false;
399
+ }
400
+ }
401
+ return value;
402
+ case 'date':
403
+ if (value instanceof Date) {
404
+ return value;
405
+ }
406
+ if (typeof value === 'string') {
407
+ const coerced = coerceDateValue(value);
408
+ if (coerced instanceof Date) {
409
+ return coerced;
410
+ }
411
+ }
412
+ return value;
413
+ case 'bigint':
414
+ if (typeof value === 'bigint') {
415
+ return value;
416
+ }
417
+ if (typeof value === 'number') {
418
+ return BigInt(value);
419
+ }
420
+ if (typeof value === 'string') {
421
+ try {
422
+ return BigInt(value);
423
+ }
424
+ catch {
425
+ throw new Error(`Type hint 'bigint' failed for "${propertyName !== null && propertyName !== void 0 ? propertyName : 'value'}": "${value}" is not a valid bigint.`);
426
+ }
427
+ }
428
+ return value;
429
+ }
430
+ }
431
+ function isIdentifierProperty(propertyName) {
432
+ if (propertyName === 'id') {
433
+ return true;
434
+ }
435
+ if (!propertyName.endsWith('Id')) {
436
+ return false;
437
+ }
438
+ const firstChar = propertyName.charAt(0);
439
+ if (firstChar !== firstChar.toLowerCase()) {
440
+ return false;
441
+ }
442
+ // Only treat camelCase names ending in 'Id' (uppercase I, lowercase d) as identifiers.
443
+ return true;
444
+ }
445
+ function stringifyIdentifierValue(value) {
446
+ if (value === undefined || value === null) {
447
+ return value;
448
+ }
449
+ if (typeof value === 'string') {
450
+ return value;
451
+ }
452
+ if (typeof value === 'number' || typeof value === 'bigint') {
453
+ return String(value);
454
+ }
455
+ return value;
456
+ }
457
+ function buildEntity(ctx, mapping, cache, visited, stack, relation) {
458
+ const { entity, isNew, keyString } = getOrCreateEntity(ctx, mapping, cache);
459
+ const visitKey = `${mapping.name}:${keyString}`;
460
+ const currentFrame = {
461
+ entity: mapping.name,
462
+ relation,
463
+ key: keyString,
464
+ };
465
+ if (visited.has(visitKey)) {
466
+ const cyclePath = [...stack, currentFrame]
467
+ .map((frame) => formatFrame(frame))
468
+ .join(' -> ');
469
+ throw new Error(`Circular entity mapping detected: ${cyclePath}`);
470
+ }
471
+ visited.add(visitKey);
472
+ stack.push(currentFrame);
473
+ try {
474
+ if (isNew) {
475
+ mapping.assignFields(entity, ctx);
476
+ }
477
+ hydrateParents(entity, ctx, mapping, cache, visited, stack);
478
+ return entity;
479
+ }
480
+ finally {
481
+ visited.delete(visitKey);
482
+ stack.pop();
483
+ }
484
+ }
485
+ function getOrCreateEntity(ctx, mapping, cache) {
486
+ const keyValue = mapping.readKeyValue(ctx);
487
+ if (keyValue === undefined || keyValue === null) {
488
+ throw new Error(`Missing key column for entity "${mapping.name}" during recursion.`);
489
+ }
490
+ let keyString;
491
+ try {
492
+ keyString = stringifyKey(keyValue);
493
+ }
494
+ catch (error) {
495
+ const detail = error instanceof Error && error.message ? ` (${error.message})` : '';
496
+ throw new Error(`Entity "${mapping.name}" key must be JSON-serializable${detail}.`);
497
+ }
498
+ let entitySet = cache.get(mapping);
499
+ if (!entitySet) {
500
+ entitySet = new Map();
501
+ cache.set(mapping, entitySet);
502
+ }
503
+ const existing = entitySet.get(keyString);
504
+ if (existing) {
505
+ return { entity: existing, isNew: false, keyString };
506
+ }
507
+ const newEntity = {};
508
+ entitySet.set(keyString, newEntity);
509
+ return { entity: newEntity, isNew: true, keyString };
510
+ }
511
+ function hydrateParents(entity, ctx, mapping, cache, visited, stack) {
512
+ for (const parent of mapping.parents) {
513
+ const localColumn = mapping.resolveColumnName(parent.localKey);
514
+ const normalizedLocalColumn = localColumn.toLowerCase();
515
+ if (!ctx.normalizedColumns.has(normalizedLocalColumn)) {
516
+ missingLocalKey(mapping.name, parent.propertyName, localColumn, parent.parent.name);
517
+ }
518
+ const localKeyValue = getRowValue(ctx, localColumn);
519
+ if (localKeyValue === undefined || localKeyValue === null) {
520
+ if (parent.optional) {
521
+ continue;
522
+ }
523
+ localKeyIsNull(mapping.name, parent.propertyName, localColumn, parent.parent.name);
524
+ }
525
+ const parentKeyColumn = parent.parent.resolveColumnName(parent.parent.key);
526
+ const normalizedParentKeyColumn = parentKeyColumn.toLowerCase();
527
+ if (!ctx.normalizedColumns.has(normalizedParentKeyColumn)) {
528
+ missingParentKeyColumn(mapping.name, parent.propertyName, parent.parent.name, parentKeyColumn);
529
+ }
530
+ const parentKeyValue = getRowValue(ctx, parentKeyColumn);
531
+ if (parentKeyValue === undefined || parentKeyValue === null) {
532
+ if (parent.optional) {
533
+ continue;
534
+ }
535
+ throw new Error(`Missing key column "${parentKeyColumn}" for parent entity "${parent.parent.name}"`);
536
+ }
537
+ const parentEntity = buildEntity(ctx, parent.parent, cache, visited, stack, parent.propertyName);
538
+ entity[parent.propertyName] = parentEntity;
539
+ }
540
+ }
541
+ function createRowContext(row) {
542
+ const normalized = new Map();
543
+ for (const column of Object.keys(row)) {
544
+ normalized.set(column.toLowerCase(), column);
545
+ }
546
+ return { row, normalizedColumns: normalized };
547
+ }
548
+ function getRowValue(ctx, columnName) {
549
+ const actual = ctx.normalizedColumns.get(columnName.toLowerCase());
550
+ if (!actual) {
551
+ return undefined;
552
+ }
553
+ return ctx.row[actual];
554
+ }
555
+ function coerceColumnValue(value) {
556
+ if (typeof value !== 'string') {
557
+ return value;
558
+ }
559
+ const trimmed = value.trim();
560
+ if (!trimmed) {
561
+ return value;
562
+ }
563
+ if (/^-?\d+(\.\d+)?$/.test(trimmed)) {
564
+ const numeric = Number(trimmed);
565
+ if (!Number.isNaN(numeric)) {
566
+ return numeric;
567
+ }
568
+ }
569
+ const lower = trimmed.toLowerCase();
570
+ if (lower === 'true' || lower === 'false') {
571
+ return lower === 'true';
572
+ }
573
+ // Mapper should stay DBMS-agnostic; Date coercion is intentionally limited to ISO 8601 datetime strings that include a timezone designator.
574
+ const isIsoDateTime = isoDateTimeRegex.test(trimmed);
575
+ if (isIsoDateTime) {
576
+ const parsed = Date.parse(trimmed);
577
+ if (!Number.isNaN(parsed)) {
578
+ return new Date(parsed);
579
+ }
580
+ }
581
+ return value;
582
+ }
583
+ const isoDateTimeRegex = /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}(:\d{2}(?:\.\d{1,9})?)?(Z|[+-]\d{2}:?\d{2})$/;
584
+ function stringifyKey(value) {
585
+ if (typeof value === 'object' && value !== null) {
586
+ try {
587
+ return JSON.stringify(value);
588
+ }
589
+ catch {
590
+ throw new Error('Entity key must be JSON-serializable.');
591
+ }
592
+ }
593
+ return String(value);
594
+ }
595
+ function missingLocalKey(mappingName, propertyName, localColumn, parentName) {
596
+ throw new Error(`Missing local key column "${localColumn}" for relation "${propertyName}" on ${mappingName} (parent ${parentName})`);
597
+ }
598
+ function missingParentKeyColumn(mappingName, propertyName, parentName, parentKeyColumn) {
599
+ throw new Error(`Missing key column "${parentKeyColumn}" for parent "${parentName}" relation "${propertyName}" on ${mappingName}`);
600
+ }
601
+ function localKeyIsNull(mappingName, propertyName, localColumn, parentName) {
602
+ throw new Error(`Local key column "${localColumn}" is null for relation "${propertyName}" on ${mappingName} (parent ${parentName})`);
603
+ }
604
+ function formatFrame(frame) {
605
+ const relationSuffix = frame.relation ? `.${frame.relation}` : '';
606
+ return `${frame.entity}${relationSuffix}(${frame.key})`;
607
+ }
608
+ function snakeToCamel(raw) {
609
+ const trimmed = raw.trim();
610
+ if (!trimmed) {
611
+ return '';
612
+ }
613
+ if (trimmed.includes('_')) {
614
+ return toCamelCase(trimmed);
615
+ }
616
+ if (trimmed === trimmed.toUpperCase()) {
617
+ return trimmed.toLowerCase();
618
+ }
619
+ return `${trimmed.charAt(0).toLowerCase()}${trimmed.slice(1)}`;
620
+ }
621
+ function toCamelCase(value) {
622
+ return value
623
+ .split('_')
624
+ .filter(Boolean)
625
+ .map((segment, index) => index === 0
626
+ ? segment.toLowerCase()
627
+ : `${segment.charAt(0).toUpperCase()}${segment.slice(1).toLowerCase()}`)
628
+ .join('');
629
+ }
630
+ function toSnakeCase(value) {
631
+ return value
632
+ .replace(/([A-Z])/g, '_$1')
633
+ .replace(/__+/g, '_')
634
+ .toLowerCase()
635
+ .replace(/^_+/, '');
636
+ }
637
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../mapper-core/src/index.ts"],"names":[],"mappings":"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"}