@xemahq/biome-database-nest 1.1.0 → 3.0.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 (65) hide show
  1. package/dist/index.d.ts +6 -0
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +29 -3
  4. package/dist/index.js.map +1 -1
  5. package/dist/lib/adapter.d.ts.map +1 -1
  6. package/dist/lib/adapter.js +5 -5
  7. package/dist/lib/adapter.js.map +1 -1
  8. package/dist/lib/advisory-lock.d.ts +10 -0
  9. package/dist/lib/advisory-lock.d.ts.map +1 -0
  10. package/dist/lib/advisory-lock.js +32 -0
  11. package/dist/lib/advisory-lock.js.map +1 -0
  12. package/dist/lib/bootstrap.d.ts.map +1 -1
  13. package/dist/lib/bootstrap.js +6 -6
  14. package/dist/lib/bootstrap.js.map +1 -1
  15. package/dist/lib/control-plane-discovery.d.ts +2 -2
  16. package/dist/lib/control-plane-discovery.d.ts.map +1 -1
  17. package/dist/lib/control-plane-discovery.js +12 -3
  18. package/dist/lib/control-plane-discovery.js.map +1 -1
  19. package/dist/lib/credential-client.js +2 -2
  20. package/dist/lib/credential-client.js.map +1 -1
  21. package/dist/lib/database-url.d.ts +5 -0
  22. package/dist/lib/database-url.d.ts.map +1 -0
  23. package/dist/lib/database-url.js +54 -0
  24. package/dist/lib/database-url.js.map +1 -0
  25. package/dist/lib/idempotency-record-schema.d.ts +9 -0
  26. package/dist/lib/idempotency-record-schema.d.ts.map +1 -0
  27. package/dist/lib/idempotency-record-schema.js +183 -0
  28. package/dist/lib/idempotency-record-schema.js.map +1 -0
  29. package/dist/lib/nest/data-store-idempotency.service.d.ts +14 -0
  30. package/dist/lib/nest/data-store-idempotency.service.d.ts.map +1 -0
  31. package/dist/lib/nest/data-store-idempotency.service.js +114 -0
  32. package/dist/lib/nest/data-store-idempotency.service.js.map +1 -0
  33. package/dist/lib/operator-migration.d.ts.map +1 -1
  34. package/dist/lib/operator-migration.js +2 -2
  35. package/dist/lib/operator-migration.js.map +1 -1
  36. package/dist/lib/release-intent-schema.d.ts +6 -0
  37. package/dist/lib/release-intent-schema.d.ts.map +1 -0
  38. package/dist/lib/release-intent-schema.js +131 -0
  39. package/dist/lib/release-intent-schema.js.map +1 -0
  40. package/dist/lib/schema-source-reader.d.ts +7 -0
  41. package/dist/lib/schema-source-reader.d.ts.map +1 -0
  42. package/dist/lib/schema-source-reader.js +56 -0
  43. package/dist/lib/schema-source-reader.js.map +1 -0
  44. package/dist/lib/session-timezone.js +3 -3
  45. package/dist/lib/session-timezone.js.map +1 -1
  46. package/dist/testing/index.d.ts +2 -11
  47. package/dist/testing/index.d.ts.map +1 -1
  48. package/dist/testing/index.js +5 -33
  49. package/dist/testing/index.js.map +1 -1
  50. package/dist/testing/prefix-migration.d.ts +3 -0
  51. package/dist/testing/prefix-migration.d.ts.map +1 -0
  52. package/dist/testing/prefix-migration.js +9 -0
  53. package/dist/testing/prefix-migration.js.map +1 -0
  54. package/dist/testing/provision.d.ts +7 -0
  55. package/dist/testing/provision.d.ts.map +1 -0
  56. package/dist/testing/provision.js +13 -0
  57. package/dist/testing/provision.js.map +1 -0
  58. package/dist/testing/test-migrator.d.ts +12 -0
  59. package/dist/testing/test-migrator.d.ts.map +1 -0
  60. package/dist/testing/test-migrator.js +36 -0
  61. package/dist/testing/test-migrator.js.map +1 -0
  62. package/package.json +37 -15
  63. package/prisma-url.d.ts +38 -0
  64. package/prisma-url.js +84 -0
  65. package/xema-peer-facts.json +255 -0
