@duckcodeailabs/dql-core 1.6.34 → 1.7.1

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 (99) hide show
  1. package/dist/apps/app-document.d.ts +3 -1
  2. package/dist/apps/app-document.d.ts.map +1 -1
  3. package/dist/apps/app-document.js +26 -11
  4. package/dist/apps/app-document.js.map +1 -1
  5. package/dist/apps/dashboard-document.d.ts +74 -0
  6. package/dist/apps/dashboard-document.d.ts.map +1 -1
  7. package/dist/apps/dashboard-document.js +101 -2
  8. package/dist/apps/dashboard-document.js.map +1 -1
  9. package/dist/apps/index.d.ts +3 -1
  10. package/dist/apps/index.d.ts.map +1 -1
  11. package/dist/apps/index.js +1 -0
  12. package/dist/apps/index.js.map +1 -1
  13. package/dist/apps/product-domain-context.d.ts +23 -0
  14. package/dist/apps/product-domain-context.d.ts.map +1 -0
  15. package/dist/apps/product-domain-context.js +25 -0
  16. package/dist/apps/product-domain-context.js.map +1 -0
  17. package/dist/artifacts/dql-artifact.d.ts +13 -0
  18. package/dist/artifacts/dql-artifact.d.ts.map +1 -1
  19. package/dist/artifacts/dql-artifact.js +69 -0
  20. package/dist/artifacts/dql-artifact.js.map +1 -1
  21. package/dist/artifacts/index.d.ts +1 -1
  22. package/dist/artifacts/index.d.ts.map +1 -1
  23. package/dist/ast/index.d.ts +1 -1
  24. package/dist/ast/index.d.ts.map +1 -1
  25. package/dist/ast/index.js.map +1 -1
  26. package/dist/ast/nodes.d.ts +10 -1
  27. package/dist/ast/nodes.d.ts.map +1 -1
  28. package/dist/ast/printer.js +4 -0
  29. package/dist/ast/printer.js.map +1 -1
  30. package/dist/blocks/index.d.ts +2 -0
  31. package/dist/blocks/index.d.ts.map +1 -0
  32. package/dist/blocks/index.js +2 -0
  33. package/dist/blocks/index.js.map +1 -0
  34. package/dist/blocks/parameters.d.ts +55 -0
  35. package/dist/blocks/parameters.d.ts.map +1 -0
  36. package/dist/blocks/parameters.js +160 -0
  37. package/dist/blocks/parameters.js.map +1 -0
  38. package/dist/format/diff.d.ts.map +1 -1
  39. package/dist/format/diff.js +19 -11
  40. package/dist/format/diff.js.map +1 -1
  41. package/dist/format/notebook.d.ts +1 -1
  42. package/dist/format/notebook.js +2 -2
  43. package/dist/formatter/formatter.js +23 -1
  44. package/dist/formatter/formatter.js.map +1 -1
  45. package/dist/index.d.ts +1 -0
  46. package/dist/index.d.ts.map +1 -1
  47. package/dist/index.js +1 -0
  48. package/dist/index.js.map +1 -1
  49. package/dist/manifest/builder.d.ts +17 -0
  50. package/dist/manifest/builder.d.ts.map +1 -1
  51. package/dist/manifest/builder.js +143 -9
  52. package/dist/manifest/builder.js.map +1 -1
  53. package/dist/manifest/datalex-migration.d.ts +68 -0
  54. package/dist/manifest/datalex-migration.d.ts.map +1 -0
  55. package/dist/manifest/datalex-migration.js +369 -0
  56. package/dist/manifest/datalex-migration.js.map +1 -0
  57. package/dist/manifest/dbt-first-authoring.d.ts +210 -0
  58. package/dist/manifest/dbt-first-authoring.d.ts.map +1 -0
  59. package/dist/manifest/dbt-first-authoring.js +510 -0
  60. package/dist/manifest/dbt-first-authoring.js.map +1 -0
  61. package/dist/manifest/dbt-first-modeling.d.ts +34 -0
  62. package/dist/manifest/dbt-first-modeling.d.ts.map +1 -0
  63. package/dist/manifest/dbt-first-modeling.js +931 -0
  64. package/dist/manifest/dbt-first-modeling.js.map +1 -0
  65. package/dist/manifest/domain-discovery.d.ts +98 -0
  66. package/dist/manifest/domain-discovery.d.ts.map +1 -0
  67. package/dist/manifest/domain-discovery.js +503 -0
  68. package/dist/manifest/domain-discovery.js.map +1 -0
  69. package/dist/manifest/domain-package-registry.d.ts +20 -0
  70. package/dist/manifest/domain-package-registry.d.ts.map +1 -0
  71. package/dist/manifest/domain-package-registry.js +265 -0
  72. package/dist/manifest/domain-package-registry.js.map +1 -0
  73. package/dist/manifest/domain-writer.d.ts +4 -0
  74. package/dist/manifest/domain-writer.d.ts.map +1 -1
  75. package/dist/manifest/domain-writer.js +3 -0
  76. package/dist/manifest/domain-writer.js.map +1 -1
  77. package/dist/manifest/index.d.ts +7 -1
  78. package/dist/manifest/index.d.ts.map +1 -1
  79. package/dist/manifest/index.js +6 -0
  80. package/dist/manifest/index.js.map +1 -1
  81. package/dist/manifest/project-snapshot.d.ts +30 -0
  82. package/dist/manifest/project-snapshot.d.ts.map +1 -0
  83. package/dist/manifest/project-snapshot.js +68 -0
  84. package/dist/manifest/project-snapshot.js.map +1 -0
  85. package/dist/manifest/types.d.ts +289 -3
  86. package/dist/manifest/types.d.ts.map +1 -1
  87. package/dist/parser/parser.d.ts.map +1 -1
  88. package/dist/parser/parser.js +40 -6
  89. package/dist/parser/parser.js.map +1 -1
  90. package/dist/semantic/analyzer.js +1 -1
  91. package/dist/semantic/analyzer.js.map +1 -1
  92. package/dist/semantic/providers/repo-resolver.d.ts.map +1 -1
  93. package/dist/semantic/providers/repo-resolver.js +14 -4
  94. package/dist/semantic/providers/repo-resolver.js.map +1 -1
  95. package/dist/semantic/semantic-layer.d.ts +6 -0
  96. package/dist/semantic/semantic-layer.d.ts.map +1 -1
  97. package/dist/semantic/semantic-layer.js +68 -2
  98. package/dist/semantic/semantic-layer.js.map +1 -1
  99. package/package.json +1 -1
