@milaboratories/pl-model-common 1.46.4 → 1.47.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (178) hide show
  1. package/dist/columns/accessor_traversal.cjs +119 -0
  2. package/dist/columns/accessor_traversal.cjs.map +1 -0
  3. package/dist/columns/accessor_traversal.d.ts +52 -0
  4. package/dist/columns/accessor_traversal.d.ts.map +1 -0
  5. package/dist/columns/accessor_traversal.js +114 -0
  6. package/dist/columns/accessor_traversal.js.map +1 -0
  7. package/dist/columns/column_registry.cjs +40 -0
  8. package/dist/columns/column_registry.cjs.map +1 -0
  9. package/dist/columns/column_registry.d.ts +31 -0
  10. package/dist/columns/column_registry.d.ts.map +1 -0
  11. package/dist/columns/column_registry.js +40 -0
  12. package/dist/columns/column_registry.js.map +1 -0
  13. package/dist/columns/column_selector.cjs +49 -0
  14. package/dist/columns/column_selector.cjs.map +1 -0
  15. package/dist/columns/column_selector.d.ts +33 -0
  16. package/dist/columns/column_selector.d.ts.map +1 -0
  17. package/dist/columns/column_selector.js +47 -0
  18. package/dist/columns/column_selector.js.map +1 -0
  19. package/dist/columns/dedup.cjs +47 -0
  20. package/dist/columns/dedup.cjs.map +1 -0
  21. package/dist/columns/dedup.d.ts +27 -0
  22. package/dist/columns/dedup.d.ts.map +1 -0
  23. package/dist/columns/dedup.js +47 -0
  24. package/dist/columns/dedup.js.map +1 -0
  25. package/dist/columns/index.cjs +18 -0
  26. package/dist/columns/index.d.ts +8 -0
  27. package/dist/columns/index.js +6 -0
  28. package/dist/columns/providers.cjs +62 -0
  29. package/dist/columns/providers.cjs.map +1 -0
  30. package/dist/columns/providers.d.ts +39 -0
  31. package/dist/columns/providers.d.ts.map +1 -0
  32. package/dist/columns/providers.js +61 -0
  33. package/dist/columns/providers.js.map +1 -0
  34. package/dist/columns/types.d.ts +108 -0
  35. package/dist/columns/types.d.ts.map +1 -0
  36. package/dist/driver_kit.d.ts +1 -2
  37. package/dist/driver_kit.d.ts.map +1 -1
  38. package/dist/drivers/columns/columns_collection_driver.d.ts +124 -0
  39. package/dist/drivers/columns/columns_collection_driver.d.ts.map +1 -0
  40. package/dist/drivers/columns/discover_columns_options.cjs +28 -0
  41. package/dist/drivers/columns/discover_columns_options.cjs.map +1 -0
  42. package/dist/drivers/columns/discover_columns_options.d.ts +64 -0
  43. package/dist/drivers/columns/discover_columns_options.d.ts.map +1 -0
  44. package/dist/drivers/columns/discover_columns_options.js +28 -0
  45. package/dist/drivers/columns/discover_columns_options.js.map +1 -0
  46. package/dist/drivers/columns/index.d.ts +3 -0
  47. package/dist/drivers/index.cjs +32 -7
  48. package/dist/drivers/index.d.ts +12 -9
  49. package/dist/drivers/index.js +6 -4
  50. package/dist/drivers/pframe/driver.d.ts +1 -2
  51. package/dist/drivers/pframe/driver.d.ts.map +1 -1
  52. package/dist/drivers/pframe/index.cjs +30 -7
  53. package/dist/drivers/pframe/index.d.ts +9 -8
  54. package/dist/drivers/pframe/index.js +5 -4
  55. package/dist/drivers/pframe/query/index.d.ts +2 -2
  56. package/dist/drivers/pframe/query/query_common.d.ts +24 -1
  57. package/dist/drivers/pframe/query/query_common.d.ts.map +1 -1
  58. package/dist/drivers/pframe/query/query_spec.d.ts +25 -24
  59. package/dist/drivers/pframe/query/query_spec.d.ts.map +1 -1
  60. package/dist/drivers/pframe/query/utils.cjs +18 -8
  61. package/dist/drivers/pframe/query/utils.cjs.map +1 -1
  62. package/dist/drivers/pframe/query/utils.d.ts +5 -1
  63. package/dist/drivers/pframe/query/utils.d.ts.map +1 -1
  64. package/dist/drivers/pframe/query/utils.js +18 -8
  65. package/dist/drivers/pframe/query/utils.js.map +1 -1
  66. package/dist/drivers/pframe/spec/anchored.d.ts +2 -2
  67. package/dist/drivers/pframe/spec/discovered_column.cjs +31 -15
  68. package/dist/drivers/pframe/spec/discovered_column.cjs.map +1 -1
  69. package/dist/drivers/pframe/spec/discovered_column.d.ts +23 -13
  70. package/dist/drivers/pframe/spec/discovered_column.d.ts.map +1 -1
  71. package/dist/drivers/pframe/spec/discovered_column.js +26 -12
  72. package/dist/drivers/pframe/spec/discovered_column.js.map +1 -1
  73. package/dist/drivers/pframe/spec/filtered_column.cjs +46 -0
  74. package/dist/drivers/pframe/spec/filtered_column.cjs.map +1 -1
  75. package/dist/drivers/pframe/spec/filtered_column.d.ts +39 -1
  76. package/dist/drivers/pframe/spec/filtered_column.d.ts.map +1 -1
  77. package/dist/drivers/pframe/spec/filtered_column.js +41 -1
  78. package/dist/drivers/pframe/spec/filtered_column.js.map +1 -1
  79. package/dist/drivers/pframe/spec/ids.cjs +62 -10
  80. package/dist/drivers/pframe/spec/ids.cjs.map +1 -1
  81. package/dist/drivers/pframe/spec/ids.d.ts +48 -15
  82. package/dist/drivers/pframe/spec/ids.d.ts.map +1 -1
  83. package/dist/drivers/pframe/spec/ids.js +60 -9
  84. package/dist/drivers/pframe/spec/ids.js.map +1 -1
  85. package/dist/drivers/pframe/spec/index.cjs +30 -7
  86. package/dist/drivers/pframe/spec/index.d.ts +6 -5
  87. package/dist/drivers/pframe/spec/index.js +5 -4
  88. package/dist/drivers/pframe/spec/native_id.cjs +1 -0
  89. package/dist/drivers/pframe/spec/native_id.cjs.map +1 -1
  90. package/dist/drivers/pframe/spec/native_id.js +1 -0
  91. package/dist/drivers/pframe/spec/native_id.js.map +1 -1
  92. package/dist/drivers/pframe/spec/overridden.cjs +212 -0
  93. package/dist/drivers/pframe/spec/overridden.cjs.map +1 -0
  94. package/dist/drivers/pframe/spec/overridden.d.ts +67 -0
  95. package/dist/drivers/pframe/spec/overridden.d.ts.map +1 -0
  96. package/dist/drivers/pframe/spec/overridden.js +202 -0
  97. package/dist/drivers/pframe/spec/overridden.js.map +1 -0
  98. package/dist/drivers/pframe/spec/selectors.cjs +1 -0
  99. package/dist/drivers/pframe/spec/selectors.cjs.map +1 -1
  100. package/dist/drivers/pframe/spec/selectors.d.ts +3 -0
  101. package/dist/drivers/pframe/spec/selectors.d.ts.map +1 -1
  102. package/dist/drivers/pframe/spec/selectors.js +1 -0
  103. package/dist/drivers/pframe/spec/selectors.js.map +1 -1
  104. package/dist/drivers/pframe/spec/spec.cjs.map +1 -1
  105. package/dist/drivers/pframe/spec/spec.d.ts +2 -3
  106. package/dist/drivers/pframe/spec/spec.d.ts.map +1 -1
  107. package/dist/drivers/pframe/spec/spec.js.map +1 -1
  108. package/dist/drivers/pframe/spec_driver.d.ts +2 -2
  109. package/dist/drivers/pframe/spec_driver.d.ts.map +1 -1
  110. package/dist/drivers/pframe/table_calculate.cjs +2 -2
  111. package/dist/drivers/pframe/table_calculate.cjs.map +1 -1
  112. package/dist/drivers/pframe/table_calculate.d.ts +6 -2
  113. package/dist/drivers/pframe/table_calculate.d.ts.map +1 -1
  114. package/dist/drivers/pframe/table_calculate.js +2 -2
  115. package/dist/drivers/pframe/table_calculate.js.map +1 -1
  116. package/dist/drivers/pframe/table_common.cjs.map +1 -1
  117. package/dist/drivers/pframe/table_common.d.ts +11 -4
  118. package/dist/drivers/pframe/table_common.d.ts.map +1 -1
  119. package/dist/drivers/pframe/table_common.js.map +1 -1
  120. package/dist/index.cjs +63 -10
  121. package/dist/index.d.ts +20 -11
  122. package/dist/index.js +15 -6
  123. package/dist/pool/index.cjs +18 -0
  124. package/dist/pool/index.d.ts +2 -2
  125. package/dist/pool/index.js +3 -0
  126. package/dist/pool/spec.cjs +59 -11
  127. package/dist/pool/spec.cjs.map +1 -1
  128. package/dist/pool/spec.d.ts +24 -9
  129. package/dist/pool/spec.d.ts.map +1 -1
  130. package/dist/pool/spec.js +50 -10
  131. package/dist/pool/spec.js.map +1 -1
  132. package/dist/services/index.d.ts +2 -2
  133. package/dist/services/service_declarations.cjs +22 -0
  134. package/dist/services/service_declarations.cjs.map +1 -1
  135. package/dist/services/service_declarations.d.ts +5 -3
  136. package/dist/services/service_declarations.d.ts.map +1 -1
  137. package/dist/services/service_declarations.js +22 -0
  138. package/dist/services/service_declarations.js.map +1 -1
  139. package/dist/services/service_registry.cjs.map +1 -1
  140. package/dist/services/service_registry.d.ts +3 -3
  141. package/dist/services/service_registry.d.ts.map +1 -1
  142. package/dist/services/service_registry.js.map +1 -1
  143. package/dist/services/service_types.cjs.map +1 -1
  144. package/dist/services/service_types.d.ts +25 -9
  145. package/dist/services/service_types.d.ts.map +1 -1
  146. package/dist/services/service_types.js.map +1 -1
  147. package/package.json +2 -1
  148. package/src/columns/accessor_traversal.ts +139 -0
  149. package/src/columns/column_registry.ts +41 -0
  150. package/src/columns/column_selector.ts +100 -0
  151. package/src/columns/dedup.ts +49 -0
  152. package/src/columns/index.ts +6 -0
  153. package/src/columns/providers.ts +74 -0
  154. package/src/columns/types.ts +116 -0
  155. package/src/drivers/columns/columns_collection_driver.ts +146 -0
  156. package/src/drivers/columns/discover_columns_options.ts +91 -0
  157. package/src/drivers/columns/index.ts +2 -0
  158. package/src/drivers/index.ts +1 -0
  159. package/src/drivers/pframe/index.ts +0 -1
  160. package/src/drivers/pframe/query/query_common.ts +24 -0
  161. package/src/drivers/pframe/query/query_spec.ts +38 -25
  162. package/src/drivers/pframe/query/utils.test.ts +6 -6
  163. package/src/drivers/pframe/query/utils.ts +27 -7
  164. package/src/drivers/pframe/spec/discovered_column.ts +43 -28
  165. package/src/drivers/pframe/spec/filtered_column.ts +66 -0
  166. package/src/drivers/pframe/spec/ids.ts +142 -17
  167. package/src/drivers/pframe/spec/index.ts +1 -0
  168. package/src/drivers/pframe/spec/overridden.ts +285 -0
  169. package/src/drivers/pframe/spec/selectors.ts +3 -0
  170. package/src/drivers/pframe/spec/spec.ts +7 -3
  171. package/src/drivers/pframe/spec_driver.ts +3 -3
  172. package/src/drivers/pframe/table_calculate.ts +13 -3
  173. package/src/drivers/pframe/table_common.ts +10 -3
  174. package/src/index.ts +1 -0
  175. package/src/pool/spec.ts +69 -23
  176. package/src/services/service_declarations.ts +31 -0
  177. package/src/services/service_registry.ts +8 -4
  178. package/src/services/service_types.ts +35 -9