@@ -0,0 +1,183 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.IDEMPOTENCY_RECORD_CREATE_SQL = exports.IDEMPOTENCY_CLAIMS_MIGRATION_SQL = exports.IDEMPOTENCY_CLAIMS_MIGRATION_NAME = exports.IdempotencyRecordConventionError = void 0;
4
+ exports.idempotencyRecordPrismaModel = idempotencyRecordPrismaModel;
5
+ exports.assertIdempotencyRecordPrismaModel = assertIdempotencyRecordPrismaModel;
6
+ const idempotency_1 = require("@xemahq/contracts/idempotency");
7
+ const schema_source_reader_1 = require("./schema-source-reader");
8
+ function idempotencyRecordPrismaModel() {
9
+ const c = idempotency_1.IDEMPOTENCY_RECORD_STORAGE_CONVENTION;
10
+ return [
11
+ `model ${c.model} {`,
12
+ ` id String @id @default(uuid())`,
13
+ ` consumerName String @map("${c.columns.consumerName}")`,
14
+ ` cloudEventId String @map("${c.columns.cloudEventId}")`,
15
+ ` claimedAt DateTime @default(now()) @map("${c.columns.claimedAt}")`,
16
+ ` completedAt DateTime? @map("${c.columns.completedAt}")`,
17
+ ``,
18
+ ` @@unique([${c.dedupeUnique.join(', ')}])`,
19
+ ` @@index([${c.retentionIndex.join(', ')}])`,
20
+ ` @@map("${c.table}")`,
21
+ `}`,
22
+ ].join('\n');
23
+ }
24
+ class IdempotencyRecordConventionError extends Error {
25
+ constructor(message) {
26
+ super(message);
27
+ this.name = 'IdempotencyRecordConventionError';
28
+ }
29
+ }
30
+ exports.IdempotencyRecordConventionError = IdempotencyRecordConventionError;
31
+ function assertIdempotencyRecordPrismaModel(schemaSource, subject) {
32
+ const c = idempotency_1.IDEMPOTENCY_RECORD_STORAGE_CONVENTION;
33
+ const fail = (why) => {
34
+ throw new IdempotencyRecordConventionError(`${subject}: model ${c.model} does not satisfy the kernel idempotency ` +
35
+ `storage convention — ${why}. The canonical declaration is emitted by ` +
36
+ `idempotencyRecordPrismaModel() in @xemahq/biome-database-nest.`);
37
+ };
38
+ const block = (0, schema_source_reader_1.extractModelBlock)(schemaSource, c.model);
39
+ if (block === undefined) {
40
+ return void fail(`no \`model ${c.model}\` block was declared`);
41
+ }
42
+ const body = block.split('\n').slice(1, -1);
43
+ const fields = [];
44
+ const blockAttributes = [];
45
+ for (const raw of body) {
46
+ const line = raw.trim();
47
+ if (line === '') {
48
+ continue;
49
+ }
50
+ if (line.startsWith('@@')) {
51
+ blockAttributes.push(line.replace(/\s+/g, ''));
52
+ continue;
53
+ }
54
+ const match = /^(\w+)\s+(\S+)\s*(.*)$/.exec(line);
55
+ if (match === null) {
56
+ return void fail(`could not parse the line \`${line}\``);
57
+ }
58
+ fields.push({
59
+ name: match[1],
60
+ type: match[2],
61
+ attributes: match[3],
62
+ });
63
+ }
64
+ const expected = Object.keys(c.columns);
65
+ const declared = fields.map((f) => f.name);
66
+ if (declared.length !== expected.length ||
67
+ !expected.every((name, i) => declared[i] === name)) {
68
+ return void fail(`its fields are [${declared.join(', ')}]; the convention declares ` +
69
+ `exactly [${expected.join(', ')}], in that order`);
70
+ }
71
+ const byName = new Map(fields.map((f) => [f.name, f]));
72
+ for (const [field, column] of Object.entries(c.columns)) {
73
+ const attributes = byName.get(field).attributes;
74
+ if (field === column) {
75
+ const mapped = /@map\(\s*"([^"]*)"\s*\)/.exec(attributes);
76
+ if (mapped !== null && mapped[1] !== column) {
77
+ return void fail(`\`${field}\` maps to column "${mapped[1]}"; the ` +
78
+ `convention names "${column}"`);
79
+ }
80
+ continue;
81
+ }
82
+ if (!attributes.includes(`@map("${column}")`)) {
83
+ return void fail(`\`${field}\` does not declare \`@map("${column}")\` — without it the ` +
84
+ `physical column is "${field}", and a shared sweep addressing ` +
85
+ `"${column}" will not find it`);
86
+ }
87
+ }
88
+ const idField = byName.get('id');
89
+ if (!idField.attributes.includes('@id')) {
90
+ return void fail('`id` is not declared `@id`');
91
+ }
92
+ const nullable = new Set(c.nullable);
93
+ for (const field of fields) {
94
+ const optional = field.type.endsWith('?');
95
+ if (optional !== nullable.has(field.name)) {
96
+ return void fail(optional
97
+ ? `\`${field.name}\` is declared optional; only ` +
98
+ `[${[...nullable].join(', ')}] may be null`
99
+ : `\`${field.name}\` is declared required; its null is the ` +
100
+ 'in-flight claim, so it must be optional');
101
+ }
102
+ }
103
+ const claimedAt = byName.get('claimedAt');
104
+ if (!claimedAt.attributes.includes('@default(now())')) {
105
+ return void fail('`claimedAt` does not declare `@default(now())` — a claim whose ' +
106
+ 'timestamp the writer supplies cannot be leased or pruned by a shared rule');
107
+ }
108
+ const completedAt = byName.get('completedAt');
109
+ if (completedAt.attributes.includes('@default(')) {
110
+ return void fail('`completedAt` declares a default — every claim would be recorded as ' +
111
+ 'already complete, and a crashed handler\'s event would be acknowledged');
112
+ }
113
+ const required = [
114
+ `@@unique([${c.dedupeUnique.join(',')}])`,
115
+ `@@index([${c.retentionIndex.join(',')}])`,
116
+ `@@map("${c.table}")`,
117
+ ];
118
+ for (const attribute of required) {
119
+ if (!blockAttributes.includes(attribute)) {
120
+ return void fail(`it does not declare \`${attribute.replace(/,/g, ', ')}\`; it declares ` +
121
+ `[${blockAttributes.join(' ')}]`);
122
+ }
123
+ }
124
+ }
125
+ const IDEMPOTENCY_TABLE = idempotency_1.IDEMPOTENCY_RECORD_STORAGE_CONVENTION.table;
126
+ const IDEMPOTENCY_COLUMNS = idempotency_1.IDEMPOTENCY_RECORD_STORAGE_CONVENTION.columns;
127
+ function prismaIndexName(columns) {
128
+ return `${IDEMPOTENCY_TABLE}_${columns.join('_')}_idx`;
129
+ }
130
+ const PRE_CLAIM_PROCESSED_AT = 'processed_at';
131
+ exports.IDEMPOTENCY_CLAIMS_MIGRATION_NAME = 'idempotency_claims';
132
+ exports.IDEMPOTENCY_CLAIMS_MIGRATION_SQL = [
133
+ `-- The CloudEvent idempotency record becomes a CLAIM taken before the`,
134
+ `-- handlers run (@xemahq/platform-common IDEMPOTENCY_CLAIMS_MIGRATION_SQL).`,
135
+ `-- Pre-production; deploy with downtime — the column rename is not`,
136
+ `-- rolling-safe. Post-production this would be expand/contract within one`,
137
+ `-- release. Guarded: a no-op on re-run and on a table already converted.`,
138
+ `BEGIN;`,
139
+ ``,
140
+ `DO $$`,
141
+ `BEGIN`,
142
+ ` IF EXISTS (`,
143
+ ` SELECT 1 FROM information_schema.columns`,
144
+ ` WHERE table_schema = current_schema()`,
145
+ ` AND table_name = '${IDEMPOTENCY_TABLE}'`,
146
+ ` AND column_name = '${PRE_CLAIM_PROCESSED_AT}'`,
147
+ ` ) THEN`,
148
+ ` ALTER TABLE "${IDEMPOTENCY_TABLE}" RENAME COLUMN "${PRE_CLAIM_PROCESSED_AT}" TO "${IDEMPOTENCY_COLUMNS.claimedAt}";`,
149
+ ` ALTER INDEX IF EXISTS "${prismaIndexName([PRE_CLAIM_PROCESSED_AT])}" RENAME TO "${prismaIndexName([IDEMPOTENCY_COLUMNS.claimedAt])}";`,
150
+ ` ALTER TABLE "${IDEMPOTENCY_TABLE}" ADD COLUMN IF NOT EXISTS "${IDEMPOTENCY_COLUMNS.completedAt}" TIMESTAMP(3);`,
151
+ ` -- Every pre-claim row was written only AFTER its handlers succeeded.`,
152
+ ` UPDATE "${IDEMPOTENCY_TABLE}" SET "${IDEMPOTENCY_COLUMNS.completedAt}" = "${IDEMPOTENCY_COLUMNS.claimedAt}";`,
153
+ ` END IF;`,
154
+ `END`,
155
+ `$$;`,
156
+ ``,
157
+ `COMMIT;`,
158
+ ``,
159
+ ].join('\n');
160
+ exports.IDEMPOTENCY_RECORD_CREATE_SQL = (() => {
161
+ const c = IDEMPOTENCY_COLUMNS;
162
+ const unique = idempotency_1.IDEMPOTENCY_RECORD_STORAGE_CONVENTION.dedupeUnique.map((field) => IDEMPOTENCY_COLUMNS[field]);
163
+ const retention = idempotency_1.IDEMPOTENCY_RECORD_STORAGE_CONVENTION.retentionIndex.map((field) => IDEMPOTENCY_COLUMNS[field]);
164
+ return [
165
+ `-- The CloudEvent idempotency record, in its claim shape`,
166
+ `-- (@xemahq/platform-common IDEMPOTENCY_RECORD_CREATE_SQL).`,
167
+ `CREATE TABLE IF NOT EXISTS "${IDEMPOTENCY_TABLE}" (`,
168
+ ` "${c.id}" TEXT NOT NULL,`,
169
+ ` "${c.consumerName}" TEXT NOT NULL,`,
170
+ ` "${c.cloudEventId}" TEXT NOT NULL,`,
171
+ ` "${c.claimedAt}" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,`,
172
+ ` "${c.completedAt}" TIMESTAMP(3),`,
173
+ ``,
174
+ ` CONSTRAINT "${IDEMPOTENCY_TABLE}_pkey" PRIMARY KEY ("${c.id}")`,
175
+ `);`,
176
+ ``,
177
+ `CREATE INDEX IF NOT EXISTS "${prismaIndexName(retention)}" ON "${IDEMPOTENCY_TABLE}"(${retention.map((col) => `"${col}"`).join(', ')});`,
178
+ ``,
179
+ `CREATE UNIQUE INDEX IF NOT EXISTS "${IDEMPOTENCY_TABLE}_${unique.join('_')}_key" ON "${IDEMPOTENCY_TABLE}"(${unique.map((col) => `"${col}"`).join(', ')});`,
180
+ ``,
181
+ ].join('\n');
182
+ })();
183
+ //# sourceMappingURL=idempotency-record-schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"idempotency-record-schema.js","sourceRoot":"","sources":["../../src/lib/idempotency-record-schema.ts"],"names":[],"mappings":";;;AAkDA,oEAeC;AAwBD,gFA0HC;AAlLD,+DAAsF;AAEtF,iEAA2D;AAe3D,SAAgB,4BAA4B;IAC1C,MAAM,CAAC,GAAG,mDAAqC,CAAC;IAChD,OAAO;QACL,SAAS,CAAC,CAAC,KAAK,IAAI;QACpB,+CAA+C;QAC/C,kCAAkC,CAAC,CAAC,OAAO,CAAC,YAAY,IAAI;QAC5D,kCAAkC,CAAC,CAAC,OAAO,CAAC,YAAY,IAAI;QAC5D,kDAAkD,CAAC,CAAC,OAAO,CAAC,SAAS,IAAI;QACzE,kCAAkC,CAAC,CAAC,OAAO,CAAC,WAAW,IAAI;QAC3D,EAAE;QACF,eAAe,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI;QAC5C,cAAc,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI;QAC7C,YAAY,CAAC,CAAC,KAAK,IAAI;QACvB,GAAG;KACJ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAGD,MAAa,gCAAiC,SAAQ,KAAK;IACzD,YAAmB,OAAe;QAChC,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,kCAAkC,CAAC;IACjD,CAAC;CACF;AALD,4EAKC;AAgBD,SAAgB,kCAAkC,CAChD,YAAoB,EACpB,OAAe;IAEf,MAAM,CAAC,GAAG,mDAAqC,CAAC;IAChD,MAAM,IAAI,GAAG,CAAC,GAAW,EAAS,EAAE;QAClC,MAAM,IAAI,gCAAgC,CACxC,GAAG,OAAO,WAAW,CAAC,CAAC,KAAK,2CAA2C;YACrE,wBAAwB,GAAG,4CAA4C;YACvE,gEAAgE,CACnE,CAAC;IACJ,CAAC,CAAC;IAEF,MAAM,KAAK,GAAG,IAAA,wCAAiB,EAAC,YAAY,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;IACvD,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,OAAO,KAAK,IAAI,CAAC,cAAc,CAAC,CAAC,KAAK,uBAAuB,CAAC,CAAC;IACjE,CAAC;IAED,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC5C,MAAM,MAAM,GAAmD,EAAE,CAAC;IAClE,MAAM,eAAe,GAAa,EAAE,CAAC;IACrC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;QACxB,IAAI,IAAI,KAAK,EAAE,EAAE,CAAC;YAChB,SAAS;QACX,CAAC;QACD,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1B,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC;YAC/C,SAAS;QACX,CAAC;QACD,MAAM,KAAK,GAAG,wBAAwB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClD,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YACnB,OAAO,KAAK,IAAI,CAAC,8BAA8B,IAAI,IAAI,CAAC,CAAC;QAC3D,CAAC;QACD,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,KAAK,CAAC,CAAC,CAAW;YACxB,IAAI,EAAE,KAAK,CAAC,CAAC,CAAW;YACxB,UAAU,EAAE,KAAK,CAAC,CAAC,CAAW;SAC/B,CAAC,CAAC;IACL,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IACxC,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAC3C,IACE,QAAQ,CAAC,MAAM,KAAK,QAAQ,CAAC,MAAM;QACnC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,EAClD,CAAC;QACD,OAAO,KAAK,IAAI,CACd,mBAAmB,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,6BAA6B;YACjE,YAAY,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CACpD,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACvD,KAAK,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;QACxD,MAAM,UAAU,GAAI,MAAM,CAAC,GAAG,CAAC,KAAK,CAAiB,CAAC,UAAU,CAAC;QACjE,IAAI,KAAK,KAAK,MAAM,EAAE,CAAC;YAGrB,MAAM,MAAM,GAAG,yBAAyB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAC1D,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,MAAM,EAAE,CAAC;gBAC5C,OAAO,KAAK,IAAI,CACd,KAAK,KAAK,sBAAsB,MAAM,CAAC,CAAC,CAAW,SAAS;oBAC1D,qBAAqB,MAAM,GAAG,CACjC,CAAC;YACJ,CAAC;YACD,SAAS;QACX,CAAC;QACD,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,SAAS,MAAM,IAAI,CAAC,EAAE,CAAC;YAC9C,OAAO,KAAK,IAAI,CACd,KAAK,KAAK,+BAA+B,MAAM,wBAAwB;gBACrE,uBAAuB,KAAK,mCAAmC;gBAC/D,IAAI,MAAM,oBAAoB,CACjC,CAAC;QACJ,CAAC;IACH,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAgB,CAAC;IAChD,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACxC,OAAO,KAAK,IAAI,CAAC,4BAA4B,CAAC,CAAC;IACjD,CAAC;IACD,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAS,CAAC,CAAC,QAAQ,CAAC,CAAC;IAC7C,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QAC1C,IAAI,QAAQ,KAAK,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1C,OAAO,KAAK,IAAI,CACd,QAAQ;gBACN,CAAC,CAAC,KAAK,KAAK,CAAC,IAAI,gCAAgC;oBAC7C,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe;gBAC/C,CAAC,CAAC,KAAK,KAAK,CAAC,IAAI,2CAA2C;oBACxD,yCAAyC,CAChD,CAAC;QACJ,CAAC;IACH,CAAC;IACD,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,WAAW,CAAgB,CAAC;IACzD,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,CAAC;QACtD,OAAO,KAAK,IAAI,CACd,iEAAiE;YAC/D,2EAA2E,CAC9E,CAAC;IACJ,CAAC;IACD,MAAM,WAAW,GAAG,MAAM,CAAC,GAAG,CAAC,aAAa,CAAgB,CAAC;IAC7D,IAAI,WAAW,CAAC,UAAU,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;QACjD,OAAO,KAAK,IAAI,CACd,sEAAsE;YACpE,wEAAwE,CAC3E,CAAC;IACJ,CAAC;IAED,MAAM,QAAQ,GAAG;QACf,aAAa,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI;QACzC,YAAY,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI;QAC1C,UAAU,CAAC,CAAC,KAAK,IAAI;KACtB,CAAC;IACF,KAAK,MAAM,SAAS,IAAI,QAAQ,EAAE,CAAC;QACjC,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;YACzC,OAAO,KAAK,IAAI,CACd,yBAAyB,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,kBAAkB;gBACtE,IAAI,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CACnC,CAAC;QACJ,CAAC;IACH,CAAC;AACH,CAAC;AAkBD,MAAM,iBAAiB,GAAG,mDAAqC,CAAC,KAAK,CAAC;AACtE,MAAM,mBAAmB,GAAG,mDAAqC,CAAC,OAAO,CAAC;AAG1E,SAAS,eAAe,CAAC,OAA0B;IACjD,OAAO,GAAG,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC;AACzD,CAAC;AAGD,MAAM,sBAAsB,GAAG,cAAc,CAAC;AAGjC,QAAA,iCAAiC,GAAG,oBAAoB,CAAC;AAqBzD,QAAA,gCAAgC,GAAG;IAC9C,uEAAuE;IACvE,6EAA6E;IAC7E,oEAAoE;IACpE,2EAA2E;IAC3E,0EAA0E;IAC1E,QAAQ;IACR,EAAE;IACF,OAAO;IACP,OAAO;IACP,eAAe;IACf,8CAA8C;IAC9C,4CAA4C;IAC5C,4BAA4B,iBAAiB,GAAG;IAChD,6BAA6B,sBAAsB,GAAG;IACtD,UAAU;IACV,oBAAoB,iBAAiB,oBAAoB,sBAAsB,SAAS,mBAAmB,CAAC,SAAS,IAAI;IACzH,8BAA8B,eAAe,CAAC,CAAC,sBAAsB,CAAC,CAAC,gBAAgB,eAAe,CAAC,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC,IAAI;IAC3I,oBAAoB,iBAAiB,+BAA+B,mBAAmB,CAAC,WAAW,iBAAiB;IACpH,2EAA2E;IAC3E,eAAe,iBAAiB,UAAU,mBAAmB,CAAC,WAAW,QAAQ,mBAAmB,CAAC,SAAS,IAAI;IAClH,WAAW;IACX,KAAK;IACL,KAAK;IACL,EAAE;IACF,SAAS;IACT,EAAE;CACH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAOA,QAAA,6BAA6B,GAAG,CAAC,GAAG,EAAE;IACjD,MAAM,CAAC,GAAG,mBAAmB,CAAC;IAC9B,MAAM,MAAM,GAAG,mDAAqC,CAAC,YAAY,CAAC,GAAG,CACnE,CAAC,KAAK,EAAE,EAAE,CAAC,mBAAmB,CAAC,KAAK,CAAC,CACtC,CAAC;IACF,MAAM,SAAS,GAAG,mDAAqC,CAAC,cAAc,CAAC,GAAG,CACxE,CAAC,KAAK,EAAE,EAAE,CAAC,mBAAmB,CAAC,KAAK,CAAC,CACtC,CAAC;IACF,OAAO;QACL,0DAA0D;QAC1D,6DAA6D;QAC7D,+BAA+B,iBAAiB,KAAK;QACrD,QAAQ,CAAC,CAAC,EAAE,kBAAkB;QAC9B,QAAQ,CAAC,CAAC,YAAY,kBAAkB;QACxC,QAAQ,CAAC,CAAC,YAAY,kBAAkB;QACxC,QAAQ,CAAC,CAAC,SAAS,oDAAoD;QACvE,QAAQ,CAAC,CAAC,WAAW,iBAAiB;QACtC,EAAE;QACF,mBAAmB,iBAAiB,wBAAwB,CAAC,CAAC,EAAE,IAAI;QACpE,IAAI;QACJ,EAAE;QACF,+BAA+B,eAAe,CAAC,SAAS,CAAC,SAAS,iBAAiB,KAAK,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI;QACzI,EAAE;QACF,sCAAsC,iBAAiB,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,aAAa,iBAAiB,KAAK,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI;QAC5J,EAAE;KACH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC,CAAC,EAAE,CAAC"}
@@ -0,0 +1,14 @@
1
+ import { type IdempotencyClaimOutcome, type IdempotencyService } from '@xemahq/contracts/idempotency';
2
+ export interface IdempotencyDataStoreClient {
3
+ $queryRawUnsafe<T = unknown>(query: string, ...values: unknown[]): Promise<T>;
4
+ $executeRawUnsafe(query: string, ...values: unknown[]): Promise<number>;
5
+ }
6
+ export declare const IDEMPOTENCY_DATA_STORE_CLIENT: unique symbol;
7
+ export declare class DataStoreIdempotencyService implements IdempotencyService {
8
+ private readonly dataStore;
9
+ constructor(dataStore: IdempotencyDataStoreClient);
10
+ claim(consumerName: string, cloudEventId: string, leaseMs: number): Promise<IdempotencyClaimOutcome>;
11
+ complete(consumerName: string, cloudEventId: string, token: Date): Promise<void>;
12
+ release(consumerName: string, cloudEventId: string, token: Date): Promise<void>;
13
+ }
14
+ //# sourceMappingURL=data-store-idempotency.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-store-idempotency.service.d.ts","sourceRoot":"","sources":["../../../src/lib/nest/data-store-idempotency.service.ts"],"names":[],"mappings":"AACA,OAAO,EAIL,KAAK,uBAAuB,EAC5B,KAAK,kBAAkB,EACxB,MAAM,+BAA+B,CAAC;AAevC,MAAM,WAAW,0BAA0B;IACzC,eAAe,CAAC,CAAC,GAAG,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAC9E,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CACzE;AAED,eAAO,MAAM,6BAA6B,eAEzC,CAAC;AAuGF,qBACa,2BAA4B,YAAW,kBAAkB;IAGlE,OAAO,CAAC,QAAQ,CAAC,SAAS;gBAAT,SAAS,EAAE,0BAA0B;IAgBlD,KAAK,CACT,YAAY,EAAE,MAAM,EACpB,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,uBAAuB,CAAC;IA8B7B,QAAQ,CACZ,YAAY,EAAE,MAAM,EACpB,YAAY,EAAE,MAAM,EACpB,KAAK,EAAE,IAAI,GACV,OAAO,CAAC,IAAI,CAAC;IAaV,OAAO,CACX,YAAY,EAAE,MAAM,EACpB,YAAY,EAAE,MAAM,EACpB,KAAK,EAAE,IAAI,GACV,OAAO,CAAC,IAAI,CAAC;CAWjB"}
@@ -0,0 +1,114 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
12
+ return function (target, key) { decorator(target, key, paramIndex); }
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.DataStoreIdempotencyService = exports.IDEMPOTENCY_DATA_STORE_CLIENT = void 0;
16
+ const common_1 = require("@nestjs/common");
17
+ const idempotency_1 = require("@xemahq/contracts/idempotency");
18
+ exports.IDEMPOTENCY_DATA_STORE_CLIENT = Symbol('IDEMPOTENCY_DATA_STORE_CLIENT');
19
+ const SQL_IDENTIFIER = /^[a-z_][a-z0-9_]*$/;
20
+ function identifier(name) {
21
+ if (!SQL_IDENTIFIER.test(name)) {
22
+ throw new Error(`DataStoreIdempotencyService: "${name}" from the idempotency storage ` +
23
+ 'convention is not a bare lowercase SQL identifier.');
24
+ }
25
+ return `"${name}"`;
26
+ }
27
+ const T = identifier(idempotency_1.IDEMPOTENCY_RECORD_STORAGE_CONVENTION.table);
28
+ const C = {
29
+ id: identifier(idempotency_1.IDEMPOTENCY_RECORD_STORAGE_CONVENTION.columns.id),
30
+ consumerName: identifier(idempotency_1.IDEMPOTENCY_RECORD_STORAGE_CONVENTION.columns.consumerName),
31
+ cloudEventId: identifier(idempotency_1.IDEMPOTENCY_RECORD_STORAGE_CONVENTION.columns.cloudEventId),
32
+ claimedAt: identifier(idempotency_1.IDEMPOTENCY_RECORD_STORAGE_CONVENTION.columns.claimedAt),
33
+ completedAt: identifier(idempotency_1.IDEMPOTENCY_RECORD_STORAGE_CONVENTION.columns.completedAt),
34
+ };
35
+ const DB_CLOCK = `date_trunc('milliseconds', clock_timestamp() AT TIME ZONE 'UTC')`;
36
+ const tokenText = (column) => `to_char(${column}, 'YYYY-MM-DD"T"HH24:MI:SS.MS"Z"')`;
37
+ const CLAIM_SQL = `
38
+ INSERT INTO ${T} AS held (${C.id}, ${C.consumerName}, ${C.cloudEventId}, ${C.claimedAt})
39
+ VALUES (gen_random_uuid(), $1, $2, ${DB_CLOCK})
40
+ ON CONFLICT (${C.consumerName}, ${C.cloudEventId}) DO UPDATE
41
+ SET ${C.claimedAt} = EXCLUDED.${C.claimedAt}
42
+ WHERE held.${C.completedAt} IS NULL
43
+ AND held.${C.claimedAt} < EXCLUDED.${C.claimedAt}
44
+ AND held.${C.claimedAt} + make_interval(secs => $3::double precision / 1000)
45
+ <= EXCLUDED.${C.claimedAt}
46
+ RETURNING ${tokenText(`held.${C.claimedAt}`)} AS token`;
47
+ const READ_COMPLETED_SQL = `
48
+ SELECT (${C.completedAt} IS NOT NULL) AS completed
49
+ FROM ${T}
50
+ WHERE ${C.consumerName} = $1 AND ${C.cloudEventId} = $2`;
51
+ const HELD_BY_TOKEN = `
52
+ WHERE ${C.consumerName} = $1 AND ${C.cloudEventId} = $2
53
+ AND ${C.claimedAt} = $3::timestamp AND ${C.completedAt} IS NULL`;
54
+ const COMPLETE_SQL = `UPDATE ${T} SET ${C.completedAt} = ${DB_CLOCK}${HELD_BY_TOKEN}`;
55
+ const RELEASE_SQL = `DELETE FROM ${T}${HELD_BY_TOKEN}`;
56
+ let DataStoreIdempotencyService = class DataStoreIdempotencyService {
57
+ dataStore;
58
+ constructor(dataStore) {
59
+ this.dataStore = dataStore;
60
+ if (typeof this.dataStore.$queryRawUnsafe !== 'function' ||
61
+ typeof this.dataStore.$executeRawUnsafe !== 'function') {
62
+ throw new Error('DataStoreIdempotencyService: IDEMPOTENCY_DATA_STORE_CLIENT must expose ' +
63
+ '$queryRawUnsafe and $executeRawUnsafe (a generated SQL client does).');
64
+ }
65
+ }
66
+ async claim(consumerName, cloudEventId, leaseMs) {
67
+ assertKey('claim', consumerName, cloudEventId);
68
+ if (!Number.isFinite(leaseMs) || leaseMs <= 0) {
69
+ throw new Error(`DataStoreIdempotencyService.claim: leaseMs must be a positive number, got ${String(leaseMs)}`);
70
+ }
71
+ const claimed = await this.dataStore.$queryRawUnsafe(CLAIM_SQL, consumerName, cloudEventId, leaseMs);
72
+ const won = claimed[0];
73
+ if (won !== undefined) {
74
+ return { kind: idempotency_1.IdempotencyClaimKind.Claimed, token: parseToken(won.token) };
75
+ }
76
+ const existing = await this.dataStore.$queryRawUnsafe(READ_COMPLETED_SQL, consumerName, cloudEventId);
77
+ return existing[0]?.completed === true
78
+ ? { kind: idempotency_1.IdempotencyClaimKind.Done }
79
+ : { kind: idempotency_1.IdempotencyClaimKind.InProgress };
80
+ }
81
+ async complete(consumerName, cloudEventId, token) {
82
+ assertKey('complete', consumerName, cloudEventId);
83
+ const count = await this.dataStore.$executeRawUnsafe(COMPLETE_SQL, consumerName, cloudEventId, token.toISOString());
84
+ if (count !== 1) {
85
+ throw new idempotency_1.IdempotencyClaimLostError(consumerName, cloudEventId);
86
+ }
87
+ }
88
+ async release(consumerName, cloudEventId, token) {
89
+ assertKey('release', consumerName, cloudEventId);
90
+ await this.dataStore.$executeRawUnsafe(RELEASE_SQL, consumerName, cloudEventId, token.toISOString());
91
+ }
92
+ };
93
+ exports.DataStoreIdempotencyService = DataStoreIdempotencyService;
94
+ exports.DataStoreIdempotencyService = DataStoreIdempotencyService = __decorate([
95
+ (0, common_1.Injectable)(),
96
+ __param(0, (0, common_1.Inject)(exports.IDEMPOTENCY_DATA_STORE_CLIENT)),
97
+ __metadata("design:paramtypes", [Object])
98
+ ], DataStoreIdempotencyService);
99
+ function parseToken(text) {
100
+ const token = new Date(text);
101
+ if (Number.isNaN(token.getTime())) {
102
+ throw new Error(`DataStoreIdempotencyService: the database returned an unreadable claim token "${text}".`);
103
+ }
104
+ return token;
105
+ }
106
+ function assertKey(op, consumerName, cloudEventId) {
107
+ if (!consumerName) {
108
+ throw new Error(`DataStoreIdempotencyService.${op}: consumerName is required`);
109
+ }
110
+ if (!cloudEventId) {
111
+ throw new Error(`DataStoreIdempotencyService.${op}: cloudEventId is required`);
112
+ }
113
+ }
114
+ //# sourceMappingURL=data-store-idempotency.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-store-idempotency.service.js","sourceRoot":"","sources":["../../../src/lib/nest/data-store-idempotency.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAAoD;AACpD,+DAMuC;AAoB1B,QAAA,6BAA6B,GAAG,MAAM,CACjD,+BAA+B,CAChC,CAAC;AAOF,MAAM,cAAc,GAAG,oBAAoB,CAAC;AAE5C,SAAS,UAAU,CAAC,IAAY;IAC9B,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAC/B,MAAM,IAAI,KAAK,CACb,iCAAiC,IAAI,iCAAiC;YACpE,oDAAoD,CACvD,CAAC;IACJ,CAAC;IACD,OAAO,IAAI,IAAI,GAAG,CAAC;AACrB,CAAC;AAED,MAAM,CAAC,GAAG,UAAU,CAAC,mDAAqC,CAAC,KAAK,CAAC,CAAC;AAClE,MAAM,CAAC,GAAG;IACR,EAAE,EAAE,UAAU,CAAC,mDAAqC,CAAC,OAAO,CAAC,EAAE,CAAC;IAChE,YAAY,EAAE,UAAU,CAAC,mDAAqC,CAAC,OAAO,CAAC,YAAY,CAAC;IACpF,YAAY,EAAE,UAAU,CAAC,mDAAqC,CAAC,OAAO,CAAC,YAAY,CAAC;IACpF,SAAS,EAAE,UAAU,CAAC,mDAAqC,CAAC,OAAO,CAAC,SAAS,CAAC;IAC9E,WAAW,EAAE,UAAU,CAAC,mDAAqC,CAAC,OAAO,CAAC,WAAW,CAAC;CAC1E,CAAC;AAQX,MAAM,QAAQ,GAAG,kEAAkE,CAAC;AAQpF,MAAM,SAAS,GAAG,CAAC,MAAc,EAAU,EAAE,CAC3C,WAAW,MAAM,oCAAoC,CAAC;AAmBxD,MAAM,SAAS,GAAG;gBACF,CAAC,aAAa,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,YAAY,KAAK,CAAC,CAAC,YAAY,KAAK,CAAC,CAAC,SAAS;uCACjD,QAAQ;iBAC9B,CAAC,CAAC,YAAY,KAAK,CAAC,CAAC,YAAY;UACxC,CAAC,CAAC,SAAS,eAAe,CAAC,CAAC,SAAS;iBAC9B,CAAC,CAAC,WAAW;iBACb,CAAC,CAAC,SAAS,eAAe,CAAC,CAAC,SAAS;iBACrC,CAAC,CAAC,SAAS;wBACJ,CAAC,CAAC,SAAS;cACrB,SAAS,CAAC,QAAQ,CAAC,CAAC,SAAS,EAAE,CAAC,WAAW,CAAC;AAE1D,MAAM,kBAAkB,GAAG;YACf,CAAC,CAAC,WAAW;WACd,CAAC;WACD,CAAC,CAAC,YAAY,aAAa,CAAC,CAAC,YAAY,OAAO,CAAC;AAE5D,MAAM,aAAa,GAAG;WACX,CAAC,CAAC,YAAY,aAAa,CAAC,CAAC,YAAY;WACzC,CAAC,CAAC,SAAS,wBAAwB,CAAC,CAAC,WAAW,UAAU,CAAC;AAEtE,MAAM,YAAY,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,WAAW,MAAM,QAAQ,GAAG,aAAa,EAAE,CAAC;AACtF,MAAM,WAAW,GAAG,eAAe,CAAC,GAAG,aAAa,EAAE,CAAC;AAqBhD,IAAM,2BAA2B,GAAjC,MAAM,2BAA2B;IAGnB;IAFnB,YAEmB,SAAqC;QAArC,cAAS,GAAT,SAAS,CAA4B;QAKtD,IACE,OAAO,IAAI,CAAC,SAAS,CAAC,eAAe,KAAK,UAAU;YACpD,OAAO,IAAI,CAAC,SAAS,CAAC,iBAAiB,KAAK,UAAU,EACtD,CAAC;YACD,MAAM,IAAI,KAAK,CACb,yEAAyE;gBACvE,sEAAsE,CACzE,CAAC;QACJ,CAAC;IACH,CAAC;IAED,KAAK,CAAC,KAAK,CACT,YAAoB,EACpB,YAAoB,EACpB,OAAe;QAEf,SAAS,CAAC,OAAO,EAAE,YAAY,EAAE,YAAY,CAAC,CAAC;QAC/C,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,OAAO,IAAI,CAAC,EAAE,CAAC;YAC9C,MAAM,IAAI,KAAK,CACb,6EAA6E,MAAM,CAAC,OAAO,CAAC,EAAE,CAC/F,CAAC;QACJ,CAAC;QACD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,eAAe,CAClD,SAAS,EACT,YAAY,EACZ,YAAY,EACZ,OAAO,CACR,CAAC;QACF,MAAM,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QACvB,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YACtB,OAAO,EAAE,IAAI,EAAE,kCAAoB,CAAC,OAAO,EAAE,KAAK,EAAE,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;QAC9E,CAAC;QAID,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,eAAe,CACnD,kBAAkB,EAClB,YAAY,EACZ,YAAY,CACb,CAAC;QACF,OAAO,QAAQ,CAAC,CAAC,CAAC,EAAE,SAAS,KAAK,IAAI;YACpC,CAAC,CAAC,EAAE,IAAI,EAAE,kCAAoB,CAAC,IAAI,EAAE;YACrC,CAAC,CAAC,EAAE,IAAI,EAAE,kCAAoB,CAAC,UAAU,EAAE,CAAC;IAChD,CAAC;IAED,KAAK,CAAC,QAAQ,CACZ,YAAoB,EACpB,YAAoB,EACpB,KAAW;QAEX,SAAS,CAAC,UAAU,EAAE,YAAY,EAAE,YAAY,CAAC,CAAC;QAClD,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAClD,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,KAAK,CAAC,WAAW,EAAE,CACpB,CAAC;QACF,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;YAChB,MAAM,IAAI,uCAAyB,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;QAClE,CAAC;IACH,CAAC;IAED,KAAK,CAAC,OAAO,CACX,YAAoB,EACpB,YAAoB,EACpB,KAAW;QAEX,SAAS,CAAC,SAAS,EAAE,YAAY,EAAE,YAAY,CAAC,CAAC;QAGjD,MAAM,IAAI,CAAC,SAAS,CAAC,iBAAiB,CACpC,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,KAAK,CAAC,WAAW,EAAE,CACpB,CAAC;IACJ,CAAC;CACF,CAAA;AArFY,kEAA2B;sCAA3B,2BAA2B;IADvC,IAAA,mBAAU,GAAE;IAGR,WAAA,IAAA,eAAM,EAAC,qCAA6B,CAAC,CAAA;;GAF7B,2BAA2B,CAqFvC;AAED,SAAS,UAAU,CAAC,IAAY;IAC9B,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC;IAC7B,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;QAClC,MAAM,IAAI,KAAK,CACb,iFAAiF,IAAI,IAAI,CAC1F,CAAC;IACJ,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,SAAS,CAAC,EAAU,EAAE,YAAoB,EAAE,YAAoB;IACvE,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CAAC,+BAA+B,EAAE,4BAA4B,CAAC,CAAC;IACjF,CAAC;IACD,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CAAC,+BAA+B,EAAE,4BAA4B,CAAC,CAAC;IACjF,CAAC;AACH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"operator-migration.d.ts","sourceRoot":"","sources":["../../src/lib/operator-migration.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,IAAI,CAAC;AAE5B,OAAO,EACL,qBAAqB,EACrB,sBAAsB,EACtB,SAAS,EACT,WAAW,EACX,MAAM,EACN,KAAK,yBAAyB,EAC/B,MAAM,eAAe,CAAC;AAIvB,oBAAY,qBAAqB;IAC/B,MAAM,YAAY;IAClB,KAAK,UAAU;IACf,MAAM,WAAW;IACjB,QAAQ,aAAa;CACtB;AAED,MAAM,WAAW,8BAA8B;IAC7C,QAAQ,CAAC,QAAQ,EAAE,yBAAyB,CAAC;IAC7C,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,oBAAoB,EAAE,MAAM,CAAC;IACtC,QAAQ,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,yBAAyB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACzE;AAED,MAAM,WAAW,gCAAgC;IAC/C,QAAQ,CAAC,QAAQ,EAAE,yBAAyB,CAAC;IAC7C,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;CACjC;AAED,MAAM,WAAW,gCAAgC,CAAC,CAAC;IACjD,QAAQ,CAAC,QAAQ,EAAE,yBAAyB,CAAC;IAC7C,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,yBAAyB,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;CACnE;AAED,MAAM,WAAW,kCAAkC;IAEjD,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;CACpC;AAED,MAAM,WAAW,2BAA2B,CAAC,CAAC,CAC5C,SAAQ,kCAAkC;IAC1C,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;CAChD;AAKD,wBAAgB,0BAA0B,CACxC,IAAI,EAAE,SAAS,MAAM,EAAE,GACtB,qBAAqB,CAgBvB;AAgCD,wBAAsB,2BAA2B,CAC/C,OAAO,GAAE,kCAAuC,GAC/C,OAAO,CAAC,MAAM,CAAC,CAajB;AASD,wBAAsB,oBAAoB,CAAC,CAAC,EAC1C,OAAO,EAAE,2BAA2B,CAAC,CAAC,CAAC,GACtC,OAAO,CAAC,CAAC,CAAC,CAgBZ;AAUD,wBAAsB,yBAAyB,CAAC,CAAC,EAC/C,OAAO,EAAE,gCAAgC,CAAC,CAAC,CAAC,GAC3C,OAAO,CAAC,CAAC,CAAC,CAsBZ;AAED,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,8BAA8B,GACtC,OAAO,CAAC;IAAE,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAA;CAAE,CAAC,CAgB9C;AAED,wBAAsB,yBAAyB,CAC7C,OAAO,EAAE,gCAAgC,GACxC,OAAO,CAAC;IAAE,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAA;CAAE,CAAC,CAmC9C;AAED,wBAAsB,sBAAsB,CAC1C,QAAQ,EAAE,yBAAyB,EACnC,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,CAAC,QAAQ,EAAE,yBAAyB,KAAK,OAAO,CAAC,IAAI,CAAC,GAC3D,OAAO,CAAC,IAAI,CAAC,CAuBf;AAgDD,OAAO,EACL,qBAAqB,EACrB,sBAAsB,EACtB,SAAS,EACT,WAAW,EACX,MAAM,EACN,KAAK,yBAAyB,GAC/B,CAAC"}
1
+ {"version":3,"file":"operator-migration.d.ts","sourceRoot":"","sources":["../../src/lib/operator-migration.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,IAAI,CAAC;AAG5B,OAAO,EACL,qBAAqB,EACrB,sBAAsB,EACtB,SAAS,EACT,WAAW,EACX,MAAM,EACN,KAAK,yBAAyB,EAC/B,MAAM,eAAe,CAAC;AAIvB,oBAAY,qBAAqB;IAC/B,MAAM,YAAY;IAClB,KAAK,UAAU;IACf,MAAM,WAAW;IACjB,QAAQ,aAAa;CACtB;AAED,MAAM,WAAW,8BAA8B;IAC7C,QAAQ,CAAC,QAAQ,EAAE,yBAAyB,CAAC;IAC7C,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,oBAAoB,EAAE,MAAM,CAAC;IACtC,QAAQ,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,yBAAyB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACzE;AAED,MAAM,WAAW,gCAAgC;IAC/C,QAAQ,CAAC,QAAQ,EAAE,yBAAyB,CAAC;IAC7C,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;CACjC;AAED,MAAM,WAAW,gCAAgC,CAAC,CAAC;IACjD,QAAQ,CAAC,QAAQ,EAAE,yBAAyB,CAAC;IAC7C,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,yBAAyB,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;CACnE;AAED,MAAM,WAAW,kCAAkC;IAEjD,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;CACpC;AAED,MAAM,WAAW,2BAA2B,CAAC,CAAC,CAC5C,SAAQ,kCAAkC;IAC1C,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;CAChD;AAKD,wBAAgB,0BAA0B,CACxC,IAAI,EAAE,SAAS,MAAM,EAAE,GACtB,qBAAqB,CAgBvB;AAgCD,wBAAsB,2BAA2B,CAC/C,OAAO,GAAE,kCAAuC,GAC/C,OAAO,CAAC,MAAM,CAAC,CAajB;AASD,wBAAsB,oBAAoB,CAAC,CAAC,EAC1C,OAAO,EAAE,2BAA2B,CAAC,CAAC,CAAC,GACtC,OAAO,CAAC,CAAC,CAAC,CAgBZ;AAUD,wBAAsB,yBAAyB,CAAC,CAAC,EAC/C,OAAO,EAAE,gCAAgC,CAAC,CAAC,CAAC,GAC3C,OAAO,CAAC,CAAC,CAAC,CAsBZ;AAED,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,8BAA8B,GACtC,OAAO,CAAC;IAAE,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAA;CAAE,CAAC,CAgB9C;AAED,wBAAsB,yBAAyB,CAC7C,OAAO,EAAE,gCAAgC,GACxC,OAAO,CAAC;IAAE,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAA;CAAE,CAAC,CAmC9C;AAED,wBAAsB,sBAAsB,CAC1C,QAAQ,EAAE,yBAAyB,EACnC,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,CAAC,QAAQ,EAAE,yBAAyB,KAAK,OAAO,CAAC,IAAI,CAAC,GAC3D,OAAO,CAAC,IAAI,CAAC,CAuBf;AAgDD,OAAO,EACL,qBAAqB,EACrB,sBAAsB,EACtB,SAAS,EACT,WAAW,EACX,MAAM,EACN,KAAK,yBAAyB,GAC/B,CAAC"}
@@ -8,8 +8,8 @@ exports.withOperatorMigrationLock = withOperatorMigrationLock;
8
8
  exports.verifyOperatorMigration = verifyOperatorMigration;
9
9
  exports.contractOperatorMigration = contractOperatorMigration;
10
10
  exports.inMigrationTransaction = inMigrationTransaction;
11
- const platform_common_1 = require("@xemahq/platform-common");
12
11
  const pg_1 = require("pg");
12
+ const database_url_1 = require("./database-url");
13
13
  const ledger_rows_1 = require("./ledger-rows");
14
14
  Object.defineProperty(exports, "assertArtifactMatches", { enumerable: true, get: function () { return ledger_rows_1.assertArtifactMatches; } });
15
15
  Object.defineProperty(exports, "OperatorMigrationPhase", { enumerable: true, get: function () { return ledger_rows_1.OperatorMigrationPhase; } });
@@ -44,7 +44,7 @@ async function openOperatorMigrationClient(options = {}) {
44
44
  throw new Error(`${DATABASE_URL_ENV_VAR} is required to open an operator migration connection.`);
45
45
  }
46
46
  const client = new pg_1.Client({
47
- connectionString: (0, platform_common_1.ensureBiomeDbSearchPath)(connectionString),
47
+ connectionString: (0, database_url_1.ensureBiomeDbSearchPath)(connectionString),
48
48
  });
49
49
  await (0, session_timezone_1.connectVerified)(client, session_timezone_1.DatabaseSessionPath.OperatorMigration);
50
50
  return client;
@@ -1 +1 @@
1
- {"version":3,"file":"operator-migration.js","sourceRoot":"","sources":["../../src/lib/operator-migration.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"operator-migration.js","sourceRoot":"","sources":["../../src/lib/operator-migration.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import { ReleaseIntentDialect } from '@xemahq/contracts/authored-resource';
2
+ export declare class ReleaseIntentConventionError extends Error {
3
+ constructor(message: string);
4
+ }
5
+ export declare function assertReleaseIntentPrismaModel(schemaSource: string, model: string, dialect: ReleaseIntentDialect, identityKey: readonly string[], subject: string): void;
6
+ //# sourceMappingURL=release-intent-schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"release-intent-schema.d.ts","sourceRoot":"","sources":["../../src/lib/release-intent-schema.ts"],"names":[],"mappings":"AAiDA,OAAO,EAGL,oBAAoB,EAErB,MAAM,qCAAqC,CAAC;AAM7C,qBAAa,4BAA6B,SAAQ,KAAK;gBAClC,OAAO,EAAE,MAAM;CAInC;AAeD,wBAAgB,8BAA8B,CAC5C,YAAY,EAAE,MAAM,EACpB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,oBAAoB,EAC7B,WAAW,EAAE,SAAS,MAAM,EAAE,EAC9B,OAAO,EAAE,MAAM,GACd,IAAI,CAkMN"}
@@ -0,0 +1,131 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ReleaseIntentConventionError = void 0;
4
+ exports.assertReleaseIntentPrismaModel = assertReleaseIntentPrismaModel;
5
+ const authored_resource_1 = require("@xemahq/contracts/authored-resource");
6
+ const schema_source_reader_1 = require("./schema-source-reader");
7
+ class ReleaseIntentConventionError extends Error {
8
+ constructor(message) {
9
+ super(message);
10
+ this.name = 'ReleaseIntentConventionError';
11
+ }
12
+ }
13
+ exports.ReleaseIntentConventionError = ReleaseIntentConventionError;
14
+ function assertReleaseIntentPrismaModel(schemaSource, model, dialect, identityKey, subject) {
15
+ const c = authored_resource_1.RELEASE_INTENT_STORAGE_CONVENTION;
16
+ const fail = (why) => {
17
+ throw new ReleaseIntentConventionError(`${subject}: model ${model} does not satisfy the kernel release-intent ` +
18
+ `storage convention for dialect "${dialect}" — ${why}.`);
19
+ };
20
+ const block = (0, schema_source_reader_1.extractModelBlock)(schemaSource, model);
21
+ if (block === undefined) {
22
+ return void fail(`no \`model ${model}\` block was declared`);
23
+ }
24
+ const body = block.split('\n').slice(1, -1);
25
+ const fields = [];
26
+ const blockAttributes = [];
27
+ for (const raw of body) {
28
+ const line = raw.trim();
29
+ if (line === '') {
30
+ continue;
31
+ }
32
+ if (line.startsWith('@@')) {
33
+ blockAttributes.push(line.replace(/\s+/g, ''));
34
+ continue;
35
+ }
36
+ const match = /^(\w+)\s+\S+\s*(.*)$/.exec(line);
37
+ if (match === null) {
38
+ return void fail(`could not parse the line \`${line}\``);
39
+ }
40
+ fields.push({ name: match[1], attributes: match[2] });
41
+ }
42
+ const byName = new Map(fields.map((f) => [f.name, f]));
43
+ const requireColumn = (field, column) => {
44
+ const parsed = byName.get(field);
45
+ if (parsed === undefined) {
46
+ return void fail(`it declares no \`${field}\` field; every release intent carries the ` +
47
+ `spine, and this one is how a reconciler ${field === 'attemptCount' || field === 'lastError'
48
+ ? 'reports a failure'
49
+ : 'finds and orders its work'}`);
50
+ }
51
+ if (field === column) {
52
+ const mapped = /@map\(\s*"([^"]*)"\s*\)/.exec(parsed.attributes);
53
+ if (mapped !== null && mapped[1] !== column) {
54
+ return void fail(`\`${field}\` maps to column "${mapped[1]}"; the ` +
55
+ `convention names "${column}"`);
56
+ }
57
+ return;
58
+ }
59
+ if (!parsed.attributes.includes(`@map("${column}")`)) {
60
+ return void fail(`\`${field}\` does not declare \`@map("${column}")\` — without it the ` +
61
+ `physical column is "${field}", and shared machinery addressing ` +
62
+ `"${column}" will not find it`);
63
+ }
64
+ };
65
+ for (const [field, column] of Object.entries(c.spineColumns)) {
66
+ requireColumn(field, column);
67
+ }
68
+ for (const [field, column] of Object.entries(c.dialectColumns[dialect])) {
69
+ requireColumn(field, column);
70
+ }
71
+ const otherDialect = dialect === authored_resource_1.ReleaseIntentDialect.RetryClock
72
+ ? authored_resource_1.ReleaseIntentDialect.ClaimStamped
73
+ : authored_resource_1.ReleaseIntentDialect.RetryClock;
74
+ const foreign = Object.keys(c.dialectColumns[otherDialect]).filter((field) => !(field in c.dialectColumns[dialect]) && byName.has(field));
75
+ if (foreign.length > 0) {
76
+ return void fail(`it also declares [${foreign.join(', ')}], which belong to the ` +
77
+ `"${otherDialect}" dialect. A table carrying both is a third shape, ` +
78
+ `and grading it as either would report a pass over a schema nobody ` +
79
+ `has agreed to`);
80
+ }
81
+ for (const field of identityKey) {
82
+ if (!byName.has(field)) {
83
+ return void fail(`it declares no \`${field}\` field, which the caller named as part of ` +
84
+ `its identity key [${identityKey.join(', ')}]`);
85
+ }
86
+ }
87
+ const single = identityKey.length === 1 ? identityKey[0] : undefined;
88
+ const singleField = single === undefined ? undefined : byName.get(single);
89
+ if (singleField !== undefined && /@default\(/.test(singleField.attributes)) {
90
+ const generated = /@id\b/.test(singleField.attributes);
91
+ if (generated) {
92
+ return void fail(`its identity key was declared as [\`${single}\`], which is ` +
93
+ `the model's GENERATED primary key (\`@id\` with a \`@default(…)\`). ` +
94
+ `A value the store mints per row is unique for every row, so it ` +
95
+ `constrains one ROW and never one IDENTITY — the assertion would ` +
96
+ `report a pass having graded nothing. Name the column that identifies ` +
97
+ `the authored resource (\`identityId\`, \`skillId\`, \`specId\`, …), ` +
98
+ `together with any channel or scope column the intent is scoped per`);
99
+ }
100
+ }
101
+ const tuple = identityKey.join(',');
102
+ const constraintHeld = singleField?.attributes.includes('@id') === true
103
+ ? authored_resource_1.ReleaseIntentIdentityConstraint.PrimaryKey
104
+ : singleField?.attributes.includes('@unique') === true
105
+ ? authored_resource_1.ReleaseIntentIdentityConstraint.FieldUnique
106
+ : blockAttributes.some((attribute) => attribute.startsWith(`@@unique([${tuple}]`))
107
+ ? authored_resource_1.ReleaseIntentIdentityConstraint.CompositeUnique
108
+ : authored_resource_1.RELEASE_INTENT_CAS_TOKENS.some((token) => blockAttributes.some((attribute) => attribute.startsWith(`@@unique([${tuple},${token}]`)))
109
+ ? authored_resource_1.ReleaseIntentIdentityConstraint.CompositeUniqueWithCasToken
110
+ : undefined;
111
+ if (constraintHeld === undefined) {
112
+ return void fail(`nothing constrains [${identityKey.join(', ')}] to one in-flight intent. ` +
113
+ `Two reconciler replicas can then hold two intents for one identity, ` +
114
+ `which is a horizontal-scaling defect rather than a style one. ` +
115
+ `Admissible forms: [${c.identityConstraint[dialect].join(', ')}]; the ` +
116
+ `CAS token may be one of [${authored_resource_1.RELEASE_INTENT_CAS_TOKENS.join(', ')}]. ` +
117
+ `Declared block attributes: [${blockAttributes.join(' ')}]`);
118
+ }
119
+ const claimIndex = c.claimIndex[dialect];
120
+ const hasClaimIndex = blockAttributes.some((attribute) => attribute.startsWith(`@@index([${claimIndex.join(',')}`));
121
+ if (!hasClaimIndex) {
122
+ return void fail(`it does not declare an index beginning \`@@index([${claimIndex.join(', ')}…])\` — without it every reconciler sweep is a sequential scan over a ` +
123
+ `table that grows once per release forever, and the symptom arrives ` +
124
+ `as latency rather than as an error`);
125
+ }
126
+ if (!blockAttributes.some((attribute) => attribute.startsWith('@@map("'))) {
127
+ return void fail('it declares no `@@map(…)`; the physical table name is then the model ' +
128
+ 'name, which no operator runbook or retention sweep addresses');
129
+ }
130
+ }
131
+ //# sourceMappingURL=release-intent-schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"release-intent-schema.js","sourceRoot":"","sources":["../../src/lib/release-intent-schema.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ export declare function stripPrismaComments(source: string): string;
2
+ export declare function extractModelBlock(source: string, model: string): string | undefined;
3
+ export interface ParsedField {
4
+ readonly name: string;
5
+ readonly attributes: string;
6
+ }
7
+ //# sourceMappingURL=schema-source-reader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-source-reader.d.ts","sourceRoot":"","sources":["../../src/lib/schema-source-reader.ts"],"names":[],"mappings":"AAkCA,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CA2B1D;AAGD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAsBnF;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B"}
@@ -0,0 +1,56 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.stripPrismaComments = stripPrismaComments;
4
+ exports.extractModelBlock = extractModelBlock;
5
+ function stripPrismaComments(source) {
6
+ return source
7
+ .split('\n')
8
+ .map((line) => {
9
+ let quote;
10
+ for (let i = 0; i < line.length; i += 1) {
11
+ const ch = line[i];
12
+ if (quote !== undefined) {
13
+ if (ch === '\\') {
14
+ i += 1;
15
+ }
16
+ else if (ch === quote) {
17
+ quote = undefined;
18
+ }
19
+ continue;
20
+ }
21
+ if (ch === '"' || ch === "'") {
22
+ quote = ch;
23
+ continue;
24
+ }
25
+ if (ch === '/' && line[i + 1] === '/') {
26
+ return line.slice(0, i);
27
+ }
28
+ }
29
+ return line;
30
+ })
31
+ .join('\n');
32
+ }
33
+ function extractModelBlock(source, model) {
34
+ const lines = stripPrismaComments(source).split('\n');
35
+ const header = new RegExp(`^\\s*model\\s+${model}\\s*\\{`);
36
+ const start = lines.findIndex((line) => header.test(line));
37
+ if (start === -1) {
38
+ return undefined;
39
+ }
40
+ let depth = 0;
41
+ for (let i = start; i < lines.length; i += 1) {
42
+ for (const ch of lines[i]) {
43
+ if (ch === '{') {
44
+ depth += 1;
45
+ }
46
+ else if (ch === '}') {
47
+ depth -= 1;
48
+ }
49
+ }
50
+ if (depth === 0) {
51
+ return lines.slice(start, i + 1).join('\n');
52
+ }
53
+ }
54
+ return undefined;
55
+ }
56
+ //# sourceMappingURL=schema-source-reader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-source-reader.js","sourceRoot":"","sources":["../../src/lib/schema-source-reader.ts"],"names":[],"mappings":";;AAkCA,kDA2BC;AAGD,8CAsBC;AApDD,SAAgB,mBAAmB,CAAC,MAAc;IAChD,OAAO,MAAM;SACV,KAAK,CAAC,IAAI,CAAC;SACX,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QACZ,IAAI,KAAyB,CAAC;QAC9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YACxC,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YACnB,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBACxB,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC;oBAChB,CAAC,IAAI,CAAC,CAAC;gBACT,CAAC;qBACI,IAAI,EAAE,KAAK,KAAK,EAAE,CAAC;oBACtB,KAAK,GAAG,SAAS,CAAC;gBACpB,CAAC;gBACD,SAAS;YACX,CAAC;YACD,IAAI,EAAE,KAAK,GAAG,IAAI,EAAE,KAAK,GAAG,EAAE,CAAC;gBAC7B,KAAK,GAAG,EAAE,CAAC;gBACX,SAAS;YACX,CAAC;YACD,IAAI,EAAE,KAAK,GAAG,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;gBACtC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAC1B,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC,CAAC;SACD,IAAI,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC;AAGD,SAAgB,iBAAiB,CAAC,MAAc,EAAE,KAAa;IAC7D,MAAM,KAAK,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACtD,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,iBAAiB,KAAK,SAAS,CAAC,CAAC;IAC3D,MAAM,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAC3D,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC;QACjB,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,KAAK,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QAC7C,KAAK,MAAM,EAAE,IAAI,KAAK,CAAC,CAAC,CAAW,EAAE,CAAC;YACpC,IAAI,EAAE,KAAK,GAAG,EAAE,CAAC;gBACf,KAAK,IAAI,CAAC,CAAC;YACb,CAAC;iBACI,IAAI,EAAE,KAAK,GAAG,EAAE,CAAC;gBACpB,KAAK,IAAI,CAAC,CAAC;YACb,CAAC;QACH,CAAC;QACD,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;YAChB,OAAO,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC9C,CAAC;IACH,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC"}