@milaboratories/pl-model-common 1.46.3 → 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 +3 -2
  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
package/dist/index.js CHANGED
@@ -15,15 +15,18 @@ import { PTableNA, XLSX_MAX_ROWS_PER_SHEET, isPTableNA, isValueNA, pTableValue,
15
15
  import { collectSpecQueryColumns, isBooleanExpression, mapSpecQueryColumns, sortSpecQuery, traverseQuerySpec } from "./drivers/pframe/query/utils.js";
16
16
  import { mapJoinEntry, mapPTableDef, mapPTableDefV2, sortJoinEntry, sortPTableDef } from "./drivers/pframe/table_calculate.js";
17
17
  import { getPTableColumnId } from "./drivers/pframe/table_common.js";
18
- import { parseColumnId, stringifyColumnId } from "./drivers/pframe/spec/ids.js";
19
- import { AnchoredIdDeriver, resolveAnchors } from "./drivers/pframe/spec/anchored.js";
20
- import { isFilteredPColumn } from "./drivers/pframe/spec/filtered_column.js";
21
- import { ensurePColumn, extractAllColumns, isPColumn, isPColumnResult, isPColumnSpec, isPColumnSpecResult, mapPObjectData } from "./pool/spec.js";
18
+ import { applyAxisFilters, createColumnFilteredId, createColumnFilteredKey, isColumnFilteredId, isColumnFilteredKey, isFilteredPColumn, stringifyColumnFilteredId } from "./drivers/pframe/spec/filtered_column.js";
19
+ import { createGlobalPObjectId, createLocalPObjectId, createPObjectId, ensurePColumn, extractAllColumns, isGlobalPObjectId, isGlobalPObjectKey, isLocalPObjectId, isLocalPObjectKey, isPColumn, isPColumnSpec, isPObject, isPObjectId, isPObjectKey, mapPObjectData } from "./pool/spec.js";
22
20
  import { executePSpecPredicate } from "./pool/query.js";
21
+ import "./pool/index.js";
22
+ import { createColumnDiscoveredId, createColumnDiscoveredKey, distillColumnDiscoveredKey, isColumnDiscoveredId, isColumnDiscoveredKey, parseColumnDiscoveredId, stringifyColumnDiscoveredId } from "./drivers/pframe/spec/discovered_column.js";
23
+ import { applySpecOverrides, createColumnOverriddenId, createColumnOverriddenKey, deriveSpecDelta, distillColumnOverriddenKey, isColumnOverriddenKey, isEmptySpecDelta, mergeSpecOverrides, parseColumnOverriddenId, stringifyColumnOverriddenId, unwrapOverrides } from "./drivers/pframe/spec/overridden.js";
24
+ import { extractPObjectId, parseColumnId, parseColumnIdSafely, reconstructSpecFromId, stringifyColumnId } from "./drivers/pframe/spec/ids.js";
25
+ import { AnchoredIdDeriver, resolveAnchors } from "./drivers/pframe/spec/anchored.js";
23
26
  import { isAnchoredPColumnId, legacyColumnSelectorsToPredicate, matchAxis, matchMultiColumnSelector, matchPColumn, multiColumnSelectorsToPredicate } from "./drivers/pframe/spec/selectors.js";
24
27
  import { deriveNativeId } from "./drivers/pframe/spec/native_id.js";
25
- import { createDiscoveredPColumnId, distillDiscoveredPColumn, isDiscoveredPColumn, parseDiscoveredPColumnId, stringifyDiscoveredPColumnId } from "./drivers/pframe/spec/discovered_column.js";
26
28
  import { LinkerMap } from "./drivers/pframe/linker_columns.js";
29
+ import { matchingModeToConstraints } from "./drivers/columns/discover_columns_options.js";
27
30
  import { ChunkedStreamReader } from "./drivers/ChunkedStreamReader.js";
28
31
  import "./drivers/index.js";
29
32
  import { AllRequiresFeatureFlags, AllSupportsFeatureFlags, REQUIRES_PFRAMES_VERSION } from "./flags/block_flags.js";
@@ -43,4 +46,10 @@ import { createNodeServiceHandlers } from "./services/node_service_handlers.js";
43
46
  import { MODEL_SERVICE_METHOD_MAP, SERVICE_METHOD_MAP, buildServiceInfo, resolveNodeServiceHandler } from "./services/service_injectors.js";
44
47
  import "./services/index.js";
45
48
  import { PoolEntryGuard } from "./pool_entry.js";
46
- export { AbortError, AllRequiresFeatureFlags, AllSupportsFeatureFlags, AnchoredIdDeriver, Annotation, AnnotationJson, ChunkedStreamReader, Code, DefaultNavigationState, Domain, DomainJson, IncompatibleFlagsError, LinkerMap, MODEL_SERVICE_METHOD_MAP, ModelServiceRegistry, PAxisName, PColumnName, PFrameDriverError, PFrameError, PFrameSpecDriverError, PTableNA, PlId, PlIdBytes, PlIdLength, PlRef, PoolEntryGuard, REQUIRES_PFRAMES_VERSION, RangeBytes, ResourceTypeName, ResourceTypePrefix, RuntimeCapabilities, SERVICE_CAPABILITY_FLAGS, SERVICE_FEATURE_FLAGS, SERVICE_METHOD_MAP, ServiceAlreadyRegisteredError, ServiceError, ServiceInjectionError, ServiceInvalidIdError, ServiceMethodNotFoundError, ServiceNotRegisteredError, Services, UiError, UiServiceRegistry, ValueType, XLSX_MAX_ROWS_PER_SHEET, 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 };
49
+ import { COLLECT_TYPES, DESCEND_TYPES, findDescendantsByType, indexAccessorRoot, indexPoolBlock, listColumnNames } from "./columns/accessor_traversal.js";
50
+ import { ColumnRegistry } from "./columns/column_registry.js";
51
+ import { convertColumnSelectorToMultiColumnSelector, convertRelaxedAxisSelectorToMultiAxisSelector, convertRelaxedColumnSelectorToMultiColumnSelector } from "./columns/column_selector.js";
52
+ import { dedupColumns } from "./columns/dedup.js";
53
+ import { AccessorEntriesProvider, ResultPoolEntriesProvider } from "./columns/providers.js";
54
+ import "./columns/index.js";
55
+ export { AbortError, AccessorEntriesProvider, AllRequiresFeatureFlags, AllSupportsFeatureFlags, AnchoredIdDeriver, Annotation, AnnotationJson, COLLECT_TYPES, ChunkedStreamReader, Code, ColumnRegistry, DESCEND_TYPES, DefaultNavigationState, Domain, DomainJson, IncompatibleFlagsError, LinkerMap, MODEL_SERVICE_METHOD_MAP, ModelServiceRegistry, PAxisName, PColumnName, PFrameDriverError, PFrameError, PFrameSpecDriverError, PTableNA, PlId, PlIdBytes, PlIdLength, PlRef, PoolEntryGuard, REQUIRES_PFRAMES_VERSION, RangeBytes, ResourceTypeName, ResourceTypePrefix, ResultPoolEntriesProvider, RuntimeCapabilities, SERVICE_CAPABILITY_FLAGS, SERVICE_FEATURE_FLAGS, SERVICE_METHOD_MAP, ServiceAlreadyRegisteredError, ServiceError, ServiceInjectionError, ServiceInvalidIdError, ServiceMethodNotFoundError, ServiceNotRegisteredError, Services, UiError, UiServiceRegistry, ValueType, XLSX_MAX_ROWS_PER_SHEET, applyAxisFilters, applySpecOverrides, assertNever, base64Decode, base64Encode, bigintReplacer, buildServiceInfo, canonicalizeAxisId, canonicalizeAxisWithParents, canonicalizeJson, checkBlockFlag, collectSpecQueryColumns, convertColumnSelectorToMultiColumnSelector, convertRelaxedAxisSelectorToMultiAxisSelector, convertRelaxedColumnSelectorToMultiColumnSelector, createColumnDiscoveredId, createColumnDiscoveredKey, createColumnFilteredId, createColumnFilteredKey, createColumnOverriddenId, createColumnOverriddenKey, createEnrichmentRef, createGlobalPObjectId, createLocalPObjectId, createNodeServiceHandlers, createPObjectId, createPlRef, createPrimaryRef, dataInfoToEntries, dedupColumns, deriveNativeId, deriveSpecDelta, deserializeError, deserializeResult, digestPlId, distillColumnDiscoveredKey, distillColumnOverriddenKey, ensureError, ensurePColumn, entriesToDataInfo, executePSpecPredicate, extractAllColumns, extractAllRequirements, extractAllSupports, extractCodeWithInfo, extractConfigGeneric, extractPObjectId, findDescendantsByType, getArrayFromAxisTree, getAxesId, getAxesTree, getAxisId, getColumnIdAndSpec, getDenormalizedAxesList, getFileNameFromHandle, getFilePathFromHandle, getMethodNames, getNormalizedAxesList, getPColumnSpecId, getPTableColumnId, getServiceKind, getServiceModelMethods, getServiceUiMethods, getSetFromAxisTree, getTypeFromPColumnOrAxisSpec, hasAbortError, indexAccessorRoot, indexPoolBlock, isAbortError, isAggregateError, isAnchoredPColumnId, isAnyLogHandle, isAxisId, isBlockUIURL, isBooleanExpression, isColumnDiscoveredId, isColumnDiscoveredKey, isColumnFilteredId, isColumnFilteredKey, isColumnOverriddenKey, isDataInfo, isDataInfoEntries, isEmptySpecDelta, isEnrichmentRef, isFilteredPColumn, isFolderURL, isGlobalPObjectId, isGlobalPObjectKey, isImportFileHandleIndex, isImportFileHandleUpload, isKnownServiceName, isLabelColumn, isLinkerColumn, isLiveLog, isLocalPObjectId, isLocalPObjectKey, isMainService, isNodeService, isPColumn, isPColumnSpec, isPFrameDriverError, isPFrameError, isPFrameSpecDriverError, isPObject, isPObjectId, isPObjectKey, isPTableNA, isPartitionedDataInfoEntries, isPlRef, isPrimaryRef, isServiceAlreadyRegisteredError, isServiceError, isServiceInjectionError, isServiceInvalidIdError, isServiceMethodNotFoundError, isServiceNotRegisteredError, isValueNA, isWasmService, legacyColumnSelectorsToPredicate, listColumnNames, mapDataInfo, mapDataInfoEntries, mapJoinEntry, mapPObjectData, mapPTableDef, mapPTableDefV2, mapSpecQueryColumns, mapValueInVOE, matchAxis, matchAxisId, matchMultiColumnSelector, matchPColumn, matchingModeToConstraints, mergeSpecOverrides, multiColumnSelectorsToPredicate, newRangeBytesOpt, pTableValue, pTableValueBranded, parseColumnDiscoveredId, parseColumnId, parseColumnIdSafely, parseColumnOverriddenId, parseHttpAuth, parseJson, parseJsonSafely, plId, plRefsEqual, readAnnotation, readAnnotationJson, readAnnotationJsonOrThrow, readDomain, readDomainJson, readDomainJsonOrThrow, readMetadata, readMetadataJson, readMetadataJsonOrThrow, reconstructSpecFromId, registerServiceCapabilities, resolveAnchors, resolveAnnotationParents, resolveNodeServiceHandler, resolveRequiredServices, serializeError, serializeHttpAuth, serializeResult, service, serviceFnKey, sortJoinEntry, sortPTableDef, sortSpecQuery, stringifyColumnDiscoveredId, stringifyColumnFilteredId, stringifyColumnId, stringifyColumnOverriddenId, stringifyJson, traverseQuerySpec, uniqueBy, uniquePlId, unwrapOverrides, unwrapResult, validateRangeBytes, visitDataInfo, withEnrichments, wrapAndSerialize, wrapAndSerializeAsync, wrapAsyncCallback, wrapCallback };
@@ -0,0 +1,18 @@
1
+ const require_spec = require("./spec.cjs");
2
+ const require_query = require("./query.cjs");
3
+ exports.createGlobalPObjectId = require_spec.createGlobalPObjectId;
4
+ exports.createLocalPObjectId = require_spec.createLocalPObjectId;
5
+ exports.createPObjectId = require_spec.createPObjectId;
6
+ exports.ensurePColumn = require_spec.ensurePColumn;
7
+ exports.executePSpecPredicate = require_query.executePSpecPredicate;
8
+ exports.extractAllColumns = require_spec.extractAllColumns;
9
+ exports.isGlobalPObjectId = require_spec.isGlobalPObjectId;
10
+ exports.isGlobalPObjectKey = require_spec.isGlobalPObjectKey;
11
+ exports.isLocalPObjectId = require_spec.isLocalPObjectId;
12
+ exports.isLocalPObjectKey = require_spec.isLocalPObjectKey;
13
+ exports.isPColumn = require_spec.isPColumn;
14
+ exports.isPColumnSpec = require_spec.isPColumnSpec;
15
+ exports.isPObject = require_spec.isPObject;
16
+ exports.isPObjectId = require_spec.isPObjectId;
17
+ exports.isPObjectKey = require_spec.isPObjectKey;
18
+ exports.mapPObjectData = require_spec.mapPObjectData;
@@ -1,4 +1,4 @@
1
- import { PObject, PObjectId, PObjectSpec, ensurePColumn, extractAllColumns, isPColumn, isPColumnResult, isPColumnSpec, isPColumnSpecResult, mapPObjectData } from "./spec.js";
1
+ import { GlobalPObjectId, GlobalPObjectKey, LocalPObjectId, LocalPObjectKey, PObject, PObjectId, PObjectSpec, createGlobalPObjectId, createLocalPObjectId, createPObjectId, ensurePColumn, extractAllColumns, isGlobalPObjectId, isGlobalPObjectKey, isLocalPObjectId, isLocalPObjectKey, isPColumn, isPColumnSpec, isPObject, isPObjectId, isPObjectKey, mapPObjectData } from "./spec.js";
2
2
  import { ResultCollection, ResultPoolEntry } from "./entry.js";
3
3
  import { PSpecPredicate, executePSpecPredicate } from "./query.js";
4
- export { PObject, PObjectId, PObjectSpec, PSpecPredicate, ResultCollection, ResultPoolEntry, ensurePColumn, executePSpecPredicate, extractAllColumns, isPColumn, isPColumnResult, isPColumnSpec, isPColumnSpecResult, mapPObjectData };
4
+ export { GlobalPObjectId, GlobalPObjectKey, LocalPObjectId, LocalPObjectKey, PObject, PObjectId, PObjectSpec, PSpecPredicate, ResultCollection, ResultPoolEntry, createGlobalPObjectId, createLocalPObjectId, createPObjectId, ensurePColumn, executePSpecPredicate, extractAllColumns, isGlobalPObjectId, isGlobalPObjectKey, isLocalPObjectId, isLocalPObjectKey, isPColumn, isPColumnSpec, isPObject, isPObjectId, isPObjectKey, mapPObjectData };
@@ -0,0 +1,3 @@
1
+ import { createGlobalPObjectId, createLocalPObjectId, createPObjectId, ensurePColumn, extractAllColumns, isGlobalPObjectId, isGlobalPObjectKey, isLocalPObjectId, isLocalPObjectKey, isPColumn, isPColumnSpec, isPObject, isPObjectId, isPObjectKey, mapPObjectData } from "./spec.js";
2
+ import { executePSpecPredicate } from "./query.js";
3
+ export { createGlobalPObjectId, createLocalPObjectId, createPObjectId, ensurePColumn, executePSpecPredicate, extractAllColumns, isGlobalPObjectId, isGlobalPObjectKey, isLocalPObjectId, isLocalPObjectKey, isPColumn, isPColumnSpec, isPObject, isPObjectId, isPObjectKey, mapPObjectData };
@@ -1,16 +1,56 @@
1
1
  const require_util = require("../util.cjs");
2
+ const require_json = require("../json.cjs");
2
3
  //#region src/pool/spec.ts
3
- function isPColumnSpec(spec) {
4
- return spec.kind === "PColumn";
4
+ function isPObjectId(value) {
5
+ if (typeof value !== "string") return false;
6
+ return isPObjectKey(require_json.parseJsonSafely(value));
5
7
  }
6
- function isPColumn(obj) {
7
- return isPColumnSpec(obj.spec);
8
+ function isPObjectKey(value) {
9
+ return isLocalPObjectKey(value) || isGlobalPObjectKey(value);
10
+ }
11
+ function createPObjectId(obj) {
12
+ if (isLocalPObjectKey(obj)) return createLocalPObjectId(obj.resolvePath, obj.name);
13
+ if (isGlobalPObjectKey(obj)) return createGlobalPObjectId(obj.blockId, obj.name);
14
+ throw new Error(`createPObjectId: unrecognized object key structure: ${JSON.stringify(obj)}`);
15
+ }
16
+ function createLocalPObjectId(resolvePath, name) {
17
+ return require_json.canonicalizeJson({
18
+ resolvePath,
19
+ name
20
+ });
21
+ }
22
+ function isLocalPObjectId(value) {
23
+ if (typeof value !== "string") return false;
24
+ return isLocalPObjectKey(require_json.parseJsonSafely(value));
25
+ }
26
+ function isLocalPObjectKey(value) {
27
+ if (typeof value !== "object" || value === null) return false;
28
+ const v = value;
29
+ return Array.isArray(v.resolvePath) && typeof v.name === "string";
8
30
  }
9
- function isPColumnSpecResult(r) {
10
- return isPColumnSpec(r.obj);
31
+ function createGlobalPObjectId(blockId, exportName) {
32
+ return require_json.canonicalizeJson({
33
+ __isRef: true,
34
+ blockId,
35
+ name: exportName
36
+ });
11
37
  }
12
- function isPColumnResult(r) {
13
- return isPColumnSpec(r.obj.spec);
38
+ function isGlobalPObjectKey(value) {
39
+ if (typeof value !== "object" || value === null) return false;
40
+ return "__isRef" in value && "blockId" in value && "name" in value;
41
+ }
42
+ function isGlobalPObjectId(value) {
43
+ if (typeof value !== "string") return false;
44
+ return isGlobalPObjectKey(require_json.parseJsonSafely(value));
45
+ }
46
+ function isPObject(obj) {
47
+ return typeof obj === "object" && obj !== null && "id" in obj && "spec" in obj && "data" in obj;
48
+ }
49
+ function isPColumn(obj) {
50
+ return isPObject(obj) && isPColumnSpec(obj.spec);
51
+ }
52
+ function isPColumnSpec(spec) {
53
+ return spec.kind === "PColumn";
14
54
  }
15
55
  function ensurePColumn(obj) {
16
56
  if (!isPColumn(obj)) throw new Error(`not a PColumn (kind = ${obj.spec.kind})`);
@@ -19,7 +59,7 @@ function ensurePColumn(obj) {
19
59
  function mapPObjectData(pObj, cb) {
20
60
  return pObj === void 0 ? void 0 : {
21
61
  ...pObj,
22
- data: cb(typeof pObj.data === "function" ? pObj.data() : pObj.data)
62
+ data: cb(pObj.data)
23
63
  };
24
64
  }
25
65
  function extractAllColumns(entry) {
@@ -51,12 +91,20 @@ function extractAllColumns(entry) {
51
91
  return [...columns.values()];
52
92
  }
53
93
  //#endregion
94
+ exports.createGlobalPObjectId = createGlobalPObjectId;
95
+ exports.createLocalPObjectId = createLocalPObjectId;
96
+ exports.createPObjectId = createPObjectId;
54
97
  exports.ensurePColumn = ensurePColumn;
55
98
  exports.extractAllColumns = extractAllColumns;
99
+ exports.isGlobalPObjectId = isGlobalPObjectId;
100
+ exports.isGlobalPObjectKey = isGlobalPObjectKey;
101
+ exports.isLocalPObjectId = isLocalPObjectId;
102
+ exports.isLocalPObjectKey = isLocalPObjectKey;
56
103
  exports.isPColumn = isPColumn;
57
- exports.isPColumnResult = isPColumnResult;
58
104
  exports.isPColumnSpec = isPColumnSpec;
59
- exports.isPColumnSpecResult = isPColumnSpecResult;
105
+ exports.isPObject = isPObject;
106
+ exports.isPObjectId = isPObjectId;
107
+ exports.isPObjectKey = isPObjectKey;
60
108
  exports.mapPObjectData = mapPObjectData;
61
109
 
62
110
  //# sourceMappingURL=spec.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"spec.cjs","names":[],"sources":["../../src/pool/spec.ts"],"sourcesContent":["import type { Branded } from \"../branding\";\nimport type { JoinEntry, PColumn, PColumnLazy, PColumnSpec } from \"../drivers\";\nimport { assertNever } from \"../util\";\nimport type { ResultPoolEntry } from \"./entry\";\n\n/** Any object exported into the result pool by the block always have spec attached to it */\nexport type PObjectSpec = {\n /** PObject kind discriminator */\n readonly kind: string;\n\n /** Name is common part of PObject identity */\n readonly name: string;\n\n /** Domain is a set of key-value pairs that can be used to identify the object */\n readonly domain?: Record<string, string>;\n\n /** Context domain provides additional axis/column identity that is matched\n * by kinship rules (subset/superset/overlap) rather than exact equality */\n readonly contextDomain?: Record<string, string>;\n\n /** Additional information attached to the object */\n readonly annotations?: Record<string, string>;\n};\n\n/** Stable PObject id */\nexport type PObjectId = Branded<string, \"PColumnId\">;\n\n/**\n * Full PObject representation.\n *\n * @template Data type of the object referencing or describing the \"data\" part of the PObject\n * */\nexport interface PObject<Data> {\n /** Fully rendered PObjects are assigned a stable identifier. */\n readonly id: PObjectId;\n\n /** PObject spec, allowing it to be found among other PObjects */\n readonly spec: PObjectSpec;\n\n /** A handle to data object */\n readonly data: Data;\n}\n\nexport function isPColumnSpec(spec: PObjectSpec): spec is PColumnSpec {\n return spec.kind === \"PColumn\";\n}\n\nexport function isPColumn<T>(obj: PObject<T>): obj is PColumn<T> {\n return isPColumnSpec(obj.spec);\n}\n\nexport function isPColumnSpecResult(\n r: ResultPoolEntry<PObjectSpec>,\n): r is ResultPoolEntry<PColumnSpec> {\n return isPColumnSpec(r.obj);\n}\n\nexport function isPColumnResult<T>(\n r: ResultPoolEntry<PObject<T>>,\n): r is ResultPoolEntry<PColumn<T>> {\n return isPColumnSpec(r.obj.spec);\n}\n\nexport function ensurePColumn<T>(obj: PObject<T>): PColumn<T> {\n if (!isPColumn(obj)) throw new Error(`not a PColumn (kind = ${obj.spec.kind})`);\n return obj;\n}\n\nexport function mapPObjectData<D1, D2>(\n pObj: PColumn<D1> | PColumnLazy<D1>,\n cb: (d: D1) => D2,\n): PColumn<D2>;\nexport function mapPObjectData<D1, D2>(pObj: PColumn<D1>, cb: (d: D1) => D2): PColumn<D2>;\nexport function mapPObjectData<D1, D2>(\n pObj: PColumn<D1> | undefined,\n cb: (d: D1) => D2,\n): PColumn<D2> | undefined;\nexport function mapPObjectData<D1, D2>(pObj: PObject<D1>, cb: (d: D1) => D2): PObject<D2>;\nexport function mapPObjectData<D1, D2>(\n pObj: PObject<D1> | undefined,\n cb: (d: D1) => D2,\n): PObject<D2> | undefined;\nexport function mapPObjectData<D1, D2>(\n pObj: PObject<D1> | undefined,\n cb: (d: D1) => D2,\n): PObject<D2> | undefined {\n return pObj === undefined\n ? undefined\n : {\n ...pObj,\n data: cb(typeof pObj.data === \"function\" ? pObj.data() : pObj.data),\n };\n}\n\nexport function extractAllColumns<D>(entry: JoinEntry<PColumn<D>>): PColumn<D>[] {\n const columns = new Map<PObjectId, PColumn<D>>();\n const addAllColumns = (entry: JoinEntry<PColumn<D>>) => {\n switch (entry.type) {\n case \"column\":\n columns.set(entry.column.id, entry.column);\n return;\n case \"slicedColumn\":\n columns.set(entry.column.id, entry.column);\n return;\n case \"artificialColumn\":\n columns.set(entry.column.id, entry.column);\n return;\n case \"inlineColumn\":\n return;\n case \"full\":\n case \"inner\":\n for (const e of entry.entries) addAllColumns(e);\n return;\n case \"outer\":\n addAllColumns(entry.primary);\n for (const e of entry.secondary) addAllColumns(e);\n return;\n default:\n assertNever(entry);\n }\n };\n addAllColumns(entry);\n return [...columns.values()];\n}\n"],"mappings":";;AA2CA,SAAgB,cAAc,MAAwC;CACpE,OAAO,KAAK,SAAS;AACvB;AAEA,SAAgB,UAAa,KAAoC;CAC/D,OAAO,cAAc,IAAI,IAAI;AAC/B;AAEA,SAAgB,oBACd,GACmC;CACnC,OAAO,cAAc,EAAE,GAAG;AAC5B;AAEA,SAAgB,gBACd,GACkC;CAClC,OAAO,cAAc,EAAE,IAAI,IAAI;AACjC;AAEA,SAAgB,cAAiB,KAA6B;CAC5D,IAAI,CAAC,UAAU,GAAG,GAAG,MAAM,IAAI,MAAM,yBAAyB,IAAI,KAAK,KAAK,EAAE;CAC9E,OAAO;AACT;AAgBA,SAAgB,eACd,MACA,IACyB;CACzB,OAAO,SAAS,KAAA,IACZ,KAAA,IACA;EACE,GAAG;EACH,MAAM,GAAG,OAAO,KAAK,SAAS,aAAa,KAAK,KAAK,IAAI,KAAK,IAAI;CACpE;AACN;AAEA,SAAgB,kBAAqB,OAA4C;CAC/E,MAAM,0BAAU,IAAI,IAA2B;CAC/C,MAAM,iBAAiB,UAAiC;EACtD,QAAQ,MAAM,MAAd;GACE,KAAK;IACH,QAAQ,IAAI,MAAM,OAAO,IAAI,MAAM,MAAM;IACzC;GACF,KAAK;IACH,QAAQ,IAAI,MAAM,OAAO,IAAI,MAAM,MAAM;IACzC;GACF,KAAK;IACH,QAAQ,IAAI,MAAM,OAAO,IAAI,MAAM,MAAM;IACzC;GACF,KAAK,gBACH;GACF,KAAK;GACL,KAAK;IACH,KAAK,MAAM,KAAK,MAAM,SAAS,cAAc,CAAC;IAC9C;GACF,KAAK;IACH,cAAc,MAAM,OAAO;IAC3B,KAAK,MAAM,KAAK,MAAM,WAAW,cAAc,CAAC;IAChD;GACF,SACE,aAAA,YAAY,KAAK;EACrB;CACF;CACA,cAAc,KAAK;CACnB,OAAO,CAAC,GAAG,QAAQ,OAAO,CAAC;AAC7B"}
1
+ {"version":3,"file":"spec.cjs","names":["parseJsonSafely","canonicalizeJson"],"sources":["../../src/pool/spec.ts"],"sourcesContent":["import type { JoinEntry, PColumn, PColumnSpec } from \"../drivers\";\nimport { assertNever } from \"../util\";\nimport { PlRef } from \"../ref\";\nimport { CanonicalizedJson, canonicalizeJson, parseJsonSafely } from \"../json\";\nimport { Branded } from \"@milaboratories/helpers\";\n\n/** Any object exported into the result pool by the block always have spec attached to it */\nexport type PObjectSpec = {\n /** PObject kind discriminator */\n readonly kind: string;\n\n /** Name is common part of PObject identity */\n readonly name: string;\n\n /** Domain is a set of key-value pairs that can be used to identify the object */\n readonly domain?: Record<string, string>;\n\n /** Context domain provides additional axis/column identity that is matched\n * by kinship rules (subset/superset/overlap) rather than exact equality */\n readonly contextDomain?: Record<string, string>;\n\n /** Additional information attached to the object */\n readonly annotations?: Record<string, string>;\n};\n\nexport type LocalPObjectKey = { resolvePath: string[]; name: string };\nexport type LocalPObjectId = Branded<CanonicalizedJson<LocalPObjectKey>, \"LocalPObjectId\">;\nexport type GlobalPObjectKey = PlRef;\nexport type GlobalPObjectId = Branded<CanonicalizedJson<GlobalPObjectKey>, \"GlobalPObjectId\">;\n/** Stable PObject id */\nexport type PObjectId = LocalPObjectId | GlobalPObjectId;\n\nexport function isPObjectId(value: unknown): value is PObjectId {\n if (typeof value !== \"string\") return false;\n return isPObjectKey(parseJsonSafely(value));\n}\n\nexport function isPObjectKey(value: unknown): value is LocalPObjectKey | GlobalPObjectKey {\n return isLocalPObjectKey(value) || isGlobalPObjectKey(value);\n}\n\nexport function createPObjectId(obj: LocalPObjectKey | GlobalPObjectKey): PObjectId {\n if (isLocalPObjectKey(obj)) {\n return createLocalPObjectId(obj.resolvePath, obj.name);\n }\n if (isGlobalPObjectKey(obj)) {\n return createGlobalPObjectId(obj.blockId, obj.name);\n }\n throw new Error(`createPObjectId: unrecognized object key structure: ${JSON.stringify(obj)}`);\n}\n\nexport function createLocalPObjectId(resolvePath: string[], name: string): PObjectId {\n return canonicalizeJson({ resolvePath, name }) as PObjectId;\n}\n\nexport function isLocalPObjectId(value: unknown): value is LocalPObjectId {\n if (typeof value !== \"string\") return false;\n return isLocalPObjectKey(parseJsonSafely<LocalPObjectKey>(value));\n}\n\nexport function isLocalPObjectKey(value: unknown): value is LocalPObjectKey {\n if (typeof value !== \"object\" || value === null) return false;\n const v = value as LocalPObjectKey;\n return Array.isArray(v.resolvePath) && typeof v.name === \"string\";\n}\n\nexport function createGlobalPObjectId(blockId: string, exportName: string): PObjectId {\n return canonicalizeJson({\n __isRef: true,\n blockId,\n name: exportName,\n } satisfies PlRef) as PObjectId;\n}\n\nexport function isGlobalPObjectKey(value: unknown): value is GlobalPObjectKey {\n if (typeof value !== \"object\" || value === null) return false;\n return \"__isRef\" in value && \"blockId\" in value && \"name\" in value;\n}\n\nexport function isGlobalPObjectId(value: unknown): value is GlobalPObjectId {\n if (typeof value !== \"string\") return false;\n const parsed = parseJsonSafely<GlobalPObjectKey>(value);\n return isGlobalPObjectKey(parsed);\n}\n\n/**\n * Full PObject representation.\n *\n * @template Data type of the object referencing or describing the \"data\" part of the PObject\n * */\nexport interface PObject<Data> {\n /** Fully rendered PObjects are assigned a stable identifier. */\n readonly id: PObjectId;\n\n /** PObject spec, allowing it to be found among other PObjects */\n readonly spec: PObjectSpec;\n\n /** A handle to data object */\n readonly data: Data;\n}\n\nexport function isPObject<Data>(obj: unknown): obj is PObject<Data> {\n return typeof obj === \"object\" && obj !== null && \"id\" in obj && \"spec\" in obj && \"data\" in obj;\n}\n\nexport function isPColumn<T>(obj: unknown): obj is PColumn<T> {\n return isPObject(obj) && isPColumnSpec(obj.spec);\n}\n\nexport function isPColumnSpec(spec: PObjectSpec): spec is PColumnSpec {\n return spec.kind === \"PColumn\";\n}\n\nexport function ensurePColumn<T>(obj: PObject<T>): PColumn<T> {\n if (!isPColumn(obj)) throw new Error(`not a PColumn (kind = ${obj.spec.kind})`);\n return obj;\n}\n\nexport function mapPObjectData<D1, D2>(pObj: PColumn<D1>, cb: (d: D1) => D2): PColumn<D2>;\nexport function mapPObjectData<D1, D2>(\n pObj: PColumn<D1> | undefined,\n cb: (d: D1) => D2,\n): PColumn<D2> | undefined;\nexport function mapPObjectData<D1, D2>(pObj: PObject<D1>, cb: (d: D1) => D2): PObject<D2>;\nexport function mapPObjectData<D1, D2>(\n pObj: PObject<D1> | undefined,\n cb: (d: D1) => D2,\n): PObject<D2> | undefined;\nexport function mapPObjectData<D1, D2>(\n pObj: PObject<D1> | undefined,\n cb: (d: D1) => D2,\n): PObject<D2> | undefined {\n return pObj === undefined\n ? undefined\n : {\n ...pObj,\n data: cb(pObj.data),\n };\n}\n\nexport function extractAllColumns<D>(entry: JoinEntry<PColumn<D>>): PColumn<D>[] {\n const columns = new Map<PObjectId, PColumn<D>>();\n const addAllColumns = (entry: JoinEntry<PColumn<D>>) => {\n switch (entry.type) {\n case \"column\":\n columns.set(entry.column.id, entry.column);\n return;\n case \"slicedColumn\":\n columns.set(entry.column.id, entry.column);\n return;\n case \"artificialColumn\":\n columns.set(entry.column.id, entry.column);\n return;\n case \"inlineColumn\":\n return;\n case \"full\":\n case \"inner\":\n for (const e of entry.entries) addAllColumns(e);\n return;\n case \"outer\":\n addAllColumns(entry.primary);\n for (const e of entry.secondary) addAllColumns(e);\n return;\n default:\n assertNever(entry);\n }\n };\n addAllColumns(entry);\n return [...columns.values()];\n}\n"],"mappings":";;;AAgCA,SAAgB,YAAY,OAAoC;CAC9D,IAAI,OAAO,UAAU,UAAU,OAAO;CACtC,OAAO,aAAaA,aAAAA,gBAAgB,KAAK,CAAC;AAC5C;AAEA,SAAgB,aAAa,OAA6D;CACxF,OAAO,kBAAkB,KAAK,KAAK,mBAAmB,KAAK;AAC7D;AAEA,SAAgB,gBAAgB,KAAoD;CAClF,IAAI,kBAAkB,GAAG,GACvB,OAAO,qBAAqB,IAAI,aAAa,IAAI,IAAI;CAEvD,IAAI,mBAAmB,GAAG,GACxB,OAAO,sBAAsB,IAAI,SAAS,IAAI,IAAI;CAEpD,MAAM,IAAI,MAAM,uDAAuD,KAAK,UAAU,GAAG,GAAG;AAC9F;AAEA,SAAgB,qBAAqB,aAAuB,MAAyB;CACnF,OAAOC,aAAAA,iBAAiB;EAAE;EAAa;CAAK,CAAC;AAC/C;AAEA,SAAgB,iBAAiB,OAAyC;CACxE,IAAI,OAAO,UAAU,UAAU,OAAO;CACtC,OAAO,kBAAkBD,aAAAA,gBAAiC,KAAK,CAAC;AAClE;AAEA,SAAgB,kBAAkB,OAA0C;CAC1E,IAAI,OAAO,UAAU,YAAY,UAAU,MAAM,OAAO;CACxD,MAAM,IAAI;CACV,OAAO,MAAM,QAAQ,EAAE,WAAW,KAAK,OAAO,EAAE,SAAS;AAC3D;AAEA,SAAgB,sBAAsB,SAAiB,YAA+B;CACpF,OAAOC,aAAAA,iBAAiB;EACtB,SAAS;EACT;EACA,MAAM;CACR,CAAiB;AACnB;AAEA,SAAgB,mBAAmB,OAA2C;CAC5E,IAAI,OAAO,UAAU,YAAY,UAAU,MAAM,OAAO;CACxD,OAAO,aAAa,SAAS,aAAa,SAAS,UAAU;AAC/D;AAEA,SAAgB,kBAAkB,OAA0C;CAC1E,IAAI,OAAO,UAAU,UAAU,OAAO;CAEtC,OAAO,mBADQD,aAAAA,gBAAkC,KAClB,CAAC;AAClC;AAkBA,SAAgB,UAAgB,KAAoC;CAClE,OAAO,OAAO,QAAQ,YAAY,QAAQ,QAAQ,QAAQ,OAAO,UAAU,OAAO,UAAU;AAC9F;AAEA,SAAgB,UAAa,KAAiC;CAC5D,OAAO,UAAU,GAAG,KAAK,cAAc,IAAI,IAAI;AACjD;AAEA,SAAgB,cAAc,MAAwC;CACpE,OAAO,KAAK,SAAS;AACvB;AAEA,SAAgB,cAAiB,KAA6B;CAC5D,IAAI,CAAC,UAAU,GAAG,GAAG,MAAM,IAAI,MAAM,yBAAyB,IAAI,KAAK,KAAK,EAAE;CAC9E,OAAO;AACT;AAYA,SAAgB,eACd,MACA,IACyB;CACzB,OAAO,SAAS,KAAA,IACZ,KAAA,IACA;EACE,GAAG;EACH,MAAM,GAAG,KAAK,IAAI;CACpB;AACN;AAEA,SAAgB,kBAAqB,OAA4C;CAC/E,MAAM,0BAAU,IAAI,IAA2B;CAC/C,MAAM,iBAAiB,UAAiC;EACtD,QAAQ,MAAM,MAAd;GACE,KAAK;IACH,QAAQ,IAAI,MAAM,OAAO,IAAI,MAAM,MAAM;IACzC;GACF,KAAK;IACH,QAAQ,IAAI,MAAM,OAAO,IAAI,MAAM,MAAM;IACzC;GACF,KAAK;IACH,QAAQ,IAAI,MAAM,OAAO,IAAI,MAAM,MAAM;IACzC;GACF,KAAK,gBACH;GACF,KAAK;GACL,KAAK;IACH,KAAK,MAAM,KAAK,MAAM,SAAS,cAAc,CAAC;IAC9C;GACF,KAAK;IACH,cAAc,MAAM,OAAO;IAC3B,KAAK,MAAM,KAAK,MAAM,WAAW,cAAc,CAAC;IAChD;GACF,SACE,aAAA,YAAY,KAAK;EACrB;CACF;CACA,cAAc,KAAK;CACnB,OAAO,CAAC,GAAG,QAAQ,OAAO,CAAC;AAC7B"}
@@ -1,7 +1,8 @@
1
- import { Branded } from "../branding.js";
2
- import { PColumn, PColumnLazy, PColumnSpec } from "../drivers/pframe/spec/spec.js";
1
+ import { CanonicalizedJson } from "../json.js";
2
+ import { PColumn, PColumnSpec } from "../drivers/pframe/spec/spec.js";
3
3
  import { JoinEntry } from "../drivers/pframe/table_calculate.js";
4
- import { ResultPoolEntry } from "./entry.js";
4
+ import { PlRef } from "../ref.js";
5
+ import { Branded } from "@milaboratories/helpers";
5
6
 
6
7
  //#region src/pool/spec.d.ts
7
8
  /** Any object exported into the result pool by the block always have spec attached to it */
@@ -14,8 +15,24 @@ type PObjectSpec = {
14
15
  readonly contextDomain?: Record<string, string>; /** Additional information attached to the object */
15
16
  readonly annotations?: Record<string, string>;
16
17
  };
18
+ type LocalPObjectKey = {
19
+ resolvePath: string[];
20
+ name: string;
21
+ };
22
+ type LocalPObjectId = Branded<CanonicalizedJson<LocalPObjectKey>, "LocalPObjectId">;
23
+ type GlobalPObjectKey = PlRef;
24
+ type GlobalPObjectId = Branded<CanonicalizedJson<GlobalPObjectKey>, "GlobalPObjectId">;
17
25
  /** Stable PObject id */
18
- type PObjectId = Branded<string, "PColumnId">;
26
+ type PObjectId = LocalPObjectId | GlobalPObjectId;
27
+ declare function isPObjectId(value: unknown): value is PObjectId;
28
+ declare function isPObjectKey(value: unknown): value is LocalPObjectKey | GlobalPObjectKey;
29
+ declare function createPObjectId(obj: LocalPObjectKey | GlobalPObjectKey): PObjectId;
30
+ declare function createLocalPObjectId(resolvePath: string[], name: string): PObjectId;
31
+ declare function isLocalPObjectId(value: unknown): value is LocalPObjectId;
32
+ declare function isLocalPObjectKey(value: unknown): value is LocalPObjectKey;
33
+ declare function createGlobalPObjectId(blockId: string, exportName: string): PObjectId;
34
+ declare function isGlobalPObjectKey(value: unknown): value is GlobalPObjectKey;
35
+ declare function isGlobalPObjectId(value: unknown): value is GlobalPObjectId;
19
36
  /**
20
37
  * Full PObject representation.
21
38
  *
@@ -29,17 +46,15 @@ interface PObject<Data> {
29
46
  /** A handle to data object */
30
47
  readonly data: Data;
31
48
  }
49
+ declare function isPObject<Data>(obj: unknown): obj is PObject<Data>;
50
+ declare function isPColumn<T>(obj: unknown): obj is PColumn<T>;
32
51
  declare function isPColumnSpec(spec: PObjectSpec): spec is PColumnSpec;
33
- declare function isPColumn<T>(obj: PObject<T>): obj is PColumn<T>;
34
- declare function isPColumnSpecResult(r: ResultPoolEntry<PObjectSpec>): r is ResultPoolEntry<PColumnSpec>;
35
- declare function isPColumnResult<T>(r: ResultPoolEntry<PObject<T>>): r is ResultPoolEntry<PColumn<T>>;
36
52
  declare function ensurePColumn<T>(obj: PObject<T>): PColumn<T>;
37
- declare function mapPObjectData<D1, D2>(pObj: PColumn<D1> | PColumnLazy<D1>, cb: (d: D1) => D2): PColumn<D2>;
38
53
  declare function mapPObjectData<D1, D2>(pObj: PColumn<D1>, cb: (d: D1) => D2): PColumn<D2>;
39
54
  declare function mapPObjectData<D1, D2>(pObj: PColumn<D1> | undefined, cb: (d: D1) => D2): PColumn<D2> | undefined;
40
55
  declare function mapPObjectData<D1, D2>(pObj: PObject<D1>, cb: (d: D1) => D2): PObject<D2>;
41
56
  declare function mapPObjectData<D1, D2>(pObj: PObject<D1> | undefined, cb: (d: D1) => D2): PObject<D2> | undefined;
42
57
  declare function extractAllColumns<D>(entry: JoinEntry<PColumn<D>>): PColumn<D>[];
43
58
  //#endregion
44
- export { PObject, PObjectId, PObjectSpec, ensurePColumn, extractAllColumns, isPColumn, isPColumnResult, isPColumnSpec, isPColumnSpecResult, mapPObjectData };
59
+ export { GlobalPObjectId, GlobalPObjectKey, LocalPObjectId, LocalPObjectKey, PObject, PObjectId, PObjectSpec, createGlobalPObjectId, createLocalPObjectId, createPObjectId, ensurePColumn, extractAllColumns, isGlobalPObjectId, isGlobalPObjectKey, isLocalPObjectId, isLocalPObjectKey, isPColumn, isPColumnSpec, isPObject, isPObjectId, isPObjectKey, mapPObjectData };
45
60
  //# sourceMappingURL=spec.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"spec.d.ts","names":[],"sources":["../../src/pool/spec.ts"],"mappings":";;;;;;;KAMY,WAAA;4CAED,IAAA,UAFC;EAAA,SAKD,IAAA;WAGA,MAAA,GAAS,MAAA;EAIO;;EAAA,SAAhB,aAAA,GAAgB,MAAA,kBAGI;EAAA,SAApB,WAAA,GAAc,MAAA;AAAA;;KAIb,SAAA,GAAY,OAAO;;;;;;UAOd,OAAA;EAPL;EAAA,SASD,EAAA,EAAI,SAAA;;WAGJ,IAAA,EAAM,WAAA;EAZc;EAAA,SAepB,IAAA,EAAM,IAAA;AAAA;AAAA,iBAGD,aAAA,CAAc,IAAA,EAAM,WAAA,GAAc,IAAA,IAAQ,WAAW;AAAA,iBAIrD,SAAA,IAAa,GAAA,EAAK,OAAA,CAAQ,CAAA,IAAK,GAAA,IAAO,OAAA,CAAQ,CAAA;AAAA,iBAI9C,mBAAA,CACd,CAAA,EAAG,eAAA,CAAgB,WAAA,IAClB,CAAA,IAAK,eAAA,CAAgB,WAAA;AAAA,iBAIR,eAAA,IACd,CAAA,EAAG,eAAA,CAAgB,OAAA,CAAQ,CAAA,KAC1B,CAAA,IAAK,eAAA,CAAgB,OAAA,CAAQ,CAAA;AAAA,iBAIhB,aAAA,IAAiB,GAAA,EAAK,OAAA,CAAQ,CAAA,IAAK,OAAA,CAAQ,CAAA;AAAA,iBAK3C,cAAA,SACd,IAAA,EAAM,OAAA,CAAQ,EAAA,IAAM,WAAA,CAAY,EAAA,GAChC,EAAA,GAAK,CAAA,EAAG,EAAA,KAAO,EAAA,GACd,OAAA,CAAQ,EAAA;AAAA,iBACK,cAAA,SAAuB,IAAA,EAAM,OAAA,CAAQ,EAAA,GAAK,EAAA,GAAK,CAAA,EAAG,EAAA,KAAO,EAAA,GAAK,OAAA,CAAQ,EAAA;AAAA,iBACtE,cAAA,SACd,IAAA,EAAM,OAAA,CAAQ,EAAA,eACd,EAAA,GAAK,CAAA,EAAG,EAAA,KAAO,EAAA,GACd,OAAA,CAAQ,EAAA;AAAA,iBACK,cAAA,SAAuB,IAAA,EAAM,OAAA,CAAQ,EAAA,GAAK,EAAA,GAAK,CAAA,EAAG,EAAA,KAAO,EAAA,GAAK,OAAA,CAAQ,EAAA;AAAA,iBACtE,cAAA,SACd,IAAA,EAAM,OAAA,CAAQ,EAAA,eACd,EAAA,GAAK,CAAA,EAAG,EAAA,KAAO,EAAA,GACd,OAAA,CAAQ,EAAA;AAAA,iBAaK,iBAAA,IAAqB,KAAA,EAAO,SAAA,CAAU,OAAA,CAAQ,CAAA,KAAM,OAAA,CAAQ,CAAA"}
1
+ {"version":3,"file":"spec.d.ts","names":[],"sources":["../../src/pool/spec.ts"],"mappings":";;;;;;;;KAOY,WAAA;4CAED,IAAA,UAFC;EAAA,SAKD,IAAA;WAGA,MAAA,GAAS,MAAA;EAIO;;EAAA,SAAhB,aAAA,GAAgB,MAAA,kBAGI;EAAA,SAApB,WAAA,GAAc,MAAA;AAAA;AAAA,KAGb,eAAA;EAAoB,WAAA;EAAuB,IAAI;AAAA;AAAA,KAC/C,cAAA,GAAiB,OAAA,CAAQ,iBAAA,CAAkB,eAAA;AAAA,KAC3C,gBAAA,GAAmB,KAAK;AAAA,KACxB,eAAA,GAAkB,OAAA,CAAQ,iBAAA,CAAkB,gBAAA;AANzB;AAAA,KAQnB,SAAA,GAAY,cAAA,GAAiB,eAAe;AAAA,iBAExC,WAAA,CAAY,KAAA,YAAiB,KAAA,IAAS,SAAS;AAAA,iBAK/C,YAAA,CAAa,KAAA,YAAiB,KAAA,IAAS,eAAA,GAAkB,gBAAgB;AAAA,iBAIzE,eAAA,CAAgB,GAAA,EAAK,eAAA,GAAkB,gBAAA,GAAmB,SAAA;AAAA,iBAU1D,oBAAA,CAAqB,WAAA,YAAuB,IAAA,WAAe,SAAS;AAAA,iBAIpE,gBAAA,CAAiB,KAAA,YAAiB,KAAA,IAAS,cAAc;AAAA,iBAKzD,iBAAA,CAAkB,KAAA,YAAiB,KAAA,IAAS,eAAe;AAAA,iBAM3D,qBAAA,CAAsB,OAAA,UAAiB,UAAA,WAAqB,SAAS;AAAA,iBAQrE,kBAAA,CAAmB,KAAA,YAAiB,KAAA,IAAS,gBAAgB;AAAA,iBAK7D,iBAAA,CAAkB,KAAA,YAAiB,KAAA,IAAS,eAAe;;;;;;UAW1D,OAAA;EAhEqD;EAAA,SAkE3D,EAAA,EAAI,SAAA;EAjEH;EAAA,SAoED,IAAA,EAAM,WAAA;;WAGN,IAAA,EAAM,IAAA;AAAA;AAAA,iBAGD,SAAA,OAAgB,GAAA,YAAe,GAAA,IAAO,OAAO,CAAC,IAAA;AAAA,iBAI9C,SAAA,IAAa,GAAA,YAAe,GAAA,IAAO,OAAO,CAAC,CAAA;AAAA,iBAI3C,aAAA,CAAc,IAAA,EAAM,WAAA,GAAc,IAAA,IAAQ,WAAW;AAAA,iBAIrD,aAAA,IAAiB,GAAA,EAAK,OAAA,CAAQ,CAAA,IAAK,OAAA,CAAQ,CAAA;AAAA,iBAK3C,cAAA,SAAuB,IAAA,EAAM,OAAA,CAAQ,EAAA,GAAK,EAAA,GAAK,CAAA,EAAG,EAAA,KAAO,EAAA,GAAK,OAAA,CAAQ,EAAA;AAAA,iBACtE,cAAA,SACd,IAAA,EAAM,OAAA,CAAQ,EAAA,eACd,EAAA,GAAK,CAAA,EAAG,EAAA,KAAO,EAAA,GACd,OAAA,CAAQ,EAAA;AAAA,iBACK,cAAA,SAAuB,IAAA,EAAM,OAAA,CAAQ,EAAA,GAAK,EAAA,GAAK,CAAA,EAAG,EAAA,KAAO,EAAA,GAAK,OAAA,CAAQ,EAAA;AAAA,iBACtE,cAAA,SACd,IAAA,EAAM,OAAA,CAAQ,EAAA,eACd,EAAA,GAAK,CAAA,EAAG,EAAA,KAAO,EAAA,GACd,OAAA,CAAQ,EAAA;AAAA,iBAaK,iBAAA,IAAqB,KAAA,EAAO,SAAA,CAAU,OAAA,CAAQ,CAAA,KAAM,OAAA,CAAQ,CAAA"}
package/dist/pool/spec.js CHANGED
@@ -1,16 +1,56 @@
1
1
  import { assertNever } from "../util.js";
2
+ import { canonicalizeJson, parseJsonSafely } from "../json.js";
2
3
  //#region src/pool/spec.ts
3
- function isPColumnSpec(spec) {
4
- return spec.kind === "PColumn";
4
+ function isPObjectId(value) {
5
+ if (typeof value !== "string") return false;
6
+ return isPObjectKey(parseJsonSafely(value));
5
7
  }
6
- function isPColumn(obj) {
7
- return isPColumnSpec(obj.spec);
8
+ function isPObjectKey(value) {
9
+ return isLocalPObjectKey(value) || isGlobalPObjectKey(value);
10
+ }
11
+ function createPObjectId(obj) {
12
+ if (isLocalPObjectKey(obj)) return createLocalPObjectId(obj.resolvePath, obj.name);
13
+ if (isGlobalPObjectKey(obj)) return createGlobalPObjectId(obj.blockId, obj.name);
14
+ throw new Error(`createPObjectId: unrecognized object key structure: ${JSON.stringify(obj)}`);
15
+ }
16
+ function createLocalPObjectId(resolvePath, name) {
17
+ return canonicalizeJson({
18
+ resolvePath,
19
+ name
20
+ });
21
+ }
22
+ function isLocalPObjectId(value) {
23
+ if (typeof value !== "string") return false;
24
+ return isLocalPObjectKey(parseJsonSafely(value));
25
+ }
26
+ function isLocalPObjectKey(value) {
27
+ if (typeof value !== "object" || value === null) return false;
28
+ const v = value;
29
+ return Array.isArray(v.resolvePath) && typeof v.name === "string";
8
30
  }
9
- function isPColumnSpecResult(r) {
10
- return isPColumnSpec(r.obj);
31
+ function createGlobalPObjectId(blockId, exportName) {
32
+ return canonicalizeJson({
33
+ __isRef: true,
34
+ blockId,
35
+ name: exportName
36
+ });
11
37
  }
12
- function isPColumnResult(r) {
13
- return isPColumnSpec(r.obj.spec);
38
+ function isGlobalPObjectKey(value) {
39
+ if (typeof value !== "object" || value === null) return false;
40
+ return "__isRef" in value && "blockId" in value && "name" in value;
41
+ }
42
+ function isGlobalPObjectId(value) {
43
+ if (typeof value !== "string") return false;
44
+ return isGlobalPObjectKey(parseJsonSafely(value));
45
+ }
46
+ function isPObject(obj) {
47
+ return typeof obj === "object" && obj !== null && "id" in obj && "spec" in obj && "data" in obj;
48
+ }
49
+ function isPColumn(obj) {
50
+ return isPObject(obj) && isPColumnSpec(obj.spec);
51
+ }
52
+ function isPColumnSpec(spec) {
53
+ return spec.kind === "PColumn";
14
54
  }
15
55
  function ensurePColumn(obj) {
16
56
  if (!isPColumn(obj)) throw new Error(`not a PColumn (kind = ${obj.spec.kind})`);
@@ -19,7 +59,7 @@ function ensurePColumn(obj) {
19
59
  function mapPObjectData(pObj, cb) {
20
60
  return pObj === void 0 ? void 0 : {
21
61
  ...pObj,
22
- data: cb(typeof pObj.data === "function" ? pObj.data() : pObj.data)
62
+ data: cb(pObj.data)
23
63
  };
24
64
  }
25
65
  function extractAllColumns(entry) {
@@ -51,6 +91,6 @@ function extractAllColumns(entry) {
51
91
  return [...columns.values()];
52
92
  }
53
93
  //#endregion
54
- export { ensurePColumn, extractAllColumns, isPColumn, isPColumnResult, isPColumnSpec, isPColumnSpecResult, mapPObjectData };
94
+ export { createGlobalPObjectId, createLocalPObjectId, createPObjectId, ensurePColumn, extractAllColumns, isGlobalPObjectId, isGlobalPObjectKey, isLocalPObjectId, isLocalPObjectKey, isPColumn, isPColumnSpec, isPObject, isPObjectId, isPObjectKey, mapPObjectData };
55
95
 
56
96
  //# sourceMappingURL=spec.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"spec.js","names":[],"sources":["../../src/pool/spec.ts"],"sourcesContent":["import type { Branded } from \"../branding\";\nimport type { JoinEntry, PColumn, PColumnLazy, PColumnSpec } from \"../drivers\";\nimport { assertNever } from \"../util\";\nimport type { ResultPoolEntry } from \"./entry\";\n\n/** Any object exported into the result pool by the block always have spec attached to it */\nexport type PObjectSpec = {\n /** PObject kind discriminator */\n readonly kind: string;\n\n /** Name is common part of PObject identity */\n readonly name: string;\n\n /** Domain is a set of key-value pairs that can be used to identify the object */\n readonly domain?: Record<string, string>;\n\n /** Context domain provides additional axis/column identity that is matched\n * by kinship rules (subset/superset/overlap) rather than exact equality */\n readonly contextDomain?: Record<string, string>;\n\n /** Additional information attached to the object */\n readonly annotations?: Record<string, string>;\n};\n\n/** Stable PObject id */\nexport type PObjectId = Branded<string, \"PColumnId\">;\n\n/**\n * Full PObject representation.\n *\n * @template Data type of the object referencing or describing the \"data\" part of the PObject\n * */\nexport interface PObject<Data> {\n /** Fully rendered PObjects are assigned a stable identifier. */\n readonly id: PObjectId;\n\n /** PObject spec, allowing it to be found among other PObjects */\n readonly spec: PObjectSpec;\n\n /** A handle to data object */\n readonly data: Data;\n}\n\nexport function isPColumnSpec(spec: PObjectSpec): spec is PColumnSpec {\n return spec.kind === \"PColumn\";\n}\n\nexport function isPColumn<T>(obj: PObject<T>): obj is PColumn<T> {\n return isPColumnSpec(obj.spec);\n}\n\nexport function isPColumnSpecResult(\n r: ResultPoolEntry<PObjectSpec>,\n): r is ResultPoolEntry<PColumnSpec> {\n return isPColumnSpec(r.obj);\n}\n\nexport function isPColumnResult<T>(\n r: ResultPoolEntry<PObject<T>>,\n): r is ResultPoolEntry<PColumn<T>> {\n return isPColumnSpec(r.obj.spec);\n}\n\nexport function ensurePColumn<T>(obj: PObject<T>): PColumn<T> {\n if (!isPColumn(obj)) throw new Error(`not a PColumn (kind = ${obj.spec.kind})`);\n return obj;\n}\n\nexport function mapPObjectData<D1, D2>(\n pObj: PColumn<D1> | PColumnLazy<D1>,\n cb: (d: D1) => D2,\n): PColumn<D2>;\nexport function mapPObjectData<D1, D2>(pObj: PColumn<D1>, cb: (d: D1) => D2): PColumn<D2>;\nexport function mapPObjectData<D1, D2>(\n pObj: PColumn<D1> | undefined,\n cb: (d: D1) => D2,\n): PColumn<D2> | undefined;\nexport function mapPObjectData<D1, D2>(pObj: PObject<D1>, cb: (d: D1) => D2): PObject<D2>;\nexport function mapPObjectData<D1, D2>(\n pObj: PObject<D1> | undefined,\n cb: (d: D1) => D2,\n): PObject<D2> | undefined;\nexport function mapPObjectData<D1, D2>(\n pObj: PObject<D1> | undefined,\n cb: (d: D1) => D2,\n): PObject<D2> | undefined {\n return pObj === undefined\n ? undefined\n : {\n ...pObj,\n data: cb(typeof pObj.data === \"function\" ? pObj.data() : pObj.data),\n };\n}\n\nexport function extractAllColumns<D>(entry: JoinEntry<PColumn<D>>): PColumn<D>[] {\n const columns = new Map<PObjectId, PColumn<D>>();\n const addAllColumns = (entry: JoinEntry<PColumn<D>>) => {\n switch (entry.type) {\n case \"column\":\n columns.set(entry.column.id, entry.column);\n return;\n case \"slicedColumn\":\n columns.set(entry.column.id, entry.column);\n return;\n case \"artificialColumn\":\n columns.set(entry.column.id, entry.column);\n return;\n case \"inlineColumn\":\n return;\n case \"full\":\n case \"inner\":\n for (const e of entry.entries) addAllColumns(e);\n return;\n case \"outer\":\n addAllColumns(entry.primary);\n for (const e of entry.secondary) addAllColumns(e);\n return;\n default:\n assertNever(entry);\n }\n };\n addAllColumns(entry);\n return [...columns.values()];\n}\n"],"mappings":";;AA2CA,SAAgB,cAAc,MAAwC;CACpE,OAAO,KAAK,SAAS;AACvB;AAEA,SAAgB,UAAa,KAAoC;CAC/D,OAAO,cAAc,IAAI,IAAI;AAC/B;AAEA,SAAgB,oBACd,GACmC;CACnC,OAAO,cAAc,EAAE,GAAG;AAC5B;AAEA,SAAgB,gBACd,GACkC;CAClC,OAAO,cAAc,EAAE,IAAI,IAAI;AACjC;AAEA,SAAgB,cAAiB,KAA6B;CAC5D,IAAI,CAAC,UAAU,GAAG,GAAG,MAAM,IAAI,MAAM,yBAAyB,IAAI,KAAK,KAAK,EAAE;CAC9E,OAAO;AACT;AAgBA,SAAgB,eACd,MACA,IACyB;CACzB,OAAO,SAAS,KAAA,IACZ,KAAA,IACA;EACE,GAAG;EACH,MAAM,GAAG,OAAO,KAAK,SAAS,aAAa,KAAK,KAAK,IAAI,KAAK,IAAI;CACpE;AACN;AAEA,SAAgB,kBAAqB,OAA4C;CAC/E,MAAM,0BAAU,IAAI,IAA2B;CAC/C,MAAM,iBAAiB,UAAiC;EACtD,QAAQ,MAAM,MAAd;GACE,KAAK;IACH,QAAQ,IAAI,MAAM,OAAO,IAAI,MAAM,MAAM;IACzC;GACF,KAAK;IACH,QAAQ,IAAI,MAAM,OAAO,IAAI,MAAM,MAAM;IACzC;GACF,KAAK;IACH,QAAQ,IAAI,MAAM,OAAO,IAAI,MAAM,MAAM;IACzC;GACF,KAAK,gBACH;GACF,KAAK;GACL,KAAK;IACH,KAAK,MAAM,KAAK,MAAM,SAAS,cAAc,CAAC;IAC9C;GACF,KAAK;IACH,cAAc,MAAM,OAAO;IAC3B,KAAK,MAAM,KAAK,MAAM,WAAW,cAAc,CAAC;IAChD;GACF,SACE,YAAY,KAAK;EACrB;CACF;CACA,cAAc,KAAK;CACnB,OAAO,CAAC,GAAG,QAAQ,OAAO,CAAC;AAC7B"}
1
+ {"version":3,"file":"spec.js","names":[],"sources":["../../src/pool/spec.ts"],"sourcesContent":["import type { JoinEntry, PColumn, PColumnSpec } from \"../drivers\";\nimport { assertNever } from \"../util\";\nimport { PlRef } from \"../ref\";\nimport { CanonicalizedJson, canonicalizeJson, parseJsonSafely } from \"../json\";\nimport { Branded } from \"@milaboratories/helpers\";\n\n/** Any object exported into the result pool by the block always have spec attached to it */\nexport type PObjectSpec = {\n /** PObject kind discriminator */\n readonly kind: string;\n\n /** Name is common part of PObject identity */\n readonly name: string;\n\n /** Domain is a set of key-value pairs that can be used to identify the object */\n readonly domain?: Record<string, string>;\n\n /** Context domain provides additional axis/column identity that is matched\n * by kinship rules (subset/superset/overlap) rather than exact equality */\n readonly contextDomain?: Record<string, string>;\n\n /** Additional information attached to the object */\n readonly annotations?: Record<string, string>;\n};\n\nexport type LocalPObjectKey = { resolvePath: string[]; name: string };\nexport type LocalPObjectId = Branded<CanonicalizedJson<LocalPObjectKey>, \"LocalPObjectId\">;\nexport type GlobalPObjectKey = PlRef;\nexport type GlobalPObjectId = Branded<CanonicalizedJson<GlobalPObjectKey>, \"GlobalPObjectId\">;\n/** Stable PObject id */\nexport type PObjectId = LocalPObjectId | GlobalPObjectId;\n\nexport function isPObjectId(value: unknown): value is PObjectId {\n if (typeof value !== \"string\") return false;\n return isPObjectKey(parseJsonSafely(value));\n}\n\nexport function isPObjectKey(value: unknown): value is LocalPObjectKey | GlobalPObjectKey {\n return isLocalPObjectKey(value) || isGlobalPObjectKey(value);\n}\n\nexport function createPObjectId(obj: LocalPObjectKey | GlobalPObjectKey): PObjectId {\n if (isLocalPObjectKey(obj)) {\n return createLocalPObjectId(obj.resolvePath, obj.name);\n }\n if (isGlobalPObjectKey(obj)) {\n return createGlobalPObjectId(obj.blockId, obj.name);\n }\n throw new Error(`createPObjectId: unrecognized object key structure: ${JSON.stringify(obj)}`);\n}\n\nexport function createLocalPObjectId(resolvePath: string[], name: string): PObjectId {\n return canonicalizeJson({ resolvePath, name }) as PObjectId;\n}\n\nexport function isLocalPObjectId(value: unknown): value is LocalPObjectId {\n if (typeof value !== \"string\") return false;\n return isLocalPObjectKey(parseJsonSafely<LocalPObjectKey>(value));\n}\n\nexport function isLocalPObjectKey(value: unknown): value is LocalPObjectKey {\n if (typeof value !== \"object\" || value === null) return false;\n const v = value as LocalPObjectKey;\n return Array.isArray(v.resolvePath) && typeof v.name === \"string\";\n}\n\nexport function createGlobalPObjectId(blockId: string, exportName: string): PObjectId {\n return canonicalizeJson({\n __isRef: true,\n blockId,\n name: exportName,\n } satisfies PlRef) as PObjectId;\n}\n\nexport function isGlobalPObjectKey(value: unknown): value is GlobalPObjectKey {\n if (typeof value !== \"object\" || value === null) return false;\n return \"__isRef\" in value && \"blockId\" in value && \"name\" in value;\n}\n\nexport function isGlobalPObjectId(value: unknown): value is GlobalPObjectId {\n if (typeof value !== \"string\") return false;\n const parsed = parseJsonSafely<GlobalPObjectKey>(value);\n return isGlobalPObjectKey(parsed);\n}\n\n/**\n * Full PObject representation.\n *\n * @template Data type of the object referencing or describing the \"data\" part of the PObject\n * */\nexport interface PObject<Data> {\n /** Fully rendered PObjects are assigned a stable identifier. */\n readonly id: PObjectId;\n\n /** PObject spec, allowing it to be found among other PObjects */\n readonly spec: PObjectSpec;\n\n /** A handle to data object */\n readonly data: Data;\n}\n\nexport function isPObject<Data>(obj: unknown): obj is PObject<Data> {\n return typeof obj === \"object\" && obj !== null && \"id\" in obj && \"spec\" in obj && \"data\" in obj;\n}\n\nexport function isPColumn<T>(obj: unknown): obj is PColumn<T> {\n return isPObject(obj) && isPColumnSpec(obj.spec);\n}\n\nexport function isPColumnSpec(spec: PObjectSpec): spec is PColumnSpec {\n return spec.kind === \"PColumn\";\n}\n\nexport function ensurePColumn<T>(obj: PObject<T>): PColumn<T> {\n if (!isPColumn(obj)) throw new Error(`not a PColumn (kind = ${obj.spec.kind})`);\n return obj;\n}\n\nexport function mapPObjectData<D1, D2>(pObj: PColumn<D1>, cb: (d: D1) => D2): PColumn<D2>;\nexport function mapPObjectData<D1, D2>(\n pObj: PColumn<D1> | undefined,\n cb: (d: D1) => D2,\n): PColumn<D2> | undefined;\nexport function mapPObjectData<D1, D2>(pObj: PObject<D1>, cb: (d: D1) => D2): PObject<D2>;\nexport function mapPObjectData<D1, D2>(\n pObj: PObject<D1> | undefined,\n cb: (d: D1) => D2,\n): PObject<D2> | undefined;\nexport function mapPObjectData<D1, D2>(\n pObj: PObject<D1> | undefined,\n cb: (d: D1) => D2,\n): PObject<D2> | undefined {\n return pObj === undefined\n ? undefined\n : {\n ...pObj,\n data: cb(pObj.data),\n };\n}\n\nexport function extractAllColumns<D>(entry: JoinEntry<PColumn<D>>): PColumn<D>[] {\n const columns = new Map<PObjectId, PColumn<D>>();\n const addAllColumns = (entry: JoinEntry<PColumn<D>>) => {\n switch (entry.type) {\n case \"column\":\n columns.set(entry.column.id, entry.column);\n return;\n case \"slicedColumn\":\n columns.set(entry.column.id, entry.column);\n return;\n case \"artificialColumn\":\n columns.set(entry.column.id, entry.column);\n return;\n case \"inlineColumn\":\n return;\n case \"full\":\n case \"inner\":\n for (const e of entry.entries) addAllColumns(e);\n return;\n case \"outer\":\n addAllColumns(entry.primary);\n for (const e of entry.secondary) addAllColumns(e);\n return;\n default:\n assertNever(entry);\n }\n };\n addAllColumns(entry);\n return [...columns.values()];\n}\n"],"mappings":";;;AAgCA,SAAgB,YAAY,OAAoC;CAC9D,IAAI,OAAO,UAAU,UAAU,OAAO;CACtC,OAAO,aAAa,gBAAgB,KAAK,CAAC;AAC5C;AAEA,SAAgB,aAAa,OAA6D;CACxF,OAAO,kBAAkB,KAAK,KAAK,mBAAmB,KAAK;AAC7D;AAEA,SAAgB,gBAAgB,KAAoD;CAClF,IAAI,kBAAkB,GAAG,GACvB,OAAO,qBAAqB,IAAI,aAAa,IAAI,IAAI;CAEvD,IAAI,mBAAmB,GAAG,GACxB,OAAO,sBAAsB,IAAI,SAAS,IAAI,IAAI;CAEpD,MAAM,IAAI,MAAM,uDAAuD,KAAK,UAAU,GAAG,GAAG;AAC9F;AAEA,SAAgB,qBAAqB,aAAuB,MAAyB;CACnF,OAAO,iBAAiB;EAAE;EAAa;CAAK,CAAC;AAC/C;AAEA,SAAgB,iBAAiB,OAAyC;CACxE,IAAI,OAAO,UAAU,UAAU,OAAO;CACtC,OAAO,kBAAkB,gBAAiC,KAAK,CAAC;AAClE;AAEA,SAAgB,kBAAkB,OAA0C;CAC1E,IAAI,OAAO,UAAU,YAAY,UAAU,MAAM,OAAO;CACxD,MAAM,IAAI;CACV,OAAO,MAAM,QAAQ,EAAE,WAAW,KAAK,OAAO,EAAE,SAAS;AAC3D;AAEA,SAAgB,sBAAsB,SAAiB,YAA+B;CACpF,OAAO,iBAAiB;EACtB,SAAS;EACT;EACA,MAAM;CACR,CAAiB;AACnB;AAEA,SAAgB,mBAAmB,OAA2C;CAC5E,IAAI,OAAO,UAAU,YAAY,UAAU,MAAM,OAAO;CACxD,OAAO,aAAa,SAAS,aAAa,SAAS,UAAU;AAC/D;AAEA,SAAgB,kBAAkB,OAA0C;CAC1E,IAAI,OAAO,UAAU,UAAU,OAAO;CAEtC,OAAO,mBADQ,gBAAkC,KAClB,CAAC;AAClC;AAkBA,SAAgB,UAAgB,KAAoC;CAClE,OAAO,OAAO,QAAQ,YAAY,QAAQ,QAAQ,QAAQ,OAAO,UAAU,OAAO,UAAU;AAC9F;AAEA,SAAgB,UAAa,KAAiC;CAC5D,OAAO,UAAU,GAAG,KAAK,cAAc,IAAI,IAAI;AACjD;AAEA,SAAgB,cAAc,MAAwC;CACpE,OAAO,KAAK,SAAS;AACvB;AAEA,SAAgB,cAAiB,KAA6B;CAC5D,IAAI,CAAC,UAAU,GAAG,GAAG,MAAM,IAAI,MAAM,yBAAyB,IAAI,KAAK,KAAK,EAAE;CAC9E,OAAO;AACT;AAYA,SAAgB,eACd,MACA,IACyB;CACzB,OAAO,SAAS,KAAA,IACZ,KAAA,IACA;EACE,GAAG;EACH,MAAM,GAAG,KAAK,IAAI;CACpB;AACN;AAEA,SAAgB,kBAAqB,OAA4C;CAC/E,MAAM,0BAAU,IAAI,IAA2B;CAC/C,MAAM,iBAAiB,UAAiC;EACtD,QAAQ,MAAM,MAAd;GACE,KAAK;IACH,QAAQ,IAAI,MAAM,OAAO,IAAI,MAAM,MAAM;IACzC;GACF,KAAK;IACH,QAAQ,IAAI,MAAM,OAAO,IAAI,MAAM,MAAM;IACzC;GACF,KAAK;IACH,QAAQ,IAAI,MAAM,OAAO,IAAI,MAAM,MAAM;IACzC;GACF,KAAK,gBACH;GACF,KAAK;GACL,KAAK;IACH,KAAK,MAAM,KAAK,MAAM,SAAS,cAAc,CAAC;IAC9C;GACF,KAAK;IACH,cAAc,MAAM,OAAO;IAC3B,KAAK,MAAM,KAAK,MAAM,WAAW,cAAc,CAAC;IAChD;GACF,SACE,YAAY,KAAK;EACrB;CACF;CACA,cAAc,KAAK;CACnB,OAAO,CAAC,GAAG,QAAQ,OAAO,CAAC;AAC7B"}
@@ -1,7 +1,7 @@
1
1
  import { Services } from "./service_declarations.js";
2
- import { InferServiceKind, InferServiceModel, InferServiceUi, ModelServiceFactoryMap, ModelServices, RequireServices, ServiceBrand, ServiceDispatch, ServiceName, ServiceNameLiterals, ServiceRequireFlags, ServiceType, ServiceTypesLike, UiServiceFactoryMap, UiServices, getServiceKind, getServiceModelMethods, getServiceUiMethods, isMainService, isNodeService, isWasmService, service, serviceFnKey } from "./service_types.js";
2
+ import { InferServiceKind, InferServiceModel, InferServiceModelHost, InferServiceUi, InferServiceUiHost, ModelServiceFactoryMap, ModelServices, RequireServices, ServiceBrand, ServiceDispatch, ServiceName, ServiceNameLiterals, ServiceRequireFlags, ServiceType, ServiceTypesLike, UiServiceFactoryMap, UiServices, getServiceKind, getServiceModelMethods, getServiceUiMethods, isMainService, isNodeService, isWasmService, service, serviceFnKey } from "./service_types.js";
3
3
  import { ModelServiceRegistry, UiServiceRegistry } from "./service_registry.js";
4
4
  import { KnownServiceName, SERVICE_CAPABILITY_FLAGS, SERVICE_FEATURE_FLAGS, getMethodNames, isKnownServiceName, registerServiceCapabilities, resolveRequiredServices } from "./service_capabilities.js";
5
5
  import { createNodeServiceHandlers } from "./node_service_handlers.js";
6
6
  import { MODEL_SERVICE_METHOD_MAP, NodeServiceHandlerMap, SERVICE_METHOD_MAP, buildServiceInfo, resolveNodeServiceHandler } from "./service_injectors.js";
7
- export { InferServiceKind, InferServiceModel, InferServiceUi, KnownServiceName, MODEL_SERVICE_METHOD_MAP, ModelServiceFactoryMap, ModelServiceRegistry, ModelServices, NodeServiceHandlerMap, RequireServices, SERVICE_CAPABILITY_FLAGS, SERVICE_FEATURE_FLAGS, SERVICE_METHOD_MAP, ServiceBrand, ServiceDispatch, ServiceName, ServiceNameLiterals, ServiceRequireFlags, ServiceType, ServiceTypesLike, Services, UiServiceFactoryMap, UiServiceRegistry, UiServices, buildServiceInfo, createNodeServiceHandlers, getMethodNames, getServiceKind, getServiceModelMethods, getServiceUiMethods, isKnownServiceName, isMainService, isNodeService, isWasmService, registerServiceCapabilities, resolveNodeServiceHandler, resolveRequiredServices, service, serviceFnKey };
7
+ export { InferServiceKind, InferServiceModel, InferServiceModelHost, InferServiceUi, InferServiceUiHost, KnownServiceName, MODEL_SERVICE_METHOD_MAP, ModelServiceFactoryMap, ModelServiceRegistry, ModelServices, NodeServiceHandlerMap, RequireServices, SERVICE_CAPABILITY_FLAGS, SERVICE_FEATURE_FLAGS, SERVICE_METHOD_MAP, ServiceBrand, ServiceDispatch, ServiceName, ServiceNameLiterals, ServiceRequireFlags, ServiceType, ServiceTypesLike, Services, UiServiceFactoryMap, UiServiceRegistry, UiServices, buildServiceInfo, createNodeServiceHandlers, getMethodNames, getServiceKind, getServiceModelMethods, getServiceUiMethods, isKnownServiceName, isMainService, isNodeService, isWasmService, registerServiceCapabilities, resolveNodeServiceHandler, resolveRequiredServices, service, serviceFnKey };
@@ -57,6 +57,28 @@ const Services = {
57
57
  name: "dialog",
58
58
  modelMethods: [],
59
59
  uiMethods: ["showSaveDialog"]
60
+ }),
61
+ ColumnsCollection: require_service_types.service()({
62
+ type: "wasm",
63
+ name: "columnsCollection",
64
+ modelMethods: [
65
+ "create",
66
+ "isEmpty",
67
+ "isFinal",
68
+ "getColumns",
69
+ "addSource",
70
+ "discover",
71
+ "filter"
72
+ ],
73
+ uiMethods: [
74
+ "create",
75
+ "isEmpty",
76
+ "isFinal",
77
+ "getColumns",
78
+ "addSource",
79
+ "discover",
80
+ "filter"
81
+ ]
60
82
  })
61
83
  };
62
84
  //#endregion
@@ -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 \"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 \"exportPTable\",\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,QAA4C,CAAC,CAAC;EACxD,MAAM;EACN,MAAM;EACN,cAAc;GACZ;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;EACF;EACA,WAAW;GACT;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;EACF;CACF,CAAC;CACD,QAAQA,sBAAAA,QAAyC,CAAC,CAAC;EACjD,MAAM;EACN,MAAM;EACN,cAAc;GAAC;GAAgB;GAAgB;EAAgB;EAC/D,WAAW;GACT;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;EACF;CACF,CAAC;CACD,QAAQA,sBAAAA,QAA8C,CAAC,CAAC;EACtD,MAAM;EACN,MAAM;EACN,cAAc,CAAC;EACf,WAAW,CAAC,gBAAgB;CAC9B,CAAC;AACH"}
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 {\n ColumnsCollectionDriver,\n ColumnsCollectionDriverModel,\n} from \"../drivers/columns/columns_collection_driver\";\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 \"exportPTable\",\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 ColumnsCollection: service<\n ColumnsCollectionDriverModel,\n ColumnsCollectionDriverModel,\n ColumnsCollectionDriver,\n ColumnsCollectionDriver\n >()({\n type: \"wasm\",\n name: \"columnsCollection\",\n modelMethods: [\n \"create\",\n \"isEmpty\",\n \"isFinal\",\n \"getColumns\",\n \"addSource\",\n \"discover\",\n \"filter\",\n ] as const,\n uiMethods: [\n \"create\",\n \"isEmpty\",\n \"isFinal\",\n \"getColumns\",\n \"addSource\",\n \"discover\",\n \"filter\",\n ] as const,\n }),\n};\n"],"mappings":";;AAkCA,MAAa,WAAW;CACtB,YAAYA,sBAAAA,QAA4C,CAAC,CAAC;EACxD,MAAM;EACN,MAAM;EACN,cAAc;GACZ;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;EACF;EACA,WAAW;GACT;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;EACF;CACF,CAAC;CACD,QAAQA,sBAAAA,QAAyC,CAAC,CAAC;EACjD,MAAM;EACN,MAAM;EACN,cAAc;GAAC;GAAgB;GAAgB;EAAgB;EAC/D,WAAW;GACT;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;EACF;CACF,CAAC;CACD,QAAQA,sBAAAA,QAA8C,CAAC,CAAC;EACtD,MAAM;EACN,MAAM;EACN,cAAc,CAAC;EACf,WAAW,CAAC,gBAAgB;CAC9B,CAAC;CACD,mBAAmBA,sBAAAA,QAKjB,CAAC,CAAC;EACF,MAAM;EACN,MAAM;EACN,cAAc;GACZ;GACA;GACA;GACA;GACA;GACA;GACA;EACF;EACA,WAAW;GACT;GACA;GACA;GACA;GACA;GACA;GACA;EACF;CACF,CAAC;AACH"}
@@ -4,12 +4,14 @@ import { PColumn } from "../drivers/pframe/spec/spec.js";
4
4
  import { DataInfo, PColumnValues } from "../drivers/pframe/data_info.js";
5
5
  import { PFrameSpecDriver } from "../drivers/pframe/spec_driver.js";
6
6
  import { PFrameDriver, PFrameModelDriver } from "../drivers/pframe/driver.js";
7
+ import { ColumnsCollectionDriver, ColumnsCollectionDriverModel } from "../drivers/columns/columns_collection_driver.js";
7
8
  import { ServiceTypesLike } from "./service_types.js";
8
9
  //#region src/services/service_declarations.d.ts
9
10
  declare const Services: {
10
- PFrameSpec: Branded<"pframeSpec", ServiceTypesLike<PFrameSpecDriver, PFrameSpecDriver, "wasm">>;
11
- PFrame: Branded<"pframe", ServiceTypesLike<PFrameModelDriver<PColumn<string | PColumnValues | DataInfo<string>>>, PFrameDriver, "node">>;
12
- Dialog: Branded<"dialog", ServiceTypesLike<Record<string, never>, DialogService, "main">>;
11
+ PFrameSpec: Branded<"pframeSpec", ServiceTypesLike<PFrameSpecDriver, PFrameSpecDriver, "wasm", PFrameSpecDriver, PFrameSpecDriver>>;
12
+ PFrame: Branded<"pframe", ServiceTypesLike<PFrameModelDriver<PColumn<string | PColumnValues | DataInfo<string>>>, PFrameDriver, "node", PFrameModelDriver<PColumn<string | PColumnValues | DataInfo<string>>>, PFrameDriver>>;
13
+ Dialog: Branded<"dialog", ServiceTypesLike<Record<string, never>, DialogService, "main", Record<string, never>, DialogService>>;
14
+ ColumnsCollection: Branded<"columnsCollection", ServiceTypesLike<ColumnsCollectionDriverModel, ColumnsCollectionDriverModel, "wasm", ColumnsCollectionDriver, ColumnsCollectionDriver>>;
13
15
  };
14
16
  //#endregion
15
17
  export { Services };
@@ -1 +1 @@
1
- {"version":3,"file":"service_declarations.d.ts","names":[],"sources":["../../src/services/service_declarations.ts"],"mappings":";;;;;;;;cA8Ba,QAAA"}
1
+ {"version":3,"file":"service_declarations.d.ts","names":[],"sources":["../../src/services/service_declarations.ts"],"mappings":";;;;;;;;;cAkCa,QAAA"}
@@ -57,6 +57,28 @@ const Services = {
57
57
  name: "dialog",
58
58
  modelMethods: [],
59
59
  uiMethods: ["showSaveDialog"]
60
+ }),
61
+ ColumnsCollection: service()({
62
+ type: "wasm",
63
+ name: "columnsCollection",
64
+ modelMethods: [
65
+ "create",
66
+ "isEmpty",
67
+ "isFinal",
68
+ "getColumns",
69
+ "addSource",
70
+ "discover",
71
+ "filter"
72
+ ],
73
+ uiMethods: [
74
+ "create",
75
+ "isEmpty",
76
+ "isFinal",
77
+ "getColumns",
78
+ "addSource",
79
+ "discover",
80
+ "filter"
81
+ ]
60
82
  })
61
83
  };
62
84
  //#endregion
@@ -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 \"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 \"exportPTable\",\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,QAA4C,CAAC,CAAC;EACxD,MAAM;EACN,MAAM;EACN,cAAc;GACZ;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;EACF;EACA,WAAW;GACT;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;EACF;CACF,CAAC;CACD,QAAQ,QAAyC,CAAC,CAAC;EACjD,MAAM;EACN,MAAM;EACN,cAAc;GAAC;GAAgB;GAAgB;EAAgB;EAC/D,WAAW;GACT;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;EACF;CACF,CAAC;CACD,QAAQ,QAA8C,CAAC,CAAC;EACtD,MAAM;EACN,MAAM;EACN,cAAc,CAAC;EACf,WAAW,CAAC,gBAAgB;CAC9B,CAAC;AACH"}
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 {\n ColumnsCollectionDriver,\n ColumnsCollectionDriverModel,\n} from \"../drivers/columns/columns_collection_driver\";\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 \"exportPTable\",\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 ColumnsCollection: service<\n ColumnsCollectionDriverModel,\n ColumnsCollectionDriverModel,\n ColumnsCollectionDriver,\n ColumnsCollectionDriver\n >()({\n type: \"wasm\",\n name: \"columnsCollection\",\n modelMethods: [\n \"create\",\n \"isEmpty\",\n \"isFinal\",\n \"getColumns\",\n \"addSource\",\n \"discover\",\n \"filter\",\n ] as const,\n uiMethods: [\n \"create\",\n \"isEmpty\",\n \"isFinal\",\n \"getColumns\",\n \"addSource\",\n \"discover\",\n \"filter\",\n ] as const,\n }),\n};\n"],"mappings":";;AAkCA,MAAa,WAAW;CACtB,YAAY,QAA4C,CAAC,CAAC;EACxD,MAAM;EACN,MAAM;EACN,cAAc;GACZ;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;EACF;EACA,WAAW;GACT;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;EACF;CACF,CAAC;CACD,QAAQ,QAAyC,CAAC,CAAC;EACjD,MAAM;EACN,MAAM;EACN,cAAc;GAAC;GAAgB;GAAgB;EAAgB;EAC/D,WAAW;GACT;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;EACF;CACF,CAAC;CACD,QAAQ,QAA8C,CAAC,CAAC;EACtD,MAAM;EACN,MAAM;EACN,cAAc,CAAC;EACf,WAAW,CAAC,gBAAgB;CAC9B,CAAC;CACD,mBAAmB,QAKjB,CAAC,CAAC;EACF,MAAM;EACN,MAAM;EACN,cAAc;GACZ;GACA;GACA;GACA;GACA;GACA;GACA;EACF;EACA,WAAW;GACT;GACA;GACA;GACA;GACA;GACA;GACA;EACF;CACF,CAAC;AACH"}
@@ -1 +1 @@
1
- {"version":3,"file":"service_registry.cjs","names":["ServiceNotRegisteredError"],"sources":["../../src/services/service_registry.ts"],"sourcesContent":["import type {\n ServiceTypesLike,\n InferServiceModel,\n InferServiceUi,\n ServiceName,\n ModelServiceFactoryMap,\n UiServiceFactoryMap,\n} from \"./service_types\";\nimport { ServiceNotRegisteredError } from \"../errors\";\nimport type { Services } from \"./service_declarations\";\n\ntype RegistryName = \"ModelServiceRegistry\" | \"UiServiceRegistry\";\ntype ServiceFactory = () => Record<string, Function>;\n\nclass ServiceRegistryBase {\n private readonly registryName: RegistryName;\n private readonly knownServices = new Set<ServiceName>();\n private readonly factories = new Map<ServiceName, ServiceFactory>();\n private readonly instances = new Map<ServiceName, Record<string, Function>>();\n\n protected constructor(\n registryName: RegistryName,\n serviceMap: Record<string, ServiceName>,\n factories: Record<string, (() => unknown) | null>,\n ) {\n this.registryName = registryName;\n for (const [key, factory] of Object.entries(factories)) {\n const serviceId = serviceMap[key];\n this.knownServices.add(serviceId);\n if (factory !== null) {\n this.factories.set(serviceId, factory as ServiceFactory);\n }\n }\n }\n\n async dispose(): Promise<void> {\n for (const instance of this.instances.values()) {\n if (Symbol.asyncDispose in instance) {\n await (instance as AsyncDisposable)[Symbol.asyncDispose]();\n } else if (Symbol.dispose in instance) {\n (instance as Disposable)[Symbol.dispose]();\n }\n }\n this.instances.clear();\n }\n\n protected getById(serviceId: ServiceName): Record<string, Function> | null {\n if (!this.knownServices.has(serviceId)) {\n throw new ServiceNotRegisteredError(\n `Service \"${serviceId}\" is not registered in ${this.registryName}. Add it to the factory map.`,\n );\n }\n if (this.instances.has(serviceId)) return this.instances.get(serviceId)!;\n\n const factory = this.factories.get(serviceId);\n if (!factory) return null;\n\n const instance = factory();\n this.instances.set(serviceId, instance);\n return instance;\n }\n}\n\nexport class ModelServiceRegistry<\n SMap extends Record<string, ServiceName> = typeof Services,\n> extends ServiceRegistryBase {\n constructor(serviceMap: SMap, factories: ModelServiceFactoryMap<SMap>) {\n super(\"ModelServiceRegistry\", serviceMap, factories);\n }\n\n get<S extends ServiceTypesLike>(\n id: ServiceName<S>,\n ):\n | ([unknown] extends [InferServiceModel<S>] ? Record<string, Function> : InferServiceModel<S>)\n | null;\n get(id: ServiceName): Record<string, Function> | null {\n return this.getById(id);\n }\n}\n\nexport class UiServiceRegistry<\n SMap extends Record<string, ServiceName> = typeof Services,\n> extends ServiceRegistryBase {\n constructor(serviceMap: SMap, factories: UiServiceFactoryMap<SMap>) {\n super(\"UiServiceRegistry\", serviceMap, factories);\n }\n\n get<S extends ServiceTypesLike>(\n id: ServiceName<S>,\n ): ([unknown] extends [InferServiceUi<S>] ? Record<string, Function> : InferServiceUi<S>) | null;\n get(id: ServiceName): Record<string, Function> | null {\n return this.getById(id);\n }\n}\n"],"mappings":";;AAcA,IAAM,sBAAN,MAA0B;CACxB;CACA,gCAAiC,IAAI,IAAiB;CACtD,4BAA6B,IAAI,IAAiC;CAClE,4BAA6B,IAAI,IAA2C;CAE5E,YACE,cACA,YACA,WACA;EACA,KAAK,eAAe;EACpB,KAAK,MAAM,CAAC,KAAK,YAAY,OAAO,QAAQ,SAAS,GAAG;GACtD,MAAM,YAAY,WAAW;GAC7B,KAAK,cAAc,IAAI,SAAS;GAChC,IAAI,YAAY,MACd,KAAK,UAAU,IAAI,WAAW,OAAyB;EAE3D;CACF;CAEA,MAAM,UAAyB;EAC7B,KAAK,MAAM,YAAY,KAAK,UAAU,OAAO,GAC3C,IAAI,OAAO,gBAAgB,UACzB,MAAO,SAA6B,OAAO,aAAa,CAAC;OACpD,IAAI,OAAO,WAAW,UAC3B,SAAyB,OAAO,QAAQ,CAAC;EAG7C,KAAK,UAAU,MAAM;CACvB;CAEA,QAAkB,WAAyD;EACzE,IAAI,CAAC,KAAK,cAAc,IAAI,SAAS,GACnC,MAAM,IAAIA,eAAAA,0BACR,YAAY,UAAU,yBAAyB,KAAK,aAAa,6BACnE;EAEF,IAAI,KAAK,UAAU,IAAI,SAAS,GAAG,OAAO,KAAK,UAAU,IAAI,SAAS;EAEtE,MAAM,UAAU,KAAK,UAAU,IAAI,SAAS;EAC5C,IAAI,CAAC,SAAS,OAAO;EAErB,MAAM,WAAW,QAAQ;EACzB,KAAK,UAAU,IAAI,WAAW,QAAQ;EACtC,OAAO;CACT;AACF;AAEA,IAAa,uBAAb,cAEU,oBAAoB;CAC5B,YAAY,YAAkB,WAAyC;EACrE,MAAM,wBAAwB,YAAY,SAAS;CACrD;CAOA,IAAI,IAAkD;EACpD,OAAO,KAAK,QAAQ,EAAE;CACxB;AACF;AAEA,IAAa,oBAAb,cAEU,oBAAoB;CAC5B,YAAY,YAAkB,WAAsC;EAClE,MAAM,qBAAqB,YAAY,SAAS;CAClD;CAKA,IAAI,IAAkD;EACpD,OAAO,KAAK,QAAQ,EAAE;CACxB;AACF"}
1
+ {"version":3,"file":"service_registry.cjs","names":["ServiceNotRegisteredError"],"sources":["../../src/services/service_registry.ts"],"sourcesContent":["import type {\n ServiceTypesLike,\n InferServiceModelHost,\n InferServiceUiHost,\n ServiceName,\n ModelServiceFactoryMap,\n UiServiceFactoryMap,\n} from \"./service_types\";\nimport { ServiceNotRegisteredError } from \"../errors\";\nimport type { Services } from \"./service_declarations\";\n\ntype RegistryName = \"ModelServiceRegistry\" | \"UiServiceRegistry\";\ntype ServiceFactory = () => Record<string, Function>;\n\nclass ServiceRegistryBase {\n private readonly registryName: RegistryName;\n private readonly knownServices = new Set<ServiceName>();\n private readonly factories = new Map<ServiceName, ServiceFactory>();\n private readonly instances = new Map<ServiceName, Record<string, Function>>();\n\n protected constructor(\n registryName: RegistryName,\n serviceMap: Record<string, ServiceName>,\n factories: Record<string, (() => unknown) | null>,\n ) {\n this.registryName = registryName;\n for (const [key, factory] of Object.entries(factories)) {\n const serviceId = serviceMap[key];\n this.knownServices.add(serviceId);\n if (factory !== null) {\n this.factories.set(serviceId, factory as ServiceFactory);\n }\n }\n }\n\n async dispose(): Promise<void> {\n for (const instance of this.instances.values()) {\n if (Symbol.asyncDispose in instance) {\n await (instance as AsyncDisposable)[Symbol.asyncDispose]();\n } else if (Symbol.dispose in instance) {\n (instance as Disposable)[Symbol.dispose]();\n }\n }\n this.instances.clear();\n }\n\n protected getById(serviceId: ServiceName): Record<string, Function> | null {\n if (!this.knownServices.has(serviceId)) {\n throw new ServiceNotRegisteredError(\n `Service \"${serviceId}\" is not registered in ${this.registryName}. Add it to the factory map.`,\n );\n }\n if (this.instances.has(serviceId)) return this.instances.get(serviceId)!;\n\n const factory = this.factories.get(serviceId);\n if (!factory) return null;\n\n const instance = factory();\n this.instances.set(serviceId, instance);\n return instance;\n }\n}\n\nexport class ModelServiceRegistry<\n SMap extends Record<string, ServiceName> = typeof Services,\n> extends ServiceRegistryBase {\n constructor(serviceMap: SMap, factories: ModelServiceFactoryMap<SMap>) {\n super(\"ModelServiceRegistry\", serviceMap, factories);\n }\n\n get<S extends ServiceTypesLike>(\n id: ServiceName<S>,\n ):\n | ([unknown] extends [InferServiceModelHost<S>]\n ? Record<string, Function>\n : InferServiceModelHost<S>)\n | null;\n get(id: ServiceName): Record<string, Function> | null {\n return this.getById(id);\n }\n}\n\nexport class UiServiceRegistry<\n SMap extends Record<string, ServiceName> = typeof Services,\n> extends ServiceRegistryBase {\n constructor(serviceMap: SMap, factories: UiServiceFactoryMap<SMap>) {\n super(\"UiServiceRegistry\", serviceMap, factories);\n }\n\n get<S extends ServiceTypesLike>(\n id: ServiceName<S>,\n ):\n | ([unknown] extends [InferServiceUiHost<S>] ? Record<string, Function> : InferServiceUiHost<S>)\n | null;\n get(id: ServiceName): Record<string, Function> | null {\n return this.getById(id);\n }\n}\n"],"mappings":";;AAcA,IAAM,sBAAN,MAA0B;CACxB;CACA,gCAAiC,IAAI,IAAiB;CACtD,4BAA6B,IAAI,IAAiC;CAClE,4BAA6B,IAAI,IAA2C;CAE5E,YACE,cACA,YACA,WACA;EACA,KAAK,eAAe;EACpB,KAAK,MAAM,CAAC,KAAK,YAAY,OAAO,QAAQ,SAAS,GAAG;GACtD,MAAM,YAAY,WAAW;GAC7B,KAAK,cAAc,IAAI,SAAS;GAChC,IAAI,YAAY,MACd,KAAK,UAAU,IAAI,WAAW,OAAyB;EAE3D;CACF;CAEA,MAAM,UAAyB;EAC7B,KAAK,MAAM,YAAY,KAAK,UAAU,OAAO,GAC3C,IAAI,OAAO,gBAAgB,UACzB,MAAO,SAA6B,OAAO,aAAa,CAAC;OACpD,IAAI,OAAO,WAAW,UAC3B,SAAyB,OAAO,QAAQ,CAAC;EAG7C,KAAK,UAAU,MAAM;CACvB;CAEA,QAAkB,WAAyD;EACzE,IAAI,CAAC,KAAK,cAAc,IAAI,SAAS,GACnC,MAAM,IAAIA,eAAAA,0BACR,YAAY,UAAU,yBAAyB,KAAK,aAAa,6BACnE;EAEF,IAAI,KAAK,UAAU,IAAI,SAAS,GAAG,OAAO,KAAK,UAAU,IAAI,SAAS;EAEtE,MAAM,UAAU,KAAK,UAAU,IAAI,SAAS;EAC5C,IAAI,CAAC,SAAS,OAAO;EAErB,MAAM,WAAW,QAAQ;EACzB,KAAK,UAAU,IAAI,WAAW,QAAQ;EACtC,OAAO;CACT;AACF;AAEA,IAAa,uBAAb,cAEU,oBAAoB;CAC5B,YAAY,YAAkB,WAAyC;EACrE,MAAM,wBAAwB,YAAY,SAAS;CACrD;CASA,IAAI,IAAkD;EACpD,OAAO,KAAK,QAAQ,EAAE;CACxB;AACF;AAEA,IAAa,oBAAb,cAEU,oBAAoB;CAC5B,YAAY,YAAkB,WAAsC;EAClE,MAAM,qBAAqB,YAAY,SAAS;CAClD;CAOA,IAAI,IAAkD;EACpD,OAAO,KAAK,QAAQ,EAAE;CACxB;AACF"}