@@ -0,0 +1,47 @@
1
+ const require_spec = require("../pool/spec.cjs");
2
+ require("../pool/index.cjs");
3
+ const require_native_id = require("../drivers/pframe/spec/native_id.cjs");
4
+ //#region src/columns/dedup.ts
5
+ /**
6
+ * Two-track dedup over an item stream keyed by `ColumnUniversalId`:
7
+ *
8
+ * - **Raw `PObjectId`s** are deduped by `deriveNativeId(spec)`. The same
9
+ * physical column reached via outputs vs. result_pool has different
10
+ * id shapes but identical nativeId — first occurrence wins so the
11
+ * provider order (outputs before pool) decides which id is canonical.
12
+ * - **Non-`PObjectId` ids** (e.g. `SUniversalPColumnUniversalId`,
13
+ * `ColumnDiscoveredId`) keep raw-id dedup — they legitimately share
14
+ * nativeId with siblings.
15
+ *
16
+ * When `getSpec` returns `undefined` for a `PObjectId`, falls back to raw-id
17
+ * dedup (so an unresolvable id still survives instead of dropping silently).
18
+ *
19
+ * Shared by sandbox-side `extractColumns` (column_providers) and host-side
20
+ * `ColumnsCollectionDriverImpl.getColumns` — both layers need identical
21
+ * dedup semantics, but operate on different concrete item types (ColumnLazy
22
+ * vs. raw ColumnUniversalId).
23
+ */
24
+ function dedupColumns(items, getId, getSpec) {
25
+ const seenNative = /* @__PURE__ */ new Set();
26
+ const seenId = /* @__PURE__ */ new Set();
27
+ const out = [];
28
+ for (const item of items) {
29
+ const id = getId(item);
30
+ if (seenId.has(id)) continue;
31
+ if (require_spec.isPObjectId(id)) {
32
+ const spec = getSpec(item);
33
+ if (spec !== void 0) {
34
+ const nativeId = require_native_id.deriveNativeId(spec);
35
+ if (seenNative.has(nativeId)) continue;
36
+ seenNative.add(nativeId);
37
+ }
38
+ }
39
+ seenId.add(id);
40
+ out.push(item);
41
+ }
42
+ return out;
43
+ }
44
+ //#endregion
45
+ exports.dedupColumns = dedupColumns;
46
+
47
+ //# sourceMappingURL=dedup.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dedup.cjs","names":["isPObjectId","deriveNativeId"],"sources":["../../src/columns/dedup.ts"],"sourcesContent":["import type { PColumnSpec } from \"../drivers/pframe/spec/spec\";\nimport type { NativePObjectId } from \"../drivers/pframe/spec/native_id\";\nimport { deriveNativeId } from \"../drivers/pframe/spec/native_id\";\nimport type { ColumnUniversalId } from \"../drivers/pframe/spec/ids\";\nimport { isPObjectId } from \"../pool\";\n\n/**\n * Two-track dedup over an item stream keyed by `ColumnUniversalId`:\n *\n * - **Raw `PObjectId`s** are deduped by `deriveNativeId(spec)`. The same\n * physical column reached via outputs vs. result_pool has different\n * id shapes but identical nativeId — first occurrence wins so the\n * provider order (outputs before pool) decides which id is canonical.\n * - **Non-`PObjectId` ids** (e.g. `SUniversalPColumnUniversalId`,\n * `ColumnDiscoveredId`) keep raw-id dedup — they legitimately share\n * nativeId with siblings.\n *\n * When `getSpec` returns `undefined` for a `PObjectId`, falls back to raw-id\n * dedup (so an unresolvable id still survives instead of dropping silently).\n *\n * Shared by sandbox-side `extractColumns` (column_providers) and host-side\n * `ColumnsCollectionDriverImpl.getColumns` — both layers need identical\n * dedup semantics, but operate on different concrete item types (ColumnLazy\n * vs. raw ColumnUniversalId).\n */\nexport function dedupColumns<T>(\n items: ReadonlyArray<T>,\n getId: (item: T) => ColumnUniversalId,\n getSpec: (item: T) => PColumnSpec | undefined,\n): T[] {\n const seenNative = new Set<NativePObjectId>();\n const seenId = new Set<ColumnUniversalId>();\n const out: T[] = [];\n for (const item of items) {\n const id = getId(item);\n if (seenId.has(id)) continue;\n if (isPObjectId(id)) {\n const spec = getSpec(item);\n if (spec !== undefined) {\n const nativeId = deriveNativeId(spec);\n if (seenNative.has(nativeId)) continue;\n seenNative.add(nativeId);\n }\n }\n seenId.add(id);\n out.push(item);\n }\n return out;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAyBA,SAAgB,aACd,OACA,OACA,SACK;CACL,MAAM,6BAAa,IAAI,IAAqB;CAC5C,MAAM,yBAAS,IAAI,IAAuB;CAC1C,MAAM,MAAW,CAAC;CAClB,KAAK,MAAM,QAAQ,OAAO;EACxB,MAAM,KAAK,MAAM,IAAI;EACrB,IAAI,OAAO,IAAI,EAAE,GAAG;EACpB,IAAIA,aAAAA,YAAY,EAAE,GAAG;GACnB,MAAM,OAAO,QAAQ,IAAI;GACzB,IAAI,SAAS,KAAA,GAAW;IACtB,MAAM,WAAWC,kBAAAA,eAAe,IAAI;IACpC,IAAI,WAAW,IAAI,QAAQ,GAAG;IAC9B,WAAW,IAAI,QAAQ;GACzB;EACF;EACA,OAAO,IAAI,EAAE;EACb,IAAI,KAAK,IAAI;CACf;CACA,OAAO;AACT"}
@@ -0,0 +1,27 @@
1
+ import { PColumnSpec } from "../drivers/pframe/spec/spec.js";
2
+ import { ColumnUniversalId } from "../drivers/pframe/spec/ids.js";
3
+
4
+ //#region src/columns/dedup.d.ts
5
+ /**
6
+ * Two-track dedup over an item stream keyed by `ColumnUniversalId`:
7
+ *
8
+ * - **Raw `PObjectId`s** are deduped by `deriveNativeId(spec)`. The same
9
+ * physical column reached via outputs vs. result_pool has different
10
+ * id shapes but identical nativeId — first occurrence wins so the
11
+ * provider order (outputs before pool) decides which id is canonical.
12
+ * - **Non-`PObjectId` ids** (e.g. `SUniversalPColumnUniversalId`,
13
+ * `ColumnDiscoveredId`) keep raw-id dedup — they legitimately share
14
+ * nativeId with siblings.
15
+ *
16
+ * When `getSpec` returns `undefined` for a `PObjectId`, falls back to raw-id
17
+ * dedup (so an unresolvable id still survives instead of dropping silently).
18
+ *
19
+ * Shared by sandbox-side `extractColumns` (column_providers) and host-side
20
+ * `ColumnsCollectionDriverImpl.getColumns` — both layers need identical
21
+ * dedup semantics, but operate on different concrete item types (ColumnLazy
22
+ * vs. raw ColumnUniversalId).
23
+ */
24
+ declare function dedupColumns<T>(items: ReadonlyArray<T>, getId: (item: T) => ColumnUniversalId, getSpec: (item: T) => PColumnSpec | undefined): T[];
25
+ //#endregion
26
+ export { dedupColumns };
27
+ //# sourceMappingURL=dedup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dedup.d.ts","names":[],"sources":["../../src/columns/dedup.ts"],"mappings":";;;;;;AAyBA;;;;;;;;;;;;;;;;;iBAAgB,YAAA,IACd,KAAA,EAAO,aAAA,CAAc,CAAA,GACrB,KAAA,GAAQ,IAAA,EAAM,CAAA,KAAM,iBAAA,EACpB,OAAA,GAAU,IAAA,EAAM,CAAA,KAAM,WAAA,eACrB,CAAA"}
@@ -0,0 +1,47 @@
1
+ import { isPObjectId } from "../pool/spec.js";
2
+ import "../pool/index.js";
3
+ import { deriveNativeId } from "../drivers/pframe/spec/native_id.js";
4
+ //#region src/columns/dedup.ts
5
+ /**
6
+ * Two-track dedup over an item stream keyed by `ColumnUniversalId`:
7
+ *
8
+ * - **Raw `PObjectId`s** are deduped by `deriveNativeId(spec)`. The same
9
+ * physical column reached via outputs vs. result_pool has different
10
+ * id shapes but identical nativeId — first occurrence wins so the
11
+ * provider order (outputs before pool) decides which id is canonical.
12
+ * - **Non-`PObjectId` ids** (e.g. `SUniversalPColumnUniversalId`,
13
+ * `ColumnDiscoveredId`) keep raw-id dedup — they legitimately share
14
+ * nativeId with siblings.
15
+ *
16
+ * When `getSpec` returns `undefined` for a `PObjectId`, falls back to raw-id
17
+ * dedup (so an unresolvable id still survives instead of dropping silently).
18
+ *
19
+ * Shared by sandbox-side `extractColumns` (column_providers) and host-side
20
+ * `ColumnsCollectionDriverImpl.getColumns` — both layers need identical
21
+ * dedup semantics, but operate on different concrete item types (ColumnLazy
22
+ * vs. raw ColumnUniversalId).
23
+ */
24
+ function dedupColumns(items, getId, getSpec) {
25
+ const seenNative = /* @__PURE__ */ new Set();
26
+ const seenId = /* @__PURE__ */ new Set();
27
+ const out = [];
28
+ for (const item of items) {
29
+ const id = getId(item);
30
+ if (seenId.has(id)) continue;
31
+ if (isPObjectId(id)) {
32
+ const spec = getSpec(item);
33
+ if (spec !== void 0) {
34
+ const nativeId = deriveNativeId(spec);
35
+ if (seenNative.has(nativeId)) continue;
36
+ seenNative.add(nativeId);
37
+ }
38
+ }
39
+ seenId.add(id);
40
+ out.push(item);
41
+ }
42
+ return out;
43
+ }
44
+ //#endregion
45
+ export { dedupColumns };
46
+
47
+ //# sourceMappingURL=dedup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dedup.js","names":[],"sources":["../../src/columns/dedup.ts"],"sourcesContent":["import type { PColumnSpec } from \"../drivers/pframe/spec/spec\";\nimport type { NativePObjectId } from \"../drivers/pframe/spec/native_id\";\nimport { deriveNativeId } from \"../drivers/pframe/spec/native_id\";\nimport type { ColumnUniversalId } from \"../drivers/pframe/spec/ids\";\nimport { isPObjectId } from \"../pool\";\n\n/**\n * Two-track dedup over an item stream keyed by `ColumnUniversalId`:\n *\n * - **Raw `PObjectId`s** are deduped by `deriveNativeId(spec)`. The same\n * physical column reached via outputs vs. result_pool has different\n * id shapes but identical nativeId — first occurrence wins so the\n * provider order (outputs before pool) decides which id is canonical.\n * - **Non-`PObjectId` ids** (e.g. `SUniversalPColumnUniversalId`,\n * `ColumnDiscoveredId`) keep raw-id dedup — they legitimately share\n * nativeId with siblings.\n *\n * When `getSpec` returns `undefined` for a `PObjectId`, falls back to raw-id\n * dedup (so an unresolvable id still survives instead of dropping silently).\n *\n * Shared by sandbox-side `extractColumns` (column_providers) and host-side\n * `ColumnsCollectionDriverImpl.getColumns` — both layers need identical\n * dedup semantics, but operate on different concrete item types (ColumnLazy\n * vs. raw ColumnUniversalId).\n */\nexport function dedupColumns<T>(\n items: ReadonlyArray<T>,\n getId: (item: T) => ColumnUniversalId,\n getSpec: (item: T) => PColumnSpec | undefined,\n): T[] {\n const seenNative = new Set<NativePObjectId>();\n const seenId = new Set<ColumnUniversalId>();\n const out: T[] = [];\n for (const item of items) {\n const id = getId(item);\n if (seenId.has(id)) continue;\n if (isPObjectId(id)) {\n const spec = getSpec(item);\n if (spec !== undefined) {\n const nativeId = deriveNativeId(spec);\n if (seenNative.has(nativeId)) continue;\n seenNative.add(nativeId);\n }\n }\n seenId.add(id);\n out.push(item);\n }\n return out;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAyBA,SAAgB,aACd,OACA,OACA,SACK;CACL,MAAM,6BAAa,IAAI,IAAqB;CAC5C,MAAM,yBAAS,IAAI,IAAuB;CAC1C,MAAM,MAAW,CAAC;CAClB,KAAK,MAAM,QAAQ,OAAO;EACxB,MAAM,KAAK,MAAM,IAAI;EACrB,IAAI,OAAO,IAAI,EAAE,GAAG;EACpB,IAAI,YAAY,EAAE,GAAG;GACnB,MAAM,OAAO,QAAQ,IAAI;GACzB,IAAI,SAAS,KAAA,GAAW;IACtB,MAAM,WAAW,eAAe,IAAI;IACpC,IAAI,WAAW,IAAI,QAAQ,GAAG;IAC9B,WAAW,IAAI,QAAQ;GACzB;EACF;EACA,OAAO,IAAI,EAAE;EACb,IAAI,KAAK,IAAI;CACf;CACA,OAAO;AACT"}
@@ -0,0 +1,18 @@
1
+ const require_accessor_traversal = require("./accessor_traversal.cjs");
2
+ const require_column_registry = require("./column_registry.cjs");
3
+ const require_column_selector = require("./column_selector.cjs");
4
+ const require_dedup = require("./dedup.cjs");
5
+ const require_providers = require("./providers.cjs");
6
+ exports.AccessorEntriesProvider = require_providers.AccessorEntriesProvider;
7
+ exports.COLLECT_TYPES = require_accessor_traversal.COLLECT_TYPES;
8
+ exports.ColumnRegistry = require_column_registry.ColumnRegistry;
9
+ exports.DESCEND_TYPES = require_accessor_traversal.DESCEND_TYPES;
10
+ exports.ResultPoolEntriesProvider = require_providers.ResultPoolEntriesProvider;
11
+ exports.convertColumnSelectorToMultiColumnSelector = require_column_selector.convertColumnSelectorToMultiColumnSelector;
12
+ exports.convertRelaxedAxisSelectorToMultiAxisSelector = require_column_selector.convertRelaxedAxisSelectorToMultiAxisSelector;
13
+ exports.convertRelaxedColumnSelectorToMultiColumnSelector = require_column_selector.convertRelaxedColumnSelectorToMultiColumnSelector;
14
+ exports.dedupColumns = require_dedup.dedupColumns;
15
+ exports.findDescendantsByType = require_accessor_traversal.findDescendantsByType;
16
+ exports.indexAccessorRoot = require_accessor_traversal.indexAccessorRoot;
17
+ exports.indexPoolBlock = require_accessor_traversal.indexPoolBlock;
18
+ exports.listColumnNames = require_accessor_traversal.listColumnNames;
@@ -0,0 +1,8 @@
1
+ import { StringMatcher } from "../drivers/pframe/spec_driver.js";
2
+ import { ColumnSelector, RelaxedAxisSelector, RelaxedColumnSelector, RelaxedRecord, RelaxedStringMatchers, convertColumnSelectorToMultiColumnSelector, convertRelaxedAxisSelectorToMultiAxisSelector, convertRelaxedColumnSelectorToMultiColumnSelector } from "./column_selector.js";
3
+ import { AccessorHandle, AccessorLike, ColumnEntriesProvider, FieldTraversalStepLike, LeafEntry, UpstreamBlockCtx } from "./types.js";
4
+ import { COLLECT_TYPES, DESCEND_TYPES, findDescendantsByType, indexAccessorRoot, indexPoolBlock, listColumnNames } from "./accessor_traversal.js";
5
+ import { ColumnRegistry } from "./column_registry.js";
6
+ import { dedupColumns } from "./dedup.js";
7
+ import { AccessorEntriesProvider, ResultPoolEntriesProvider } from "./providers.js";
8
+ export { AccessorEntriesProvider, AccessorHandle, AccessorLike, COLLECT_TYPES, ColumnEntriesProvider, ColumnRegistry, ColumnSelector, DESCEND_TYPES, FieldTraversalStepLike, LeafEntry, RelaxedAxisSelector, RelaxedColumnSelector, RelaxedRecord, RelaxedStringMatchers, ResultPoolEntriesProvider, UpstreamBlockCtx, convertColumnSelectorToMultiColumnSelector, convertRelaxedAxisSelectorToMultiAxisSelector, convertRelaxedColumnSelectorToMultiColumnSelector, dedupColumns, findDescendantsByType, indexAccessorRoot, indexPoolBlock, listColumnNames };
@@ -0,0 +1,6 @@
1
+ import { COLLECT_TYPES, DESCEND_TYPES, findDescendantsByType, indexAccessorRoot, indexPoolBlock, listColumnNames } from "./accessor_traversal.js";
2
+ import { ColumnRegistry } from "./column_registry.js";
3
+ import { convertColumnSelectorToMultiColumnSelector, convertRelaxedAxisSelectorToMultiAxisSelector, convertRelaxedColumnSelectorToMultiColumnSelector } from "./column_selector.js";
4
+ import { dedupColumns } from "./dedup.js";
5
+ import { AccessorEntriesProvider, ResultPoolEntriesProvider } from "./providers.js";
6
+ export { AccessorEntriesProvider, COLLECT_TYPES, ColumnRegistry, DESCEND_TYPES, ResultPoolEntriesProvider, convertColumnSelectorToMultiColumnSelector, convertRelaxedAxisSelectorToMultiAxisSelector, convertRelaxedColumnSelectorToMultiColumnSelector, dedupColumns, findDescendantsByType, indexAccessorRoot, indexPoolBlock, listColumnNames };
@@ -0,0 +1,62 @@
1
+ const require_accessor_traversal = require("./accessor_traversal.cjs");
2
+ //#region src/columns/providers.ts
3
+ /**
4
+ * Generic entries provider over a single accessor root. Walks `<root>` once
5
+ * from the supplied `rootPath`, builds an id → {@link LeafEntry} map and
6
+ * exposes `isFinal()` via the root's `getInputsLocked()`.
7
+ *
8
+ * Used directly on the host side; sandbox extends it with `getColumns()`
9
+ * returning {@link ColumnLazy}s — see `AccessorColumnsProvider` in
10
+ * `@platforma-sdk/model`.
11
+ */
12
+ var AccessorEntriesProvider = class {
13
+ root;
14
+ entries;
15
+ constructor(root, rootPath) {
16
+ this.root = root;
17
+ const map = /* @__PURE__ */ new Map();
18
+ for (const entry of require_accessor_traversal.indexAccessorRoot(root, rootPath)) if (!map.has(entry.id)) map.set(entry.id, entry);
19
+ this.entries = map;
20
+ }
21
+ getPObjectEntries() {
22
+ return this.entries;
23
+ }
24
+ isFinal() {
25
+ return this.root.getInputsLocked();
26
+ }
27
+ };
28
+ /**
29
+ * Generic entries provider over a list of upstream-block ctx pairs.
30
+ *
31
+ * Per-block merge: iterate `prod` then `staging`, dedupe by name with
32
+ * first-wins semantics (prod takes precedence).
33
+ *
34
+ * `isFinal()` is the AND of `getInputsLocked()` over every present ctx
35
+ * accessor and `!prodIncomplete && !stagingIncomplete` over every block.
36
+ */
37
+ var ResultPoolEntriesProvider = class {
38
+ blocks;
39
+ cachedEntries;
40
+ constructor(blocks) {
41
+ this.blocks = blocks;
42
+ }
43
+ getPObjectEntries() {
44
+ if (this.cachedEntries !== void 0) return this.cachedEntries;
45
+ const map = /* @__PURE__ */ new Map();
46
+ for (const block of this.blocks) for (const entry of require_accessor_traversal.indexPoolBlock(block)) if (!map.has(entry.id)) map.set(entry.id, entry);
47
+ return this.cachedEntries = map;
48
+ }
49
+ isFinal() {
50
+ for (const block of this.blocks) {
51
+ if (block.prodIncomplete || block.stagingIncomplete) return false;
52
+ if (block.prodCtx && !block.prodCtx.getInputsLocked()) return false;
53
+ if (block.stagingCtx && !block.stagingCtx.getInputsLocked()) return false;
54
+ }
55
+ return true;
56
+ }
57
+ };
58
+ //#endregion
59
+ exports.AccessorEntriesProvider = AccessorEntriesProvider;
60
+ exports.ResultPoolEntriesProvider = ResultPoolEntriesProvider;
61
+
62
+ //# sourceMappingURL=providers.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"providers.cjs","names":["indexAccessorRoot","indexPoolBlock"],"sources":["../../src/columns/providers.ts"],"sourcesContent":["import type { PObjectId } from \"../pool\";\nimport { indexAccessorRoot, indexPoolBlock } from \"./accessor_traversal\";\nimport type { AccessorLike, ColumnEntriesProvider, LeafEntry, UpstreamBlockCtx } from \"./types\";\n\n/**\n * Generic entries provider over a single accessor root. Walks `<root>` once\n * from the supplied `rootPath`, builds an id → {@link LeafEntry} map and\n * exposes `isFinal()` via the root's `getInputsLocked()`.\n *\n * Used directly on the host side; sandbox extends it with `getColumns()`\n * returning {@link ColumnLazy}s — see `AccessorColumnsProvider` in\n * `@platforma-sdk/model`.\n */\nexport class AccessorEntriesProvider<\n A extends AccessorLike<A>,\n> implements ColumnEntriesProvider<A> {\n protected readonly entries: ReadonlyMap<PObjectId, LeafEntry<A>>;\n\n constructor(\n protected readonly root: A,\n rootPath: ReadonlyArray<string>,\n ) {\n const map = new Map<PObjectId, LeafEntry<A>>();\n for (const entry of indexAccessorRoot(root, rootPath)) {\n if (!map.has(entry.id)) map.set(entry.id, entry);\n }\n this.entries = map;\n }\n\n getPObjectEntries(): ReadonlyMap<PObjectId, LeafEntry<A>> {\n return this.entries;\n }\n\n isFinal(): boolean {\n return this.root.getInputsLocked();\n }\n}\n\n/**\n * Generic entries provider over a list of upstream-block ctx pairs.\n *\n * Per-block merge: iterate `prod` then `staging`, dedupe by name with\n * first-wins semantics (prod takes precedence).\n *\n * `isFinal()` is the AND of `getInputsLocked()` over every present ctx\n * accessor and `!prodIncomplete && !stagingIncomplete` over every block.\n */\nexport class ResultPoolEntriesProvider<\n A extends AccessorLike<A>,\n> implements ColumnEntriesProvider<A> {\n protected cachedEntries?: ReadonlyMap<PObjectId, LeafEntry<A>>;\n\n constructor(protected readonly blocks: ReadonlyArray<UpstreamBlockCtx<A>>) {}\n\n getPObjectEntries(): ReadonlyMap<PObjectId, LeafEntry<A>> {\n if (this.cachedEntries !== undefined) return this.cachedEntries;\n const map = new Map<PObjectId, LeafEntry<A>>();\n for (const block of this.blocks) {\n for (const entry of indexPoolBlock(block)) {\n if (!map.has(entry.id)) map.set(entry.id, entry);\n }\n }\n return (this.cachedEntries = map);\n }\n\n isFinal(): boolean {\n for (const block of this.blocks) {\n if (block.prodIncomplete || block.stagingIncomplete) return false;\n if (block.prodCtx && !block.prodCtx.getInputsLocked()) return false;\n if (block.stagingCtx && !block.stagingCtx.getInputsLocked()) return false;\n }\n return true;\n }\n}\n"],"mappings":";;;;;;;;;;;AAaA,IAAa,0BAAb,MAEsC;CAIf;CAHrB;CAEA,YACE,MACA,UACA;EAFmB,KAAA,OAAA;EAGnB,MAAM,sBAAM,IAAI,IAA6B;EAC7C,KAAK,MAAM,SAASA,2BAAAA,kBAAkB,MAAM,QAAQ,GAClD,IAAI,CAAC,IAAI,IAAI,MAAM,EAAE,GAAG,IAAI,IAAI,MAAM,IAAI,KAAK;EAEjD,KAAK,UAAU;CACjB;CAEA,oBAA0D;EACxD,OAAO,KAAK;CACd;CAEA,UAAmB;EACjB,OAAO,KAAK,KAAK,gBAAgB;CACnC;AACF;;;;;;;;;;AAWA,IAAa,4BAAb,MAEsC;CAGL;CAF/B;CAEA,YAAY,QAA+D;EAA5C,KAAA,SAAA;CAA6C;CAE5E,oBAA0D;EACxD,IAAI,KAAK,kBAAkB,KAAA,GAAW,OAAO,KAAK;EAClD,MAAM,sBAAM,IAAI,IAA6B;EAC7C,KAAK,MAAM,SAAS,KAAK,QACvB,KAAK,MAAM,SAASC,2BAAAA,eAAe,KAAK,GACtC,IAAI,CAAC,IAAI,IAAI,MAAM,EAAE,GAAG,IAAI,IAAI,MAAM,IAAI,KAAK;EAGnD,OAAQ,KAAK,gBAAgB;CAC/B;CAEA,UAAmB;EACjB,KAAK,MAAM,SAAS,KAAK,QAAQ;GAC/B,IAAI,MAAM,kBAAkB,MAAM,mBAAmB,OAAO;GAC5D,IAAI,MAAM,WAAW,CAAC,MAAM,QAAQ,gBAAgB,GAAG,OAAO;GAC9D,IAAI,MAAM,cAAc,CAAC,MAAM,WAAW,gBAAgB,GAAG,OAAO;EACtE;EACA,OAAO;CACT;AACF"}
@@ -0,0 +1,39 @@
1
+ import { PObjectId } from "../pool/spec.js";
2
+ import { AccessorLike, ColumnEntriesProvider, LeafEntry, UpstreamBlockCtx } from "./types.js";
3
+
4
+ //#region src/columns/providers.d.ts
5
+ /**
6
+ * Generic entries provider over a single accessor root. Walks `<root>` once
7
+ * from the supplied `rootPath`, builds an id → {@link LeafEntry} map and
8
+ * exposes `isFinal()` via the root's `getInputsLocked()`.
9
+ *
10
+ * Used directly on the host side; sandbox extends it with `getColumns()`
11
+ * returning {@link ColumnLazy}s — see `AccessorColumnsProvider` in
12
+ * `@platforma-sdk/model`.
13
+ */
14
+ declare class AccessorEntriesProvider<A extends AccessorLike<A>> implements ColumnEntriesProvider<A> {
15
+ protected readonly root: A;
16
+ protected readonly entries: ReadonlyMap<PObjectId, LeafEntry<A>>;
17
+ constructor(root: A, rootPath: ReadonlyArray<string>);
18
+ getPObjectEntries(): ReadonlyMap<PObjectId, LeafEntry<A>>;
19
+ isFinal(): boolean;
20
+ }
21
+ /**
22
+ * Generic entries provider over a list of upstream-block ctx pairs.
23
+ *
24
+ * Per-block merge: iterate `prod` then `staging`, dedupe by name with
25
+ * first-wins semantics (prod takes precedence).
26
+ *
27
+ * `isFinal()` is the AND of `getInputsLocked()` over every present ctx
28
+ * accessor and `!prodIncomplete && !stagingIncomplete` over every block.
29
+ */
30
+ declare class ResultPoolEntriesProvider<A extends AccessorLike<A>> implements ColumnEntriesProvider<A> {
31
+ protected readonly blocks: ReadonlyArray<UpstreamBlockCtx<A>>;
32
+ protected cachedEntries?: ReadonlyMap<PObjectId, LeafEntry<A>>;
33
+ constructor(blocks: ReadonlyArray<UpstreamBlockCtx<A>>);
34
+ getPObjectEntries(): ReadonlyMap<PObjectId, LeafEntry<A>>;
35
+ isFinal(): boolean;
36
+ }
37
+ //#endregion
38
+ export { AccessorEntriesProvider, ResultPoolEntriesProvider };
39
+ //# sourceMappingURL=providers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"providers.d.ts","names":[],"sources":["../../src/columns/providers.ts"],"mappings":";;;;;;;AAaA;;;;;;cAAa,uBAAA,WACD,YAAA,CAAa,CAAA,cACZ,qBAAA,CAAsB,CAAA;EAAA,mBAIZ,IAAA,EAAM,CAAA;EAAA,mBAHR,OAAA,EAAS,WAAA,CAAY,SAAA,EAAW,SAAA,CAAU,CAAA;cAGxC,IAAA,EAAM,CAAA,EACzB,QAAA,EAAU,aAAA;EASZ,iBAAA,IAAqB,WAAA,CAAY,SAAA,EAAW,SAAA,CAAU,CAAA;EAItD,OAAA;AAAA;;;;;;;;;;cAcW,yBAAA,WACD,YAAA,CAAa,CAAA,cACZ,qBAAA,CAAsB,CAAA;EAAA,mBAGF,MAAA,EAAQ,aAAA,CAAc,gBAAA,CAAiB,CAAA;EAAA,UAF5D,aAAA,GAAgB,WAAA,CAAY,SAAA,EAAW,SAAA,CAAU,CAAA;cAE5B,MAAA,EAAQ,aAAA,CAAc,gBAAA,CAAiB,CAAA;EAEtE,iBAAA,IAAqB,WAAA,CAAY,SAAA,EAAW,SAAA,CAAU,CAAA;EAWtD,OAAA;AAAA"}
@@ -0,0 +1,61 @@
1
+ import { indexAccessorRoot, indexPoolBlock } from "./accessor_traversal.js";
2
+ //#region src/columns/providers.ts
3
+ /**
4
+ * Generic entries provider over a single accessor root. Walks `<root>` once
5
+ * from the supplied `rootPath`, builds an id → {@link LeafEntry} map and
6
+ * exposes `isFinal()` via the root's `getInputsLocked()`.
7
+ *
8
+ * Used directly on the host side; sandbox extends it with `getColumns()`
9
+ * returning {@link ColumnLazy}s — see `AccessorColumnsProvider` in
10
+ * `@platforma-sdk/model`.
11
+ */
12
+ var AccessorEntriesProvider = class {
13
+ root;
14
+ entries;
15
+ constructor(root, rootPath) {
16
+ this.root = root;
17
+ const map = /* @__PURE__ */ new Map();
18
+ for (const entry of indexAccessorRoot(root, rootPath)) if (!map.has(entry.id)) map.set(entry.id, entry);
19
+ this.entries = map;
20
+ }
21
+ getPObjectEntries() {
22
+ return this.entries;
23
+ }
24
+ isFinal() {
25
+ return this.root.getInputsLocked();
26
+ }
27
+ };
28
+ /**
29
+ * Generic entries provider over a list of upstream-block ctx pairs.
30
+ *
31
+ * Per-block merge: iterate `prod` then `staging`, dedupe by name with
32
+ * first-wins semantics (prod takes precedence).
33
+ *
34
+ * `isFinal()` is the AND of `getInputsLocked()` over every present ctx
35
+ * accessor and `!prodIncomplete && !stagingIncomplete` over every block.
36
+ */
37
+ var ResultPoolEntriesProvider = class {
38
+ blocks;
39
+ cachedEntries;
40
+ constructor(blocks) {
41
+ this.blocks = blocks;
42
+ }
43
+ getPObjectEntries() {
44
+ if (this.cachedEntries !== void 0) return this.cachedEntries;
45
+ const map = /* @__PURE__ */ new Map();
46
+ for (const block of this.blocks) for (const entry of indexPoolBlock(block)) if (!map.has(entry.id)) map.set(entry.id, entry);
47
+ return this.cachedEntries = map;
48
+ }
49
+ isFinal() {
50
+ for (const block of this.blocks) {
51
+ if (block.prodIncomplete || block.stagingIncomplete) return false;
52
+ if (block.prodCtx && !block.prodCtx.getInputsLocked()) return false;
53
+ if (block.stagingCtx && !block.stagingCtx.getInputsLocked()) return false;
54
+ }
55
+ return true;
56
+ }
57
+ };
58
+ //#endregion
59
+ export { AccessorEntriesProvider, ResultPoolEntriesProvider };
60
+
61
+ //# sourceMappingURL=providers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"providers.js","names":[],"sources":["../../src/columns/providers.ts"],"sourcesContent":["import type { PObjectId } from \"../pool\";\nimport { indexAccessorRoot, indexPoolBlock } from \"./accessor_traversal\";\nimport type { AccessorLike, ColumnEntriesProvider, LeafEntry, UpstreamBlockCtx } from \"./types\";\n\n/**\n * Generic entries provider over a single accessor root. Walks `<root>` once\n * from the supplied `rootPath`, builds an id → {@link LeafEntry} map and\n * exposes `isFinal()` via the root's `getInputsLocked()`.\n *\n * Used directly on the host side; sandbox extends it with `getColumns()`\n * returning {@link ColumnLazy}s — see `AccessorColumnsProvider` in\n * `@platforma-sdk/model`.\n */\nexport class AccessorEntriesProvider<\n A extends AccessorLike<A>,\n> implements ColumnEntriesProvider<A> {\n protected readonly entries: ReadonlyMap<PObjectId, LeafEntry<A>>;\n\n constructor(\n protected readonly root: A,\n rootPath: ReadonlyArray<string>,\n ) {\n const map = new Map<PObjectId, LeafEntry<A>>();\n for (const entry of indexAccessorRoot(root, rootPath)) {\n if (!map.has(entry.id)) map.set(entry.id, entry);\n }\n this.entries = map;\n }\n\n getPObjectEntries(): ReadonlyMap<PObjectId, LeafEntry<A>> {\n return this.entries;\n }\n\n isFinal(): boolean {\n return this.root.getInputsLocked();\n }\n}\n\n/**\n * Generic entries provider over a list of upstream-block ctx pairs.\n *\n * Per-block merge: iterate `prod` then `staging`, dedupe by name with\n * first-wins semantics (prod takes precedence).\n *\n * `isFinal()` is the AND of `getInputsLocked()` over every present ctx\n * accessor and `!prodIncomplete && !stagingIncomplete` over every block.\n */\nexport class ResultPoolEntriesProvider<\n A extends AccessorLike<A>,\n> implements ColumnEntriesProvider<A> {\n protected cachedEntries?: ReadonlyMap<PObjectId, LeafEntry<A>>;\n\n constructor(protected readonly blocks: ReadonlyArray<UpstreamBlockCtx<A>>) {}\n\n getPObjectEntries(): ReadonlyMap<PObjectId, LeafEntry<A>> {\n if (this.cachedEntries !== undefined) return this.cachedEntries;\n const map = new Map<PObjectId, LeafEntry<A>>();\n for (const block of this.blocks) {\n for (const entry of indexPoolBlock(block)) {\n if (!map.has(entry.id)) map.set(entry.id, entry);\n }\n }\n return (this.cachedEntries = map);\n }\n\n isFinal(): boolean {\n for (const block of this.blocks) {\n if (block.prodIncomplete || block.stagingIncomplete) return false;\n if (block.prodCtx && !block.prodCtx.getInputsLocked()) return false;\n if (block.stagingCtx && !block.stagingCtx.getInputsLocked()) return false;\n }\n return true;\n }\n}\n"],"mappings":";;;;;;;;;;;AAaA,IAAa,0BAAb,MAEsC;CAIf;CAHrB;CAEA,YACE,MACA,UACA;EAFmB,KAAA,OAAA;EAGnB,MAAM,sBAAM,IAAI,IAA6B;EAC7C,KAAK,MAAM,SAAS,kBAAkB,MAAM,QAAQ,GAClD,IAAI,CAAC,IAAI,IAAI,MAAM,EAAE,GAAG,IAAI,IAAI,MAAM,IAAI,KAAK;EAEjD,KAAK,UAAU;CACjB;CAEA,oBAA0D;EACxD,OAAO,KAAK;CACd;CAEA,UAAmB;EACjB,OAAO,KAAK,KAAK,gBAAgB;CACnC;AACF;;;;;;;;;;AAWA,IAAa,4BAAb,MAEsC;CAGL;CAF/B;CAEA,YAAY,QAA+D;EAA5C,KAAA,SAAA;CAA6C;CAE5E,oBAA0D;EACxD,IAAI,KAAK,kBAAkB,KAAA,GAAW,OAAO,KAAK;EAClD,MAAM,sBAAM,IAAI,IAA6B;EAC7C,KAAK,MAAM,SAAS,KAAK,QACvB,KAAK,MAAM,SAAS,eAAe,KAAK,GACtC,IAAI,CAAC,IAAI,IAAI,MAAM,EAAE,GAAG,IAAI,IAAI,MAAM,IAAI,KAAK;EAGnD,OAAQ,KAAK,gBAAgB;CAC/B;CAEA,UAAmB;EACjB,KAAK,MAAM,SAAS,KAAK,QAAQ;GAC/B,IAAI,MAAM,kBAAkB,MAAM,mBAAmB,OAAO;GAC5D,IAAI,MAAM,WAAW,CAAC,MAAM,QAAQ,gBAAgB,GAAG,OAAO;GAC9D,IAAI,MAAM,cAAc,CAAC,MAAM,WAAW,gBAAgB,GAAG,OAAO;EACtE;EACA,OAAO;CACT;AACF"}
@@ -0,0 +1,108 @@
1
+ import { Branded } from "../branding.js";
2
+ import { PObjectId } from "../pool/spec.js";
3
+ //#region src/columns/types.d.ts
4
+ /**
5
+ * Opaque sandbox/host accessor handle.
6
+ *
7
+ * Both the sandbox `TreeNodeAccessor.handle` and the host-issued accessor
8
+ * keys alias this brand — `sdk/model` re-exports the same type so the two
9
+ * sides stay structurally identical.
10
+ */
11
+ type AccessorHandle = Branded<string, "AccessorHandle">;
12
+ /**
13
+ * Structural subset of {@link FieldTraversalStep} (from `@platforma-sdk/model`)
14
+ * needed by the host/sandbox column-providers traversal.
15
+ *
16
+ * Defined locally so this module does not depend on the sandbox `render`
17
+ * subtree. Both `TreeNodeAccessor.traverse` (sandbox) and
18
+ * `PlTreeNodeAccessor.traverse` (host) accept a superset of these fields, so
19
+ * structural compatibility is preserved.
20
+ */
21
+ interface FieldTraversalStepLike {
22
+ /** Field name */
23
+ readonly field: string;
24
+ /** Asserted field type — used by `accessor.traverse` to validate. */
25
+ readonly assertFieldType?: "Input" | "Output" | "Service" | "OTW" | "Dynamic" | "MTW";
26
+ /** Don't terminate chain if current resource or field has an error associated. */
27
+ readonly ignoreError?: true;
28
+ }
29
+ /**
30
+ * Raw entry returned by {@link GlobalCfgRenderCtxMethods.getUpstreamBlockCtx}
31
+ * on the sandbox side, or by `collectUpstreamBlockCtx` on the host side.
32
+ * Carries handle ids only — providers wrap them into accessor instances as
33
+ * needed.
34
+ *
35
+ * Generic over the handle type so the same shape backs both:
36
+ * - sandbox (`AHandle = AccessorHandle`, a `Branded<string, "AccessorHandle">`)
37
+ * - host (`AHandle = PlTreeNodeAccessor`, the resolved accessor instance)
38
+ *
39
+ * Default `AHandle = string` since `AccessorHandle` is a brand on `string` —
40
+ * the default is safe for the sandbox case.
41
+ */
42
+ interface UpstreamBlockCtx<AHandle = string> {
43
+ blockId: string;
44
+ prodCtx?: AHandle;
45
+ stagingCtx?: AHandle;
46
+ /** True when the `prodCtx` ctx-holder exists but `prodUiCtx` is still rendering. */
47
+ prodIncomplete?: boolean;
48
+ /** True when the `stagingCtx` ctx-holder exists but `stagingUiCtx` is still rendering. */
49
+ stagingIncomplete?: boolean;
50
+ }
51
+ /**
52
+ * Minimal accessor surface used by column-providers / column-registry
53
+ * traversal.
54
+ *
55
+ * Both sandbox `TreeNodeAccessor` and host `PlTreeNodeAccessor` satisfy this
56
+ * contract directly — `traverse(step)` is defined on both, and the other
57
+ * members already match by shape. No `resolvePath` member: when canonical
58
+ * `PObjectId`s are required (local-id construction inside the
59
+ * outputs/prerun branch), the traversal helpers thread the path explicitly.
60
+ */
61
+ interface AccessorLike<Self extends AccessorLike<Self>> {
62
+ /** Resource type carried by the underlying node (only `.name` is used). */
63
+ readonly resourceType: {
64
+ readonly name: string;
65
+ };
66
+ /**
67
+ * Single-step field traversal. Returns `undefined` when the field is
68
+ * absent / unresolved (with `ignoreError`). Same shape on sandbox and host —
69
+ * sandbox `TreeNodeAccessor.traverse` is an alias for `resolveAny` and host
70
+ * `PlTreeNodeAccessor.traverse` is the canonical method.
71
+ */
72
+ traverse(step: FieldTraversalStepLike): Self | undefined;
73
+ /** List input-field names on this node. */
74
+ listInputFields(): string[];
75
+ /** Whether the input-field collection on this node is finalized. */
76
+ getInputsLocked(): boolean;
77
+ /** Whether this node has a data payload attached. */
78
+ hasData(): boolean;
79
+ /** Decode the data payload as JSON. Returns `undefined` if no data. */
80
+ getDataAsJson<T = unknown>(): T | undefined;
81
+ }
82
+ /**
83
+ * One indexed column — the canonical record produced by every traversal.
84
+ * Carries everything needed to read spec/data/status under a stable id.
85
+ *
86
+ * Generic over the accessor flavour so the same record shape works for both
87
+ * the sandbox `TreeNodeAccessor` and the host `PlTreeNodeAccessor`.
88
+ */
89
+ type LeafEntry<A extends AccessorLike<A>> = {
90
+ /** PFrame accessor that owns `<name>.spec` / `<name>.data` fields. */accessor: A; /** Field-name prefix inside the PFrame. */
91
+ name: string; /** Canonical id under which this column is reachable. */
92
+ id: PObjectId;
93
+ };
94
+ /**
95
+ * Base interface for id-indexed column providers — the surface
96
+ * {@link ColumnRegistry} consumes. Generic over the concrete accessor flavour
97
+ * so it can back both sandbox (`TreeNodeAccessor`) and host
98
+ * (`PlTreeNodeAccessor` adapter) registries.
99
+ */
100
+ interface ColumnEntriesProvider<A extends AccessorLike<A>> {
101
+ /** Map of canonical {@link PObjectId} → {@link LeafEntry} for every column reachable from this source. */
102
+ getPObjectEntries(): ReadonlyMap<PObjectId, LeafEntry<A>>;
103
+ /** Whether enumeration of columns from this source has finalised. */
104
+ isFinal(): boolean;
105
+ }
106
+ //#endregion
107
+ export { AccessorHandle, AccessorLike, ColumnEntriesProvider, FieldTraversalStepLike, LeafEntry, UpstreamBlockCtx };
108
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","names":[],"sources":["../../src/columns/types.ts"],"mappings":";;;;;;AAUA;;;;KAAY,cAAA,GAAiB,OAAO;AAWpC;;;;;;;;AAMsB;AANtB,UAAiB,sBAAA;EAsBgB;EAAA,SApBtB,KAAA;EAuBW;EAAA,SArBX,eAAA;EAmBT;EAAA,SAjBS,WAAA;AAAA;;;;;;AAuBQ;AAanB;;;;;;;UApBiB,gBAAA;EACf,OAAA;EACA,OAAA,GAAU,OAAA;EACV,UAAA,GAAa,OAAO;EAiBqB;EAfzC,cAAA;EAiBS;EAfT,iBAAA;AAAA;;;;;;;;;;;UAae,YAAA,cAA0B,YAAA,CAAa,IAAA;EAgC5C;EAAA,SA9BD,YAAA;IAAA,SAAyB,IAAA;EAAA;EA8BJ;;;;;;EAtB9B,QAAA,CAAS,IAAA,EAAM,sBAAA,GAAyB,IAAA;EAsBG;EAnB3C,eAAA;EAqBU;EAlBV,eAAA;EAsBA;EAnBA,OAAA;EAmBa;EAhBb,aAAA,iBAA8B,CAAA;AAAA;;;;;;;;KAUpB,SAAA,WAAoB,YAAA,CAAa,CAAA;EAiBX,sEAfhC,QAAA,EAAU,CAAA,EAa2B;EAXrC,IAAA,UAW4D;EAT5D,EAAA,EAAI,SAAA;AAAA;;;;;;AAaG;UAJQ,qBAAA,WAAgC,YAAA,CAAa,CAAA;;EAE5D,iBAAA,IAAqB,WAAA,CAAY,SAAA,EAAW,SAAA,CAAU,CAAA;;EAEtD,OAAA;AAAA"}
@@ -1,8 +1,7 @@
1
1
  import { BlobDriver } from "./drivers/blob.js";
