@duckcodeailabs/dql-core 1.4.4 → 1.5.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.
- package/dist/apps/app-document.d.ts +21 -0
- package/dist/apps/app-document.d.ts.map +1 -1
- package/dist/apps/app-document.js +71 -0
- package/dist/apps/app-document.js.map +1 -1
- package/dist/apps/dashboard-document.d.ts +24 -2
- package/dist/apps/dashboard-document.d.ts.map +1 -1
- package/dist/apps/dashboard-document.js +45 -4
- package/dist/apps/dashboard-document.js.map +1 -1
- package/dist/apps/index.d.ts +1 -1
- package/dist/apps/index.d.ts.map +1 -1
- package/dist/apps/index.js.map +1 -1
- package/dist/ast/nodes.d.ts +7 -0
- package/dist/ast/nodes.d.ts.map +1 -1
- package/dist/format/diff.d.ts.map +1 -1
- package/dist/format/diff.js +6 -0
- package/dist/format/diff.js.map +1 -1
- package/dist/formatter/formatter.js +14 -0
- package/dist/formatter/formatter.js.map +1 -1
- package/dist/lineage/builder.d.ts +1 -0
- package/dist/lineage/builder.d.ts.map +1 -1
- package/dist/lineage/builder.js +3 -2
- package/dist/lineage/builder.js.map +1 -1
- package/dist/lineage/lineage-graph.d.ts +1 -1
- package/dist/lineage/lineage-graph.d.ts.map +1 -1
- package/dist/lineage/lineage-graph.js +1 -0
- package/dist/lineage/lineage-graph.js.map +1 -1
- package/dist/lineage/query.d.ts.map +1 -1
- package/dist/lineage/query.js +1 -0
- package/dist/lineage/query.js.map +1 -1
- package/dist/manifest/builder.js +60 -0
- package/dist/manifest/builder.js.map +1 -1
- package/dist/manifest/types.d.ts +35 -0
- package/dist/manifest/types.d.ts.map +1 -1
- package/dist/parser/parser.d.ts.map +1 -1
- package/dist/parser/parser.js +54 -5
- package/dist/parser/parser.js.map +1 -1
- package/dist/semantic/yaml-loader.d.ts.map +1 -1
- package/dist/semantic/yaml-loader.js +42 -14
- package/dist/semantic/yaml-loader.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"yaml-loader.d.ts","sourceRoot":"","sources":["../../src/semantic/yaml-loader.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,EACL,aAAa,EAOd,MAAM,qBAAqB,CAAC;AAE7B;;;;;;;;;;;GAWG;AACH,wBAAgB,wBAAwB,CAAC,gBAAgB,EAAE,MAAM,GAAG,aAAa,CA6BhF;AAED;;;GAGG;AACH,wBAAgB,2BAA2B,CACzC,KAAK,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,GAC9C,aAAa,
|
|
1
|
+
{"version":3,"file":"yaml-loader.d.ts","sourceRoot":"","sources":["../../src/semantic/yaml-loader.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,EACL,aAAa,EAOd,MAAM,qBAAqB,CAAC;AAE7B;;;;;;;;;;;GAWG;AACH,wBAAgB,wBAAwB,CAAC,gBAAgB,EAAE,MAAM,GAAG,aAAa,CA6BhF;AAED;;;GAGG;AACH,wBAAgB,2BAA2B,CACzC,KAAK,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,GAC9C,aAAa,CAwCf"}
|
|
@@ -22,14 +22,14 @@ import { SemanticLayer, parseMetricDefinition, parseDimensionDefinition, parseHi
|
|
|
22
22
|
export function loadSemanticLayerFromDir(semanticLayerDir) {
|
|
23
23
|
const layer = new SemanticLayer();
|
|
24
24
|
const subdirs = [
|
|
25
|
-
{ folder: 'metrics', loader: (raw) =>
|
|
26
|
-
{ folder: 'dimensions', loader: (raw) =>
|
|
27
|
-
{ folder: 'hierarchies', loader: (raw) =>
|
|
28
|
-
{ folder: 'cubes', loader: (raw) =>
|
|
29
|
-
{ folder: 'segments', loader: (raw) =>
|
|
30
|
-
{ folder: 'pre_aggregations', loader: (raw) =>
|
|
25
|
+
{ folder: 'metrics', keys: ['metrics'], loader: (raw) => addIfNamed(parseMetricDefinition(raw), (item) => layer.addMetric(item)) },
|
|
26
|
+
{ folder: 'dimensions', keys: ['dimensions'], loader: (raw) => addIfNamed(parseDimensionDefinition(raw), (item) => layer.addDimension(item)) },
|
|
27
|
+
{ folder: 'hierarchies', keys: ['hierarchies'], loader: (raw) => addIfNamed(parseHierarchyDefinition(raw), (item) => layer.addHierarchy(item)) },
|
|
28
|
+
{ folder: 'cubes', keys: ['cubes'], loader: (raw) => addIfNamed(parseCubeDefinition(raw), (item) => layer.addCube(item)) },
|
|
29
|
+
{ folder: 'segments', keys: ['segments'], loader: (raw) => addIfNamed(parseSegmentDefinition(raw), (item) => layer.addSegment(item)) },
|
|
30
|
+
{ folder: 'pre_aggregations', keys: ['pre_aggregations', 'preAggregations'], loader: (raw) => addIfNamed(parsePreAggregationDefinition(raw), (item) => layer.addPreAggregation(item)) },
|
|
31
31
|
];
|
|
32
|
-
for (const { folder, loader } of subdirs) {
|
|
32
|
+
for (const { folder, keys, loader } of subdirs) {
|
|
33
33
|
const dir = join(semanticLayerDir, folder);
|
|
34
34
|
if (!existsSync(dir))
|
|
35
35
|
continue;
|
|
@@ -38,7 +38,8 @@ export function loadSemanticLayerFromDir(semanticLayerDir) {
|
|
|
38
38
|
const content = readFileSync(filePath, 'utf-8');
|
|
39
39
|
const raw = yaml.load(content);
|
|
40
40
|
if (raw && typeof raw === 'object') {
|
|
41
|
-
|
|
41
|
+
for (const item of expandDefinitions(raw, keys))
|
|
42
|
+
loader(item);
|
|
42
43
|
}
|
|
43
44
|
}
|
|
44
45
|
catch {
|
|
@@ -61,22 +62,34 @@ export function loadSemanticLayerFromConfig(files) {
|
|
|
61
62
|
continue;
|
|
62
63
|
const pathLower = file.path.toLowerCase();
|
|
63
64
|
if (pathLower.includes('/metrics/') || pathLower.includes('\\metrics\\')) {
|
|
64
|
-
|
|
65
|
+
for (const item of expandDefinitions(raw, ['metrics'])) {
|
|
66
|
+
addIfNamed(parseMetricDefinition(item), (parsed) => layer.addMetric(parsed));
|
|
67
|
+
}
|
|
65
68
|
}
|
|
66
69
|
else if (pathLower.includes('/dimensions/') || pathLower.includes('\\dimensions\\')) {
|
|
67
|
-
|
|
70
|
+
for (const item of expandDefinitions(raw, ['dimensions'])) {
|
|
71
|
+
addIfNamed(parseDimensionDefinition(item), (parsed) => layer.addDimension(parsed));
|
|
72
|
+
}
|
|
68
73
|
}
|
|
69
74
|
else if (pathLower.includes('/hierarchies/') || pathLower.includes('\\hierarchies\\')) {
|
|
70
|
-
|
|
75
|
+
for (const item of expandDefinitions(raw, ['hierarchies'])) {
|
|
76
|
+
addIfNamed(parseHierarchyDefinition(item), (parsed) => layer.addHierarchy(parsed));
|
|
77
|
+
}
|
|
71
78
|
}
|
|
72
79
|
else if (pathLower.includes('/cubes/') || pathLower.includes('\\cubes\\')) {
|
|
73
|
-
|
|
80
|
+
for (const item of expandDefinitions(raw, ['cubes'])) {
|
|
81
|
+
addIfNamed(parseCubeDefinition(item), (parsed) => layer.addCube(parsed));
|
|
82
|
+
}
|
|
74
83
|
}
|
|
75
84
|
else if (pathLower.includes('/segments/') || pathLower.includes('\\segments\\')) {
|
|
76
|
-
|
|
85
|
+
for (const item of expandDefinitions(raw, ['segments'])) {
|
|
86
|
+
addIfNamed(parseSegmentDefinition(item), (parsed) => layer.addSegment(parsed));
|
|
87
|
+
}
|
|
77
88
|
}
|
|
78
89
|
else if (pathLower.includes('/pre_aggregations/') || pathLower.includes('\\pre_aggregations\\')) {
|
|
79
|
-
|
|
90
|
+
for (const item of expandDefinitions(raw, ['pre_aggregations', 'preAggregations'])) {
|
|
91
|
+
addIfNamed(parsePreAggregationDefinition(item), (parsed) => layer.addPreAggregation(parsed));
|
|
92
|
+
}
|
|
80
93
|
}
|
|
81
94
|
}
|
|
82
95
|
catch {
|
|
@@ -85,6 +98,21 @@ export function loadSemanticLayerFromConfig(files) {
|
|
|
85
98
|
}
|
|
86
99
|
return layer;
|
|
87
100
|
}
|
|
101
|
+
function expandDefinitions(raw, collectionKeys) {
|
|
102
|
+
for (const key of collectionKeys) {
|
|
103
|
+
const collection = raw[key];
|
|
104
|
+
if (Array.isArray(collection)) {
|
|
105
|
+
return collection.filter((item) => Boolean(item && typeof item === 'object' && !Array.isArray(item)));
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
if (typeof raw.name === 'string' && raw.name.trim().length > 0)
|
|
109
|
+
return [raw];
|
|
110
|
+
return [];
|
|
111
|
+
}
|
|
112
|
+
function addIfNamed(item, add) {
|
|
113
|
+
if (item.name.trim().length > 0)
|
|
114
|
+
add(item);
|
|
115
|
+
}
|
|
88
116
|
function collectYamlFiles(dir) {
|
|
89
117
|
const results = [];
|
|
90
118
|
for (const entry of readdirSync(dir)) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"yaml-loader.js","sourceRoot":"","sources":["../../src/semantic/yaml-loader.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC1E,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,KAAK,IAAI,MAAM,SAAS,CAAC;AAChC,OAAO,EACL,aAAa,EACb,qBAAqB,EACrB,wBAAwB,EACxB,wBAAwB,EACxB,mBAAmB,EACnB,sBAAsB,EACtB,6BAA6B,GAC9B,MAAM,qBAAqB,CAAC;AAE7B;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,wBAAwB,CAAC,gBAAwB;IAC/D,MAAM,KAAK,GAAG,IAAI,aAAa,EAAE,CAAC;IAElC,MAAM,OAAO,
|
|
1
|
+
{"version":3,"file":"yaml-loader.js","sourceRoot":"","sources":["../../src/semantic/yaml-loader.ts"],"names":[],"mappings":"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"}
|