@milaboratories/pframes-rs-node 1.0.57 → 1.0.63
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/README.md +17 -5
- package/export/addon-def.ts +0 -1
- package/export/dump.ts +13 -14
- package/export/export.ts +10 -10
- package/export/index.ts +2 -1
- package/export/wrapper.ts +143 -132
- package/export_dist/addon-def.d.ts +1 -1
- package/export_dist/addon-def.d.ts.map +1 -1
- package/export_dist/addon.cjs +24 -0
- package/export_dist/addon.cjs.map +1 -0
- package/export_dist/addon.d.ts +1 -1
- package/export_dist/addon.js +21 -0
- package/export_dist/addon.js.map +1 -0
- package/export_dist/dump.cjs +133 -0
- package/export_dist/dump.cjs.map +1 -0
- package/export_dist/dump.d.ts +1 -1
- package/export_dist/dump.d.ts.map +1 -1
- package/export_dist/dump.js +125 -0
- package/export_dist/dump.js.map +1 -0
- package/export_dist/export.cjs +15 -0
- package/export_dist/export.cjs.map +1 -0
- package/export_dist/export.d.ts +2 -6
- package/export_dist/export.d.ts.map +1 -1
- package/export_dist/export.js +13 -0
- package/export_dist/export.js.map +1 -0
- package/export_dist/index.cjs +13 -0
- package/export_dist/index.cjs.map +1 -0
- package/export_dist/index.d.ts +2 -1
- package/export_dist/index.d.ts.map +1 -1
- package/export_dist/index.js +2 -21
- package/export_dist/index.js.map +1 -1
- package/export_dist/wrapper.cjs +511 -0
- package/export_dist/wrapper.cjs.map +1 -0
- package/export_dist/wrapper.d.ts +32 -10
- package/export_dist/wrapper.d.ts.map +1 -1
- package/export_dist/wrapper.js +508 -0
- package/export_dist/wrapper.js.map +1 -0
- package/package.json +34 -33
- package/export_dist/index.mjs +0 -765
- package/export_dist/index.mjs.map +0 -1
package/export_dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../export/addon.ts","../export/dump.ts","../export/wrapper.ts","../export/export.ts"],"sourcesContent":["import { createRequire } from 'node:module';\nimport { dirname, resolve } from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport gyp from '@mapbox/node-pre-gyp';\nimport type { AddonSymbol } from './addon-def';\n\nconst nodeFileUrl = import.meta.url;\nconst nodeDirname = dirname(fileURLToPath(nodeFileUrl));\nconst nodeRequire = createRequire(nodeFileUrl);\n\nconst { find: findAddon } = gyp;\n\n// Pre-gyp reads binary section from package.json and constructs a path to addon\n// https://github.com/mapbox/node-pre-gyp/blob/a541932680034f5de9e7365ef8d9a0d7a11cc1a9/lib/package.js#L35\n// Require calls dlopen under the hood\n// https://nodejs.org/api/process.html#processdlopenmodule-filename-flags\n// DLOpen then searches for napi_register_module_v1 in addon export table\n// https://github.com/search?q=repo%3Anodejs%2Fnode%20NAPI_MODULE_INITIALIZER&type=code\n// And neon exports napi_register_module_v1 from #[neon::main]\n// https://github.com/neon-bindings/neon/blob/b1728fa21e968ccde9611ac9955cf6d638be16e6/crates/neon/src/context/internal.rs#L76\nconst AddonSymbol = nodeRequire(\n findAddon(resolve(nodeDirname, '../package.json'))\n) as AddonSymbol;\n\nexport { AddonSymbol };\n","import { createHash } from 'node:crypto';\nimport fs from 'node:fs';\nimport path from 'node:path';\nimport { Readable, Writable } from 'node:stream';\nimport type { PFrameInternal } from '@milaboratories/pl-model-middle-layer';\nimport {\n PObjectId,\n PTableColumnId,\n PTableRecordFilter,\n PTableSorting,\n UniqueValuesRequest\n} from '@milaboratories/pl-model-common';\n\nasync function fileExists(path: string): Promise<boolean> {\n try {\n await fs.promises.access(path);\n return true;\n } catch {\n return false;\n }\n}\n\nasync function ensureDirExists(fileOrDir: string): Promise<void> {\n if (!(await fileExists(fileOrDir))) {\n await fs.promises.mkdir(fileOrDir, { recursive: true });\n }\n}\n\nasync function writeFile(\n filePath: string,\n data: string | Uint8Array\n): Promise<void> {\n const tempPath = `${filePath}.tmp`;\n if (await fileExists(tempPath)) {\n await fs.promises.rm(tempPath, { recursive: true });\n }\n\n const buffer = typeof data === 'string' ? Buffer.from(data, 'utf8') : data;\n const source = Readable.from(buffer);\n const destination = fs.createWriteStream(tempPath, { flags: 'wx' });\n await Readable.toWeb(source).pipeTo(Writable.toWeb(destination));\n\n await fs.promises.rename(tempPath, filePath);\n}\n\nexport function hashColumnId(columnId: PObjectId): PObjectId {\n return createHash('sha256').update(columnId).digest('hex') as PObjectId;\n}\n\nexport function hashTableColumnId(tableId: PTableColumnId): PTableColumnId {\n if (tableId.type === 'column') {\n return {\n ...tableId,\n id: hashColumnId(tableId.id)\n };\n }\n return tableId;\n}\n\nexport function hashFilterColumnId(\n filter: PTableRecordFilter\n): PTableRecordFilter {\n return {\n ...filter,\n column: hashTableColumnId(filter.column)\n };\n}\n\nexport function hashUniqueValuesRequestColumnId(\n request: UniqueValuesRequest\n): UniqueValuesRequest {\n return {\n ...request,\n columnId: hashColumnId(request.columnId),\n filters: request.filters.map(hashFilterColumnId)\n };\n}\n\nexport function hashSortingColumnId(sorting: PTableSorting): PTableSorting {\n return {\n ...sorting,\n column: hashTableColumnId(sorting.column)\n };\n}\n\nfunction hashJoinEntryColumnId(\n entry: PFrameInternal.JoinEntryV3\n): PFrameInternal.JoinEntryV3 {\n const type = entry.type;\n switch (type) {\n case 'column':\n return {\n ...entry,\n columnId: hashColumnId(entry.columnId)\n };\n case 'slicedColumn':\n return {\n ...entry,\n columnId: hashColumnId(entry.columnId),\n newId: hashColumnId(entry.newId)\n };\n case 'inlineColumn':\n return {\n ...entry,\n newId: hashColumnId(entry.newId)\n };\n case 'inner':\n return {\n ...entry,\n entries: entry.entries.map(hashJoinEntryColumnId)\n };\n case 'full':\n return {\n ...entry,\n entries: entry.entries.map(hashJoinEntryColumnId)\n };\n case 'outer':\n return {\n ...entry,\n primary: hashJoinEntryColumnId(entry.primary),\n secondary: entry.secondary.map(hashJoinEntryColumnId)\n };\n default:\n throw new Error(`Unsupported join entry type: ${type}`);\n }\n}\n\nexport function hashCreateTableRequestColumnId(\n request: PFrameInternal.CreateTableRequestV3\n): PFrameInternal.CreateTableRequestV3 {\n return {\n ...request,\n src: hashJoinEntryColumnId(request.src),\n filters: request.filters.map(hashFilterColumnId)\n };\n}\n\nexport async function dump(\n relativePath: string[],\n data: { [key: string]: Object } | Uint8Array,\n logger?: PFrameInternal.Logger\n): Promise<void> {\n if (!process.env.MI_DUMP_PFRAMES_RS) return;\n try {\n const relativeUri = relativePath.map((part) => encodeURIComponent(part));\n const fileDir = path.join(\n process.env.MI_DUMP_PFRAMES_RS,\n ...relativeUri.slice(0, -1)\n );\n await ensureDirExists(fileDir);\n\n const filePath = path.join(process.env.MI_DUMP_PFRAMES_RS, ...relativeUri);\n const fileData = ArrayBuffer.isView(data)\n ? (data as Uint8Array)\n : JSON.stringify(data, null, 2);\n await writeFile(filePath, fileData);\n } catch (error: unknown) {\n logger?.('warn', `error while dumping PFrames data: ${error}`);\n }\n}\n","import humanizeDuration from 'humanize-duration';\nimport { ulid } from 'ulid';\nimport {\n AbortError,\n DataInfo,\n PColumnInfo,\n PColumnSpec,\n PFrameError,\n PObjectId,\n PTableColumnId,\n PTableColumnSpec,\n PTableRecordFilter,\n PTableShape,\n PTableSorting,\n PTableVector,\n TableRange,\n UniqueValuesRequest,\n UniqueValuesResponse,\n ensureError,\n isAbortError\n} from '@milaboratories/pl-model-common';\nimport type { PFrameInternal } from '@milaboratories/pl-model-middle-layer';\nimport type {\n FrameId,\n TableId,\n NodeFrameSymbol,\n NodeTableSymbol\n} from './addon-def';\nimport { AddonSymbol } from './addon';\nimport {\n dump,\n hashColumnId,\n hashTableColumnId,\n hashFilterColumnId,\n hashUniqueValuesRequestColumnId,\n hashSortingColumnId,\n hashCreateTableRequestColumnId\n} from './dump';\n\nexport class PFrame implements PFrameInternal.PFrameV9 {\n public readonly id: FrameId = ulid() as FrameId;\n private readonly frame: NodeFrameSymbol;\n\n static async pprofDump(): Promise<Uint8Array> {\n try {\n return await AddonSymbol.pprofDump();\n } catch (err: unknown) {\n throw new PFrameError(\n `PFrame pprofDump failed, ` + `error:\\n` + `${ensureError(err).message}`\n );\n }\n }\n\n constructor(\n spillPath: string,\n public readonly logger?: PFrameInternal.Logger\n ) {\n dump(\n [`${this.id}`, `${this.id}.json`],\n {\n timeStamp: Date.now(),\n requestType: 'create'\n },\n this.logger\n );\n\n try {\n this.frame = AddonSymbol.pFrameCreate(spillPath, logger);\n this.logger?.('info', `PFrame ${this.id} created`);\n } catch (err: unknown) {\n throw new PFrameError(\n `PFrame ${this.id} creation failed, ` +\n `logger: ${logger?.toString()}, ` +\n `error:\\n` +\n `${ensureError(err).message}`\n );\n }\n }\n\n addColumnSpec(columnId: PObjectId, columnSpec: PColumnSpec): void {\n const requestId = ulid();\n dump(\n [`${this.id}`, `${requestId}.json`],\n {\n timeStamp: Date.now(),\n requestType: 'addColumnSpec',\n requestData: {\n columnId: hashColumnId(columnId),\n columnSpec\n }\n },\n this.logger\n );\n\n dump(\n [`${this.id}`, `data`, `${hashColumnId(columnId)}.spec`],\n {\n ...columnSpec\n },\n this.logger\n );\n\n try {\n return AddonSymbol.pFrameAddColumnSpec(this.frame, columnId, columnSpec);\n } catch (err: unknown) {\n throw new PFrameError(\n `PFrame ${this.id} addColumnSpec request ${requestId} failed, ` +\n `columnId: ${JSON.stringify(columnId)}, ` +\n `columnSpec: ${JSON.stringify(columnSpec)}, ` +\n `error:\\n` +\n `${ensureError(err).message}`\n );\n }\n }\n\n setDataSource(dataSource: PFrameInternal.PFrameDataSource): void {\n const requestId = ulid();\n dump(\n [`${this.id}`, `${requestId}.json`],\n {\n timeStamp: Date.now(),\n requestType: 'setDataSource'\n },\n this.logger\n );\n\n const wrappedDataSource = {\n preloadBlob: async (\n blobIds: PFrameInternal.PFrameBlobId[]\n ): Promise<void> => {\n const requestId = ulid();\n dump(\n [`${this.id}`, `${requestId}.json`],\n {\n timeStamp: Date.now(),\n requestType: 'preloadBlob',\n requestData: {\n blobIds\n }\n },\n this.logger\n );\n\n this.logger?.(\n 'info',\n `PFrame ${this.id} preloadBlob started, blobIds: ${JSON.stringify(blobIds)}`\n );\n const t0 = performance.now();\n try {\n return await dataSource.preloadBlob(blobIds);\n } finally {\n const t1 = performance.now();\n this.logger?.(\n 'info',\n `PFrame ${this.id} preloadBlob finished, took ${humanizeDuration(Math.round(t1 - t0))} (${blobIds.length} blobs)`\n );\n }\n },\n resolveBlobContent: async (\n blobId: PFrameInternal.PFrameBlobId\n ): Promise<Uint8Array> => {\n const requestId = ulid();\n dump(\n [`${this.id}`, `${requestId}.json`],\n {\n timeStamp: Date.now(),\n requestType: 'resolveBlobContent',\n requestData: {\n blobId\n }\n },\n this.logger\n );\n\n const blob = await dataSource.resolveBlobContent(blobId);\n this.logger?.('info', `PFrame ${this.id} resolved blob ${blobId}`);\n dump([`${this.id}`, `data`, `${blobId}`], blob, this.logger);\n\n return blob;\n }\n };\n\n try {\n return AddonSymbol.pFrameSetDataSource(this.frame, wrappedDataSource);\n } catch (err: unknown) {\n throw new PFrameError(\n `PFrame ${this.id} setDataSource request ${requestId} failed, ` +\n `dataSource: ${dataSource.toString()}, ` +\n `error:\\n` +\n `${ensureError(err).message}`\n );\n }\n }\n\n setColumnData(\n columnId: PObjectId,\n dataInfo: PFrameInternal.DataInfo<PFrameInternal.PFrameBlobId>,\n ops?: {\n signal?: AbortSignal;\n }\n ): Promise<void> {\n const requestId = ulid();\n dump(\n [`${this.id}`, `${requestId}.json`],\n {\n timeStamp: Date.now(),\n requestType: 'setColumnData',\n requestData: {\n columnId: hashColumnId(columnId),\n dataInfo\n }\n },\n this.logger\n );\n\n dump(\n [`${this.id}`, `data`, `${hashColumnId(columnId)}.datainfo`],\n {\n ...dataInfo\n },\n this.logger\n );\n\n try {\n ops?.signal?.throwIfAborted();\n return AddonSymbol.pFrameSetColumnData(\n this.frame,\n columnId,\n dataInfo,\n ops?.signal\n );\n } catch (err: unknown) {\n throw new PFrameError(\n `PFrame ${this.id} setColumnData request ${requestId} failed, ` +\n `columnId: ${JSON.stringify(columnId)}, ` +\n `dataInfo: ${JSON.stringify(dataInfo)}, ` +\n `error:\\n` +\n `${ensureError(err).message}`\n );\n }\n }\n\n dispose(): void {\n const requestId = ulid();\n dump(\n [`${this.id}`, `${requestId}.json`],\n {\n timeStamp: Date.now(),\n requestType: 'dispose'\n },\n this.logger\n );\n\n try {\n AddonSymbol.pFrameDispose(this.frame);\n this.logger?.('info', `PFrame ${this.id} disposed`);\n } catch (err: unknown) {\n throw new PFrameError(\n `PFrame ${this.id} dispose request ${requestId} failed, ` +\n `error:\\n` +\n `${ensureError(err).message}`\n );\n }\n }\n\n [Symbol.dispose](): void {\n this.dispose();\n }\n\n async findColumns(\n request: PFrameInternal.FindColumnsRequest\n ): Promise<PFrameInternal.FindColumnsResponse> {\n const requestId = ulid();\n dump(\n [`${this.id}`, `${requestId}.json`],\n {\n timeStamp: Date.now(),\n requestType: 'findColumns',\n requestData: request\n },\n this.logger\n );\n\n const t0 = performance.now();\n try {\n return await AddonSymbol.pFrameFindColumns(this.frame, request);\n } catch (err: unknown) {\n throw new PFrameError(\n `PFrame ${this.id} findColumns request ${requestId} failed, ` +\n `request: ${JSON.stringify(request)}, ` +\n `error:\\n` +\n `${ensureError(err).message}`\n );\n } finally {\n const t1 = performance.now();\n this.logger?.(\n 'info',\n `PFrame ${this.id} findColumns request ${requestId} took ${humanizeDuration(Math.round(t1 - t0))}`\n );\n }\n }\n\n async deleteColumn(\n request: PFrameInternal.DeleteColumnFromColumnsRequest\n ): Promise<PFrameInternal.DeleteColumnFromColumnsResponse> {\n const requestId = ulid();\n dump(\n [`${this.id}`, `${requestId}.json`],\n {\n timeStamp: Date.now(),\n requestType: 'deleteColumn',\n requestData: request\n },\n this.logger\n );\n\n const t0 = performance.now();\n try {\n return await AddonSymbol.pFrameDeleteColumn(this.frame, request);\n } catch (err: unknown) {\n throw new PFrameError(\n `PFrame ${this.id} deleteColumn request ${requestId} failed, ` +\n `request: ${JSON.stringify(request)}, ` +\n `error:\\n` +\n `${ensureError(err).message}`\n );\n } finally {\n const t1 = performance.now();\n this.logger?.(\n 'info',\n `PFrame ${this.id} deleteColumn request ${requestId} took ${humanizeDuration(Math.round(t1 - t0))}`\n );\n }\n }\n\n async getColumnSpec(columnId: PObjectId): Promise<PColumnSpec> {\n const requestId = ulid();\n dump(\n [`${this.id}`, `${requestId}.json`],\n {\n timeStamp: Date.now(),\n requestType: 'getColumnSpec',\n requestData: {\n columnId: hashColumnId(columnId)\n }\n },\n this.logger\n );\n\n const t0 = performance.now();\n try {\n return await AddonSymbol.pFrameGetColumnSpec(this.frame, columnId);\n } catch (err: unknown) {\n throw new PFrameError(\n `PFrame ${this.id} getColumnSpec request ${requestId} failed, ` +\n `columnId: ${JSON.stringify(columnId)}, ` +\n `error:\\n` +\n `${ensureError(err).message}`\n );\n } finally {\n const t1 = performance.now();\n this.logger?.(\n 'info',\n `PFrame ${this.id} getColumnSpec request ${requestId} took ${humanizeDuration(Math.round(t1 - t0))}`\n );\n }\n }\n\n async listColumns(): Promise<PColumnInfo[]> {\n const requestId = ulid();\n dump(\n [`${this.id}`, `${requestId}.json`],\n {\n timeStamp: Date.now(),\n requestType: 'listColumns'\n },\n this.logger\n );\n\n const t0 = performance.now();\n try {\n return await AddonSymbol.pFrameListColumns(this.frame);\n } catch (err: unknown) {\n throw new PFrameError(\n `PFrame ${this.id} listColumns request ${requestId} failed, ` +\n `error:\\n` +\n `${ensureError(err).message}`\n );\n } finally {\n const t1 = performance.now();\n this.logger?.(\n 'info',\n `PFrame ${this.id} listColumns request ${requestId} took ${humanizeDuration(Math.round(t1 - t0))}`\n );\n }\n }\n\n createTable(\n request: PFrameInternal.CreateTableRequestV3\n ): PFrameInternal.PTableV6 {\n const requestId = ulid() as TableId;\n const dumpData = {\n timeStamp: Date.now(),\n requestType: 'createTable',\n requestData: hashCreateTableRequestColumnId(request)\n };\n dump([`${this.id}`, `${requestId}.json`], dumpData, this.logger);\n dump(\n [`${this.id}`, `${requestId}`, `${requestId}.json`],\n dumpData,\n this.logger\n );\n\n const t0 = performance.now();\n try {\n const boxed = AddonSymbol.pFrameCreateTable(\n this.frame,\n requestId,\n request\n );\n return new PTable(this, requestId, boxed);\n } catch (err: unknown) {\n throw new PFrameError(\n `PFrame ${this.id} createTable request ${requestId} failed, ` +\n `request: ${JSON.stringify(request)}, ` +\n `error:\\n` +\n `${ensureError(err).message}`\n );\n } finally {\n const t1 = performance.now();\n this.logger?.(\n 'info',\n `PFrame ${this.id} createTable request ${requestId} took ${humanizeDuration(Math.round(t1 - t0))}`\n );\n }\n }\n\n async getUniqueValues(\n request: UniqueValuesRequest,\n ops?: {\n signal?: AbortSignal;\n }\n ): Promise<UniqueValuesResponse> {\n const requestId = ulid() as TableId;\n dump(\n [`${this.id}`, `${requestId}.json`],\n {\n timeStamp: Date.now(),\n requestType: 'getUniqueValues',\n requestData: hashUniqueValuesRequestColumnId(request)\n },\n this.logger\n );\n\n this.logger?.(\n 'info',\n `PFrame ${this.id} getUniqueValues request ${requestId} started`\n );\n const t0 = performance.now();\n try {\n ops?.signal?.throwIfAborted();\n return await AddonSymbol.pFrameGetUniqueValues(\n this.frame,\n requestId,\n request,\n ops?.signal\n );\n } catch (err: unknown) {\n if (isAbortError(err)) {\n throw new AbortError(\n `PFrame ${this.id} getUniqueValues request ${requestId} cancelled`\n );\n }\n throw new PFrameError(\n `PFrame ${this.id} getUniqueValues request ${requestId} failed, ` +\n `request: ${JSON.stringify(request)}, ` +\n `error:\\n` +\n `${ensureError(err).message}`\n );\n } finally {\n const t1 = performance.now();\n this.logger?.(\n 'info',\n `PFrame ${this.id} getUniqueValues request ${requestId} finished, took ${humanizeDuration(Math.round(t1 - t0))}`\n );\n }\n }\n}\n\nclass PTable implements PFrameInternal.PTableV6 {\n constructor(\n private readonly frame: PFrame,\n public readonly id: string,\n private readonly table: NodeTableSymbol\n ) {\n this.frame.logger?.('info', `PTable ${this.id} created`);\n }\n\n getSpec(): PTableColumnSpec[] {\n const requestId = ulid();\n dump(\n [`${this.frame.id}`, `${this.id}`, `${requestId}.json`],\n {\n timeStamp: Date.now(),\n requestType: 'getSpec'\n },\n this.frame.logger\n );\n\n try {\n return AddonSymbol.pTableGetSpec(this.table);\n } catch (err: unknown) {\n throw new PFrameError(\n `PTable ${this.id} getSpec request ${requestId} failed, ` +\n `error:\\n` +\n `${ensureError(err).message}`\n );\n }\n }\n\n getColumnIndices(columnIds: PTableColumnId[]): number[] {\n const requestId = ulid();\n dump(\n [`${this.frame.id}`, `${this.id}`, `${requestId}.json`],\n {\n timeStamp: Date.now(),\n requestType: 'getColumnIndices',\n requestData: {\n columnIds: columnIds.map(hashTableColumnId)\n }\n },\n this.frame.logger\n );\n\n try {\n return AddonSymbol.pTableGetColumnIndices(this.table, columnIds);\n } catch (err: unknown) {\n throw new PFrameError(\n `PTable ${this.id} getColumnIndices request ${requestId} failed, ` +\n `columnIds: ${JSON.stringify(columnIds)}, ` +\n `error:\\n` +\n `${ensureError(err).message}`\n );\n }\n }\n\n async getFootprint(ops?: {\n withPredecessors?: boolean;\n signal?: AbortSignal;\n }): Promise<number> {\n const requestId = ulid();\n dump(\n [`${this.frame.id}`, `${this.id}`, `${requestId}.json`],\n {\n timeStamp: Date.now(),\n requestType: 'getFootprint'\n },\n this.frame.logger\n );\n\n this.frame.logger?.(\n 'info',\n `PTable ${this.id} getFootprint request ${requestId} started`\n );\n const t0 = performance.now();\n try {\n ops?.signal?.throwIfAborted();\n return await AddonSymbol.pTableGetFootprint(\n this.table,\n ops?.withPredecessors ?? false,\n ops?.signal\n );\n } catch (err: unknown) {\n if (isAbortError(err)) {\n throw new AbortError(\n `PTable ${this.id} getFootprint request ${requestId} cancelled`\n );\n }\n throw new PFrameError(\n `PTable ${this.id} getFootprint request ${requestId} failed, ` +\n `error:\\n` +\n `${ensureError(err).message}`\n );\n } finally {\n const t1 = performance.now();\n this.frame.logger?.(\n 'info',\n `PTable ${this.id} getFootprint request ${requestId} finished, took ${humanizeDuration(Math.round(t1 - t0))}`\n );\n }\n }\n\n async getShape(ops?: { signal?: AbortSignal }): Promise<PTableShape> {\n const requestId = ulid();\n dump(\n [`${this.frame.id}`, `${this.id}`, `${requestId}.json`],\n {\n timeStamp: Date.now(),\n requestType: 'getShape'\n },\n this.frame.logger\n );\n\n this.frame.logger?.(\n 'info',\n `PTable ${this.id} getShape request ${requestId} started`\n );\n const t0 = performance.now();\n try {\n ops?.signal?.throwIfAborted();\n return await AddonSymbol.pTableGetShape(this.table, ops?.signal);\n } catch (err: unknown) {\n if (isAbortError(err)) {\n throw new AbortError(\n `PTable ${this.id} getShape request ${requestId} cancelled`\n );\n }\n throw new PFrameError(\n `PTable ${this.id} getShape request ${requestId} failed, ` +\n `error:\\n` +\n `${ensureError(err).message}`\n );\n } finally {\n const t1 = performance.now();\n this.frame.logger?.(\n 'info',\n `PTable ${this.id} getShape request ${requestId} finished, took ${humanizeDuration(Math.round(t1 - t0))}`\n );\n }\n }\n\n async getData(\n columnIndices: number[],\n ops?: {\n range?: TableRange | undefined;\n signal?: AbortSignal | undefined;\n }\n ): Promise<PTableVector[]> {\n const requestId = ulid() as TableId;\n dump(\n [`${this.frame.id}`, `${this.id}`, `${requestId}.json`],\n {\n timeStamp: Date.now(),\n requestType: 'getData',\n requestData: {\n columnIndices,\n range: ops?.range ?? null\n }\n },\n this.frame.logger\n );\n\n this.frame.logger?.(\n 'info',\n `PTable ${this.id} getData request ${requestId} started`\n );\n let rowCount = 0;\n const t0 = performance.now();\n try {\n ops?.signal?.throwIfAborted();\n const result = await AddonSymbol.pTableGetData(\n this.table,\n requestId,\n columnIndices,\n ops?.range,\n ops?.signal\n );\n rowCount = result[0].data.length;\n return result;\n } catch (err: unknown) {\n if (isAbortError(err)) {\n throw new AbortError(\n `PTable ${this.id} getData request ${requestId} cancelled`\n );\n }\n throw new PFrameError(\n `PTable ${this.id} getData request ${requestId} failed, ` +\n `columnIndices: ${JSON.stringify(columnIndices)}, ` +\n `range: ${ops?.range ? JSON.stringify(ops.range) : undefined}, ` +\n `error:\\n` +\n `${ensureError(err).message}`\n );\n } finally {\n const t1 = performance.now();\n this.frame.logger?.(\n 'info',\n `PTable ${this.id} getData request ${requestId} finished, took ${humanizeDuration(Math.round(t1 - t0))} (${rowCount} rows)`\n );\n }\n }\n\n filter(request: PTableRecordFilter[]): PFrameInternal.PTableV6 {\n const requestId = ulid() as TableId;\n const dumpData = {\n timeStamp: Date.now(),\n table: this.id,\n requestType: 'filter',\n requestData: {\n filters: request.map(hashFilterColumnId)\n }\n };\n dump(\n [`${this.frame.id}`, `${requestId}.json`],\n dumpData,\n this.frame.logger\n );\n dump(\n [`${this.frame.id}`, `${requestId}`, `${requestId}.json`],\n dumpData,\n this.frame.logger\n );\n\n const t0 = performance.now();\n try {\n const boxed = AddonSymbol.pTableFilter(this.table, requestId, request);\n return new PTable(this.frame, requestId, boxed);\n } catch (err: unknown) {\n throw new PFrameError(\n `PTable ${this.id} filter request ${requestId} failed, ` +\n `request: ${JSON.stringify(request)}, ` +\n `error:\\n` +\n `${ensureError(err).message}`\n );\n } finally {\n const t1 = performance.now();\n this.frame.logger?.(\n 'info',\n `PTable ${this.id} filter request ${requestId} took ${humanizeDuration(Math.round(t1 - t0))}`\n );\n }\n }\n\n sort(request: PTableSorting[]): PFrameInternal.PTableV6 {\n const requestId = ulid() as TableId;\n const dumpData = {\n timeStamp: Date.now(),\n table: this.id,\n requestType: 'sort',\n requestData: request.map(hashSortingColumnId)\n };\n dump(\n [`${this.frame.id}`, `${requestId}.json`],\n dumpData,\n this.frame.logger\n );\n dump(\n [`${this.frame.id}`, `${requestId}`, `${requestId}.json`],\n dumpData,\n this.frame.logger\n );\n\n const t0 = performance.now();\n try {\n const boxed = AddonSymbol.pTableSort(this.table, requestId, request);\n return new PTable(this.frame, requestId, boxed);\n } catch (err: unknown) {\n throw new PFrameError(\n `PTable ${this.id} sort request ${requestId} failed, ` +\n `request: ${JSON.stringify(request)}, ` +\n `error:\\n` +\n `${ensureError(err).message}`\n );\n } finally {\n const t1 = performance.now();\n this.frame.logger?.(\n 'info',\n `PTable ${this.id} sort request ${requestId} took ${humanizeDuration(Math.round(t1 - t0))}`\n );\n }\n }\n\n dispose() {\n const requestId = ulid();\n dump(\n [`${this.frame.id}`, `${this.id}`, `${requestId}.json`],\n {\n timeStamp: Date.now(),\n requestType: 'dispose'\n },\n this.frame.logger\n );\n\n try {\n AddonSymbol.pTableDispose(this.table);\n this.frame.logger?.('info', `PTable ${this.id} disposed`);\n } catch (err: unknown) {\n throw new PFrameError(\n `PTable ${this.id} dispose request ${requestId} failed, ` +\n `error:\\n` +\n `${ensureError(err).message}`\n );\n }\n }\n\n [Symbol.dispose]() {\n this.dispose();\n }\n}\n","import type { PFrameInternal } from '@milaboratories/pl-model-middle-layer';\nimport { PFrame as PFrameImpl } from './wrapper';\n\nexport type PFrame = {\n new (\n spillPath: string,\n logger?: PFrameInternal.Logger\n ): PFrameInternal.PFrameV9;\n\n pprofDump: () => Promise<Uint8Array>;\n};\n\nexport const PFrame: PFrame = PFrameImpl;\n"],"names":["nodeFileUrl","_documentCurrentScript","nodeDirname","dirname","fileURLToPath","nodeRequire","createRequire","findAddon","gyp","AddonSymbol","resolve","fileExists","path","fs","ensureDirExists","fileOrDir","writeFile","filePath","data","tempPath","buffer","source","Readable","destination","Writable","hashColumnId","columnId","createHash","hashTableColumnId","tableId","hashFilterColumnId","filter","hashUniqueValuesRequestColumnId","request","hashSortingColumnId","sorting","hashJoinEntryColumnId","entry","type","hashCreateTableRequestColumnId","dump","relativePath","logger","relativeUri","part","fileDir","fileData","error","PFrame$1","spillPath","__publicField","ulid","_a","err","PFrameError","ensureError","columnSpec","requestId","dataSource","wrappedDataSource","blobIds","t0","t1","_b","humanizeDuration","blobId","blob","dataInfo","ops","dumpData","boxed","PTable","isAbortError","AbortError","_c","frame","id","table","columnIds","_e","_d","columnIndices","rowCount","result","PFrame","PFrameImpl"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
|
|
@@ -0,0 +1,511 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var humanizeDuration = require('humanize-duration');
|
|
4
|
+
var ulid = require('ulid');
|
|
5
|
+
var plModelCommon = require('@milaboratories/pl-model-common');
|
|
6
|
+
var addon = require('./addon.cjs');
|
|
7
|
+
var dump = require('./dump.cjs');
|
|
8
|
+
|
|
9
|
+
async function pprofDump() {
|
|
10
|
+
try {
|
|
11
|
+
return await addon.AddonSymbol.pprofDump();
|
|
12
|
+
}
|
|
13
|
+
catch (err) {
|
|
14
|
+
throw new plModelCommon.PFrameError(`PFrame pprofDump failed, ` + `error:\n` + `${plModelCommon.ensureError(err)}`);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
class PFrame {
|
|
18
|
+
#frame;
|
|
19
|
+
#id = ulid.ulid();
|
|
20
|
+
get id() {
|
|
21
|
+
return this.#id;
|
|
22
|
+
}
|
|
23
|
+
#logger;
|
|
24
|
+
constructor(options) {
|
|
25
|
+
this.#logger = options.logger ?? (() => { });
|
|
26
|
+
dump.dump([`${this.id}`, `${this.id}.json`], {
|
|
27
|
+
timeStamp: Date.now(),
|
|
28
|
+
requestType: 'create'
|
|
29
|
+
}, this.#logger);
|
|
30
|
+
try {
|
|
31
|
+
this.#frame = addon.AddonSymbol.pFrameCreate(options.spillPath, options.logger);
|
|
32
|
+
this.#logger('info', `PFrame ${this.id} created`);
|
|
33
|
+
}
|
|
34
|
+
catch (err) {
|
|
35
|
+
throw new plModelCommon.PFrameError(`PFrame ${this.id} creation failed, ` +
|
|
36
|
+
`logger: ${this.#logger?.toString()}, ` +
|
|
37
|
+
`error:\n` +
|
|
38
|
+
`${plModelCommon.ensureError(err)}`);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
addColumnSpec(columnId, columnSpec) {
|
|
42
|
+
const requestId = ulid.ulid();
|
|
43
|
+
dump.dump([`${this.id}`, `${requestId}.json`], {
|
|
44
|
+
timeStamp: Date.now(),
|
|
45
|
+
requestType: 'addColumnSpec',
|
|
46
|
+
requestData: {
|
|
47
|
+
columnId: dump.hashColumnId(columnId),
|
|
48
|
+
columnSpec
|
|
49
|
+
}
|
|
50
|
+
}, this.#logger);
|
|
51
|
+
dump.dump([`${this.id}`, `data`, `${dump.hashColumnId(columnId)}.spec`], {
|
|
52
|
+
...columnSpec
|
|
53
|
+
}, this.#logger);
|
|
54
|
+
try {
|
|
55
|
+
return addon.AddonSymbol.pFrameAddColumnSpec(this.#frame, columnId, columnSpec);
|
|
56
|
+
}
|
|
57
|
+
catch (err) {
|
|
58
|
+
throw new plModelCommon.PFrameError(`PFrame ${this.id} addColumnSpec request ${requestId} failed, ` +
|
|
59
|
+
`columnId: ${JSON.stringify(columnId)}, ` +
|
|
60
|
+
`columnSpec: ${JSON.stringify(columnSpec)}, ` +
|
|
61
|
+
`error:\n` +
|
|
62
|
+
`${plModelCommon.ensureError(err)}`);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
setDataSource(dataSource) {
|
|
66
|
+
const requestId = ulid.ulid();
|
|
67
|
+
dump.dump([`${this.id}`, `${requestId}.json`], {
|
|
68
|
+
timeStamp: Date.now(),
|
|
69
|
+
requestType: 'setDataSource'
|
|
70
|
+
}, this.#logger);
|
|
71
|
+
const wrappedDataSource = {
|
|
72
|
+
preloadBlob: async (blobIds) => {
|
|
73
|
+
const requestId = ulid.ulid();
|
|
74
|
+
dump.dump([`${this.id}`, `${requestId}.json`], {
|
|
75
|
+
timeStamp: Date.now(),
|
|
76
|
+
requestType: 'preloadBlob',
|
|
77
|
+
requestData: {
|
|
78
|
+
blobIds
|
|
79
|
+
}
|
|
80
|
+
}, this.#logger);
|
|
81
|
+
this.#logger('info', `PFrame ${this.id} preloadBlob started, blobIds: ${JSON.stringify(blobIds)}`);
|
|
82
|
+
const t0 = performance.now();
|
|
83
|
+
try {
|
|
84
|
+
return await dataSource.preloadBlob(blobIds);
|
|
85
|
+
}
|
|
86
|
+
finally {
|
|
87
|
+
const t1 = performance.now();
|
|
88
|
+
this.#logger('info', `PFrame ${this.id} preloadBlob finished, took ${humanizeDuration(Math.round(t1 - t0))} (${blobIds.length} blobs)`);
|
|
89
|
+
}
|
|
90
|
+
},
|
|
91
|
+
resolveBlobContent: async (blobId) => {
|
|
92
|
+
const requestId = ulid.ulid();
|
|
93
|
+
dump.dump([`${this.id}`, `${requestId}.json`], {
|
|
94
|
+
timeStamp: Date.now(),
|
|
95
|
+
requestType: 'resolveBlobContent',
|
|
96
|
+
requestData: {
|
|
97
|
+
blobId
|
|
98
|
+
}
|
|
99
|
+
}, this.#logger);
|
|
100
|
+
const blob = await dataSource.resolveBlobContent(blobId);
|
|
101
|
+
this.#logger('info', `PFrame ${this.id} resolved blob ${blobId}`);
|
|
102
|
+
dump.dump([`${this.id}`, `data`, `${blobId}`], blob, this.#logger);
|
|
103
|
+
return blob;
|
|
104
|
+
}
|
|
105
|
+
};
|
|
106
|
+
try {
|
|
107
|
+
return addon.AddonSymbol.pFrameSetDataSource(this.#frame, wrappedDataSource);
|
|
108
|
+
}
|
|
109
|
+
catch (err) {
|
|
110
|
+
throw new plModelCommon.PFrameError(`PFrame ${this.id} setDataSource request ${requestId} failed, ` +
|
|
111
|
+
`dataSource: ${dataSource.toString()}, ` +
|
|
112
|
+
`error:\n` +
|
|
113
|
+
`${plModelCommon.ensureError(err)}`);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
setColumnData(columnId, dataInfo, ops) {
|
|
117
|
+
const requestId = ulid.ulid();
|
|
118
|
+
dump.dump([`${this.id}`, `${requestId}.json`], {
|
|
119
|
+
timeStamp: Date.now(),
|
|
120
|
+
requestType: 'setColumnData',
|
|
121
|
+
requestData: {
|
|
122
|
+
columnId: dump.hashColumnId(columnId),
|
|
123
|
+
dataInfo
|
|
124
|
+
}
|
|
125
|
+
}, this.#logger);
|
|
126
|
+
dump.dump([`${this.id}`, `data`, `${dump.hashColumnId(columnId)}.datainfo`], {
|
|
127
|
+
...dataInfo
|
|
128
|
+
}, this.#logger);
|
|
129
|
+
try {
|
|
130
|
+
ops?.signal?.throwIfAborted();
|
|
131
|
+
return addon.AddonSymbol.pFrameSetColumnData(this.#frame, columnId, dataInfo, ops?.signal);
|
|
132
|
+
}
|
|
133
|
+
catch (err) {
|
|
134
|
+
throw new plModelCommon.PFrameError(`PFrame ${this.id} setColumnData request ${requestId} failed, ` +
|
|
135
|
+
`columnId: ${JSON.stringify(columnId)}, ` +
|
|
136
|
+
`dataInfo: ${JSON.stringify(dataInfo)}, ` +
|
|
137
|
+
`error:\n` +
|
|
138
|
+
`${plModelCommon.ensureError(err)}`);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
dispose() {
|
|
142
|
+
const requestId = ulid.ulid();
|
|
143
|
+
dump.dump([`${this.id}`, `${requestId}.json`], {
|
|
144
|
+
timeStamp: Date.now(),
|
|
145
|
+
requestType: 'dispose'
|
|
146
|
+
}, this.#logger);
|
|
147
|
+
try {
|
|
148
|
+
addon.AddonSymbol.pFrameDispose(this.#frame);
|
|
149
|
+
this.#logger('info', `PFrame ${this.id} disposed`);
|
|
150
|
+
}
|
|
151
|
+
catch (err) {
|
|
152
|
+
throw new plModelCommon.PFrameError(`PFrame ${this.id} dispose request ${requestId} failed, ` +
|
|
153
|
+
`error:\n` +
|
|
154
|
+
`${plModelCommon.ensureError(err)}`);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
[Symbol.dispose]() {
|
|
158
|
+
this.dispose();
|
|
159
|
+
}
|
|
160
|
+
async findColumns(request) {
|
|
161
|
+
const requestId = ulid.ulid();
|
|
162
|
+
dump.dump([`${this.id}`, `${requestId}.json`], {
|
|
163
|
+
timeStamp: Date.now(),
|
|
164
|
+
requestType: 'findColumns',
|
|
165
|
+
requestData: request
|
|
166
|
+
}, this.#logger);
|
|
167
|
+
const t0 = performance.now();
|
|
168
|
+
try {
|
|
169
|
+
return await addon.AddonSymbol.pFrameFindColumns(this.#frame, request);
|
|
170
|
+
}
|
|
171
|
+
catch (err) {
|
|
172
|
+
throw new plModelCommon.PFrameError(`PFrame ${this.id} findColumns request ${requestId} failed, ` +
|
|
173
|
+
`request: ${JSON.stringify(request)}, ` +
|
|
174
|
+
`error:\n` +
|
|
175
|
+
`${plModelCommon.ensureError(err)}`);
|
|
176
|
+
}
|
|
177
|
+
finally {
|
|
178
|
+
const t1 = performance.now();
|
|
179
|
+
this.#logger('info', `PFrame ${this.id} findColumns request ${requestId} took ${humanizeDuration(Math.round(t1 - t0))}`);
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
async deleteColumn(request) {
|
|
183
|
+
const requestId = ulid.ulid();
|
|
184
|
+
dump.dump([`${this.id}`, `${requestId}.json`], {
|
|
185
|
+
timeStamp: Date.now(),
|
|
186
|
+
requestType: 'deleteColumn',
|
|
187
|
+
requestData: request
|
|
188
|
+
}, this.#logger);
|
|
189
|
+
const t0 = performance.now();
|
|
190
|
+
try {
|
|
191
|
+
return await addon.AddonSymbol.pFrameDeleteColumn(this.#frame, request);
|
|
192
|
+
}
|
|
193
|
+
catch (err) {
|
|
194
|
+
throw new plModelCommon.PFrameError(`PFrame ${this.id} deleteColumn request ${requestId} failed, ` +
|
|
195
|
+
`request: ${JSON.stringify(request)}, ` +
|
|
196
|
+
`error:\n` +
|
|
197
|
+
`${plModelCommon.ensureError(err)}`);
|
|
198
|
+
}
|
|
199
|
+
finally {
|
|
200
|
+
const t1 = performance.now();
|
|
201
|
+
this.#logger('info', `PFrame ${this.id} deleteColumn request ${requestId} took ${humanizeDuration(Math.round(t1 - t0))}`);
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
async getColumnSpec(columnId) {
|
|
205
|
+
const requestId = ulid.ulid();
|
|
206
|
+
dump.dump([`${this.id}`, `${requestId}.json`], {
|
|
207
|
+
timeStamp: Date.now(),
|
|
208
|
+
requestType: 'getColumnSpec',
|
|
209
|
+
requestData: {
|
|
210
|
+
columnId: dump.hashColumnId(columnId)
|
|
211
|
+
}
|
|
212
|
+
}, this.#logger);
|
|
213
|
+
const t0 = performance.now();
|
|
214
|
+
try {
|
|
215
|
+
return await addon.AddonSymbol.pFrameGetColumnSpec(this.#frame, columnId);
|
|
216
|
+
}
|
|
217
|
+
catch (err) {
|
|
218
|
+
throw new plModelCommon.PFrameError(`PFrame ${this.id} getColumnSpec request ${requestId} failed, ` +
|
|
219
|
+
`columnId: ${JSON.stringify(columnId)}, ` +
|
|
220
|
+
`error:\n` +
|
|
221
|
+
`${plModelCommon.ensureError(err)}`);
|
|
222
|
+
}
|
|
223
|
+
finally {
|
|
224
|
+
const t1 = performance.now();
|
|
225
|
+
this.#logger('info', `PFrame ${this.id} getColumnSpec request ${requestId} took ${humanizeDuration(Math.round(t1 - t0))}`);
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
async listColumns() {
|
|
229
|
+
const requestId = ulid.ulid();
|
|
230
|
+
dump.dump([`${this.id}`, `${requestId}.json`], {
|
|
231
|
+
timeStamp: Date.now(),
|
|
232
|
+
requestType: 'listColumns'
|
|
233
|
+
}, this.#logger);
|
|
234
|
+
const t0 = performance.now();
|
|
235
|
+
try {
|
|
236
|
+
return await addon.AddonSymbol.pFrameListColumns(this.#frame);
|
|
237
|
+
}
|
|
238
|
+
catch (err) {
|
|
239
|
+
throw new plModelCommon.PFrameError(`PFrame ${this.id} listColumns request ${requestId} failed, ` +
|
|
240
|
+
`error:\n` +
|
|
241
|
+
`${plModelCommon.ensureError(err)}`);
|
|
242
|
+
}
|
|
243
|
+
finally {
|
|
244
|
+
const t1 = performance.now();
|
|
245
|
+
this.#logger('info', `PFrame ${this.id} listColumns request ${requestId} took ${humanizeDuration(Math.round(t1 - t0))}`);
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
createTable(request) {
|
|
249
|
+
const requestId = ulid.ulid();
|
|
250
|
+
const dumpData = {
|
|
251
|
+
timeStamp: Date.now(),
|
|
252
|
+
requestType: 'createTable',
|
|
253
|
+
requestData: dump.hashCreateTableRequestColumnId(request)
|
|
254
|
+
};
|
|
255
|
+
dump.dump([`${this.id}`, `${requestId}.json`], dumpData, this.#logger);
|
|
256
|
+
dump.dump([`${this.id}`, `${requestId}`, `${requestId}.json`], dumpData, this.#logger);
|
|
257
|
+
const t0 = performance.now();
|
|
258
|
+
try {
|
|
259
|
+
const boxed = addon.AddonSymbol.pFrameCreateTable(this.#frame, requestId, request);
|
|
260
|
+
return new PTable(this, requestId, boxed, this.#logger);
|
|
261
|
+
}
|
|
262
|
+
catch (err) {
|
|
263
|
+
throw new plModelCommon.PFrameError(`PFrame ${this.id} createTable request ${requestId} failed, ` +
|
|
264
|
+
`request: ${JSON.stringify(request)}, ` +
|
|
265
|
+
`error:\n` +
|
|
266
|
+
`${plModelCommon.ensureError(err)}`);
|
|
267
|
+
}
|
|
268
|
+
finally {
|
|
269
|
+
const t1 = performance.now();
|
|
270
|
+
this.#logger('info', `PFrame ${this.id} createTable request ${requestId} took ${humanizeDuration(Math.round(t1 - t0))}`);
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
async getUniqueValues(request, ops) {
|
|
274
|
+
const requestId = ulid.ulid();
|
|
275
|
+
dump.dump([`${this.id}`, `${requestId}.json`], {
|
|
276
|
+
timeStamp: Date.now(),
|
|
277
|
+
requestType: 'getUniqueValues',
|
|
278
|
+
requestData: dump.hashUniqueValuesRequestColumnId(request)
|
|
279
|
+
}, this.#logger);
|
|
280
|
+
this.#logger('info', `PFrame ${this.id} getUniqueValues request ${requestId} started`);
|
|
281
|
+
const t0 = performance.now();
|
|
282
|
+
try {
|
|
283
|
+
ops?.signal?.throwIfAborted();
|
|
284
|
+
return await addon.AddonSymbol.pFrameGetUniqueValues(this.#frame, requestId, request, ops?.signal);
|
|
285
|
+
}
|
|
286
|
+
catch (err) {
|
|
287
|
+
if (plModelCommon.isAbortError(err)) {
|
|
288
|
+
throw new plModelCommon.AbortError(`PFrame ${this.id} getUniqueValues request ${requestId} cancelled`);
|
|
289
|
+
}
|
|
290
|
+
throw new plModelCommon.PFrameError(`PFrame ${this.id} getUniqueValues request ${requestId} failed, ` +
|
|
291
|
+
`request: ${JSON.stringify(request)}, ` +
|
|
292
|
+
`error:\n` +
|
|
293
|
+
`${plModelCommon.ensureError(err)}`);
|
|
294
|
+
}
|
|
295
|
+
finally {
|
|
296
|
+
const t1 = performance.now();
|
|
297
|
+
this.#logger('info', `PFrame ${this.id} getUniqueValues request ${requestId} finished, took ${humanizeDuration(Math.round(t1 - t0))}`);
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
class PTable {
|
|
302
|
+
#frame;
|
|
303
|
+
#table;
|
|
304
|
+
#id;
|
|
305
|
+
get id() {
|
|
306
|
+
return this.#id;
|
|
307
|
+
}
|
|
308
|
+
#logger;
|
|
309
|
+
constructor(frame, id, table, logger) {
|
|
310
|
+
this.#frame = frame;
|
|
311
|
+
this.#table = table;
|
|
312
|
+
this.#id = id;
|
|
313
|
+
this.#logger = logger;
|
|
314
|
+
this.#logger('info', `PTable ${this.id} created`);
|
|
315
|
+
}
|
|
316
|
+
getSpec() {
|
|
317
|
+
const requestId = ulid.ulid();
|
|
318
|
+
dump.dump([`${this.#frame.id}`, `${this.id}`, `${requestId}.json`], {
|
|
319
|
+
timeStamp: Date.now(),
|
|
320
|
+
requestType: 'getSpec'
|
|
321
|
+
}, this.#logger);
|
|
322
|
+
try {
|
|
323
|
+
return addon.AddonSymbol.pTableGetSpec(this.#table);
|
|
324
|
+
}
|
|
325
|
+
catch (err) {
|
|
326
|
+
throw new plModelCommon.PFrameError(`PTable ${this.id} getSpec request ${requestId} failed, ` +
|
|
327
|
+
`error:\n` +
|
|
328
|
+
`${plModelCommon.ensureError(err)}`);
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
getColumnIndices(columnIds) {
|
|
332
|
+
const requestId = ulid.ulid();
|
|
333
|
+
dump.dump([`${this.#frame.id}`, `${this.id}`, `${requestId}.json`], {
|
|
334
|
+
timeStamp: Date.now(),
|
|
335
|
+
requestType: 'getColumnIndices',
|
|
336
|
+
requestData: {
|
|
337
|
+
columnIds: columnIds.map(dump.hashTableColumnId)
|
|
338
|
+
}
|
|
339
|
+
}, this.#logger);
|
|
340
|
+
try {
|
|
341
|
+
return addon.AddonSymbol.pTableGetColumnIndices(this.#table, columnIds);
|
|
342
|
+
}
|
|
343
|
+
catch (err) {
|
|
344
|
+
throw new plModelCommon.PFrameError(`PTable ${this.id} getColumnIndices request ${requestId} failed, ` +
|
|
345
|
+
`columnIds: ${JSON.stringify(columnIds)}, ` +
|
|
346
|
+
`error:\n` +
|
|
347
|
+
`${plModelCommon.ensureError(err)}`);
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
async getFootprint(ops) {
|
|
351
|
+
const requestId = ulid.ulid();
|
|
352
|
+
dump.dump([`${this.#frame.id}`, `${this.id}`, `${requestId}.json`], {
|
|
353
|
+
timeStamp: Date.now(),
|
|
354
|
+
requestType: 'getFootprint'
|
|
355
|
+
}, this.#logger);
|
|
356
|
+
this.#logger('info', `PTable ${this.id} getFootprint request ${requestId} started`);
|
|
357
|
+
const t0 = performance.now();
|
|
358
|
+
try {
|
|
359
|
+
ops?.signal?.throwIfAborted();
|
|
360
|
+
return await addon.AddonSymbol.pTableGetFootprint(this.#table, ops?.withPredecessors ?? false, ops?.signal);
|
|
361
|
+
}
|
|
362
|
+
catch (err) {
|
|
363
|
+
if (plModelCommon.isAbortError(err)) {
|
|
364
|
+
throw new plModelCommon.AbortError(`PTable ${this.id} getFootprint request ${requestId} cancelled`);
|
|
365
|
+
}
|
|
366
|
+
throw new plModelCommon.PFrameError(`PTable ${this.id} getFootprint request ${requestId} failed, ` +
|
|
367
|
+
`error:\n` +
|
|
368
|
+
`${plModelCommon.ensureError(err)}`);
|
|
369
|
+
}
|
|
370
|
+
finally {
|
|
371
|
+
const t1 = performance.now();
|
|
372
|
+
this.#logger('info', `PTable ${this.id} getFootprint request ${requestId} finished, took ${humanizeDuration(Math.round(t1 - t0))}`);
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
async getShape(ops) {
|
|
376
|
+
const requestId = ulid.ulid();
|
|
377
|
+
dump.dump([`${this.#frame.id}`, `${this.id}`, `${requestId}.json`], {
|
|
378
|
+
timeStamp: Date.now(),
|
|
379
|
+
requestType: 'getShape'
|
|
380
|
+
}, this.#logger);
|
|
381
|
+
this.#logger('info', `PTable ${this.id} getShape request ${requestId} started`);
|
|
382
|
+
const t0 = performance.now();
|
|
383
|
+
try {
|
|
384
|
+
ops?.signal?.throwIfAborted();
|
|
385
|
+
return await addon.AddonSymbol.pTableGetShape(this.#table, ops?.signal);
|
|
386
|
+
}
|
|
387
|
+
catch (err) {
|
|
388
|
+
if (plModelCommon.isAbortError(err)) {
|
|
389
|
+
throw new plModelCommon.AbortError(`PTable ${this.id} getShape request ${requestId} cancelled`);
|
|
390
|
+
}
|
|
391
|
+
throw new plModelCommon.PFrameError(`PTable ${this.id} getShape request ${requestId} failed, ` +
|
|
392
|
+
`error:\n` +
|
|
393
|
+
`${plModelCommon.ensureError(err)}`);
|
|
394
|
+
}
|
|
395
|
+
finally {
|
|
396
|
+
const t1 = performance.now();
|
|
397
|
+
this.#logger('info', `PTable ${this.id} getShape request ${requestId} finished, took ${humanizeDuration(Math.round(t1 - t0))}`);
|
|
398
|
+
}
|
|
399
|
+
}
|
|
400
|
+
async getData(columnIndices, ops) {
|
|
401
|
+
const requestId = ulid.ulid();
|
|
402
|
+
dump.dump([`${this.#frame.id}`, `${this.id}`, `${requestId}.json`], {
|
|
403
|
+
timeStamp: Date.now(),
|
|
404
|
+
requestType: 'getData',
|
|
405
|
+
requestData: {
|
|
406
|
+
columnIndices,
|
|
407
|
+
range: ops?.range ?? null
|
|
408
|
+
}
|
|
409
|
+
}, this.#logger);
|
|
410
|
+
this.#logger('info', `PTable ${this.id} getData request ${requestId} started`);
|
|
411
|
+
let rowCount = 0;
|
|
412
|
+
const t0 = performance.now();
|
|
413
|
+
try {
|
|
414
|
+
ops?.signal?.throwIfAborted();
|
|
415
|
+
const result = await addon.AddonSymbol.pTableGetData(this.#table, requestId, columnIndices, ops?.range, ops?.signal);
|
|
416
|
+
rowCount = result[0].data.length;
|
|
417
|
+
return result;
|
|
418
|
+
}
|
|
419
|
+
catch (err) {
|
|
420
|
+
if (plModelCommon.isAbortError(err)) {
|
|
421
|
+
throw new plModelCommon.AbortError(`PTable ${this.id} getData request ${requestId} cancelled`);
|
|
422
|
+
}
|
|
423
|
+
throw new plModelCommon.PFrameError(`PTable ${this.id} getData request ${requestId} failed, ` +
|
|
424
|
+
`columnIndices: ${JSON.stringify(columnIndices)}, ` +
|
|
425
|
+
`range: ${ops?.range ? JSON.stringify(ops.range) : undefined}, ` +
|
|
426
|
+
`error:\n` +
|
|
427
|
+
`${plModelCommon.ensureError(err)}`);
|
|
428
|
+
}
|
|
429
|
+
finally {
|
|
430
|
+
const t1 = performance.now();
|
|
431
|
+
this.#logger('info', `PTable ${this.id} getData request ${requestId} finished, took ${humanizeDuration(Math.round(t1 - t0))} (${rowCount} rows)`);
|
|
432
|
+
}
|
|
433
|
+
}
|
|
434
|
+
filter(request) {
|
|
435
|
+
const requestId = ulid.ulid();
|
|
436
|
+
const dumpData = {
|
|
437
|
+
timeStamp: Date.now(),
|
|
438
|
+
table: this.id,
|
|
439
|
+
requestType: 'filter',
|
|
440
|
+
requestData: {
|
|
441
|
+
filters: request.map(dump.hashFilterColumnId)
|
|
442
|
+
}
|
|
443
|
+
};
|
|
444
|
+
dump.dump([`${this.#frame.id}`, `${requestId}.json`], dumpData, this.#logger);
|
|
445
|
+
dump.dump([`${this.#frame.id}`, `${requestId}`, `${requestId}.json`], dumpData, this.#logger);
|
|
446
|
+
const t0 = performance.now();
|
|
447
|
+
try {
|
|
448
|
+
const boxed = addon.AddonSymbol.pTableFilter(this.#table, requestId, request);
|
|
449
|
+
return new PTable(this.#frame, requestId, boxed, this.#logger);
|
|
450
|
+
}
|
|
451
|
+
catch (err) {
|
|
452
|
+
throw new plModelCommon.PFrameError(`PTable ${this.id} filter request ${requestId} failed, ` +
|
|
453
|
+
`request: ${JSON.stringify(request)}, ` +
|
|
454
|
+
`error:\n` +
|
|
455
|
+
`${plModelCommon.ensureError(err)}`);
|
|
456
|
+
}
|
|
457
|
+
finally {
|
|
458
|
+
const t1 = performance.now();
|
|
459
|
+
this.#logger('info', `PTable ${this.id} filter request ${requestId} took ${humanizeDuration(Math.round(t1 - t0))}`);
|
|
460
|
+
}
|
|
461
|
+
}
|
|
462
|
+
sort(request) {
|
|
463
|
+
const requestId = ulid.ulid();
|
|
464
|
+
const dumpData = {
|
|
465
|
+
timeStamp: Date.now(),
|
|
466
|
+
table: this.id,
|
|
467
|
+
requestType: 'sort',
|
|
468
|
+
requestData: request.map(dump.hashSortingColumnId)
|
|
469
|
+
};
|
|
470
|
+
dump.dump([`${this.#frame.id}`, `${requestId}.json`], dumpData, this.#logger);
|
|
471
|
+
dump.dump([`${this.#frame.id}`, `${requestId}`, `${requestId}.json`], dumpData, this.#logger);
|
|
472
|
+
const t0 = performance.now();
|
|
473
|
+
try {
|
|
474
|
+
const boxed = addon.AddonSymbol.pTableSort(this.#table, requestId, request);
|
|
475
|
+
return new PTable(this.#frame, requestId, boxed, this.#logger);
|
|
476
|
+
}
|
|
477
|
+
catch (err) {
|
|
478
|
+
throw new plModelCommon.PFrameError(`PTable ${this.id} sort request ${requestId} failed, ` +
|
|
479
|
+
`request: ${JSON.stringify(request)}, ` +
|
|
480
|
+
`error:\n` +
|
|
481
|
+
`${plModelCommon.ensureError(err)}`);
|
|
482
|
+
}
|
|
483
|
+
finally {
|
|
484
|
+
const t1 = performance.now();
|
|
485
|
+
this.#logger('info', `PTable ${this.id} sort request ${requestId} took ${humanizeDuration(Math.round(t1 - t0))}`);
|
|
486
|
+
}
|
|
487
|
+
}
|
|
488
|
+
dispose() {
|
|
489
|
+
const requestId = ulid.ulid();
|
|
490
|
+
dump.dump([`${this.#frame.id}`, `${this.id}`, `${requestId}.json`], {
|
|
491
|
+
timeStamp: Date.now(),
|
|
492
|
+
requestType: 'dispose'
|
|
493
|
+
}, this.#logger);
|
|
494
|
+
try {
|
|
495
|
+
addon.AddonSymbol.pTableDispose(this.#table);
|
|
496
|
+
this.#logger('info', `PTable ${this.id} disposed`);
|
|
497
|
+
}
|
|
498
|
+
catch (err) {
|
|
499
|
+
throw new plModelCommon.PFrameError(`PTable ${this.id} dispose request ${requestId} failed, ` +
|
|
500
|
+
`error:\n` +
|
|
501
|
+
`${plModelCommon.ensureError(err)}`);
|
|
502
|
+
}
|
|
503
|
+
}
|
|
504
|
+
[Symbol.dispose]() {
|
|
505
|
+
this.dispose();
|
|
506
|
+
}
|
|
507
|
+
}
|
|
508
|
+
|
|
509
|
+
exports.PFrame = PFrame;
|
|
510
|
+
exports.pprofDump = pprofDump;
|
|
511
|
+
//# sourceMappingURL=wrapper.cjs.map
|