2
2
  import { LogsDriver } from "./drivers/log.js";
3
- import { LsDriver } from "./drivers/ls.js";
4
3
  import { PFrameDriver } from "./drivers/pframe/driver.js";
5
-
4
+ import { LsDriver } from "./drivers/ls.js";
6
5
  //#region src/driver_kit.d.ts
7
6
  /** Set of all drivers exposed in UI SDK via the platforma object. */
8
7
  interface DriverKit {
@@ -1 +1 @@
1
- {"version":3,"file":"driver_kit.d.ts","names":[],"sources":["../src/driver_kit.ts"],"mappings":";;;;;;;UAGiB,SAAA;;WAEN,UAAA,EAAY,UAAA;;WAGZ,SAAA,EAAW,UAAA;EALL;;;;;;;;EAAA,SAeN,QAAA,EAAU,QAAA;EAbV;EAAA,SAgBA,YAAA,EAAc,YAAA;AAAA"}
1
+ {"version":3,"file":"driver_kit.d.ts","names":[],"sources":["../src/driver_kit.ts"],"mappings":";;;;;;UAGiB,SAAA;;WAEN,UAAA,EAAY,UAAA;;WAGZ,SAAA,EAAW,UAAA;EALL;;;;;;;;EAAA,SAeN,QAAA,EAAU,QAAA;EAbV;EAAA,SAgBA,YAAA,EAAc,YAAA;AAAA"}
@@ -0,0 +1,124 @@
1
+ import { Branded } from "../../branding.js";
2
+ import { PoolEntry } from "../../pool_entry.js";
3
+ import { PColumnSpec } from "../pframe/spec/spec.js";
4
+ import { ColumnUniversalId } from "../pframe/spec/ids.js";
5
+ import { PFrameSpecDriver } from "../pframe/spec_driver.js";
6
+ import { ColumnsDiscoverOptions, ColumnsFilterOptions } from "./discover_columns_options.js";
7
+ import { PObjectId } from "../../pool/spec.js";
8
+ import { AccessorHandle, AccessorLike, UpstreamBlockCtx } from "../../columns/types.js";
9
+
10
+ //#region src/drivers/columns/columns_collection_driver.d.ts
11
+ /**
12
+ * Opaque host-owned handle for a `ColumnsCollection` instance. Issued by
13
+ * {@link ColumnsCollectionDriver.create}, refcounted by the driver, and
14
+ * pinned to the active render ctx via the VM injector — sandbox never
15
+ * sees raw refcounting.
16
+ */
17
+ type CollectionHandle = Branded<string, "CollectionHandle">;
18
+ /**
19
+ * JSON descriptor crossing the VM bridge in place of a sandbox
20
+ * `ColumnsSource`. Always plain data — no closures, no class instances.
21
+ *
22
+ * - `"collection"` – reference another driver-managed collection by handle
23
+ * (chaining, splicing).
24
+ * - `"result_pool"` – fan-out into the host's current render ctx upstream
25
+ * block ctxes. Carries no payload — the host always uses its own pool.
26
+ * - `"accessor"` – walk the host tree starting at the given accessor
27
+ * handle from a `path` prefix.
28
+ * - `"ids"` – pre-resolved id list (sandbox-materialised provider).
29
+ */
30
+ type SerializedColumnsSource = {
31
+ readonly kind: "collection";
32
+ readonly handle: CollectionHandle;
33
+ } | {
34
+ readonly kind: "result_pool";
35
+ } | {
36
+ readonly kind: "accessor";
37
+ readonly accessor: AccessorHandle;
38
+ readonly path: string[];
39
+ } | {
40
+ readonly kind: "ids";
41
+ readonly ids: ColumnUniversalId[];
42
+ readonly isFinal: boolean;
43
+ };
44
+ /**
45
+ * Per-call host bindings the driver needs to resolve sources whose
46
+ * shape references render-ctx state (`"accessor"`, `"result_pool"`).
47
+ *
48
+ * The VM injector inside `pl-middle-layer` supplies these on every call;
49
+ * UI-side direct callers that only build collections out of `"ids"` /
50
+ * `"collection"` sources may omit the bindings entirely.
51
+ *
52
+ * Parameterised on the concrete accessor flavour so host implementations
53
+ * keep their static types (e.g. `PlTreeNodeAccessor`) without leaking that
54
+ * dependency into `@milaboratories/pl-model-common`.
55
+ */
56
+ interface ColumnsCollectionDriverHost<A extends AccessorLike<A> = AccessorLike<any>> {
57
+ /** Resolve an {@link AccessorHandle} to the host's concrete accessor. */
58
+ resolveAccessor(handle: AccessorHandle): A;
59
+ /** Snapshot of upstream-block ctx pairs from the current render ctx. */
60
+ getUpstreamBlockCtxes(): ReadonlyArray<UpstreamBlockCtx<A>>;
61
+ /**
62
+ * Per-call spec driver. The injector supplies the active render ctx's
63
+ * `PFrameSpec` service; `discover` / `filter` use it to build a spec
64
+ * frame and run a single discovery query.
65
+ */
66
+ getSpecDriver(): PFrameSpecDriver;
67
+ /**
68
+ * Resolve the canonical {@link PColumnSpec} for a leaf {@link PObjectId}.
69
+ * Returns `undefined` when the id is not present in the active registry
70
+ * (e.g. handed to the driver via a `{kind:"ids"}` source whose underlying
71
+ * column has since left the visible scope). Override-wrapped ids are
72
+ * unwrapped by the caller — this method only resolves the underlying leaf.
73
+ */
74
+ resolveSpec(id: PObjectId): PColumnSpec | undefined;
75
+ }
76
+ /**
77
+ * Sandbox / UI view of the `ColumnsCollection` driver. Same methods as
78
+ * {@link ColumnsCollectionDriver}, but the `host` parameters are dropped —
79
+ * the VM bridge / UI wrapper supplies them on every call so callers only
80
+ * pass plain data (handles + source descriptors + option objects).
81
+ *
82
+ * `getService("columnsCollection")` returns a value of this shape on both
83
+ * sandbox and UI sides.
84
+ */
85
+ interface ColumnsCollectionDriverModel {
86
+ /** Build a fresh collection from the supplied source descriptors. */
87
+ create(sources: ReadonlyArray<SerializedColumnsSource>): CollectionHandle;
88
+ /** Whether the collection currently exposes zero columns. */
89
+ isEmpty(handle: CollectionHandle): boolean;
90
+ /** Whether enumeration is finalised across every contributing source. */
91
+ isFinal(handle: CollectionHandle): boolean;
92
+ /** Canonical id list for the columns visible through this collection. */
93
+ getColumns(handle: CollectionHandle): ColumnUniversalId[];
94
+ /** Append one or more sources and return a fresh collection handle. */
95
+ addSource(handle: CollectionHandle, sources: ReadonlyArray<SerializedColumnsSource>): CollectionHandle;
96
+ /** Anchored/selector-driven discovery. Returns a fresh handle. */
97
+ discover(handle: CollectionHandle, options: ColumnsDiscoverOptions): CollectionHandle;
98
+ /** Selector-only filter (no anchor traversal). Returns a fresh handle. */
99
+ filter(handle: CollectionHandle, options: ColumnsFilterOptions): CollectionHandle;
100
+ }
101
+ /**
102
+ * Synchronous host-side driver for `ColumnsCollection` operations. All
103
+ * collection state lives on the host side, addressable through opaque
104
+ * {@link CollectionHandle}s. Every handle-minting method returns a
105
+ * {@link PoolEntry} so callers can wire the refcount into their own
106
+ * lifecycle; the VM bridge pins each entry to the active render ctx and
107
+ * forwards only the handle string to sandbox.
108
+ *
109
+ * Sandbox / UI callers consume {@link ColumnsCollectionDriverModel}
110
+ * instead; the bridge maps that surface onto this one by injecting
111
+ * {@link ColumnsCollectionDriverHost} bindings.
112
+ */
113
+ interface ColumnsCollectionDriver {
114
+ create(sources: ReadonlyArray<SerializedColumnsSource>, host: ColumnsCollectionDriverHost): PoolEntry<CollectionHandle>;
115
+ isEmpty(handle: CollectionHandle): boolean;
116
+ isFinal(handle: CollectionHandle): boolean;
117
+ getColumns(handle: CollectionHandle, host: ColumnsCollectionDriverHost): ColumnUniversalId[];
118
+ addSource(handle: CollectionHandle, sources: ReadonlyArray<SerializedColumnsSource>, host: ColumnsCollectionDriverHost): PoolEntry<CollectionHandle>;
119
+ discover(handle: CollectionHandle, options: ColumnsDiscoverOptions, host: ColumnsCollectionDriverHost): PoolEntry<CollectionHandle>;
120
+ filter(handle: CollectionHandle, options: ColumnsFilterOptions, host: ColumnsCollectionDriverHost): PoolEntry<CollectionHandle>;
121
+ }
122
+ //#endregion
123
+ export { CollectionHandle, ColumnsCollectionDriver, ColumnsCollectionDriverHost, ColumnsCollectionDriverModel, SerializedColumnsSource };
124
+ //# sourceMappingURL=columns_collection_driver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"columns_collection_driver.d.ts","names":[],"sources":["../../../src/drivers/columns/columns_collection_driver.ts"],"mappings":";;;;;;;;;;;;;AAeA;;;KAAY,gBAAA,GAAmB,OAAO;AAAA;AActC;;;;;;;;;;;AAdsC,KAc1B,uBAAA;EAAA,SACG,IAAA;EAAA,SAA6B,MAAA,EAAQ,gBAAA;AAAA;EAAA,SACrC,IAAA;AAAA;EAAA,SACA,IAAA;EAAA,SAA2B,QAAA,EAAU,cAAA;EAAA,SAAyB,IAAA;AAAA;EAAA,SAC9D,IAAA;EAAA,SAAsB,GAAA,EAAK,iBAAA;EAAA,SAA8B,OAAA;AAAA;;;;;;;;;;;;;UAcvD,2BAAA,WAAsC,YAAA,CAAa,CAAA,IAAK,YAAA;EAA5B;EAE3C,eAAA,CAAgB,MAAA,EAAQ,cAAA,GAAiB,CAAA;EAFyB;EAKlE,qBAAA,IAAyB,aAAA,CAAc,gBAAA,CAAiB,CAAA;EAHxD;;;;;EAUA,aAAA,IAAiB,gBAAA;EAPsB;;;;;;;EAgBvC,WAAA,CAAY,EAAA,EAAI,SAAA,GAAY,WAAA;AAAA;AAAW;AAYzC;;;;;;;;AAZyC,UAYxB,4BAAA;EAWuB;EATtC,MAAA,CAAO,OAAA,EAAS,aAAA,CAAc,uBAAA,IAA2B,gBAAA;EAchC;EAXzB,OAAA,CAAQ,MAAA,EAAQ,gBAAA;EAYb;EATH,OAAA,CAAQ,MAAA,EAAQ,gBAAA;EAY4B;EAT5C,UAAA,CAAW,MAAA,EAAQ,gBAAA,GAAmB,iBAAA;EAYvB;EATf,SAAA,CACE,MAAA,EAAQ,gBAAA,EACR,OAAA,EAAS,aAAA,CAAc,uBAAA,IACtB,gBAAA;EAM8D;EAHjE,QAAA,CAAS,MAAA,EAAQ,gBAAA,EAAkB,OAAA,EAAS,sBAAA,GAAyB,gBAAA;EAGY;EAAjF,MAAA,CAAO,MAAA,EAAQ,gBAAA,EAAkB,OAAA,EAAS,oBAAA,GAAuB,gBAAA;AAAA;;;;;;;;;;;;;UAelD,uBAAA;EACf,MAAA,CACE,OAAA,EAAS,aAAA,CAAc,uBAAA,GACvB,IAAA,EAAM,2BAAA,GACL,SAAA,CAAU,gBAAA;EAEb,OAAA,CAAQ,MAAA,EAAQ,gBAAA;EAChB,OAAA,CAAQ,MAAA,EAAQ,gBAAA;EAChB,UAAA,CAAW,MAAA,EAAQ,gBAAA,EAAkB,IAAA,EAAM,2BAAA,GAA8B,iBAAA;EAEzE,SAAA,CACE,MAAA,EAAQ,gBAAA,EACR,OAAA,EAAS,aAAA,CAAc,uBAAA,GACvB,IAAA,EAAM,2BAAA,GACL,SAAA,CAAU,gBAAA;EAEb,QAAA,CACE,MAAA,EAAQ,gBAAA,EACR,OAAA,EAAS,sBAAA,EACT,IAAA,EAAM,2BAAA,GACL,SAAA,CAAU,gBAAA;EAEb,MAAA,CACE,MAAA,EAAQ,gBAAA,EACR,OAAA,EAAS,oBAAA,EACT,IAAA,EAAM,2BAAA,GACL,SAAA,CAAU,gBAAA;AAAA"}