@@ -0,0 +1,510 @@
1
+ import { createHash } from 'node:crypto';
2
+ import { existsSync, mkdirSync, readFileSync, readdirSync, realpathSync, statSync, writeFileSync } from 'node:fs';
3
+ import { dirname, join, relative, resolve, sep } from 'node:path';
4
+ import * as yaml from 'js-yaml';
5
+ import { domainFolderSlug, renderDomainDeclaration } from './domain-writer.js';
6
+ import { loadDomainPackageRegistry } from './domain-package-registry.js';
7
+ const dbtJsonArtifactCache = new Map();
8
+ let dbtJsonArtifactReads = 0;
9
+ /** PERF-001 instrumentation: physical dbt JSON parses since the last reset. */
10
+ export function resetDbtArtifactReadCount() {
11
+ dbtJsonArtifactReads = 0;
12
+ }
13
+ /** PERF-001 instrumentation used by the ignored scale evidence harness. */
14
+ export function dbtArtifactReadCount() {
15
+ return dbtJsonArtifactReads;
16
+ }
17
+ export function previewDbtSourcePatch(dbtProjectRoot, manifestPath, input) {
18
+ const root = resolve(dbtProjectRoot);
19
+ const manifest = readJson(assertContainedPath(root, manifestPath, 'dbt manifest'));
20
+ const raw = asRecord(asRecord(manifest.nodes)[input.uniqueId]);
21
+ if (raw.resource_type !== 'model')
22
+ throw new Error(`dbt model not found: ${input.uniqueId}`);
23
+ const name = requiredId(stringValue(raw.name), 'dbt model');
24
+ const patchPath = dbtPatchRelativePath(raw, name);
25
+ const absolute = assertContainedPath(root, patchPath, 'dbt source patch');
26
+ const before = existsSync(absolute) ? readFileSync(absolute, 'utf8') : '';
27
+ const document = before.trim() ? asRecord(yaml.load(before)) : { version: 2 };
28
+ const models = Array.isArray(document.models) ? [...document.models] : [];
29
+ const index = models.findIndex((entry) => asRecord(entry).name === name);
30
+ const model = index >= 0 ? { ...asRecord(models[index]) } : { name };
31
+ if (input.description !== undefined)
32
+ model.description = input.description;
33
+ if (input.columns) {
34
+ const columns = Array.isArray(model.columns) ? [...model.columns] : [];
35
+ for (const requested of input.columns) {
36
+ const columnName = requiredId(requested.name, 'dbt column');
37
+ const columnIndex = columns.findIndex((entry) => asRecord(entry).name === columnName);
38
+ const column = columnIndex >= 0 ? { ...asRecord(columns[columnIndex]) } : { name: columnName };
39
+ if (requested.description !== undefined)
40
+ column.description = requested.description;
41
+ if (requested.tests !== undefined)
42
+ column.data_tests = cleanStrings(requested.tests);
43
+ if (columnIndex >= 0)
44
+ columns[columnIndex] = column;
45
+ else
46
+ columns.push(column);
47
+ }
48
+ model.columns = columns;
49
+ }
50
+ if (index >= 0)
51
+ models[index] = model;
52
+ else
53
+ models.push(model);
54
+ document.version = typeof document.version === 'number' ? document.version : 2;
55
+ document.models = models;
56
+ const after = dumpYaml(document);
57
+ const patch = { path: patchPath, before, after, changed: before !== after };
58
+ return {
59
+ uniqueId: input.uniqueId,
60
+ patch,
61
+ fingerprint: hash({ uniqueId: input.uniqueId, path: patchPath, before, after }),
62
+ };
63
+ }
64
+ export function applyDbtSourcePatch(dbtProjectRoot, manifestPath, input, expectedFingerprint) {
65
+ const preview = previewDbtSourcePatch(dbtProjectRoot, manifestPath, input);
66
+ if (!expectedFingerprint || preview.fingerprint !== expectedFingerprint) {
67
+ throw new Error('dbt source changed after the preview. Refresh the source patch before applying.');
68
+ }
69
+ if (preview.patch.changed) {
70
+ const absolute = assertContainedPath(dbtProjectRoot, preview.patch.path, 'dbt source patch');
71
+ mkdirSync(dirname(absolute), { recursive: true });
72
+ // Re-check after mkdir so a concurrently-created symlink cannot redirect
73
+ // the final write outside the dbt project.
74
+ assertContainedPath(dbtProjectRoot, preview.patch.path, 'dbt source patch');
75
+ writeFileSync(absolute, preview.patch.after, 'utf8');
76
+ }
77
+ return preview;
78
+ }
79
+ export function previewModelingChange(projectRoot, change) {
80
+ const root = resolve(projectRoot);
81
+ const patches = change.operation === 'upsert_domain'
82
+ ? previewDomain(root, change.value)
83
+ : change.operation === 'upsert_area'
84
+ ? [previewArea(root, change.value)]
85
+ : change.operation === 'upsert_entity'
86
+ ? [previewEntity(root, change.value)]
87
+ : change.operation === 'upsert_relationship'
88
+ ? [previewRelationship(root, change.value)]
89
+ : change.operation === 'upsert_contract'
90
+ ? [previewContract(root, change.value)]
91
+ : change.operation === 'upsert_export'
92
+ ? [previewExport(root, change.value)]
93
+ : [previewImport(root, change.value)];
94
+ return {
95
+ operation: change.operation,
96
+ patches,
97
+ fingerprint: hash(patches.map((patch) => ({ path: patch.path, before: patch.before, after: patch.after }))),
98
+ };
99
+ }
100
+ export function applyModelingChange(projectRoot, change, expectedFingerprint) {
101
+ const preview = previewModelingChange(projectRoot, change);
102
+ if (expectedFingerprint && preview.fingerprint !== expectedFingerprint) {
103
+ throw new Error('Modeling source changed after the preview. Refresh the preview before applying.');
104
+ }
105
+ for (const patch of preview.patches) {
106
+ if (!patch.changed)
107
+ continue;
108
+ const absolute = safeProjectPath(projectRoot, patch.path);
109
+ mkdirSync(dirname(absolute), { recursive: true });
110
+ safeProjectPath(projectRoot, patch.path);
111
+ writeFileSync(absolute, patch.after, 'utf8');
112
+ }
113
+ return preview;
114
+ }
115
+ export function loadDbtNodeAuthoringDetail(manifestPath, uniqueId) {
116
+ const manifest = readJson(manifestPath);
117
+ const raw = asRecord(asRecord(manifest.nodes)[uniqueId] ?? asRecord(manifest.sources)[uniqueId]);
118
+ if (Object.keys(raw).length === 0)
119
+ return undefined;
120
+ const resourceType = raw.resource_type === 'source' ? 'source' : raw.resource_type === 'model' ? 'model' : undefined;
121
+ if (!resourceType)
122
+ return undefined;
123
+ const catalogPath = join(dirname(manifestPath), 'catalog.json');
124
+ const catalog = existsSync(catalogPath) ? readJson(catalogPath) : {};
125
+ const catalogEntry = asRecord(asRecord(catalog[resourceType === 'source' ? 'sources' : 'nodes'])[uniqueId]);
126
+ const catalogColumns = asRecord(catalogEntry.columns);
127
+ const manifestColumns = asRecord(raw.columns);
128
+ const childMap = asRecord(manifest.child_map);
129
+ const childIds = Array.isArray(childMap[uniqueId]) ? childMap[uniqueId] : [];
130
+ const testNodes = asRecord(manifest.nodes);
131
+ const childTests = childIds
132
+ .map((id) => asRecord(testNodes[String(id)]))
133
+ .filter((node) => node.resource_type === 'test');
134
+ const modelTests = childTests
135
+ .map((node) => String(node.name ?? node.unique_id ?? 'test'))
136
+ .sort();
137
+ const testsByColumn = new Map();
138
+ for (const node of childTests) {
139
+ const metadata = asRecord(node.test_metadata);
140
+ const kwargs = asRecord(metadata.kwargs);
141
+ const columnName = stringValue(node.column_name) ?? stringValue(kwargs.column_name);
142
+ if (!columnName)
143
+ continue;
144
+ const name = stringValue(metadata.name) ?? stringValue(node.name) ?? 'test';
145
+ testsByColumn.set(columnName, [...(testsByColumn.get(columnName) ?? []), name]);
146
+ }
147
+ const names = new Set([...Object.keys(manifestColumns), ...Object.keys(catalogColumns)]);
148
+ const columns = [...names].sort().map((name) => {
149
+ const manifestColumn = asRecord(manifestColumns[name]);
150
+ const catalogColumn = asRecord(catalogColumns[name]);
151
+ return {
152
+ name,
153
+ type: stringValue(catalogColumn.type),
154
+ description: stringValue(manifestColumn.description),
155
+ tests: [...new Set([...stringArray(manifestColumn.tests), ...(testsByColumn.get(name) ?? [])])].sort(),
156
+ };
157
+ });
158
+ const dqlMeta = asRecord(asRecord(raw.meta).dql);
159
+ return {
160
+ uniqueId,
161
+ name: stringValue(raw.alias) ?? stringValue(raw.identifier) ?? stringValue(raw.name) ?? uniqueId,
162
+ resourceType,
163
+ relation: relationName(raw),
164
+ sourcePath: stringValue(raw.original_file_path) ?? stringValue(raw.path),
165
+ description: stringValue(raw.description),
166
+ columns,
167
+ tests: modelTests,
168
+ dqlMeta: Object.keys(dqlMeta).length > 0
169
+ ? { grain: stringValue(dqlMeta.grain), keys: stringArray(dqlMeta.keys ?? dqlMeta.key ?? dqlMeta.primary_key) }
170
+ : undefined,
171
+ };
172
+ }
173
+ function previewDomain(projectRoot, value) {
174
+ const id = requiredId(value.id, 'domain');
175
+ const root = packageRootForWrite(projectRoot, id, value.parent);
176
+ const declarationPath = relative(projectRoot, join(root, 'domain.dql')).replace(/\\/g, '/');
177
+ return [
178
+ sourcePatch(projectRoot, declarationPath, renderDomainDeclaration({
179
+ ...value,
180
+ id,
181
+ name: value.name || id.split('.').at(-1) || id,
182
+ exports: cleanStrings(value.exports),
183
+ })),
184
+ ];
185
+ }
186
+ function previewArea(projectRoot, value) {
187
+ const id = requiredId(value.id, 'model area');
188
+ const domain = requiredId(value.domain, 'domain');
189
+ const path = modelAreaSourceFile(projectRoot, domain, id);
190
+ const absolute = safeProjectPath(projectRoot, path);
191
+ const before = existsSync(absolute) ? readFileSync(absolute, 'utf8') : '';
192
+ const document = before.trim() ? asRecord(yaml.load(before)) : {};
193
+ const existing = asRecord(document.area);
194
+ document.domain = domain;
195
+ document.area = {
196
+ ...existing,
197
+ id,
198
+ name: value.name.trim() || id,
199
+ ...(value.description?.trim() ? { description: value.description.trim() } : {}),
200
+ ...(cleanStrings(value.intentExamples).length > 0 ? { intent_examples: cleanStrings(value.intentExamples) } : {}),
201
+ ...(cleanStrings(value.references).length > 0 ? { references: cleanStrings(value.references) } : {}),
202
+ };
203
+ const after = dumpYaml(document);
204
+ return { path, before, after, changed: before !== after };
205
+ }
206
+ function previewEntity(projectRoot, value) {
207
+ const id = requiredId(value.id, 'entity');
208
+ const domain = requiredId(value.domain, 'domain');
209
+ const dbtModel = requiredId(value.dbtModel, 'dbt model');
210
+ const path = modelingSourceFile(projectRoot, domain, 'entities.dql.yaml', 'entities', 'id', id, value.areaId);
211
+ const entity = {
212
+ id,
213
+ dbt_model: dbtModel,
214
+ ...(value.businessName?.trim() ? { business_name: value.businessName.trim() } : {}),
215
+ ...(value.businessContext?.trim() ? { business_context: value.businessContext.trim() } : {}),
216
+ ...(cleanStrings(value.conceptRefs).length > 0 ? { concept_refs: cleanStrings(value.conceptRefs) } : {}),
217
+ ...(value.analyticalRole ? { analytical_role: value.analyticalRole } : {}),
218
+ ...(value.status ? { status: value.status } : {}),
219
+ ...(value.owner?.trim() ? { owner: value.owner.trim() } : {}),
220
+ ...(value.grain ? { grain: value.grain } : {}),
221
+ ...(cleanStrings(value.keys).length > 0 ? { keys: cleanStrings(value.keys) } : {}),
222
+ };
223
+ return upsertListPatch(projectRoot, path, 'entities', 'id', entity);
224
+ }
225
+ function previewRelationship(projectRoot, value) {
226
+ const id = requiredId(value.id, 'relationship');
227
+ const domain = requiredId(value.domain, 'domain');
228
+ if (!value.from || !value.to || !Array.isArray(value.keys) || value.keys.length === 0) {
229
+ throw new Error('Relationship requires from, to, and at least one key pair.');
230
+ }
231
+ const relationship = {
232
+ id,
233
+ from: value.from,
234
+ to: value.to,
235
+ keys: value.keys.map((key) => ({ from: key.from, to: key.to })),
236
+ cardinality: value.cardinality,
237
+ fanout: value.fanout,
238
+ status: value.status ?? 'draft',
239
+ ...(value.crossDomain ? { crossDomain: true } : {}),
240
+ ...(value.owner ? { owner: value.owner } : {}),
241
+ ...(value.ownerDomain ? { owner_domain: value.ownerDomain } : {}),
242
+ ...(value.verb ? { verb: value.verb } : {}),
243
+ ...(value.description ? { description: value.description } : {}),
244
+ ...(value.rationale ? { rationale: value.rationale } : {}),
245
+ ...(value.roles ? { roles: value.roles } : {}),
246
+ ...(value.optionality ? { optionality: value.optionality } : {}),
247
+ ...(value.joinTypes?.length ? { join_types: value.joinTypes } : {}),
248
+ ...(value.aggregation ? { aggregation: {
249
+ measures_from: cleanStrings(value.aggregation.measuresFrom),
250
+ dimensions_from: cleanStrings(value.aggregation.dimensionsFrom),
251
+ ...(value.aggregation.requiresPreAggregation ? { requires_pre_aggregation: true } : {}),
252
+ } } : {}),
253
+ ...(value.temporal ? { temporal: {
254
+ fact_time: value.temporal.factTime,
255
+ valid_from: value.temporal.validFrom,
256
+ ...(value.temporal.validTo ? { valid_to: value.temporal.validTo } : {}),
257
+ ...(value.temporal.openEnded ? { open_ended: true } : {}),
258
+ } } : {}),
259
+ ...(value.attributionBlock ? { attribution_block: value.attributionBlock } : {}),
260
+ ...(value.importRefs?.length ? { imports: cleanStrings(value.importRefs) } : {}),
261
+ ...(value.evidenceExpiresAt ? { evidence_expires_at: value.evidenceExpiresAt } : {}),
262
+ ...(value.certifiedAgainst ? { certifiedAgainst: value.certifiedAgainst } : {}),
263
+ ...(value.validation ? { validation: validationSource(value.validation) } : {}),
264
+ };
265
+ return upsertListPatch(projectRoot, modelingSourceFile(projectRoot, domain, 'relationships.dql.yaml', 'relationships', 'id', id, value.areaId), 'relationships', 'id', relationship);
266
+ }
267
+ function previewContract(projectRoot, value) {
268
+ const id = requiredId(value.id, 'contract');
269
+ const domain = requiredId(value.domain, 'domain');
270
+ const contract = {
271
+ id,
272
+ entities: cleanStrings(value.entities),
273
+ blocks: cleanStrings(value.blocks),
274
+ status: value.status ?? 'draft',
275
+ ...(value.owner ? { owner: value.owner } : {}),
276
+ requiredEvaluation: value.requiredEvaluation !== false,
277
+ version: value.version ?? 1,
278
+ ...(value.grain ? { grain: value.grain } : {}),
279
+ ...(value.metricRefs?.length ? { metrics: cleanStrings(value.metricRefs) } : {}),
280
+ ...(value.dimensions?.length ? { dimensions: cleanStrings(value.dimensions) } : {}),
281
+ ...(value.allowedFilters?.length ? { allowed_filters: cleanStrings(value.allowedFilters) } : {}),
282
+ ...(value.requiredFilters?.length ? { required_filters: cleanStrings(value.requiredFilters) } : {}),
283
+ ...(value.purpose ? { purpose: value.purpose } : {}),
284
+ ...(value.evaluationRefs?.length ? { evaluations: cleanStrings(value.evaluationRefs) } : {}),
285
+ };
286
+ return upsertListPatch(projectRoot, modelingSourceFile(projectRoot, domain, 'contracts.dql.yaml', 'contracts', 'id', id), 'contracts', 'id', contract);
287
+ }
288
+ function previewExport(projectRoot, value) {
289
+ const id = requiredId(value.id, 'domain export');
290
+ const domain = requiredId(value.domain, 'domain');
291
+ const exported = {
292
+ id,
293
+ version: value.version ?? 1,
294
+ ...(value.entity ? { entity: value.entity } : {}),
295
+ metrics: cleanStrings(value.metrics),
296
+ blocks: cleanStrings(value.blocks),
297
+ allowed_keys: cleanStrings(value.allowedKeys),
298
+ allowed_dimensions: cleanStrings(value.allowedDimensions),
299
+ allowed_filters: cleanStrings(value.allowedFilters),
300
+ purposes: cleanStrings(value.purposes),
301
+ consumer_domains: cleanStrings(value.consumerDomains),
302
+ ...(value.classification ? { classification: value.classification } : {}),
303
+ ...(value.contract ? { contract: value.contract } : {}),
304
+ status: value.status ?? 'draft',
305
+ ...(value.owner ? { owner: value.owner } : {}),
306
+ };
307
+ return upsertListPatch(projectRoot, modelingSourceFile(projectRoot, domain, 'interfaces.dql.yaml', 'exports', 'id', id), 'exports', 'id', exported);
308
+ }
309
+ function previewImport(projectRoot, value) {
310
+ const domain = requiredId(value.domain, 'domain');
311
+ const exportRef = requiredId(value.exportRef.replace('@', '.v'), 'domain export reference').replace(/\.v(\d+)$/, '@$1');
312
+ const id = value.id?.trim() || `${domain}:${exportRef}`;
313
+ const imported = {
314
+ id,
315
+ export: exportRef,
316
+ purpose: value.purpose,
317
+ status: value.status ?? 'draft',
318
+ ...(value.owner ? { owner: value.owner } : {}),
319
+ };
320
+ return upsertListPatch(projectRoot, modelingSourceFile(projectRoot, domain, 'interfaces.dql.yaml', 'imports', 'id', id), 'imports', 'id', imported);
321
+ }
322
+ function validationSource(value) {
323
+ return {
324
+ status: value.status,
325
+ checked_at: value.checkedAt,
326
+ query_fingerprint: value.queryFingerprint,
327
+ ...(value.proofFingerprint ? { proof_fingerprint: value.proofFingerprint } : {}),
328
+ from_rows: value.fromRows,
329
+ to_rows: value.toRows,
330
+ joined_rows: value.joinedRows,
331
+ from_null_keys: value.fromNullKeys,
332
+ to_null_keys: value.toNullKeys,
333
+ unmatched_from: value.unmatchedFrom,
334
+ max_from_per_key: value.maxFromPerKey,
335
+ max_to_per_key: value.maxToPerKey,
336
+ ...(value.message ? { message: value.message } : {}),
337
+ };
338
+ }
339
+ function upsertListPatch(projectRoot, path, listKey, identityKey, value) {
340
+ const absolute = safeProjectPath(projectRoot, path);
341
+ const before = existsSync(absolute) ? readFileSync(absolute, 'utf8') : '';
342
+ const document = before.trim() ? asRecord(yaml.load(before)) : {};
343
+ const list = Array.isArray(document[listKey]) ? [...document[listKey]] : [];
344
+ const index = list.findIndex((entry) => asRecord(entry)[identityKey] === value[identityKey]);
345
+ // Preserve fields the focused UI does not currently edit. This keeps an
346
+ // entity or relationship authored in a small Model Area from losing its
347
+ // advanced DQL policy when a user updates its business context or keys.
348
+ if (index >= 0)
349
+ list[index] = { ...asRecord(list[index]), ...value };
350
+ else
351
+ list.push(value);
352
+ list.sort((left, right) => String(asRecord(left)[identityKey] ?? '').localeCompare(String(asRecord(right)[identityKey] ?? '')));
353
+ document[listKey] = list;
354
+ return { path, before, after: dumpYaml(document), changed: before !== dumpYaml(document) };
355
+ }
356
+ function sourcePatch(projectRoot, path, after) {
357
+ const absolute = safeProjectPath(projectRoot, path);
358
+ const before = existsSync(absolute) ? readFileSync(absolute, 'utf8') : '';
359
+ return { path, before, after, changed: before !== after };
360
+ }
361
+ /** Use one Domain Model source by default while editing existing split objects in place. */
362
+ function modelingSourceFile(projectRoot, domain, legacyName, listKey, identityKey, identityValue, areaId) {
363
+ const root = findPackageRoot(projectRoot, domain);
364
+ if (!root)
365
+ throw new Error(`Domain Package "${domain}" does not exist. Create the domain first.`);
366
+ if (areaId?.trim()) {
367
+ const areaPath = modelAreaSourceFile(projectRoot, domain, areaId);
368
+ if (!existsSync(safeProjectPath(projectRoot, areaPath))) {
369
+ throw new Error(`Model Area "${areaId}" does not exist. Create the area before adding modeling objects.`);
370
+ }
371
+ return areaPath;
372
+ }
373
+ // New area files are nested under modeling/areas/. Find the true owner
374
+ // before falling back to the historical unified/typed files.
375
+ for (const candidate of modelingYamlFiles(join(root, 'modeling'))) {
376
+ const document = asRecord(yaml.load(readFileSync(candidate, 'utf8')));
377
+ const list = Array.isArray(document[listKey]) ? document[listKey] : [];
378
+ if (list.some((entry) => asRecord(entry)[identityKey] === identityValue)) {
379
+ return relative(projectRoot, candidate).replace(/\\/g, '/');
380
+ }
381
+ }
382
+ const unified = join(root, 'modeling', 'model.dql.yaml');
383
+ const legacy = join(root, 'modeling', legacyName);
384
+ for (const candidate of [unified, legacy]) {
385
+ if (!existsSync(candidate))
386
+ continue;
387
+ const document = asRecord(yaml.load(readFileSync(candidate, 'utf8')));
388
+ const list = Array.isArray(document[listKey]) ? document[listKey] : [];
389
+ if (list.some((entry) => asRecord(entry)[identityKey] === identityValue))
390
+ return relative(projectRoot, candidate).replace(/\\/g, '/');
391
+ }
392
+ return relative(projectRoot, unified).replace(/\\/g, '/');
393
+ }
394
+ function modelAreaSourceFile(projectRoot, domain, id) {
395
+ const root = findPackageRoot(projectRoot, domain);
396
+ if (!root)
397
+ throw new Error(`Domain Package "${domain}" does not exist. Create the domain first.`);
398
+ const localId = requiredId(id, 'model area');
399
+ return relative(projectRoot, join(root, 'modeling', 'areas', `${localId}.dql.yaml`)).replace(/\\/g, '/');
400
+ }
401
+ function modelingYamlFiles(dir) {
402
+ if (!existsSync(dir))
403
+ return [];
404
+ const files = [];
405
+ for (const entry of readdirSync(dir, { withFileTypes: true })) {
406
+ if (entry.name.startsWith('.'))
407
+ continue;
408
+ const fullPath = join(dir, entry.name);
409
+ if (entry.isDirectory())
410
+ files.push(...modelingYamlFiles(fullPath));
411
+ else if (entry.isFile() && (entry.name.endsWith('.yaml') || entry.name.endsWith('.yml')))
412
+ files.push(fullPath);
413
+ }
414
+ return files.sort();
415
+ }
416
+ function packageRootForWrite(projectRoot, id, parent) {
417
+ const existing = findPackageRoot(projectRoot, id);
418
+ if (existing)
419
+ return existing;
420
+ if (parent) {
421
+ const parentRoot = findPackageRoot(projectRoot, parent);
422
+ if (!parentRoot)
423
+ throw new Error(`Parent Domain Package "${parent}" does not exist.`);
424
+ return join(parentRoot, domainFolderSlug(id.split('.').pop() ?? id));
425
+ }
426
+ return join(projectRoot, 'domains', domainFolderSlug(id));
427
+ }
428
+ function findPackageRoot(projectRoot, id) {
429
+ return loadDomainPackageRegistry(projectRoot).get(id)?.root;
430
+ }
431
+ function safeProjectPath(projectRoot, relativePath) {
432
+ if (!relativePath.replace(/\\/g, '/').startsWith('domains/'))
433
+ throw new Error('Modeling writes are restricted to domains/.');
434
+ return assertContainedPath(projectRoot, relativePath, 'Modeling path');
435
+ }
436
+ function dbtPatchRelativePath(raw, name) {
437
+ const patchPath = stringValue(raw.patch_path);
438
+ if (patchPath) {
439
+ const separator = patchPath.indexOf('://');
440
+ const relativePath = separator >= 0 ? patchPath.slice(separator + 3) : patchPath;
441
+ if (!relativePath.endsWith('.yml') && !relativePath.endsWith('.yaml'))
442
+ throw new Error('dbt patch_path must point to a YAML source file.');
443
+ return relativePath.replace(/\\/g, '/');
444
+ }
445
+ const original = stringValue(raw.original_file_path) ?? stringValue(raw.path);
446
+ if (!original)
447
+ throw new Error(`dbt model ${name} does not declare a source path.`);
448
+ return join(dirname(original), `${name}.yml`).replace(/\\/g, '/');
449
+ }
450
+ /** Resolve lexical and real paths so existing symlink ancestors cannot escape
451
+ * the intended project root. Missing leaf segments are allowed for previews. */
452
+ function assertContainedPath(projectRoot, inputPath, label) {
453
+ const root = resolve(projectRoot);
454
+ const canonicalRoot = existsSync(root) ? realpathSync(root) : root;
455
+ const absolute = resolve(root, inputPath);
456
+ if (absolute !== root && !absolute.startsWith(`${root}${sep}`))
457
+ throw new Error(`${label} escapes the project root.`);
458
+ let existing = absolute;
459
+ while (!existsSync(existing) && existing !== root)
460
+ existing = dirname(existing);
461
+ const canonicalExisting = existsSync(existing) ? realpathSync(existing) : canonicalRoot;
462
+ if (canonicalExisting !== canonicalRoot && !canonicalExisting.startsWith(`${canonicalRoot}${sep}`)) {
463
+ throw new Error(`${label} escapes the project root through a symlink.`);
464
+ }
465
+ return absolute;
466
+ }
467
+ function dumpYaml(value) {
468
+ return yaml.dump(value, { noRefs: true, lineWidth: -1, sortKeys: false, noCompatMode: true }).trimEnd() + '\n';
469
+ }
470
+ function readJson(path) {
471
+ const stat = statSync(path);
472
+ const version = `${stat.size}:${stat.mtimeMs}`;
473
+ const cached = dbtJsonArtifactCache.get(path);
474
+ if (cached?.version === version)
475
+ return cached.value;
476
+ const value = asRecord(JSON.parse(readFileSync(path, 'utf8')));
477
+ dbtJsonArtifactReads += 1;
478
+ dbtJsonArtifactCache.set(path, { version, value });
479
+ return value;
480
+ }
481
+ function relationName(raw) {
482
+ const database = stringValue(raw.database);
483
+ const schema = stringValue(raw.schema);
484
+ const identifier = stringValue(raw.alias) ?? stringValue(raw.identifier) ?? stringValue(raw.name);
485
+ return [database, schema, identifier].filter(Boolean).join('.') || undefined;
486
+ }
487
+ function requiredId(value, label) {
488
+ const normalized = String(value ?? '').trim();
489
+ if (!normalized || !/^[A-Za-z0-9][A-Za-z0-9_.-]*$/.test(normalized))
490
+ throw new Error(`${label} requires a safe non-empty id.`);
491
+ return normalized;
492
+ }
493
+ function cleanStrings(value) {
494
+ if (!Array.isArray(value))
495
+ return [];
496
+ return [...new Set(value.map((item) => String(item).trim()).filter(Boolean))].sort();
497
+ }
498
+ function stringArray(value) {
499
+ return Array.isArray(value) ? value.map(String).filter(Boolean) : [];
500
+ }
501
+ function stringValue(value) {
502
+ return typeof value === 'string' && value.trim() ? value.trim() : undefined;
503
+ }
504
+ function asRecord(value) {
505
+ return value && typeof value === 'object' && !Array.isArray(value) ? value : {};
506
+ }
507
+ function hash(value) {
508
+ return createHash('sha256').update(JSON.stringify(value)).digest('hex');
509
+ }
510
+ //# sourceMappingURL=dbt-first-authoring.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dbt-first-authoring.js","sourceRoot":"","sources":["../../src/manifest/dbt-first-authoring.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * dbt-first domain modeling (manifest v3).
3
+ *
4
+ * The loader deliberately reads dbt artifacts as the physical source of truth
5
+ * and emits only stable references and DQL-owned analytical policy. Do not add
6
+ * copied dbt descriptions, column catalogs, tests, or MetricFlow formulas here.
7
+ */
8
+ import type { ManifestDbtFirstModeling, ManifestDbtProvenance, ManifestDiagnostic, ManifestFanoutPolicy, ManifestRelationshipCardinality } from './types.js';
9
+ /** Result of compiling the v3 overlay. The raw dbt facts never leave this module. */
10
+ export interface DbtFirstModelingLoadResult {
11
+ provenance: ManifestDbtProvenance;
12
+ modeling: ManifestDbtFirstModeling;
13
+ diagnostics: ManifestDiagnostic[];
14
+ }
15
+ /** Returns the sibling dbt artifact only when it exists. */
16
+ export declare function siblingDbtArtifact(manifestPath: string, name: string): string | undefined;
17
+ /**
18
+ * Build v3 provenance and sparse packages from a dbt manifest. This function
19
+ * is intentionally deterministic: it uses source content and paths only, not
20
+ * wall-clock time.
21
+ */
22
+ export declare function loadDbtFirstModeling(projectRoot: string, manifestPath: string): DbtFirstModelingLoadResult;
23
+ export declare function relationshipValidationProofFingerprint(input: {
24
+ fromRelation?: string;
25
+ toRelation?: string;
26
+ keys: Array<{
27
+ from: string;
28
+ to: string;
29
+ }>;
30
+ cardinality: ManifestRelationshipCardinality;
31
+ fanout: ManifestFanoutPolicy;
32
+ queryFingerprint: string;
33
+ }): string;
34
+ //# sourceMappingURL=dbt-first-modeling.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dbt-first-modeling.d.ts","sourceRoot":"","sources":["../../src/manifest/dbt-first-modeling.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAMH,OAAO,KAAK,EAEV,wBAAwB,EAExB,qBAAqB,EACrB,kBAAkB,EAKlB,oBAAoB,EAOpB,+BAA+B,EAEhC,MAAM,YAAY,CAAC;AAqFpB,qFAAqF;AACrF,MAAM,WAAW,0BAA0B;IACzC,UAAU,EAAE,qBAAqB,CAAC;IAClC,QAAQ,EAAE,wBAAwB,CAAC;IACnC,WAAW,EAAE,kBAAkB,EAAE,CAAC;CACnC;AAED,4DAA4D;AAC5D,wBAAgB,kBAAkB,CAAC,YAAY,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAGzF;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAClC,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,GACnB,0BAA0B,CA4X5B;AAoMD,wBAAgB,sCAAsC,CAAC,KAAK,EAAE;IAC5D,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC1C,WAAW,EAAE,+BAA+B,CAAC;IAC7C,MAAM,EAAE,oBAAoB,CAAC;IAC7B,gBAAgB,EAAE,MAAM,CAAC;CAC1B,GAAG,MAAM,CAST"}