@milaboratories/pl-model-common 1.41.2 → 1.43.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/drivers/index.d.ts +4 -4
- package/dist/drivers/ls.d.ts +1 -1
- package/dist/drivers/pframe/driver.d.ts +2 -2
- package/dist/drivers/pframe/index.d.ts +4 -4
- package/dist/drivers/pframe/pframe.d.ts +1 -1
- package/dist/drivers/pframe/query/index.d.ts +2 -2
- package/dist/drivers/pframe/query/query_common.d.ts +229 -22
- package/dist/drivers/pframe/query/query_common.d.ts.map +1 -1
- package/dist/drivers/pframe/query/query_data.d.ts +9 -7
- package/dist/drivers/pframe/query/query_data.d.ts.map +1 -1
- package/dist/drivers/pframe/query/query_spec.d.ts +9 -7
- package/dist/drivers/pframe/query/query_spec.d.ts.map +1 -1
- package/dist/drivers/pframe/query/utils.cjs +12 -3
- package/dist/drivers/pframe/query/utils.cjs.map +1 -1
- package/dist/drivers/pframe/query/utils.d.ts.map +1 -1
- package/dist/drivers/pframe/query/utils.js +12 -3
- package/dist/drivers/pframe/query/utils.js.map +1 -1
- package/dist/drivers/pframe/spec_driver.d.ts +11 -1
- package/dist/drivers/pframe/spec_driver.d.ts.map +1 -1
- package/dist/drivers/pframe/table_calculate.d.ts +1 -1
- package/dist/index.d.ts +5 -5
- package/dist/services/service_declarations.cjs +4 -2
- package/dist/services/service_declarations.cjs.map +1 -1
- package/dist/services/service_declarations.js +4 -2
- package/dist/services/service_declarations.js.map +1 -1
- package/package.json +4 -4
- package/src/drivers/pframe/query/query_common.ts +256 -27
- package/src/drivers/pframe/query/query_data.ts +33 -12
- package/src/drivers/pframe/query/query_spec.ts +29 -11
- package/src/drivers/pframe/query/utils.test.ts +24 -8
- package/src/drivers/pframe/query/utils.ts +21 -3
- package/src/drivers/pframe/spec_driver.ts +12 -1
- package/src/services/service_declarations.ts +2 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
const require_util = require("../../../util.cjs");
|
|
2
2
|
const require_json = require("../../../json.cjs");
|
|
3
3
|
//#region src/drivers/pframe/query/utils.ts
|
|
4
|
-
const
|
|
4
|
+
const BOOLEAN_TYPES = new Set([
|
|
5
5
|
"numericComparison",
|
|
6
6
|
"stringEquals",
|
|
7
7
|
"stringContains",
|
|
@@ -14,7 +14,7 @@ const booleanTypesSet = new Set([
|
|
|
14
14
|
"isIn"
|
|
15
15
|
]);
|
|
16
16
|
function isBooleanExpression(expr) {
|
|
17
|
-
return
|
|
17
|
+
return BOOLEAN_TYPES.has(expr.type);
|
|
18
18
|
}
|
|
19
19
|
/**
|
|
20
20
|
* Recursively traverses a SpecQuery tree bottom-up, applying visitor callbacks.
|
|
@@ -78,6 +78,7 @@ function traverseQuerySpec(query, visitor) {
|
|
|
78
78
|
case "filter":
|
|
79
79
|
case "sort":
|
|
80
80
|
case "sliceAxes":
|
|
81
|
+
case "transformColumns":
|
|
81
82
|
result = {
|
|
82
83
|
...query,
|
|
83
84
|
input: traverseQuerySpec(query.input, visitor)
|
|
@@ -107,7 +108,7 @@ function sortSpecQuery(query) {
|
|
|
107
108
|
switch (node.type) {
|
|
108
109
|
case "sparseToDenseColumn": return {
|
|
109
110
|
...node,
|
|
110
|
-
|
|
111
|
+
axes: node.axes.toSorted((a, b) => require_json.canonicalizeJson(a).localeCompare(require_json.canonicalizeJson(b)))
|
|
111
112
|
};
|
|
112
113
|
case "innerJoin":
|
|
113
114
|
case "fullJoin": {
|
|
@@ -195,6 +196,14 @@ function cmpQuerySpec(lhs, rhs) {
|
|
|
195
196
|
case "sliceAxes": return cmpQuerySpec(lhs.input, rhs.input);
|
|
196
197
|
case "sort": return cmpQuerySpec(lhs.input, rhs.input);
|
|
197
198
|
case "filter": return cmpQuerySpec(lhs.input, rhs.input);
|
|
199
|
+
case "transformColumns": {
|
|
200
|
+
const rhsTc = rhs;
|
|
201
|
+
const cmp = cmpQuerySpec(lhs.input, rhsTc.input);
|
|
202
|
+
if (cmp !== 0) return cmp;
|
|
203
|
+
const modeCmp = lhs.mode.localeCompare(rhsTc.mode);
|
|
204
|
+
if (modeCmp !== 0) return modeCmp;
|
|
205
|
+
return require_json.canonicalizeJson(lhs.columns).localeCompare(require_json.canonicalizeJson(rhsTc.columns));
|
|
206
|
+
}
|
|
198
207
|
default: require_util.assertNever(lhs);
|
|
199
208
|
}
|
|
200
209
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.cjs","names":["canonicalizeJson"],"sources":["../../../../src/drivers/pframe/query/utils.ts"],"sourcesContent":["import { canonicalizeJson } from \"../../../json\";\nimport { assertNever } from \"../../../util\";\nimport type {\n SpecQueryBooleanExpression,\n SpecQueryExpression,\n SpecQuery,\n SpecQueryJoinEntry,\n} from \"./query_spec\";\n\nconst booleanTypesSet = new Set<SpecQueryBooleanExpression[\"type\"]>([\n \"numericComparison\",\n \"stringEquals\",\n \"stringContains\",\n \"stringContainsFuzzy\",\n \"stringRegex\",\n \"isNull\",\n \"not\",\n \"and\",\n \"or\",\n \"isIn\",\n]);\n\nexport function isBooleanExpression(expr: SpecQueryExpression): expr is SpecQueryBooleanExpression {\n return booleanTypesSet.has(\n // @ts-expect-error -- TypeScript doesn't understand the discriminated union here, but we do at runtime\n expr.type,\n );\n}\n\n/**\n * Recursively traverses a SpecQuery tree bottom-up, applying visitor callbacks.\n *\n * Traversal order:\n * 1. Recurse into child queries\n * 2. Apply `column` to transform column references in leaf nodes\n * 3. Apply `joinEntry` to each join entry (with inner query already traversed)\n * 4. Assemble node with transformed children\n * 5. Apply `node` to the assembled node\n */\nexport function traverseQuerySpec<C1, C2>(\n query: SpecQuery<C1>,\n visitor: {\n /** Transform column references in leaf nodes (column, sparseToDenseColumn). */\n column: (c: C1) => C2;\n /** Visit a node after its children have been traversed. */\n node?: (node: SpecQuery<C2>) => SpecQuery<C2>;\n /** Visit a join entry after its inner query has been traversed. */\n joinEntry?: (entry: SpecQueryJoinEntry<C2>) => SpecQueryJoinEntry<C2>;\n },\n): SpecQuery<C2> {\n const traverseEntry = (entry: SpecQueryJoinEntry<C1>): SpecQueryJoinEntry<C2> => {\n const traversed: SpecQueryJoinEntry<C2> = {\n ...entry,\n entry: traverseQuerySpec(entry.entry, visitor),\n };\n return visitor.joinEntry ? visitor.joinEntry(traversed) : traversed;\n };\n\n let result: SpecQuery<C2>;\n switch (query.type) {\n case \"column\":\n result = { type: \"column\", column: visitor.column(query.column) };\n break;\n case \"sparseToDenseColumn\":\n result = { ...query, column: visitor.column(query.column) };\n break;\n case \"inlineColumn\":\n result = query;\n break;\n case \"innerJoin\":\n case \"fullJoin\":\n result = { ...query, entries: query.entries.map(traverseEntry) };\n break;\n case \"outerJoin\":\n result = {\n ...query,\n primary: traverseEntry(query.primary),\n secondary: query.secondary.map(traverseEntry),\n };\n break;\n case \"linkerJoin\":\n result = {\n ...query,\n linker: { ...query.linker, column: visitor.column(query.linker.column) },\n secondary: query.secondary.map(traverseEntry),\n };\n break;\n case \"filter\":\n case \"sort\":\n case \"sliceAxes\":\n result = { ...query, input: traverseQuerySpec(query.input, visitor) };\n break;\n default:\n assertNever(query);\n }\n\n return visitor.node ? visitor.node(result) : result;\n}\n\n/** Recursively maps all column references in a SpecQuery tree. */\nexport function mapSpecQueryColumns<C1, C2>(\n query: SpecQuery<C1>,\n cb: (c: C1) => C2,\n): SpecQuery<C2> {\n return traverseQuerySpec(query, { column: cb });\n}\n\n/** Collects all column references from a SpecQuery tree. */\nexport function collectSpecQueryColumns<C>(query: SpecQuery<C>): C[] {\n const result: C[] = [];\n traverseQuerySpec(query, {\n column: (c: C) => {\n result.push(c);\n return c;\n },\n });\n return result;\n}\n\nexport function sortSpecQuery(query: SpecQuery): SpecQuery {\n return traverseQuerySpec(query, {\n column: (c) => c,\n node: (node) => {\n switch (node.type) {\n case \"sparseToDenseColumn\":\n return { ...node, axesIndices: node.axesIndices.toSorted((a, b) => a - b) };\n case \"innerJoin\":\n case \"fullJoin\": {\n const sorted = [...node.entries].sort(cmpQueryJoinEntrySpec);\n return { ...node, entries: sorted };\n }\n case \"outerJoin\": {\n const sorted = [...node.secondary].sort(cmpQueryJoinEntrySpec);\n return { ...node, secondary: sorted };\n }\n case \"linkerJoin\": {\n const sorted = [...node.secondary].sort(cmpQueryJoinEntrySpec);\n return { ...node, secondary: sorted };\n }\n case \"sliceAxes\":\n return {\n ...node,\n axisFilters: node.axisFilters.toSorted((a, b) => {\n const ak = canonicalizeJson(a.axisSelector);\n const bk = canonicalizeJson(b.axisSelector);\n return ak < bk ? -1 : ak === bk ? 0 : 1;\n }),\n };\n default:\n return node;\n }\n },\n joinEntry: (entry) => {\n // Preserve absence of `qualifications` (absent == `[]`) so canonical\n // output is stable across both input forms.\n if (entry.qualifications === undefined || entry.qualifications.length === 0) {\n return entry;\n }\n return {\n ...entry,\n qualifications: entry.qualifications.toSorted((a, b) => {\n const ak = canonicalizeJson(a.axis);\n const bk = canonicalizeJson(b.axis);\n return ak < bk ? -1 : ak === bk ? 0 : 1;\n }),\n };\n },\n });\n}\n\nfunction cmpQuerySpec(lhs: SpecQuery, rhs: SpecQuery): number {\n if (lhs.type !== rhs.type) {\n return lhs.type < rhs.type ? -1 : 1;\n }\n switch (lhs.type) {\n case \"column\":\n return lhs.column < (rhs as typeof lhs).column\n ? -1\n : lhs.column === (rhs as typeof lhs).column\n ? 0\n : 1;\n case \"inlineColumn\":\n return lhs.spec.columnId < (rhs as typeof lhs).spec.columnId\n ? -1\n : lhs.spec.columnId === (rhs as typeof lhs).spec.columnId\n ? 0\n : 1;\n case \"sparseToDenseColumn\":\n return lhs.column < (rhs as typeof lhs).column\n ? -1\n : lhs.column === (rhs as typeof lhs).column\n ? 0\n : 1;\n case \"innerJoin\":\n case \"fullJoin\": {\n const rhsJoin = rhs as typeof lhs;\n if (lhs.entries.length !== rhsJoin.entries.length) {\n return lhs.entries.length - rhsJoin.entries.length;\n }\n for (let i = 0; i < lhs.entries.length; i++) {\n const cmp = cmpQueryJoinEntrySpec(lhs.entries[i], rhsJoin.entries[i]);\n if (cmp !== 0) return cmp;\n }\n return 0;\n }\n case \"outerJoin\": {\n const rhsOuter = rhs as typeof lhs;\n const cmp = cmpQueryJoinEntrySpec(lhs.primary, rhsOuter.primary);\n if (cmp !== 0) return cmp;\n if (lhs.secondary.length !== rhsOuter.secondary.length) {\n return lhs.secondary.length - rhsOuter.secondary.length;\n }\n for (let i = 0; i < lhs.secondary.length; i++) {\n const cmp = cmpQueryJoinEntrySpec(lhs.secondary[i], rhsOuter.secondary[i]);\n if (cmp !== 0) return cmp;\n }\n return 0;\n }\n case \"linkerJoin\": {\n const rhsLinker = rhs as typeof lhs;\n if (lhs.linker.column !== rhsLinker.linker.column) {\n return lhs.linker.column < rhsLinker.linker.column ? -1 : 1;\n }\n if (lhs.secondary.length !== rhsLinker.secondary.length) {\n return lhs.secondary.length - rhsLinker.secondary.length;\n }\n for (let i = 0; i < lhs.secondary.length; i++) {\n const cmp = cmpQueryJoinEntrySpec(lhs.secondary[i], rhsLinker.secondary[i]);\n if (cmp !== 0) return cmp;\n }\n return 0;\n }\n case \"sliceAxes\":\n return cmpQuerySpec(lhs.input, (rhs as typeof lhs).input);\n case \"sort\":\n return cmpQuerySpec(lhs.input, (rhs as typeof lhs).input);\n case \"filter\":\n return cmpQuerySpec(lhs.input, (rhs as typeof lhs).input);\n default:\n assertNever(lhs);\n }\n}\n\nfunction cmpQueryJoinEntrySpec(lhs: SpecQueryJoinEntry, rhs: SpecQueryJoinEntry): number {\n const cmp = cmpQuerySpec(lhs.entry, rhs.entry);\n if (cmp !== 0) return cmp;\n // Absent `qualifications` is equivalent to an empty list.\n const lhsQ = lhs.qualifications ?? [];\n const rhsQ = rhs.qualifications ?? [];\n if (lhsQ.length !== rhsQ.length) {\n return lhsQ.length - rhsQ.length;\n }\n for (let i = 0; i < lhsQ.length; i++) {\n const l = canonicalizeJson(lhsQ[i]);\n const r = canonicalizeJson(rhsQ[i]);\n if (l !== r) return l < r ? -1 : 1;\n }\n return 0;\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"utils.cjs","names":["canonicalizeJson"],"sources":["../../../../src/drivers/pframe/query/utils.ts"],"sourcesContent":["import { canonicalizeJson } from \"../../../json\";\nimport { assertNever } from \"../../../util\";\nimport type {\n SpecQueryBooleanExpression,\n SpecQueryExpression,\n SpecQuery,\n SpecQueryJoinEntry,\n} from \"./query_spec\";\n\nconst BOOLEAN_TYPES = new Set<SpecQueryBooleanExpression[\"type\"]>([\n \"numericComparison\",\n \"stringEquals\",\n \"stringContains\",\n \"stringContainsFuzzy\",\n \"stringRegex\",\n \"isNull\",\n \"not\",\n \"and\",\n \"or\",\n \"isIn\",\n // \"isInPolygon\", -- disabled until the Rust executor wires it up\n]);\n\nexport function isBooleanExpression(expr: SpecQueryExpression): expr is SpecQueryBooleanExpression {\n return BOOLEAN_TYPES.has(\n // @ts-expect-error -- TypeScript doesn't understand the discriminated union here, but we do at runtime\n expr.type,\n );\n}\n\n/**\n * Recursively traverses a SpecQuery tree bottom-up, applying visitor callbacks.\n *\n * Traversal order:\n * 1. Recurse into child queries\n * 2. Apply `column` to transform column references in leaf nodes\n * 3. Apply `joinEntry` to each join entry (with inner query already traversed)\n * 4. Assemble node with transformed children\n * 5. Apply `node` to the assembled node\n */\nexport function traverseQuerySpec<C1, C2>(\n query: SpecQuery<C1>,\n visitor: {\n /** Transform column references in leaf nodes (column, sparseToDenseColumn). */\n column: (c: C1) => C2;\n /** Visit a node after its children have been traversed. */\n node?: (node: SpecQuery<C2>) => SpecQuery<C2>;\n /** Visit a join entry after its inner query has been traversed. */\n joinEntry?: (entry: SpecQueryJoinEntry<C2>) => SpecQueryJoinEntry<C2>;\n },\n): SpecQuery<C2> {\n const traverseEntry = (entry: SpecQueryJoinEntry<C1>): SpecQueryJoinEntry<C2> => {\n const traversed: SpecQueryJoinEntry<C2> = {\n ...entry,\n entry: traverseQuerySpec(entry.entry, visitor),\n };\n return visitor.joinEntry ? visitor.joinEntry(traversed) : traversed;\n };\n\n let result: SpecQuery<C2>;\n switch (query.type) {\n case \"column\":\n result = { type: \"column\", column: visitor.column(query.column) };\n break;\n case \"sparseToDenseColumn\":\n result = { ...query, column: visitor.column(query.column) };\n break;\n case \"inlineColumn\":\n result = query;\n break;\n case \"innerJoin\":\n case \"fullJoin\":\n result = { ...query, entries: query.entries.map(traverseEntry) };\n break;\n case \"outerJoin\":\n result = {\n ...query,\n primary: traverseEntry(query.primary),\n secondary: query.secondary.map(traverseEntry),\n };\n break;\n case \"linkerJoin\":\n result = {\n ...query,\n linker: { ...query.linker, column: visitor.column(query.linker.column) },\n secondary: query.secondary.map(traverseEntry),\n };\n break;\n case \"filter\":\n case \"sort\":\n case \"sliceAxes\":\n case \"transformColumns\":\n result = { ...query, input: traverseQuerySpec(query.input, visitor) };\n break;\n default:\n assertNever(query);\n }\n\n return visitor.node ? visitor.node(result) : result;\n}\n\n/** Recursively maps all column references in a SpecQuery tree. */\nexport function mapSpecQueryColumns<C1, C2>(\n query: SpecQuery<C1>,\n cb: (c: C1) => C2,\n): SpecQuery<C2> {\n return traverseQuerySpec(query, { column: cb });\n}\n\n/** Collects all column references from a SpecQuery tree. */\nexport function collectSpecQueryColumns<C>(query: SpecQuery<C>): C[] {\n const result: C[] = [];\n traverseQuerySpec(query, {\n column: (c: C) => {\n result.push(c);\n return c;\n },\n });\n return result;\n}\n\nexport function sortSpecQuery(query: SpecQuery): SpecQuery {\n return traverseQuerySpec(query, {\n column: (c) => c,\n node: (node) => {\n switch (node.type) {\n case \"sparseToDenseColumn\":\n return {\n ...node,\n // toSorted preserves array length but the type system widens\n // the non-empty tuple back to a plain array, so re-narrow.\n axes: node.axes.toSorted((a, b) =>\n canonicalizeJson(a).localeCompare(canonicalizeJson(b)),\n ) as typeof node.axes,\n };\n case \"innerJoin\":\n case \"fullJoin\": {\n const sorted = [...node.entries].sort(cmpQueryJoinEntrySpec);\n return { ...node, entries: sorted };\n }\n case \"outerJoin\": {\n const sorted = [...node.secondary].sort(cmpQueryJoinEntrySpec);\n return { ...node, secondary: sorted };\n }\n case \"linkerJoin\": {\n const sorted = [...node.secondary].sort(cmpQueryJoinEntrySpec);\n return { ...node, secondary: sorted };\n }\n case \"sliceAxes\":\n return {\n ...node,\n axisFilters: node.axisFilters.toSorted((a, b) => {\n const ak = canonicalizeJson(a.axisSelector);\n const bk = canonicalizeJson(b.axisSelector);\n return ak < bk ? -1 : ak === bk ? 0 : 1;\n }),\n };\n default:\n return node;\n }\n },\n joinEntry: (entry) => {\n // Preserve absence of `qualifications` (absent == `[]`) so canonical\n // output is stable across both input forms.\n if (entry.qualifications === undefined || entry.qualifications.length === 0) {\n return entry;\n }\n return {\n ...entry,\n qualifications: entry.qualifications.toSorted((a, b) => {\n const ak = canonicalizeJson(a.axis);\n const bk = canonicalizeJson(b.axis);\n return ak < bk ? -1 : ak === bk ? 0 : 1;\n }),\n };\n },\n });\n}\n\nfunction cmpQuerySpec(lhs: SpecQuery, rhs: SpecQuery): number {\n if (lhs.type !== rhs.type) {\n return lhs.type < rhs.type ? -1 : 1;\n }\n switch (lhs.type) {\n case \"column\":\n return lhs.column < (rhs as typeof lhs).column\n ? -1\n : lhs.column === (rhs as typeof lhs).column\n ? 0\n : 1;\n case \"inlineColumn\":\n return lhs.spec.columnId < (rhs as typeof lhs).spec.columnId\n ? -1\n : lhs.spec.columnId === (rhs as typeof lhs).spec.columnId\n ? 0\n : 1;\n case \"sparseToDenseColumn\":\n return lhs.column < (rhs as typeof lhs).column\n ? -1\n : lhs.column === (rhs as typeof lhs).column\n ? 0\n : 1;\n case \"innerJoin\":\n case \"fullJoin\": {\n const rhsJoin = rhs as typeof lhs;\n if (lhs.entries.length !== rhsJoin.entries.length) {\n return lhs.entries.length - rhsJoin.entries.length;\n }\n for (let i = 0; i < lhs.entries.length; i++) {\n const cmp = cmpQueryJoinEntrySpec(lhs.entries[i], rhsJoin.entries[i]);\n if (cmp !== 0) return cmp;\n }\n return 0;\n }\n case \"outerJoin\": {\n const rhsOuter = rhs as typeof lhs;\n const cmp = cmpQueryJoinEntrySpec(lhs.primary, rhsOuter.primary);\n if (cmp !== 0) return cmp;\n if (lhs.secondary.length !== rhsOuter.secondary.length) {\n return lhs.secondary.length - rhsOuter.secondary.length;\n }\n for (let i = 0; i < lhs.secondary.length; i++) {\n const cmp = cmpQueryJoinEntrySpec(lhs.secondary[i], rhsOuter.secondary[i]);\n if (cmp !== 0) return cmp;\n }\n return 0;\n }\n case \"linkerJoin\": {\n const rhsLinker = rhs as typeof lhs;\n if (lhs.linker.column !== rhsLinker.linker.column) {\n return lhs.linker.column < rhsLinker.linker.column ? -1 : 1;\n }\n if (lhs.secondary.length !== rhsLinker.secondary.length) {\n return lhs.secondary.length - rhsLinker.secondary.length;\n }\n for (let i = 0; i < lhs.secondary.length; i++) {\n const cmp = cmpQueryJoinEntrySpec(lhs.secondary[i], rhsLinker.secondary[i]);\n if (cmp !== 0) return cmp;\n }\n return 0;\n }\n case \"sliceAxes\":\n return cmpQuerySpec(lhs.input, (rhs as typeof lhs).input);\n case \"sort\":\n return cmpQuerySpec(lhs.input, (rhs as typeof lhs).input);\n case \"filter\":\n return cmpQuerySpec(lhs.input, (rhs as typeof lhs).input);\n case \"transformColumns\": {\n const rhsTc = rhs as typeof lhs;\n const cmp = cmpQuerySpec(lhs.input, rhsTc.input);\n if (cmp !== 0) return cmp;\n const modeCmp = lhs.mode.localeCompare(rhsTc.mode);\n if (modeCmp !== 0) return modeCmp;\n // Column entries are positional; compare by canonical JSON.\n return canonicalizeJson(lhs.columns).localeCompare(canonicalizeJson(rhsTc.columns));\n }\n default:\n assertNever(lhs);\n }\n}\n\nfunction cmpQueryJoinEntrySpec(lhs: SpecQueryJoinEntry, rhs: SpecQueryJoinEntry): number {\n const cmp = cmpQuerySpec(lhs.entry, rhs.entry);\n if (cmp !== 0) return cmp;\n // Absent `qualifications` is equivalent to an empty list.\n const lhsQ = lhs.qualifications ?? [];\n const rhsQ = rhs.qualifications ?? [];\n if (lhsQ.length !== rhsQ.length) {\n return lhsQ.length - rhsQ.length;\n }\n for (let i = 0; i < lhsQ.length; i++) {\n const l = canonicalizeJson(lhsQ[i]);\n const r = canonicalizeJson(rhsQ[i]);\n if (l !== r) return l < r ? -1 : 1;\n }\n return 0;\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","names":[],"sources":["../../../../src/drivers/pframe/query/utils.ts"],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"utils.d.ts","names":[],"sources":["../../../../src/drivers/pframe/query/utils.ts"],"mappings":";;;iBAuBgB,mBAAA,CAAoB,IAAA,EAAM,mBAAA,GAAsB,IAAA,IAAQ,0BAAA;;AAAxE;;;;;;;;;iBAiBgB,iBAAA,QAAA,CACd,KAAA,EAAO,SAAA,CAAU,EAAA,GACjB,OAAA;EAFc,+EAIZ,MAAA,GAAS,CAAA,EAAG,EAAA,KAAO,EAAA,EAJU;EAM7B,IAAA,IAAQ,IAAA,EAAM,SAAA,CAAU,EAAA,MAAQ,SAAA,CAAU,EAAA,GALrC;EAOL,SAAA,IAAa,KAAA,EAAO,kBAAA,CAAmB,EAAA,MAAQ,kBAAA,CAAmB,EAAA;AAAA,IAEnE,SAAA,CAAU,EAAA;;iBAoDG,mBAAA,QAAA,CACd,KAAA,EAAO,SAAA,CAAU,EAAA,GACjB,EAAA,GAAK,CAAA,EAAG,EAAA,KAAO,EAAA,GACd,SAAA,CAAU,EAAA;;iBAKG,uBAAA,GAAA,CAA2B,KAAA,EAAO,SAAA,CAAU,CAAA,IAAK,CAAA;AAAA,iBAWjD,aAAA,CAAc,KAAA,EAAO,SAAA,GAAY,SAAA"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { assertNever } from "../../../util.js";
|
|
2
2
|
import { canonicalizeJson } from "../../../json.js";
|
|
3
3
|
//#region src/drivers/pframe/query/utils.ts
|
|
4
|
-
const
|
|
4
|
+
const BOOLEAN_TYPES = new Set([
|
|
5
5
|
"numericComparison",
|
|
6
6
|
"stringEquals",
|
|
7
7
|
"stringContains",
|
|
@@ -14,7 +14,7 @@ const booleanTypesSet = new Set([
|
|
|
14
14
|
"isIn"
|
|
15
15
|
]);
|
|
16
16
|
function isBooleanExpression(expr) {
|
|
17
|
-
return
|
|
17
|
+
return BOOLEAN_TYPES.has(expr.type);
|
|
18
18
|
}
|
|
19
19
|
/**
|
|
20
20
|
* Recursively traverses a SpecQuery tree bottom-up, applying visitor callbacks.
|
|
@@ -78,6 +78,7 @@ function traverseQuerySpec(query, visitor) {
|
|
|
78
78
|
case "filter":
|
|
79
79
|
case "sort":
|
|
80
80
|
case "sliceAxes":
|
|
81
|
+
case "transformColumns":
|
|
81
82
|
result = {
|
|
82
83
|
...query,
|
|
83
84
|
input: traverseQuerySpec(query.input, visitor)
|
|
@@ -107,7 +108,7 @@ function sortSpecQuery(query) {
|
|
|
107
108
|
switch (node.type) {
|
|
108
109
|
case "sparseToDenseColumn": return {
|
|
109
110
|
...node,
|
|
110
|
-
|
|
111
|
+
axes: node.axes.toSorted((a, b) => canonicalizeJson(a).localeCompare(canonicalizeJson(b)))
|
|
111
112
|
};
|
|
112
113
|
case "innerJoin":
|
|
113
114
|
case "fullJoin": {
|
|
@@ -195,6 +196,14 @@ function cmpQuerySpec(lhs, rhs) {
|
|
|
195
196
|
case "sliceAxes": return cmpQuerySpec(lhs.input, rhs.input);
|
|
196
197
|
case "sort": return cmpQuerySpec(lhs.input, rhs.input);
|
|
197
198
|
case "filter": return cmpQuerySpec(lhs.input, rhs.input);
|
|
199
|
+
case "transformColumns": {
|
|
200
|
+
const rhsTc = rhs;
|
|
201
|
+
const cmp = cmpQuerySpec(lhs.input, rhsTc.input);
|
|
202
|
+
if (cmp !== 0) return cmp;
|
|
203
|
+
const modeCmp = lhs.mode.localeCompare(rhsTc.mode);
|
|
204
|
+
if (modeCmp !== 0) return modeCmp;
|
|
205
|
+
return canonicalizeJson(lhs.columns).localeCompare(canonicalizeJson(rhsTc.columns));
|
|
206
|
+
}
|
|
198
207
|
default: assertNever(lhs);
|
|
199
208
|
}
|
|
200
209
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","names":[],"sources":["../../../../src/drivers/pframe/query/utils.ts"],"sourcesContent":["import { canonicalizeJson } from \"../../../json\";\nimport { assertNever } from \"../../../util\";\nimport type {\n SpecQueryBooleanExpression,\n SpecQueryExpression,\n SpecQuery,\n SpecQueryJoinEntry,\n} from \"./query_spec\";\n\nconst booleanTypesSet = new Set<SpecQueryBooleanExpression[\"type\"]>([\n \"numericComparison\",\n \"stringEquals\",\n \"stringContains\",\n \"stringContainsFuzzy\",\n \"stringRegex\",\n \"isNull\",\n \"not\",\n \"and\",\n \"or\",\n \"isIn\",\n]);\n\nexport function isBooleanExpression(expr: SpecQueryExpression): expr is SpecQueryBooleanExpression {\n return booleanTypesSet.has(\n // @ts-expect-error -- TypeScript doesn't understand the discriminated union here, but we do at runtime\n expr.type,\n );\n}\n\n/**\n * Recursively traverses a SpecQuery tree bottom-up, applying visitor callbacks.\n *\n * Traversal order:\n * 1. Recurse into child queries\n * 2. Apply `column` to transform column references in leaf nodes\n * 3. Apply `joinEntry` to each join entry (with inner query already traversed)\n * 4. Assemble node with transformed children\n * 5. Apply `node` to the assembled node\n */\nexport function traverseQuerySpec<C1, C2>(\n query: SpecQuery<C1>,\n visitor: {\n /** Transform column references in leaf nodes (column, sparseToDenseColumn). */\n column: (c: C1) => C2;\n /** Visit a node after its children have been traversed. */\n node?: (node: SpecQuery<C2>) => SpecQuery<C2>;\n /** Visit a join entry after its inner query has been traversed. */\n joinEntry?: (entry: SpecQueryJoinEntry<C2>) => SpecQueryJoinEntry<C2>;\n },\n): SpecQuery<C2> {\n const traverseEntry = (entry: SpecQueryJoinEntry<C1>): SpecQueryJoinEntry<C2> => {\n const traversed: SpecQueryJoinEntry<C2> = {\n ...entry,\n entry: traverseQuerySpec(entry.entry, visitor),\n };\n return visitor.joinEntry ? visitor.joinEntry(traversed) : traversed;\n };\n\n let result: SpecQuery<C2>;\n switch (query.type) {\n case \"column\":\n result = { type: \"column\", column: visitor.column(query.column) };\n break;\n case \"sparseToDenseColumn\":\n result = { ...query, column: visitor.column(query.column) };\n break;\n case \"inlineColumn\":\n result = query;\n break;\n case \"innerJoin\":\n case \"fullJoin\":\n result = { ...query, entries: query.entries.map(traverseEntry) };\n break;\n case \"outerJoin\":\n result = {\n ...query,\n primary: traverseEntry(query.primary),\n secondary: query.secondary.map(traverseEntry),\n };\n break;\n case \"linkerJoin\":\n result = {\n ...query,\n linker: { ...query.linker, column: visitor.column(query.linker.column) },\n secondary: query.secondary.map(traverseEntry),\n };\n break;\n case \"filter\":\n case \"sort\":\n case \"sliceAxes\":\n result = { ...query, input: traverseQuerySpec(query.input, visitor) };\n break;\n default:\n assertNever(query);\n }\n\n return visitor.node ? visitor.node(result) : result;\n}\n\n/** Recursively maps all column references in a SpecQuery tree. */\nexport function mapSpecQueryColumns<C1, C2>(\n query: SpecQuery<C1>,\n cb: (c: C1) => C2,\n): SpecQuery<C2> {\n return traverseQuerySpec(query, { column: cb });\n}\n\n/** Collects all column references from a SpecQuery tree. */\nexport function collectSpecQueryColumns<C>(query: SpecQuery<C>): C[] {\n const result: C[] = [];\n traverseQuerySpec(query, {\n column: (c: C) => {\n result.push(c);\n return c;\n },\n });\n return result;\n}\n\nexport function sortSpecQuery(query: SpecQuery): SpecQuery {\n return traverseQuerySpec(query, {\n column: (c) => c,\n node: (node) => {\n switch (node.type) {\n case \"sparseToDenseColumn\":\n return { ...node, axesIndices: node.axesIndices.toSorted((a, b) => a - b) };\n case \"innerJoin\":\n case \"fullJoin\": {\n const sorted = [...node.entries].sort(cmpQueryJoinEntrySpec);\n return { ...node, entries: sorted };\n }\n case \"outerJoin\": {\n const sorted = [...node.secondary].sort(cmpQueryJoinEntrySpec);\n return { ...node, secondary: sorted };\n }\n case \"linkerJoin\": {\n const sorted = [...node.secondary].sort(cmpQueryJoinEntrySpec);\n return { ...node, secondary: sorted };\n }\n case \"sliceAxes\":\n return {\n ...node,\n axisFilters: node.axisFilters.toSorted((a, b) => {\n const ak = canonicalizeJson(a.axisSelector);\n const bk = canonicalizeJson(b.axisSelector);\n return ak < bk ? -1 : ak === bk ? 0 : 1;\n }),\n };\n default:\n return node;\n }\n },\n joinEntry: (entry) => {\n // Preserve absence of `qualifications` (absent == `[]`) so canonical\n // output is stable across both input forms.\n if (entry.qualifications === undefined || entry.qualifications.length === 0) {\n return entry;\n }\n return {\n ...entry,\n qualifications: entry.qualifications.toSorted((a, b) => {\n const ak = canonicalizeJson(a.axis);\n const bk = canonicalizeJson(b.axis);\n return ak < bk ? -1 : ak === bk ? 0 : 1;\n }),\n };\n },\n });\n}\n\nfunction cmpQuerySpec(lhs: SpecQuery, rhs: SpecQuery): number {\n if (lhs.type !== rhs.type) {\n return lhs.type < rhs.type ? -1 : 1;\n }\n switch (lhs.type) {\n case \"column\":\n return lhs.column < (rhs as typeof lhs).column\n ? -1\n : lhs.column === (rhs as typeof lhs).column\n ? 0\n : 1;\n case \"inlineColumn\":\n return lhs.spec.columnId < (rhs as typeof lhs).spec.columnId\n ? -1\n : lhs.spec.columnId === (rhs as typeof lhs).spec.columnId\n ? 0\n : 1;\n case \"sparseToDenseColumn\":\n return lhs.column < (rhs as typeof lhs).column\n ? -1\n : lhs.column === (rhs as typeof lhs).column\n ? 0\n : 1;\n case \"innerJoin\":\n case \"fullJoin\": {\n const rhsJoin = rhs as typeof lhs;\n if (lhs.entries.length !== rhsJoin.entries.length) {\n return lhs.entries.length - rhsJoin.entries.length;\n }\n for (let i = 0; i < lhs.entries.length; i++) {\n const cmp = cmpQueryJoinEntrySpec(lhs.entries[i], rhsJoin.entries[i]);\n if (cmp !== 0) return cmp;\n }\n return 0;\n }\n case \"outerJoin\": {\n const rhsOuter = rhs as typeof lhs;\n const cmp = cmpQueryJoinEntrySpec(lhs.primary, rhsOuter.primary);\n if (cmp !== 0) return cmp;\n if (lhs.secondary.length !== rhsOuter.secondary.length) {\n return lhs.secondary.length - rhsOuter.secondary.length;\n }\n for (let i = 0; i < lhs.secondary.length; i++) {\n const cmp = cmpQueryJoinEntrySpec(lhs.secondary[i], rhsOuter.secondary[i]);\n if (cmp !== 0) return cmp;\n }\n return 0;\n }\n case \"linkerJoin\": {\n const rhsLinker = rhs as typeof lhs;\n if (lhs.linker.column !== rhsLinker.linker.column) {\n return lhs.linker.column < rhsLinker.linker.column ? -1 : 1;\n }\n if (lhs.secondary.length !== rhsLinker.secondary.length) {\n return lhs.secondary.length - rhsLinker.secondary.length;\n }\n for (let i = 0; i < lhs.secondary.length; i++) {\n const cmp = cmpQueryJoinEntrySpec(lhs.secondary[i], rhsLinker.secondary[i]);\n if (cmp !== 0) return cmp;\n }\n return 0;\n }\n case \"sliceAxes\":\n return cmpQuerySpec(lhs.input, (rhs as typeof lhs).input);\n case \"sort\":\n return cmpQuerySpec(lhs.input, (rhs as typeof lhs).input);\n case \"filter\":\n return cmpQuerySpec(lhs.input, (rhs as typeof lhs).input);\n default:\n assertNever(lhs);\n }\n}\n\nfunction cmpQueryJoinEntrySpec(lhs: SpecQueryJoinEntry, rhs: SpecQueryJoinEntry): number {\n const cmp = cmpQuerySpec(lhs.entry, rhs.entry);\n if (cmp !== 0) return cmp;\n // Absent `qualifications` is equivalent to an empty list.\n const lhsQ = lhs.qualifications ?? [];\n const rhsQ = rhs.qualifications ?? [];\n if (lhsQ.length !== rhsQ.length) {\n return lhsQ.length - rhsQ.length;\n }\n for (let i = 0; i < lhsQ.length; i++) {\n const l = canonicalizeJson(lhsQ[i]);\n const r = canonicalizeJson(rhsQ[i]);\n if (l !== r) return l < r ? -1 : 1;\n }\n return 0;\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"utils.js","names":[],"sources":["../../../../src/drivers/pframe/query/utils.ts"],"sourcesContent":["import { canonicalizeJson } from \"../../../json\";\nimport { assertNever } from \"../../../util\";\nimport type {\n SpecQueryBooleanExpression,\n SpecQueryExpression,\n SpecQuery,\n SpecQueryJoinEntry,\n} from \"./query_spec\";\n\nconst BOOLEAN_TYPES = new Set<SpecQueryBooleanExpression[\"type\"]>([\n \"numericComparison\",\n \"stringEquals\",\n \"stringContains\",\n \"stringContainsFuzzy\",\n \"stringRegex\",\n \"isNull\",\n \"not\",\n \"and\",\n \"or\",\n \"isIn\",\n // \"isInPolygon\", -- disabled until the Rust executor wires it up\n]);\n\nexport function isBooleanExpression(expr: SpecQueryExpression): expr is SpecQueryBooleanExpression {\n return BOOLEAN_TYPES.has(\n // @ts-expect-error -- TypeScript doesn't understand the discriminated union here, but we do at runtime\n expr.type,\n );\n}\n\n/**\n * Recursively traverses a SpecQuery tree bottom-up, applying visitor callbacks.\n *\n * Traversal order:\n * 1. Recurse into child queries\n * 2. Apply `column` to transform column references in leaf nodes\n * 3. Apply `joinEntry` to each join entry (with inner query already traversed)\n * 4. Assemble node with transformed children\n * 5. Apply `node` to the assembled node\n */\nexport function traverseQuerySpec<C1, C2>(\n query: SpecQuery<C1>,\n visitor: {\n /** Transform column references in leaf nodes (column, sparseToDenseColumn). */\n column: (c: C1) => C2;\n /** Visit a node after its children have been traversed. */\n node?: (node: SpecQuery<C2>) => SpecQuery<C2>;\n /** Visit a join entry after its inner query has been traversed. */\n joinEntry?: (entry: SpecQueryJoinEntry<C2>) => SpecQueryJoinEntry<C2>;\n },\n): SpecQuery<C2> {\n const traverseEntry = (entry: SpecQueryJoinEntry<C1>): SpecQueryJoinEntry<C2> => {\n const traversed: SpecQueryJoinEntry<C2> = {\n ...entry,\n entry: traverseQuerySpec(entry.entry, visitor),\n };\n return visitor.joinEntry ? visitor.joinEntry(traversed) : traversed;\n };\n\n let result: SpecQuery<C2>;\n switch (query.type) {\n case \"column\":\n result = { type: \"column\", column: visitor.column(query.column) };\n break;\n case \"sparseToDenseColumn\":\n result = { ...query, column: visitor.column(query.column) };\n break;\n case \"inlineColumn\":\n result = query;\n break;\n case \"innerJoin\":\n case \"fullJoin\":\n result = { ...query, entries: query.entries.map(traverseEntry) };\n break;\n case \"outerJoin\":\n result = {\n ...query,\n primary: traverseEntry(query.primary),\n secondary: query.secondary.map(traverseEntry),\n };\n break;\n case \"linkerJoin\":\n result = {\n ...query,\n linker: { ...query.linker, column: visitor.column(query.linker.column) },\n secondary: query.secondary.map(traverseEntry),\n };\n break;\n case \"filter\":\n case \"sort\":\n case \"sliceAxes\":\n case \"transformColumns\":\n result = { ...query, input: traverseQuerySpec(query.input, visitor) };\n break;\n default:\n assertNever(query);\n }\n\n return visitor.node ? visitor.node(result) : result;\n}\n\n/** Recursively maps all column references in a SpecQuery tree. */\nexport function mapSpecQueryColumns<C1, C2>(\n query: SpecQuery<C1>,\n cb: (c: C1) => C2,\n): SpecQuery<C2> {\n return traverseQuerySpec(query, { column: cb });\n}\n\n/** Collects all column references from a SpecQuery tree. */\nexport function collectSpecQueryColumns<C>(query: SpecQuery<C>): C[] {\n const result: C[] = [];\n traverseQuerySpec(query, {\n column: (c: C) => {\n result.push(c);\n return c;\n },\n });\n return result;\n}\n\nexport function sortSpecQuery(query: SpecQuery): SpecQuery {\n return traverseQuerySpec(query, {\n column: (c) => c,\n node: (node) => {\n switch (node.type) {\n case \"sparseToDenseColumn\":\n return {\n ...node,\n // toSorted preserves array length but the type system widens\n // the non-empty tuple back to a plain array, so re-narrow.\n axes: node.axes.toSorted((a, b) =>\n canonicalizeJson(a).localeCompare(canonicalizeJson(b)),\n ) as typeof node.axes,\n };\n case \"innerJoin\":\n case \"fullJoin\": {\n const sorted = [...node.entries].sort(cmpQueryJoinEntrySpec);\n return { ...node, entries: sorted };\n }\n case \"outerJoin\": {\n const sorted = [...node.secondary].sort(cmpQueryJoinEntrySpec);\n return { ...node, secondary: sorted };\n }\n case \"linkerJoin\": {\n const sorted = [...node.secondary].sort(cmpQueryJoinEntrySpec);\n return { ...node, secondary: sorted };\n }\n case \"sliceAxes\":\n return {\n ...node,\n axisFilters: node.axisFilters.toSorted((a, b) => {\n const ak = canonicalizeJson(a.axisSelector);\n const bk = canonicalizeJson(b.axisSelector);\n return ak < bk ? -1 : ak === bk ? 0 : 1;\n }),\n };\n default:\n return node;\n }\n },\n joinEntry: (entry) => {\n // Preserve absence of `qualifications` (absent == `[]`) so canonical\n // output is stable across both input forms.\n if (entry.qualifications === undefined || entry.qualifications.length === 0) {\n return entry;\n }\n return {\n ...entry,\n qualifications: entry.qualifications.toSorted((a, b) => {\n const ak = canonicalizeJson(a.axis);\n const bk = canonicalizeJson(b.axis);\n return ak < bk ? -1 : ak === bk ? 0 : 1;\n }),\n };\n },\n });\n}\n\nfunction cmpQuerySpec(lhs: SpecQuery, rhs: SpecQuery): number {\n if (lhs.type !== rhs.type) {\n return lhs.type < rhs.type ? -1 : 1;\n }\n switch (lhs.type) {\n case \"column\":\n return lhs.column < (rhs as typeof lhs).column\n ? -1\n : lhs.column === (rhs as typeof lhs).column\n ? 0\n : 1;\n case \"inlineColumn\":\n return lhs.spec.columnId < (rhs as typeof lhs).spec.columnId\n ? -1\n : lhs.spec.columnId === (rhs as typeof lhs).spec.columnId\n ? 0\n : 1;\n case \"sparseToDenseColumn\":\n return lhs.column < (rhs as typeof lhs).column\n ? -1\n : lhs.column === (rhs as typeof lhs).column\n ? 0\n : 1;\n case \"innerJoin\":\n case \"fullJoin\": {\n const rhsJoin = rhs as typeof lhs;\n if (lhs.entries.length !== rhsJoin.entries.length) {\n return lhs.entries.length - rhsJoin.entries.length;\n }\n for (let i = 0; i < lhs.entries.length; i++) {\n const cmp = cmpQueryJoinEntrySpec(lhs.entries[i], rhsJoin.entries[i]);\n if (cmp !== 0) return cmp;\n }\n return 0;\n }\n case \"outerJoin\": {\n const rhsOuter = rhs as typeof lhs;\n const cmp = cmpQueryJoinEntrySpec(lhs.primary, rhsOuter.primary);\n if (cmp !== 0) return cmp;\n if (lhs.secondary.length !== rhsOuter.secondary.length) {\n return lhs.secondary.length - rhsOuter.secondary.length;\n }\n for (let i = 0; i < lhs.secondary.length; i++) {\n const cmp = cmpQueryJoinEntrySpec(lhs.secondary[i], rhsOuter.secondary[i]);\n if (cmp !== 0) return cmp;\n }\n return 0;\n }\n case \"linkerJoin\": {\n const rhsLinker = rhs as typeof lhs;\n if (lhs.linker.column !== rhsLinker.linker.column) {\n return lhs.linker.column < rhsLinker.linker.column ? -1 : 1;\n }\n if (lhs.secondary.length !== rhsLinker.secondary.length) {\n return lhs.secondary.length - rhsLinker.secondary.length;\n }\n for (let i = 0; i < lhs.secondary.length; i++) {\n const cmp = cmpQueryJoinEntrySpec(lhs.secondary[i], rhsLinker.secondary[i]);\n if (cmp !== 0) return cmp;\n }\n return 0;\n }\n case \"sliceAxes\":\n return cmpQuerySpec(lhs.input, (rhs as typeof lhs).input);\n case \"sort\":\n return cmpQuerySpec(lhs.input, (rhs as typeof lhs).input);\n case \"filter\":\n return cmpQuerySpec(lhs.input, (rhs as typeof lhs).input);\n case \"transformColumns\": {\n const rhsTc = rhs as typeof lhs;\n const cmp = cmpQuerySpec(lhs.input, rhsTc.input);\n if (cmp !== 0) return cmp;\n const modeCmp = lhs.mode.localeCompare(rhsTc.mode);\n if (modeCmp !== 0) return modeCmp;\n // Column entries are positional; compare by canonical JSON.\n return canonicalizeJson(lhs.columns).localeCompare(canonicalizeJson(rhsTc.columns));\n }\n default:\n assertNever(lhs);\n }\n}\n\nfunction cmpQueryJoinEntrySpec(lhs: SpecQueryJoinEntry, rhs: SpecQueryJoinEntry): number {\n const cmp = cmpQuerySpec(lhs.entry, rhs.entry);\n if (cmp !== 0) return cmp;\n // Absent `qualifications` is equivalent to an empty list.\n const lhsQ = lhs.qualifications ?? [];\n const rhsQ = rhs.qualifications ?? [];\n if (lhsQ.length !== rhsQ.length) {\n return lhsQ.length - rhsQ.length;\n }\n for (let i = 0; i < lhsQ.length; i++) {\n const l = canonicalizeJson(lhsQ[i]);\n const r = canonicalizeJson(rhsQ[i]);\n if (l !== r) return l < r ? -1 : 1;\n }\n return 0;\n}\n"],"mappings":"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"}
|
|
@@ -2,7 +2,8 @@ import { PoolEntry } from "../../pool_entry.js";
|
|
|
2
2
|
import { AxesId, AxesSpec, AxisSpec, AxisValueType, ColumnValueType, PColumnIdAndSpec, PColumnInfo, PColumnSpec } from "./spec/spec.js";
|
|
3
3
|
import { PTableColumnId, PTableColumnSpec } from "./table_common.js";
|
|
4
4
|
import { SpecQuery, SpecQueryJoinEntry } from "./query/query_spec.js";
|
|
5
|
-
import {
|
|
5
|
+
import { PTableRecordFilter } from "./table_calculate.js";
|
|
6
|
+
import { DataQuery, DataQueryBooleanExpression } from "./query/query_data.js";
|
|
6
7
|
import { AxisQualification, SingleAxisSelector } from "./spec/selectors.js";
|
|
7
8
|
import { PObjectId } from "../../pool/spec.js";
|
|
8
9
|
import { Branded } from "@milaboratories/helpers";
|
|
@@ -210,6 +211,15 @@ interface PFrameSpecDriver {
|
|
|
210
211
|
findAxis(spec: AxesSpec, selector: SingleAxisSelector): number;
|
|
211
212
|
/** Find the flat index of a table column matching the given selector. Returns -1 if not found. */
|
|
212
213
|
findTableColumn(tableSpec: PTableColumnSpec[], selector: PTableColumnId): number;
|
|
214
|
+
/**
|
|
215
|
+
* Upgrades selector-based legacy record filters into index-based data-layer
|
|
216
|
+
* boolean expressions, resolved against the provided unified table spec
|
|
217
|
+
* (axes first, then columns).
|
|
218
|
+
*/
|
|
219
|
+
rewriteLegacyFilters(request: {
|
|
220
|
+
tableSpec: PTableColumnSpec[];
|
|
221
|
+
filters: PTableRecordFilter[];
|
|
222
|
+
}): DataQueryBooleanExpression[];
|
|
213
223
|
}
|
|
214
224
|
//#endregion
|
|
215
225
|
export { BuildQueryInput, ColumnAxesWithQualifications, DeleteColumnRequest, DeleteColumnResponse, DiscoverColumnsConstraints, DiscoverColumnsFilterStep, DiscoverColumnsLinkerStep, DiscoverColumnsMappingVariant, DiscoverColumnsRequest, DiscoverColumnsResponse, DiscoverColumnsResponseHit, DiscoverColumnsResponseQualifications, DiscoverColumnsStepInfo, EvaluateQueryResponse, MatcherMap, MultiAxisSelector, MultiColumnSelector, PFrameSpecDriver, SpecFrameHandle, StringMatcher };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spec_driver.d.ts","names":[],"sources":["../../../src/drivers/pframe/spec_driver.ts"],"mappings":"
|
|
1
|
+
{"version":3,"file":"spec_driver.d.ts","names":[],"sources":["../../../src/drivers/pframe/spec_driver.ts"],"mappings":"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"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { PColumn } from "./spec/spec.js";
|
|
2
2
|
import { PTableColumnId, PTableColumnSpec } from "./table_common.js";
|
|
3
|
+
import { PTableVector } from "./data_types.js";
|
|
3
4
|
import { PColumnValues } from "./data_info.js";
|
|
4
5
|
import { SpecQuery } from "./query/query_spec.js";
|
|
5
|
-
import { PTableVector } from "./data_types.js";
|
|
6
6
|
import { PObjectId } from "../../pool/spec.js";
|
|
7
7
|
//#region src/drivers/pframe/table_calculate.d.ts
|
|
8
8
|
/** Defines a terminal column node in the join request tree */
|
package/dist/index.d.ts
CHANGED
|
@@ -13,9 +13,11 @@ import { Annotation, AnnotationDataStatus, AnnotationJson, AxesId, AxesSpec, Axi
|
|
|
13
13
|
import { AnchoredIdDeriver, ResolveAnchorsOptions, resolveAnchors } from "./drivers/pframe/spec/anchored.js";
|
|
14
14
|
import { NativePObjectId, deriveNativeId } from "./drivers/pframe/spec/native_id.js";
|
|
15
15
|
import { PTableColumnId, PTableColumnIdAxis, PTableColumnIdColumn, PTableColumnSpec, PTableColumnSpecAxis, PTableColumnSpecColumn, getPTableColumnId } from "./drivers/pframe/table_common.js";
|
|
16
|
+
import { PTableDownloadCompression, PTableDownloadFormat, PTableNA, PTableShape, PTableValue, PTableValueAxis, PTableValueBranded, PTableValueData, PTableValueDataBranded, PTableValueDouble, PTableValueFloat, PTableValueInt, PTableValueLong, PTableValueString, PTableVector, PTableVectorTyped, PVectorData, PVectorDataBytes, PVectorDataDouble, PVectorDataFloat, PVectorDataInt, PVectorDataLong, PVectorDataString, PVectorDataTyped, TableRange, ValueTypeSupported, WritePTableToFsOptions, WritePTableToFsResult, isPTableNA, isValueNA, pTableValue, pTableValueBranded } from "./drivers/pframe/data_types.js";
|
|
16
17
|
import { BinaryChunk, BinaryPartitionedDataInfo, BinaryPartitionedDataInfoEntries, DataInfo, DataInfoEntries, JsonDataInfo, JsonDataInfoEntries, JsonPartitionedDataInfo, JsonPartitionedDataInfoEntries, PColumnDataEntry, PColumnKey, PColumnValue, PColumnValues, PColumnValuesEntry, ParquetChunk, ParquetChunkMapping, ParquetChunkMappingAxis, ParquetChunkMappingColumn, ParquetChunkMetadata, ParquetChunkStats, ParquetPartitionedDataInfo, ParquetPartitionedDataInfoEntries, PartitionedDataInfoEntries, dataInfoToEntries, entriesToDataInfo, isDataInfo, isDataInfoEntries, isPartitionedDataInfoEntries, mapDataInfo, mapDataInfoEntries, visitDataInfo } from "./drivers/pframe/data_info.js";
|
|
17
|
-
import { SpecExprAxisRef, SpecExprColumnRef, SpecQuery, SpecQueryBooleanExpression, SpecQueryColumn, SpecQueryExpression, SpecQueryFilter, SpecQueryInlineColumn, SpecQueryJoinEntry, SpecQueryLinkerJoin, SpecQueryLinkerJoinLinker, SpecQueryOuterJoin, SpecQuerySliceAxes, SpecQuerySort, SpecQuerySparseToDenseColumn, SpecQuerySymmetricJoin } from "./drivers/pframe/query/query_spec.js";
|
|
18
|
-
import {
|
|
18
|
+
import { SpecExprAxisRef, SpecExprColumnRef, SpecQuery, SpecQueryBooleanExpression, SpecQueryColumn, SpecQueryExpression, SpecQueryFilter, SpecQueryInlineColumn, SpecQueryJoinEntry, SpecQueryLinkerJoin, SpecQueryLinkerJoinLinker, SpecQueryOuterJoin, SpecQuerySliceAxes, SpecQuerySort, SpecQuerySparseToDenseColumn, SpecQuerySymmetricJoin, SpecQueryTransformColumns } from "./drivers/pframe/query/query_spec.js";
|
|
19
|
+
import { ArtificialColumnJoinEntry, CalculateTableDataRequest, CalculateTableDataResponse, ColumnJoinEntry, ConstantAxisFilter, FullJoin, FullPTableColumnData, InlineColumnJoinEntry, InnerJoin, JoinEntry, OuterJoin, PTableDef, PTableDefV2, PTableRecordFilter, PTableRecordSingleValueFilterV2, PTableSorting, SingleValueAndPredicateV2, SingleValueEqualPredicate, SingleValueGreaterOrEqualPredicate, SingleValueGreaterPredicate, SingleValueIEqualPredicate, SingleValueInSetPredicate, SingleValueIsNAPredicate, SingleValueLessOrEqualPredicate, SingleValueLessPredicate, SingleValueMatchesPredicate, SingleValueNotPredicateV2, SingleValueOrPredicateV2, SingleValuePredicateV2, SingleValueStringContainsFuzzyPredicate, SingleValueStringContainsPredicate, SingleValueStringIContainsFuzzyPredicate, SingleValueStringIContainsPredicate, SlicedColumnJoinEntry, mapJoinEntry, mapPTableDef, mapPTableDefV2, sortJoinEntry, sortPTableDef } from "./drivers/pframe/table_calculate.js";
|
|
20
|
+
import { DataExprAxisRef, DataExprColumnRef, DataQuery, DataQueryBooleanExpression, DataQueryColumn, DataQueryExpression, DataQueryFilter, DataQueryInlineColumn, DataQueryJoinEntry, DataQueryLinkerJoin, DataQueryLinkerJoinLinker, DataQueryOuterJoin, DataQuerySliceAxes, DataQuerySort, DataQuerySparseToDenseColumn, DataQuerySymmetricJoin, DataQueryTransformColumns } from "./drivers/pframe/query/query_data.js";
|
|
19
21
|
import { collectSpecQueryColumns, isBooleanExpression, mapSpecQueryColumns, sortSpecQuery, traverseQuerySpec } from "./drivers/pframe/query/utils.js";
|
|
20
22
|
import { BuildQueryInput, ColumnAxesWithQualifications, DeleteColumnRequest, DeleteColumnResponse, DiscoverColumnsConstraints, DiscoverColumnsFilterStep, DiscoverColumnsLinkerStep, DiscoverColumnsMappingVariant, DiscoverColumnsRequest, DiscoverColumnsResponse, DiscoverColumnsResponseHit, DiscoverColumnsResponseQualifications, DiscoverColumnsStepInfo, EvaluateQueryResponse, MatcherMap, MultiAxisSelector, MultiColumnSelector, PFrameSpecDriver, SpecFrameHandle, StringMatcher } from "./drivers/pframe/spec_driver.js";
|
|
21
23
|
import { AAxisSelector, ADomain, AnchorAxisIdOrRefBasic, AnchorAxisRef, AnchorAxisRefByIdx, AnchorAxisRefByMatcher, AnchorAxisRefByName, AnchorDomainRef, AnchoredColumnMatchStrategy, AnchoredPColumnId, AnchoredPColumnSelector, AxisQualification, LegacyAxisSelector, PColumnSelector, SingleAxisSelector, isAnchoredPColumnId, legacyColumnSelectorsToPredicate, matchAxis, matchMultiColumnSelector, matchPColumn, multiColumnSelectorsToPredicate } from "./drivers/pframe/spec/selectors.js";
|
|
@@ -26,10 +28,8 @@ import { ImportProgress, ImportStatus } from "./drivers/upload.js";
|
|
|
26
28
|
import { AnyLogHandle, LiveLogHandle, LogsDriver, ProgressLogWithInfo, ReadyLogHandle, StreamingApiResponse, StreamingApiResponseHandleOutdated, StreamingApiResponseOk, isAnyLogHandle, isLiveLog } from "./drivers/log.js";
|
|
27
29
|
import { ColumnFilter } from "./drivers/pframe/column_filter.js";
|
|
28
30
|
import { FilterSpec, FilterSpecLeaf, FilterSpecNode, FilterSpecOfType, FilterSpecType, InferFilterSpecCommonLeaf, InferFilterSpecCommonNode, InferFilterSpecLeaf, InferFilterSpecLeafColumn, RootFilterSpec } from "./drivers/pframe/filter_spec.js";
|
|
29
|
-
import { PTableDownloadCompression, PTableDownloadFormat, PTableNA, PTableShape, PTableValue, PTableValueAxis, PTableValueBranded, PTableValueData, PTableValueDataBranded, PTableValueDouble, PTableValueFloat, PTableValueInt, PTableValueLong, PTableValueString, PTableVector, PTableVectorTyped, PVectorData, PVectorDataBytes, PVectorDataDouble, PVectorDataFloat, PVectorDataInt, PVectorDataLong, PVectorDataString, PVectorDataTyped, TableRange, ValueTypeSupported, WritePTableToFsOptions, WritePTableToFsResult, isPTableNA, isValueNA, pTableValue, pTableValueBranded } from "./drivers/pframe/data_types.js";
|
|
30
31
|
import { FindColumnsRequest, FindColumnsResponse } from "./drivers/pframe/find_columns.js";
|
|
31
32
|
import { PTable } from "./drivers/pframe/table.js";
|
|
32
|
-
import { ArtificialColumnJoinEntry, CalculateTableDataRequest, CalculateTableDataResponse, ColumnJoinEntry, ConstantAxisFilter, FullJoin, FullPTableColumnData, InlineColumnJoinEntry, InnerJoin, JoinEntry, OuterJoin, PTableDef, PTableDefV2, PTableRecordFilter, PTableRecordSingleValueFilterV2, PTableSorting, SingleValueAndPredicateV2, SingleValueEqualPredicate, SingleValueGreaterOrEqualPredicate, SingleValueGreaterPredicate, SingleValueIEqualPredicate, SingleValueInSetPredicate, SingleValueIsNAPredicate, SingleValueLessOrEqualPredicate, SingleValueLessPredicate, SingleValueMatchesPredicate, SingleValueNotPredicateV2, SingleValueOrPredicateV2, SingleValuePredicateV2, SingleValueStringContainsFuzzyPredicate, SingleValueStringContainsPredicate, SingleValueStringIContainsFuzzyPredicate, SingleValueStringIContainsPredicate, SlicedColumnJoinEntry, mapJoinEntry, mapPTableDef, mapPTableDefV2, sortJoinEntry, sortPTableDef } from "./drivers/pframe/table_calculate.js";
|
|
33
33
|
import { UniqueValuesRequest, UniqueValuesResponse } from "./drivers/pframe/unique_values.js";
|
|
34
34
|
import { CompositeLinkerMap, LinkerMap } from "./drivers/pframe/linker_columns.js";
|
|
35
35
|
import { FileRange, ImportFileHandle, ImportFileHandleIndex, ImportFileHandleUpload, ListFilesResult, LocalImportFileHandle, LsDriver, LsEntry, OpenDialogFilter, OpenDialogOps, OpenMultipleFilesResponse, OpenSingleFileResponse, StorageEntry, StorageHandle, StorageHandleLocal, StorageHandleRemote, getFileNameFromHandle, getFilePathFromHandle, isImportFileHandleIndex, isImportFileHandleUpload } from "./drivers/ls.js";
|
|
@@ -64,4 +64,4 @@ import { assertNever, uniqueBy } from "./util.js";
|
|
|
64
64
|
import { BasicHttpAuth, HttpAuth, parseHttpAuth, serializeHttpAuth } from "./httpAuth.js";
|
|
65
65
|
import { ResourceTypeName, ResourceTypePrefix } from "./resource_types.js";
|
|
66
66
|
import { ProjectId } from "./project_id.js";
|
|
67
|
-
export { AAxisSelector, ADomain, AbortError, AllRequiresFeatureFlags, AllSupportsFeatureFlags, AnchorAxisIdOrRefBasic, AnchorAxisRef, AnchorAxisRefByIdx, AnchorAxisRefByMatcher, AnchorAxisRefByName, AnchorDomainRef, AnchoredColumnMatchStrategy, AnchoredIdDeriver, AnchoredPColumnId, AnchoredPColumnSelector, Annotation, AnnotationDataStatus, AnnotationJson, AnyFunction, AnyLogHandle, ArchiveFormat, ArrayTypeUnion, ArtificialColumnJoinEntry, Assert, AssertKeysEqual, AuthorMarker, AxesId, AxesSpec, AxisFilter, AxisFilterByIdx, AxisFilterByName, AxisFilterValue, AxisId, AxisQualification, AxisSpec, AxisSpecNormalized, AxisTree, AxisValueType, Base64Compatible, Base64Encoded, BasicHttpAuth, BinaryChunk, BinaryPartitionedDataInfo, BinaryPartitionedDataInfoEntries, BlobDriver, BlobHandleAndSize, BlobLike, BlobToURLDriver, BlockCodeFeatureFlags, BlockCodeKnownFeatureFlags, BlockCodeWithInfo, BlockConfigContainer, BlockConfigGeneric, BlockConfigV3Generic, BlockConfigV4Generic, BlockOutputsBase, BlockRenderingMode, BlockSection, BlockSectionDelimiter, BlockSectionLink, BlockSectionLinkAppearance, BlockState, BlockStateV3, BlockUIURL, Branded, BuildQueryInput, CalculateTableDataRequest, CalculateTableDataResponse, CanonicalizedJson, ChunkedStreamReader, ChunkedStreamReaderOptions, Code, ColumnAxesWithQualifications, ColumnFilter, ColumnJoinEntry, ColumnValueType, CompositeLinkerMap, ConstantAxisFilter, ContentHandler, CreateEnrichmentRefOptions, DataExprAxisRef, DataExprColumnRef, DataInfo, DataInfoEntries, DataQuery, DataQueryBooleanExpression, DataQueryColumn, DataQueryExpression, DataQueryFilter, DataQueryInlineColumn, DataQueryJoinEntry, DataQueryLinkerJoin, DataQueryLinkerJoinLinker, DataQueryOuterJoin, DataQuerySliceAxes, DataQuerySort, DataQuerySparseToDenseColumn, DataQuerySymmetricJoin, DatasetInput, DefaultNavigationState, DeleteColumnRequest, DeleteColumnResponse, DialogService, DiscoverColumnsConstraints, DiscoverColumnsFilterStep, DiscoverColumnsLinkerStep, DiscoverColumnsMappingVariant, DiscoverColumnsRequest, DiscoverColumnsResponse, DiscoverColumnsResponseHit, DiscoverColumnsResponseQualifications, DiscoverColumnsStepInfo, DiscoveredPColumn, DiscoveredPColumnId, Domain, DomainJson, DriverKit, EnrichmentLinkerStep, EnrichmentRef, EnrichmentStep, ErrorHandlerStatus, EvaluateQueryResponse, FileFilter, FileLike, FileRange, FilterKeysByPrefix, FilterSpec, FilterSpecLeaf, FilterSpecNode, FilterSpecOfType, FilterSpecType, FilteredPColumn, FilteredPColumnId, FindColumnsRequest, FindColumnsResponse, FolderURL, FrontendDriver, FullJoin, FullPTableColumnData, GetContentOptions, HttpAuth, ImportFileHandle, ImportFileHandleIndex, ImportFileHandleUpload, ImportProgress, ImportStatus, IncompatibleFlagsError, InferFilterSpecCommonLeaf, InferFilterSpecCommonNode, InferFilterSpecLeaf, InferFilterSpecLeafColumn, InferServiceKind, InferServiceModel, InferServiceUi, InlineColumnJoinEntry, InnerJoin, Is, IsSubtypeOf, JoinEntry, JsonCompatible, JsonDataInfo, JsonDataInfoEntries, JsonPartitionedDataInfo, JsonPartitionedDataInfoEntries, JsonSerializable, KnownServiceName, LabeledEnrichmentRef, LabeledEnrichmentRefs, LegacyAxisSelector, LinkerMap, ListFilesResult, ListOptionBase, LiveLogHandle, LocalBlobHandle, LocalBlobHandleAndSize, LocalImportFileHandle, LogsDriver, LsDriver, LsEntry, MODEL_SERVICE_METHOD_MAP, MatcherMap, Metadata, MetadataJson, ModelServiceFactoryMap, ModelServiceRegistry, ModelServices, MultiAxisSelector, MultiColumnSelector, NativePObjectId, NavigationState, NodeServiceHandlerMap, OpenDialogFilter, OpenDialogOps, OpenMultipleFilesResponse, OpenSingleFileResponse, Option, OuterJoin, OutputWithStatus, PAxisName, PColumn, PColumnDataEntry, PColumnIdAndSpec, PColumnInfo, PColumnKey, PColumnLazy, PColumnName, PColumnSelector, PColumnSpec, PColumnSpecId, PColumnValue, PColumnValues, PColumnValuesEntry, PDataColumnSpec, PFrame, PFrameDef, PFrameDriver, PFrameDriverError, PFrameError, PFrameHandle, PFrameModelDriver, PFrameSpecDriver, PFrameSpecDriverError, PObject, PObjectId, PObjectSpec, PSpecPredicate, PTable, PTableColumnId, PTableColumnIdAxis, PTableColumnIdColumn, PTableColumnSpec, PTableColumnSpecAxis, PTableColumnSpecColumn, PTableDef, PTableDefV2, PTableDownloadCompression, PTableDownloadFormat, PTableHandle, PTableNA, PTableRecordFilter, PTableRecordSingleValueFilterV2, PTableShape, PTableSorting, PTableValue, PTableValueAxis, PTableValueBranded, PTableValueData, PTableValueDataBranded, PTableValueDouble, PTableValueFloat, PTableValueInt, PTableValueLong, PTableValueString, PTableVector, PTableVectorTyped, PUniversalColumnSpec, PVectorData, PVectorDataBytes, PVectorDataDouble, PVectorDataFloat, PVectorDataInt, PVectorDataLong, PVectorDataString, PVectorDataTyped, ParquetChunk, ParquetChunkMapping, ParquetChunkMappingAxis, ParquetChunkMappingColumn, ParquetChunkMetadata, ParquetChunkStats, ParquetPartitionedDataInfo, ParquetPartitionedDataInfoEntries, PartitionedDataInfoEntries, PlId, PlIdBytes, PlIdLength, PlRef, PoolEntry, PoolEntryGuard, PrimaryRef, ProgressLogWithInfo, ProjectId, REQUIRES_PFRAMES_VERSION, RangeBytes, ReadyLogHandle, Ref, RemoteBlobHandle, RemoteBlobHandleAndSize, RequireServices, ResolveAnchorsOptions, ResourceTypeName, ResourceTypePrefix, ResultCollection, ResultOrError, ResultPoolEntry, RootFilterSpec, RuntimeCapabilities, SERVICE_CAPABILITY_FLAGS, SERVICE_FEATURE_FLAGS, SERVICE_METHOD_MAP, SUniversalPColumnId, SerializedError, ServiceAlreadyRegisteredError, ServiceBrand, ServiceDispatch, ServiceError, ServiceInjectionError, ServiceInvalidIdError, ServiceMethodNotFoundError, ServiceName, ServiceNameLiterals, ServiceNotRegisteredError, ServiceRequireFlags, ServiceType, ServiceTypesLike, Services, ShowSaveDialogOptions, ShowSaveDialogResult, SingleAxisSelector, SingleValueAndPredicateV2, SingleValueEqualPredicate, SingleValueGreaterOrEqualPredicate, SingleValueGreaterPredicate, SingleValueIEqualPredicate, SingleValueInSetPredicate, SingleValueIsNAPredicate, SingleValueLessOrEqualPredicate, SingleValueLessPredicate, SingleValueMatchesPredicate, SingleValueNotPredicateV2, SingleValueOrPredicateV2, SingleValuePredicateV2, SingleValueStringContainsFuzzyPredicate, SingleValueStringContainsPredicate, SingleValueStringIContainsFuzzyPredicate, SingleValueStringIContainsPredicate, SlicedColumnJoinEntry, SpecExprAxisRef, SpecExprColumnRef, SpecFrameHandle, SpecQuery, SpecQueryBooleanExpression, SpecQueryColumn, SpecQueryExpression, SpecQueryFilter, SpecQueryInlineColumn, SpecQueryJoinEntry, SpecQueryLinkerJoin, SpecQueryLinkerJoinLinker, SpecQueryOuterJoin, SpecQuerySliceAxes, SpecQuerySort, SpecQuerySparseToDenseColumn, SpecQuerySymmetricJoin, StorageEntry, StorageHandle, StorageHandleLocal, StorageHandleRemote, StreamingApiResponse, StreamingApiResponseHandleOutdated, StreamingApiResponseOk, StringMatcher, StringifiedJson, SupportedRequirement, TableRange, Trace, TraceEntry, UiError, UiServiceFactoryMap, UiServiceRegistry, UiServices, UniqueValuesRequest, UniqueValuesResponse, UniversalPColumnId, ValueOrError, ValueType, ValueTypeSupported, ValueWithUTag, ValueWithUTagAndAuthor, WritePTableToFsOptions, WritePTableToFsResult, assertNever, base64Decode, base64Encode, bigintReplacer, buildServiceInfo, canonicalizeAxisId, canonicalizeAxisWithParents, canonicalizeJson, checkBlockFlag, collectSpecQueryColumns, createDiscoveredPColumnId, createEnrichmentRef, createNodeServiceHandlers, createPlRef, createPrimaryRef, dataInfoToEntries, deriveNativeId, deserializeError, deserializeResult, digestPlId, distillDiscoveredPColumn, ensureError, ensurePColumn, entriesToDataInfo, executePSpecPredicate, extractAllColumns, extractAllRequirements, extractAllSupports, extractCodeWithInfo, extractConfigGeneric, getArrayFromAxisTree, getAxesId, getAxesTree, getAxisId, getColumnIdAndSpec, getDenormalizedAxesList, getFileNameFromHandle, getFilePathFromHandle, getMethodNames, getNormalizedAxesList, getPColumnSpecId, getPTableColumnId, getServiceKind, getServiceModelMethods, getServiceUiMethods, getSetFromAxisTree, getTypeFromPColumnOrAxisSpec, hasAbortError, isAbortError, isAggregateError, isAnchoredPColumnId, isAnyLogHandle, isAxisId, isBlockUIURL, isBooleanExpression, isDataInfo, isDataInfoEntries, isDiscoveredPColumn, isEnrichmentRef, isFilteredPColumn, isFolderURL, isImportFileHandleIndex, isImportFileHandleUpload, isKnownServiceName, isLabelColumn, isLinkerColumn, isLiveLog, isMainService, isNodeService, isPColumn, isPColumnResult, isPColumnSpec, isPColumnSpecResult, isPFrameDriverError, isPFrameError, isPFrameSpecDriverError, isPTableNA, isPartitionedDataInfoEntries, isPlRef, isPrimaryRef, isServiceAlreadyRegisteredError, isServiceError, isServiceInjectionError, isServiceInvalidIdError, isServiceMethodNotFoundError, isServiceNotRegisteredError, isValueNA, isWasmService, legacyColumnSelectorsToPredicate, mapDataInfo, mapDataInfoEntries, mapJoinEntry, mapPObjectData, mapPTableDef, mapPTableDefV2, mapSpecQueryColumns, mapValueInVOE, matchAxis, matchAxisId, matchMultiColumnSelector, matchPColumn, multiColumnSelectorsToPredicate, newRangeBytesOpt, pTableValue, pTableValueBranded, parseColumnId, parseDiscoveredPColumnId, parseHttpAuth, parseJson, parseJsonSafely, plId, plRefsEqual, readAnnotation, readAnnotationJson, readAnnotationJsonOrThrow, readDomain, readDomainJson, readDomainJsonOrThrow, readMetadata, readMetadataJson, readMetadataJsonOrThrow, registerServiceCapabilities, resolveAnchors, resolveAnnotationParents, resolveNodeServiceHandler, resolveRequiredServices, serializeError, serializeHttpAuth, serializeResult, service, serviceFnKey, sortJoinEntry, sortPTableDef, sortSpecQuery, stringifyColumnId, stringifyDiscoveredPColumnId, stringifyJson, traverseQuerySpec, uniqueBy, uniquePlId, unwrapResult, validateRangeBytes, visitDataInfo, withEnrichments, wrapAndSerialize, wrapAndSerializeAsync, wrapAsyncCallback, wrapCallback };
|
|
67
|
+
export { AAxisSelector, ADomain, AbortError, AllRequiresFeatureFlags, AllSupportsFeatureFlags, AnchorAxisIdOrRefBasic, AnchorAxisRef, AnchorAxisRefByIdx, AnchorAxisRefByMatcher, AnchorAxisRefByName, AnchorDomainRef, AnchoredColumnMatchStrategy, AnchoredIdDeriver, AnchoredPColumnId, AnchoredPColumnSelector, Annotation, AnnotationDataStatus, AnnotationJson, AnyFunction, AnyLogHandle, ArchiveFormat, ArrayTypeUnion, ArtificialColumnJoinEntry, Assert, AssertKeysEqual, AuthorMarker, AxesId, AxesSpec, AxisFilter, AxisFilterByIdx, AxisFilterByName, AxisFilterValue, AxisId, AxisQualification, AxisSpec, AxisSpecNormalized, AxisTree, AxisValueType, Base64Compatible, Base64Encoded, BasicHttpAuth, BinaryChunk, BinaryPartitionedDataInfo, BinaryPartitionedDataInfoEntries, BlobDriver, BlobHandleAndSize, BlobLike, BlobToURLDriver, BlockCodeFeatureFlags, BlockCodeKnownFeatureFlags, BlockCodeWithInfo, BlockConfigContainer, BlockConfigGeneric, BlockConfigV3Generic, BlockConfigV4Generic, BlockOutputsBase, BlockRenderingMode, BlockSection, BlockSectionDelimiter, BlockSectionLink, BlockSectionLinkAppearance, BlockState, BlockStateV3, BlockUIURL, Branded, BuildQueryInput, CalculateTableDataRequest, CalculateTableDataResponse, CanonicalizedJson, ChunkedStreamReader, ChunkedStreamReaderOptions, Code, ColumnAxesWithQualifications, ColumnFilter, ColumnJoinEntry, ColumnValueType, CompositeLinkerMap, ConstantAxisFilter, ContentHandler, CreateEnrichmentRefOptions, DataExprAxisRef, DataExprColumnRef, DataInfo, DataInfoEntries, DataQuery, DataQueryBooleanExpression, DataQueryColumn, DataQueryExpression, DataQueryFilter, DataQueryInlineColumn, DataQueryJoinEntry, DataQueryLinkerJoin, DataQueryLinkerJoinLinker, DataQueryOuterJoin, DataQuerySliceAxes, DataQuerySort, DataQuerySparseToDenseColumn, DataQuerySymmetricJoin, DataQueryTransformColumns, DatasetInput, DefaultNavigationState, DeleteColumnRequest, DeleteColumnResponse, DialogService, DiscoverColumnsConstraints, DiscoverColumnsFilterStep, DiscoverColumnsLinkerStep, DiscoverColumnsMappingVariant, DiscoverColumnsRequest, DiscoverColumnsResponse, DiscoverColumnsResponseHit, DiscoverColumnsResponseQualifications, DiscoverColumnsStepInfo, DiscoveredPColumn, DiscoveredPColumnId, Domain, DomainJson, DriverKit, EnrichmentLinkerStep, EnrichmentRef, EnrichmentStep, ErrorHandlerStatus, EvaluateQueryResponse, FileFilter, FileLike, FileRange, FilterKeysByPrefix, FilterSpec, FilterSpecLeaf, FilterSpecNode, FilterSpecOfType, FilterSpecType, FilteredPColumn, FilteredPColumnId, FindColumnsRequest, FindColumnsResponse, FolderURL, FrontendDriver, FullJoin, FullPTableColumnData, GetContentOptions, HttpAuth, ImportFileHandle, ImportFileHandleIndex, ImportFileHandleUpload, ImportProgress, ImportStatus, IncompatibleFlagsError, InferFilterSpecCommonLeaf, InferFilterSpecCommonNode, InferFilterSpecLeaf, InferFilterSpecLeafColumn, InferServiceKind, InferServiceModel, InferServiceUi, InlineColumnJoinEntry, InnerJoin, Is, IsSubtypeOf, JoinEntry, JsonCompatible, JsonDataInfo, JsonDataInfoEntries, JsonPartitionedDataInfo, JsonPartitionedDataInfoEntries, JsonSerializable, KnownServiceName, LabeledEnrichmentRef, LabeledEnrichmentRefs, LegacyAxisSelector, LinkerMap, ListFilesResult, ListOptionBase, LiveLogHandle, LocalBlobHandle, LocalBlobHandleAndSize, LocalImportFileHandle, LogsDriver, LsDriver, LsEntry, MODEL_SERVICE_METHOD_MAP, MatcherMap, Metadata, MetadataJson, ModelServiceFactoryMap, ModelServiceRegistry, ModelServices, MultiAxisSelector, MultiColumnSelector, NativePObjectId, NavigationState, NodeServiceHandlerMap, OpenDialogFilter, OpenDialogOps, OpenMultipleFilesResponse, OpenSingleFileResponse, Option, OuterJoin, OutputWithStatus, PAxisName, PColumn, PColumnDataEntry, PColumnIdAndSpec, PColumnInfo, PColumnKey, PColumnLazy, PColumnName, PColumnSelector, PColumnSpec, PColumnSpecId, PColumnValue, PColumnValues, PColumnValuesEntry, PDataColumnSpec, PFrame, PFrameDef, PFrameDriver, PFrameDriverError, PFrameError, PFrameHandle, PFrameModelDriver, PFrameSpecDriver, PFrameSpecDriverError, PObject, PObjectId, PObjectSpec, PSpecPredicate, PTable, PTableColumnId, PTableColumnIdAxis, PTableColumnIdColumn, PTableColumnSpec, PTableColumnSpecAxis, PTableColumnSpecColumn, PTableDef, PTableDefV2, PTableDownloadCompression, PTableDownloadFormat, PTableHandle, PTableNA, PTableRecordFilter, PTableRecordSingleValueFilterV2, PTableShape, PTableSorting, PTableValue, PTableValueAxis, PTableValueBranded, PTableValueData, PTableValueDataBranded, PTableValueDouble, PTableValueFloat, PTableValueInt, PTableValueLong, PTableValueString, PTableVector, PTableVectorTyped, PUniversalColumnSpec, PVectorData, PVectorDataBytes, PVectorDataDouble, PVectorDataFloat, PVectorDataInt, PVectorDataLong, PVectorDataString, PVectorDataTyped, ParquetChunk, ParquetChunkMapping, ParquetChunkMappingAxis, ParquetChunkMappingColumn, ParquetChunkMetadata, ParquetChunkStats, ParquetPartitionedDataInfo, ParquetPartitionedDataInfoEntries, PartitionedDataInfoEntries, PlId, PlIdBytes, PlIdLength, PlRef, PoolEntry, PoolEntryGuard, PrimaryRef, ProgressLogWithInfo, ProjectId, REQUIRES_PFRAMES_VERSION, RangeBytes, ReadyLogHandle, Ref, RemoteBlobHandle, RemoteBlobHandleAndSize, RequireServices, ResolveAnchorsOptions, ResourceTypeName, ResourceTypePrefix, ResultCollection, ResultOrError, ResultPoolEntry, RootFilterSpec, RuntimeCapabilities, SERVICE_CAPABILITY_FLAGS, SERVICE_FEATURE_FLAGS, SERVICE_METHOD_MAP, SUniversalPColumnId, SerializedError, ServiceAlreadyRegisteredError, ServiceBrand, ServiceDispatch, ServiceError, ServiceInjectionError, ServiceInvalidIdError, ServiceMethodNotFoundError, ServiceName, ServiceNameLiterals, ServiceNotRegisteredError, ServiceRequireFlags, ServiceType, ServiceTypesLike, Services, ShowSaveDialogOptions, ShowSaveDialogResult, SingleAxisSelector, SingleValueAndPredicateV2, SingleValueEqualPredicate, SingleValueGreaterOrEqualPredicate, SingleValueGreaterPredicate, SingleValueIEqualPredicate, SingleValueInSetPredicate, SingleValueIsNAPredicate, SingleValueLessOrEqualPredicate, SingleValueLessPredicate, SingleValueMatchesPredicate, SingleValueNotPredicateV2, SingleValueOrPredicateV2, SingleValuePredicateV2, SingleValueStringContainsFuzzyPredicate, SingleValueStringContainsPredicate, SingleValueStringIContainsFuzzyPredicate, SingleValueStringIContainsPredicate, SlicedColumnJoinEntry, SpecExprAxisRef, SpecExprColumnRef, SpecFrameHandle, SpecQuery, SpecQueryBooleanExpression, SpecQueryColumn, SpecQueryExpression, SpecQueryFilter, SpecQueryInlineColumn, SpecQueryJoinEntry, SpecQueryLinkerJoin, SpecQueryLinkerJoinLinker, SpecQueryOuterJoin, SpecQuerySliceAxes, SpecQuerySort, SpecQuerySparseToDenseColumn, SpecQuerySymmetricJoin, SpecQueryTransformColumns, StorageEntry, StorageHandle, StorageHandleLocal, StorageHandleRemote, StreamingApiResponse, StreamingApiResponseHandleOutdated, StreamingApiResponseOk, StringMatcher, StringifiedJson, SupportedRequirement, TableRange, Trace, TraceEntry, UiError, UiServiceFactoryMap, UiServiceRegistry, UiServices, UniqueValuesRequest, UniqueValuesResponse, UniversalPColumnId, ValueOrError, ValueType, ValueTypeSupported, ValueWithUTag, ValueWithUTagAndAuthor, WritePTableToFsOptions, WritePTableToFsResult, assertNever, base64Decode, base64Encode, bigintReplacer, buildServiceInfo, canonicalizeAxisId, canonicalizeAxisWithParents, canonicalizeJson, checkBlockFlag, collectSpecQueryColumns, createDiscoveredPColumnId, createEnrichmentRef, createNodeServiceHandlers, createPlRef, createPrimaryRef, dataInfoToEntries, deriveNativeId, deserializeError, deserializeResult, digestPlId, distillDiscoveredPColumn, ensureError, ensurePColumn, entriesToDataInfo, executePSpecPredicate, extractAllColumns, extractAllRequirements, extractAllSupports, extractCodeWithInfo, extractConfigGeneric, getArrayFromAxisTree, getAxesId, getAxesTree, getAxisId, getColumnIdAndSpec, getDenormalizedAxesList, getFileNameFromHandle, getFilePathFromHandle, getMethodNames, getNormalizedAxesList, getPColumnSpecId, getPTableColumnId, getServiceKind, getServiceModelMethods, getServiceUiMethods, getSetFromAxisTree, getTypeFromPColumnOrAxisSpec, hasAbortError, isAbortError, isAggregateError, isAnchoredPColumnId, isAnyLogHandle, isAxisId, isBlockUIURL, isBooleanExpression, isDataInfo, isDataInfoEntries, isDiscoveredPColumn, isEnrichmentRef, isFilteredPColumn, isFolderURL, isImportFileHandleIndex, isImportFileHandleUpload, isKnownServiceName, isLabelColumn, isLinkerColumn, isLiveLog, isMainService, isNodeService, isPColumn, isPColumnResult, isPColumnSpec, isPColumnSpecResult, isPFrameDriverError, isPFrameError, isPFrameSpecDriverError, isPTableNA, isPartitionedDataInfoEntries, isPlRef, isPrimaryRef, isServiceAlreadyRegisteredError, isServiceError, isServiceInjectionError, isServiceInvalidIdError, isServiceMethodNotFoundError, isServiceNotRegisteredError, isValueNA, isWasmService, legacyColumnSelectorsToPredicate, mapDataInfo, mapDataInfoEntries, mapJoinEntry, mapPObjectData, mapPTableDef, mapPTableDefV2, mapSpecQueryColumns, mapValueInVOE, matchAxis, matchAxisId, matchMultiColumnSelector, matchPColumn, multiColumnSelectorsToPredicate, newRangeBytesOpt, pTableValue, pTableValueBranded, parseColumnId, parseDiscoveredPColumnId, parseHttpAuth, parseJson, parseJsonSafely, plId, plRefsEqual, readAnnotation, readAnnotationJson, readAnnotationJsonOrThrow, readDomain, readDomainJson, readDomainJsonOrThrow, readMetadata, readMetadataJson, readMetadataJsonOrThrow, registerServiceCapabilities, resolveAnchors, resolveAnnotationParents, resolveNodeServiceHandler, resolveRequiredServices, serializeError, serializeHttpAuth, serializeResult, service, serviceFnKey, sortJoinEntry, sortPTableDef, sortSpecQuery, stringifyColumnId, stringifyDiscoveredPColumnId, stringifyJson, traverseQuerySpec, uniqueBy, uniquePlId, unwrapResult, validateRangeBytes, visitDataInfo, withEnrichments, wrapAndSerialize, wrapAndSerializeAsync, wrapAsyncCallback, wrapCallback };
|
|
@@ -14,7 +14,8 @@ const Services = {
|
|
|
14
14
|
"expandAxes",
|
|
15
15
|
"collapseAxes",
|
|
16
16
|
"findAxis",
|
|
17
|
-
"findTableColumn"
|
|
17
|
+
"findTableColumn",
|
|
18
|
+
"rewriteLegacyFilters"
|
|
18
19
|
],
|
|
19
20
|
uiMethods: [
|
|
20
21
|
"createSpecFrame",
|
|
@@ -26,7 +27,8 @@ const Services = {
|
|
|
26
27
|
"expandAxes",
|
|
27
28
|
"collapseAxes",
|
|
28
29
|
"findAxis",
|
|
29
|
-
"findTableColumn"
|
|
30
|
+
"findTableColumn",
|
|
31
|
+
"rewriteLegacyFilters"
|
|
30
32
|
]
|
|
31
33
|
}),
|
|
32
34
|
PFrame: require_service_types.service()({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service_declarations.cjs","names":["service"],"sources":["../../src/services/service_declarations.ts"],"sourcesContent":["/**\n * Service declarations — add new services here.\n *\n * `modelMethods` / `uiMethods` lists are the single source of truth for\n * method names exposed on each side. They drive SERVICE_METHOD_MAP (UI\n * ServiceProxy forwarders) and MODEL_SERVICE_METHOD_MAP (workflow VM\n * bridge), so node/main/wasm split no longer needs introspection stubs.\n *\n * After adding a service, fix type errors in these files:\n *\n * Model side:\n * - lib/node/pl-middle-layer/src/js_render/service_injectors.ts — VM bridge for workflow scripts\n * - lib/node/pl-middle-layer/src/middle_layer/middle_layer.ts — ModelServiceRegistry factory\n *\n * UI side:\n * - lib/model/common/src/services/node_service_handlers.ts — driver method wrappers (node services only)\n * - sdk/ui-vue/src/internal/createAppV3.ts — UiServiceRegistry factory\n *\n * Electron main side (only for `main` services):\n * - platforma-desktop-app/packages/main/src/services/mainServices.ts — main-process dispatcher\n *\n * Optional:\n * - sdk/model/src/services/block_service_flags.ts — only if default-required by all blocks\n */\n\nimport type { DialogService } from \"../dialog\";\nimport type { PFrameDriver, PFrameModelDriver } from \"../drivers/pframe/driver\";\nimport type { PFrameSpecDriver } from \"../drivers/pframe/spec_driver\";\nimport { service } from \"./service_types\";\n\nexport const Services = {\n PFrameSpec: service<PFrameSpecDriver, PFrameSpecDriver>()({\n type: \"wasm\",\n name: \"pframeSpec\",\n modelMethods: [\n \"createSpecFrame\",\n \"listColumns\",\n \"discoverColumns\",\n \"deleteColumn\",\n \"evaluateQuery\",\n \"buildQuery\",\n \"expandAxes\",\n \"collapseAxes\",\n \"findAxis\",\n \"findTableColumn\",\n ] as const,\n uiMethods: [\n \"createSpecFrame\",\n \"listColumns\",\n \"discoverColumns\",\n \"deleteColumn\",\n \"evaluateQuery\",\n \"buildQuery\",\n \"expandAxes\",\n \"collapseAxes\",\n \"findAxis\",\n \"findTableColumn\",\n ] as const,\n }),\n PFrame: service<PFrameModelDriver, PFrameDriver>()({\n type: \"node\",\n name: \"pframe\",\n modelMethods: [\"createPFrame\", \"createPTable\", \"createPTableV2\"] as const,\n uiMethods: [\n \"findColumns\",\n \"getColumnSpec\",\n \"listColumns\",\n \"calculateTableData\",\n \"getUniqueValues\",\n \"getShape\",\n \"getSpec\",\n \"getData\",\n \"writePTableToFs\",\n ] as const,\n }),\n Dialog: service<Record<string, never>, DialogService>()({\n type: \"main\",\n name: \"dialog\",\n modelMethods: [] as const,\n uiMethods: [\"showSaveDialog\"] as const,\n }),\n};\n"],"mappings":";;AA8BA,MAAa,WAAW;CACtB,YAAYA,sBAAAA,SAA6C,CAAC;EACxD,MAAM;EACN,MAAM;EACN,cAAc;GACZ;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACD;EACD,WAAW;GACT;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACD;EACF,CAAC;CACF,QAAQA,sBAAAA,SAA0C,CAAC;EACjD,MAAM;EACN,MAAM;EACN,cAAc;GAAC;GAAgB;GAAgB;GAAiB;EAChE,WAAW;GACT;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACD;EACF,CAAC;CACF,QAAQA,sBAAAA,SAA+C,CAAC;EACtD,MAAM;EACN,MAAM;EACN,cAAc,EAAE;EAChB,WAAW,CAAC,iBAAiB;EAC9B,CAAC;CACH"}
|
|
1
|
+
{"version":3,"file":"service_declarations.cjs","names":["service"],"sources":["../../src/services/service_declarations.ts"],"sourcesContent":["/**\n * Service declarations — add new services here.\n *\n * `modelMethods` / `uiMethods` lists are the single source of truth for\n * method names exposed on each side. They drive SERVICE_METHOD_MAP (UI\n * ServiceProxy forwarders) and MODEL_SERVICE_METHOD_MAP (workflow VM\n * bridge), so node/main/wasm split no longer needs introspection stubs.\n *\n * After adding a service, fix type errors in these files:\n *\n * Model side:\n * - lib/node/pl-middle-layer/src/js_render/service_injectors.ts — VM bridge for workflow scripts\n * - lib/node/pl-middle-layer/src/middle_layer/middle_layer.ts — ModelServiceRegistry factory\n *\n * UI side:\n * - lib/model/common/src/services/node_service_handlers.ts — driver method wrappers (node services only)\n * - sdk/ui-vue/src/internal/createAppV3.ts — UiServiceRegistry factory\n *\n * Electron main side (only for `main` services):\n * - platforma-desktop-app/packages/main/src/services/mainServices.ts — main-process dispatcher\n *\n * Optional:\n * - sdk/model/src/services/block_service_flags.ts — only if default-required by all blocks\n */\n\nimport type { DialogService } from \"../dialog\";\nimport type { PFrameDriver, PFrameModelDriver } from \"../drivers/pframe/driver\";\nimport type { PFrameSpecDriver } from \"../drivers/pframe/spec_driver\";\nimport { service } from \"./service_types\";\n\nexport const Services = {\n PFrameSpec: service<PFrameSpecDriver, PFrameSpecDriver>()({\n type: \"wasm\",\n name: \"pframeSpec\",\n modelMethods: [\n \"createSpecFrame\",\n \"listColumns\",\n \"discoverColumns\",\n \"deleteColumn\",\n \"evaluateQuery\",\n \"buildQuery\",\n \"expandAxes\",\n \"collapseAxes\",\n \"findAxis\",\n \"findTableColumn\",\n \"rewriteLegacyFilters\",\n ] as const,\n uiMethods: [\n \"createSpecFrame\",\n \"listColumns\",\n \"discoverColumns\",\n \"deleteColumn\",\n \"evaluateQuery\",\n \"buildQuery\",\n \"expandAxes\",\n \"collapseAxes\",\n \"findAxis\",\n \"findTableColumn\",\n \"rewriteLegacyFilters\",\n ] as const,\n }),\n PFrame: service<PFrameModelDriver, PFrameDriver>()({\n type: \"node\",\n name: \"pframe\",\n modelMethods: [\"createPFrame\", \"createPTable\", \"createPTableV2\"] as const,\n uiMethods: [\n \"findColumns\",\n \"getColumnSpec\",\n \"listColumns\",\n \"calculateTableData\",\n \"getUniqueValues\",\n \"getShape\",\n \"getSpec\",\n \"getData\",\n \"writePTableToFs\",\n ] as const,\n }),\n Dialog: service<Record<string, never>, DialogService>()({\n type: \"main\",\n name: \"dialog\",\n modelMethods: [] as const,\n uiMethods: [\"showSaveDialog\"] as const,\n }),\n};\n"],"mappings":";;AA8BA,MAAa,WAAW;CACtB,YAAYA,sBAAAA,SAA6C,CAAC;EACxD,MAAM;EACN,MAAM;EACN,cAAc;GACZ;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACD;EACD,WAAW;GACT;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACD;EACF,CAAC;CACF,QAAQA,sBAAAA,SAA0C,CAAC;EACjD,MAAM;EACN,MAAM;EACN,cAAc;GAAC;GAAgB;GAAgB;GAAiB;EAChE,WAAW;GACT;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACD;EACF,CAAC;CACF,QAAQA,sBAAAA,SAA+C,CAAC;EACtD,MAAM;EACN,MAAM;EACN,cAAc,EAAE;EAChB,WAAW,CAAC,iBAAiB;EAC9B,CAAC;CACH"}
|
|
@@ -14,7 +14,8 @@ const Services = {
|
|
|
14
14
|
"expandAxes",
|
|
15
15
|
"collapseAxes",
|
|
16
16
|
"findAxis",
|
|
17
|
-
"findTableColumn"
|
|
17
|
+
"findTableColumn",
|
|
18
|
+
"rewriteLegacyFilters"
|
|
18
19
|
],
|
|
19
20
|
uiMethods: [
|
|
20
21
|
"createSpecFrame",
|
|
@@ -26,7 +27,8 @@ const Services = {
|
|
|
26
27
|
"expandAxes",
|
|
27
28
|
"collapseAxes",
|
|
28
29
|
"findAxis",
|
|
29
|
-
"findTableColumn"
|
|
30
|
+
"findTableColumn",
|
|
31
|
+
"rewriteLegacyFilters"
|
|
30
32
|
]
|
|
31
33
|
}),
|
|
32
34
|
PFrame: service()({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service_declarations.js","names":[],"sources":["../../src/services/service_declarations.ts"],"sourcesContent":["/**\n * Service declarations — add new services here.\n *\n * `modelMethods` / `uiMethods` lists are the single source of truth for\n * method names exposed on each side. They drive SERVICE_METHOD_MAP (UI\n * ServiceProxy forwarders) and MODEL_SERVICE_METHOD_MAP (workflow VM\n * bridge), so node/main/wasm split no longer needs introspection stubs.\n *\n * After adding a service, fix type errors in these files:\n *\n * Model side:\n * - lib/node/pl-middle-layer/src/js_render/service_injectors.ts — VM bridge for workflow scripts\n * - lib/node/pl-middle-layer/src/middle_layer/middle_layer.ts — ModelServiceRegistry factory\n *\n * UI side:\n * - lib/model/common/src/services/node_service_handlers.ts — driver method wrappers (node services only)\n * - sdk/ui-vue/src/internal/createAppV3.ts — UiServiceRegistry factory\n *\n * Electron main side (only for `main` services):\n * - platforma-desktop-app/packages/main/src/services/mainServices.ts — main-process dispatcher\n *\n * Optional:\n * - sdk/model/src/services/block_service_flags.ts — only if default-required by all blocks\n */\n\nimport type { DialogService } from \"../dialog\";\nimport type { PFrameDriver, PFrameModelDriver } from \"../drivers/pframe/driver\";\nimport type { PFrameSpecDriver } from \"../drivers/pframe/spec_driver\";\nimport { service } from \"./service_types\";\n\nexport const Services = {\n PFrameSpec: service<PFrameSpecDriver, PFrameSpecDriver>()({\n type: \"wasm\",\n name: \"pframeSpec\",\n modelMethods: [\n \"createSpecFrame\",\n \"listColumns\",\n \"discoverColumns\",\n \"deleteColumn\",\n \"evaluateQuery\",\n \"buildQuery\",\n \"expandAxes\",\n \"collapseAxes\",\n \"findAxis\",\n \"findTableColumn\",\n ] as const,\n uiMethods: [\n \"createSpecFrame\",\n \"listColumns\",\n \"discoverColumns\",\n \"deleteColumn\",\n \"evaluateQuery\",\n \"buildQuery\",\n \"expandAxes\",\n \"collapseAxes\",\n \"findAxis\",\n \"findTableColumn\",\n ] as const,\n }),\n PFrame: service<PFrameModelDriver, PFrameDriver>()({\n type: \"node\",\n name: \"pframe\",\n modelMethods: [\"createPFrame\", \"createPTable\", \"createPTableV2\"] as const,\n uiMethods: [\n \"findColumns\",\n \"getColumnSpec\",\n \"listColumns\",\n \"calculateTableData\",\n \"getUniqueValues\",\n \"getShape\",\n \"getSpec\",\n \"getData\",\n \"writePTableToFs\",\n ] as const,\n }),\n Dialog: service<Record<string, never>, DialogService>()({\n type: \"main\",\n name: \"dialog\",\n modelMethods: [] as const,\n uiMethods: [\"showSaveDialog\"] as const,\n }),\n};\n"],"mappings":";;AA8BA,MAAa,WAAW;CACtB,YAAY,SAA6C,CAAC;EACxD,MAAM;EACN,MAAM;EACN,cAAc;GACZ;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACD;EACD,WAAW;GACT;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACD;EACF,CAAC;CACF,QAAQ,SAA0C,CAAC;EACjD,MAAM;EACN,MAAM;EACN,cAAc;GAAC;GAAgB;GAAgB;GAAiB;EAChE,WAAW;GACT;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACD;EACF,CAAC;CACF,QAAQ,SAA+C,CAAC;EACtD,MAAM;EACN,MAAM;EACN,cAAc,EAAE;EAChB,WAAW,CAAC,iBAAiB;EAC9B,CAAC;CACH"}
|
|
1
|
+
{"version":3,"file":"service_declarations.js","names":[],"sources":["../../src/services/service_declarations.ts"],"sourcesContent":["/**\n * Service declarations — add new services here.\n *\n * `modelMethods` / `uiMethods` lists are the single source of truth for\n * method names exposed on each side. They drive SERVICE_METHOD_MAP (UI\n * ServiceProxy forwarders) and MODEL_SERVICE_METHOD_MAP (workflow VM\n * bridge), so node/main/wasm split no longer needs introspection stubs.\n *\n * After adding a service, fix type errors in these files:\n *\n * Model side:\n * - lib/node/pl-middle-layer/src/js_render/service_injectors.ts — VM bridge for workflow scripts\n * - lib/node/pl-middle-layer/src/middle_layer/middle_layer.ts — ModelServiceRegistry factory\n *\n * UI side:\n * - lib/model/common/src/services/node_service_handlers.ts — driver method wrappers (node services only)\n * - sdk/ui-vue/src/internal/createAppV3.ts — UiServiceRegistry factory\n *\n * Electron main side (only for `main` services):\n * - platforma-desktop-app/packages/main/src/services/mainServices.ts — main-process dispatcher\n *\n * Optional:\n * - sdk/model/src/services/block_service_flags.ts — only if default-required by all blocks\n */\n\nimport type { DialogService } from \"../dialog\";\nimport type { PFrameDriver, PFrameModelDriver } from \"../drivers/pframe/driver\";\nimport type { PFrameSpecDriver } from \"../drivers/pframe/spec_driver\";\nimport { service } from \"./service_types\";\n\nexport const Services = {\n PFrameSpec: service<PFrameSpecDriver, PFrameSpecDriver>()({\n type: \"wasm\",\n name: \"pframeSpec\",\n modelMethods: [\n \"createSpecFrame\",\n \"listColumns\",\n \"discoverColumns\",\n \"deleteColumn\",\n \"evaluateQuery\",\n \"buildQuery\",\n \"expandAxes\",\n \"collapseAxes\",\n \"findAxis\",\n \"findTableColumn\",\n \"rewriteLegacyFilters\",\n ] as const,\n uiMethods: [\n \"createSpecFrame\",\n \"listColumns\",\n \"discoverColumns\",\n \"deleteColumn\",\n \"evaluateQuery\",\n \"buildQuery\",\n \"expandAxes\",\n \"collapseAxes\",\n \"findAxis\",\n \"findTableColumn\",\n \"rewriteLegacyFilters\",\n ] as const,\n }),\n PFrame: service<PFrameModelDriver, PFrameDriver>()({\n type: \"node\",\n name: \"pframe\",\n modelMethods: [\"createPFrame\", \"createPTable\", \"createPTableV2\"] as const,\n uiMethods: [\n \"findColumns\",\n \"getColumnSpec\",\n \"listColumns\",\n \"calculateTableData\",\n \"getUniqueValues\",\n \"getShape\",\n \"getSpec\",\n \"getData\",\n \"writePTableToFs\",\n ] as const,\n }),\n Dialog: service<Record<string, never>, DialogService>()({\n type: \"main\",\n name: \"dialog\",\n modelMethods: [] as const,\n uiMethods: [\"showSaveDialog\"] as const,\n }),\n};\n"],"mappings":";;AA8BA,MAAa,WAAW;CACtB,YAAY,SAA6C,CAAC;EACxD,MAAM;EACN,MAAM;EACN,cAAc;GACZ;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACD;EACD,WAAW;GACT;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACD;EACF,CAAC;CACF,QAAQ,SAA0C,CAAC;EACjD,MAAM;EACN,MAAM;EACN,cAAc;GAAC;GAAgB;GAAgB;GAAiB;EAChE,WAAW;GACT;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACD;EACF,CAAC;CACF,QAAQ,SAA+C,CAAC;EACtD,MAAM;EACN,MAAM;EACN,cAAc,EAAE;EAChB,WAAW,CAAC,iBAAiB;EAC9B,CAAC;CACH"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@milaboratories/pl-model-common",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.43.0",
|
|
4
4
|
"description": "Platforma SDK Model",
|
|
5
5
|
"files": [
|
|
6
6
|
"./dist/**/*",
|
|
@@ -26,9 +26,9 @@
|
|
|
26
26
|
"@vitest/coverage-istanbul": "^4.1.3",
|
|
27
27
|
"typescript": "~5.9.3",
|
|
28
28
|
"vitest": "^4.1.3",
|
|
29
|
-
"@milaboratories/
|
|
30
|
-
"@milaboratories/ts-builder": "1.
|
|
31
|
-
"@milaboratories/
|
|
29
|
+
"@milaboratories/ts-configs": "1.2.3",
|
|
30
|
+
"@milaboratories/ts-builder": "1.5.0",
|
|
31
|
+
"@milaboratories/build-configs": "2.0.0"
|
|
32
32
|
},
|
|
33
33
|
"scripts": {
|
|
34
34
|
"build": "ts-builder build --target node",
|