@milaboratories/pl-middle-layer 1.42.38 → 1.42.40
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +2 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/middle_layer/middle_layer.cjs +7 -0
- package/dist/middle_layer/middle_layer.cjs.map +1 -1
- package/dist/middle_layer/middle_layer.d.ts +6 -1
- package/dist/middle_layer/middle_layer.d.ts.map +1 -1
- package/dist/middle_layer/middle_layer.js +7 -0
- package/dist/middle_layer/middle_layer.js.map +1 -1
- package/dist/pool/data.cjs +20 -12
- package/dist/pool/data.cjs.map +1 -1
- package/dist/pool/data.d.ts +2 -1
- package/dist/pool/data.d.ts.map +1 -1
- package/dist/pool/data.js +20 -13
- package/dist/pool/data.js.map +1 -1
- package/dist/pool/driver.cjs +1 -1
- package/dist/pool/driver.cjs.map +1 -1
- package/dist/pool/driver.js +2 -2
- package/dist/pool/driver.js.map +1 -1
- package/package.json +15 -15
- package/src/index.ts +1 -0
- package/src/middle_layer/middle_layer.ts +9 -1
- package/src/pool/data.ts +23 -11
- package/src/pool/driver.ts +2 -2
package/dist/index.cjs
CHANGED
|
@@ -15,6 +15,7 @@ var network_check = require('./network_check/network_check.cjs');
|
|
|
15
15
|
var plClient = require('@milaboratories/pl-client');
|
|
16
16
|
var template_loading = require('./mutator/template/template_loading.cjs');
|
|
17
17
|
var render_template = require('./mutator/template/render_template.cjs');
|
|
18
|
+
var p_object_collection = require('./pool/p_object_collection.cjs');
|
|
18
19
|
|
|
19
20
|
|
|
20
21
|
|
|
@@ -47,6 +48,7 @@ exports.TengoTemplatePackConvertTemplatePack = template_loading.TengoTemplatePac
|
|
|
47
48
|
exports.loadTemplate = template_loading.loadTemplate;
|
|
48
49
|
exports.prepareTemplateSpec = template_loading.prepareTemplateSpec;
|
|
49
50
|
exports.createRenderTemplate = render_template.createRenderTemplate;
|
|
51
|
+
exports.parseFinalPObjectCollection = p_object_collection.parseFinalPObjectCollection;
|
|
50
52
|
Object.keys(model).forEach(function (k) {
|
|
51
53
|
if (k !== 'default' && !Object.prototype.hasOwnProperty.call(exports, k)) Object.defineProperty(exports, k, {
|
|
52
54
|
enumerable: true,
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
package/dist/index.d.ts
CHANGED
|
@@ -12,4 +12,5 @@ export type { InternalLsDriver } from '@milaboratories/pl-drivers';
|
|
|
12
12
|
export * from './mutator/template/template_loading';
|
|
13
13
|
export * from './mutator/template/render_template';
|
|
14
14
|
export * from './model/template_spec';
|
|
15
|
+
export { parseFinalPObjectCollection } from './pool/p_object_collection';
|
|
15
16
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC;AACrC,cAAc,uCAAuC,CAAC;AACtD,cAAc,gCAAgC,CAAC;AAE/C,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,SAAS,CAAC;AAExB,cAAc,+BAA+B,CAAC;AAG9C,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAGhD,cAAc,2BAA2B,CAAC;AAC1C,YAAY,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAEzE,YAAY,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAGnE,cAAc,qCAAqC,CAAC;AACpD,cAAc,oCAAoC,CAAC;AACnD,cAAc,uBAAuB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC;AACrC,cAAc,uCAAuC,CAAC;AACtD,cAAc,gCAAgC,CAAC;AAE/C,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,SAAS,CAAC;AAExB,cAAc,+BAA+B,CAAC;AAG9C,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAGhD,cAAc,2BAA2B,CAAC;AAC1C,YAAY,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAEzE,YAAY,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAGnE,cAAc,qCAAqC,CAAC;AACpD,cAAc,oCAAoC,CAAC;AACnD,cAAc,uBAAuB,CAAC;AACtC,OAAO,EAAE,2BAA2B,EAAE,MAAM,4BAA4B,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -13,4 +13,5 @@ export { checkNetwork, initNetworkCheck } from './network_check/network_check.js
|
|
|
13
13
|
export * from '@milaboratories/pl-client';
|
|
14
14
|
export { TengoTemplateGet, TengoTemplateGetRegistry, TengoTemplateGetTemplate, TengoTemplateGetTemplateURI, TengoTemplatePack, TengoTemplatePackConvert, TengoTemplatePackConvertTemplate, TengoTemplatePackConvertTemplatePack, loadTemplate, prepareTemplateSpec } from './mutator/template/template_loading.js';
|
|
15
15
|
export { createRenderTemplate } from './mutator/template/render_template.js';
|
|
16
|
+
export { parseFinalPObjectCollection } from './pool/p_object_collection.js';
|
|
16
17
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;"}
|
|
@@ -56,6 +56,13 @@ class MiddleLayer {
|
|
|
56
56
|
this.projectList = projectList;
|
|
57
57
|
this.pl = this.env.pl;
|
|
58
58
|
}
|
|
59
|
+
/**
|
|
60
|
+
* Get the OS where backend is running.
|
|
61
|
+
* For old backend versions returns undefined.
|
|
62
|
+
*/
|
|
63
|
+
get serverPlatform() {
|
|
64
|
+
return this.pl.serverInfo.platform;
|
|
65
|
+
}
|
|
59
66
|
/** Adds a runtime capability to the middle layer. */
|
|
60
67
|
addRuntimeCapability(requirement, value = true) {
|
|
61
68
|
this.env.runtimeCapabilities.addSupportedRequirement(requirement, value);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"middle_layer.cjs","sources":["../../src/middle_layer/middle_layer.ts"],"sourcesContent":["import type {\n PlClient,\n ResourceId } from '@milaboratories/pl-client';\nimport {\n field,\n isNullResourceId,\n toGlobalResourceId,\n} from '@milaboratories/pl-client';\nimport { createProjectList, ProjectsField, ProjectsResourceType } from './project_list';\nimport { createProject, withProjectAuthored } from '../mutator/project';\nimport type { SynchronizedTreeState } from '@milaboratories/pl-tree';\nimport { BlockPackPreparer } from '../mutator/block-pack/block_pack';\nimport type { MiLogger, Signer } from '@milaboratories/ts-helpers';\nimport { BlockEventDispatcher } from '@milaboratories/ts-helpers';\nimport { HmacSha256Signer } from '@milaboratories/ts-helpers';\nimport type { ComputableStableDefined } from '@milaboratories/computable';\nimport { WatchableValue } from '@milaboratories/computable';\nimport { Project } from './project';\nimport type {\n MiddleLayerOps,\n MiddleLayerOpsConstructor,\n} from './ops';\nimport {\n DefaultMiddleLayerOpsPaths,\n DefaultMiddleLayerOpsSettings,\n} from './ops';\nimport { randomUUID } from 'node:crypto';\nimport type { ProjectListEntry } from '../model';\nimport type { AuthorMarker, ProjectMeta } from '@milaboratories/pl-model-middle-layer';\nimport { BlockUpdateWatcher } from '../block_registry/watcher';\nimport type { QuickJSWASMModule } from 'quickjs-emscripten';\nimport { getQuickJS } from 'quickjs-emscripten';\nimport type { MiddleLayerDriverKit } from './driver_kit';\nimport { initDriverKit } from './driver_kit';\nimport type { DriverKit, SupportedRequirement } from '@platforma-sdk/model';\nimport { RuntimeCapabilities } from '@platforma-sdk/model';\nimport type { DownloadUrlDriver } from '@milaboratories/pl-drivers';\nimport { V2RegistryProvider } from '../block_registry';\nimport type { Dispatcher } from 'undici';\nimport { RetryAgent } from 'undici';\nimport { getDebugFlags } from '../debug';\nimport { ProjectHelper } from '../model/project_helper';\n\nexport interface MiddleLayerEnvironment {\n dispose(): Promise<void>;\n readonly pl: PlClient;\n readonly runtimeCapabilities: RuntimeCapabilities;\n readonly logger: MiLogger;\n readonly blockEventDispatcher: BlockEventDispatcher;\n readonly httpDispatcher: Dispatcher;\n readonly retryHttpDispatcher: Dispatcher;\n readonly signer: Signer;\n readonly ops: MiddleLayerOps;\n readonly bpPreparer: BlockPackPreparer;\n readonly frontendDownloadDriver: DownloadUrlDriver;\n readonly blockUpdateWatcher: BlockUpdateWatcher;\n readonly quickJs: QuickJSWASMModule;\n readonly driverKit: MiddleLayerDriverKit;\n readonly projectHelper: ProjectHelper;\n}\n\n/**\n * Main access object to work with pl from UI.\n *\n * It implements an abstraction layer of projects and blocks.\n *\n * As a main entry point inside the pl, this object uses a resource attached\n * via the {@link ProjectsField} to the pl client's root, this resource\n * contains project list.\n *\n * Read about alternative roots, if isolated project lists (working environments)\n * are required.\n * */\nexport class MiddleLayer {\n private readonly pl: PlClient;\n\n /** Contains a reactive list of projects along with their meta information. */\n public readonly projectList: ComputableStableDefined<ProjectListEntry[]>;\n\n private constructor(\n private readonly env: MiddleLayerEnvironment,\n public readonly driverKit: DriverKit,\n public readonly signer: Signer,\n private readonly projectListResourceId: ResourceId,\n private readonly openedProjectsList: WatchableValue<ResourceId[]>,\n private readonly projectListTree: SynchronizedTreeState,\n public readonly blockRegistryProvider: V2RegistryProvider,\n projectList: ComputableStableDefined<ProjectListEntry[]>,\n ) {\n this.projectList = projectList;\n this.pl = this.env.pl;\n }\n\n /** Adds a runtime capability to the middle layer. */\n public addRuntimeCapability(requirement: SupportedRequirement, value: number | boolean = true): void {\n this.env.runtimeCapabilities.addSupportedRequirement(requirement, value);\n }\n\n /** Returns extended API driver kit used internally by middle layer. */\n public get internalDriverKit(): MiddleLayerDriverKit {\n return this.env.driverKit;\n }\n\n //\n // Project List Manipulation\n //\n\n /** Creates a project with initial state and adds it to project list. */\n public async createProject(meta: ProjectMeta, id: string = randomUUID()): Promise<ResourceId> {\n const resource = await this.pl.withWriteTx('MLCreateProject', async (tx) => {\n const prj = await createProject(tx, meta);\n tx.createField(field(this.projectListResourceId, id), 'Dynamic', prj);\n await tx.commit();\n return await toGlobalResourceId(prj);\n });\n await this.projectListTree.refreshState();\n return resource;\n }\n\n /** Updates project metadata */\n public async setProjectMeta(\n rid: ResourceId,\n meta: ProjectMeta,\n author?: AuthorMarker,\n ): Promise<void> {\n await withProjectAuthored(this.env.projectHelper, this.pl, rid, author, (prj) => {\n prj.setMeta(meta);\n });\n await this.projectListTree.refreshState();\n }\n\n /** Permanently deletes project from the project list, this will result in\n * destruction of all attached objects, like files, analysis results etc. */\n public async deleteProject(id: string): Promise<void> {\n await this.pl.withWriteTx('MLRemoveProject', async (tx) => {\n tx.removeField(field(this.projectListResourceId, id));\n await tx.commit();\n });\n await this.projectListTree.refreshState();\n }\n\n //\n // Projects\n //\n\n private readonly openedProjectsByRid = new Map<ResourceId, Project>();\n\n private async projectIdToResourceId(id: string): Promise<ResourceId> {\n return await this.pl.withReadTx('Project id to resource id', async (tx) => {\n const rid = (await tx.getField(field(this.projectListResourceId, id))).value;\n if (isNullResourceId(rid)) throw new Error('Unexpected project list structure.');\n return rid;\n });\n }\n\n private async ensureProjectRid(id: ResourceId | string): Promise<ResourceId> {\n if (typeof id === 'string') return await this.projectIdToResourceId(id);\n else return id;\n }\n\n /** Opens a project, and starts corresponding project maintenance loop. */\n public async openProject(id: ResourceId | string) {\n const rid = await this.ensureProjectRid(id);\n if (this.openedProjectsByRid.has(rid)) throw new Error(`Project ${rid} already opened`);\n this.openedProjectsByRid.set(rid, await Project.init(this.env, rid));\n this.openedProjectsList.setValue([...this.openedProjectsByRid.keys()]);\n }\n\n /** Closes the project, and deallocate all corresponding resources. */\n public async closeProject(rid: ResourceId): Promise<void> {\n const prj = this.openedProjectsByRid.get(rid);\n if (prj === undefined) throw new Error(`Project ${rid} not found among opened projects`);\n this.openedProjectsByRid.delete(rid);\n await prj.destroy();\n this.openedProjectsList.setValue([...this.openedProjectsByRid.keys()]);\n }\n\n /** Returns a project access object for opened project, for the given project\n * resource id. */\n public getOpenedProject(rid: ResourceId): Project {\n const prj = this.openedProjectsByRid.get(rid);\n if (prj === undefined) throw new Error(`Project ${rid} not found among opened projects`);\n return prj;\n }\n\n /**\n * Deallocates all runtime resources consumed by this object and awaits\n * actual termination of event loops and other processes associated with\n * them.\n */\n public async close() {\n await Promise.all([...this.openedProjectsByRid.values()].map((prj) => prj.destroy()));\n // this.env.quickJs;\n await this.projectListTree.terminate();\n await this.env.dispose();\n await this.pl.close();\n }\n\n /** @deprecated */\n public async closeAndAwaitTermination() {\n await this.close();\n }\n\n /** Generates sufficiently random string to be used as local secret for the\n * middle layer */\n public static generateLocalSecret(): string {\n return HmacSha256Signer.generateSecret();\n }\n\n /** Returns a block event dispatcher, which can be used to listen to block events. */\n public get blockEventDispatcher(): BlockEventDispatcher {\n return this.env.blockEventDispatcher;\n }\n\n /** Initialize middle layer */\n public static async init(\n pl: PlClient,\n workdir: string,\n _ops: MiddleLayerOpsConstructor,\n ): Promise<MiddleLayer> {\n const ops: MiddleLayerOps = {\n ...DefaultMiddleLayerOpsSettings,\n ...DefaultMiddleLayerOpsPaths(workdir),\n ..._ops,\n };\n\n // overriding debug options from environment variables\n ops.defaultTreeOptions.logStat = getDebugFlags().logTreeStats;\n ops.debugOps.dumpInitialTreeState = getDebugFlags().dumpInitialTreeState;\n\n const projects = await pl.withWriteTx('MLInitialization', async (tx) => {\n const projectsField = field(tx.clientRoot, ProjectsField);\n tx.createField(projectsField, 'Dynamic');\n const projectsFieldData = await tx.getField(projectsField);\n if (isNullResourceId(projectsFieldData.value)) {\n const projects = tx.createEphemeral(ProjectsResourceType);\n tx.lock(projects);\n\n tx.setField(projectsField, projects);\n\n await tx.commit();\n\n return await projects.globalId;\n } else {\n return projectsFieldData.value;\n }\n });\n\n const logger = ops.logger;\n\n const driverKit = await initDriverKit(pl, workdir, ops.frontendDownloadPath, ops);\n\n // passed to components having no own retry logic\n const retryHttpDispatcher = new RetryAgent(pl.httpDispatcher);\n\n const v2RegistryProvider = new V2RegistryProvider(retryHttpDispatcher);\n\n const bpPreparer = new BlockPackPreparer(\n v2RegistryProvider,\n driverKit.signer,\n retryHttpDispatcher,\n );\n\n const quickJs = await getQuickJS();\n\n const runtimeCapabilities = new RuntimeCapabilities();\n // add runtime capabilities of model here\n runtimeCapabilities.addSupportedRequirement('requiresModelAPIVersion', 1);\n // runtime capabilities of the desktop are to be added by the desktop app / test framework\n\n const env: MiddleLayerEnvironment = {\n pl,\n blockEventDispatcher: new BlockEventDispatcher(),\n signer: driverKit.signer,\n logger,\n httpDispatcher: pl.httpDispatcher,\n retryHttpDispatcher,\n ops,\n bpPreparer,\n frontendDownloadDriver: driverKit.frontendDriver,\n driverKit,\n blockUpdateWatcher: new BlockUpdateWatcher(v2RegistryProvider, logger, {\n minDelay: ops.devBlockUpdateRecheckInterval,\n http: retryHttpDispatcher,\n preferredUpdateChannel: ops.preferredUpdateChannel,\n }),\n runtimeCapabilities,\n quickJs,\n projectHelper: new ProjectHelper(quickJs),\n dispose: async () => {\n await retryHttpDispatcher.destroy();\n await driverKit.dispose();\n },\n };\n\n const openedProjects = new WatchableValue<ResourceId[]>([]);\n const projectListTC = await createProjectList(pl, projects, openedProjects, env);\n\n return new MiddleLayer(\n env,\n driverKit,\n driverKit.signer,\n projects,\n openedProjects,\n projectListTC.tree,\n v2RegistryProvider,\n projectListTC.computable,\n );\n }\n}\n"],"names":["randomUUID","createProject","field","toGlobalResourceId","withProjectAuthored","isNullResourceId","Project","HmacSha256Signer","ops","DefaultMiddleLayerOpsSettings","DefaultMiddleLayerOpsPaths","getDebugFlags","ProjectsField","ProjectsResourceType","initDriverKit","RetryAgent","V2RegistryProvider","BlockPackPreparer","getQuickJS","RuntimeCapabilities","BlockEventDispatcher","BlockUpdateWatcher","ProjectHelper","WatchableValue","createProjectList"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AA6DA;;;;;;;;;;;AAWK;MACQ,WAAW,CAAA;AAOH,IAAA,GAAA;AACD,IAAA,SAAA;AACA,IAAA,MAAA;AACC,IAAA,qBAAA;AACA,IAAA,kBAAA;AACA,IAAA,eAAA;AACD,IAAA,qBAAA;AAZD,IAAA,EAAE;;AAGH,IAAA,WAAW;AAE3B,IAAA,WAAA,CACmB,GAA2B,EAC5B,SAAoB,EACpB,MAAc,EACb,qBAAiC,EACjC,kBAAgD,EAChD,eAAsC,EACvC,qBAAyC,EACzD,WAAwD,EAAA;QAPvC,IAAA,CAAA,GAAG,GAAH,GAAG;QACJ,IAAA,CAAA,SAAS,GAAT,SAAS;QACT,IAAA,CAAA,MAAM,GAAN,MAAM;QACL,IAAA,CAAA,qBAAqB,GAArB,qBAAqB;QACrB,IAAA,CAAA,kBAAkB,GAAlB,kBAAkB;QAClB,IAAA,CAAA,eAAe,GAAf,eAAe;QAChB,IAAA,CAAA,qBAAqB,GAArB,qBAAqB;AAGrC,QAAA,IAAI,CAAC,WAAW,GAAG,WAAW;QAC9B,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE;IACvB;;AAGO,IAAA,oBAAoB,CAAC,WAAiC,EAAE,KAAA,GAA0B,IAAI,EAAA;QAC3F,IAAI,CAAC,GAAG,CAAC,mBAAmB,CAAC,uBAAuB,CAAC,WAAW,EAAE,KAAK,CAAC;IAC1E;;AAGA,IAAA,IAAW,iBAAiB,GAAA;AAC1B,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,SAAS;IAC3B;;;;;AAOO,IAAA,MAAM,aAAa,CAAC,IAAiB,EAAE,EAAA,GAAaA,sBAAU,EAAE,EAAA;AACrE,QAAA,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,iBAAiB,EAAE,OAAO,EAAE,KAAI;YACzE,MAAM,GAAG,GAAG,MAAMC,qBAAa,CAAC,EAAE,EAAE,IAAI,CAAC;AACzC,YAAA,EAAE,CAAC,WAAW,CAACC,cAAK,CAAC,IAAI,CAAC,qBAAqB,EAAE,EAAE,CAAC,EAAE,SAAS,EAAE,GAAG,CAAC;AACrE,YAAA,MAAM,EAAE,CAAC,MAAM,EAAE;AACjB,YAAA,OAAO,MAAMC,2BAAkB,CAAC,GAAG,CAAC;AACtC,QAAA,CAAC,CAAC;AACF,QAAA,MAAM,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE;AACzC,QAAA,OAAO,QAAQ;IACjB;;AAGO,IAAA,MAAM,cAAc,CACzB,GAAe,EACf,IAAiB,EACjB,MAAqB,EAAA;AAErB,QAAA,MAAMC,2BAAmB,CAAC,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,IAAI,CAAC,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,GAAG,KAAI;AAC9E,YAAA,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC;AACnB,QAAA,CAAC,CAAC;AACF,QAAA,MAAM,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE;IAC3C;AAEA;AAC4E;IACrE,MAAM,aAAa,CAAC,EAAU,EAAA;AACnC,QAAA,MAAM,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,iBAAiB,EAAE,OAAO,EAAE,KAAI;AACxD,YAAA,EAAE,CAAC,WAAW,CAACF,cAAK,CAAC,IAAI,CAAC,qBAAqB,EAAE,EAAE,CAAC,CAAC;AACrD,YAAA,MAAM,EAAE,CAAC,MAAM,EAAE;AACnB,QAAA,CAAC,CAAC;AACF,QAAA,MAAM,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE;IAC3C;;;;AAMiB,IAAA,mBAAmB,GAAG,IAAI,GAAG,EAAuB;IAE7D,MAAM,qBAAqB,CAAC,EAAU,EAAA;AAC5C,QAAA,OAAO,MAAM,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,2BAA2B,EAAE,OAAO,EAAE,KAAI;YACxE,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,QAAQ,CAACA,cAAK,CAAC,IAAI,CAAC,qBAAqB,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK;YAC5E,IAAIG,yBAAgB,CAAC,GAAG,CAAC;AAAE,gBAAA,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC;AAChF,YAAA,OAAO,GAAG;AACZ,QAAA,CAAC,CAAC;IACJ;IAEQ,MAAM,gBAAgB,CAAC,EAAuB,EAAA;QACpD,IAAI,OAAO,EAAE,KAAK,QAAQ;AAAE,YAAA,OAAO,MAAM,IAAI,CAAC,qBAAqB,CAAC,EAAE,CAAC;;AAClE,YAAA,OAAO,EAAE;IAChB;;IAGO,MAAM,WAAW,CAAC,EAAuB,EAAA;QAC9C,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC;AAC3C,QAAA,IAAI,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,GAAG,CAAC;AAAE,YAAA,MAAM,IAAI,KAAK,CAAC,WAAW,GAAG,CAAA,eAAA,CAAiB,CAAC;AACvF,QAAA,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,GAAG,EAAE,MAAMC,iBAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;AACpE,QAAA,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE,CAAC,CAAC;IACxE;;IAGO,MAAM,YAAY,CAAC,GAAe,EAAA;QACvC,MAAM,GAAG,GAAG,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,GAAG,CAAC;QAC7C,IAAI,GAAG,KAAK,SAAS;AAAE,YAAA,MAAM,IAAI,KAAK,CAAC,WAAW,GAAG,CAAA,gCAAA,CAAkC,CAAC;AACxF,QAAA,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,GAAG,CAAC;AACpC,QAAA,MAAM,GAAG,CAAC,OAAO,EAAE;AACnB,QAAA,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE,CAAC,CAAC;IACxE;AAEA;AACkB;AACX,IAAA,gBAAgB,CAAC,GAAe,EAAA;QACrC,MAAM,GAAG,GAAG,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,GAAG,CAAC;QAC7C,IAAI,GAAG,KAAK,SAAS;AAAE,YAAA,MAAM,IAAI,KAAK,CAAC,WAAW,GAAG,CAAA,gCAAA,CAAkC,CAAC;AACxF,QAAA,OAAO,GAAG;IACZ;AAEA;;;;AAIG;AACI,IAAA,MAAM,KAAK,GAAA;QAChB,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;;AAErF,QAAA,MAAM,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE;AACtC,QAAA,MAAM,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE;AACxB,QAAA,MAAM,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE;IACvB;;AAGO,IAAA,MAAM,wBAAwB,GAAA;AACnC,QAAA,MAAM,IAAI,CAAC,KAAK,EAAE;IACpB;AAEA;AACkB;AACX,IAAA,OAAO,mBAAmB,GAAA;AAC/B,QAAA,OAAOC,0BAAgB,CAAC,cAAc,EAAE;IAC1C;;AAGA,IAAA,IAAW,oBAAoB,GAAA;AAC7B,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,oBAAoB;IACtC;;IAGO,aAAa,IAAI,CACtB,EAAY,EACZ,OAAe,EACf,IAA+B,EAAA;AAE/B,QAAA,MAAMC,KAAG,GAAmB;AAC1B,YAAA,GAAGC,iCAA6B;YAChC,GAAGC,8BAA0B,CAAC,OAAO,CAAC;AACtC,YAAA,GAAG,IAAI;SACR;;QAGDF,KAAG,CAAC,kBAAkB,CAAC,OAAO,GAAGG,mBAAa,EAAE,CAAC,YAAY;QAC7DH,KAAG,CAAC,QAAQ,CAAC,oBAAoB,GAAGG,mBAAa,EAAE,CAAC,oBAAoB;AAExE,QAAA,MAAM,QAAQ,GAAG,MAAM,EAAE,CAAC,WAAW,CAAC,kBAAkB,EAAE,OAAO,EAAE,KAAI;YACrE,MAAM,aAAa,GAAGT,cAAK,CAAC,EAAE,CAAC,UAAU,EAAEU,0BAAa,CAAC;AACzD,YAAA,EAAE,CAAC,WAAW,CAAC,aAAa,EAAE,SAAS,CAAC;YACxC,MAAM,iBAAiB,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC;AAC1D,YAAA,IAAIP,yBAAgB,CAAC,iBAAiB,CAAC,KAAK,CAAC,EAAE;gBAC7C,MAAM,QAAQ,GAAG,EAAE,CAAC,eAAe,CAACQ,iCAAoB,CAAC;AACzD,gBAAA,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC;AAEjB,gBAAA,EAAE,CAAC,QAAQ,CAAC,aAAa,EAAE,QAAQ,CAAC;AAEpC,gBAAA,MAAM,EAAE,CAAC,MAAM,EAAE;AAEjB,gBAAA,OAAO,MAAM,QAAQ,CAAC,QAAQ;YAChC;iBAAO;gBACL,OAAO,iBAAiB,CAAC,KAAK;YAChC;AACF,QAAA,CAAC,CAAC;AAEF,QAAA,MAAM,MAAM,GAAGL,KAAG,CAAC,MAAM;AAEzB,QAAA,MAAM,SAAS,GAAG,MAAMM,wBAAa,CAAC,EAAE,EAAE,OAAO,EAAEN,KAAG,CAAC,oBAAoB,EAAEA,KAAG,CAAC;;QAGjF,MAAM,mBAAmB,GAAG,IAAIO,iBAAU,CAAC,EAAE,CAAC,cAAc,CAAC;AAE7D,QAAA,MAAM,kBAAkB,GAAG,IAAIC,qCAAkB,CAAC,mBAAmB,CAAC;AAEtE,QAAA,MAAM,UAAU,GAAG,IAAIC,4BAAiB,CACtC,kBAAkB,EAClB,SAAS,CAAC,MAAM,EAChB,mBAAmB,CACpB;AAED,QAAA,MAAM,OAAO,GAAG,MAAMC,4BAAU,EAAE;AAElC,QAAA,MAAM,mBAAmB,GAAG,IAAIC,yBAAmB,EAAE;;AAErD,QAAA,mBAAmB,CAAC,uBAAuB,CAAC,yBAAyB,EAAE,CAAC,CAAC;;AAGzE,QAAA,MAAM,GAAG,GAA2B;YAClC,EAAE;YACF,oBAAoB,EAAE,IAAIC,8BAAoB,EAAE;YAChD,MAAM,EAAE,SAAS,CAAC,MAAM;YACxB,MAAM;YACN,cAAc,EAAE,EAAE,CAAC,cAAc;YACjC,mBAAmB;iBACnBZ,KAAG;YACH,UAAU;YACV,sBAAsB,EAAE,SAAS,CAAC,cAAc;YAChD,SAAS;AACT,YAAA,kBAAkB,EAAE,IAAIa,0BAAkB,CAAC,kBAAkB,EAAE,MAAM,EAAE;gBACrE,QAAQ,EAAEb,KAAG,CAAC,6BAA6B;AAC3C,gBAAA,IAAI,EAAE,mBAAmB;gBACzB,sBAAsB,EAAEA,KAAG,CAAC,sBAAsB;aACnD,CAAC;YACF,mBAAmB;YACnB,OAAO;AACP,YAAA,aAAa,EAAE,IAAIc,4BAAa,CAAC,OAAO,CAAC;YACzC,OAAO,EAAE,YAAW;AAClB,gBAAA,MAAM,mBAAmB,CAAC,OAAO,EAAE;AACnC,gBAAA,MAAM,SAAS,CAAC,OAAO,EAAE;YAC3B,CAAC;SACF;AAED,QAAA,MAAM,cAAc,GAAG,IAAIC,yBAAc,CAAe,EAAE,CAAC;AAC3D,QAAA,MAAM,aAAa,GAAG,MAAMC,8BAAiB,CAAC,EAAE,EAAE,QAAQ,EAAE,cAAc,EAAE,GAAG,CAAC;QAEhF,OAAO,IAAI,WAAW,CACpB,GAAG,EACH,SAAS,EACT,SAAS,CAAC,MAAM,EAChB,QAAQ,EACR,cAAc,EACd,aAAa,CAAC,IAAI,EAClB,kBAAkB,EAClB,aAAa,CAAC,UAAU,CACzB;IACH;AACD;;;;"}
|
|
1
|
+
{"version":3,"file":"middle_layer.cjs","sources":["../../src/middle_layer/middle_layer.ts"],"sourcesContent":["import type {\n PlClient,\n ResourceId } from '@milaboratories/pl-client';\nimport {\n field,\n isNullResourceId,\n toGlobalResourceId,\n} from '@milaboratories/pl-client';\nimport { createProjectList, ProjectsField, ProjectsResourceType } from './project_list';\nimport { createProject, withProjectAuthored } from '../mutator/project';\nimport type { SynchronizedTreeState } from '@milaboratories/pl-tree';\nimport { BlockPackPreparer } from '../mutator/block-pack/block_pack';\nimport type { MiLogger, Signer } from '@milaboratories/ts-helpers';\nimport { BlockEventDispatcher } from '@milaboratories/ts-helpers';\nimport { HmacSha256Signer } from '@milaboratories/ts-helpers';\nimport type { ComputableStableDefined } from '@milaboratories/computable';\nimport { WatchableValue } from '@milaboratories/computable';\nimport { Project } from './project';\nimport type {\n MiddleLayerOps,\n MiddleLayerOpsConstructor,\n} from './ops';\nimport {\n DefaultMiddleLayerOpsPaths,\n DefaultMiddleLayerOpsSettings,\n} from './ops';\nimport { randomUUID } from 'node:crypto';\nimport type { ProjectListEntry } from '../model';\nimport type { AuthorMarker, ProjectMeta, BlockPlatform } from '@milaboratories/pl-model-middle-layer';\nimport { BlockUpdateWatcher } from '../block_registry/watcher';\nimport type { QuickJSWASMModule } from 'quickjs-emscripten';\nimport { getQuickJS } from 'quickjs-emscripten';\nimport type { MiddleLayerDriverKit } from './driver_kit';\nimport { initDriverKit } from './driver_kit';\nimport type { DriverKit, SupportedRequirement } from '@platforma-sdk/model';\nimport { RuntimeCapabilities } from '@platforma-sdk/model';\nimport type { DownloadUrlDriver } from '@milaboratories/pl-drivers';\nimport { V2RegistryProvider } from '../block_registry';\nimport type { Dispatcher } from 'undici';\nimport { RetryAgent } from 'undici';\nimport { getDebugFlags } from '../debug';\nimport { ProjectHelper } from '../model/project_helper';\n\nexport interface MiddleLayerEnvironment {\n dispose(): Promise<void>;\n readonly pl: PlClient;\n readonly runtimeCapabilities: RuntimeCapabilities;\n readonly logger: MiLogger;\n readonly blockEventDispatcher: BlockEventDispatcher;\n readonly httpDispatcher: Dispatcher;\n readonly retryHttpDispatcher: Dispatcher;\n readonly signer: Signer;\n readonly ops: MiddleLayerOps;\n readonly bpPreparer: BlockPackPreparer;\n readonly frontendDownloadDriver: DownloadUrlDriver;\n readonly blockUpdateWatcher: BlockUpdateWatcher;\n readonly quickJs: QuickJSWASMModule;\n readonly driverKit: MiddleLayerDriverKit;\n readonly projectHelper: ProjectHelper;\n}\n\n/**\n * Main access object to work with pl from UI.\n *\n * It implements an abstraction layer of projects and blocks.\n *\n * As a main entry point inside the pl, this object uses a resource attached\n * via the {@link ProjectsField} to the pl client's root, this resource\n * contains project list.\n *\n * Read about alternative roots, if isolated project lists (working environments)\n * are required.\n * */\nexport class MiddleLayer {\n private readonly pl: PlClient;\n\n /** Contains a reactive list of projects along with their meta information. */\n public readonly projectList: ComputableStableDefined<ProjectListEntry[]>;\n\n private constructor(\n private readonly env: MiddleLayerEnvironment,\n public readonly driverKit: DriverKit,\n public readonly signer: Signer,\n private readonly projectListResourceId: ResourceId,\n private readonly openedProjectsList: WatchableValue<ResourceId[]>,\n private readonly projectListTree: SynchronizedTreeState,\n public readonly blockRegistryProvider: V2RegistryProvider,\n projectList: ComputableStableDefined<ProjectListEntry[]>,\n ) {\n this.projectList = projectList;\n this.pl = this.env.pl;\n }\n\n /**\n * Get the OS where backend is running.\n * For old backend versions returns undefined.\n */\n public get serverPlatform(): BlockPlatform | undefined {\n return this.pl.serverInfo.platform as BlockPlatform | undefined;\n }\n\n /** Adds a runtime capability to the middle layer. */\n public addRuntimeCapability(requirement: SupportedRequirement, value: number | boolean = true): void {\n this.env.runtimeCapabilities.addSupportedRequirement(requirement, value);\n }\n\n /** Returns extended API driver kit used internally by middle layer. */\n public get internalDriverKit(): MiddleLayerDriverKit {\n return this.env.driverKit;\n }\n\n //\n // Project List Manipulation\n //\n\n /** Creates a project with initial state and adds it to project list. */\n public async createProject(meta: ProjectMeta, id: string = randomUUID()): Promise<ResourceId> {\n const resource = await this.pl.withWriteTx('MLCreateProject', async (tx) => {\n const prj = await createProject(tx, meta);\n tx.createField(field(this.projectListResourceId, id), 'Dynamic', prj);\n await tx.commit();\n return await toGlobalResourceId(prj);\n });\n await this.projectListTree.refreshState();\n return resource;\n }\n\n /** Updates project metadata */\n public async setProjectMeta(\n rid: ResourceId,\n meta: ProjectMeta,\n author?: AuthorMarker,\n ): Promise<void> {\n await withProjectAuthored(this.env.projectHelper, this.pl, rid, author, (prj) => {\n prj.setMeta(meta);\n });\n await this.projectListTree.refreshState();\n }\n\n /** Permanently deletes project from the project list, this will result in\n * destruction of all attached objects, like files, analysis results etc. */\n public async deleteProject(id: string): Promise<void> {\n await this.pl.withWriteTx('MLRemoveProject', async (tx) => {\n tx.removeField(field(this.projectListResourceId, id));\n await tx.commit();\n });\n await this.projectListTree.refreshState();\n }\n\n //\n // Projects\n //\n\n private readonly openedProjectsByRid = new Map<ResourceId, Project>();\n\n private async projectIdToResourceId(id: string): Promise<ResourceId> {\n return await this.pl.withReadTx('Project id to resource id', async (tx) => {\n const rid = (await tx.getField(field(this.projectListResourceId, id))).value;\n if (isNullResourceId(rid)) throw new Error('Unexpected project list structure.');\n return rid;\n });\n }\n\n private async ensureProjectRid(id: ResourceId | string): Promise<ResourceId> {\n if (typeof id === 'string') return await this.projectIdToResourceId(id);\n else return id;\n }\n\n /** Opens a project, and starts corresponding project maintenance loop. */\n public async openProject(id: ResourceId | string) {\n const rid = await this.ensureProjectRid(id);\n if (this.openedProjectsByRid.has(rid)) throw new Error(`Project ${rid} already opened`);\n this.openedProjectsByRid.set(rid, await Project.init(this.env, rid));\n this.openedProjectsList.setValue([...this.openedProjectsByRid.keys()]);\n }\n\n /** Closes the project, and deallocate all corresponding resources. */\n public async closeProject(rid: ResourceId): Promise<void> {\n const prj = this.openedProjectsByRid.get(rid);\n if (prj === undefined) throw new Error(`Project ${rid} not found among opened projects`);\n this.openedProjectsByRid.delete(rid);\n await prj.destroy();\n this.openedProjectsList.setValue([...this.openedProjectsByRid.keys()]);\n }\n\n /** Returns a project access object for opened project, for the given project\n * resource id. */\n public getOpenedProject(rid: ResourceId): Project {\n const prj = this.openedProjectsByRid.get(rid);\n if (prj === undefined) throw new Error(`Project ${rid} not found among opened projects`);\n return prj;\n }\n\n /**\n * Deallocates all runtime resources consumed by this object and awaits\n * actual termination of event loops and other processes associated with\n * them.\n */\n public async close() {\n await Promise.all([...this.openedProjectsByRid.values()].map((prj) => prj.destroy()));\n // this.env.quickJs;\n await this.projectListTree.terminate();\n await this.env.dispose();\n await this.pl.close();\n }\n\n /** @deprecated */\n public async closeAndAwaitTermination() {\n await this.close();\n }\n\n /** Generates sufficiently random string to be used as local secret for the\n * middle layer */\n public static generateLocalSecret(): string {\n return HmacSha256Signer.generateSecret();\n }\n\n /** Returns a block event dispatcher, which can be used to listen to block events. */\n public get blockEventDispatcher(): BlockEventDispatcher {\n return this.env.blockEventDispatcher;\n }\n\n /** Initialize middle layer */\n public static async init(\n pl: PlClient,\n workdir: string,\n _ops: MiddleLayerOpsConstructor,\n ): Promise<MiddleLayer> {\n const ops: MiddleLayerOps = {\n ...DefaultMiddleLayerOpsSettings,\n ...DefaultMiddleLayerOpsPaths(workdir),\n ..._ops,\n };\n\n // overriding debug options from environment variables\n ops.defaultTreeOptions.logStat = getDebugFlags().logTreeStats;\n ops.debugOps.dumpInitialTreeState = getDebugFlags().dumpInitialTreeState;\n\n const projects = await pl.withWriteTx('MLInitialization', async (tx) => {\n const projectsField = field(tx.clientRoot, ProjectsField);\n tx.createField(projectsField, 'Dynamic');\n const projectsFieldData = await tx.getField(projectsField);\n if (isNullResourceId(projectsFieldData.value)) {\n const projects = tx.createEphemeral(ProjectsResourceType);\n tx.lock(projects);\n\n tx.setField(projectsField, projects);\n\n await tx.commit();\n\n return await projects.globalId;\n } else {\n return projectsFieldData.value;\n }\n });\n\n const logger = ops.logger;\n\n const driverKit = await initDriverKit(pl, workdir, ops.frontendDownloadPath, ops);\n\n // passed to components having no own retry logic\n const retryHttpDispatcher = new RetryAgent(pl.httpDispatcher);\n\n const v2RegistryProvider = new V2RegistryProvider(retryHttpDispatcher);\n\n const bpPreparer = new BlockPackPreparer(\n v2RegistryProvider,\n driverKit.signer,\n retryHttpDispatcher,\n );\n\n const quickJs = await getQuickJS();\n\n const runtimeCapabilities = new RuntimeCapabilities();\n // add runtime capabilities of model here\n runtimeCapabilities.addSupportedRequirement('requiresModelAPIVersion', 1);\n // runtime capabilities of the desktop are to be added by the desktop app / test framework\n\n const env: MiddleLayerEnvironment = {\n pl,\n blockEventDispatcher: new BlockEventDispatcher(),\n signer: driverKit.signer,\n logger,\n httpDispatcher: pl.httpDispatcher,\n retryHttpDispatcher,\n ops,\n bpPreparer,\n frontendDownloadDriver: driverKit.frontendDriver,\n driverKit,\n blockUpdateWatcher: new BlockUpdateWatcher(v2RegistryProvider, logger, {\n minDelay: ops.devBlockUpdateRecheckInterval,\n http: retryHttpDispatcher,\n preferredUpdateChannel: ops.preferredUpdateChannel,\n }),\n runtimeCapabilities,\n quickJs,\n projectHelper: new ProjectHelper(quickJs),\n dispose: async () => {\n await retryHttpDispatcher.destroy();\n await driverKit.dispose();\n },\n };\n\n const openedProjects = new WatchableValue<ResourceId[]>([]);\n const projectListTC = await createProjectList(pl, projects, openedProjects, env);\n\n return new MiddleLayer(\n env,\n driverKit,\n driverKit.signer,\n projects,\n openedProjects,\n projectListTC.tree,\n v2RegistryProvider,\n projectListTC.computable,\n );\n }\n}\n"],"names":["randomUUID","createProject","field","toGlobalResourceId","withProjectAuthored","isNullResourceId","Project","HmacSha256Signer","ops","DefaultMiddleLayerOpsSettings","DefaultMiddleLayerOpsPaths","getDebugFlags","ProjectsField","ProjectsResourceType","initDriverKit","RetryAgent","V2RegistryProvider","BlockPackPreparer","getQuickJS","RuntimeCapabilities","BlockEventDispatcher","BlockUpdateWatcher","ProjectHelper","WatchableValue","createProjectList"],"mappings":"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"}
|
|
@@ -6,7 +6,7 @@ import type { ComputableStableDefined } from '@milaboratories/computable';
|
|
|
6
6
|
import { Project } from './project';
|
|
7
7
|
import type { MiddleLayerOps, MiddleLayerOpsConstructor } from './ops';
|
|
8
8
|
import type { ProjectListEntry } from '../model';
|
|
9
|
-
import type { AuthorMarker, ProjectMeta } from '@milaboratories/pl-model-middle-layer';
|
|
9
|
+
import type { AuthorMarker, ProjectMeta, BlockPlatform } from '@milaboratories/pl-model-middle-layer';
|
|
10
10
|
import { BlockUpdateWatcher } from '../block_registry/watcher';
|
|
11
11
|
import type { QuickJSWASMModule } from 'quickjs-emscripten';
|
|
12
12
|
import type { MiddleLayerDriverKit } from './driver_kit';
|
|
@@ -57,6 +57,11 @@ export declare class MiddleLayer {
|
|
|
57
57
|
/** Contains a reactive list of projects along with their meta information. */
|
|
58
58
|
readonly projectList: ComputableStableDefined<ProjectListEntry[]>;
|
|
59
59
|
private constructor();
|
|
60
|
+
/**
|
|
61
|
+
* Get the OS where backend is running.
|
|
62
|
+
* For old backend versions returns undefined.
|
|
63
|
+
*/
|
|
64
|
+
get serverPlatform(): BlockPlatform | undefined;
|
|
60
65
|
/** Adds a runtime capability to the middle layer. */
|
|
61
66
|
addRuntimeCapability(requirement: SupportedRequirement, value?: number | boolean): void;
|
|
62
67
|
/** Returns extended API driver kit used internally by middle layer. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"middle_layer.d.ts","sourceRoot":"","sources":["../../src/middle_layer/middle_layer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,QAAQ,EACR,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAShD,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AACrE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAElE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AAE1E,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,EACV,cAAc,EACd,yBAAyB,EAC1B,MAAM,OAAO,CAAC;AAMf,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AACjD,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,uCAAuC,CAAC;
|
|
1
|
+
{"version":3,"file":"middle_layer.d.ts","sourceRoot":"","sources":["../../src/middle_layer/middle_layer.ts"],"names":[],"mappings":"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"}
|
|
@@ -54,6 +54,13 @@ class MiddleLayer {
|
|
|
54
54
|
this.projectList = projectList;
|
|
55
55
|
this.pl = this.env.pl;
|
|
56
56
|
}
|
|
57
|
+
/**
|
|
58
|
+
* Get the OS where backend is running.
|
|
59
|
+
* For old backend versions returns undefined.
|
|
60
|
+
*/
|
|
61
|
+
get serverPlatform() {
|
|
62
|
+
return this.pl.serverInfo.platform;
|
|
63
|
+
}
|
|
57
64
|
/** Adds a runtime capability to the middle layer. */
|
|
58
65
|
addRuntimeCapability(requirement, value = true) {
|
|
59
66
|
this.env.runtimeCapabilities.addSupportedRequirement(requirement, value);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"middle_layer.js","sources":["../../src/middle_layer/middle_layer.ts"],"sourcesContent":["import type {\n PlClient,\n ResourceId } from '@milaboratories/pl-client';\nimport {\n field,\n isNullResourceId,\n toGlobalResourceId,\n} from '@milaboratories/pl-client';\nimport { createProjectList, ProjectsField, ProjectsResourceType } from './project_list';\nimport { createProject, withProjectAuthored } from '../mutator/project';\nimport type { SynchronizedTreeState } from '@milaboratories/pl-tree';\nimport { BlockPackPreparer } from '../mutator/block-pack/block_pack';\nimport type { MiLogger, Signer } from '@milaboratories/ts-helpers';\nimport { BlockEventDispatcher } from '@milaboratories/ts-helpers';\nimport { HmacSha256Signer } from '@milaboratories/ts-helpers';\nimport type { ComputableStableDefined } from '@milaboratories/computable';\nimport { WatchableValue } from '@milaboratories/computable';\nimport { Project } from './project';\nimport type {\n MiddleLayerOps,\n MiddleLayerOpsConstructor,\n} from './ops';\nimport {\n DefaultMiddleLayerOpsPaths,\n DefaultMiddleLayerOpsSettings,\n} from './ops';\nimport { randomUUID } from 'node:crypto';\nimport type { ProjectListEntry } from '../model';\nimport type { AuthorMarker, ProjectMeta } from '@milaboratories/pl-model-middle-layer';\nimport { BlockUpdateWatcher } from '../block_registry/watcher';\nimport type { QuickJSWASMModule } from 'quickjs-emscripten';\nimport { getQuickJS } from 'quickjs-emscripten';\nimport type { MiddleLayerDriverKit } from './driver_kit';\nimport { initDriverKit } from './driver_kit';\nimport type { DriverKit, SupportedRequirement } from '@platforma-sdk/model';\nimport { RuntimeCapabilities } from '@platforma-sdk/model';\nimport type { DownloadUrlDriver } from '@milaboratories/pl-drivers';\nimport { V2RegistryProvider } from '../block_registry';\nimport type { Dispatcher } from 'undici';\nimport { RetryAgent } from 'undici';\nimport { getDebugFlags } from '../debug';\nimport { ProjectHelper } from '../model/project_helper';\n\nexport interface MiddleLayerEnvironment {\n dispose(): Promise<void>;\n readonly pl: PlClient;\n readonly runtimeCapabilities: RuntimeCapabilities;\n readonly logger: MiLogger;\n readonly blockEventDispatcher: BlockEventDispatcher;\n readonly httpDispatcher: Dispatcher;\n readonly retryHttpDispatcher: Dispatcher;\n readonly signer: Signer;\n readonly ops: MiddleLayerOps;\n readonly bpPreparer: BlockPackPreparer;\n readonly frontendDownloadDriver: DownloadUrlDriver;\n readonly blockUpdateWatcher: BlockUpdateWatcher;\n readonly quickJs: QuickJSWASMModule;\n readonly driverKit: MiddleLayerDriverKit;\n readonly projectHelper: ProjectHelper;\n}\n\n/**\n * Main access object to work with pl from UI.\n *\n * It implements an abstraction layer of projects and blocks.\n *\n * As a main entry point inside the pl, this object uses a resource attached\n * via the {@link ProjectsField} to the pl client's root, this resource\n * contains project list.\n *\n * Read about alternative roots, if isolated project lists (working environments)\n * are required.\n * */\nexport class MiddleLayer {\n private readonly pl: PlClient;\n\n /** Contains a reactive list of projects along with their meta information. */\n public readonly projectList: ComputableStableDefined<ProjectListEntry[]>;\n\n private constructor(\n private readonly env: MiddleLayerEnvironment,\n public readonly driverKit: DriverKit,\n public readonly signer: Signer,\n private readonly projectListResourceId: ResourceId,\n private readonly openedProjectsList: WatchableValue<ResourceId[]>,\n private readonly projectListTree: SynchronizedTreeState,\n public readonly blockRegistryProvider: V2RegistryProvider,\n projectList: ComputableStableDefined<ProjectListEntry[]>,\n ) {\n this.projectList = projectList;\n this.pl = this.env.pl;\n }\n\n /** Adds a runtime capability to the middle layer. */\n public addRuntimeCapability(requirement: SupportedRequirement, value: number | boolean = true): void {\n this.env.runtimeCapabilities.addSupportedRequirement(requirement, value);\n }\n\n /** Returns extended API driver kit used internally by middle layer. */\n public get internalDriverKit(): MiddleLayerDriverKit {\n return this.env.driverKit;\n }\n\n //\n // Project List Manipulation\n //\n\n /** Creates a project with initial state and adds it to project list. */\n public async createProject(meta: ProjectMeta, id: string = randomUUID()): Promise<ResourceId> {\n const resource = await this.pl.withWriteTx('MLCreateProject', async (tx) => {\n const prj = await createProject(tx, meta);\n tx.createField(field(this.projectListResourceId, id), 'Dynamic', prj);\n await tx.commit();\n return await toGlobalResourceId(prj);\n });\n await this.projectListTree.refreshState();\n return resource;\n }\n\n /** Updates project metadata */\n public async setProjectMeta(\n rid: ResourceId,\n meta: ProjectMeta,\n author?: AuthorMarker,\n ): Promise<void> {\n await withProjectAuthored(this.env.projectHelper, this.pl, rid, author, (prj) => {\n prj.setMeta(meta);\n });\n await this.projectListTree.refreshState();\n }\n\n /** Permanently deletes project from the project list, this will result in\n * destruction of all attached objects, like files, analysis results etc. */\n public async deleteProject(id: string): Promise<void> {\n await this.pl.withWriteTx('MLRemoveProject', async (tx) => {\n tx.removeField(field(this.projectListResourceId, id));\n await tx.commit();\n });\n await this.projectListTree.refreshState();\n }\n\n //\n // Projects\n //\n\n private readonly openedProjectsByRid = new Map<ResourceId, Project>();\n\n private async projectIdToResourceId(id: string): Promise<ResourceId> {\n return await this.pl.withReadTx('Project id to resource id', async (tx) => {\n const rid = (await tx.getField(field(this.projectListResourceId, id))).value;\n if (isNullResourceId(rid)) throw new Error('Unexpected project list structure.');\n return rid;\n });\n }\n\n private async ensureProjectRid(id: ResourceId | string): Promise<ResourceId> {\n if (typeof id === 'string') return await this.projectIdToResourceId(id);\n else return id;\n }\n\n /** Opens a project, and starts corresponding project maintenance loop. */\n public async openProject(id: ResourceId | string) {\n const rid = await this.ensureProjectRid(id);\n if (this.openedProjectsByRid.has(rid)) throw new Error(`Project ${rid} already opened`);\n this.openedProjectsByRid.set(rid, await Project.init(this.env, rid));\n this.openedProjectsList.setValue([...this.openedProjectsByRid.keys()]);\n }\n\n /** Closes the project, and deallocate all corresponding resources. */\n public async closeProject(rid: ResourceId): Promise<void> {\n const prj = this.openedProjectsByRid.get(rid);\n if (prj === undefined) throw new Error(`Project ${rid} not found among opened projects`);\n this.openedProjectsByRid.delete(rid);\n await prj.destroy();\n this.openedProjectsList.setValue([...this.openedProjectsByRid.keys()]);\n }\n\n /** Returns a project access object for opened project, for the given project\n * resource id. */\n public getOpenedProject(rid: ResourceId): Project {\n const prj = this.openedProjectsByRid.get(rid);\n if (prj === undefined) throw new Error(`Project ${rid} not found among opened projects`);\n return prj;\n }\n\n /**\n * Deallocates all runtime resources consumed by this object and awaits\n * actual termination of event loops and other processes associated with\n * them.\n */\n public async close() {\n await Promise.all([...this.openedProjectsByRid.values()].map((prj) => prj.destroy()));\n // this.env.quickJs;\n await this.projectListTree.terminate();\n await this.env.dispose();\n await this.pl.close();\n }\n\n /** @deprecated */\n public async closeAndAwaitTermination() {\n await this.close();\n }\n\n /** Generates sufficiently random string to be used as local secret for the\n * middle layer */\n public static generateLocalSecret(): string {\n return HmacSha256Signer.generateSecret();\n }\n\n /** Returns a block event dispatcher, which can be used to listen to block events. */\n public get blockEventDispatcher(): BlockEventDispatcher {\n return this.env.blockEventDispatcher;\n }\n\n /** Initialize middle layer */\n public static async init(\n pl: PlClient,\n workdir: string,\n _ops: MiddleLayerOpsConstructor,\n ): Promise<MiddleLayer> {\n const ops: MiddleLayerOps = {\n ...DefaultMiddleLayerOpsSettings,\n ...DefaultMiddleLayerOpsPaths(workdir),\n ..._ops,\n };\n\n // overriding debug options from environment variables\n ops.defaultTreeOptions.logStat = getDebugFlags().logTreeStats;\n ops.debugOps.dumpInitialTreeState = getDebugFlags().dumpInitialTreeState;\n\n const projects = await pl.withWriteTx('MLInitialization', async (tx) => {\n const projectsField = field(tx.clientRoot, ProjectsField);\n tx.createField(projectsField, 'Dynamic');\n const projectsFieldData = await tx.getField(projectsField);\n if (isNullResourceId(projectsFieldData.value)) {\n const projects = tx.createEphemeral(ProjectsResourceType);\n tx.lock(projects);\n\n tx.setField(projectsField, projects);\n\n await tx.commit();\n\n return await projects.globalId;\n } else {\n return projectsFieldData.value;\n }\n });\n\n const logger = ops.logger;\n\n const driverKit = await initDriverKit(pl, workdir, ops.frontendDownloadPath, ops);\n\n // passed to components having no own retry logic\n const retryHttpDispatcher = new RetryAgent(pl.httpDispatcher);\n\n const v2RegistryProvider = new V2RegistryProvider(retryHttpDispatcher);\n\n const bpPreparer = new BlockPackPreparer(\n v2RegistryProvider,\n driverKit.signer,\n retryHttpDispatcher,\n );\n\n const quickJs = await getQuickJS();\n\n const runtimeCapabilities = new RuntimeCapabilities();\n // add runtime capabilities of model here\n runtimeCapabilities.addSupportedRequirement('requiresModelAPIVersion', 1);\n // runtime capabilities of the desktop are to be added by the desktop app / test framework\n\n const env: MiddleLayerEnvironment = {\n pl,\n blockEventDispatcher: new BlockEventDispatcher(),\n signer: driverKit.signer,\n logger,\n httpDispatcher: pl.httpDispatcher,\n retryHttpDispatcher,\n ops,\n bpPreparer,\n frontendDownloadDriver: driverKit.frontendDriver,\n driverKit,\n blockUpdateWatcher: new BlockUpdateWatcher(v2RegistryProvider, logger, {\n minDelay: ops.devBlockUpdateRecheckInterval,\n http: retryHttpDispatcher,\n preferredUpdateChannel: ops.preferredUpdateChannel,\n }),\n runtimeCapabilities,\n quickJs,\n projectHelper: new ProjectHelper(quickJs),\n dispose: async () => {\n await retryHttpDispatcher.destroy();\n await driverKit.dispose();\n },\n };\n\n const openedProjects = new WatchableValue<ResourceId[]>([]);\n const projectListTC = await createProjectList(pl, projects, openedProjects, env);\n\n return new MiddleLayer(\n env,\n driverKit,\n driverKit.signer,\n projects,\n openedProjects,\n projectListTC.tree,\n v2RegistryProvider,\n projectListTC.computable,\n );\n }\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"middle_layer.js","sources":["../../src/middle_layer/middle_layer.ts"],"sourcesContent":["import type {\n PlClient,\n ResourceId } from '@milaboratories/pl-client';\nimport {\n field,\n isNullResourceId,\n toGlobalResourceId,\n} from '@milaboratories/pl-client';\nimport { createProjectList, ProjectsField, ProjectsResourceType } from './project_list';\nimport { createProject, withProjectAuthored } from '../mutator/project';\nimport type { SynchronizedTreeState } from '@milaboratories/pl-tree';\nimport { BlockPackPreparer } from '../mutator/block-pack/block_pack';\nimport type { MiLogger, Signer } from '@milaboratories/ts-helpers';\nimport { BlockEventDispatcher } from '@milaboratories/ts-helpers';\nimport { HmacSha256Signer } from '@milaboratories/ts-helpers';\nimport type { ComputableStableDefined } from '@milaboratories/computable';\nimport { WatchableValue } from '@milaboratories/computable';\nimport { Project } from './project';\nimport type {\n MiddleLayerOps,\n MiddleLayerOpsConstructor,\n} from './ops';\nimport {\n DefaultMiddleLayerOpsPaths,\n DefaultMiddleLayerOpsSettings,\n} from './ops';\nimport { randomUUID } from 'node:crypto';\nimport type { ProjectListEntry } from '../model';\nimport type { AuthorMarker, ProjectMeta, BlockPlatform } from '@milaboratories/pl-model-middle-layer';\nimport { BlockUpdateWatcher } from '../block_registry/watcher';\nimport type { QuickJSWASMModule } from 'quickjs-emscripten';\nimport { getQuickJS } from 'quickjs-emscripten';\nimport type { MiddleLayerDriverKit } from './driver_kit';\nimport { initDriverKit } from './driver_kit';\nimport type { DriverKit, SupportedRequirement } from '@platforma-sdk/model';\nimport { RuntimeCapabilities } from '@platforma-sdk/model';\nimport type { DownloadUrlDriver } from '@milaboratories/pl-drivers';\nimport { V2RegistryProvider } from '../block_registry';\nimport type { Dispatcher } from 'undici';\nimport { RetryAgent } from 'undici';\nimport { getDebugFlags } from '../debug';\nimport { ProjectHelper } from '../model/project_helper';\n\nexport interface MiddleLayerEnvironment {\n dispose(): Promise<void>;\n readonly pl: PlClient;\n readonly runtimeCapabilities: RuntimeCapabilities;\n readonly logger: MiLogger;\n readonly blockEventDispatcher: BlockEventDispatcher;\n readonly httpDispatcher: Dispatcher;\n readonly retryHttpDispatcher: Dispatcher;\n readonly signer: Signer;\n readonly ops: MiddleLayerOps;\n readonly bpPreparer: BlockPackPreparer;\n readonly frontendDownloadDriver: DownloadUrlDriver;\n readonly blockUpdateWatcher: BlockUpdateWatcher;\n readonly quickJs: QuickJSWASMModule;\n readonly driverKit: MiddleLayerDriverKit;\n readonly projectHelper: ProjectHelper;\n}\n\n/**\n * Main access object to work with pl from UI.\n *\n * It implements an abstraction layer of projects and blocks.\n *\n * As a main entry point inside the pl, this object uses a resource attached\n * via the {@link ProjectsField} to the pl client's root, this resource\n * contains project list.\n *\n * Read about alternative roots, if isolated project lists (working environments)\n * are required.\n * */\nexport class MiddleLayer {\n private readonly pl: PlClient;\n\n /** Contains a reactive list of projects along with their meta information. */\n public readonly projectList: ComputableStableDefined<ProjectListEntry[]>;\n\n private constructor(\n private readonly env: MiddleLayerEnvironment,\n public readonly driverKit: DriverKit,\n public readonly signer: Signer,\n private readonly projectListResourceId: ResourceId,\n private readonly openedProjectsList: WatchableValue<ResourceId[]>,\n private readonly projectListTree: SynchronizedTreeState,\n public readonly blockRegistryProvider: V2RegistryProvider,\n projectList: ComputableStableDefined<ProjectListEntry[]>,\n ) {\n this.projectList = projectList;\n this.pl = this.env.pl;\n }\n\n /**\n * Get the OS where backend is running.\n * For old backend versions returns undefined.\n */\n public get serverPlatform(): BlockPlatform | undefined {\n return this.pl.serverInfo.platform as BlockPlatform | undefined;\n }\n\n /** Adds a runtime capability to the middle layer. */\n public addRuntimeCapability(requirement: SupportedRequirement, value: number | boolean = true): void {\n this.env.runtimeCapabilities.addSupportedRequirement(requirement, value);\n }\n\n /** Returns extended API driver kit used internally by middle layer. */\n public get internalDriverKit(): MiddleLayerDriverKit {\n return this.env.driverKit;\n }\n\n //\n // Project List Manipulation\n //\n\n /** Creates a project with initial state and adds it to project list. */\n public async createProject(meta: ProjectMeta, id: string = randomUUID()): Promise<ResourceId> {\n const resource = await this.pl.withWriteTx('MLCreateProject', async (tx) => {\n const prj = await createProject(tx, meta);\n tx.createField(field(this.projectListResourceId, id), 'Dynamic', prj);\n await tx.commit();\n return await toGlobalResourceId(prj);\n });\n await this.projectListTree.refreshState();\n return resource;\n }\n\n /** Updates project metadata */\n public async setProjectMeta(\n rid: ResourceId,\n meta: ProjectMeta,\n author?: AuthorMarker,\n ): Promise<void> {\n await withProjectAuthored(this.env.projectHelper, this.pl, rid, author, (prj) => {\n prj.setMeta(meta);\n });\n await this.projectListTree.refreshState();\n }\n\n /** Permanently deletes project from the project list, this will result in\n * destruction of all attached objects, like files, analysis results etc. */\n public async deleteProject(id: string): Promise<void> {\n await this.pl.withWriteTx('MLRemoveProject', async (tx) => {\n tx.removeField(field(this.projectListResourceId, id));\n await tx.commit();\n });\n await this.projectListTree.refreshState();\n }\n\n //\n // Projects\n //\n\n private readonly openedProjectsByRid = new Map<ResourceId, Project>();\n\n private async projectIdToResourceId(id: string): Promise<ResourceId> {\n return await this.pl.withReadTx('Project id to resource id', async (tx) => {\n const rid = (await tx.getField(field(this.projectListResourceId, id))).value;\n if (isNullResourceId(rid)) throw new Error('Unexpected project list structure.');\n return rid;\n });\n }\n\n private async ensureProjectRid(id: ResourceId | string): Promise<ResourceId> {\n if (typeof id === 'string') return await this.projectIdToResourceId(id);\n else return id;\n }\n\n /** Opens a project, and starts corresponding project maintenance loop. */\n public async openProject(id: ResourceId | string) {\n const rid = await this.ensureProjectRid(id);\n if (this.openedProjectsByRid.has(rid)) throw new Error(`Project ${rid} already opened`);\n this.openedProjectsByRid.set(rid, await Project.init(this.env, rid));\n this.openedProjectsList.setValue([...this.openedProjectsByRid.keys()]);\n }\n\n /** Closes the project, and deallocate all corresponding resources. */\n public async closeProject(rid: ResourceId): Promise<void> {\n const prj = this.openedProjectsByRid.get(rid);\n if (prj === undefined) throw new Error(`Project ${rid} not found among opened projects`);\n this.openedProjectsByRid.delete(rid);\n await prj.destroy();\n this.openedProjectsList.setValue([...this.openedProjectsByRid.keys()]);\n }\n\n /** Returns a project access object for opened project, for the given project\n * resource id. */\n public getOpenedProject(rid: ResourceId): Project {\n const prj = this.openedProjectsByRid.get(rid);\n if (prj === undefined) throw new Error(`Project ${rid} not found among opened projects`);\n return prj;\n }\n\n /**\n * Deallocates all runtime resources consumed by this object and awaits\n * actual termination of event loops and other processes associated with\n * them.\n */\n public async close() {\n await Promise.all([...this.openedProjectsByRid.values()].map((prj) => prj.destroy()));\n // this.env.quickJs;\n await this.projectListTree.terminate();\n await this.env.dispose();\n await this.pl.close();\n }\n\n /** @deprecated */\n public async closeAndAwaitTermination() {\n await this.close();\n }\n\n /** Generates sufficiently random string to be used as local secret for the\n * middle layer */\n public static generateLocalSecret(): string {\n return HmacSha256Signer.generateSecret();\n }\n\n /** Returns a block event dispatcher, which can be used to listen to block events. */\n public get blockEventDispatcher(): BlockEventDispatcher {\n return this.env.blockEventDispatcher;\n }\n\n /** Initialize middle layer */\n public static async init(\n pl: PlClient,\n workdir: string,\n _ops: MiddleLayerOpsConstructor,\n ): Promise<MiddleLayer> {\n const ops: MiddleLayerOps = {\n ...DefaultMiddleLayerOpsSettings,\n ...DefaultMiddleLayerOpsPaths(workdir),\n ..._ops,\n };\n\n // overriding debug options from environment variables\n ops.defaultTreeOptions.logStat = getDebugFlags().logTreeStats;\n ops.debugOps.dumpInitialTreeState = getDebugFlags().dumpInitialTreeState;\n\n const projects = await pl.withWriteTx('MLInitialization', async (tx) => {\n const projectsField = field(tx.clientRoot, ProjectsField);\n tx.createField(projectsField, 'Dynamic');\n const projectsFieldData = await tx.getField(projectsField);\n if (isNullResourceId(projectsFieldData.value)) {\n const projects = tx.createEphemeral(ProjectsResourceType);\n tx.lock(projects);\n\n tx.setField(projectsField, projects);\n\n await tx.commit();\n\n return await projects.globalId;\n } else {\n return projectsFieldData.value;\n }\n });\n\n const logger = ops.logger;\n\n const driverKit = await initDriverKit(pl, workdir, ops.frontendDownloadPath, ops);\n\n // passed to components having no own retry logic\n const retryHttpDispatcher = new RetryAgent(pl.httpDispatcher);\n\n const v2RegistryProvider = new V2RegistryProvider(retryHttpDispatcher);\n\n const bpPreparer = new BlockPackPreparer(\n v2RegistryProvider,\n driverKit.signer,\n retryHttpDispatcher,\n );\n\n const quickJs = await getQuickJS();\n\n const runtimeCapabilities = new RuntimeCapabilities();\n // add runtime capabilities of model here\n runtimeCapabilities.addSupportedRequirement('requiresModelAPIVersion', 1);\n // runtime capabilities of the desktop are to be added by the desktop app / test framework\n\n const env: MiddleLayerEnvironment = {\n pl,\n blockEventDispatcher: new BlockEventDispatcher(),\n signer: driverKit.signer,\n logger,\n httpDispatcher: pl.httpDispatcher,\n retryHttpDispatcher,\n ops,\n bpPreparer,\n frontendDownloadDriver: driverKit.frontendDriver,\n driverKit,\n blockUpdateWatcher: new BlockUpdateWatcher(v2RegistryProvider, logger, {\n minDelay: ops.devBlockUpdateRecheckInterval,\n http: retryHttpDispatcher,\n preferredUpdateChannel: ops.preferredUpdateChannel,\n }),\n runtimeCapabilities,\n quickJs,\n projectHelper: new ProjectHelper(quickJs),\n dispose: async () => {\n await retryHttpDispatcher.destroy();\n await driverKit.dispose();\n },\n };\n\n const openedProjects = new WatchableValue<ResourceId[]>([]);\n const projectListTC = await createProjectList(pl, projects, openedProjects, env);\n\n return new MiddleLayer(\n env,\n driverKit,\n driverKit.signer,\n projects,\n openedProjects,\n projectListTC.tree,\n v2RegistryProvider,\n projectListTC.computable,\n );\n }\n}\n"],"names":[],"mappings":"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"}
|
package/dist/pool/data.cjs
CHANGED
|
@@ -12,6 +12,9 @@ const PColumnDataBinarySuperPartitioned = plClient.resourceType('PColumnData/Par
|
|
|
12
12
|
const PColumnDataParquetPartitioned = plClient.resourceType('PColumnData/ParquetPartitioned', '1');
|
|
13
13
|
const PColumnDataParquetSuperPartitioned = plClient.resourceType('PColumnData/Partitioned/ParquetPartitioned', '1');
|
|
14
14
|
const PColumnDataJson = plClient.resourceType('PColumnData/Json', '1');
|
|
15
|
+
const ParquetChunkResourceType = plClient.resourceType('ParquetChunk', '1');
|
|
16
|
+
const BinaryPartitionedIndexFieldSuffix = '.index';
|
|
17
|
+
const BinaryPartitionedValuesFieldSuffix = '.values';
|
|
15
18
|
function parseDataInfoResource(data) {
|
|
16
19
|
if (!data.getIsReadyOrError())
|
|
17
20
|
throw new model.PFrameDriverError('Data not ready.');
|
|
@@ -64,8 +67,8 @@ function parseDataInfoResource(data) {
|
|
|
64
67
|
const parts = {};
|
|
65
68
|
// parsing the structure
|
|
66
69
|
for (const field of data.listInputFields()) {
|
|
67
|
-
if (field.endsWith(
|
|
68
|
-
const partKey = field.slice(0,
|
|
70
|
+
if (field.endsWith(BinaryPartitionedIndexFieldSuffix)) {
|
|
71
|
+
const partKey = field.slice(0, -BinaryPartitionedIndexFieldSuffix.length);
|
|
69
72
|
let part = parts[partKey];
|
|
70
73
|
if (part === undefined) {
|
|
71
74
|
part = {};
|
|
@@ -73,8 +76,8 @@ function parseDataInfoResource(data) {
|
|
|
73
76
|
}
|
|
74
77
|
part.index = data.traverse({ field, errorIfFieldNotSet: true }).persist();
|
|
75
78
|
}
|
|
76
|
-
else if (field.endsWith(
|
|
77
|
-
const partKey = field.slice(0,
|
|
79
|
+
else if (field.endsWith(BinaryPartitionedValuesFieldSuffix)) {
|
|
80
|
+
const partKey = field.slice(0, -BinaryPartitionedValuesFieldSuffix.length);
|
|
78
81
|
let part = parts[partKey];
|
|
79
82
|
if (part === undefined) {
|
|
80
83
|
part = {};
|
|
@@ -107,8 +110,8 @@ function parseDataInfoResource(data) {
|
|
|
107
110
|
if (keys === undefined)
|
|
108
111
|
throw new model.PFrameDriverError(`no partition keys for super key ${superKey}`);
|
|
109
112
|
for (const field of keys) {
|
|
110
|
-
if (field.endsWith(
|
|
111
|
-
const key = field.slice(0,
|
|
113
|
+
if (field.endsWith(BinaryPartitionedIndexFieldSuffix)) {
|
|
114
|
+
const key = field.slice(0, -BinaryPartitionedIndexFieldSuffix.length);
|
|
112
115
|
const partKey = JSON.stringify([
|
|
113
116
|
...JSON.parse(superKey),
|
|
114
117
|
...JSON.parse(key)
|
|
@@ -123,8 +126,8 @@ function parseDataInfoResource(data) {
|
|
|
123
126
|
errorIfFieldNotSet: true,
|
|
124
127
|
}).persist();
|
|
125
128
|
}
|
|
126
|
-
else if (field.endsWith(
|
|
127
|
-
const key = field.slice(0,
|
|
129
|
+
else if (field.endsWith(BinaryPartitionedValuesFieldSuffix)) {
|
|
130
|
+
const key = field.slice(0, -BinaryPartitionedValuesFieldSuffix.length);
|
|
128
131
|
const partKey = JSON.stringify([
|
|
129
132
|
...JSON.parse(superKey),
|
|
130
133
|
...JSON.parse(key)
|
|
@@ -154,7 +157,7 @@ function parseDataInfoResource(data) {
|
|
|
154
157
|
const parts = {};
|
|
155
158
|
for (const key of data.listInputFields()) {
|
|
156
159
|
const resource = data.traverse({ field: key, assertFieldType: 'Input', errorIfFieldNotSet: true });
|
|
157
|
-
parts[key] =
|
|
160
|
+
parts[key] = traverseParquetChunkResource(resource);
|
|
158
161
|
}
|
|
159
162
|
return {
|
|
160
163
|
type: 'ParquetPartitioned',
|
|
@@ -176,7 +179,7 @@ function parseDataInfoResource(data) {
|
|
|
176
179
|
...JSON.parse(superKey),
|
|
177
180
|
...JSON.parse(key),
|
|
178
181
|
]);
|
|
179
|
-
parts[partKey] =
|
|
182
|
+
parts[partKey] = traverseParquetChunkResource(resource);
|
|
180
183
|
}
|
|
181
184
|
}
|
|
182
185
|
return {
|
|
@@ -187,7 +190,11 @@ function parseDataInfoResource(data) {
|
|
|
187
190
|
}
|
|
188
191
|
throw new model.PFrameDriverError(`unsupported resource type: ${plClient.resourceTypeToString(data.resourceType)}`);
|
|
189
192
|
}
|
|
190
|
-
function
|
|
193
|
+
function traverseParquetChunkResource(resource) {
|
|
194
|
+
if (!plClient.resourceTypesEqual(resource.resourceType, ParquetChunkResourceType)) {
|
|
195
|
+
throw new model.PFrameDriverError(`unknown resource type: ${plClient.resourceTypeToString(resource.resourceType)}, `
|
|
196
|
+
+ `expected: ${plClient.resourceTypeToString(ParquetChunkResourceType)}`);
|
|
197
|
+
}
|
|
191
198
|
const blob = resource.traverse({ field: 'blob', assertFieldType: 'Service', errorIfFieldNotSet: true }).persist();
|
|
192
199
|
const partInfo = resource.getDataAsJson();
|
|
193
200
|
const mapping = resource.traverse({ field: 'mapping', assertFieldType: 'Service', errorIfFieldNotSet: true }).getDataAsJson();
|
|
@@ -231,10 +238,11 @@ exports.PColumnDataJsonPartitioned = PColumnDataJsonPartitioned;
|
|
|
231
238
|
exports.PColumnDataJsonSuperPartitioned = PColumnDataJsonSuperPartitioned;
|
|
232
239
|
exports.PColumnDataParquetPartitioned = PColumnDataParquetPartitioned;
|
|
233
240
|
exports.PColumnDataParquetSuperPartitioned = PColumnDataParquetSuperPartitioned;
|
|
241
|
+
exports.ParquetChunkResourceType = ParquetChunkResourceType;
|
|
234
242
|
exports.deriveGlobalPObjectId = deriveGlobalPObjectId;
|
|
235
243
|
exports.deriveLegacyPObjectId = deriveLegacyPObjectId;
|
|
236
244
|
exports.deriveLocalPObjectId = deriveLocalPObjectId;
|
|
237
245
|
exports.makeDataInfoFromPColumnValues = makeDataInfoFromPColumnValues;
|
|
238
246
|
exports.parseDataInfoResource = parseDataInfoResource;
|
|
239
|
-
exports.
|
|
247
|
+
exports.traverseParquetChunkResource = traverseParquetChunkResource;
|
|
240
248
|
//# sourceMappingURL=data.cjs.map
|
package/dist/pool/data.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data.cjs","sources":["../../src/pool/data.ts"],"sourcesContent":["import {\n PFrameDriverError,\n type BinaryChunk,\n type JsonDataInfo,\n type ParquetChunk,\n type ParquetChunkMapping,\n type ParquetChunkMetadata,\n type PColumnSpec,\n type PColumnValue,\n type PColumnValues,\n type PlRef,\n type PObjectId,\n type PObjectSpec,\n} from '@platforma-sdk/model';\nimport type { PlTreeEntry, PlTreeNodeAccessor } from '@milaboratories/pl-tree';\nimport canonicalize from 'canonicalize';\nimport {\n isNullResourceId,\n resourceType,\n resourceTypeToString,\n resourceTypesEqual,\n} from '@milaboratories/pl-client';\nimport type { Writable } from 'utility-types';\nimport { createHash } from 'node:crypto';\nimport type { PFrameInternal } from '@milaboratories/pl-model-middle-layer';\n\nexport const PColumnDataJsonPartitioned = resourceType('PColumnData/JsonPartitioned', '1');\nexport const PColumnDataJsonSuperPartitioned = resourceType(\n 'PColumnData/Partitioned/JsonPartitioned',\n '1',\n);\nexport const PColumnDataBinaryPartitioned = resourceType('PColumnData/BinaryPartitioned', '1');\nexport const PColumnDataBinarySuperPartitioned = resourceType(\n 'PColumnData/Partitioned/BinaryPartitioned',\n '1',\n);\nexport const PColumnDataParquetPartitioned = resourceType('PColumnData/ParquetPartitioned', '1');\nexport const PColumnDataParquetSuperPartitioned = resourceType(\n 'PColumnData/Partitioned/ParquetPartitioned',\n '1',\n);\nexport const PColumnDataJson = resourceType('PColumnData/Json', '1');\n\nexport type PColumnDataJsonResourceValue = {\n keyLength: number;\n data: Record<string, PColumnValue>;\n};\n\nexport type PColumnDataPartitionedResourceValue = {\n partitionKeyLength: number;\n};\n\nexport type PColumnDataSuperPartitionedResourceValue = {\n superPartitionKeyLength: number;\n partitionKeyLength: number;\n};\n\nexport function parseDataInfoResource(\n data: PlTreeNodeAccessor,\n): PFrameInternal.DataInfo<PlTreeEntry> {\n if (!data.getIsReadyOrError()) throw new PFrameDriverError('Data not ready.');\n\n const resourceData = data.getDataAsJson();\n if (resourceData === undefined)\n throw new PFrameDriverError('unexpected data info structure, no resource data');\n\n if (resourceTypesEqual(data.resourceType, PColumnDataJson)) {\n const dataContent = resourceData as PColumnDataJsonResourceValue;\n\n return {\n type: 'Json',\n keyLength: dataContent.keyLength,\n data: dataContent.data,\n };\n } else if (resourceTypesEqual(data.resourceType, PColumnDataJsonPartitioned)) {\n const meta = resourceData as PColumnDataPartitionedResourceValue;\n\n const parts = Object.fromEntries(\n data\n .listInputFields()\n .map((field) => [field, data.traverse({ field, errorIfFieldNotSet: true }).persist()]),\n );\n\n return {\n type: 'JsonPartitioned',\n partitionKeyLength: meta.partitionKeyLength,\n parts,\n };\n } else if (resourceTypesEqual(data.resourceType, PColumnDataJsonSuperPartitioned)) {\n const meta = resourceData as PColumnDataSuperPartitionedResourceValue;\n\n const parts: Record<string, PlTreeEntry> = {};\n for (const superKey of data.listInputFields()) {\n const superPart = data.traverse({ field: superKey, errorIfFieldNotSet: true });\n const keys = superPart.listInputFields();\n if (keys === undefined) throw new PFrameDriverError(`no partition keys for super key ${superKey}`);\n\n for (const key of keys) {\n const partKey = JSON.stringify([\n ...JSON.parse(superKey) as PColumnValue[],\n ...JSON.parse(key) as PColumnValue[]]);\n parts[partKey] = superPart.traverse({ field: key, errorIfFieldNotSet: true }).persist();\n }\n }\n\n return {\n type: 'JsonPartitioned',\n partitionKeyLength: meta.superPartitionKeyLength + meta.partitionKeyLength,\n parts,\n };\n } else if (resourceTypesEqual(data.resourceType, PColumnDataBinaryPartitioned)) {\n const meta = resourceData as PColumnDataPartitionedResourceValue;\n\n const parts: Record<\n string,\n Partial<Writable<BinaryChunk<PlTreeEntry>>>\n > = {};\n\n // parsing the structure\n for (const field of data.listInputFields()) {\n if (field.endsWith('.index')) {\n const partKey = field.slice(0, field.length - 6);\n let part = parts[partKey];\n if (part === undefined) {\n part = {};\n parts[partKey] = part;\n }\n part.index = data.traverse({ field, errorIfFieldNotSet: true }).persist();\n } else if (field.endsWith('.values')) {\n const partKey = field.slice(0, field.length - 7);\n let part = parts[partKey];\n if (part === undefined) {\n part = {};\n parts[partKey] = part;\n }\n part.values = data.traverse({ field, errorIfFieldNotSet: true }).persist();\n } else throw new PFrameDriverError(`unrecognized part field name: ${field}`);\n }\n\n // structure validation\n for (const [key, part] of Object.entries(parts)) {\n if (part.index === undefined) throw new PFrameDriverError(`no index for part ${key}`);\n if (part.values === undefined) throw new PFrameDriverError(`no values for part ${key}`);\n }\n\n return {\n type: 'BinaryPartitioned',\n partitionKeyLength: meta.partitionKeyLength,\n parts: parts as Record<string, BinaryChunk<PlTreeEntry>>,\n };\n } else if (resourceTypesEqual(data.resourceType, PColumnDataBinarySuperPartitioned)) {\n const meta = resourceData as PColumnDataSuperPartitionedResourceValue;\n\n const parts: Record<\n string,\n Partial<Writable<BinaryChunk<PlTreeEntry>>>\n > = {};\n for (const superKey of data.listInputFields()) {\n const superData = data.traverse({ field: superKey, errorIfFieldNotSet: true });\n const keys = superData.listInputFields();\n if (keys === undefined) throw new PFrameDriverError(`no partition keys for super key ${superKey}`);\n\n for (const field of keys) {\n if (field.endsWith('.index')) {\n const key = field.slice(0, field.length - 6);\n\n const partKey = JSON.stringify([\n ...JSON.parse(superKey) as PColumnValue[],\n ...JSON.parse(key) as PColumnValue[]]);\n let part = parts[partKey];\n if (part === undefined) {\n part = {};\n parts[partKey] = part;\n }\n parts[partKey].index = superData.traverse({\n field,\n errorIfFieldNotSet: true,\n }).persist();\n } else if (field.endsWith('.values')) {\n const key = field.slice(0, field.length - 7);\n\n const partKey = JSON.stringify([\n ...JSON.parse(superKey) as PColumnValue[],\n ...JSON.parse(key) as PColumnValue[]]);\n let part = parts[partKey];\n if (part === undefined) {\n part = {};\n parts[partKey] = part;\n }\n parts[partKey].values = superData.traverse({\n field,\n errorIfFieldNotSet: true,\n }).persist();\n } else throw new PFrameDriverError(`unrecognized part field name: ${field}`);\n }\n }\n\n return {\n type: 'BinaryPartitioned',\n partitionKeyLength: meta.superPartitionKeyLength + meta.partitionKeyLength,\n parts: parts as Record<string, BinaryChunk<PlTreeEntry>>,\n };\n } else if (resourceTypesEqual(data.resourceType, PColumnDataParquetPartitioned)) {\n const meta = resourceData as PColumnDataPartitionedResourceValue;\n\n const parts: Record<string, ParquetChunk<PlTreeEntry>> = {};\n for (const key of data.listInputFields()) {\n const resource = data.traverse({ field: key, assertFieldType: 'Input', errorIfFieldNotSet: true });\n\n parts[key] = traverseParquetPartitionedResource(resource);\n }\n\n return {\n type: 'ParquetPartitioned',\n partitionKeyLength: meta.partitionKeyLength,\n parts,\n };\n } else if (resourceTypesEqual(data.resourceType, PColumnDataParquetSuperPartitioned)) {\n const meta = resourceData as PColumnDataSuperPartitionedResourceValue;\n\n const parts: Record<string, ParquetChunk<PlTreeEntry>> = {};\n for (const superKey of data.listInputFields()) {\n const superPart = data.traverse({ field: superKey, errorIfFieldNotSet: true });\n const keys = superPart.listInputFields();\n if (keys === undefined) throw new PFrameDriverError(`no partition keys for super key ${superKey}`);\n\n for (const key of keys) {\n const resource = data.traverse({ field: key, errorIfFieldNotSet: true });\n\n const partKey = JSON.stringify([\n ...JSON.parse(superKey) as PColumnValue[],\n ...JSON.parse(key) as PColumnValue[],\n ]);\n parts[partKey] = traverseParquetPartitionedResource(resource);\n }\n }\n\n return {\n type: 'ParquetPartitioned',\n partitionKeyLength: meta.superPartitionKeyLength + meta.partitionKeyLength,\n parts,\n };\n }\n\n throw new PFrameDriverError(`unsupported resource type: ${resourceTypeToString(data.resourceType)}`);\n}\n\nexport function traverseParquetPartitionedResource(resource: PlTreeNodeAccessor): ParquetChunk<PlTreeEntry> {\n const blob = resource.traverse(\n { field: 'blob', assertFieldType: 'Service', errorIfFieldNotSet: true },\n ).persist();\n const partInfo = resource.getDataAsJson() as ParquetChunkMetadata;\n const mapping = resource.traverse(\n { field: 'mapping', assertFieldType: 'Service', errorIfFieldNotSet: true },\n ).getDataAsJson() as ParquetChunkMapping;\n\n return {\n data: blob,\n ...partInfo,\n ...mapping,\n };\n}\n\nexport function makeDataInfoFromPColumnValues(\n spec: PColumnSpec,\n data: PColumnValues,\n): JsonDataInfo {\n const keyLength = spec.axesSpec.length;\n const jsonData: Record<string, PColumnValue> = {};\n for (const { key, val } of data) {\n if (key.length !== keyLength)\n throw new PFrameDriverError(`inline column key length ${key.length} differs from axes count ${keyLength}`);\n jsonData[JSON.stringify(key)] = val;\n }\n\n return {\n type: 'Json',\n keyLength,\n data: jsonData,\n };\n}\n\nexport function deriveLegacyPObjectId(spec: PObjectSpec, data: PlTreeNodeAccessor): PObjectId {\n const hash = createHash('sha256');\n hash.update(canonicalize(spec)!);\n hash.update(String(!isNullResourceId(data.originalId) ? data.originalId : data.id));\n return hash.digest().toString('hex') as PObjectId;\n}\n\nexport function deriveGlobalPObjectId(blockId: string, exportName: string): PObjectId {\n return canonicalize({ __isRef: true, blockId, name: exportName } satisfies PlRef)! as PObjectId;\n}\n\nexport function deriveLocalPObjectId(resolvePath: string[], outputName: string): PObjectId {\n return canonicalize({ resolvePath, name: outputName })! as PObjectId;\n}\n"],"names":["resourceType","PFrameDriverError","resourceTypesEqual","resourceTypeToString","createHash","isNullResourceId"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"data.cjs","sources":["../../src/pool/data.ts"],"sourcesContent":["import {\n PFrameDriverError,\n type BinaryChunk,\n type JsonDataInfo,\n type ParquetChunk,\n type ParquetChunkMapping,\n type ParquetChunkMetadata,\n type PColumnSpec,\n type PColumnValue,\n type PColumnValues,\n type PlRef,\n type PObjectId,\n type PObjectSpec,\n} from '@platforma-sdk/model';\nimport type { PlTreeEntry, PlTreeNodeAccessor } from '@milaboratories/pl-tree';\nimport canonicalize from 'canonicalize';\nimport {\n isNullResourceId,\n resourceType,\n resourceTypeToString,\n resourceTypesEqual,\n} from '@milaboratories/pl-client';\nimport type { Writable } from 'utility-types';\nimport { createHash } from 'node:crypto';\nimport type { PFrameInternal } from '@milaboratories/pl-model-middle-layer';\n\nexport const PColumnDataJsonPartitioned = resourceType('PColumnData/JsonPartitioned', '1');\nexport const PColumnDataJsonSuperPartitioned = resourceType(\n 'PColumnData/Partitioned/JsonPartitioned',\n '1',\n);\nexport const PColumnDataBinaryPartitioned = resourceType('PColumnData/BinaryPartitioned', '1');\nexport const PColumnDataBinarySuperPartitioned = resourceType(\n 'PColumnData/Partitioned/BinaryPartitioned',\n '1',\n);\nexport const PColumnDataParquetPartitioned = resourceType('PColumnData/ParquetPartitioned', '1');\nexport const PColumnDataParquetSuperPartitioned = resourceType(\n 'PColumnData/Partitioned/ParquetPartitioned',\n '1',\n);\nexport const PColumnDataJson = resourceType('PColumnData/Json', '1');\n\nexport const ParquetChunkResourceType = resourceType('ParquetChunk', '1');\n\nexport type PColumnDataJsonResourceValue = {\n keyLength: number;\n data: Record<string, PColumnValue>;\n};\n\nexport type PColumnDataPartitionedResourceValue = {\n partitionKeyLength: number;\n};\n\nexport type PColumnDataSuperPartitionedResourceValue = {\n superPartitionKeyLength: number;\n partitionKeyLength: number;\n};\n\nconst BinaryPartitionedIndexFieldSuffix = '.index';\nconst BinaryPartitionedValuesFieldSuffix = '.values';\n\nexport function parseDataInfoResource(\n data: PlTreeNodeAccessor,\n): PFrameInternal.DataInfo<PlTreeEntry> {\n if (!data.getIsReadyOrError()) throw new PFrameDriverError('Data not ready.');\n\n const resourceData = data.getDataAsJson();\n if (resourceData === undefined)\n throw new PFrameDriverError('unexpected data info structure, no resource data');\n\n if (resourceTypesEqual(data.resourceType, PColumnDataJson)) {\n const dataContent = resourceData as PColumnDataJsonResourceValue;\n\n return {\n type: 'Json',\n keyLength: dataContent.keyLength,\n data: dataContent.data,\n };\n } else if (resourceTypesEqual(data.resourceType, PColumnDataJsonPartitioned)) {\n const meta = resourceData as PColumnDataPartitionedResourceValue;\n\n const parts = Object.fromEntries(\n data\n .listInputFields()\n .map((field) => [field, data.traverse({ field, errorIfFieldNotSet: true }).persist()]),\n );\n\n return {\n type: 'JsonPartitioned',\n partitionKeyLength: meta.partitionKeyLength,\n parts,\n };\n } else if (resourceTypesEqual(data.resourceType, PColumnDataJsonSuperPartitioned)) {\n const meta = resourceData as PColumnDataSuperPartitionedResourceValue;\n\n const parts: Record<string, PlTreeEntry> = {};\n for (const superKey of data.listInputFields()) {\n const superPart = data.traverse({ field: superKey, errorIfFieldNotSet: true });\n const keys = superPart.listInputFields();\n if (keys === undefined) throw new PFrameDriverError(`no partition keys for super key ${superKey}`);\n\n for (const key of keys) {\n const partKey = JSON.stringify([\n ...JSON.parse(superKey) as PColumnValue[],\n ...JSON.parse(key) as PColumnValue[]]);\n parts[partKey] = superPart.traverse({ field: key, errorIfFieldNotSet: true }).persist();\n }\n }\n\n return {\n type: 'JsonPartitioned',\n partitionKeyLength: meta.superPartitionKeyLength + meta.partitionKeyLength,\n parts,\n };\n } else if (resourceTypesEqual(data.resourceType, PColumnDataBinaryPartitioned)) {\n const meta = resourceData as PColumnDataPartitionedResourceValue;\n\n const parts: Record<\n string,\n Partial<Writable<BinaryChunk<PlTreeEntry>>>\n > = {};\n\n // parsing the structure\n for (const field of data.listInputFields()) {\n if (field.endsWith(BinaryPartitionedIndexFieldSuffix)) {\n const partKey = field.slice(0, -BinaryPartitionedIndexFieldSuffix.length);\n let part = parts[partKey];\n if (part === undefined) {\n part = {};\n parts[partKey] = part;\n }\n part.index = data.traverse({ field, errorIfFieldNotSet: true }).persist();\n } else if (field.endsWith(BinaryPartitionedValuesFieldSuffix)) {\n const partKey = field.slice(0, -BinaryPartitionedValuesFieldSuffix.length);\n let part = parts[partKey];\n if (part === undefined) {\n part = {};\n parts[partKey] = part;\n }\n part.values = data.traverse({ field, errorIfFieldNotSet: true }).persist();\n } else throw new PFrameDriverError(`unrecognized part field name: ${field}`);\n }\n\n // structure validation\n for (const [key, part] of Object.entries(parts)) {\n if (part.index === undefined) throw new PFrameDriverError(`no index for part ${key}`);\n if (part.values === undefined) throw new PFrameDriverError(`no values for part ${key}`);\n }\n\n return {\n type: 'BinaryPartitioned',\n partitionKeyLength: meta.partitionKeyLength,\n parts: parts as Record<string, BinaryChunk<PlTreeEntry>>,\n };\n } else if (resourceTypesEqual(data.resourceType, PColumnDataBinarySuperPartitioned)) {\n const meta = resourceData as PColumnDataSuperPartitionedResourceValue;\n\n const parts: Record<\n string,\n Partial<Writable<BinaryChunk<PlTreeEntry>>>\n > = {};\n for (const superKey of data.listInputFields()) {\n const superData = data.traverse({ field: superKey, errorIfFieldNotSet: true });\n const keys = superData.listInputFields();\n if (keys === undefined) throw new PFrameDriverError(`no partition keys for super key ${superKey}`);\n\n for (const field of keys) {\n if (field.endsWith(BinaryPartitionedIndexFieldSuffix)) {\n const key = field.slice(0, -BinaryPartitionedIndexFieldSuffix.length);\n\n const partKey = JSON.stringify([\n ...JSON.parse(superKey) as PColumnValue[],\n ...JSON.parse(key) as PColumnValue[]]);\n let part = parts[partKey];\n if (part === undefined) {\n part = {};\n parts[partKey] = part;\n }\n parts[partKey].index = superData.traverse({\n field,\n errorIfFieldNotSet: true,\n }).persist();\n } else if (field.endsWith(BinaryPartitionedValuesFieldSuffix)) {\n const key = field.slice(0, -BinaryPartitionedValuesFieldSuffix.length);\n\n const partKey = JSON.stringify([\n ...JSON.parse(superKey) as PColumnValue[],\n ...JSON.parse(key) as PColumnValue[]]);\n let part = parts[partKey];\n if (part === undefined) {\n part = {};\n parts[partKey] = part;\n }\n parts[partKey].values = superData.traverse({\n field,\n errorIfFieldNotSet: true,\n }).persist();\n } else throw new PFrameDriverError(`unrecognized part field name: ${field}`);\n }\n }\n\n return {\n type: 'BinaryPartitioned',\n partitionKeyLength: meta.superPartitionKeyLength + meta.partitionKeyLength,\n parts: parts as Record<string, BinaryChunk<PlTreeEntry>>,\n };\n } else if (resourceTypesEqual(data.resourceType, PColumnDataParquetPartitioned)) {\n const meta = resourceData as PColumnDataPartitionedResourceValue;\n\n const parts: Record<string, ParquetChunk<PlTreeEntry>> = {};\n for (const key of data.listInputFields()) {\n const resource = data.traverse({ field: key, assertFieldType: 'Input', errorIfFieldNotSet: true });\n\n parts[key] = traverseParquetChunkResource(resource);\n }\n\n return {\n type: 'ParquetPartitioned',\n partitionKeyLength: meta.partitionKeyLength,\n parts,\n };\n } else if (resourceTypesEqual(data.resourceType, PColumnDataParquetSuperPartitioned)) {\n const meta = resourceData as PColumnDataSuperPartitionedResourceValue;\n\n const parts: Record<string, ParquetChunk<PlTreeEntry>> = {};\n for (const superKey of data.listInputFields()) {\n const superPart = data.traverse({ field: superKey, errorIfFieldNotSet: true });\n const keys = superPart.listInputFields();\n if (keys === undefined) throw new PFrameDriverError(`no partition keys for super key ${superKey}`);\n\n for (const key of keys) {\n const resource = data.traverse({ field: key, errorIfFieldNotSet: true });\n\n const partKey = JSON.stringify([\n ...JSON.parse(superKey) as PColumnValue[],\n ...JSON.parse(key) as PColumnValue[],\n ]);\n parts[partKey] = traverseParquetChunkResource(resource);\n }\n }\n\n return {\n type: 'ParquetPartitioned',\n partitionKeyLength: meta.superPartitionKeyLength + meta.partitionKeyLength,\n parts,\n };\n }\n\n throw new PFrameDriverError(`unsupported resource type: ${resourceTypeToString(data.resourceType)}`);\n}\n\nexport function traverseParquetChunkResource(resource: PlTreeNodeAccessor): ParquetChunk<PlTreeEntry> {\n if (!resourceTypesEqual(resource.resourceType, ParquetChunkResourceType)) {\n throw new PFrameDriverError(\n `unknown resource type: ${resourceTypeToString(resource.resourceType)}, `\n + `expected: ${resourceTypeToString(ParquetChunkResourceType)}`,\n );\n }\n\n const blob = resource.traverse(\n { field: 'blob', assertFieldType: 'Service', errorIfFieldNotSet: true },\n ).persist();\n const partInfo = resource.getDataAsJson() as ParquetChunkMetadata;\n const mapping = resource.traverse(\n { field: 'mapping', assertFieldType: 'Service', errorIfFieldNotSet: true },\n ).getDataAsJson() as ParquetChunkMapping;\n\n return {\n data: blob,\n ...partInfo,\n ...mapping,\n };\n}\n\nexport function makeDataInfoFromPColumnValues(\n spec: PColumnSpec,\n data: PColumnValues,\n): JsonDataInfo {\n const keyLength = spec.axesSpec.length;\n const jsonData: Record<string, PColumnValue> = {};\n for (const { key, val } of data) {\n if (key.length !== keyLength)\n throw new PFrameDriverError(`inline column key length ${key.length} differs from axes count ${keyLength}`);\n jsonData[JSON.stringify(key)] = val;\n }\n\n return {\n type: 'Json',\n keyLength,\n data: jsonData,\n };\n}\n\nexport function deriveLegacyPObjectId(spec: PObjectSpec, data: PlTreeNodeAccessor): PObjectId {\n const hash = createHash('sha256');\n hash.update(canonicalize(spec)!);\n hash.update(String(!isNullResourceId(data.originalId) ? data.originalId : data.id));\n return hash.digest().toString('hex') as PObjectId;\n}\n\nexport function deriveGlobalPObjectId(blockId: string, exportName: string): PObjectId {\n return canonicalize({ __isRef: true, blockId, name: exportName } satisfies PlRef)! as PObjectId;\n}\n\nexport function deriveLocalPObjectId(resolvePath: string[], outputName: string): PObjectId {\n return canonicalize({ resolvePath, name: outputName })! as PObjectId;\n}\n"],"names":["resourceType","PFrameDriverError","resourceTypesEqual","resourceTypeToString","createHash","isNullResourceId"],"mappings":"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"}
|
package/dist/pool/data.d.ts
CHANGED
|
@@ -8,6 +8,7 @@ export declare const PColumnDataBinarySuperPartitioned: import("@milaboratories/
|
|
|
8
8
|
export declare const PColumnDataParquetPartitioned: import("@milaboratories/pl-client").ResourceType;
|
|
9
9
|
export declare const PColumnDataParquetSuperPartitioned: import("@milaboratories/pl-client").ResourceType;
|
|
10
10
|
export declare const PColumnDataJson: import("@milaboratories/pl-client").ResourceType;
|
|
11
|
+
export declare const ParquetChunkResourceType: import("@milaboratories/pl-client").ResourceType;
|
|
11
12
|
export type PColumnDataJsonResourceValue = {
|
|
12
13
|
keyLength: number;
|
|
13
14
|
data: Record<string, PColumnValue>;
|
|
@@ -20,7 +21,7 @@ export type PColumnDataSuperPartitionedResourceValue = {
|
|
|
20
21
|
partitionKeyLength: number;
|
|
21
22
|
};
|
|
22
23
|
export declare function parseDataInfoResource(data: PlTreeNodeAccessor): PFrameInternal.DataInfo<PlTreeEntry>;
|
|
23
|
-
export declare function
|
|
24
|
+
export declare function traverseParquetChunkResource(resource: PlTreeNodeAccessor): ParquetChunk<PlTreeEntry>;
|
|
24
25
|
export declare function makeDataInfoFromPColumnValues(spec: PColumnSpec, data: PColumnValues): JsonDataInfo;
|
|
25
26
|
export declare function deriveLegacyPObjectId(spec: PObjectSpec, data: PlTreeNodeAccessor): PObjectId;
|
|
26
27
|
export declare function deriveGlobalPObjectId(blockId: string, exportName: string): PObjectId;
|
package/dist/pool/data.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data.d.ts","sourceRoot":"","sources":["../../src/pool/data.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,YAAY,EACjB,KAAK,YAAY,EAGjB,KAAK,WAAW,EAChB,KAAK,YAAY,EACjB,KAAK,aAAa,EAElB,KAAK,SAAS,EACd,KAAK,WAAW,EACjB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAU/E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC;AAE5E,eAAO,MAAM,0BAA0B,kDAAmD,CAAC;AAC3F,eAAO,MAAM,+BAA+B,kDAG3C,CAAC;AACF,eAAO,MAAM,4BAA4B,kDAAqD,CAAC;AAC/F,eAAO,MAAM,iCAAiC,kDAG7C,CAAC;AACF,eAAO,MAAM,6BAA6B,kDAAsD,CAAC;AACjG,eAAO,MAAM,kCAAkC,kDAG9C,CAAC;AACF,eAAO,MAAM,eAAe,kDAAwC,CAAC;AAErE,MAAM,MAAM,4BAA4B,GAAG;IACzC,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;CACpC,CAAC;AAEF,MAAM,MAAM,mCAAmC,GAAG;IAChD,kBAAkB,EAAE,MAAM,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,wCAAwC,GAAG;IACrD,uBAAuB,EAAE,MAAM,CAAC;IAChC,kBAAkB,EAAE,MAAM,CAAC;CAC5B,CAAC;
|
|
1
|
+
{"version":3,"file":"data.d.ts","sourceRoot":"","sources":["../../src/pool/data.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,YAAY,EACjB,KAAK,YAAY,EAGjB,KAAK,WAAW,EAChB,KAAK,YAAY,EACjB,KAAK,aAAa,EAElB,KAAK,SAAS,EACd,KAAK,WAAW,EACjB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAU/E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC;AAE5E,eAAO,MAAM,0BAA0B,kDAAmD,CAAC;AAC3F,eAAO,MAAM,+BAA+B,kDAG3C,CAAC;AACF,eAAO,MAAM,4BAA4B,kDAAqD,CAAC;AAC/F,eAAO,MAAM,iCAAiC,kDAG7C,CAAC;AACF,eAAO,MAAM,6BAA6B,kDAAsD,CAAC;AACjG,eAAO,MAAM,kCAAkC,kDAG9C,CAAC;AACF,eAAO,MAAM,eAAe,kDAAwC,CAAC;AAErE,eAAO,MAAM,wBAAwB,kDAAoC,CAAC;AAE1E,MAAM,MAAM,4BAA4B,GAAG;IACzC,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;CACpC,CAAC;AAEF,MAAM,MAAM,mCAAmC,GAAG;IAChD,kBAAkB,EAAE,MAAM,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,wCAAwC,GAAG;IACrD,uBAAuB,EAAE,MAAM,CAAC;IAChC,kBAAkB,EAAE,MAAM,CAAC;CAC5B,CAAC;AAKF,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,kBAAkB,GACvB,cAAc,CAAC,QAAQ,CAAC,WAAW,CAAC,CA0LtC;AAED,wBAAgB,4BAA4B,CAAC,QAAQ,EAAE,kBAAkB,GAAG,YAAY,CAAC,WAAW,CAAC,CAqBpG;AAED,wBAAgB,6BAA6B,CAC3C,IAAI,EAAE,WAAW,EACjB,IAAI,EAAE,aAAa,GAClB,YAAY,CAcd;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,kBAAkB,GAAG,SAAS,CAK5F;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,SAAS,CAEpF;AAED,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,MAAM,EAAE,EAAE,UAAU,EAAE,MAAM,GAAG,SAAS,CAEzF"}
|