From 6bcda51ea5e082e3941991a49c685c5f1f825ca8 Mon Sep 17 00:00:00 2001 From: Alexandr Date: Wed, 19 Aug 2026 21:59:52 +0200 Subject: [PATCH 1/6] chore: upgrade the SDK and scaffold the kind package `structure refresh` output plus the kind/ workspace member it needs to discover: block-tools 2.12.7 -> 2.14.3, model 1.80.2 -> 1.82.0, ui-vue 1.80.4 -> 1.82.1, tengo-builder 4.0.18 -> 4.0.23, workflow-tengo 6.7.2 -> 6.8.2, plus ts-builder, ts-configs, package-builder, test and helpers. Drops the pnpm.overrides block that pinned ten SDK packages to local monorepo tarballs: @platforma-sdk/block-kind is published now, and those file: paths do not exist in CI. Keeps --unstable on the facade's prepublishOnly. The structurer strips that flag on refresh, so it is re-added deliberately and will show up as drift in `structure check`. --- .github/workflows/build.yaml | 7 +- .github/workflows/mark-stable.yaml | 2 +- block/package.json | 3 +- kind/.oxfmtrc.json | 4 + kind/.oxlintrc.json | 3 + kind/package.json | 39 ++ kind/tsconfig.json | 10 + model/package.json | 1 + pnpm-lock.yaml | 725 +++++++++++++++-------------- pnpm-workspace.yaml | 24 +- 10 files changed, 456 insertions(+), 362 deletions(-) create mode 100644 kind/.oxfmtrc.json create mode 100644 kind/.oxlintrc.json create mode 100644 kind/package.json create mode 100644 kind/tsconfig.json diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index 0750d46..4371bb1 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -24,7 +24,7 @@ jobs: with: app-name: 'Block: Rarefaction' app-name-slug: 'block-rarefaction' - node-version: '20.x' + node-version: '22.x' gha-runner-label: hz-ubuntu-dind build-script-name: 'build:dev-local' build-before-publish-script-name: 'build:release' @@ -39,6 +39,11 @@ jobs: package-path: 'block' create-tag: 'true' + # Require the published `block` package to be bumped by a changeset on + # PRs (empty changeset or the `skip-changelog` label waives it). Needs + # the input to exist on the pinned `@v4` reusable workflow. + require-package-path-bump: true + npmrc-config: | { "registries": { diff --git a/.github/workflows/mark-stable.yaml b/.github/workflows/mark-stable.yaml index 8932c44..19d2a37 100644 --- a/.github/workflows/mark-stable.yaml +++ b/.github/workflows/mark-stable.yaml @@ -15,7 +15,7 @@ jobs: uses: milaboratory/github-ci/.github/workflows/block-mark-stable.yaml@v4 with: app-name: 'Block: Rarefaction - Mark Stable' - node-version: '20.x' + node-version: '22.x' npmrc-config: | { "registries": { diff --git a/block/package.json b/block/package.json index 831efd2..d7f9d0b 100644 --- a/block/package.json +++ b/block/package.json @@ -18,7 +18,7 @@ }, "scripts": { "build": "ts-builder build --target block-facade && block-tools pack", - "prepublishOnly": "block-tools publish -r s3://milab-euce1-prod-pkgs-s3-block-registry/pub/releases/?region=eu-central-1 --registry-serve-url https://blocks.pl-open.science", + "prepublishOnly": "block-tools publish --unstable -r s3://milab-euce1-prod-pkgs-s3-block-registry/pub/releases/?region=eu-central-1 --registry-serve-url https://blocks.pl-open.science", "do-pack": "shx rm -f package.tgz && pnpm pack && shx mv *.tgz package.tgz", "check": "ts-builder type-check --target block-facade" }, @@ -26,6 +26,7 @@ "devDependencies": { "@milaboratories/ts-builder": "catalog:", "@milaboratories/ts-configs": "catalog:", + "@platforma-open/milaboratories.rarefaction.kind": "workspace:*", "@platforma-open/milaboratories.rarefaction.model": "workspace:*", "@platforma-open/milaboratories.rarefaction.ui": "workspace:*", "@platforma-open/milaboratories.rarefaction.workflow": "workspace:*", diff --git a/kind/.oxfmtrc.json b/kind/.oxfmtrc.json new file mode 100644 index 0000000..7eff5e7 --- /dev/null +++ b/kind/.oxfmtrc.json @@ -0,0 +1,4 @@ +{ + "extends": ["node_modules/@milaboratories/ts-builder/configs/oxfmt.json"], + "ignorePatterns": ["dist", "coverage", "CHANGELOG.md"] +} diff --git a/kind/.oxlintrc.json b/kind/.oxlintrc.json new file mode 100644 index 0000000..b1a1390 --- /dev/null +++ b/kind/.oxlintrc.json @@ -0,0 +1,3 @@ +{ + "extends": ["node_modules/@milaboratories/ts-builder/dist/configs/oxlint-node.json"] +} diff --git a/kind/package.json b/kind/package.json new file mode 100644 index 0000000..3dbea59 --- /dev/null +++ b/kind/package.json @@ -0,0 +1,39 @@ +{ + "name": "@platforma-open/milaboratories.rarefaction.kind", + "version": "1.0.0", + "private": true, + "description": "Block kind for the rarefaction block", + "type": "module", + "main": "./dist/index.cjs", + "module": "./dist/index.js", + "types": "./dist/index.d.ts", + "exports": { + ".": { + "types": "./dist/index.d.ts", + "sources": "./src/index.ts", + "import": "./dist/index.js", + "require": "./dist/index.cjs", + "default": "./dist/index.js" + } + }, + "scripts": { + "fmt": "ts-builder format", + "watch": "ts-builder build --target block-kind --watch", + "build": "ts-builder build --target block-kind && block-tools build-kind-manifest", + "check": "ts-builder check --target block-kind" + }, + "dependencies": { + "@platforma-sdk/block-kind": "catalog:", + "@platforma-sdk/model": "catalog:", + "es-toolkit": "catalog:" + }, + "devDependencies": { + "@milaboratories/ts-builder": "catalog:", + "@milaboratories/ts-configs": "catalog:", + "@platforma-sdk/block-tools": "catalog:" + }, + "peerDependencies": { + "@types/node": "*", + "typescript": "*" + } +} diff --git a/kind/tsconfig.json b/kind/tsconfig.json new file mode 100644 index 0000000..5411207 --- /dev/null +++ b/kind/tsconfig.json @@ -0,0 +1,10 @@ +{ + "extends": "@milaboratories/ts-configs/block/facade", + "compilerOptions": { + "outDir": "./dist", + "rootDir": ".", + "resolveJsonModule": true + }, + "include": ["src/**/*", "package.json"], + "exclude": ["dist", "node_modules"] +} diff --git a/model/package.json b/model/package.json index 9262d71..d12ff5e 100644 --- a/model/package.json +++ b/model/package.json @@ -25,6 +25,7 @@ "dependencies": { "@milaboratories/graph-maker": "catalog:", "@milaboratories/helpers": "catalog:", + "@platforma-open/milaboratories.rarefaction.kind": "workspace:*", "@platforma-sdk/model": "catalog:" }, "devDependencies": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 5a223b8..be2c2f8 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -13,38 +13,44 @@ catalogs: specifier: 1.6.1 version: 1.6.1 '@milaboratories/helpers': - specifier: 1.14.4 - version: 1.14.4 + specifier: 1.14.5 + version: 1.14.5 '@milaboratories/strings': specifier: 0.1.2 version: 0.1.2 '@milaboratories/ts-builder': - specifier: 1.6.0 - version: 1.6.0 + specifier: 1.7.0 + version: 1.7.0 '@milaboratories/ts-configs': - specifier: 1.3.0 - version: 1.3.0 + specifier: 1.4.0 + version: 1.4.0 '@platforma-open/milaboratories.runenv-python-3': specifier: ^1.7.5 version: 1.7.7 + '@platforma-sdk/block-kind': + specifier: 1.1.0 + version: 1.1.0 '@platforma-sdk/block-tools': - specifier: 2.12.7 - version: 2.12.7 + specifier: 2.14.3 + version: 2.14.3 '@platforma-sdk/model': - specifier: 1.80.2 - version: 1.80.2 + specifier: 1.82.0 + version: 1.82.0 '@platforma-sdk/tengo-builder': - specifier: 4.0.18 - version: 4.0.18 + specifier: 4.0.23 + version: 4.0.23 '@platforma-sdk/test': - specifier: 1.80.5 - version: 1.80.5 + specifier: 1.82.4 + version: 1.82.4 '@platforma-sdk/ui-vue': - specifier: 1.80.4 - version: 1.80.4 + specifier: 1.82.1 + version: 1.82.1 '@platforma-sdk/workflow-tengo': - specifier: 6.7.2 - version: 6.7.2 + specifier: 6.8.2 + version: 6.8.2 + es-toolkit: + specifier: 1.39.10 + version: 1.39.10 eslint: specifier: ^9.25.1 version: 9.39.2 @@ -80,10 +86,10 @@ importers: version: 2.29.8(@types/node@24.5.2) '@milaboratories/ts-builder': specifier: 'catalog:' - version: 1.6.0(@types/node@24.5.2)(rollup@4.55.1)(vue@3.5.26(typescript@5.6.3))(yaml@2.8.1) + version: 1.7.0(@types/node@24.5.2)(rollup@4.55.1)(vue@3.5.26(typescript@5.6.3))(yaml@2.8.1) '@platforma-sdk/block-tools': specifier: 'catalog:' - version: 2.12.7(@types/node@24.5.2) + version: 2.14.3(@types/node@24.5.2) shx: specifier: 'catalog:' version: 0.4.0 @@ -98,10 +104,13 @@ importers: devDependencies: '@milaboratories/ts-builder': specifier: 'catalog:' - version: 1.6.0(@types/node@24.5.2)(rollup@4.55.1)(vue@3.5.26(typescript@5.6.3))(yaml@2.8.1) + version: 1.7.0(@types/node@24.5.2)(rollup@4.55.1)(vue@3.5.26(typescript@5.6.3))(yaml@2.8.1) '@milaboratories/ts-configs': specifier: 'catalog:' - version: 1.3.0 + version: 1.4.0 + '@platforma-open/milaboratories.rarefaction.kind': + specifier: workspace:* + version: link:../kind '@platforma-open/milaboratories.rarefaction.model': specifier: workspace:* version: link:../model @@ -113,10 +122,10 @@ importers: version: link:../workflow '@platforma-sdk/block-tools': specifier: 'catalog:' - version: 2.12.7(@types/node@24.5.2) + version: 2.14.3(@types/node@24.5.2) '@platforma-sdk/model': specifier: 'catalog:' - version: 1.80.2 + version: 1.82.0 shx: specifier: 'catalog:' version: 0.4.0 @@ -124,17 +133,48 @@ importers: specifier: 'catalog:' version: 5.6.3 + kind: + dependencies: + '@platforma-sdk/block-kind': + specifier: 'catalog:' + version: 1.1.0 + '@platforma-sdk/model': + specifier: 'catalog:' + version: 1.82.0 + '@types/node': + specifier: '*' + version: 24.5.2 + es-toolkit: + specifier: 'catalog:' + version: 1.39.10 + typescript: + specifier: '*' + version: 5.9.3 + devDependencies: + '@milaboratories/ts-builder': + specifier: 'catalog:' + version: 1.7.0(@types/node@24.5.2)(rollup@4.55.1)(vue@3.5.26(typescript@5.9.3))(yaml@2.8.1) + '@milaboratories/ts-configs': + specifier: 'catalog:' + version: 1.4.0 + '@platforma-sdk/block-tools': + specifier: 'catalog:' + version: 2.14.3(@types/node@24.5.2) + model: dependencies: '@milaboratories/graph-maker': specifier: 'catalog:' - version: 1.6.1(@milaboratories/pl-model-common@1.47.1)(@platforma-sdk/model@1.80.2)(@platforma-sdk/ui-vue@1.80.4(@bytecodealliance/preview2-shim@0.17.8)(typescript@5.9.3))(d3-dispatch@3.0.1)(d3-path@3.1.0)(d3-scale-chromatic@3.1.0)(typescript@5.9.3) + version: 1.6.1(@milaboratories/pl-model-common@1.48.0)(@platforma-sdk/model@1.82.0)(@platforma-sdk/ui-vue@1.82.1(@bytecodealliance/preview2-shim@0.17.8)(typescript@5.9.3))(d3-dispatch@3.0.1)(d3-path@3.1.0)(d3-scale-chromatic@3.1.0)(typescript@5.9.3) '@milaboratories/helpers': specifier: 'catalog:' - version: 1.14.4 + version: 1.14.5 + '@platforma-open/milaboratories.rarefaction.kind': + specifier: workspace:* + version: link:../kind '@platforma-sdk/model': specifier: 'catalog:' - version: 1.80.2 + version: 1.82.0 '@types/node': specifier: '*' version: 24.5.2 @@ -144,13 +184,13 @@ importers: devDependencies: '@milaboratories/ts-builder': specifier: 'catalog:' - version: 1.6.0(@types/node@24.5.2)(rollup@4.55.1)(vue@3.5.26(typescript@5.9.3))(yaml@2.8.1) + version: 1.7.0(@types/node@24.5.2)(rollup@4.55.1)(vue@3.5.26(typescript@5.9.3))(yaml@2.8.1) '@milaboratories/ts-configs': specifier: 'catalog:' - version: 1.3.0 + version: 1.4.0 '@platforma-sdk/block-tools': specifier: 'catalog:' - version: 2.12.7(@types/node@24.5.2) + version: 2.14.3(@types/node@24.5.2) eslint: specifier: 'catalog:' version: 9.39.2 @@ -162,7 +202,7 @@ importers: version: 1.7.7 '@platforma-sdk/block-tools': specifier: 'catalog:' - version: 2.12.7(@types/node@24.5.2) + version: 2.14.3(@types/node@24.5.2) test: dependencies: @@ -175,13 +215,13 @@ importers: devDependencies: '@milaboratories/ts-builder': specifier: 'catalog:' - version: 1.6.0(@types/node@24.5.2)(rollup@4.55.1)(vue@3.5.26(typescript@5.9.3))(yaml@2.8.1) + version: 1.7.0(@types/node@24.5.2)(rollup@4.55.1)(vue@3.5.26(typescript@5.9.3))(yaml@2.8.1) '@milaboratories/ts-configs': specifier: 'catalog:' - version: 1.3.0 + version: 1.4.0 '@platforma-sdk/test': specifier: 'catalog:' - version: 1.80.5(@bytecodealliance/preview2-shim@0.17.8)(@types/node@24.5.2)(vite@6.2.3(@types/node@24.5.2)(lightningcss@1.32.0)(yaml@2.8.1)) + version: 1.82.4(@bytecodealliance/preview2-shim@0.17.8)(@types/node@24.5.2)(vite@6.2.3(@types/node@24.5.2)(lightningcss@1.32.0)(yaml@2.8.1)) eslint: specifier: 'catalog:' version: 9.39.2 @@ -193,7 +233,7 @@ importers: dependencies: '@milaboratories/graph-maker': specifier: 'catalog:' - version: 1.6.1(@milaboratories/pl-model-common@1.47.1)(@platforma-sdk/model@1.80.2)(@platforma-sdk/ui-vue@1.80.4(@bytecodealliance/preview2-shim@0.17.8)(typescript@5.9.3))(d3-dispatch@3.0.1)(d3-path@3.1.0)(d3-scale-chromatic@3.1.0)(typescript@5.9.3) + version: 1.6.1(@milaboratories/pl-model-common@1.48.0)(@platforma-sdk/model@1.82.0)(@platforma-sdk/ui-vue@1.82.1(@bytecodealliance/preview2-shim@0.17.8)(typescript@5.9.3))(d3-dispatch@3.0.1)(d3-path@3.1.0)(d3-scale-chromatic@3.1.0)(typescript@5.9.3) '@milaboratories/strings': specifier: 'catalog:' version: 0.1.2 @@ -202,10 +242,10 @@ importers: version: link:../model '@platforma-sdk/model': specifier: 'catalog:' - version: 1.80.2 + version: 1.82.0 '@platforma-sdk/ui-vue': specifier: 'catalog:' - version: 1.80.4(@bytecodealliance/preview2-shim@0.17.8)(typescript@5.9.3) + version: 1.82.1(@bytecodealliance/preview2-shim@0.17.8)(typescript@5.9.3) '@types/node': specifier: '*' version: 24.5.2 @@ -218,10 +258,10 @@ importers: devDependencies: '@milaboratories/ts-builder': specifier: 'catalog:' - version: 1.6.0(@types/node@24.5.2)(rollup@4.55.1)(vue@3.5.24(typescript@5.9.3))(yaml@2.8.1) + version: 1.7.0(@types/node@24.5.2)(rollup@4.55.1)(vue@3.5.24(typescript@5.9.3))(yaml@2.8.1) '@milaboratories/ts-configs': specifier: 'catalog:' - version: 1.3.0 + version: 1.4.0 eslint: specifier: 'catalog:' version: 9.39.2 @@ -233,14 +273,14 @@ importers: version: link:../software '@platforma-sdk/workflow-tengo': specifier: 'catalog:' - version: 6.7.2 + version: 6.8.2 devDependencies: '@platforma-sdk/tengo-builder': specifier: 'catalog:' - version: 4.0.18 + version: 4.0.23 '@platforma-sdk/test': specifier: 'catalog:' - version: 1.80.5(@bytecodealliance/preview2-shim@0.17.8)(@types/node@24.5.2)(vite@8.0.10(@types/node@24.5.2)(yaml@2.8.1)) + version: 1.82.4(@bytecodealliance/preview2-shim@0.17.8)(@types/node@24.5.2)(vite@8.0.10(@types/node@24.5.2)(yaml@2.8.1)) shx: specifier: 'catalog:' version: 0.4.0 @@ -897,12 +937,12 @@ packages: resolution: {integrity: sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@grpc/grpc-js@1.13.4': - resolution: {integrity: sha512-GsFaMXCkMqkKIvwCQjCrwH+GHbPKBjhwo/8ZuUkWHqbI73Kky9I+pQltrlT0+MWpedCoosda53lgjYfyEPgxBg==} + '@grpc/grpc-js@1.14.4': + resolution: {integrity: sha512-k9Dj3DV/itK9D06Y8f190Qgop7/Ui+D0njFV3LHMPwPT75DpXLQohE9Wmz0QElrJnzsjB7KPWiKJbOl7IPDArQ==} engines: {node: '>=12.10.0'} - '@grpc/proto-loader@0.7.13': - resolution: {integrity: sha512-AiXO/bfe9bmxBjxxtYxFAXGZvMaN5s8kO+jBHAJCON8rJoB5YS/D6X7ZNc6XQkuHNmyl4CYaMI1fJ/Gn27RGGw==} + '@grpc/proto-loader@0.8.1': + resolution: {integrity: sha512-wtF6h+DY6M3YaDBPAmvuuA6jV8Sif9MjtOI5euKFWRgCDl5PeDpPsHR9u2l6St5ceY8AZgoNDww5+HvEsXFsGg==} engines: {node: '>=6'} hasBin: true @@ -1080,20 +1120,20 @@ packages: resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} engines: {node: '>=8'} - '@jitl/quickjs-ffi-types@0.31.0': - resolution: {integrity: sha512-1yrgvXlmXH2oNj3eFTrkwacGJbmM0crwipA3ohCrjv52gBeDaD7PsTvFYinlAnqU8iPME3LGP437yk05a2oejw==} + '@jitl/quickjs-ffi-types@0.32.0': + resolution: {integrity: sha512-v9T+GQpmk43VDJ7d72sf0Nexhk+ArvtUihW27dy7lqAl0zBObFKtSBBIm5RBjwIhE8VwsPPm9PNuvPvNqLWUEg==} - '@jitl/quickjs-wasmfile-debug-asyncify@0.31.0': - resolution: {integrity: sha512-YkdzQdr1uaftFhgEnTRjTTZHk2SFZdpWO7XhOmRVbi6CEVsH9g5oNF8Ta1q3OuSJHRwwT8YsuR1YzEiEIJEk6w==} + '@jitl/quickjs-wasmfile-debug-asyncify@0.32.0': + resolution: {integrity: sha512-EX8zbXwGqCgAE764M+qvkHtyXDi/FUoMBea0JnES7vCM3P7a2+EOZOjGv85wtZ2sJhI1oJ+nekmqpOODFDY+hw==} - '@jitl/quickjs-wasmfile-debug-sync@0.31.0': - resolution: {integrity: sha512-8XvloaaWBONqcHXYs5tWOjdhQVxzULilIfB2hvZfS6S+fI4m2+lFiwQy7xeP8ExHmiZ7D8gZGChNkdLgjGfknw==} + '@jitl/quickjs-wasmfile-debug-sync@0.32.0': + resolution: {integrity: sha512-LeYWrPGC1uNCTBWvibo3ZLJj0CSVNYUXvJpXMCmuQ5Sap2cCACc3uvGvYV4homHHBAzfw5akoTqMMS4YFRtw+Q==} - '@jitl/quickjs-wasmfile-release-asyncify@0.31.0': - resolution: {integrity: sha512-uz0BbQYTxNsFkvkurd7vk2dOg57ElTBLCuvNtRl4rgrtbC++NIndD5qv2+AXb6yXDD3Uy1O2PCwmoaH0eXgEOg==} + '@jitl/quickjs-wasmfile-release-asyncify@0.32.0': + resolution: {integrity: sha512-3oSwPfja12ICz4aIblB58cuY8JlEq5Txt8Cut4VLo+LH47QN+mzCnSgnbB03hWzg1LBcc+VyyI9UOag7a1NF+Q==} - '@jitl/quickjs-wasmfile-release-sync@0.31.0': - resolution: {integrity: sha512-hYduecOByj9AsAfsJhZh5nA6exokmuFC8cls39+lYmTCGY51bgjJJJwReEu7Ff7vBWaQCL6TeDdVlnp2WYz0jw==} + '@jitl/quickjs-wasmfile-release-sync@0.32.0': + resolution: {integrity: sha512-BKNDI/TPBfGlLNGYpLrhcDGXmIk4xHm4MRAisOBnOzpXVn9HZWsfmMAc9WMBrAHjvvds6HOikKeaOBKdPdpVrg==} '@jridgewell/gen-mapping@0.3.13': resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} @@ -1138,11 +1178,11 @@ packages: '@microsoft/tsdoc@0.16.0': resolution: {integrity: sha512-xgAyonlVVS+q7Vc7qLW0UrJU7rSFcETRWsqdXZtjzRU8dF+6CkozTK4V4y1LwOX7j8r/vHphjDeMeGI4tNGeGA==} - '@milaboratories/columns-collection-driver@0.2.1': - resolution: {integrity: sha512-CYdDAhmB01jYq0IXJmbMbA/yTfqSkzwRs0ZJxoSvnzvlu1doc63VIXSvhHOw9b70usR5EFVprR2PvPMTRnjeQQ==} + '@milaboratories/columns-collection-driver@0.2.4': + resolution: {integrity: sha512-abbgAzME71ARvgnGQHte+dPMgt2JGBJN4YpGLVxiYr7GToHwypsEi3PY/dAqriQWRtpKR82EpIAMxXVq0d7XMw==} - '@milaboratories/computable@2.9.7': - resolution: {integrity: sha512-uCMretdt4okbKWkU0aZ0+NHH3hN0wzi2ZIkAvwqha0ZTxUqKilDOlZNAL6QLbmT/7vQs9geAj4amlwSgzkMoww==} + '@milaboratories/computable@2.9.8': + resolution: {integrity: sha512-X0ZtxOnIJlAd9Y7CyBtWSKHgVuTKXbIryMwJaoYSEz0gY3JZVnsD0f59J/lwe3Key0/lSYh3EbL/pP5jACIzfQ==} engines: {node: '>=22.19.0'} '@milaboratories/graph-maker@1.6.1': @@ -1155,19 +1195,15 @@ packages: resolution: {integrity: sha512-zOkD4aWNbembwI+AsPTz7nmWC1VPA4rwGBc+Nd5jPpKVh7rCtZwQrlOP5mVqRVMKIAjb1nU8kzzCGfqNPqfJjA==} engines: {node: '>=22'} - '@milaboratories/helpers@1.14.3': - resolution: {integrity: sha512-nZv+n+orVzA/GimDTNj6Yjb52+Wu5f/Kf2z6UCGXni6KTquLBfQhi3AFB1mLE7hkUYPvKU6LxuRY02CQMQiTVA==} - engines: {node: '>=22'} - - '@milaboratories/helpers@1.14.4': - resolution: {integrity: sha512-0mS5GQAQYUab0qj1C6+IXafNJhL1ahnhPBmIkLq9VqJU8p9jNZ7KC5ln4/pl0tK47brdPljCLEiLg8IdSa6wFw==} + '@milaboratories/helpers@1.14.5': + resolution: {integrity: sha512-Kiy0g7sEmFQxDwtnmTrdJ8XdUK0IDAB5ZnPCNEbK7lPGHIa+xG3kzfeR4y44QBdrYaK0NwG63D8Fc7dlv9KItg==} engines: {node: '>=22'} '@milaboratories/miplots4@1.4.0': resolution: {integrity: sha512-Fsopmq+q3nkYyCNRJbmLpyDBU7rXJqMoAaNA3hnfeCa3RquGA6uOOl/ONKmqCJ35j+s+L7ch7a3Vt4IG2qeLtg==} - '@milaboratories/pf-driver@1.8.2': - resolution: {integrity: sha512-K5jKzqFfsOJL051U1VAg2Iy9iE01Hwm+FtRb2/PcB0DV3VItIozXRF/mvcXKDHbSCLcPcRGqZjtEF3kMczd+sA==} + '@milaboratories/pf-driver@1.9.1': + resolution: {integrity: sha512-i4qt1kcOcvOAHGlA7tCHce1QpsvmrCDu2vvmZz/kfHPma7YyDU7PSSr6hhuV+rf7HZTJz7z193c7wCXTFTLrzQ==} engines: {node: '>=22.19.0'} '@milaboratories/pf-plots@1.5.0': @@ -1176,79 +1212,77 @@ packages: '@milaboratories/pl-model-common': 1.46.4 '@platforma-sdk/model': 1.79.27 - '@milaboratories/pf-spec-driver@1.4.21': - resolution: {integrity: sha512-JuYVQKs4aia8DA8MVqdImu+Ho+uTwwOqIaJ3VVPMpCMo3QAH9jZP+wGlkklSwow4d+27Y8L2RJN/1dcPr56GZw==} + '@milaboratories/pf-spec-driver@1.5.1': + resolution: {integrity: sha512-K7BuQCUXqpUOAwgJ1aIO8SSQbE8RSEVb8J5e6vIpI6PqV7Uc8LHFswTguOSgSuacpMgQmEP9jmIKyafJdJ7PDw==} + + '@milaboratories/pf-spec@1.0.1': + resolution: {integrity: sha512-UbLycglulwrFgil6n1By17YGOVHzZXeb+tAVUej6ZFOmpRtAMQYVLOXAX4FN2tc98eDTJ+YrYdZCa7qWi1gBxw==} + peerDependencies: + '@bytecodealliance/preview2-shim': ^0.20.1 - '@milaboratories/pframes-rs-node@1.1.55': - resolution: {integrity: sha512-TbudDPMixADLyVr5UsiXhf+zq7YCJA3osFrzDn7Lr5aeyorCjiXDkVOGKpID7GkkssuVsNpPXtoGdA71Y2tLjQ==} + '@milaboratories/pframes-rs-node@1.1.56': + resolution: {integrity: sha512-H6qltcR+HHb2kAy0U0zP90rqmv/MZGGkdXIyf89FUZTpoHOlXG4Ahxq7wXp9vviUczci4cLl2L0Q+dL2XGcsUA==} - '@milaboratories/pframes-rs-serv@1.1.55': - resolution: {integrity: sha512-cGByUULBA/JiwyFEBZrVNOEbnbrMPWWHCWLprRKlVWlmDMaRmsVft/tFpnle46BhDZWpoWbaKEZ8NGOtGqDCXw==} + '@milaboratories/pframes-rs-serv@1.1.56': + resolution: {integrity: sha512-Pi0CRuvkfL+PqdgQ8im0MW5tqVjUvJ8hJbOG7v5pS45adg8tuq4TyrAoWN7un9ZWQ6KRLypUD+7eXCwhjOwADg==} hasBin: true - '@milaboratories/pframes-rs-wasip2@1.1.55': - resolution: {integrity: sha512-mwKTmcDiuN6Id2h+oxKX2W5igFhMxDvRZs4clsxhPTYZASSROrvsSsaoXS81meqfC0phx+BUaRpdrkVQIKSdxQ==} - - '@milaboratories/pframes-rs-wasm@1.1.55': - resolution: {integrity: sha512-kVOL+eAasfeiui5lQ5G92nsSiTNSsOnl1m+4my0tmbR7VTCa15dn1kd5RcXS3/8YO5oEcnGlCUhnu5kKMtweEw==} - peerDependencies: - '@bytecodealliance/preview2-shim': 0.17.9 - '@milaboratories/pl-model-common': 1.46.2 - '@milaboratories/pl-model-middle-layer': 1.30.7 + '@milaboratories/pframes-rs-wasip2@1.1.56': + resolution: {integrity: sha512-54bhC6XCAVO09J/sqVwEKA4hhTa27BDDNdH8BE+6+LvjBVkg/qq2/f0MzdrVijrmagbr97F1zgj5wIgUqwCSoA==} - '@milaboratories/pl-client@3.14.2': - resolution: {integrity: sha512-+0ih1njQn4wvLjGmFKboKFRlWYLrzg7QdRK2aNo8ivTKY16TrsMRCk0GQEt0aPKELnv7QSrsNSjg7e7GSdGMDQ==} + '@milaboratories/pl-client@3.14.7': + resolution: {integrity: sha512-HIjPfGAYRRD0hbq5YSTkWt5XgBiv+yYtw73EjWLxui8eUEeB2ffdgsvH7IhVx2oXjUOL4p7M4i8PBnmdJ3830w==} engines: {node: '>=22.19.0'} - '@milaboratories/pl-config@1.8.4': - resolution: {integrity: sha512-eBZCIVhl9jRigyJUPURCxH2f2OrU5aToihSrwmTkCOu2rjr1spe4YGMIh9CxPr8Z1GkfQbez3crJGME1+RZrrg==} + '@milaboratories/pl-config@1.8.5': + resolution: {integrity: sha512-XnfYXSSkRxeImQ21k6I8y5apisvagcSgMGfEeyRxNdSGwUVJbbI8TwJk+XBEDQ4lErW8oqtLxKjFQuHJMzRUoQ==} - '@milaboratories/pl-deployments@3.0.12': - resolution: {integrity: sha512-Oo7MGAwMyC8F5zCZWgs3Q/sET584Ussux8YP6TB+UBfWcNwZVZWbiO/QaRewfjnMfKSJ4Uden7RoQ4hHWvWChA==} + '@milaboratories/pl-deployments@3.0.16': + resolution: {integrity: sha512-nFAIY4rxAssVqicSzgSNVQB/ZOjHjh4uhvde8aWFqQcMZCQDhHSaVJezzxRdotS8JiY5kI4r/Y0cN+Ey1MDDog==} engines: {node: '>=22.19.0'} - '@milaboratories/pl-drivers@1.16.10': - resolution: {integrity: sha512-5lrewLkmN9Z6dWkRw2kYbsjquHNSHBni8seTI3BsP9xijuv4NzEkvDcJLJsQsuZcuaFtyw77fHAKvNmlYZiJeA==} + '@milaboratories/pl-drivers@1.16.16': + resolution: {integrity: sha512-Z60p02vIPmdy/M10gacg6I2BZ2T/gySPMm2Q8IbfvCbUJRjXXfbkGxN8hBoeRQShcXgM5svu0hPZfv1e87QRmQ==} engines: {node: '>=22'} '@milaboratories/pl-error-like@1.12.10': resolution: {integrity: sha512-iHmnLG5lxJqcymUmEL8onCDGEADk1S/5RNACQ5yfTCNcCkUc+7hYrDHQpFmWXPPGC9sG+NTBxt4wr5m8UsLm2g==} - '@milaboratories/pl-errors@1.4.31': - resolution: {integrity: sha512-XK4npZNtHksD+IHuzsaf4SXtceqRpwCH/PxZy7zijFqNuW5cdl7be8Parr8T+wQzYaDgHLVSKrYilzC56RNx/Q==} + '@milaboratories/pl-errors@1.4.36': + resolution: {integrity: sha512-WzKECX8Te6uP2DT7z2yTN6RrkiAWowYeU1rmB1Uc6sQBBWC6OjiqjiyOjvFeqxi73oXODARhLaLnqJcpG1onNA==} - '@milaboratories/pl-healthcheck@1.0.3': - resolution: {integrity: sha512-krt75tuov2T0TKAsybbSzwHt45JjAQJbnqya0FiRApme913k6DvoowEX2NYLzRChbn+QVbs4ODxJI8lcgFexVg==} + '@milaboratories/pl-healthcheck@1.0.5': + resolution: {integrity: sha512-ZkQti4VU2FapJBFRtZGfR5NDPXEAEFgTf/NfemypgY0aA75fFPi4/c3BpXX5K7dht+JOgHqkMrBHxKIuE2T+fA==} engines: {node: '>=22.19.0'} '@milaboratories/pl-http@1.2.4': resolution: {integrity: sha512-QKmhx+WEvJCV9dUy/SBdQk/ApaJ5ewBFgm/b+XPlS10SusAdqUUTGvK5+hq8YSuUMXlHb/dk++UtI5YlDuDl2Q==} - '@milaboratories/pl-middle-layer@1.66.4': - resolution: {integrity: sha512-rFyxoWpFNjA5FPU6A5Usf0FyDx+XzFSsDqsPRf3NVuxrk6No6cNGZVUerdpXZJ6qCEsJwdgMBRECyBI5MV5bRw==} + '@milaboratories/pl-middle-layer@1.67.3': + resolution: {integrity: sha512-eeZzSw42BFJ1VUoEw8gVqyATtEBiH4FUzpgHEZ7W0bF0Opczss6/MMlL0NRv7QNLlP1x6rRfCTePJgRoOTbsNw==} engines: {node: '>=22.19.0'} - '@milaboratories/pl-model-backend@1.4.16': - resolution: {integrity: sha512-MrJwM3aOzrqr3+GVpS/1Zh/SOH/2tBtoyk/+eE6C7LRjofoip8GIF4be8AgPAM3C+6wTSGrQ5x3CM6A8Ql2HVA==} + '@milaboratories/pl-model-backend@1.4.21': + resolution: {integrity: sha512-Z2z5J8bglslgXXoi1aySi1ho+/d+ylJiuEaRw9XTNuE5iBM3EQPe0rw095pXGOinTlMpmvUcCI2wkVCraUQ1dA==} '@milaboratories/pl-model-common@1.46.2': resolution: {integrity: sha512-VEeauisApYScvCS8lnK3zpFJ520xuTAodKJmjR8ulHcMrWMyWMfHEdGb7j5OMD0mM/OwTgmQrrJ5eB7Xd+xoOQ==} - '@milaboratories/pl-model-common@1.47.1': - resolution: {integrity: sha512-5F9I8JvUPRJ2HEzz5MmTio6JFYnhYoMVHfToh2NyXyOyQgAF6jhOzZBOsrEig9NfCPZBRB7v6UjmIK43dG4o/g==} - - '@milaboratories/pl-model-middle-layer@1.30.13': - resolution: {integrity: sha512-owQVozyub/6aKgk+yce+9sDK+t0HrpLbnlKJqQjYJahuhoju8j6VMY17AWgvADSDCiI3gnp/Tm/I4Ur6ySs1Cg==} + '@milaboratories/pl-model-common@1.48.0': + resolution: {integrity: sha512-oCVrjFNmjQolb7YWnbSGHnp6GGVm1PhG1lnNABp9lqYjvA2ISjIPQLIo/vT2ca0mqwLrEvbuRqiqSFOg7sQ5tQ==} '@milaboratories/pl-model-middle-layer@1.30.7': resolution: {integrity: sha512-rs9x3Ron4ujR/UOdEgB8WUB1SvZ8ZAScT1Av/e4or+iiQ/CzhmK9nqtYamHVwKV+JgwIFbXQwxGvIHDVz955dQ==} - '@milaboratories/pl-tree@1.13.1': - resolution: {integrity: sha512-NtVVUSF9eJA5v5iUEfGgKl0JbG/EIvy+YCsxzCZ1dXG1S3gCNwt01Nj5PkWW7FkDG1IT0ZfwyeO0mVVz2kIv1Q==} + '@milaboratories/pl-model-middle-layer@1.32.0': + resolution: {integrity: sha512-X1iLGgOwzkw8mQ/GfTxfOTJakBJ26np85h5HqUziMbVkFL0SR7wpd7xpgUs6TKVkYNM8viAv3iA2k63Yc5SahQ==} + + '@milaboratories/pl-tree@1.13.7': + resolution: {integrity: sha512-q4pURdiq7cwOV1TAkIa6fZo3s3mzglBSokLgBSmoBPtnj9bsna5nTrqQFqp9KCzPb9N9PbTRE75du+I5YDbc+g==} engines: {node: '>=22.19.0'} - '@milaboratories/ptabler-expression-js@1.2.35': - resolution: {integrity: sha512-nTVNYgNHuUswPnAe8GFAitbewNVMHaxhAncQ3yMYfGzsGgZupQyGV6K1DHVkzMAwNwVFVLwIbiPMY58en03XWQ==} + '@milaboratories/ptabler-expression-js@1.2.38': + resolution: {integrity: sha512-z14oa/V3nkBGHxnygpfxUBU7EfHQKHh1KZgK47ouqIw7CvuOmqjViRdynY4HZNjAh3n3AGHpBbEFs/J+hQMW3g==} '@milaboratories/resolve-helper@1.1.3': resolution: {integrity: sha512-38/dW/XRZQREOxAOOKtO0lzEWPCP/DH0qhB3q1kYcGoN++5V92/zbVwbYrMDeDcjTyo+D62iIep+sKXeWHa7Uw==} @@ -1264,19 +1298,19 @@ packages: os: [darwin, linux, win32] hasBin: true - '@milaboratories/ts-builder@1.6.0': - resolution: {integrity: sha512-OlQ38jsriFf7qS5AmNIch65qQAOZBRFaLT15N/JJqe9dIytKJNS8Ff9G4vowWtFiRzyeyWRArBtgVOeAmoYuKQ==} + '@milaboratories/ts-builder@1.7.0': + resolution: {integrity: sha512-VT8xf4jZg2Dyo6KR5s+z4WiHrVfAJ46d7N39k7JPNlOlig910/h/1LKgXSgWysWfAp+2pYKvq7flAu3JKLKarg==} hasBin: true - '@milaboratories/ts-configs@1.3.0': - resolution: {integrity: sha512-6rZaMOJotG+v6eXoupHgPqxArpNBNl0f7sd5K+kUo1PUhPTe632eLJtEeBbFtwDGNYqL9QUacd4pT5t6oDOf0A==} + '@milaboratories/ts-configs@1.4.0': + resolution: {integrity: sha512-VzU9D+RiggsG4VYteJSBN4o8IjYae9GbZ8MofikMJQLOI1Ir9/pVyPXXGnG/TAGvmcjbK/psAiZVGSvI5MBPGg==} - '@milaboratories/ts-helpers@1.8.5': - resolution: {integrity: sha512-vZDcIBta7I935VjKk6qGdhpjz2pWXe5CbWv1UUmPrcG8wsunDpWuet8/Gi75N97CpcLDc2LLHd/url9K8ZNpAg==} + '@milaboratories/ts-helpers@1.8.6': + resolution: {integrity: sha512-ef01tARUl+0Urt3x8HHAByrhYHg4Rnn7WiFyJ+joZFZl1T1pUKTgfB7Zxc8Cn06HIl4i6H7s5OSymjZePIGqfQ==} engines: {node: '>=22.19.0'} - '@milaboratories/uikit@2.15.16': - resolution: {integrity: sha512-HOl1YsPKHpj3izKAs0hEvVtFE8ZbrOnD5KsAqSHxvipQyfAdOLbfB7ak6XPdPKbgsvH5opfMws7usryR6Nlulw==} + '@milaboratories/uikit@2.15.24': + resolution: {integrity: sha512-/NFdh4fcxhArGToWn4kSvSTuOEpFSjfDErPC4bkNXQ0UV633etU+v/vV81J+oSC/BlyCc5Rire9qLHhut18g+w==} '@napi-rs/wasm-runtime@1.1.6': resolution: {integrity: sha512-ZLv/JdUfkvOy9eCnnBaGfiO+XimbjebAeO+MRQqD/B+FR1tnRN0tpKSJHRbE8sFfS6aqsXZ67TQjfwfsxULVbg==} @@ -1597,14 +1631,14 @@ packages: '@platforma-open/milaboratories.runenv-python-3@1.7.7': resolution: {integrity: sha512-1aJmPOS+XaArKUriwu34LfDrcf4/JQDLtCLm0O05hYAepJ/xMVJUHFeJ3rbp7QloejfD51475THhLXQWj5KB+g==} - '@platforma-open/milaboratories.software-ptabler.schema@1.15.19': - resolution: {integrity: sha512-h/FBLELZT6PJZnWtwvcy8bQrpZ2A6xWSVSjyccqb3QolHSbeuwi5UpUph8UxdDYNmWSCH0zR/zE2hFypgk21xA==} + '@platforma-open/milaboratories.software-ptabler.schema@1.15.22': + resolution: {integrity: sha512-f9vT+iSfNelgAGjaNzn1GErhmxHbjG6HtskAMoaUEbrciCG8c8i8cSCJPLu0xKNBcjM1UW+T10uD89Ckq2vkxQ==} - '@platforma-open/milaboratories.software-ptabler@2.1.6': - resolution: {integrity: sha512-LdDU9/z+iejw5F98J8DYVQKsjUGGiyu8rHWCjWCEqOVEP+N9QBcN4ibDgG4Xp/GL+IzKxicAkf2Ae9lHollD6w==} + '@platforma-open/milaboratories.software-ptabler@2.1.8': + resolution: {integrity: sha512-28dKwcKNIB/8OYH6l/li7Qa/aE2NgDVtNUmN8v6jZsLKT59ogFclz8ZrQ+OiQFzHQCLBlWBt5TdIHfHPxBaNFw==} - '@platforma-open/milaboratories.software-ptexter@1.2.3': - resolution: {integrity: sha512-5wwzvPko/tjkm6EnirsnjB+MO5mF//tgJplI+jPh3bcSHpEdHF+B9xg+S1owAnekqbimMrFZWqHSVY9ZmIHOjw==} + '@platforma-open/milaboratories.software-ptexter@1.2.4': + resolution: {integrity: sha512-4ZqhqksSNVKWhEB9WwrL0rU89G+00ulzH1urYyNA4EdBVGA4mwbKbw0K/zcwce/oUYYMdRl+epXmr0w9wHyNzA==} '@platforma-open/milaboratories.software-small-binaries.hello-world-py@1.0.10': resolution: {integrity: sha512-16BGRLIrsVW+YIaXwWLX6Nbm80PS5mQJEclHhjNbRrRTLHPaKI4RygZfBC0lLNzvHBiTXU4Qkh1+WmdovkshDg==} @@ -1624,33 +1658,36 @@ packages: '@platforma-open/milaboratories.software-small-binaries@2.1.1': resolution: {integrity: sha512-KN1PR7YgUUfx1dxh/TtcoWpSZbOXbRxXzQuJ505qHuXuE0spYwC7bXnvJsEYbEwRcPMa0foTrjBnPNORE4yr+Q==} - '@platforma-sdk/block-tools@2.12.7': - resolution: {integrity: sha512-a13K0hcXYf+sgx+07QFjIu2uTeTH5lhHHI1o563kvs9Z5vssU9jn7HFgXgSe6TMjDntERJcGHiGm8nUd4t3FiA==} + '@platforma-sdk/block-kind@1.1.0': + resolution: {integrity: sha512-4uh+40o6BGfQcPPhkYGCjng8EXR9qn+6i5Fuc3RJ5QGfPYfcwbxT35G2V7ALUxmsqjLZ5SGL+JcW6Lm2v0cZHA==} + + '@platforma-sdk/block-tools@2.14.3': + resolution: {integrity: sha512-CD0NPfUoXiJhl6JArC057oCXbqKkJf5HJsmrlZShnh6lKRaIQlibF8VUqbpBi9+PopsGCQ4/s5HnLR7wQoWDzg==} hasBin: true '@platforma-sdk/blocks-deps-updater@2.2.0': resolution: {integrity: sha512-p9lBxhFXM9WoRsrJO7dfkiXSK+1m63yIn1sKhBO71eMbhrLMyVYHEOeNf3w5OCdbRF5QsNhXzWuiTmFK3zHFsA==} hasBin: true - '@platforma-sdk/model@1.80.2': - resolution: {integrity: sha512-aQGVxjxw7y34U0ZuboIYASodJMZ1yTjXH2y44bCdeTeS/r81YBBmGrF6BQhHHVjIOIhaIlWHRBIhd9AJo42aWQ==} + '@platforma-sdk/model@1.82.0': + resolution: {integrity: sha512-m2GQFYQUS+XivC+Bsan9UlTvOM7R4wraF0eWMwQiZt3yjCSw09z12Be0uydTKLGVvLPbsw7zjhibMop3eBTb1w==} - '@platforma-sdk/package-builder-lib@1.2.0': - resolution: {integrity: sha512-AtSzaZ39BGlqcyYtpGREDz+YlGCDdSTQJNV/+NkTyUtoq1ECRO+iMqAX1DSSza1WqylnURX8vKVI2owS/cxntA==} + '@platforma-sdk/package-builder-lib@1.3.0': + resolution: {integrity: sha512-CdBjmNo6E1fBxKYWaXa49L/L2WLURxs2f1TAqxLIZlHRE4DZ6E1TEj3jNNKESWp+/9rwtLkTAzmTzNPrDgz+2Q==} - '@platforma-sdk/tengo-builder@4.0.18': - resolution: {integrity: sha512-nGPB5fE6b9ITFuXVMRakr2MyqsnL4TVE09jZ2X7TCPgb31k4gIhYCT+XU9vBRavBj/U3dt+jSWHkcbX9JvJKYA==} + '@platforma-sdk/tengo-builder@4.0.23': + resolution: {integrity: sha512-Qkxpg3wuZQOc6KbEL3pifOCdqOH91TaL3jDluVIm5mz3qpx96KO+To8AT/0nLqmvaF7yv8AP22QiyyqduAhGiw==} engines: {node: '>=22'} hasBin: true - '@platforma-sdk/test@1.80.5': - resolution: {integrity: sha512-z3tBrNWIg0+OfUOKpiZWCFflSW17J/Tv7DRWK99IzaaS0+MrIhC6oEFJGXnDlbynhnhSp3E+a4HiwEe+SG/rCg==} + '@platforma-sdk/test@1.82.4': + resolution: {integrity: sha512-4KOzXEoQcU3p+u0+rS2+muuXdaDH/b5LzTbowoa3pg9DFH0tNwr0F7RNoP8L6fGJ4EcF60jSx3Y3LqwTNeWt1w==} - '@platforma-sdk/ui-vue@1.80.4': - resolution: {integrity: sha512-DQbuO3fAJ3CQxiJkXMiNuo1Qyd/C92AatOZX90ElLFohXiP3XbJNXNjrIxypzsUc850dKkqbPjKd0JTzD12E9w==} + '@platforma-sdk/ui-vue@1.82.1': + resolution: {integrity: sha512-HCwLm+yN2cKbRL0caQ21+40mcodVGTmnruruNQAkcCkgHu4AaRmkEVRtel8AdHLpcqJS5ray341E1bqGErguSw==} - '@platforma-sdk/workflow-tengo@6.7.2': - resolution: {integrity: sha512-KJ4tBigEDN+EIDy7K2u7PqxBIDrhwvnazJthApGg2N/HPZkinKmq0iMzHC9KZ0IsJVg6uxECIB2d2Acko33tOw==} + '@platforma-sdk/workflow-tengo@6.8.2': + resolution: {integrity: sha512-AHR/Y+vbyfda17A7xY2uH9TlXiBpM8242tTO6+lj8phA4/KS6mez4GLu4ZEaASlZpX6YkQsUs5LUxYQU7pXeiQ==} '@protobuf-ts/grpc-transport@2.11.1': resolution: {integrity: sha512-l6wrcFffY+tuNnuyrNCkRM8hDIsAZVLA8Mn7PKdVyYxITosYh60qW663p9kL6TWXYuDCL3oxH8ih3vLKTDyhtg==} @@ -1677,29 +1714,26 @@ packages: '@protobufjs/base64@1.1.2': resolution: {integrity: sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==} - '@protobufjs/codegen@2.0.4': - resolution: {integrity: sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==} + '@protobufjs/codegen@2.0.5': + resolution: {integrity: sha512-zgXFLzW3Ap33e6d0Wlj4MGIm6Ce8O89n/apUaGNB/jx+hw+ruWEp7EwGUshdLKVRCxZW12fp9r40E1mQrf/34g==} - '@protobufjs/eventemitter@1.1.0': - resolution: {integrity: sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==} + '@protobufjs/eventemitter@1.1.1': + resolution: {integrity: sha512-vW1GmwMZNnL+gMRaovlh9yZX74kc+TTU3FObkkurpMaRtBfLP3ldjS9KQWlwZgraRE0+dheEEoAxdzcJQ8eXZg==} - '@protobufjs/fetch@1.1.0': - resolution: {integrity: sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==} + '@protobufjs/fetch@1.1.1': + resolution: {integrity: sha512-GpptLrs57adMSuHi3VNj0mAF8dwh36LMaYF6XyJ6JMWlVsc+t42tm1HSEDmOs3A8fC9yyeisgLhsTVQokOZ0zw==} '@protobufjs/float@1.0.2': resolution: {integrity: sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==} - '@protobufjs/inquire@1.1.0': - resolution: {integrity: sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==} - '@protobufjs/path@1.1.2': resolution: {integrity: sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==} '@protobufjs/pool@1.1.0': resolution: {integrity: sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==} - '@protobufjs/utf8@1.1.0': - resolution: {integrity: sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==} + '@protobufjs/utf8@1.1.2': + resolution: {integrity: sha512-b1UQwcEZ4yCnMCD8DAL1VlbvBJE9/IX4FTIp7BG1xYpf29SLazLSrqUkj4w7Y5y7cCVP6E5tcqqcI0xemPkHug==} '@rolldown/binding-android-arm64@1.0.0-rc.17': resolution: {integrity: sha512-s70pVGhw4zqGeFnXWvAzJDlvxhlRollagdCCKRgOsgUOH3N1l0LIxf83AtGzmb5SiVM4Hjl5HyarMRfdfj3DaQ==} @@ -5629,8 +5663,8 @@ packages: proto-list@1.2.4: resolution: {integrity: sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==} - protobufjs@7.4.0: - resolution: {integrity: sha512-mRUWCc3KUU4w1jU8sGxICXH/gNS94DvI1gxqDvBzhj1JpcsimQkYiOJfwsPUykUI5ZaspFbSgmBLER8IrQ3tqw==} + protobufjs@7.6.5: + resolution: {integrity: sha512-/FPD0nUc9jH6rfFjji9IBqOz4pcSE3CsT1m7Ep6Mdb0LxSUMj8hgl6GomOvZzpNpAqqGaXA0P3VSrZLFzIhQrw==} engines: {node: '>=12.0.0'} pump@3.0.2: @@ -5656,11 +5690,11 @@ packages: queue-tick@1.0.1: resolution: {integrity: sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==} - quickjs-emscripten-core@0.31.0: - resolution: {integrity: sha512-oQz8p0SiKDBc1TC7ZBK2fr0GoSHZKA0jZIeXxsnCyCs4y32FStzCW4d1h6E1sE0uHDMbGITbk2zhNaytaoJwXQ==} + quickjs-emscripten-core@0.32.0: + resolution: {integrity: sha512-QFnPfjFey8EqknSrSxe1hZrf1/8z7/6s1QzGOmKo6++02r7QRRX7ZoyNaZh7JuVjWsVW87KnQrbZqnHkOAzUyg==} - quickjs-emscripten@0.31.0: - resolution: {integrity: sha512-K7Yt78aRPLjPcqv3fIuLW1jW3pvwO21B9pmFOolsjM/57ZhdVXBr51GqJpalgBlkPu9foAvhEAuuQPnvIGvLvQ==} + quickjs-emscripten@0.32.0: + resolution: {integrity: sha512-So0Sqw869y/S2oE3Nuc0uT3Dhqgvsj8FSrwBdsuTosVsG8ME5/OcudU1GxsrIFdFABgy17GHnTVO9TYV/bLQcA==} engines: {node: '>=16.0.0'} quickselect@3.0.0: @@ -7588,16 +7622,16 @@ snapshots: '@eslint/core': 0.17.0 levn: 0.4.1 - '@grpc/grpc-js@1.13.4': + '@grpc/grpc-js@1.14.4': dependencies: - '@grpc/proto-loader': 0.7.13 + '@grpc/proto-loader': 0.8.1 '@js-sdsl/ordered-map': 4.4.2 - '@grpc/proto-loader@0.7.13': + '@grpc/proto-loader@0.8.1': dependencies: lodash.camelcase: 4.3.0 long: 5.3.2 - protobufjs: 7.4.0 + protobufjs: 7.6.5 yargs: 17.7.2 '@humanfs/core@0.19.1': {} @@ -7759,23 +7793,23 @@ snapshots: '@istanbuljs/schema@0.1.3': {} - '@jitl/quickjs-ffi-types@0.31.0': {} + '@jitl/quickjs-ffi-types@0.32.0': {} - '@jitl/quickjs-wasmfile-debug-asyncify@0.31.0': + '@jitl/quickjs-wasmfile-debug-asyncify@0.32.0': dependencies: - '@jitl/quickjs-ffi-types': 0.31.0 + '@jitl/quickjs-ffi-types': 0.32.0 - '@jitl/quickjs-wasmfile-debug-sync@0.31.0': + '@jitl/quickjs-wasmfile-debug-sync@0.32.0': dependencies: - '@jitl/quickjs-ffi-types': 0.31.0 + '@jitl/quickjs-ffi-types': 0.32.0 - '@jitl/quickjs-wasmfile-release-asyncify@0.31.0': + '@jitl/quickjs-wasmfile-release-asyncify@0.32.0': dependencies: - '@jitl/quickjs-ffi-types': 0.31.0 + '@jitl/quickjs-ffi-types': 0.32.0 - '@jitl/quickjs-wasmfile-release-sync@0.31.0': + '@jitl/quickjs-wasmfile-release-sync@0.32.0': dependencies: - '@jitl/quickjs-ffi-types': 0.31.0 + '@jitl/quickjs-ffi-types': 0.32.0 '@jridgewell/gen-mapping@0.3.13': dependencies: @@ -7863,26 +7897,26 @@ snapshots: '@microsoft/tsdoc@0.16.0': {} - '@milaboratories/columns-collection-driver@0.2.1': + '@milaboratories/columns-collection-driver@0.2.4': dependencies: - '@milaboratories/helpers': 1.14.4 - '@milaboratories/pl-model-common': 1.47.1 + '@milaboratories/helpers': 1.14.5 + '@milaboratories/pl-model-common': 1.48.0 - '@milaboratories/computable@2.9.7': + '@milaboratories/computable@2.9.8': dependencies: '@milaboratories/pl-error-like': 1.12.10 - '@milaboratories/ts-helpers': 1.8.5 + '@milaboratories/ts-helpers': 1.8.6 '@types/node': 24.5.2 utility-types: 3.11.0 - '@milaboratories/graph-maker@1.6.1(@milaboratories/pl-model-common@1.47.1)(@platforma-sdk/model@1.80.2)(@platforma-sdk/ui-vue@1.80.4(@bytecodealliance/preview2-shim@0.17.8)(typescript@5.9.3))(d3-dispatch@3.0.1)(d3-path@3.1.0)(d3-scale-chromatic@3.1.0)(typescript@5.9.3)': + '@milaboratories/graph-maker@1.6.1(@milaboratories/pl-model-common@1.48.0)(@platforma-sdk/model@1.82.0)(@platforma-sdk/ui-vue@1.82.1(@bytecodealliance/preview2-shim@0.17.8)(typescript@5.9.3))(d3-dispatch@3.0.1)(d3-path@3.1.0)(d3-scale-chromatic@3.1.0)(typescript@5.9.3)': dependencies: '@ag-grid-community/core': 32.3.5 - '@milaboratories/helpers': 1.14.3 + '@milaboratories/helpers': 1.14.5 '@milaboratories/miplots4': 1.4.0(d3-dispatch@3.0.1)(d3-path@3.1.0)(d3-scale-chromatic@3.1.0) - '@milaboratories/pf-plots': 1.5.0(@milaboratories/pl-model-common@1.47.1)(@platforma-sdk/model@1.80.2) - '@platforma-sdk/model': 1.80.2 - '@platforma-sdk/ui-vue': 1.80.4(@bytecodealliance/preview2-shim@0.17.8)(typescript@5.9.3) + '@milaboratories/pf-plots': 1.5.0(@milaboratories/pl-model-common@1.48.0)(@platforma-sdk/model@1.82.0) + '@platforma-sdk/model': 1.82.0 + '@platforma-sdk/ui-vue': 1.82.1(@bytecodealliance/preview2-shim@0.17.8)(typescript@5.9.3) '@types/d3-hierarchy': 3.1.7 '@types/d3-scale': 4.0.9 '@vueuse/core': 13.9.0(vue@3.5.26(typescript@5.9.3)) @@ -7901,9 +7935,7 @@ snapshots: '@milaboratories/helpers@1.14.2': {} - '@milaboratories/helpers@1.14.3': {} - - '@milaboratories/helpers@1.14.4': {} + '@milaboratories/helpers@1.14.5': {} '@milaboratories/miplots4@1.4.0(d3-dispatch@3.0.1)(d3-path@3.1.0)(d3-scale-chromatic@3.1.0)': dependencies: @@ -7943,14 +7975,14 @@ snapshots: - d3-scale-chromatic - supports-color - '@milaboratories/pf-driver@1.8.2(@bytecodealliance/preview2-shim@0.17.8)': + '@milaboratories/pf-driver@1.9.1(@bytecodealliance/preview2-shim@0.17.8)': dependencies: - '@milaboratories/helpers': 1.14.4 - '@milaboratories/pframes-rs-node': 1.1.55 - '@milaboratories/pframes-rs-wasm': 1.1.55(@bytecodealliance/preview2-shim@0.17.8)(@milaboratories/pl-model-common@1.47.1)(@milaboratories/pl-model-middle-layer@1.30.13) - '@milaboratories/pl-model-common': 1.47.1 - '@milaboratories/pl-model-middle-layer': 1.30.13 - '@milaboratories/ts-helpers': 1.8.5 + '@milaboratories/helpers': 1.14.5 + '@milaboratories/pf-spec': 1.0.1(@bytecodealliance/preview2-shim@0.17.8) + '@milaboratories/pframes-rs-node': 1.1.56 + '@milaboratories/pl-model-common': 1.48.0 + '@milaboratories/pl-model-middle-layer': 1.32.0 + '@milaboratories/ts-helpers': 1.8.6 es-toolkit: 1.39.10 lru-cache: 11.2.2 transitivePeerDependencies: @@ -7958,36 +7990,41 @@ snapshots: - encoding - supports-color - '@milaboratories/pf-plots@1.5.0(@milaboratories/pl-model-common@1.47.1)(@platforma-sdk/model@1.80.2)': + '@milaboratories/pf-plots@1.5.0(@milaboratories/pl-model-common@1.48.0)(@platforma-sdk/model@1.82.0)': dependencies: - '@milaboratories/helpers': 1.14.3 - '@milaboratories/pl-model-common': 1.47.1 - '@platforma-sdk/model': 1.80.2 + '@milaboratories/helpers': 1.14.5 + '@milaboratories/pl-model-common': 1.48.0 + '@platforma-sdk/model': 1.82.0 canonicalize: 2.1.0 lodash: 4.17.21 - '@milaboratories/pf-spec-driver@1.4.21(@bytecodealliance/preview2-shim@0.17.8)': + '@milaboratories/pf-spec-driver@1.5.1(@bytecodealliance/preview2-shim@0.17.8)': dependencies: - '@milaboratories/helpers': 1.14.4 - '@milaboratories/pframes-rs-wasm': 1.1.55(@bytecodealliance/preview2-shim@0.17.8)(@milaboratories/pl-model-common@1.47.1)(@milaboratories/pl-model-middle-layer@1.30.13) - '@milaboratories/pl-model-common': 1.47.1 - '@milaboratories/pl-model-middle-layer': 1.30.13 + '@milaboratories/helpers': 1.14.5 + '@milaboratories/pf-spec': 1.0.1(@bytecodealliance/preview2-shim@0.17.8) + '@milaboratories/pl-model-common': 1.48.0 '@noble/hashes': 2.0.1 transitivePeerDependencies: - '@bytecodealliance/preview2-shim' - '@milaboratories/pframes-rs-node@1.1.55': + '@milaboratories/pf-spec@1.0.1(@bytecodealliance/preview2-shim@0.17.8)': + dependencies: + '@bytecodealliance/preview2-shim': 0.17.8 + '@milaboratories/pl-model-common': 1.48.0 + '@milaboratories/pl-model-middle-layer': 1.32.0 + + '@milaboratories/pframes-rs-node@1.1.56': dependencies: '@mapbox/node-pre-gyp': 2.0.3 '@milaboratories/helpers': 1.14.2 - '@milaboratories/pframes-rs-serv': 1.1.55 + '@milaboratories/pframes-rs-serv': 1.1.56 '@milaboratories/pl-model-common': 1.46.2 ulid: 3.0.2 transitivePeerDependencies: - encoding - supports-color - '@milaboratories/pframes-rs-serv@1.1.55': + '@milaboratories/pframes-rs-serv@1.1.56': dependencies: '@milaboratories/helpers': 1.14.2 '@milaboratories/pl-model-common': 1.46.2 @@ -7996,22 +8033,15 @@ snapshots: commander: 14.0.3 selfsigned: 5.5.0 - '@milaboratories/pframes-rs-wasip2@1.1.55': {} - - '@milaboratories/pframes-rs-wasm@1.1.55(@bytecodealliance/preview2-shim@0.17.8)(@milaboratories/pl-model-common@1.47.1)(@milaboratories/pl-model-middle-layer@1.30.13)': - dependencies: - '@bytecodealliance/preview2-shim': 0.17.8 - '@milaboratories/pframes-rs-wasip2': 1.1.55 - '@milaboratories/pl-model-common': 1.47.1 - '@milaboratories/pl-model-middle-layer': 1.30.13 + '@milaboratories/pframes-rs-wasip2@1.1.56': {} - '@milaboratories/pl-client@3.14.2': + '@milaboratories/pl-client@3.14.7': dependencies: - '@grpc/grpc-js': 1.13.4 + '@grpc/grpc-js': 1.14.4 '@milaboratories/pl-http': 1.2.4 - '@milaboratories/pl-model-common': 1.47.1 - '@milaboratories/ts-helpers': 1.8.5 - '@protobuf-ts/grpc-transport': 2.11.1(@grpc/grpc-js@1.13.4) + '@milaboratories/pl-model-common': 1.48.0 + '@milaboratories/ts-helpers': 1.8.6 + '@protobuf-ts/grpc-transport': 2.11.1(@grpc/grpc-js@1.14.4) '@protobuf-ts/runtime': 2.11.1 '@protobuf-ts/runtime-rpc': 2.11.1 canonicalize: 2.1.0 @@ -8023,19 +8053,19 @@ snapshots: utility-types: 3.11.0 yaml: 2.8.1 - '@milaboratories/pl-config@1.8.4': + '@milaboratories/pl-config@1.8.5': dependencies: - '@milaboratories/ts-helpers': 1.8.5 + '@milaboratories/ts-helpers': 1.8.6 upath: 2.0.1 yaml: 2.8.1 - '@milaboratories/pl-deployments@3.0.12': + '@milaboratories/pl-deployments@3.0.16': dependencies: - '@milaboratories/pl-config': 1.8.4 - '@milaboratories/pl-healthcheck': 1.0.3 + '@milaboratories/pl-config': 1.8.5 + '@milaboratories/pl-healthcheck': 1.0.5 '@milaboratories/pl-http': 1.2.4 - '@milaboratories/pl-model-common': 1.47.1 - '@milaboratories/ts-helpers': 1.8.5 + '@milaboratories/pl-model-common': 1.48.0 + '@milaboratories/ts-helpers': 1.8.6 decompress: 4.2.1 ssh2: 1.16.0 tar: 7.4.3 @@ -8044,16 +8074,16 @@ snapshots: yaml: 2.8.1 zod: 3.25.76 - '@milaboratories/pl-drivers@1.16.10': + '@milaboratories/pl-drivers@1.16.16': dependencies: - '@grpc/grpc-js': 1.13.4 - '@milaboratories/computable': 2.9.7 - '@milaboratories/helpers': 1.14.4 - '@milaboratories/pl-client': 3.14.2 - '@milaboratories/pl-model-common': 1.47.1 - '@milaboratories/pl-tree': 1.13.1 - '@milaboratories/ts-helpers': 1.8.5 - '@protobuf-ts/grpc-transport': 2.11.1(@grpc/grpc-js@1.13.4) + '@grpc/grpc-js': 1.14.4 + '@milaboratories/computable': 2.9.8 + '@milaboratories/helpers': 1.14.5 + '@milaboratories/pl-client': 3.14.7 + '@milaboratories/pl-model-common': 1.48.0 + '@milaboratories/pl-tree': 1.13.7 + '@milaboratories/ts-helpers': 1.8.6 + '@protobuf-ts/grpc-transport': 2.11.1(@grpc/grpc-js@1.14.4) '@protobuf-ts/plugin': 2.11.1 '@protobuf-ts/runtime': 2.11.1 '@protobuf-ts/runtime-rpc': 2.11.1 @@ -8072,17 +8102,17 @@ snapshots: json-stringify-safe: 5.0.1 zod: 3.25.76 - '@milaboratories/pl-errors@1.4.31': + '@milaboratories/pl-errors@1.4.36': dependencies: - '@milaboratories/pl-client': 3.14.2 - '@milaboratories/ts-helpers': 1.8.5 + '@milaboratories/pl-client': 3.14.7 + '@milaboratories/ts-helpers': 1.8.6 zod: 3.25.76 - '@milaboratories/pl-healthcheck@1.0.3': + '@milaboratories/pl-healthcheck@1.0.5': dependencies: - '@grpc/grpc-js': 1.13.4 - '@milaboratories/ts-helpers': 1.8.5 - '@protobuf-ts/grpc-transport': 2.11.1(@grpc/grpc-js@1.13.4) + '@grpc/grpc-js': 1.14.4 + '@milaboratories/ts-helpers': 1.8.6 + '@protobuf-ts/grpc-transport': 2.11.1(@grpc/grpc-js@1.14.4) '@protobuf-ts/runtime': 2.11.1 '@protobuf-ts/runtime-rpc': 2.11.1 @@ -8090,34 +8120,33 @@ snapshots: dependencies: undici: 7.16.0 - '@milaboratories/pl-middle-layer@1.66.4(@bytecodealliance/preview2-shim@0.17.8)(@types/node@24.5.2)': - dependencies: - '@milaboratories/columns-collection-driver': 0.2.1 - '@milaboratories/computable': 2.9.7 - '@milaboratories/helpers': 1.14.4 - '@milaboratories/pf-driver': 1.8.2(@bytecodealliance/preview2-shim@0.17.8) - '@milaboratories/pf-spec-driver': 1.4.21(@bytecodealliance/preview2-shim@0.17.8) - '@milaboratories/pframes-rs-node': 1.1.55 - '@milaboratories/pframes-rs-wasm': 1.1.55(@bytecodealliance/preview2-shim@0.17.8)(@milaboratories/pl-model-common@1.47.1)(@milaboratories/pl-model-middle-layer@1.30.13) - '@milaboratories/pl-client': 3.14.2 - '@milaboratories/pl-deployments': 3.0.12 - '@milaboratories/pl-drivers': 1.16.10 - '@milaboratories/pl-errors': 1.4.31 + '@milaboratories/pl-middle-layer@1.67.3(@bytecodealliance/preview2-shim@0.17.8)(@types/node@24.5.2)': + dependencies: + '@milaboratories/columns-collection-driver': 0.2.4 + '@milaboratories/computable': 2.9.8 + '@milaboratories/helpers': 1.14.5 + '@milaboratories/pf-driver': 1.9.1(@bytecodealliance/preview2-shim@0.17.8) + '@milaboratories/pf-spec-driver': 1.5.1(@bytecodealliance/preview2-shim@0.17.8) + '@milaboratories/pframes-rs-node': 1.1.56 + '@milaboratories/pl-client': 3.14.7 + '@milaboratories/pl-deployments': 3.0.16 + '@milaboratories/pl-drivers': 1.16.16 + '@milaboratories/pl-errors': 1.4.36 '@milaboratories/pl-http': 1.2.4 - '@milaboratories/pl-model-backend': 1.4.16 - '@milaboratories/pl-model-common': 1.47.1 - '@milaboratories/pl-model-middle-layer': 1.30.13 - '@milaboratories/pl-tree': 1.13.1 + '@milaboratories/pl-model-backend': 1.4.21 + '@milaboratories/pl-model-common': 1.48.0 + '@milaboratories/pl-model-middle-layer': 1.32.0 + '@milaboratories/pl-tree': 1.13.7 '@milaboratories/resolve-helper': 1.1.3 - '@milaboratories/ts-helpers': 1.8.5 - '@platforma-sdk/block-tools': 2.12.7(@types/node@24.5.2) - '@platforma-sdk/model': 1.80.2 - '@platforma-sdk/workflow-tengo': 6.7.2 + '@milaboratories/ts-helpers': 1.8.6 + '@platforma-sdk/block-tools': 2.14.3(@types/node@24.5.2) + '@platforma-sdk/model': 1.82.0 + '@platforma-sdk/workflow-tengo': 6.8.2 canonicalize: 2.1.0 denque: 2.1.0 es-toolkit: 1.39.10 lru-cache: 11.2.2 - quickjs-emscripten: 0.31.0 + quickjs-emscripten: 0.32.0 semver: 7.8.5 undici: 7.16.0 utility-types: 3.11.0 @@ -8130,9 +8159,9 @@ snapshots: - encoding - supports-color - '@milaboratories/pl-model-backend@1.4.16': + '@milaboratories/pl-model-backend@1.4.21': dependencies: - '@milaboratories/pl-client': 3.14.2 + '@milaboratories/pl-client': 3.14.7 canonicalize: 2.1.0 zod: 3.25.76 @@ -8143,43 +8172,43 @@ snapshots: canonicalize: 2.1.0 zod: 3.25.76 - '@milaboratories/pl-model-common@1.47.1': + '@milaboratories/pl-model-common@1.48.0': dependencies: - '@milaboratories/helpers': 1.14.4 + '@milaboratories/helpers': 1.14.5 '@milaboratories/pl-error-like': 1.12.10 canonicalize: 2.1.0 es-toolkit: 1.39.10 zod: 3.25.76 - '@milaboratories/pl-model-middle-layer@1.30.13': + '@milaboratories/pl-model-middle-layer@1.30.7': dependencies: - '@milaboratories/helpers': 1.14.4 - '@milaboratories/pl-model-common': 1.47.1 + '@milaboratories/helpers': 1.14.2 + '@milaboratories/pl-model-common': 1.46.2 es-toolkit: 1.39.10 utility-types: 3.11.0 zod: 3.25.76 - '@milaboratories/pl-model-middle-layer@1.30.7': + '@milaboratories/pl-model-middle-layer@1.32.0': dependencies: - '@milaboratories/helpers': 1.14.2 - '@milaboratories/pl-model-common': 1.46.2 + '@milaboratories/helpers': 1.14.5 + '@milaboratories/pl-model-common': 1.48.0 es-toolkit: 1.39.10 utility-types: 3.11.0 zod: 3.25.76 - '@milaboratories/pl-tree@1.13.1': + '@milaboratories/pl-tree@1.13.7': dependencies: - '@milaboratories/computable': 2.9.7 - '@milaboratories/pl-client': 3.14.2 - '@milaboratories/pl-errors': 1.4.31 - '@milaboratories/ts-helpers': 1.8.5 + '@milaboratories/computable': 2.9.8 + '@milaboratories/pl-client': 3.14.7 + '@milaboratories/pl-errors': 1.4.36 + '@milaboratories/ts-helpers': 1.8.6 denque: 2.1.0 utility-types: 3.11.0 zod: 3.25.76 - '@milaboratories/ptabler-expression-js@1.2.35': + '@milaboratories/ptabler-expression-js@1.2.38': dependencies: - '@platforma-open/milaboratories.software-ptabler.schema': 1.15.19 + '@platforma-open/milaboratories.software-ptabler.schema': 1.15.22 '@milaboratories/resolve-helper@1.1.3': {} @@ -8189,9 +8218,9 @@ snapshots: '@milaboratories/tengo-tester@1.6.4': {} - '@milaboratories/ts-builder@1.6.0(@types/node@24.5.2)(rollup@4.55.1)(vue@3.5.24(typescript@5.9.3))(yaml@2.8.1)': + '@milaboratories/ts-builder@1.7.0(@types/node@24.5.2)(rollup@4.55.1)(vue@3.5.24(typescript@5.9.3))(yaml@2.8.1)': dependencies: - '@milaboratories/ts-configs': 1.3.0 + '@milaboratories/ts-configs': 1.4.0 '@vitejs/plugin-vue': 6.0.5(vite@8.0.10(@types/node@24.5.2)(yaml@2.8.1))(vue@3.5.24(typescript@5.9.3)) commander: 15.0.0 jsonc-parser: 3.3.1 @@ -8230,9 +8259,9 @@ snapshots: - vue - yaml - '@milaboratories/ts-builder@1.6.0(@types/node@24.5.2)(rollup@4.55.1)(vue@3.5.26(typescript@5.6.3))(yaml@2.8.1)': + '@milaboratories/ts-builder@1.7.0(@types/node@24.5.2)(rollup@4.55.1)(vue@3.5.26(typescript@5.6.3))(yaml@2.8.1)': dependencies: - '@milaboratories/ts-configs': 1.3.0 + '@milaboratories/ts-configs': 1.4.0 '@vitejs/plugin-vue': 6.0.5(vite@8.0.10(@types/node@24.5.2)(yaml@2.8.1))(vue@3.5.26(typescript@5.6.3)) commander: 15.0.0 jsonc-parser: 3.3.1 @@ -8271,9 +8300,9 @@ snapshots: - vue - yaml - '@milaboratories/ts-builder@1.6.0(@types/node@24.5.2)(rollup@4.55.1)(vue@3.5.26(typescript@5.9.3))(yaml@2.8.1)': + '@milaboratories/ts-builder@1.7.0(@types/node@24.5.2)(rollup@4.55.1)(vue@3.5.26(typescript@5.9.3))(yaml@2.8.1)': dependencies: - '@milaboratories/ts-configs': 1.3.0 + '@milaboratories/ts-configs': 1.4.0 '@vitejs/plugin-vue': 6.0.5(vite@8.0.10(@types/node@24.5.2)(yaml@2.8.1))(vue@3.5.26(typescript@5.9.3)) commander: 15.0.0 jsonc-parser: 3.3.1 @@ -8312,18 +8341,18 @@ snapshots: - vue - yaml - '@milaboratories/ts-configs@1.3.0': {} + '@milaboratories/ts-configs@1.4.0': {} - '@milaboratories/ts-helpers@1.8.5': + '@milaboratories/ts-helpers@1.8.6': dependencies: - '@milaboratories/helpers': 1.14.4 + '@milaboratories/helpers': 1.14.5 canonicalize: 2.1.0 denque: 2.1.0 - '@milaboratories/uikit@2.15.16(typescript@5.9.3)': + '@milaboratories/uikit@2.15.24(typescript@5.9.3)': dependencies: - '@milaboratories/helpers': 1.14.4 - '@platforma-sdk/model': 1.80.2 + '@milaboratories/helpers': 1.14.5 + '@platforma-sdk/model': 1.82.0 '@types/d3-array': 3.2.2 '@types/d3-axis': 3.0.6 '@types/d3-scale': 4.0.9 @@ -8615,13 +8644,13 @@ snapshots: '@platforma-open/milaboratories.runenv-python-3.12.10-rapids': 1.4.4 '@platforma-open/milaboratories.runenv-python-3.12.10-sccoda': 1.3.5 - '@platforma-open/milaboratories.software-ptabler.schema@1.15.19': + '@platforma-open/milaboratories.software-ptabler.schema@1.15.22': dependencies: - '@milaboratories/pl-model-common': 1.47.1 + '@milaboratories/pl-model-common': 1.48.0 - '@platforma-open/milaboratories.software-ptabler@2.1.6': {} + '@platforma-open/milaboratories.software-ptabler@2.1.8': {} - '@platforma-open/milaboratories.software-ptexter@1.2.3': {} + '@platforma-open/milaboratories.software-ptexter@1.2.4': {} '@platforma-open/milaboratories.software-small-binaries.hello-world-py@1.0.10': {} @@ -8641,19 +8670,21 @@ snapshots: '@platforma-open/milaboratories.software-small-binaries.mnz-client': 1.6.5 '@platforma-open/milaboratories.software-small-binaries.table-converter': 1.3.5 - '@platforma-sdk/block-tools@2.12.7(@types/node@24.5.2)': + '@platforma-sdk/block-kind@1.1.0': {} + + '@platforma-sdk/block-tools@2.14.3(@types/node@24.5.2)': dependencies: '@aws-sdk/client-ecr-public': 3.859.0 '@aws-sdk/client-s3': 3.859.0 '@inquirer/prompts': 7.10.1(@types/node@24.5.2) '@milaboratories/pl-http': 1.2.4 - '@milaboratories/pl-model-backend': 1.4.16 - '@milaboratories/pl-model-common': 1.47.1 - '@milaboratories/pl-model-middle-layer': 1.30.13 + '@milaboratories/pl-model-backend': 1.4.21 + '@milaboratories/pl-model-common': 1.48.0 + '@milaboratories/pl-model-middle-layer': 1.32.0 '@milaboratories/resolve-helper': 1.1.3 - '@milaboratories/ts-helpers': 1.8.5 + '@milaboratories/ts-helpers': 1.8.6 '@platforma-sdk/blocks-deps-updater': 2.2.0 - '@platforma-sdk/package-builder-lib': 1.2.0 + '@platforma-sdk/package-builder-lib': 1.3.0 canonicalize: 2.1.0 commander: 15.0.0 lru-cache: 11.2.2 @@ -8670,13 +8701,13 @@ snapshots: dependencies: yaml: 2.8.1 - '@platforma-sdk/model@1.80.2': + '@platforma-sdk/model@1.82.0': dependencies: - '@milaboratories/helpers': 1.14.4 + '@milaboratories/helpers': 1.14.5 '@milaboratories/pl-error-like': 1.12.10 - '@milaboratories/pl-model-common': 1.47.1 - '@milaboratories/pl-model-middle-layer': 1.30.13 - '@milaboratories/ptabler-expression-js': 1.2.35 + '@milaboratories/pl-model-common': 1.48.0 + '@milaboratories/pl-model-middle-layer': 1.32.0 + '@milaboratories/ptabler-expression-js': 1.2.38 canonicalize: 2.1.0 es-toolkit: 1.39.10 fast-json-patch: 3.1.1 @@ -8684,7 +8715,7 @@ snapshots: utility-types: 3.11.0 zod: 3.25.76 - '@platforma-sdk/package-builder-lib@1.2.0': + '@platforma-sdk/package-builder-lib@1.3.0': dependencies: '@aws-sdk/client-s3': 3.859.0 '@aws-sdk/lib-storage': 3.859.0(@aws-sdk/client-s3@3.859.0) @@ -8697,22 +8728,22 @@ snapshots: transitivePeerDependencies: - aws-crt - '@platforma-sdk/tengo-builder@4.0.18': + '@platforma-sdk/tengo-builder@4.0.23': dependencies: - '@milaboratories/pl-model-backend': 1.4.16 + '@milaboratories/pl-model-backend': 1.4.21 '@milaboratories/resolve-helper': 1.1.3 '@milaboratories/tengo-tester': 1.6.4 - '@milaboratories/ts-helpers': 1.8.5 + '@milaboratories/ts-helpers': 1.8.6 commander: 15.0.0 winston: 3.17.0 - '@platforma-sdk/test@1.80.5(@bytecodealliance/preview2-shim@0.17.8)(@types/node@24.5.2)(vite@6.2.3(@types/node@24.5.2)(lightningcss@1.32.0)(yaml@2.8.1))': + '@platforma-sdk/test@1.82.4(@bytecodealliance/preview2-shim@0.17.8)(@types/node@24.5.2)(vite@6.2.3(@types/node@24.5.2)(lightningcss@1.32.0)(yaml@2.8.1))': dependencies: - '@milaboratories/computable': 2.9.7 - '@milaboratories/pl-client': 3.14.2 - '@milaboratories/pl-middle-layer': 1.66.4(@bytecodealliance/preview2-shim@0.17.8)(@types/node@24.5.2) - '@milaboratories/pl-tree': 1.13.1 - '@platforma-sdk/model': 1.80.2 + '@milaboratories/computable': 2.9.8 + '@milaboratories/pl-client': 3.14.7 + '@milaboratories/pl-middle-layer': 1.67.3(@bytecodealliance/preview2-shim@0.17.8)(@types/node@24.5.2) + '@milaboratories/pl-tree': 1.13.7 + '@platforma-sdk/model': 1.82.0 '@vitest/coverage-istanbul': 4.1.5(vitest@4.0.16(@types/node@24.5.2)(lightningcss@1.32.0)(yaml@2.8.1)) vitest: 4.1.5(@types/node@24.5.2)(@vitest/coverage-istanbul@4.1.5)(vite@6.2.3(@types/node@24.5.2)(lightningcss@1.32.0)(yaml@2.8.1)) transitivePeerDependencies: @@ -8733,13 +8764,13 @@ snapshots: - supports-color - vite - '@platforma-sdk/test@1.80.5(@bytecodealliance/preview2-shim@0.17.8)(@types/node@24.5.2)(vite@8.0.10(@types/node@24.5.2)(yaml@2.8.1))': + '@platforma-sdk/test@1.82.4(@bytecodealliance/preview2-shim@0.17.8)(@types/node@24.5.2)(vite@8.0.10(@types/node@24.5.2)(yaml@2.8.1))': dependencies: - '@milaboratories/computable': 2.9.7 - '@milaboratories/pl-client': 3.14.2 - '@milaboratories/pl-middle-layer': 1.66.4(@bytecodealliance/preview2-shim@0.17.8)(@types/node@24.5.2) - '@milaboratories/pl-tree': 1.13.1 - '@platforma-sdk/model': 1.80.2 + '@milaboratories/computable': 2.9.8 + '@milaboratories/pl-client': 3.14.7 + '@milaboratories/pl-middle-layer': 1.67.3(@bytecodealliance/preview2-shim@0.17.8)(@types/node@24.5.2) + '@milaboratories/pl-tree': 1.13.7 + '@platforma-sdk/model': 1.82.0 '@vitest/coverage-istanbul': 4.1.5(vitest@4.1.5) vitest: 4.1.5(@types/node@24.5.2)(@vitest/coverage-istanbul@4.1.5)(vite@8.0.10(@types/node@24.5.2)(yaml@2.8.1)) transitivePeerDependencies: @@ -8760,13 +8791,13 @@ snapshots: - supports-color - vite - '@platforma-sdk/ui-vue@1.80.4(@bytecodealliance/preview2-shim@0.17.8)(typescript@5.9.3)': + '@platforma-sdk/ui-vue@1.82.1(@bytecodealliance/preview2-shim@0.17.8)(typescript@5.9.3)': dependencies: - '@milaboratories/columns-collection-driver': 0.2.1 - '@milaboratories/pf-spec-driver': 1.4.21(@bytecodealliance/preview2-shim@0.17.8) - '@milaboratories/pl-model-common': 1.47.1 - '@milaboratories/uikit': 2.15.16(typescript@5.9.3) - '@platforma-sdk/model': 1.80.2 + '@milaboratories/columns-collection-driver': 0.2.4 + '@milaboratories/pf-spec-driver': 1.5.1(@bytecodealliance/preview2-shim@0.17.8) + '@milaboratories/pl-model-common': 1.48.0 + '@milaboratories/uikit': 2.15.24(typescript@5.9.3) + '@platforma-sdk/model': 1.82.0 '@types/d3-format': 3.0.4 '@types/node': 24.5.2 '@types/semver': 7.7.1 @@ -8797,17 +8828,17 @@ snapshots: - typescript - universal-cookie - '@platforma-sdk/workflow-tengo@6.7.2': + '@platforma-sdk/workflow-tengo@6.8.2': dependencies: - '@milaboratories/pframes-rs-wasip2': 1.1.55 + '@milaboratories/pframes-rs-wasip2': 1.1.56 '@milaboratories/software-pframes-conv': 2.2.9 - '@platforma-open/milaboratories.software-ptabler': 2.1.6 - '@platforma-open/milaboratories.software-ptexter': 1.2.3 + '@platforma-open/milaboratories.software-ptabler': 2.1.8 + '@platforma-open/milaboratories.software-ptexter': 1.2.4 '@platforma-open/milaboratories.software-small-binaries': 2.1.1 - '@protobuf-ts/grpc-transport@2.11.1(@grpc/grpc-js@1.13.4)': + '@protobuf-ts/grpc-transport@2.11.1(@grpc/grpc-js@1.14.4)': dependencies: - '@grpc/grpc-js': 1.13.4 + '@grpc/grpc-js': 1.14.4 '@protobuf-ts/runtime': 2.11.1 '@protobuf-ts/runtime-rpc': 2.11.1 @@ -8834,24 +8865,21 @@ snapshots: '@protobufjs/base64@1.1.2': {} - '@protobufjs/codegen@2.0.4': {} + '@protobufjs/codegen@2.0.5': {} - '@protobufjs/eventemitter@1.1.0': {} + '@protobufjs/eventemitter@1.1.1': {} - '@protobufjs/fetch@1.1.0': + '@protobufjs/fetch@1.1.1': dependencies: '@protobufjs/aspromise': 1.1.2 - '@protobufjs/inquire': 1.1.0 '@protobufjs/float@1.0.2': {} - '@protobufjs/inquire@1.1.0': {} - '@protobufjs/path@1.1.2': {} '@protobufjs/pool@1.1.0': {} - '@protobufjs/utf8@1.1.0': {} + '@protobufjs/utf8@1.1.2': {} '@rolldown/binding-android-arm64@1.0.0-rc.17': optional: true @@ -13456,18 +13484,17 @@ snapshots: proto-list@1.2.4: {} - protobufjs@7.4.0: + protobufjs@7.6.5: dependencies: '@protobufjs/aspromise': 1.1.2 '@protobufjs/base64': 1.1.2 - '@protobufjs/codegen': 2.0.4 - '@protobufjs/eventemitter': 1.1.0 - '@protobufjs/fetch': 1.1.0 + '@protobufjs/codegen': 2.0.5 + '@protobufjs/eventemitter': 1.1.1 + '@protobufjs/fetch': 1.1.1 '@protobufjs/float': 1.0.2 - '@protobufjs/inquire': 1.1.0 '@protobufjs/path': 1.1.2 '@protobufjs/pool': 1.1.0 - '@protobufjs/utf8': 1.1.0 + '@protobufjs/utf8': 1.1.2 '@types/node': 24.5.2 long: 5.3.2 @@ -13490,17 +13517,17 @@ snapshots: queue-tick@1.0.1: {} - quickjs-emscripten-core@0.31.0: + quickjs-emscripten-core@0.32.0: dependencies: - '@jitl/quickjs-ffi-types': 0.31.0 + '@jitl/quickjs-ffi-types': 0.32.0 - quickjs-emscripten@0.31.0: + quickjs-emscripten@0.32.0: dependencies: - '@jitl/quickjs-wasmfile-debug-asyncify': 0.31.0 - '@jitl/quickjs-wasmfile-debug-sync': 0.31.0 - '@jitl/quickjs-wasmfile-release-asyncify': 0.31.0 - '@jitl/quickjs-wasmfile-release-sync': 0.31.0 - quickjs-emscripten-core: 0.31.0 + '@jitl/quickjs-wasmfile-debug-asyncify': 0.32.0 + '@jitl/quickjs-wasmfile-debug-sync': 0.32.0 + '@jitl/quickjs-wasmfile-release-asyncify': 0.32.0 + '@jitl/quickjs-wasmfile-release-sync': 0.32.0 + quickjs-emscripten-core: 0.32.0 quickselect@3.0.0: {} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index cca9457..7a4fd8b 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -1,5 +1,6 @@ packages: - block + - kind - model - software - test @@ -8,16 +9,17 @@ packages: catalog: # SDK packages - EXACT VERSIONS (no ^ or ~) - '@milaboratories/ts-builder': 1.6.0 - '@milaboratories/ts-configs': 1.3.0 - '@platforma-sdk/workflow-tengo': 6.7.2 - '@platforma-sdk/model': 1.80.2 - '@platforma-sdk/ui-vue': 1.80.4 - '@platforma-sdk/tengo-builder': 4.0.18 - '@platforma-sdk/package-builder': 3.14.1 - '@platforma-sdk/block-tools': 2.12.7 - '@platforma-sdk/test': 1.80.5 - '@milaboratories/helpers': 1.14.4 + '@milaboratories/ts-builder': 1.7.0 + '@milaboratories/ts-configs': 1.4.0 + '@platforma-sdk/workflow-tengo': 6.8.2 + '@platforma-sdk/model': 1.82.0 + '@platforma-sdk/ui-vue': 1.82.1 + '@platforma-sdk/tengo-builder': 4.0.23 + '@platforma-sdk/package-builder': 3.15.0 + '@platforma-sdk/block-tools': 2.14.3 + '@platforma-sdk/block-kind': 1.1.0 + '@platforma-sdk/test': 1.82.4 + '@milaboratories/helpers': 1.14.5 '@milaboratories/graph-maker': 1.6.1 '@milaboratories/strings': 0.1.2 @@ -30,5 +32,7 @@ catalog: '@changesets/cli': ^2.29.8 # Block-specific dependencies + # pinned to the copy already in the graph, so the kind does not pull a second one + 'es-toolkit': 1.39.10 "@platforma-open/milaboratories.runenv-python-3": ^1.7.5 shx: ~0.4.0 From 063097cf23b060ad7f7db5f544c72760a536301e Mon Sep 17 00:00:00 2001 From: Alexandr Date: Wed, 19 Aug 2026 21:59:52 +0200 Subject: [PATCH 2/6] feat: define the rarefaction init-params contract MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Eight optional fields: the dataset reference, the three analysis knobs, the per-process resource limits, and the two labels. tableState and graphState stay out — a template carrying them would restore one user's scroll position and plot config onto another user's block. The CONTRACT table is checked against BlockParams by a satisfies clause, so a field added to the contract without a runtime check fails to compile. Every field being optional is what makes that guard necessary: a parser that simply forgot one would otherwise return a valid BlockParams and say nothing. --- kind/src/index.ts | 15 +++++++++ kind/src/params.ts | 80 ++++++++++++++++++++++++++++++++++++++++++++++ kind/src/types.ts | 36 +++++++++++++++++++++ 3 files changed, 131 insertions(+) create mode 100644 kind/src/index.ts create mode 100644 kind/src/params.ts create mode 100644 kind/src/types.ts diff --git a/kind/src/index.ts b/kind/src/index.ts new file mode 100644 index 0000000..83b4af3 --- /dev/null +++ b/kind/src/index.ts @@ -0,0 +1,15 @@ +import { defineBlockKind } from "@platforma-sdk/block-kind"; +import { name, version } from "../package.json" with { type: "json" }; +import { parseInitializationParams } from "./params"; +import type { BlockParams } from "./types"; + +export type { BlockParams } from "./types"; + +// Identity (`name`/`version`) comes from this package's own `package.json`, so +// the on-wire `{name}@{version}` reference can never drift from what npm +// publishes; the bundler inlines the JSON import. +export const kind = defineBlockKind({ + name, + version, + parseInitializationParams, +}); diff --git a/kind/src/params.ts b/kind/src/params.ts new file mode 100644 index 0000000..14724ed --- /dev/null +++ b/kind/src/params.ts @@ -0,0 +1,80 @@ +import { assertParamsObject } from "@platforma-sdk/block-kind"; +import { isPlRef } from "@platforma-sdk/model"; +import { isBoolean, isString } from "es-toolkit"; +import type { BlockParams } from "./types"; + +/** + * The contract at runtime, for params that arrive from a template file rather + * than from typed code. + * + * Each field the contract names is read and checked; a key it does not name is + * dropped by never being read, so it needs no rejection here. Params written + * against a different version of the contract are caught by the version in the + * template entry's `{name}@{selector}` reference, not by a key-set check. + */ +export function parseInitializationParams(value: unknown): BlockParams { + assertParamsObject(value); + + const params: Record = {}; + for (const [field, { is, must }] of Object.entries(CONTRACT)) { + const raw = value[field]; + if (raw === undefined) continue; + if (!is(raw)) throw new Error(`'${field}' must be ${must}.`); + params[field] = raw; + } + // Every value placed here passed its own field's guard, and `CONTRACT` is + // proven exhaustive over `BlockParams` by the `satisfies` below. + return params as BlockParams; +} + +// --------------------------------------------------------------------------- +// Internals +// --------------------------------------------------------------------------- + +type Guard = (value: unknown) => value is T; + +/** A guard plus how to finish the sentence "'field' must be …". */ +type Check = { readonly is: Guard; readonly must: string }; + +function check(is: Guard, must: string): Check { + return { is, must }; +} + +/** `Number.isInteger` already rejects non-numbers; this only adds the narrowing. */ +const isInteger: Guard = (v): v is number => Number.isInteger(v); + +const REF = "a reference to another block's output"; + +/** + * The contract, field by field, at runtime. + * + * `datasetRef` is checked with `isPlRef` rather than a restatement of the shape, + * so a hand-written entry is held to exactly what the rest of the system calls a + * reference — including the `__isRef` marker the block dependency tree is + * rebuilt from, whose absence would produce a block wired to nothing. + * + * `numPoints` and `numIterations` are checked only as strings, which is what the + * block stores: the UI binds them to text inputs, so a half-typed value is an + * ordinary state, and the block's own `args` is what holds them to whole numbers + * under 10000. Rejecting a non-numeric string here would refuse a state the + * editor reaches and can export. + * + * The `satisfies` clause is the drift guard: it demands an entry for every key + * `BlockParams` declares, and types each guard against that key's own type. Add + * a field to the contract and this stops compiling until the check exists — + * which matters here because every field is optional, so a parser that simply + * forgot one would otherwise return a valid `BlockParams` and say nothing. + */ +const CONTRACT = { + datasetRef: check(isPlRef, REF), + + numPoints: check(isString, "a string"), + numIterations: check(isString, "a string"), + extrapolation: check(isBoolean, "a boolean"), + + mem: check(isInteger, "an integer"), + cpu: check(isInteger, "an integer"), + + datasetLabel: check(isString, "a string"), + customBlockLabel: check(isString, "a string"), +} satisfies { [K in keyof BlockParams]-?: Check> }; diff --git a/kind/src/types.ts b/kind/src/types.ts new file mode 100644 index 0000000..647fa63 --- /dev/null +++ b/kind/src/types.ts @@ -0,0 +1,36 @@ +import type { PlRef } from "@platforma-sdk/model"; + +/** + * This block's init-params contract — the shape a block of this kind receives + * at creation, and exactly what a project template serializes for it: which + * dataset the curves are drawn from, the knobs that decide what gets computed, + * and the naming shown on the block. + * + * Every field is optional. A block with no dataset picked is an ordinary state + * the UI reaches, so export has to be able to write it and apply has to be able + * to take it back; a contract that demanded `datasetRef` would make export and + * apply stop being inverses. Whether a configuration is runnable is settled by + * the model's `args` lambda, not here. + * + * `tableState` and `graphState` are absent: they are view state, which the + * projection never hands out. + */ +export type BlockParams = { + // Input wiring — a PlRef a template engine fills from an earlier entry's output. + datasetRef?: PlRef; + + // Analysis configuration — the recipe a template exists to reproduce. + numPoints?: string; + numIterations?: string; + extrapolation?: boolean; + + // Per-process resource limits — a deliberate user choice, set in the block's + // advanced settings, and part of the recipe a template reproduces. A block + // created without a template takes the model's defaults instead. + mem?: number; + cpu?: number; + + // Display naming. + datasetLabel?: string; + customBlockLabel?: string; +}; From 70f6efb9e3e67de48892e923fc42484eebfe59b7 Mon Sep 17 00:00:00 2001 From: Alexandr Date: Wed, 19 Aug 2026 21:59:52 +0200 Subject: [PATCH 3/6] feat: wire the model to its kind The data model is built with the kind, so its BlockParams type flows into init, and the model records which kind it implements. templateParams projects the same eight fields back out, so export and apply are inverses. --- model/src/index.ts | 43 ++++++++++++++++++++++++++++++++----------- 1 file changed, 32 insertions(+), 11 deletions(-) diff --git a/model/src/index.ts b/model/src/index.ts index 2c00d9c..df25dfb 100644 --- a/model/src/index.ts +++ b/model/src/index.ts @@ -6,6 +6,7 @@ import { createPlDataTableV2, DataModelBuilder, } from "@platforma-sdk/model"; +import { kind } from "@platforma-open/milaboratories.rarefaction.kind"; import { getDefaultBlockLabel } from "./label"; import type { BlockArgs, BlockData, LegacyBlockArgs, LegacyBlockUiState } from "./types"; @@ -17,7 +18,7 @@ const defaultGraphState = (): BlockData["graphState"] => ({ currentTab: "settings", }); -const blockDataModel = new DataModelBuilder() +const blockDataModel = new DataModelBuilder({ kind }) .from("V20260518") .upgradeLegacy(({ args, uiState }) => ({ customBlockLabel: args?.customBlockLabel ?? "", @@ -33,15 +34,17 @@ const blockDataModel = new DataModelBuilder() tableState: uiState?.tableState ?? createPlDataTableStateV2(), graphState: uiState?.graphState ?? defaultGraphState(), })) - .init(() => ({ - customBlockLabel: "", - datasetRef: undefined, - datasetLabel: undefined, - numPoints: "20", - numIterations: "100", - extrapolation: true, - mem: 8, - cpu: 4, + // `params` is absent when a block is created by hand rather than from a + // template, so every field the contract carries keeps its own default. + .init(({ params }) => ({ + customBlockLabel: params?.customBlockLabel ?? "", + datasetRef: params?.datasetRef, + datasetLabel: params?.datasetLabel, + numPoints: params?.numPoints ?? "20", + numIterations: params?.numIterations ?? "100", + extrapolation: params?.extrapolation ?? true, + mem: params?.mem ?? 8, + cpu: params?.cpu ?? 4, tableState: createPlDataTableStateV2(), graphState: defaultGraphState(), })); @@ -63,7 +66,25 @@ function deriveSubtitle(data: BlockData): string { ); } -export const platforma = BlockModelV3.create(blockDataModel) +export const platforma = BlockModelV3.create({ dataModel: blockDataModel, kind }) + + // Inverse of `init` — the same fields, projected back out for template export, + // handed back exactly as they sit in live state. `tableState` and `graphState` + // are view state and never cross the boundary. `datasetRef` carries a block id, + // which the SDK rewrites on the way out and resolves again on the way in. + .templateParams((data) => ({ + datasetRef: data.datasetRef, + + numPoints: data.numPoints, + numIterations: data.numIterations, + extrapolation: data.extrapolation, + + mem: data.mem, + cpu: data.cpu, + + datasetLabel: data.datasetLabel, + customBlockLabel: data.customBlockLabel, + })) .args((data) => { if (data.datasetRef === undefined) throw new Error("Dataset is required"); From d33fef17ff916ca78649c7c30bd632246fc73acd Mon Sep 17 00:00:00 2001 From: Alexandr Date: Wed, 19 Aug 2026 21:59:52 +0200 Subject: [PATCH 4/6] chore: add changeset for the block kind --- .changeset/mandatory-block-kind.md | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 .changeset/mandatory-block-kind.md diff --git a/.changeset/mandatory-block-kind.md b/.changeset/mandatory-block-kind.md new file mode 100644 index 0000000..fe6b22a --- /dev/null +++ b/.changeset/mandatory-block-kind.md @@ -0,0 +1,21 @@ +--- +'@platforma-open/milaboratories.rarefaction.kind': minor +'@platforma-open/milaboratories.rarefaction.model': minor +'@platforma-open/milaboratories.rarefaction': minor +--- + +Add the mandatory block kind and its init-params contract + +The block now declares a `kind/` package carrying its identity and its +init-params contract — the fields a project template supplies to seed a new +instance: `datasetRef`, `numPoints`, `numIterations`, `extrapolation`, `mem`, +`cpu`, `datasetLabel` and `customBlockLabel`. The model consumes them in `init` +and projects the same set back out via `templateParams`, so export and apply are +inverses. Every field is optional and keeps a default, since a block may be +created by hand rather than from a template. + +`tableState` and `graphState` stay out of the contract: they are view state, and +a template that carried them would restore one user's scroll position onto +another user's block. + +Also upgrades the SDK catalog to the current published versions. From 49c9e5116a0f41a02631fd6441ec4a39a2eb13a8 Mon Sep 17 00:00:00 2001 From: Alexandr Date: Thu, 20 Aug 2026 11:18:57 +0200 Subject: [PATCH 5/6] refactor: take the numeric guards from es-toolkit MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Drops the hand-written isInteger / isNumber / isFiniteNumber wrappers in favour of isNumber and isArray from es-toolkit/compat, which is where the narrowing versions live: the root entry ships neither. Two checks get looser, both deliberately. A fractional value now passes where isInteger refused it — whether 2.5 CPUs means anything is the block's own args to settle, not the kind's, which checks the envelope. And NaN passes, which JSON.parse cannot produce, so it is unreachable by the only route params travel. What stays local is what es-toolkit has no equivalent for: the Guard and Check types, the check factory, and the oneOf / arrayOf / optional combinators. All of it sits below the Internals divider. --- kind/src/params.ts | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/kind/src/params.ts b/kind/src/params.ts index 14724ed..0424b44 100644 --- a/kind/src/params.ts +++ b/kind/src/params.ts @@ -1,6 +1,7 @@ import { assertParamsObject } from "@platforma-sdk/block-kind"; import { isPlRef } from "@platforma-sdk/model"; import { isBoolean, isString } from "es-toolkit"; +import { isNumber } from "es-toolkit/compat"; import type { BlockParams } from "./types"; /** @@ -40,9 +41,6 @@ function check(is: Guard, must: string): Check { return { is, must }; } -/** `Number.isInteger` already rejects non-numbers; this only adds the narrowing. */ -const isInteger: Guard = (v): v is number => Number.isInteger(v); - const REF = "a reference to another block's output"; /** @@ -72,8 +70,8 @@ const CONTRACT = { numIterations: check(isString, "a string"), extrapolation: check(isBoolean, "a boolean"), - mem: check(isInteger, "an integer"), - cpu: check(isInteger, "an integer"), + mem: check(isNumber, "a number"), + cpu: check(isNumber, "a number"), datasetLabel: check(isString, "a string"), customBlockLabel: check(isString, "a string"), From f89bb617cc9dfc30f2f6a0a5da1a63960fbca136 Mon Sep 17 00:00:00 2001 From: Alexandr Date: Thu, 20 Aug 2026 14:08:59 +0200 Subject: [PATCH 6/6] chore: drop --unstable from the facade's prepublishOnly Publishing goes to the normal channel. The flag was carried while the batch was in flight; the structurer strips it on every refresh, so keeping it also meant `structure check` reporting this one field as drift forever. --- block/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/block/package.json b/block/package.json index d7f9d0b..db4cd0e 100644 --- a/block/package.json +++ b/block/package.json @@ -18,7 +18,7 @@ }, "scripts": { "build": "ts-builder build --target block-facade && block-tools pack", - "prepublishOnly": "block-tools publish --unstable -r s3://milab-euce1-prod-pkgs-s3-block-registry/pub/releases/?region=eu-central-1 --registry-serve-url https://blocks.pl-open.science", + "prepublishOnly": "block-tools publish -r s3://milab-euce1-prod-pkgs-s3-block-registry/pub/releases/?region=eu-central-1 --registry-serve-url https://blocks.pl-open.science", "do-pack": "shx rm -f package.tgz && pnpm pack && shx mv *.tgz package.tgz", "check": "ts-builder type-check --target block-facade" },