@duckcodeailabs/dql-core 1.6.33 → 1.7.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.
- package/dist/apps/app-document.d.ts +3 -1
- package/dist/apps/app-document.d.ts.map +1 -1
- package/dist/apps/app-document.js +26 -11
- package/dist/apps/app-document.js.map +1 -1
- package/dist/apps/dashboard-document.d.ts +5 -0
- package/dist/apps/dashboard-document.d.ts.map +1 -1
- package/dist/apps/dashboard-document.js +4 -0
- package/dist/apps/dashboard-document.js.map +1 -1
- package/dist/apps/index.d.ts +2 -0
- package/dist/apps/index.d.ts.map +1 -1
- package/dist/apps/index.js +1 -0
- package/dist/apps/index.js.map +1 -1
- package/dist/apps/product-domain-context.d.ts +23 -0
- package/dist/apps/product-domain-context.d.ts.map +1 -0
- package/dist/apps/product-domain-context.js +25 -0
- package/dist/apps/product-domain-context.js.map +1 -0
- package/dist/artifacts/dql-artifact.d.ts +13 -0
- package/dist/artifacts/dql-artifact.d.ts.map +1 -1
- package/dist/artifacts/dql-artifact.js +69 -0
- package/dist/artifacts/dql-artifact.js.map +1 -1
- package/dist/artifacts/index.d.ts +1 -1
- package/dist/artifacts/index.d.ts.map +1 -1
- package/dist/ast/index.d.ts +1 -1
- package/dist/ast/index.d.ts.map +1 -1
- package/dist/ast/index.js.map +1 -1
- package/dist/ast/nodes.d.ts +19 -1
- package/dist/ast/nodes.d.ts.map +1 -1
- package/dist/ast/printer.js +24 -0
- package/dist/ast/printer.js.map +1 -1
- package/dist/blocks/index.d.ts +2 -0
- package/dist/blocks/index.d.ts.map +1 -0
- package/dist/blocks/index.js +2 -0
- package/dist/blocks/index.js.map +1 -0
- package/dist/blocks/parameters.d.ts +55 -0
- package/dist/blocks/parameters.d.ts.map +1 -0
- package/dist/blocks/parameters.js +160 -0
- package/dist/blocks/parameters.js.map +1 -0
- package/dist/contracts/types.d.ts +6 -0
- package/dist/contracts/types.d.ts.map +1 -1
- package/dist/contracts/types.js.map +1 -1
- package/dist/format/diff.d.ts.map +1 -1
- package/dist/format/diff.js +19 -11
- package/dist/format/diff.js.map +1 -1
- package/dist/format/notebook.d.ts +1 -1
- package/dist/format/notebook.js +2 -2
- package/dist/formatter/formatter.js +23 -1
- package/dist/formatter/formatter.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/lineage/index.d.ts +1 -1
- package/dist/lineage/index.d.ts.map +1 -1
- package/dist/lineage/index.js.map +1 -1
- package/dist/lineage/sql-parser.d.ts +19 -0
- package/dist/lineage/sql-parser.d.ts.map +1 -1
- package/dist/lineage/sql-parser.js +90 -0
- package/dist/lineage/sql-parser.js.map +1 -1
- package/dist/manifest/builder.d.ts +5 -0
- package/dist/manifest/builder.d.ts.map +1 -1
- package/dist/manifest/builder.js +186 -8
- package/dist/manifest/builder.js.map +1 -1
- package/dist/manifest/datalex-migration.d.ts +68 -0
- package/dist/manifest/datalex-migration.d.ts.map +1 -0
- package/dist/manifest/datalex-migration.js +369 -0
- package/dist/manifest/datalex-migration.js.map +1 -0
- package/dist/manifest/dbt-first-authoring.d.ts +210 -0
- package/dist/manifest/dbt-first-authoring.d.ts.map +1 -0
- package/dist/manifest/dbt-first-authoring.js +510 -0
- package/dist/manifest/dbt-first-authoring.js.map +1 -0
- package/dist/manifest/dbt-first-modeling.d.ts +34 -0
- package/dist/manifest/dbt-first-modeling.d.ts.map +1 -0
- package/dist/manifest/dbt-first-modeling.js +931 -0
- package/dist/manifest/dbt-first-modeling.js.map +1 -0
- package/dist/manifest/domain-discovery.d.ts +98 -0
- package/dist/manifest/domain-discovery.d.ts.map +1 -0
- package/dist/manifest/domain-discovery.js +503 -0
- package/dist/manifest/domain-discovery.js.map +1 -0
- package/dist/manifest/domain-package-registry.d.ts +20 -0
- package/dist/manifest/domain-package-registry.d.ts.map +1 -0
- package/dist/manifest/domain-package-registry.js +265 -0
- package/dist/manifest/domain-package-registry.js.map +1 -0
- package/dist/manifest/domain-writer.d.ts +18 -0
- package/dist/manifest/domain-writer.d.ts.map +1 -1
- package/dist/manifest/domain-writer.js +52 -3
- package/dist/manifest/domain-writer.js.map +1 -1
- package/dist/manifest/index.d.ts +7 -1
- package/dist/manifest/index.d.ts.map +1 -1
- package/dist/manifest/index.js +6 -0
- package/dist/manifest/index.js.map +1 -1
- package/dist/manifest/project-snapshot.d.ts +30 -0
- package/dist/manifest/project-snapshot.d.ts.map +1 -0
- package/dist/manifest/project-snapshot.js +68 -0
- package/dist/manifest/project-snapshot.js.map +1 -0
- package/dist/manifest/types.d.ts +297 -3
- package/dist/manifest/types.d.ts.map +1 -1
- package/dist/parser/parser.d.ts.map +1 -1
- package/dist/parser/parser.js +88 -6
- package/dist/parser/parser.js.map +1 -1
- package/dist/semantic/analyzer.js +1 -1
- package/dist/semantic/analyzer.js.map +1 -1
- package/dist/semantic/index.d.ts +1 -1
- package/dist/semantic/index.d.ts.map +1 -1
- package/dist/semantic/index.js +1 -1
- package/dist/semantic/index.js.map +1 -1
- package/dist/semantic/providers/dbt-provider.d.ts +63 -0
- package/dist/semantic/providers/dbt-provider.d.ts.map +1 -1
- package/dist/semantic/providers/dbt-provider.js +43 -16
- package/dist/semantic/providers/dbt-provider.js.map +1 -1
- package/dist/semantic/semantic-layer.d.ts +11 -0
- package/dist/semantic/semantic-layer.d.ts.map +1 -1
- package/dist/semantic/semantic-layer.js +378 -27
- package/dist/semantic/semantic-layer.js.map +1 -1
- package/dist/semantic/sql-dialect.d.ts +8 -0
- package/dist/semantic/sql-dialect.d.ts.map +1 -1
- package/dist/semantic/sql-dialect.js +22 -0
- package/dist/semantic/sql-dialect.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,265 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Canonical Domain Package discovery.
|
|
3
|
+
*
|
|
4
|
+
* `domain.dql` is the source of truth. The short-lived `domain.dql.yaml`
|
|
5
|
+
* descriptor is accepted only as a compatibility input so v3 projects created
|
|
6
|
+
* before the unified registry can migrate without disappearing from Modeling.
|
|
7
|
+
*/
|
|
8
|
+
import { existsSync, readFileSync, readdirSync, statSync } from 'node:fs';
|
|
9
|
+
import { basename, dirname, extname, join, relative, resolve, sep } from 'node:path';
|
|
10
|
+
import * as yaml from 'js-yaml';
|
|
11
|
+
import { NodeKind } from '../ast/nodes.js';
|
|
12
|
+
import { Parser } from '../parser/index.js';
|
|
13
|
+
import { domainFolderSlug } from './domain-writer.js';
|
|
14
|
+
export function loadDomainPackageRegistry(projectRoot) {
|
|
15
|
+
const root = resolve(projectRoot);
|
|
16
|
+
const domainsRoot = join(root, 'domains');
|
|
17
|
+
const diagnostics = [];
|
|
18
|
+
const legacyByRoot = loadLegacyDescriptors(root, domainsRoot, diagnostics);
|
|
19
|
+
const records = new Map();
|
|
20
|
+
const rootsWithDql = new Set();
|
|
21
|
+
for (const filePath of scanFiles(domainsRoot, '.dql')) {
|
|
22
|
+
const source = safeRead(filePath);
|
|
23
|
+
if (source === undefined || !/(^|\n)\s*domain\s+"/.test(source))
|
|
24
|
+
continue;
|
|
25
|
+
let declarations = [];
|
|
26
|
+
try {
|
|
27
|
+
const ast = new Parser(source, relative(root, filePath)).parse();
|
|
28
|
+
declarations = ast.statements.filter((node) => node.kind === NodeKind.DomainDecl);
|
|
29
|
+
}
|
|
30
|
+
catch (error) {
|
|
31
|
+
diagnostics.push(problem(root, filePath, 'error', `Failed to parse Domain Package: ${message(error)}`));
|
|
32
|
+
continue;
|
|
33
|
+
}
|
|
34
|
+
for (const declaration of declarations) {
|
|
35
|
+
const packageRoot = dirname(filePath);
|
|
36
|
+
rootsWithDql.add(packageRoot);
|
|
37
|
+
const legacy = legacyByRoot.get(packageRoot);
|
|
38
|
+
const id = stableDomainId(declaration, legacy);
|
|
39
|
+
if (!validDomainId(id)) {
|
|
40
|
+
diagnostics.push(problem(root, filePath, 'error', `Domain Package id "${id}" must be a dot-qualified identifier.`));
|
|
41
|
+
continue;
|
|
42
|
+
}
|
|
43
|
+
if (records.has(id)) {
|
|
44
|
+
diagnostics.push(problem(root, filePath, 'error', `Duplicate Domain Package "${id}" also declared in ${records.get(id)?.declarationPath}.`));
|
|
45
|
+
continue;
|
|
46
|
+
}
|
|
47
|
+
const domain = manifestDomain(declaration, id, relative(root, filePath).replace(/\\/g, '/'));
|
|
48
|
+
records.set(id, {
|
|
49
|
+
id,
|
|
50
|
+
name: declaration.name,
|
|
51
|
+
root: packageRoot,
|
|
52
|
+
declarationPath: domain.filePath,
|
|
53
|
+
filePath: domain.filePath,
|
|
54
|
+
legacyYamlPath: legacy ? relative(root, legacy.filePath).replace(/\\/g, '/') : undefined,
|
|
55
|
+
parent: declaration.parent ?? legacy?.parent,
|
|
56
|
+
exports: declaration.exports ?? legacy?.exports ?? [],
|
|
57
|
+
owner: declaration.owner ?? legacy?.owner,
|
|
58
|
+
domain,
|
|
59
|
+
ancestry: [],
|
|
60
|
+
depth: 0,
|
|
61
|
+
});
|
|
62
|
+
if (legacy) {
|
|
63
|
+
const mismatch = (legacy.id && legacy.id !== id)
|
|
64
|
+
|| (legacy.parent && declaration.parent && legacy.parent !== declaration.parent)
|
|
65
|
+
|| (legacy.owner && declaration.owner && legacy.owner !== declaration.owner);
|
|
66
|
+
diagnostics.push(problem(root, legacy.filePath, mismatch ? 'error' : 'warning', mismatch
|
|
67
|
+
? `Legacy domain.dql.yaml conflicts with canonical ${domain.filePath}; consolidate it before compiling.`
|
|
68
|
+
: `Legacy domain.dql.yaml is deprecated; ${domain.filePath} is authoritative.`));
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
// Compatibility for early v3 packages that have not yet gained domain.dql.
|
|
73
|
+
for (const legacy of legacyByRoot.values()) {
|
|
74
|
+
if (rootsWithDql.has(legacy.root))
|
|
75
|
+
continue;
|
|
76
|
+
const id = legacy.id ?? legacyIdFromPath(domainsRoot, legacy.root, legacy.parent);
|
|
77
|
+
if (records.has(id)) {
|
|
78
|
+
diagnostics.push(problem(root, legacy.filePath, 'error', `Duplicate legacy Domain Package "${id}".`));
|
|
79
|
+
continue;
|
|
80
|
+
}
|
|
81
|
+
const name = id.split('.').at(-1) ?? id;
|
|
82
|
+
const filePath = relative(root, legacy.filePath).replace(/\\/g, '/');
|
|
83
|
+
const domain = {
|
|
84
|
+
id,
|
|
85
|
+
name,
|
|
86
|
+
filePath,
|
|
87
|
+
parent: legacy.parent,
|
|
88
|
+
owner: legacy.owner,
|
|
89
|
+
};
|
|
90
|
+
records.set(id, {
|
|
91
|
+
id,
|
|
92
|
+
name,
|
|
93
|
+
root: legacy.root,
|
|
94
|
+
declarationPath: filePath,
|
|
95
|
+
legacyYamlPath: filePath,
|
|
96
|
+
filePath,
|
|
97
|
+
parent: legacy.parent,
|
|
98
|
+
exports: legacy.exports,
|
|
99
|
+
owner: legacy.owner,
|
|
100
|
+
domain,
|
|
101
|
+
ancestry: [],
|
|
102
|
+
depth: 0,
|
|
103
|
+
});
|
|
104
|
+
diagnostics.push(problem(root, legacy.filePath, 'warning', 'Legacy domain.dql.yaml is compatibility-only; migrate this package to domain.dql.'));
|
|
105
|
+
}
|
|
106
|
+
validateHierarchy(root, records, diagnostics);
|
|
107
|
+
validatePackageNesting(root, records, diagnostics);
|
|
108
|
+
const values = () => [...records.values()].sort((a, b) => a.id.localeCompare(b.id));
|
|
109
|
+
return {
|
|
110
|
+
packages: records,
|
|
111
|
+
diagnostics,
|
|
112
|
+
get: (id) => records.get(id),
|
|
113
|
+
values,
|
|
114
|
+
packageForPath: (filePath) => {
|
|
115
|
+
const absolute = resolve(root, filePath);
|
|
116
|
+
return values()
|
|
117
|
+
.filter((pkg) => absolute === pkg.root || absolute.startsWith(`${pkg.root}${sep}`))
|
|
118
|
+
.sort((a, b) => b.root.length - a.root.length)[0];
|
|
119
|
+
},
|
|
120
|
+
descendants: (id) => values().filter((pkg) => pkg.ancestry.includes(id)),
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
function loadLegacyDescriptors(projectRoot, domainsRoot, diagnostics) {
|
|
124
|
+
const output = new Map();
|
|
125
|
+
for (const filePath of scanFiles(domainsRoot, '.yaml').concat(scanFiles(domainsRoot, '.yml'))) {
|
|
126
|
+
if (basename(filePath) !== 'domain.dql.yaml' && basename(filePath) !== 'domain.dql.yml')
|
|
127
|
+
continue;
|
|
128
|
+
try {
|
|
129
|
+
const raw = asRecord(yaml.load(readFileSync(filePath, 'utf8')));
|
|
130
|
+
output.set(dirname(filePath), {
|
|
131
|
+
id: stringValue(raw.id ?? raw.domain),
|
|
132
|
+
parent: stringValue(raw.parent),
|
|
133
|
+
owner: stringValue(raw.owner),
|
|
134
|
+
exports: stringArray(raw.exports),
|
|
135
|
+
filePath,
|
|
136
|
+
root: dirname(filePath),
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
catch (error) {
|
|
140
|
+
diagnostics.push(problem(projectRoot, filePath, 'error', `Failed to parse legacy domain descriptor: ${message(error)}`));
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
return output;
|
|
144
|
+
}
|
|
145
|
+
function validateHierarchy(projectRoot, records, diagnostics) {
|
|
146
|
+
for (const record of records.values()) {
|
|
147
|
+
const ancestry = [];
|
|
148
|
+
const seen = new Set([record.id]);
|
|
149
|
+
let parent = record.parent;
|
|
150
|
+
while (parent) {
|
|
151
|
+
if (seen.has(parent)) {
|
|
152
|
+
diagnostics.push(problem(projectRoot, join(projectRoot, record.declarationPath), 'error', `Domain hierarchy contains a cycle involving "${record.id}".`));
|
|
153
|
+
break;
|
|
154
|
+
}
|
|
155
|
+
seen.add(parent);
|
|
156
|
+
const parentRecord = records.get(parent);
|
|
157
|
+
if (!parentRecord) {
|
|
158
|
+
diagnostics.push(problem(projectRoot, join(projectRoot, record.declarationPath), 'error', `Domain Package "${record.id}" references missing parent "${parent}".`));
|
|
159
|
+
break;
|
|
160
|
+
}
|
|
161
|
+
ancestry.unshift(parent);
|
|
162
|
+
parent = parentRecord.parent;
|
|
163
|
+
}
|
|
164
|
+
record.ancestry = ancestry;
|
|
165
|
+
record.depth = ancestry.length;
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
function validatePackageNesting(projectRoot, records, diagnostics) {
|
|
169
|
+
for (const record of records.values()) {
|
|
170
|
+
if (!record.parent)
|
|
171
|
+
continue;
|
|
172
|
+
const parent = records.get(record.parent);
|
|
173
|
+
if (!parent)
|
|
174
|
+
continue;
|
|
175
|
+
if (!record.root.startsWith(`${parent.root}${sep}`)) {
|
|
176
|
+
diagnostics.push(problem(projectRoot, join(projectRoot, record.declarationPath), 'error', `Domain Package "${record.id}" must be nested beneath parent "${record.parent}".`));
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
function stableDomainId(declaration, legacy) {
|
|
181
|
+
if (declaration.id?.trim())
|
|
182
|
+
return declaration.id.trim();
|
|
183
|
+
if (legacy?.id)
|
|
184
|
+
return legacy.id;
|
|
185
|
+
const local = domainFolderSlug(declaration.name).replace(/-/g, '_');
|
|
186
|
+
return declaration.parent ? `${declaration.parent}.${local}` : local;
|
|
187
|
+
}
|
|
188
|
+
function legacyIdFromPath(domainsRoot, packageRoot, parent) {
|
|
189
|
+
const local = relative(domainsRoot, packageRoot).split(sep).filter(Boolean).map((part) => domainFolderSlug(part).replace(/-/g, '_')).join('.');
|
|
190
|
+
if (parent && !local.startsWith(`${parent}.`))
|
|
191
|
+
return `${parent}.${local.split('.').at(-1)}`;
|
|
192
|
+
return local || 'domain';
|
|
193
|
+
}
|
|
194
|
+
function manifestDomain(declaration, id, filePath) {
|
|
195
|
+
return {
|
|
196
|
+
id,
|
|
197
|
+
name: declaration.name,
|
|
198
|
+
filePath,
|
|
199
|
+
parent: declaration.parent,
|
|
200
|
+
owner: declaration.owner,
|
|
201
|
+
businessOwner: declaration.businessOwner,
|
|
202
|
+
boundedContext: declaration.boundedContext,
|
|
203
|
+
sourceSystems: declaration.sourceSystems,
|
|
204
|
+
primaryTerms: declaration.primaryTerms,
|
|
205
|
+
reviewCadence: declaration.reviewCadence,
|
|
206
|
+
tags: declaration.tags,
|
|
207
|
+
businessOutcome: declaration.businessOutcome,
|
|
208
|
+
description: declaration.description,
|
|
209
|
+
inScope: declaration.inScope,
|
|
210
|
+
outOfScope: declaration.outOfScope,
|
|
211
|
+
dbtGroups: declaration.dbtGroups,
|
|
212
|
+
dbtPaths: declaration.dbtPaths,
|
|
213
|
+
dbtTags: declaration.dbtTags,
|
|
214
|
+
semanticDomains: declaration.semanticDomains,
|
|
215
|
+
semanticTags: declaration.semanticTags,
|
|
216
|
+
exports: declaration.exports,
|
|
217
|
+
};
|
|
218
|
+
}
|
|
219
|
+
function scanFiles(dir, extension) {
|
|
220
|
+
if (!existsSync(dir))
|
|
221
|
+
return [];
|
|
222
|
+
const output = [];
|
|
223
|
+
for (const entry of readdirSync(dir, { withFileTypes: true })) {
|
|
224
|
+
if (entry.name.startsWith('.') || entry.name === 'node_modules')
|
|
225
|
+
continue;
|
|
226
|
+
const path = join(dir, entry.name);
|
|
227
|
+
if (entry.isDirectory())
|
|
228
|
+
output.push(...scanFiles(path, extension));
|
|
229
|
+
else if (entry.isFile() && extname(entry.name) === extension && statSync(path).size <= 1024 * 1024)
|
|
230
|
+
output.push(path);
|
|
231
|
+
}
|
|
232
|
+
return output.sort();
|
|
233
|
+
}
|
|
234
|
+
function safeRead(path) {
|
|
235
|
+
try {
|
|
236
|
+
return readFileSync(path, 'utf8');
|
|
237
|
+
}
|
|
238
|
+
catch {
|
|
239
|
+
return undefined;
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
function problem(projectRoot, filePath, severity, messageText) {
|
|
243
|
+
return {
|
|
244
|
+
kind: 'modeling',
|
|
245
|
+
filePath: relative(projectRoot, filePath).replace(/\\/g, '/'),
|
|
246
|
+
severity,
|
|
247
|
+
message: messageText,
|
|
248
|
+
};
|
|
249
|
+
}
|
|
250
|
+
function validDomainId(value) {
|
|
251
|
+
return /^[A-Za-z0-9][A-Za-z0-9_-]*(?:\.[A-Za-z0-9][A-Za-z0-9_-]*)*$/.test(value);
|
|
252
|
+
}
|
|
253
|
+
function stringValue(value) {
|
|
254
|
+
return typeof value === 'string' && value.trim() ? value.trim() : undefined;
|
|
255
|
+
}
|
|
256
|
+
function stringArray(value) {
|
|
257
|
+
return Array.isArray(value) ? value.filter((item) => typeof item === 'string' && item.trim().length > 0) : [];
|
|
258
|
+
}
|
|
259
|
+
function asRecord(value) {
|
|
260
|
+
return value && typeof value === 'object' && !Array.isArray(value) ? value : {};
|
|
261
|
+
}
|
|
262
|
+
function message(error) {
|
|
263
|
+
return error instanceof Error ? error.message : String(error);
|
|
264
|
+
}
|
|
265
|
+
//# sourceMappingURL=domain-package-registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"domain-package-registry.js","sourceRoot":"","sources":["../../src/manifest/domain-package-registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -18,12 +18,30 @@
|
|
|
18
18
|
/** A domain authored through the writer (spec 17, part B). */
|
|
19
19
|
export interface DomainInput {
|
|
20
20
|
name: string;
|
|
21
|
+
/** Stable dot-qualified package id. Defaults to the normalized name for compatibility. */
|
|
22
|
+
id?: string;
|
|
23
|
+
parent?: string;
|
|
21
24
|
owner?: string;
|
|
25
|
+
businessOwner?: string;
|
|
22
26
|
boundedContext?: string;
|
|
23
27
|
sourceSystems?: string[];
|
|
28
|
+
primaryTerms?: string[];
|
|
29
|
+
tags?: string[];
|
|
30
|
+
businessOutcome?: string;
|
|
24
31
|
description?: string;
|
|
32
|
+
inScope?: string[];
|
|
33
|
+
outOfScope?: string[];
|
|
34
|
+
dbtGroups?: string[];
|
|
35
|
+
dbtPaths?: string[];
|
|
36
|
+
dbtTags?: string[];
|
|
37
|
+
semanticDomains?: string[];
|
|
38
|
+
semanticTags?: string[];
|
|
39
|
+
/** Compatibility entity export ids; prefer structured v3 interfaces for new policy. */
|
|
40
|
+
exports?: string[];
|
|
25
41
|
/** Optional review cadence; defaults to "quarterly" so doctor stays quiet. */
|
|
26
42
|
reviewCadence?: string;
|
|
43
|
+
/** Existing project-relative source path. Used for legacy flat declarations. */
|
|
44
|
+
sourcePath?: string;
|
|
27
45
|
}
|
|
28
46
|
export interface WrittenDomain {
|
|
29
47
|
/** Project-relative path of the written `domain.dql`. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"domain-writer.d.ts","sourceRoot":"","sources":["../../src/manifest/domain-writer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAKH,8DAA8D;AAC9D,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,8EAA8E;IAC9E,aAAa,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"domain-writer.d.ts","sourceRoot":"","sources":["../../src/manifest/domain-writer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAKH,8DAA8D;AAC9D,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,0FAA0F;IAC1F,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,uFAAuF;IACvF,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,8EAA8E;IAC9E,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gFAAgF;IAChF,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,aAAa;IAC5B,yDAAyD;IACzD,IAAI,EAAE,MAAM,CAAC;IACb,6BAA6B;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,wCAAwC;IACxC,IAAI,EAAE,MAAM,CAAC;CACd;AAMD,sEAAsE;AACtE,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAQtD;AAOD;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,CAyBnE;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,GACjB;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAQzD;AAqCD;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,aAAa,CAe9F;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAKxF"}
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
* `description`. `reviewCadence` is included with a sensible default so the
|
|
16
16
|
* doctor's "missing reviewCadence" warning is also satisfied.
|
|
17
17
|
*/
|
|
18
|
-
import { existsSync, mkdirSync, readdirSync, readFileSync, rmSync, writeFileSync } from 'node:fs';
|
|
18
|
+
import { existsSync, mkdirSync, readdirSync, readFileSync, rmSync, statSync, writeFileSync } from 'node:fs';
|
|
19
19
|
import { dirname, join, relative } from 'node:path';
|
|
20
20
|
function escapeString(value) {
|
|
21
21
|
return value.replace(/\\/g, '\\\\').replace(/"/g, '\\"');
|
|
@@ -41,13 +41,31 @@ function stringArrayField(name, values) {
|
|
|
41
41
|
export function renderDomainDeclaration(domain) {
|
|
42
42
|
const reviewCadence = domain.reviewCadence?.trim() || 'quarterly';
|
|
43
43
|
const lines = [`domain "${escapeString(domain.name)}" {`];
|
|
44
|
+
if (domain.id)
|
|
45
|
+
lines.push(` id = "${escapeString(domain.id)}"`);
|
|
46
|
+
if (domain.parent)
|
|
47
|
+
lines.push(` parent = "${escapeString(domain.parent)}"`);
|
|
44
48
|
if (domain.owner)
|
|
45
49
|
lines.push(` owner = "${escapeString(domain.owner)}"`);
|
|
50
|
+
if (domain.businessOwner)
|
|
51
|
+
lines.push(` businessOwner = "${escapeString(domain.businessOwner)}"`);
|
|
46
52
|
if (domain.boundedContext)
|
|
47
53
|
lines.push(` boundedContext = "${escapeString(domain.boundedContext)}"`);
|
|
48
54
|
lines.push(` reviewCadence = "${escapeString(reviewCadence)}"`);
|
|
49
55
|
let body = lines.join('\n');
|
|
50
56
|
body += stringArrayField('sourceSystems', domain.sourceSystems);
|
|
57
|
+
body += stringArrayField('primaryTerms', domain.primaryTerms);
|
|
58
|
+
body += stringArrayField('tags', domain.tags);
|
|
59
|
+
body += stringArrayField('inScope', domain.inScope);
|
|
60
|
+
body += stringArrayField('outOfScope', domain.outOfScope);
|
|
61
|
+
body += stringArrayField('dbtGroups', domain.dbtGroups);
|
|
62
|
+
body += stringArrayField('dbtPaths', domain.dbtPaths);
|
|
63
|
+
body += stringArrayField('dbtTags', domain.dbtTags);
|
|
64
|
+
body += stringArrayField('semanticDomains', domain.semanticDomains);
|
|
65
|
+
body += stringArrayField('semanticTags', domain.semanticTags);
|
|
66
|
+
body += stringArrayField('exports', domain.exports);
|
|
67
|
+
if (domain.businessOutcome)
|
|
68
|
+
body += `\n businessOutcome = "${escapeString(domain.businessOutcome)}"`;
|
|
51
69
|
if (domain.description)
|
|
52
70
|
body += `\n description = "${escapeString(domain.description)}"`;
|
|
53
71
|
body += '\n}\n';
|
|
@@ -63,9 +81,33 @@ export function resolveDomainDeclPath(projectRoot, nameOrSlug) {
|
|
|
63
81
|
const domainDir = join(projectRoot, 'domains', slug);
|
|
64
82
|
// Prefer an existing declaration file (any `*.dql` that declares this domain).
|
|
65
83
|
const existing = findExistingDomainFile(domainDir);
|
|
66
|
-
const
|
|
84
|
+
const flat = findFlatDomainFile(join(projectRoot, 'domains'), nameOrSlug);
|
|
85
|
+
const absPath = existing ?? flat ?? join(domainDir, 'domain.dql');
|
|
67
86
|
return { absPath, relativePath: relative(projectRoot, absPath), slug };
|
|
68
87
|
}
|
|
88
|
+
/** Find a legacy flat `domains/<name>.dql` declaration by declared name. */
|
|
89
|
+
function findFlatDomainFile(domainsRoot, nameOrSlug) {
|
|
90
|
+
if (!existsSync(domainsRoot))
|
|
91
|
+
return undefined;
|
|
92
|
+
const wanted = domainFolderSlug(nameOrSlug);
|
|
93
|
+
try {
|
|
94
|
+
for (const entry of readdirSync(domainsRoot, { withFileTypes: true })) {
|
|
95
|
+
if (!entry.isFile() || !entry.name.endsWith('.dql'))
|
|
96
|
+
continue;
|
|
97
|
+
const file = join(domainsRoot, entry.name);
|
|
98
|
+
if (statSync(file).size > 1024 * 256)
|
|
99
|
+
continue;
|
|
100
|
+
const source = readFileSync(file, 'utf-8');
|
|
101
|
+
const match = source.match(/(^|\n)\s*domain\s+"([^"]+)"/);
|
|
102
|
+
if (match && domainFolderSlug(match[2] ?? '') === wanted)
|
|
103
|
+
return file;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
catch {
|
|
107
|
+
// Best effort: use the canonical nested path when the legacy file cannot be read.
|
|
108
|
+
}
|
|
109
|
+
return undefined;
|
|
110
|
+
}
|
|
69
111
|
/** Find an existing `.dql` file under a domain folder that declares a domain. */
|
|
70
112
|
function findExistingDomainFile(domainDir) {
|
|
71
113
|
if (!existsSync(domainDir))
|
|
@@ -94,7 +136,14 @@ export function writeDomainDeclaration(projectRoot, domain) {
|
|
|
94
136
|
if (!domain.name || !domain.name.trim()) {
|
|
95
137
|
throw new Error('writeDomainDeclaration requires a non-empty domain name.');
|
|
96
138
|
}
|
|
97
|
-
const
|
|
139
|
+
const requestedPath = domain.sourcePath?.replace(/\\/g, '/').replace(/^\/+/, '');
|
|
140
|
+
const safeRequested = requestedPath && requestedPath.startsWith('domains/') && !requestedPath.includes('../')
|
|
141
|
+
? join(projectRoot, requestedPath)
|
|
142
|
+
: undefined;
|
|
143
|
+
const resolved = resolveDomainDeclPath(projectRoot, domain.name);
|
|
144
|
+
const absPath = safeRequested && existsSync(safeRequested) ? safeRequested : resolved.absPath;
|
|
145
|
+
const relativePath = relative(projectRoot, absPath);
|
|
146
|
+
const slug = resolved.slug;
|
|
98
147
|
mkdirSync(dirname(absPath), { recursive: true });
|
|
99
148
|
writeFileSync(absPath, renderDomainDeclaration(domain), 'utf-8');
|
|
100
149
|
return { path: relativePath, absPath, slug };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"domain-writer.js","sourceRoot":"","sources":["../../src/manifest/domain-writer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"domain-writer.js","sourceRoot":"","sources":["../../src/manifest/domain-writer.ts"],"names":[],"mappings":"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"}
|
package/dist/manifest/index.d.ts
CHANGED
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
export { buildManifest, collectInputFiles, loadProjectConfig, resolveDataLexManifestPath, resolveDbtManifestPath, type ManifestBuildOptions, type DbtImportFilters, } from './builder.js';
|
|
2
2
|
export { detectOutputDrift } from './output-drift.js';
|
|
3
|
+
export { loadDbtFirstModeling, siblingDbtArtifact, relationshipValidationProofFingerprint, type DbtFirstModelingLoadResult, } from './dbt-first-modeling.js';
|
|
4
|
+
export { previewModelingChange, applyModelingChange, previewDbtSourcePatch, applyDbtSourcePatch, loadDbtNodeAuthoringDetail, resetDbtArtifactReadCount, dbtArtifactReadCount, type DomainPackageAuthoringInput, type ModelAreaAuthoringInput, type EntityBindingAuthoringInput, type RelationshipAuthoringInput, type ContractAuthoringInput, type DomainExportAuthoringInput, type DomainImportAuthoringInput, type ModelingAuthoringChange, type ModelingSourcePatch, type ModelingChangePreview, type DbtNodeAuthoringDetail, type DbtSourceAuthoringInput, type DbtSourcePatchPreview, } from './dbt-first-authoring.js';
|
|
5
|
+
export { planDataLexMigration, applyDataLexMigration, type DataLexMigrationInput, type DataLexMigrationFile, type DataLexMigrationLoss, type DataLexMigrationAmbiguity, type DataLexMigrationReport, type DataLexMigrationPlan, } from './datalex-migration.js';
|
|
3
6
|
export { writeDomainDeclaration, deleteDomainDeclaration, renderDomainDeclaration, resolveDomainDeclPath, domainFolderSlug, type DomainInput, type WrittenDomain, } from './domain-writer.js';
|
|
7
|
+
export { loadDomainPackageRegistry, type DomainPackageRecord, type DomainPackageRegistryResult, } from './domain-package-registry.js';
|
|
8
|
+
export { discoverDbtDomains, type DiscoverDbtDomainsOptions, type DomainDiscoveryEvidenceKind, type DomainDiscoveryEvidence, type DomainMembershipProposal, type DomainProposal, type UnassignedDbtModel, type RelationshipDraftCandidate, type SkillDraftCandidate, type DomainDiscoveryReport, } from './domain-discovery.js';
|
|
9
|
+
export { ProjectSnapshotService, ProjectSnapshotMismatchError, type ProjectSnapshot, } from './project-snapshot.js';
|
|
4
10
|
export { loadDbtRunState, applyBlockDataState, worseDataState, type DbtRunStateIndex, } from './dbt-freshness.js';
|
|
5
|
-
export type { DQLManifest, ManifestBlock, ManifestDomain, ManifestTerm, ManifestBusinessView, ManifestNotebook, ManifestNotebookCell, ManifestMetric, ManifestDimension, ManifestSource, ManifestLineage, ManifestLineageNode, ManifestLineageEdge, ManifestDbtImport, ManifestDiagnostic, ManifestConflictDetail, ManifestConflictSide, ManifestDriftDetail, ManifestApp, ManifestDashboard, DbtDataState, DbtRunState, } from './types.js';
|
|
11
|
+
export type { DQLManifest, ManifestBlock, ManifestDomain, ManifestTerm, ManifestBusinessView, ManifestNotebook, ManifestNotebookCell, ManifestMetric, ManifestDimension, ManifestSource, ManifestLineage, ManifestLineageNode, ManifestLineageEdge, ManifestDbtImport, ManifestDbtProvenance, ManifestDbtNodeProvenance, ManifestMetricFlowProvenance, ManifestDbtFirstModeling, ManifestDomainPackage, ManifestModelArea, ManifestModelEntity, ManifestModelRelationship, ManifestRelationshipValidationEvidence, ManifestRelationshipCardinality, ManifestFanoutPolicy, ManifestRelationshipOptionality, ManifestRelationshipJoinType, ManifestRelationshipAggregationPolicy, ManifestRelationshipTemporalPolicy, ManifestModelContract, ManifestDomainExport, ManifestDomainImport, ManifestConformanceDeclaration, ManifestModelRule, ManifestDomainRelationshipLineage, ManifestDiagnostic, ManifestConflictDetail, ManifestConflictSide, ManifestDriftDetail, ManifestApp, ManifestDashboard, DbtDataState, DbtRunState, } from './types.js';
|
|
6
12
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/manifest/index.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,aAAa,EACb,iBAAiB,EACjB,iBAAiB,EACjB,0BAA0B,EAC1B,sBAAsB,EACtB,KAAK,oBAAoB,EACzB,KAAK,gBAAgB,GACtB,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EACL,sBAAsB,EACtB,uBAAuB,EACvB,uBAAuB,EACvB,qBAAqB,EACrB,gBAAgB,EAChB,KAAK,WAAW,EAChB,KAAK,aAAa,GACnB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,eAAe,EACf,mBAAmB,EACnB,cAAc,EACd,KAAK,gBAAgB,GACtB,MAAM,oBAAoB,CAAC;AAE5B,YAAY,EACV,WAAW,EACX,aAAa,EACb,cAAc,EACd,YAAY,EACZ,oBAAoB,EACpB,gBAAgB,EAChB,oBAAoB,EACpB,cAAc,EACd,iBAAiB,EACjB,cAAc,EACd,eAAe,EACf,mBAAmB,EACnB,mBAAmB,EACnB,iBAAiB,EACjB,kBAAkB,EAClB,sBAAsB,EACtB,oBAAoB,EACpB,mBAAmB,EACnB,WAAW,EACX,iBAAiB,EACjB,YAAY,EACZ,WAAW,GACZ,MAAM,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/manifest/index.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,aAAa,EACb,iBAAiB,EACjB,iBAAiB,EACjB,0BAA0B,EAC1B,sBAAsB,EACtB,KAAK,oBAAoB,EACzB,KAAK,gBAAgB,GACtB,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EACL,oBAAoB,EACpB,kBAAkB,EAClB,sCAAsC,EACtC,KAAK,0BAA0B,GAChC,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EACnB,qBAAqB,EACrB,mBAAmB,EACnB,0BAA0B,EAC1B,yBAAyB,EACzB,oBAAoB,EACpB,KAAK,2BAA2B,EAChC,KAAK,uBAAuB,EAC5B,KAAK,2BAA2B,EAChC,KAAK,0BAA0B,EAC/B,KAAK,sBAAsB,EAC3B,KAAK,0BAA0B,EAC/B,KAAK,0BAA0B,EAC/B,KAAK,uBAAuB,EAC5B,KAAK,mBAAmB,EACxB,KAAK,qBAAqB,EAC1B,KAAK,sBAAsB,EAC3B,KAAK,uBAAuB,EAC5B,KAAK,qBAAqB,GAC3B,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,oBAAoB,EACpB,qBAAqB,EACrB,KAAK,qBAAqB,EAC1B,KAAK,oBAAoB,EACzB,KAAK,oBAAoB,EACzB,KAAK,yBAAyB,EAC9B,KAAK,sBAAsB,EAC3B,KAAK,oBAAoB,GAC1B,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,sBAAsB,EACtB,uBAAuB,EACvB,uBAAuB,EACvB,qBAAqB,EACrB,gBAAgB,EAChB,KAAK,WAAW,EAChB,KAAK,aAAa,GACnB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,yBAAyB,EACzB,KAAK,mBAAmB,EACxB,KAAK,2BAA2B,GACjC,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACL,kBAAkB,EAClB,KAAK,yBAAyB,EAC9B,KAAK,2BAA2B,EAChC,KAAK,uBAAuB,EAC5B,KAAK,wBAAwB,EAC7B,KAAK,cAAc,EACnB,KAAK,kBAAkB,EACvB,KAAK,0BAA0B,EAC/B,KAAK,mBAAmB,EACxB,KAAK,qBAAqB,GAC3B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,sBAAsB,EACtB,4BAA4B,EAC5B,KAAK,eAAe,GACrB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,eAAe,EACf,mBAAmB,EACnB,cAAc,EACd,KAAK,gBAAgB,GACtB,MAAM,oBAAoB,CAAC;AAE5B,YAAY,EACV,WAAW,EACX,aAAa,EACb,cAAc,EACd,YAAY,EACZ,oBAAoB,EACpB,gBAAgB,EAChB,oBAAoB,EACpB,cAAc,EACd,iBAAiB,EACjB,cAAc,EACd,eAAe,EACf,mBAAmB,EACnB,mBAAmB,EACnB,iBAAiB,EACjB,qBAAqB,EACrB,yBAAyB,EACzB,4BAA4B,EAC5B,wBAAwB,EACxB,qBAAqB,EACrB,iBAAiB,EACjB,mBAAmB,EACnB,yBAAyB,EACzB,sCAAsC,EACtC,+BAA+B,EAC/B,oBAAoB,EACpB,+BAA+B,EAC/B,4BAA4B,EAC5B,qCAAqC,EACrC,kCAAkC,EAClC,qBAAqB,EACrB,oBAAoB,EACpB,oBAAoB,EACpB,8BAA8B,EAC9B,iBAAiB,EACjB,iCAAiC,EACjC,kBAAkB,EAClB,sBAAsB,EACtB,oBAAoB,EACpB,mBAAmB,EACnB,WAAW,EACX,iBAAiB,EACjB,YAAY,EACZ,WAAW,GACZ,MAAM,YAAY,CAAC"}
|
package/dist/manifest/index.js
CHANGED
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
// Manifest — DQL project compilation artifact
|
|
2
2
|
export { buildManifest, collectInputFiles, loadProjectConfig, resolveDataLexManifestPath, resolveDbtManifestPath, } from './builder.js';
|
|
3
3
|
export { detectOutputDrift } from './output-drift.js';
|
|
4
|
+
export { loadDbtFirstModeling, siblingDbtArtifact, relationshipValidationProofFingerprint, } from './dbt-first-modeling.js';
|
|
5
|
+
export { previewModelingChange, applyModelingChange, previewDbtSourcePatch, applyDbtSourcePatch, loadDbtNodeAuthoringDetail, resetDbtArtifactReadCount, dbtArtifactReadCount, } from './dbt-first-authoring.js';
|
|
6
|
+
export { planDataLexMigration, applyDataLexMigration, } from './datalex-migration.js';
|
|
4
7
|
export { writeDomainDeclaration, deleteDomainDeclaration, renderDomainDeclaration, resolveDomainDeclPath, domainFolderSlug, } from './domain-writer.js';
|
|
8
|
+
export { loadDomainPackageRegistry, } from './domain-package-registry.js';
|
|
9
|
+
export { discoverDbtDomains, } from './domain-discovery.js';
|
|
10
|
+
export { ProjectSnapshotService, ProjectSnapshotMismatchError, } from './project-snapshot.js';
|
|
5
11
|
export { loadDbtRunState, applyBlockDataState, worseDataState, } from './dbt-freshness.js';
|
|
6
12
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/manifest/index.ts"],"names":[],"mappings":"AAAA,8CAA8C;AAE9C,OAAO,EACL,aAAa,EACb,iBAAiB,EACjB,iBAAiB,EACjB,0BAA0B,EAC1B,sBAAsB,GAGvB,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EACL,sBAAsB,EACtB,uBAAuB,EACvB,uBAAuB,EACvB,qBAAqB,EACrB,gBAAgB,GAGjB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,eAAe,EACf,mBAAmB,EACnB,cAAc,GAEf,MAAM,oBAAoB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/manifest/index.ts"],"names":[],"mappings":"AAAA,8CAA8C;AAE9C,OAAO,EACL,aAAa,EACb,iBAAiB,EACjB,iBAAiB,EACjB,0BAA0B,EAC1B,sBAAsB,GAGvB,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EACL,oBAAoB,EACpB,kBAAkB,EAClB,sCAAsC,GAEvC,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EACnB,qBAAqB,EACrB,mBAAmB,EACnB,0BAA0B,EAC1B,yBAAyB,EACzB,oBAAoB,GAcrB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,oBAAoB,EACpB,qBAAqB,GAOtB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,sBAAsB,EACtB,uBAAuB,EACvB,uBAAuB,EACvB,qBAAqB,EACrB,gBAAgB,GAGjB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,yBAAyB,GAG1B,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACL,kBAAkB,GAUnB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,sBAAsB,EACtB,4BAA4B,GAE7B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,eAAe,EACf,mBAAmB,EACnB,cAAc,GAEf,MAAM,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Atomic, immutable project snapshots for long-running runtime operations.
|
|
3
|
+
*
|
|
4
|
+
* A candidate is built completely before it replaces the current snapshot.
|
|
5
|
+
* Failed candidates never expose partially-built state; callers may continue to
|
|
6
|
+
* read the last good snapshot with `stale: true` and an attached failure.
|
|
7
|
+
*
|
|
8
|
+
* Acceptance: CTX-002, PERF-001.
|
|
9
|
+
*/
|
|
10
|
+
export interface ProjectSnapshot<T> {
|
|
11
|
+
readonly snapshotId: string;
|
|
12
|
+
readonly sourceVersion: string;
|
|
13
|
+
readonly value: T;
|
|
14
|
+
readonly stale: boolean;
|
|
15
|
+
readonly error?: string;
|
|
16
|
+
}
|
|
17
|
+
export declare class ProjectSnapshotMismatchError extends Error {
|
|
18
|
+
readonly expectedSnapshotId: string;
|
|
19
|
+
readonly currentSnapshotId: string;
|
|
20
|
+
readonly code = "PROJECT_SNAPSHOT_MISMATCH";
|
|
21
|
+
constructor(expectedSnapshotId: string, currentSnapshotId: string);
|
|
22
|
+
}
|
|
23
|
+
export declare class ProjectSnapshotService<T> {
|
|
24
|
+
#private;
|
|
25
|
+
current(): ProjectSnapshot<T> | null;
|
|
26
|
+
invalidate(): void;
|
|
27
|
+
refresh(sourceVersion: string, buildCandidate: () => T): ProjectSnapshot<T>;
|
|
28
|
+
assertCurrent(snapshotId: string): void;
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=project-snapshot.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project-snapshot.d.ts","sourceRoot":"","sources":["../../src/manifest/project-snapshot.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,MAAM,WAAW,eAAe,CAAC,CAAC;IAChC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;IAClB,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,qBAAa,4BAA6B,SAAQ,KAAK;IAGzC,QAAQ,CAAC,kBAAkB,EAAE,MAAM;IAAE,QAAQ,CAAC,iBAAiB,EAAE,MAAM;IAFnF,QAAQ,CAAC,IAAI,+BAA+B;gBAEvB,kBAAkB,EAAE,MAAM,EAAW,iBAAiB,EAAE,MAAM;CAIpF;AAED,qBAAa,sBAAsB,CAAC,CAAC;;IAInC,OAAO,IAAI,eAAe,CAAC,CAAC,CAAC,GAAG,IAAI;IAIpC,UAAU,IAAI,IAAI;IAIlB,OAAO,CAAC,aAAa,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC;IA8B3E,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;CAMxC"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Atomic, immutable project snapshots for long-running runtime operations.
|
|
3
|
+
*
|
|
4
|
+
* A candidate is built completely before it replaces the current snapshot.
|
|
5
|
+
* Failed candidates never expose partially-built state; callers may continue to
|
|
6
|
+
* read the last good snapshot with `stale: true` and an attached failure.
|
|
7
|
+
*
|
|
8
|
+
* Acceptance: CTX-002, PERF-001.
|
|
9
|
+
*/
|
|
10
|
+
export class ProjectSnapshotMismatchError extends Error {
|
|
11
|
+
expectedSnapshotId;
|
|
12
|
+
currentSnapshotId;
|
|
13
|
+
code = 'PROJECT_SNAPSHOT_MISMATCH';
|
|
14
|
+
constructor(expectedSnapshotId, currentSnapshotId) {
|
|
15
|
+
super(`Project snapshot changed during the operation (expected ${expectedSnapshotId}, current ${currentSnapshotId}). Retry against the current snapshot.`);
|
|
16
|
+
this.expectedSnapshotId = expectedSnapshotId;
|
|
17
|
+
this.currentSnapshotId = currentSnapshotId;
|
|
18
|
+
this.name = 'ProjectSnapshotMismatchError';
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
export class ProjectSnapshotService {
|
|
22
|
+
#current = null;
|
|
23
|
+
#invalidated = false;
|
|
24
|
+
current() {
|
|
25
|
+
return this.#current;
|
|
26
|
+
}
|
|
27
|
+
invalidate() {
|
|
28
|
+
this.#invalidated = true;
|
|
29
|
+
}
|
|
30
|
+
refresh(sourceVersion, buildCandidate) {
|
|
31
|
+
if (!this.#invalidated && this.#current?.sourceVersion === sourceVersion)
|
|
32
|
+
return this.#current;
|
|
33
|
+
try {
|
|
34
|
+
// Do not mutate #current until the candidate is complete. `buildCandidate`
|
|
35
|
+
// may safely call current() and will observe the prior coherent snapshot.
|
|
36
|
+
const value = buildCandidate();
|
|
37
|
+
const candidate = Object.freeze({
|
|
38
|
+
snapshotId: sourceVersion,
|
|
39
|
+
sourceVersion,
|
|
40
|
+
value,
|
|
41
|
+
stale: false,
|
|
42
|
+
});
|
|
43
|
+
this.#current = candidate;
|
|
44
|
+
this.#invalidated = false;
|
|
45
|
+
return candidate;
|
|
46
|
+
}
|
|
47
|
+
catch (error) {
|
|
48
|
+
if (!this.#current)
|
|
49
|
+
throw error;
|
|
50
|
+
// Preserve the last good value and identity. The wrapper is new and
|
|
51
|
+
// immutable so no reader can observe a half-updated snapshot.
|
|
52
|
+
this.#current = Object.freeze({
|
|
53
|
+
...this.#current,
|
|
54
|
+
stale: true,
|
|
55
|
+
error: error instanceof Error ? error.message : String(error),
|
|
56
|
+
});
|
|
57
|
+
this.#invalidated = true;
|
|
58
|
+
return this.#current;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
assertCurrent(snapshotId) {
|
|
62
|
+
const current = this.#current;
|
|
63
|
+
if (!current || current.snapshotId !== snapshotId || current.stale) {
|
|
64
|
+
throw new ProjectSnapshotMismatchError(snapshotId, current?.snapshotId ?? 'none');
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=project-snapshot.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project-snapshot.js","sourceRoot":"","sources":["../../src/manifest/project-snapshot.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAUH,MAAM,OAAO,4BAA6B,SAAQ,KAAK;IAGhC;IAAqC;IAFjD,IAAI,GAAG,2BAA2B,CAAC;IAE5C,YAAqB,kBAA0B,EAAW,iBAAyB;QACjF,KAAK,CAAC,2DAA2D,kBAAkB,aAAa,iBAAiB,wCAAwC,CAAC,CAAC;QADxI,uBAAkB,GAAlB,kBAAkB,CAAQ;QAAW,sBAAiB,GAAjB,iBAAiB,CAAQ;QAEjF,IAAI,CAAC,IAAI,GAAG,8BAA8B,CAAC;IAC7C,CAAC;CACF;AAED,MAAM,OAAO,sBAAsB;IACjC,QAAQ,GAA8B,IAAI,CAAC;IAC3C,YAAY,GAAG,KAAK,CAAC;IAErB,OAAO;QACL,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAED,UAAU;QACR,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;IAC3B,CAAC;IAED,OAAO,CAAC,aAAqB,EAAE,cAAuB;QACpD,IAAI,CAAC,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,QAAQ,EAAE,aAAa,KAAK,aAAa;YAAE,OAAO,IAAI,CAAC,QAAQ,CAAC;QAE/F,IAAI,CAAC;YACH,2EAA2E;YAC3E,0EAA0E;YAC1E,MAAM,KAAK,GAAG,cAAc,EAAE,CAAC;YAC/B,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC;gBAC9B,UAAU,EAAE,aAAa;gBACzB,aAAa;gBACb,KAAK;gBACL,KAAK,EAAE,KAAK;aACb,CAA8B,CAAC;YAChC,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC;YAC1B,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;YAC1B,OAAO,SAAS,CAAC;QACnB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,IAAI,CAAC,QAAQ;gBAAE,MAAM,KAAK,CAAC;YAChC,oEAAoE;YACpE,8DAA8D;YAC9D,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC;gBAC5B,GAAG,IAAI,CAAC,QAAQ;gBAChB,KAAK,EAAE,IAAI;gBACX,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;aAC9D,CAAC,CAAC;YACH,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;YACzB,OAAO,IAAI,CAAC,QAAQ,CAAC;QACvB,CAAC;IACH,CAAC;IAED,aAAa,CAAC,UAAkB;QAC9B,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC9B,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,UAAU,KAAK,UAAU,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YACnE,MAAM,IAAI,4BAA4B,CAAC,UAAU,EAAE,OAAO,EAAE,UAAU,IAAI,MAAM,CAAC,CAAC;QACpF,CAAC;IACH,CAAC;CACF"}
|