@pasosdejesus/m 0.25.0 → 0.27.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 (155) hide show
  1. package/dist/CHANGELOG.md +85 -0
  2. package/dist/base-model/baseline.generated.d.ts +48 -0
  3. package/dist/base-model/baseline.generated.d.ts.map +1 -0
  4. package/dist/base-model/baseline.generated.js +930 -0
  5. package/dist/base-model/baseline.generated.js.map +1 -0
  6. package/dist/base-model/check.d.ts +6 -0
  7. package/dist/base-model/check.d.ts.map +1 -0
  8. package/dist/base-model/check.js +195 -0
  9. package/dist/base-model/check.js.map +1 -0
  10. package/dist/base-model/forward/baseline_1_0_0.d.ts +3 -0
  11. package/dist/base-model/forward/baseline_1_0_0.d.ts.map +1 -0
  12. package/dist/base-model/forward/baseline_1_0_0.js +23 -0
  13. package/dist/base-model/forward/baseline_1_0_0.js.map +1 -0
  14. package/dist/base-model/forward/index.d.ts +28 -0
  15. package/dist/base-model/forward/index.d.ts.map +1 -0
  16. package/dist/base-model/forward/index.js +126 -0
  17. package/dist/base-model/forward/index.js.map +1 -0
  18. package/dist/base-model/forward/index.test.d.ts +2 -0
  19. package/dist/base-model/forward/index.test.d.ts.map +1 -0
  20. package/dist/base-model/forward/index.test.js +65 -0
  21. package/dist/base-model/forward/index.test.js.map +1 -0
  22. package/dist/base-model/forward/policy.d.ts +16 -0
  23. package/dist/base-model/forward/policy.d.ts.map +1 -0
  24. package/dist/base-model/forward/policy.js +37 -0
  25. package/dist/base-model/forward/policy.js.map +1 -0
  26. package/dist/base-model/forward/policy.test.d.ts +2 -0
  27. package/dist/base-model/forward/policy.test.d.ts.map +1 -0
  28. package/dist/base-model/forward/policy.test.js +40 -0
  29. package/dist/base-model/forward/policy.test.js.map +1 -0
  30. package/dist/base-model/forward/types.d.ts +21 -0
  31. package/dist/base-model/forward/types.d.ts.map +1 -0
  32. package/dist/base-model/forward/types.js +2 -0
  33. package/dist/base-model/forward/types.js.map +1 -0
  34. package/dist/base-model/generate.d.ts +42 -0
  35. package/dist/base-model/generate.d.ts.map +1 -0
  36. package/dist/base-model/generate.js +241 -0
  37. package/dist/base-model/generate.js.map +1 -0
  38. package/dist/base-model/guidelines.d.ts +13 -0
  39. package/dist/base-model/guidelines.d.ts.map +1 -0
  40. package/dist/base-model/guidelines.js +61 -0
  41. package/dist/base-model/guidelines.js.map +1 -0
  42. package/dist/base-model/index.d.ts +24 -0
  43. package/dist/base-model/index.d.ts.map +1 -0
  44. package/dist/base-model/index.js +29 -0
  45. package/dist/base-model/index.js.map +1 -0
  46. package/dist/base-model/parse-structure.d.ts +4 -0
  47. package/dist/base-model/parse-structure.d.ts.map +1 -0
  48. package/dist/base-model/parse-structure.js +170 -0
  49. package/dist/base-model/parse-structure.js.map +1 -0
  50. package/dist/base-model/queries.d.ts +34 -0
  51. package/dist/base-model/queries.d.ts.map +1 -0
  52. package/dist/base-model/queries.js +118 -0
  53. package/dist/base-model/queries.js.map +1 -0
  54. package/dist/base-model/references/learn-tg.d.ts +21 -0
  55. package/dist/base-model/references/learn-tg.d.ts.map +1 -0
  56. package/dist/base-model/references/learn-tg.js +65 -0
  57. package/dist/base-model/references/learn-tg.js.map +1 -0
  58. package/dist/base-model/references/msip.d.ts +29 -0
  59. package/dist/base-model/references/msip.d.ts.map +1 -0
  60. package/dist/base-model/references/msip.js +33 -0
  61. package/dist/base-model/references/msip.js.map +1 -0
  62. package/dist/base-model/types.d.ts +207 -0
  63. package/dist/base-model/types.d.ts.map +1 -0
  64. package/dist/base-model/types.js +10 -0
  65. package/dist/base-model/types.js.map +1 -0
  66. package/dist/base-model/version.d.ts +19 -0
  67. package/dist/base-model/version.d.ts.map +1 -0
  68. package/dist/base-model/version.js +26 -0
  69. package/dist/base-model/version.js.map +1 -0
  70. package/dist/base-model/wallet-link.d.ts +69 -0
  71. package/dist/base-model/wallet-link.d.ts.map +1 -0
  72. package/dist/base-model/wallet-link.js +220 -0
  73. package/dist/base-model/wallet-link.js.map +1 -0
  74. package/dist/base-model/wallet-link.test.d.ts +2 -0
  75. package/dist/base-model/wallet-link.test.d.ts.map +1 -0
  76. package/dist/base-model/wallet-link.test.js +147 -0
  77. package/dist/base-model/wallet-link.test.js.map +1 -0
  78. package/dist/e2e/full-wallet.d.ts +19 -0
  79. package/dist/e2e/full-wallet.d.ts.map +1 -1
  80. package/dist/e2e/full-wallet.js +12 -4
  81. package/dist/e2e/full-wallet.js.map +1 -1
  82. package/dist/e2e/full-wallet.test.js +26 -0
  83. package/dist/e2e/full-wallet.test.js.map +1 -1
  84. package/dist/e2e/in-app-wallet.d.ts +23 -0
  85. package/dist/e2e/in-app-wallet.d.ts.map +1 -0
  86. package/dist/e2e/in-app-wallet.js +40 -0
  87. package/dist/e2e/in-app-wallet.js.map +1 -0
  88. package/dist/e2e/in-app-wallet.test.d.ts +2 -0
  89. package/dist/e2e/in-app-wallet.test.d.ts.map +1 -0
  90. package/dist/e2e/in-app-wallet.test.js +52 -0
  91. package/dist/e2e/in-app-wallet.test.js.map +1 -0
  92. package/dist/e2e/index.d.ts +5 -1
  93. package/dist/e2e/index.d.ts.map +1 -1
  94. package/dist/e2e/index.js +2 -0
  95. package/dist/e2e/index.js.map +1 -1
  96. package/dist/e2e/siwe-optional.test.d.ts +2 -0
  97. package/dist/e2e/siwe-optional.test.d.ts.map +1 -0
  98. package/dist/e2e/siwe-optional.test.js +13 -0
  99. package/dist/e2e/siwe-optional.test.js.map +1 -0
  100. package/dist/e2e/siwe.d.ts.map +1 -1
  101. package/dist/e2e/siwe.js +1 -3
  102. package/dist/e2e/siwe.js.map +1 -1
  103. package/dist/e2e/warmup.d.ts +38 -0
  104. package/dist/e2e/warmup.d.ts.map +1 -0
  105. package/dist/e2e/warmup.js +84 -0
  106. package/dist/e2e/warmup.js.map +1 -0
  107. package/dist/e2e/warmup.test.d.ts +2 -0
  108. package/dist/e2e/warmup.test.d.ts.map +1 -0
  109. package/dist/e2e/warmup.test.js +67 -0
  110. package/dist/e2e/warmup.test.js.map +1 -0
  111. package/dist/i18n/locales/cli.d.ts.map +1 -1
  112. package/dist/i18n/locales/cli.js +10 -0
  113. package/dist/i18n/locales/cli.js.map +1 -1
  114. package/dist/m.js +14 -1
  115. package/dist/m.js.map +1 -1
  116. package/dist/tasks/base-model.d.ts +5 -0
  117. package/dist/tasks/base-model.d.ts.map +1 -0
  118. package/dist/tasks/base-model.js +310 -0
  119. package/dist/tasks/base-model.js.map +1 -0
  120. package/dist/tasks/db.d.ts.map +1 -1
  121. package/dist/tasks/db.js +27 -0
  122. package/dist/tasks/db.js.map +1 -1
  123. package/dist/tasks/warmup.d.ts +4 -0
  124. package/dist/tasks/warmup.d.ts.map +1 -0
  125. package/dist/tasks/warmup.js +67 -0
  126. package/dist/tasks/warmup.js.map +1 -0
  127. package/dist/tasks/warmup.test.d.ts +2 -0
  128. package/dist/tasks/warmup.test.d.ts.map +1 -0
  129. package/dist/tasks/warmup.test.js +40 -0
  130. package/dist/tasks/warmup.test.js.map +1 -0
  131. package/dist/templates/apps/nextjs/package.json.hbs +1 -1
  132. package/dist/test-utils/console.d.ts +37 -0
  133. package/dist/test-utils/console.d.ts.map +1 -0
  134. package/dist/test-utils/console.js +65 -0
  135. package/dist/test-utils/console.js.map +1 -0
  136. package/dist/test-utils/console.test.d.ts +2 -0
  137. package/dist/test-utils/console.test.d.ts.map +1 -0
  138. package/dist/test-utils/console.test.js +70 -0
  139. package/dist/test-utils/console.test.js.map +1 -0
  140. package/dist/test-utils/index.d.ts +1 -0
  141. package/dist/test-utils/index.d.ts.map +1 -1
  142. package/dist/test-utils/index.js +1 -0
  143. package/dist/test-utils/index.js.map +1 -1
  144. package/dist/test-utils/kysely-mocks.d.ts +244 -103
  145. package/dist/test-utils/kysely-mocks.d.ts.map +1 -1
  146. package/dist/test-utils/kysely-mocks.js +161 -18
  147. package/dist/test-utils/kysely-mocks.js.map +1 -1
  148. package/dist/test-utils/kysely-mocks.test.d.ts +2 -0
  149. package/dist/test-utils/kysely-mocks.test.d.ts.map +1 -0
  150. package/dist/test-utils/kysely-mocks.test.js +110 -0
  151. package/dist/test-utils/kysely-mocks.test.js.map +1 -0
  152. package/package.json +5 -1
  153. package/src/e2e/README.md +42 -0
  154. package/src/tasks/README.md +1 -0
  155. package/src/test-utils/README.md +28 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"baseline.generated.js","sourceRoot":"","sources":["../../src/base-model/baseline.generated.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import type { BaselineInventory, CheckReport, ParsedStructure, SqlExecutor } from './types.js';
2
+ export declare function inventoryFromParsed(parsed: ParsedStructure, tables?: readonly string[], version?: string): BaselineInventory;
3
+ export declare function compareInventories(expected: BaselineInventory, actual: BaselineInventory): CheckReport;
4
+ export declare function inventoryFromDb(db: SqlExecutor, tables?: readonly string[], version?: string): Promise<BaselineInventory>;
5
+ export declare function formatCheckReport(report: CheckReport): string;
6
+ //# sourceMappingURL=check.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../../src/base-model/check.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,iBAAiB,EAAgB,WAAW,EAA8B,eAAe,EACzF,WAAW,EACZ,MAAM,YAAY,CAAC;AAUpB,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,eAAe,EAAE,MAAM,GAAE,SAAS,MAAM,EAAsB,EAAE,OAAO,SAAK,GAAG,iBAAiB,CAa3I;AAED,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,iBAAiB,EAAE,MAAM,EAAE,iBAAiB,GAAG,WAAW,CA6FtG;AAyBD,wBAAsB,eAAe,CACnC,EAAE,EAAE,WAAW,EACf,MAAM,GAAE,SAAS,MAAM,EAAsB,EAC7C,OAAO,SAAK,GACX,OAAO,CAAC,iBAAiB,CAAC,CA2D5B;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,CAW7D"}
@@ -0,0 +1,195 @@
1
+ import { normalizeType } from './parse-structure.js';
2
+ import { BASE_MODEL_TABLES } from './version.js';
3
+ function canonicalConstraint(constraint) {
4
+ const columns = [...constraint.columns].sort().join(',');
5
+ const reference = constraint.references
6
+ ? `${constraint.references.table}(${[...constraint.references.columns].sort().join(',')})`
7
+ : '';
8
+ return `${constraint.kind}:${columns}:${reference}`;
9
+ }
10
+ export function inventoryFromParsed(parsed, tables = BASE_MODEL_TABLES, version = '') {
11
+ const inventory = { version, tables: {}, counts: {} };
12
+ for (const table of tables) {
13
+ const source = parsed.tables[table];
14
+ if (!source)
15
+ continue;
16
+ const columns = {};
17
+ for (const column of source.columns) {
18
+ columns[column.name] = { ...column, type: normalizeType(column.type) };
19
+ }
20
+ inventory.tables[table] = { columns, constraints: source.constraints };
21
+ inventory.counts[table] = source.columns.length;
22
+ }
23
+ return inventory;
24
+ }
25
+ export function compareInventories(expected, actual) {
26
+ const findings = [];
27
+ const tablesAbsent = [];
28
+ let tablesChecked = 0;
29
+ for (const [table, baseTable] of Object.entries(expected.tables)) {
30
+ const liveTable = actual.tables[table];
31
+ if (!liveTable) {
32
+ tablesAbsent.push(table);
33
+ findings.push({
34
+ table,
35
+ grade: 'absent',
36
+ detail: `base table "${table}" is missing (apply base model ${expected.version || ''}`.trim() + ')',
37
+ });
38
+ continue;
39
+ }
40
+ tablesChecked++;
41
+ for (const [columnName, baseColumn] of Object.entries(baseTable.columns)) {
42
+ const liveColumn = liveTable.columns[columnName];
43
+ if (!liveColumn) {
44
+ findings.push({ table, column: columnName, grade: 'drift', detail: `base column "${table}.${columnName}" is missing` });
45
+ continue;
46
+ }
47
+ const baseType = normalizeType(baseColumn.type);
48
+ const liveType = normalizeType(liveColumn.type);
49
+ if (baseType !== liveType) {
50
+ findings.push({
51
+ table,
52
+ column: columnName,
53
+ grade: 'drift',
54
+ detail: `"${table}.${columnName}" has type "${liveType}", base declares "${baseType}"`,
55
+ });
56
+ }
57
+ if (baseColumn.notNull && !liveColumn.notNull) {
58
+ findings.push({
59
+ table,
60
+ column: columnName,
61
+ grade: 'drift',
62
+ detail: `"${table}.${columnName}" is nullable, base declares NOT NULL`,
63
+ });
64
+ }
65
+ }
66
+ const liveByCanonical = new Set(liveTable.constraints.map(canonicalConstraint));
67
+ for (const constraint of baseTable.constraints) {
68
+ if (constraint.kind === 'check') {
69
+ if (!liveTable.constraints.some((live) => live.name === constraint.name)) {
70
+ findings.push({
71
+ table,
72
+ constraint: constraint.name,
73
+ grade: 'drift',
74
+ detail: `base check "${constraint.name}" is missing`,
75
+ });
76
+ }
77
+ continue;
78
+ }
79
+ if (!liveByCanonical.has(canonicalConstraint(constraint))) {
80
+ findings.push({
81
+ table,
82
+ constraint: constraint.name,
83
+ grade: 'drift',
84
+ detail: `base constraint "${constraint.name}" (${constraint.kind}) is missing on "${table}"`,
85
+ });
86
+ }
87
+ }
88
+ for (const live of liveTable.constraints) {
89
+ const known = baseTable.constraints.some((base) => base.name === live.name || canonicalConstraint(base) === canonicalConstraint(live));
90
+ if (!known) {
91
+ findings.push({ table, constraint: live.name, grade: 'extra', detail: `consumer constraint "${live.name}" (${live.kind})` });
92
+ }
93
+ }
94
+ for (const liveColumn of Object.keys(liveTable.columns)) {
95
+ if (!baseTable.columns[liveColumn]) {
96
+ findings.push({ table, column: liveColumn, grade: 'extra', detail: `consumer column "${table}.${liveColumn}"` });
97
+ }
98
+ }
99
+ }
100
+ const summary = {
101
+ drift: findings.filter((finding) => finding.grade === 'drift').length,
102
+ absent: findings.filter((finding) => finding.grade === 'absent').length,
103
+ extra: findings.filter((finding) => finding.grade === 'extra').length,
104
+ };
105
+ return {
106
+ ok: summary.drift === 0 && summary.absent === 0,
107
+ baseModelVersion: expected.version,
108
+ findings,
109
+ tablesChecked,
110
+ tablesAbsent,
111
+ summary,
112
+ };
113
+ }
114
+ function dbType(row) {
115
+ const dataType = row.data_type;
116
+ if (dataType === 'character varying' || dataType === 'character') {
117
+ return row.character_maximum_length === null ? dataType : `${dataType}(${row.character_maximum_length})`;
118
+ }
119
+ if (dataType === 'numeric') {
120
+ return row.numeric_precision === null ? 'numeric' : `numeric(${row.numeric_precision},${row.numeric_scale ?? 0})`;
121
+ }
122
+ if (dataType.startsWith('timestamp')) {
123
+ return row.datetime_precision === null || row.datetime_precision === 6
124
+ ? dataType
125
+ : `timestamp(${row.datetime_precision})${dataType.replace('timestamp', '')}`;
126
+ }
127
+ return dataType;
128
+ }
129
+ function sqlTableList(tables) {
130
+ return tables.map((table) => `'${table.replace(/'/g, "''")}'`).join(', ');
131
+ }
132
+ export async function inventoryFromDb(db, tables = BASE_MODEL_TABLES, version = '') {
133
+ const inventory = { version, tables: {}, counts: {} };
134
+ const tableList = sqlTableList(tables);
135
+ const columnsResult = await db.query(`SELECT table_name, column_name, data_type, is_nullable, column_default,
136
+ character_maximum_length, datetime_precision, numeric_precision, numeric_scale, udt_name
137
+ FROM information_schema.columns
138
+ WHERE table_schema = 'public' AND table_name IN (${tableList})
139
+ ORDER BY table_name, ordinal_position`);
140
+ const constraintsResult = await db.query(`SELECT t.relname AS table_name, c.conname, c.contype::text AS contype, pg_get_constraintdef(c.oid) AS definition
141
+ FROM pg_constraint c
142
+ JOIN pg_class t ON t.oid = c.conrelid
143
+ JOIN pg_namespace n ON n.oid = t.relnamespace
144
+ WHERE n.nspname = 'public' AND t.relname IN (${tableList}) AND c.contype IN ('p','u','f','c')
145
+ ORDER BY t.relname, c.conname`);
146
+ const kinds = {
147
+ p: 'primary-key', u: 'unique', f: 'foreign-key', c: 'check',
148
+ };
149
+ for (const row of columnsResult.rows) {
150
+ const table = inventory.tables[row.table_name] ?? (inventory.tables[row.table_name] = {
151
+ columns: {}, constraints: [],
152
+ });
153
+ table.columns[row.column_name] = {
154
+ name: row.column_name,
155
+ type: dbType(row),
156
+ notNull: row.is_nullable === 'NO',
157
+ default: row.column_default ?? undefined,
158
+ };
159
+ }
160
+ for (const row of constraintsResult.rows) {
161
+ const table = inventory.tables[row.table_name];
162
+ if (!table)
163
+ continue;
164
+ const columnsMatch = row.definition.match(/\((?:[^()]|\([^()]*\))*\)/);
165
+ const referencesMatch = row.definition.match(/REFERENCES\s+(?:\w+\.)?(\w+)\s*\(([^)]*)\)/);
166
+ table.constraints.push({
167
+ name: row.conname,
168
+ kind: kinds[row.contype] ?? 'check',
169
+ definition: row.definition,
170
+ columns: columnsMatch ? columnsMatch[0].slice(1, -1).split(',').map((column) => column.trim()) : [],
171
+ references: referencesMatch
172
+ ? { table: referencesMatch[1], columns: referencesMatch[2].split(',').map((column) => column.trim()) }
173
+ : undefined,
174
+ });
175
+ }
176
+ for (const table of Object.keys(inventory.tables)) {
177
+ inventory.counts[table] = Object.keys(inventory.tables[table].columns).length;
178
+ }
179
+ return inventory;
180
+ }
181
+ export function formatCheckReport(report) {
182
+ const lines = [];
183
+ lines.push(`Base model ${report.baseModelVersion}: ${report.ok ? 'compliant' : 'DRIFT'}`);
184
+ lines.push(` tables checked: ${report.tablesChecked}`);
185
+ if (report.tablesAbsent.length > 0)
186
+ lines.push(` absent tables: ${report.tablesAbsent.join(', ')}`);
187
+ for (const finding of report.findings.filter((entry) => entry.grade !== 'extra')) {
188
+ lines.push(` [${finding.grade}] ${finding.detail}`);
189
+ }
190
+ const extras = report.findings.filter((entry) => entry.grade === 'extra');
191
+ if (extras.length > 0)
192
+ lines.push(` [extra] ${extras.length} consumer additions (not a failure)`);
193
+ return lines.join('\n');
194
+ }
195
+ //# sourceMappingURL=check.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check.js","sourceRoot":"","sources":["../../src/base-model/check.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { BaseModelMigration } from './types.js';
2
+ export declare const BASELINE_1_0_0: BaseModelMigration;
3
+ //# sourceMappingURL=baseline_1_0_0.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"baseline_1_0_0.d.ts","sourceRoot":"","sources":["../../../src/base-model/forward/baseline_1_0_0.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAOrD,eAAO,MAAM,cAAc,EAAE,kBAO5B,CAAC"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Paso 0.0.0 → 1.0.0: el baseline del modelo base.
3
+ *
4
+ * Es el primer paso que recibe un proyecto nuevo: en vez de que el consumidor
5
+ * escriba a mano la migración del baseline (lo que los tutoriales tenían que
6
+ * explicar), `base-model:setup` la genera. `down` revierte el esquema base a
7
+ * vacío (drop de las tablas y la secuencia).
8
+ */
9
+ import { BASELINE_SQL } from '../baseline.generated.js';
10
+ import { BASE_MODEL_TABLES } from '../version.js';
11
+ const DOWN_SQL = [
12
+ ...[...BASE_MODEL_TABLES].reverse().map((table) => `DROP TABLE IF EXISTS public.${table} CASCADE;`),
13
+ 'DROP SEQUENCE IF EXISTS public.usuario_id_seq;',
14
+ ].join('\n');
15
+ export const BASELINE_1_0_0 = {
16
+ from: '0.0.0',
17
+ to: '1.0.0',
18
+ slug: 'baseline',
19
+ description: `Base model 1.0.0 baseline: ${BASE_MODEL_TABLES.join(', ')}`,
20
+ upSql: BASELINE_SQL,
21
+ downSql: DOWN_SQL,
22
+ };
23
+ //# sourceMappingURL=baseline_1_0_0.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"baseline_1_0_0.js","sourceRoot":"","sources":["../../../src/base-model/forward/baseline_1_0_0.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAGlD,MAAM,QAAQ,GAAG;IACf,GAAG,CAAC,GAAG,iBAAiB,CAAC,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,+BAA+B,KAAK,WAAW,CAAC;IACnG,gDAAgD;CACjD,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAEb,MAAM,CAAC,MAAM,cAAc,GAAuB;IAChD,IAAI,EAAE,OAAO;IACb,EAAE,EAAE,OAAO;IACX,IAAI,EAAE,UAAU;IAChB,WAAW,EAAE,8BAA8B,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;IACzE,KAAK,EAAE,YAAY;IACnB,OAAO,EAAE,QAAQ;CAClB,CAAC"}
@@ -0,0 +1,28 @@
1
+ import type { BaseModelMigration } from './types.js';
2
+ export type { BaseModelMigration } from './types.js';
3
+ export { BASELINE_1_0_0 } from './baseline_1_0_0.js';
4
+ export { checkMigrationPolicy } from './policy.js';
5
+ export type { MigrationPolicyViolation } from './policy.js';
6
+ /** Pasos del modelo base, en orden. */
7
+ export declare const BASE_MODEL_MIGRATIONS: readonly BaseModelMigration[];
8
+ /** Marcador que identifica el paso en el nombre del archivo generado. */
9
+ export declare function migrationMarker(migration: BaseModelMigration): string;
10
+ export interface SetupPlan {
11
+ missing: BaseModelMigration[];
12
+ present: BaseModelMigration[];
13
+ }
14
+ /**
15
+ * Decide qué pasos faltan a partir de los nombres de archivo ya presentes en
16
+ * `db/migrations/` (un paso está tomado si hay un archivo que lleva su marcador).
17
+ */
18
+ export declare function planSetup(migrations: readonly BaseModelMigration[], existingFiles: readonly string[]): SetupPlan;
19
+ /**
20
+ * Trocea un guion SQL en sentencias (sin `;` final), respetando cadenas con
21
+ * comillas simples, cadenas con *dollar-quoting* (`$$`/`$tag$`) y comentarios
22
+ * de línea (`--`) y de bloque. Postgres por el protocolo extendido no acepta
23
+ * varias sentencias juntas, así que el paso las ejecuta una por una.
24
+ */
25
+ export declare function splitSqlStatements(sql: string): string[];
26
+ /** Contenido de la migración Kysely que el consumidor aplica con `db:migrate`. */
27
+ export declare function renderMigrationFile(migration: BaseModelMigration): string;
28
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/base-model/forward/index.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAErD,YAAY,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,YAAY,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AAE5D,uCAAuC;AACvC,eAAO,MAAM,qBAAqB,EAAE,SAAS,kBAAkB,EAAqB,CAAC;AAErF,yEAAyE;AACzE,wBAAgB,eAAe,CAAC,SAAS,EAAE,kBAAkB,GAAG,MAAM,CAErE;AAED,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,kBAAkB,EAAE,CAAC;IAC9B,OAAO,EAAE,kBAAkB,EAAE,CAAC;CAC/B;AAED;;;GAGG;AACH,wBAAgB,SAAS,CACvB,UAAU,EAAE,SAAS,kBAAkB,EAAE,EACzC,aAAa,EAAE,SAAS,MAAM,EAAE,GAC/B,SAAS,CAQX;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAwDxD;AAED,kFAAkF;AAClF,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,kBAAkB,GAAG,MAAM,CAuBzE"}
@@ -0,0 +1,126 @@
1
+ /**
2
+ * Pasos de migración del modelo base (m/REQ/46 D11).
3
+ *
4
+ * `BASE_MODEL_MIGRATIONS` está en orden (el más antiguo primero). Los helpers
5
+ * `migrationMarker`/`planSetup`/`renderMigrationFile`/`splitSqlStatements` son
6
+ * puros y los usa `base-model:setup`.
7
+ */
8
+ import { BASELINE_1_0_0 } from './baseline_1_0_0.js';
9
+ export { BASELINE_1_0_0 } from './baseline_1_0_0.js';
10
+ export { checkMigrationPolicy } from './policy.js';
11
+ /** Pasos del modelo base, en orden. */
12
+ export const BASE_MODEL_MIGRATIONS = [BASELINE_1_0_0];
13
+ /** Marcador que identifica el paso en el nombre del archivo generado. */
14
+ export function migrationMarker(migration) {
15
+ return `base_model_${migration.from}_${migration.to}_${migration.slug}`;
16
+ }
17
+ /**
18
+ * Decide qué pasos faltan a partir de los nombres de archivo ya presentes en
19
+ * `db/migrations/` (un paso está tomado si hay un archivo que lleva su marcador).
20
+ */
21
+ export function planSetup(migrations, existingFiles) {
22
+ const missing = [];
23
+ const present = [];
24
+ for (const migration of migrations) {
25
+ const marker = migrationMarker(migration);
26
+ (existingFiles.some((file) => file.includes(marker)) ? present : missing).push(migration);
27
+ }
28
+ return { missing, present };
29
+ }
30
+ /**
31
+ * Trocea un guion SQL en sentencias (sin `;` final), respetando cadenas con
32
+ * comillas simples, cadenas con *dollar-quoting* (`$$`/`$tag$`) y comentarios
33
+ * de línea (`--`) y de bloque. Postgres por el protocolo extendido no acepta
34
+ * varias sentencias juntas, así que el paso las ejecuta una por una.
35
+ */
36
+ export function splitSqlStatements(sql) {
37
+ const statements = [];
38
+ let current = '';
39
+ let i = 0;
40
+ const n = sql.length;
41
+ while (i < n) {
42
+ const ch = sql[i];
43
+ if (ch === '-' && sql[i + 1] === '-') {
44
+ const end = sql.indexOf('\n', i);
45
+ const stop = end === -1 ? n : end;
46
+ current += sql.slice(i, stop);
47
+ i = stop;
48
+ continue;
49
+ }
50
+ if (ch === '/' && sql[i + 1] === '*') {
51
+ const end = sql.indexOf('*/', i + 2);
52
+ const stop = end === -1 ? n : end + 2;
53
+ current += sql.slice(i, stop);
54
+ i = stop;
55
+ continue;
56
+ }
57
+ if (ch === "'") {
58
+ let j = i + 1;
59
+ while (j < n) {
60
+ if (sql[j] === "'" && sql[j + 1] === "'") {
61
+ j += 2;
62
+ continue;
63
+ }
64
+ if (sql[j] === "'") {
65
+ j += 1;
66
+ break;
67
+ }
68
+ j += 1;
69
+ }
70
+ current += sql.slice(i, j);
71
+ i = j;
72
+ continue;
73
+ }
74
+ if (ch === '$') {
75
+ const match = /^\$[A-Za-z_]*\$/.exec(sql.slice(i));
76
+ if (match) {
77
+ const tag = match[0];
78
+ const end = sql.indexOf(tag, i + tag.length);
79
+ const stop = end === -1 ? n : end + tag.length;
80
+ current += sql.slice(i, stop);
81
+ i = stop;
82
+ continue;
83
+ }
84
+ }
85
+ if (ch === ';') {
86
+ const statement = current.trim();
87
+ if (statement)
88
+ statements.push(statement);
89
+ current = '';
90
+ i += 1;
91
+ continue;
92
+ }
93
+ current += ch;
94
+ i += 1;
95
+ }
96
+ const last = current.trim();
97
+ if (last)
98
+ statements.push(last);
99
+ return statements;
100
+ }
101
+ /** Contenido de la migración Kysely que el consumidor aplica con `db:migrate`. */
102
+ export function renderMigrationFile(migration) {
103
+ const up = splitSqlStatements(migration.upSql);
104
+ const down = splitSqlStatements(migration.downSql);
105
+ return `// Migración del modelo base ${migration.from} → ${migration.to} (${migration.slug}).
106
+ // Generada por \`m base-model:setup\` (m/REQ/46 D11). No editar a mano.
107
+ import { Kysely, sql } from 'kysely';
108
+
109
+ const UP = ${JSON.stringify(up, null, 2)};
110
+
111
+ const DOWN = ${JSON.stringify(down, null, 2)};
112
+
113
+ export async function up(db: Kysely<any>): Promise<void> {
114
+ for (const statement of UP) {
115
+ await sql.raw(statement).execute(db);
116
+ }
117
+ }
118
+
119
+ export async function down(db: Kysely<any>): Promise<void> {
120
+ for (const statement of DOWN) {
121
+ await sql.raw(statement).execute(db);
122
+ }
123
+ }
124
+ `;
125
+ }
126
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/base-model/forward/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=index.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.test.d.ts","sourceRoot":"","sources":["../../../src/base-model/forward/index.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,65 @@
1
+ import { describe, expect, it } from 'vitest';
2
+ import { BASE_MODEL_MIGRATIONS, migrationMarker, planSetup, renderMigrationFile, splitSqlStatements, } from './index.js';
3
+ // m/REQ/46 D11: pasos de migración del modelo base.
4
+ describe('splitSqlStatements (D11)', () => {
5
+ it('splits at top-level semicolons and drops empties', () => {
6
+ expect(splitSqlStatements('SELECT 1;\nSELECT 2;')).toEqual(['SELECT 1', 'SELECT 2']);
7
+ expect(splitSqlStatements('SELECT 1;\n\n')).toEqual(['SELECT 1']);
8
+ expect(splitSqlStatements('')).toEqual([]);
9
+ });
10
+ it('keeps semicolons inside single-quoted strings', () => {
11
+ expect(splitSqlStatements("INSERT INTO t VALUES ('a;b'); SELECT 1;")).toEqual([
12
+ "INSERT INTO t VALUES ('a;b')", 'SELECT 1',
13
+ ]);
14
+ });
15
+ it('handles the doubled single-quote escape', () => {
16
+ expect(splitSqlStatements("SELECT 'it''s; fine';")).toEqual(["SELECT 'it''s; fine'"]);
17
+ });
18
+ it('keeps a dollar-quoted block as one statement', () => {
19
+ const sql = "DO $$ BEGIN RAISE EXCEPTION 'x; y'; END $$;\nSELECT 1;";
20
+ expect(splitSqlStatements(sql)).toEqual(["DO $$ BEGIN RAISE EXCEPTION 'x; y'; END $$", 'SELECT 1']);
21
+ });
22
+ it('ignores semicolons in line comments', () => {
23
+ expect(splitSqlStatements('SELECT 1 -- no; here\n; SELECT 2;')).toEqual(['SELECT 1 -- no; here', 'SELECT 2']);
24
+ });
25
+ });
26
+ describe('migrationMarker / planSetup (D11)', () => {
27
+ it('builds the file marker', () => {
28
+ expect(migrationMarker(BASE_MODEL_MIGRATIONS[0])).toBe('base_model_0.0.0_1.0.0_baseline');
29
+ });
30
+ it('detects a step already present by its file name', () => {
31
+ const plan = planSetup(BASE_MODEL_MIGRATIONS, ['20260101000000_base_model_0.0.0_1.0.0_baseline.ts']);
32
+ expect(plan.present).toHaveLength(1);
33
+ expect(plan.missing).toHaveLength(0);
34
+ });
35
+ it('reports the step as missing when there is no file', () => {
36
+ expect(planSetup(BASE_MODEL_MIGRATIONS, []).missing).toHaveLength(1);
37
+ });
38
+ });
39
+ describe('BASE_MODEL_MIGRATIONS (D11/D12)', () => {
40
+ it('ships the 0.0.0 → 1.0.0 baseline step', () => {
41
+ expect(BASE_MODEL_MIGRATIONS).toHaveLength(1);
42
+ const [step] = BASE_MODEL_MIGRATIONS;
43
+ expect(step.from).toBe('0.0.0');
44
+ expect(step.to).toBe('1.0.0');
45
+ expect(step.upSql).toContain('CREATE TABLE');
46
+ expect(step.downSql).toContain('DROP TABLE');
47
+ });
48
+ it('every step has a non-empty downSql (D12)', () => {
49
+ for (const step of BASE_MODEL_MIGRATIONS) {
50
+ expect(step.downSql.trim().length).toBeGreaterThan(0);
51
+ }
52
+ });
53
+ });
54
+ describe('renderMigrationFile (D11)', () => {
55
+ it('emits a Kysely migration that runs each statement', () => {
56
+ const code = renderMigrationFile(BASE_MODEL_MIGRATIONS[0]);
57
+ expect(code).toContain("import { Kysely, sql } from 'kysely'");
58
+ expect(code).toContain('export async function up(db: Kysely<any>)');
59
+ expect(code).toContain('export async function down(db: Kysely<any>)');
60
+ expect(code).toContain('await sql.raw(statement).execute(db)');
61
+ expect(code).toContain('const UP = [');
62
+ expect(code).toContain('const DOWN = [');
63
+ });
64
+ });
65
+ //# sourceMappingURL=index.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.test.js","sourceRoot":"","sources":["../../../src/base-model/forward/index.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Guard de la política de compatibilidad del modelo base (m/REQ/46 D12).
3
+ *
4
+ * Los cambios **restrictivos** —los que obligan al consumidor a actuar— solo se
5
+ * permiten en un salto de **major**; además todo paso debe traer un `downSql`
6
+ * explícito. La detección es heurística sobre el SQL (los casos inequívocos); un
7
+ * cambio restrictivo que se escape debe seguir declarándose a mano.
8
+ */
9
+ import type { BaseModelMigration } from './types.js';
10
+ export interface MigrationPolicyViolation {
11
+ migration: BaseModelMigration;
12
+ reason: string;
13
+ }
14
+ /** Devuelve las violaciones de D12 (lista vacía si todo está permitido). */
15
+ export declare function checkMigrationPolicy(migrations: readonly BaseModelMigration[]): MigrationPolicyViolation[];
16
+ //# sourceMappingURL=policy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"policy.d.ts","sourceRoot":"","sources":["../../../src/base-model/forward/policy.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAErD,MAAM,WAAW,wBAAwB;IACvC,SAAS,EAAE,kBAAkB,CAAC;IAC9B,MAAM,EAAE,MAAM,CAAC;CAChB;AAqBD,4EAA4E;AAC5E,wBAAgB,oBAAoB,CAClC,UAAU,EAAE,SAAS,kBAAkB,EAAE,GACxC,wBAAwB,EAAE,CAkB5B"}
@@ -0,0 +1,37 @@
1
+ /** Patrones que en D12 solo se permiten con un salto de major. */
2
+ const RESTRICTIVE_PATTERNS = [
3
+ { re: /\bDROP\s+TABLE\b/i, label: 'DROP TABLE' },
4
+ { re: /\bDROP\s+COLUMN\b/i, label: 'DROP COLUMN' },
5
+ { re: /\bRENAME\b/i, label: 'RENAME' },
6
+ { re: /\bSET\s+NOT\s+NULL\b/i, label: 'SET NOT NULL' },
7
+ { re: /\bALTER\s+COLUMN\b[^;]*\b(?:TYPE|SET\s+DATA\s+TYPE)\b/i, label: 'ALTER COLUMN … TYPE' },
8
+ { re: /\bDROP\s+CONSTRAINT\b/i, label: 'DROP CONSTRAINT' },
9
+ ];
10
+ function major(version) {
11
+ return Number.parseInt(version.split('.')[0] ?? '0', 10) || 0;
12
+ }
13
+ /** Quita comentarios (`-- …` y de bloque) para no confundirlos con SQL. */
14
+ function stripComments(sql) {
15
+ return sql.replace(/\/\*[\s\S]*?\*\//g, ' ').replace(/--[^\n]*/g, ' ');
16
+ }
17
+ /** Devuelve las violaciones de D12 (lista vacía si todo está permitido). */
18
+ export function checkMigrationPolicy(migrations) {
19
+ const violations = [];
20
+ for (const migration of migrations) {
21
+ if (migration.downSql.trim() === '') {
22
+ violations.push({ migration, reason: 'downSql vacío: D12 exige un downSql explícito' });
23
+ }
24
+ const upSql = stripComments(migration.upSql);
25
+ const restrictive = RESTRICTIVE_PATTERNS
26
+ .filter(({ re }) => re.test(upSql))
27
+ .map(({ label }) => label);
28
+ if (restrictive.length > 0 && major(migration.to) <= major(migration.from)) {
29
+ violations.push({
30
+ migration,
31
+ reason: `cambio restrictivo (${restrictive.join(', ')}) sin subir de major: ${migration.from} → ${migration.to}`,
32
+ });
33
+ }
34
+ }
35
+ return violations;
36
+ }
37
+ //# sourceMappingURL=policy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"policy.js","sourceRoot":"","sources":["../../../src/base-model/forward/policy.ts"],"names":[],"mappings":"AAeA,kEAAkE;AAClE,MAAM,oBAAoB,GAAiD;IACzE,EAAE,EAAE,EAAE,mBAAmB,EAAE,KAAK,EAAE,YAAY,EAAE;IAChD,EAAE,EAAE,EAAE,oBAAoB,EAAE,KAAK,EAAE,aAAa,EAAE;IAClD,EAAE,EAAE,EAAE,aAAa,EAAE,KAAK,EAAE,QAAQ,EAAE;IACtC,EAAE,EAAE,EAAE,uBAAuB,EAAE,KAAK,EAAE,cAAc,EAAE;IACtD,EAAE,EAAE,EAAE,wDAAwD,EAAE,KAAK,EAAE,qBAAqB,EAAE;IAC9F,EAAE,EAAE,EAAE,wBAAwB,EAAE,KAAK,EAAE,iBAAiB,EAAE;CAC3D,CAAC;AAEF,SAAS,KAAK,CAAC,OAAe;IAC5B,OAAO,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;AAChE,CAAC;AAED,2EAA2E;AAC3E,SAAS,aAAa,CAAC,GAAW;IAChC,OAAO,GAAG,CAAC,OAAO,CAAC,mBAAmB,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;AACzE,CAAC;AAED,4EAA4E;AAC5E,MAAM,UAAU,oBAAoB,CAClC,UAAyC;IAEzC,MAAM,UAAU,GAA+B,EAAE,CAAC;IAClD,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,IAAI,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;YACpC,UAAU,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,+CAA+C,EAAE,CAAC,CAAC;QAC1F,CAAC;QACD,MAAM,KAAK,GAAG,aAAa,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAC7C,MAAM,WAAW,GAAG,oBAAoB;aACrC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;aAClC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC;QAC7B,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC,IAAI,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;YAC3E,UAAU,CAAC,IAAI,CAAC;gBACd,SAAS;gBACT,MAAM,EAAE,uBAAuB,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,yBAAyB,SAAS,CAAC,IAAI,MAAM,SAAS,CAAC,EAAE,EAAE;aACjH,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=policy.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"policy.test.d.ts","sourceRoot":"","sources":["../../../src/base-model/forward/policy.test.ts"],"names":[],"mappings":""}