@platforma-sdk/block-tools 2.14.0 → 2.14.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cli.js CHANGED
@@ -9,7 +9,7 @@ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=requi
9
9
  `}function O(e){return e===``||e===void 0?[]:e.split(`.`)}function k(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function Be(e,t){let n=O(t),r=e;for(let e of n){if(!k(r))return;r=r[e]}return r}function Ve(e,t){let n=O(t);if(n.length===0)return!0;let r=e;for(let e=0;e<n.length-1;e++){if(!k(r))return!1;r=r[n[e]]}return k(r)?n[n.length-1]in r:!1}function He(e,t,n){let r=O(t);if(r.length===0)throw Error(`setAtPath: jsonPath must be non-empty`);let i=e;for(let e=0;e<r.length-1;e++){let t=r[e],n=i[t];if(n===void 0){let e={};i[t]=e,i=e}else if(k(n))i=n;else throw Error(`setAtPath: cannot descend into non-object at '${r.slice(0,e+1).join(`.`)}'`)}i[r[r.length-1]]=n}function Ue(e,t){let n=O(t);if(n.length===0)throw Error(`deleteAtPath: jsonPath must be non-empty`);let r=e;for(let e=0;e<n.length-1;e++){if(!k(r))return;r=r[n[e]]}k(r)&&delete r[n[n.length-1]]}function We(e,t){let n=new Set(t),r=Object.keys(e),i=new Map;i.set(``,[]);let a=``;for(let e of r)n.has(e)?(a=e,i.set(a,[])):i.get(a).push(e);let o={};for(let t of i.get(``))o[t]=e[t];for(let n of t)if(n in e){o[n]=e[n];for(let t of i.get(n)??[])o[t]=e[t]}return o}function Ge(e){let t=e.split(`
10
10
  `);return t.length>0&&t[t.length-1]===``&&t.pop(),t}function Ke(e){return e.join(`
11
11
  `)+`
12
- `}function qe(e){return e.replace(/(^|\s)#.*$/,`$1`).trim()}function Je(e,t){let n=qe(e);return n===``?!1:n===t.trim()}function Ye(e,t){for(let n of e)if(Je(n,t))return!0;return!1}function Xe(e,t){return e===`sdk:`?t?`workspace:*`:`catalog:`:e}var Ze=[`dependencies`,`devDependencies`,`peerDependencies`,`optionalDependencies`];function Qe(e,t){if(N(e))for(let n of Ze){let r=e[n];if(N(r))for(let e of Object.keys(r))r[e]===`sdk:`&&(r[e]=t?`workspace:*`:`catalog:`)}}var A;function $e(e){if(!A)throw Error(`${e}() only valid inside a managed(...) body. Move this call inside managed(path, initial, () => {...}).`);return A}function j(e){let t=$e(e);if(t.kind!==`json`)throw Error(`${e}() requires a JSON-managed body; got '${t.kind}'.`);return t}function M(e){let t=$e(e);if(t.kind!==`yaml`)throw Error(`${e}() requires a YAML-managed body; got '${t.kind}'.`);return t}function et(e){let t=$e(e);if(t.kind!==`lines`)throw Error(`${e}() requires a lines-managed body; got '${t.kind}'.`);return t}function tt(e,t){let n=e.ctx??Se();if(!n)throw Error(`${t}() needs a RunContext but none is active. Pass { ctx } via the with-managed-* helper or run inside engine.run(...).`);return n}function N(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function nt(e,t,n={}){if(A)throw Error(`Nested managed(...) body — engine bug.`);A={kind:`json`,obj:e,ctx:n.ctx,triggerContext:n.triggerContext};try{return t(n.ctx??n.triggerContext?.ctx),e}finally{A=void 0}}function rt(e,t,n={}){if(A)throw Error(`Nested managed(...) body — engine bug.`);A={kind:`yaml`,doc:e,ctx:n.ctx,triggerContext:n.triggerContext,getLatestVersion:n.getLatestVersion,getDerivedDependencyPin:n.getDerivedDependencyPin};try{return t(n.ctx??n.triggerContext?.ctx),e}finally{A=void 0}}function it(e,t,n={}){if(A)throw Error(`Nested managed(...) body — engine bug.`);A={kind:`lines`,lines:e,ctx:n.ctx,triggerContext:n.triggerContext};try{return t(n.ctx??n.triggerContext?.ctx),e}finally{A=void 0}}Ee((e,t)=>{if(!A)return!1;let n=A.triggerContext;if(!n)throw Error("when() inside a managed(...) body requires a triggerContext. The runner supplies it via the `triggerContext` opt to with-managed-*; ensure your test/test helper passes one.");return e(n)&&t(),!0});function P(e,t){He(j(`ensureField`).obj,e,t)}function F(e,t){let n=j(`removeField`).obj;Ve(n,e)&&(t&&!t(Be(n,e))||Ue(n,e))}function at(e,t){let n=j(`requireField`).obj;if(!Ve(n,e))throw Error(t??`requireField: missing field '${e}'`)}function ot(e,t){let n=j(`ensureFieldEntries`).obj,r=Ve(n,e)?Be(n,e):void 0,i=N(r)?r:{};for(let[e,n]of Object.entries(t))i[e]=n;N(r)||He(n,e,i)}function I(e,t){P(`scripts.${e}`,t)}function L(e){F(`scripts.${e}`)}var st=[`dependencies`,`devDependencies`,`peerDependencies`,`optionalDependencies`];function R(e,t,n,r){let i=j(e),a=i.obj,o=n===`sdk:`?Xe(n,tt(i,e).isSdkInternal):n;for(let e of st){if(e===r)continue;let n=a[e];N(n)&&t in n&&delete n[t]}let s=a[r],c=N(s)?s:{};c[t]=o,N(s)||(a[r]=c)}function z(e,t){R(`ensureDep`,e,t,`dependencies`)}function B(e,t){R(`ensureDevDep`,e,t,`devDependencies`)}function ct(e,t){R(`ensurePeerDep`,e,t,`peerDependencies`)}function V(e){let t=j(`removeDep`).obj;for(let n of st){let r=t[n];N(r)&&e in r&&delete r[e]}}function H(e){for(let[t,n]of Object.entries(e))B(t,n)}function U(e){for(let[t,n]of Object.entries(e))ct(t,n)}function lt(e,t,n){let r=tt(j(e),e);for(let i of r.modules)i.scope===t&&R(e,i.name,`workspace:*`,n)}function ut(e){lt(`ensureWorkspaceScopeDeps`,e,`dependencies`)}function W(e){lt(`ensureWorkspaceScopeDevDeps`,e,`devDependencies`)}function dt(e){let t=j(`pruneKeysMatching`).obj;for(let n of Object.keys(t))e(n,t[n])&&delete t[n]}function ft(e,t){let n=We(e,t);for(let t of Object.keys(e))delete e[t];for(let t of Object.keys(n))e[t]=n[t]}function G(e){ft(j(`enforceFieldOrder`).obj,e)}function pt(e,t){let n=Object.keys(e).sort(),r={};for(let t of n)r[t]=e[t];for(let t of Object.keys(e))delete e[t];for(let i of n)e[i]=r[i],t&&N(e[i])&&pt(e[i],!0)}function K(e=``,t={}){let n=t.recursive??!1;if(e===``&&!n)return;let r=j(`enforceAlphabeticalOrder`).obj;if(e===``){pt(r,!0);return}let i=Be(r,e);N(i)&&pt(i,n)}function mt(){let e=M(`ensureWorkspaceModulePaths`),t=tt(e,`ensureWorkspaceModulePaths`).modules.filter(e=>e.path!==``).map(e=>e.path).sort(),n=e.doc.toJSON()?.packages;Array.isArray(n)&&n.length===t.length&&n.every((e,n)=>e===t[n])||e.doc.setIn([`packages`],t)}function ht(e,t){let n=e.doc.getIn([`catalog`,t]);return typeof n==`string`?n:void 0}function gt(e,t){let n=M(`ensureCatalogVersion`);ht(n,e)===void 0&&n.doc.setIn([`catalog`,e],t)}function _t(e){let t=M(`ensureCatalogLatest`);if(!t.getLatestVersion)return;let n=t.getLatestVersion(e);n!==void 0&&ht(t,e)!==n&&t.doc.setIn([`catalog`,e],n)}function vt(e,t){let n=M(`pinCatalogToDependencyOf`);if(!n.getDerivedDependencyPin)return;let r=n.getDerivedDependencyPin(e);r!==void 0&&ht(n,e)!==r&&n.doc.setIn([`catalog`,e],r)}function yt(e){let t=M(`ensureCatalogAbsent`);t.doc.hasIn([`catalog`,e])&&t.doc.deleteIn([`catalog`,e])}function bt(e){let t=et(`ensureGitignoreEntries`);for(let n of e)Ye(t.lines,n)||t.lines.push(n)}function xt(e){return(0,s.parseDocument)(e)}function St(e){return e.toString()}var Ct=`.structure`;function wt(e){if(!e.exists(`.structure`))return{version:0};try{let t=JSON.parse(e.read(Ct));return{version:typeof t?.version==`number`?t.version:0}}catch{return{version:0}}}function Tt(e,t=0){if(e<t)throw new Et(e,t)}var Et=class extends Error{constructor(e,t){super(`Block .structure version is ${e}, below floor ${t}. Bootstrap via the legacy-migration skill, then re-run.`),this.version=e,this.floor=t,this.name=`StructureVersionFloorError`}};function Dt(e,t){e.write(Ct,JSON.stringify(t))}var Ot=class extends Error{constructor(e){super(`Post-run recheck: rule set not idempotent. Failing item: ${e.primitive} '${e.path}' (scope=${e.scope}, action=${e.action}). Engine bug.`),this.failing=e,this.name=`RecheckError`}};function kt(e,t,n,r){switch(e.kind){case`text`:return e.value;case`file`:if(!n)throw Error(`file('${e.path}'): no TemplateProvider configured. Pass opts.templates to engine.run(...).`);return n.staticRead(e.path);case`tpl`:if(!n)throw Error(`tpl('${e.path}'): no TemplateProvider configured. Pass opts.templates to engine.run(...).`);return ue(n.textRead(e.path),typeof e.vars==`function`?e.vars(r):e.vars);case`generate`:{let n=e.fn(r);if(t.endsWith(`.json`))return Qe(n,r.isSdkInternal),ze(n,{collapse:!t.endsWith(`package.json`)});if(t.endsWith(`.yaml`)||t.endsWith(`.yml`))return(0,s.stringify)(n);if(typeof n!=`string`)throw Error(`generate() for '${t}' must return a string for non-JSON/YAML files; got ${typeof n}`);return n}case`binary`:throw Error(`binary('${e.path}') cannot be resolved to a string; it is only valid inside seed()/scaffold(), which copy it verbatim via fs.writeBinary.`)}}function At(e,t,n,r,i){if(n.kind===`binary`){if(!r)throw Error(`binary('${n.path}'): no TemplateProvider configured. Pass opts.templates to engine.run(...).`);e.writeBinary(t,r.staticReadBinary(n.path));return}e.write(t,kt(n,t,r,i))}function jt(e,t,n,r,i,a){let o=e.split(`/`).pop()??e;if(e.endsWith(`.json`)){let i=Ne(t);if(typeof i!=`object`||!i||Array.isArray(i))throw Error(`managed: parsed value at '${e}' is not a JSON object`);return nt(i,n,{triggerContext:r}),ze(i,{collapse:o!==`package.json`})}if(e.endsWith(`.yaml`)||e.endsWith(`.yml`)){let e=xt(t);return rt(e,n,{triggerContext:r,getLatestVersion:i,getDerivedDependencyPin:a}),St(e)}if(o===`.gitignore`||o.endsWith(`.gitignore`)){let e=Ge(t);return it(e,n,{triggerContext:r}),Ke(e)}throw Error(`managed('${e}'): unsupported file kind. Only .json, .yaml, .yml, .gitignore are dispatched.`)}function Mt(e){let t=e.list(``),n=new Set;for(let e of t){n.add(e);let t=e.split(`/`);for(let e=1;e<t.length;e++)n.add(t.slice(0,e).join(`/`))}return n}function Nt(e,t){let n=t===``?t:t.endsWith(`/`)?t.slice(0,-1):t;return e.has(n)}function Pt(e,t,n){return{ctx:t,version:t.version,pathExists:t=>Nt(e,t),pathMissing:t=>!Nt(e,t),filesMatch:t=>{let r=n?`${n}/${t}`:t;for(let t of e)if(ye(r,t))return!0;return!1}}}function Ft(e,t){for(let n of e.triggers)if(!n(t))return!1;return!0}function It(e,t){return t?`init`:e.updateDepsOnly?`updateDeps`:`default`}function Lt(e,t){return e.filter(e=>e.modes.includes(t))}function Rt(e,t,n,r,i,a){let o=e.leaf;if(o.kind===`fixed`){let i=kt(o.content,e.resolvedPath,r,a);return t.exists(e.resolvedPath)?t.read(e.resolvedPath)===i?void 0:(n||t.write(e.resolvedPath,i),{scope:e.scope,path:e.resolvedPath,primitive:`fixed`,action:`update`}):(n||t.write(e.resolvedPath,i),{scope:e.scope,path:e.resolvedPath,primitive:`fixed`,action:`create`})}if(o.kind===`scaffold`)return t.exists(e.resolvedPath)?void 0:(n||At(t,e.resolvedPath,o.initial,r,a),{scope:e.scope,path:e.resolvedPath,primitive:`scaffold`,action:`create`});if(o.kind===`seed`)return!i||t.exists(e.resolvedPath)?void 0:(n||At(t,e.resolvedPath,o.initial,r,a),{scope:e.scope,path:e.resolvedPath,primitive:`seed`,action:`create`});if(o.kind===`remove`)return t.exists(e.resolvedPath)?(n||t.delete(e.resolvedPath),{scope:e.scope,path:e.resolvedPath,primitive:`remove`,action:`delete`}):void 0;if(o.kind===`rename`){if(!t.exists(e.resolvedPath))return;let r=e.resolvedTo;return t.exists(r)?void 0:(n||t.move(e.resolvedPath,r),{scope:e.scope,path:e.resolvedPath,primitive:`rename`,action:`rename`})}}function zt(e,t,n,r,i,a,o,s){if(e.leaf.kind!==`managed`)return;let c=e.leaf,l=e.resolvedPath,u=t.exists(l),d,f=!1;u?d=t.read(l):(d=kt(c.initial,l,i,s),f=!0);let p=jt(l,d,c.body,r,a,o);if(f)return n||t.write(l,p),{scope:e.scope,path:l,primitive:`managed`,action:`create`};if(p!==d)return n||t.write(l,p),{scope:e.scope,path:l,primitive:`managed`,action:`update`}}function Bt(e,t,n,r,i,a,o,s){let c=Lt(e,It(n,a)),l=[],u=Mt(t);for(let e of c){if(e.leaf.kind===`managed`||!Ft(e,Pt(u,n,e.modulePath)))continue;let o=Rt(e,t,r,i,a,n);o&&l.push(o)}let d=Mt(t);for(let e of c){if(e.leaf.kind!==`managed`)continue;let a=Pt(d,n,e.modulePath);if(!Ft(e,a))continue;let c=zt(e,t,r,a,i,o,s,n);c&&l.push(c)}return l}function Vt(e,t,n,r={}){return xe(n,()=>{let i=me(e,n),a=!!r.initMode,o=Bt(i,t,n,n.dryRun,r.templates,a,r.registryLookup,r.derivedPinLookup);if(!n.dryRun&&!n.updateDepsOnly&&!a){Dt(t,{version:2});let i={...r.rediscover?r.rediscover(t):n,dryRun:!0},a=Bt(me(e,i),t,i,!0,r.templates,!1,r.registryLookup,r.derivedPinLookup).filter(e=>e.path!==Ct);if(a.length>0)throw new Ot(a[0])}return a&&!n.dryRun&&Dt(t,{version:2}),{changes:o}})}var Ht=[`root`,`block`,`model`,`ui`,`workflow`,`test`,`software`,`kind`],Ut=class extends Error{constructor(e,t){super(e),this.path=t,this.name=`DiscoveryError`}};function Wt(e){let t=new Set;for(let n of[e.dependencies,e.devDependencies,e.peerDependencies,e.optionalDependencies])if(n)for(let e of Object.keys(n))t.add(e);return t}function Gt(e){return e===``||e===`.`}function Kt(e){let t=e.pkg[`block-scope`];if(typeof t==`string`){if(!Ht.includes(t))throw new Ut(`package.json "block-scope" must be one of ${Ht.join(`, `)}, got '${t}'`,e.path);return t}if(Gt(e.path))return`root`;if(e.pkg.block!==void 0)return`block`;let n=Wt(e.pkg);if(n.has(`@platforma-sdk/block-kind`))return`kind`;if(e.pkg[`block-software`]!==void 0)return`software`;if(n.has(`@platforma-sdk/package-builder`)){for(let e of n)if(/^@platforma-open\/.*runenv/.test(e))return`software`}if(n.has(`@platforma-sdk/workflow-tengo`))return`workflow`;if((n.has(`@platforma-sdk/ui-vue`)||n.has(`vue`))&&!e.pkg.main)return`ui`;if(n.has(`@platforma-sdk/model`)&&e.pkg.main)return`model`;if(n.has(`@platforma-sdk/test`))return`test`}function qt(e){let t=[];for(let n of e){let e=Kt(n);if(!e)throw new Ut(`Unclassified workspace package at '${n.path}'. Add a top-level "block-scope" string to its package.json.`,n.path);t.push({scope:e,name:n.pkg.name??n.path,path:Gt(n.path)?``:n.path})}return t}function q(e,t){return e.modules.filter(e=>e.scope===t)}function Jt(e,t){let n=q(e,t);if(n.length===0)throw Error(`findModule: expected one '${t}' module, found none`);if(n.length>1)throw Error(`findModule: expected exactly one '${t}' module, found ${n.length}`);return n[0]}function Yt(e,t){return{[Jt(e,t).name]:`workspace:*`}}function J(e,t){let n={};for(let r of q(e,t))n[r.name]=`workspace:*`;return n}function Xt(e){let t=e.facadeName,n=[{scope:`root`,name:t,path:``},{scope:`block`,name:`${t}.block`,path:`block`},{scope:`model`,name:`${t}.model`,path:`model`},{scope:`kind`,name:`${t}.kind`,path:`kind`},{scope:`ui`,name:`${t}.ui`,path:`ui`},{scope:`workflow`,name:`${t}.workflow`,path:`workflow`},{scope:`test`,name:`${t}.test`,path:`test`}];return e.softwarePlatform&&n.push({scope:`software`,name:`${t}.software`,path:`software`}),n}function Zt(e){return{isSdkInternal:e.isSdkInternal??!1,updateDepsOnly:e.updateDepsOnly??!1,modules:e.modules,blockVars:e.blockVars,version:e.version??0,dryRun:e.dryRun??!1}}var Y=class extends Error{constructor(e){super(e),this.name=`StructureCliError`}};function Qt(e,t){return e===``?t:`${e}/${t}`}function $t(e,t){try{return JSON.parse(e.read(t))}catch{return}}function en(e){if(e.includes(`*`))throw new Y(`pnpm-workspace.yaml 'packages:' entry '${e}' contains a glob. The structurer requires literal package paths — replace the glob with one entry per package directory.`);let t=e.replace(/^\.\//,``).replace(/\/$/,``);return t===`.`?``:t}function tn(e){let t;try{t=e.read(`pnpm-workspace.yaml`)}catch{throw new Y(`No pnpm-workspace.yaml found. This directory is empty or unrecognisable as a block — run 'block-tools structure init' instead, or pass --sdk-internal for an in-monorepo block.`)}let n=(0,s.parse)(t)??{},r=Array.isArray(n.packages)?n.packages:[],i=new Set([``]);for(let t of r){let n=en(t);(n===``||e.exists(n))&&i.add(n)}let a=[];for(let t of i){let n=$t(e,Qt(t,`package.json`));n&&a.push({path:t,pkg:n})}return a}function nn(e){let t=[],n=new Set([`node_modules`,`.turbo`,`dist`,`.git`,`block-pack`]);function r(i,a){let o=e.listDir(i);for(let s of o){if(!s.isDirectory||n.has(s.name))continue;let o=Qt(i,s.name),c=$t(e,Qt(o,`package.json`));c&&t.push({path:o,pkg:c}),a<2&&r(o,a+1)}}return r(``,1),t}function rn(e){let t=e.indexOf(`/`);if(!e.startsWith(`@`)||t<0)throw new Y(`Cannot parse block name '${e}': expected '@npm-org/org-scope.short-name'.`);let n=e.slice(0,t),r=e.slice(t+1),i=r.indexOf(`.`);if(i<0)throw new Y(`Cannot parse block name '${e}': base name '${r}' has no '.' separating org-scope from short-name.`);return{facadeName:e,baseName:r,npmOrg:n,orgScope:r.slice(0,i),shortName:r.slice(i+1)}}function an(e){let{fs:t,isSdkInternal:n}=e,r=n?nn(t):tn(t);if(r.length===0)throw new Y(`No workspace packages found. Run 'block-tools structure init' to scaffold a block.`);let i=qt(r),a=wt(t);Tt(a.version,0);let o=i.find(e=>e.scope===`block`)??i.find(e=>e.scope===`root`);if(!o)throw new Y(`Could not find a 'block' (or root-as-block) package to derive BlockVars from.`);let s=rn(o.name.replace(/\.block$/,``));return Zt({isSdkInternal:n,updateDepsOnly:e.updateDepsOnly??!1,modules:i,blockVars:s,version:a.version,dryRun:e.dryRun??!1})}var X=[`name`,`version`,`private`,`description`,`keywords`,`files`,`type`,`main`,`module`,`types`,`exports`,`scripts`,`dependencies`,`devDependencies`,`peerDependencies`,`optionalDependencies`,`packageManager`,`pnpm`,`block`,`block-software`],on={"build:dev-local":`env PL_BUILD_CHANNEL=dev PL_BUILD_VARIANT=all PL_BUILD_LOCATION=local turbo run build`,"build:dev-remote":`env PL_BUILD_CHANNEL=dev PL_BUILD_VARIANT=all PL_BUILD_LOCATION=remote turbo run build`,"build:dev-no-software":`env PL_BUILD_CHANNEL=dev PL_BUILD_VARIANT=none turbo run build`,"build:dev-binary-existing":`env PL_BUILD_CHANNEL=dev PL_BUILD_USE_PUBLISHED=true turbo run build`,"build:release":`env PL_BUILD_CHANNEL=release PL_BUILD_VARIANT=all PL_BUILD_LOCATION=remote turbo run build`},sn={test:`env PL_BUILD_CHANNEL=dev PL_BUILD_VARIANT=binary PL_BUILD_LOCATION=local turbo run test --concurrency 1`,"test:dry-run":`env PL_BUILD_CHANNEL=dev PL_BUILD_VARIANT=binary PL_BUILD_LOCATION=local turbo run test --dry-run=json`};function cn(){return{version:`1.0.0`,private:!0,scripts:{fmt:`turbo run fmt`,check:`turbo run check`,...on,...sn,"mark-stable":`turbo run mark-stable`,"do-pack":`turbo run do-pack`,watch:`turbo watch build`,changeset:`changeset`,"version-packages":`changeset version`,"update-sdk":`block-tools structure refresh --update-deps-only`,"upgrade-sdk":`block-tools structure refresh --update-deps-only && pnpm i && block-tools structure refresh && pnpm i && pnpm fmt`},peerDependencies:{oxlint:`*`,oxfmt:`*`},devDependencies:{"@changesets/cli":`catalog:`,"@milaboratories/ts-builder":`sdk:`,"@platforma-sdk/block-tools":`sdk:`,shx:`catalog:`,turbo:`catalog:`},packageManager:`pnpm@9.12.0`}}function ln(){P(`packageManager`,`pnpm@9.12.0`),F(`name`),I(`fmt`,`turbo run fmt`),I(`check`,`turbo run check`);for(let[e,t]of Object.entries(on))I(e,t);for(let[e,t]of Object.entries(sn))I(e,t);L(`build`),L(`build:dev`),I(`mark-stable`,`turbo run mark-stable`),I(`do-pack`,`turbo run do-pack`),I(`watch`,`turbo watch build`),I(`changeset`,`changeset`),I(`version-packages`,`changeset version`),I(`update-sdk`,`block-tools structure refresh --update-deps-only`),L(`update`),I(`upgrade-sdk`,`block-tools structure refresh --update-deps-only && pnpm i && block-tools structure refresh && pnpm i && pnpm fmt`),H({"@changesets/cli":`catalog:`,"@milaboratories/ts-builder":`sdk:`,"@platforma-sdk/block-tools":`sdk:`,shx:`catalog:`,turbo:`catalog:`}),U({oxlint:`*`,oxfmt:`*`}),dt((e,t)=>{if(!/^(\/\/|--)/.test(e)||typeof t!=`object`||!t)return!1;let n=t;return n.pnpm!==void 0||n.overrides!==void 0}),K(`dependencies`),K(`devDependencies`),K(`peerDependencies`),K(`optionalDependencies`),G([...X])}var un=`https://turbo.build/schema.json`,dn=[`tsconfig.json`],fn={fmt:{cache:!1},check:{dependsOn:[`^build`],outputs:[]},build:{dependsOn:[`^build`,`check`],inputs:[`$TURBO_DEFAULT$`],env:[`PL_DOCKER_REGISTRY_PUSH_TO`,`PL_BUILD_CHANNEL`,`PL_BUILD_VARIANT`,`PL_BUILD_LOCATION`,`PL_BUILD_USE_PUBLISHED`,`PL_DEV_DOCKER_PUSH_URL`,`PL_DEV_DOCKER_PULL_URL`,`PL_DEV_BINARY_UPLOAD_URL`,`PL_RELEASE_DOCKER_PUSH_URL`,`PL_RELEASE_DOCKER_PULL_URL`,`PL_RELEASE_BINARY_UPLOAD_URL`,`PL_REGISTRY_PLATFORMA_OPEN_UPLOAD_URL`],passThroughEnv:[`AWS_*`,`PL_AWS_*`],outputs:[`./dist/**`,`./block-pack/**`,`./pkg-*.tgz`]},"do-pack":{dependsOn:[`build`],outputs:[`package.tgz`]},test:{dependsOn:[`build`,`check`],passThroughEnv:[`PL_ADDRESS`,`PL_TEST_PASSWORD`,`PL_TEST_USER`,`PL_TEST_PROXY`,`DEBUG`]},"mark-stable":{passThroughEnv:[`PL_REGISTRY`,`AWS_*`],cache:!1}};function pn(){return{$schema:un,globalDependencies:dn,tasks:{...fn}}}function mn(){P(`$schema`,un),P(`globalDependencies`,dn),ot(`tasks`,fn),F(`tasks.build:dev`),G([`$schema`,`globalDependencies`,`tasks`])}var hn=2,gn=500,_n=3e4;function vn(e){if(!e)return null;let t=Number(e);if(Number.isFinite(t)&&t>0)return t*1e3;let n=Date.parse(e);return Number.isNaN(n)?null:Math.max(0,n-Date.now())}async function yn(e){for(let t=1;;t++){let n;try{n=await fetch(e,{signal:AbortSignal.timeout(_n)})}catch(e){if(t>hn)throw e;await(0,c.setTimeout)(gn*2**(t-1)*(.8+.4*Math.random()));continue}if(n.ok)return n;if(!(n.status===429||n.status>=500)||t>hn)throw Error(`registry returned HTTP ${n.status}`);let r=vn(n.headers.get(`retry-after`));if(r!=null){await(0,c.setTimeout)(r);continue}await(0,c.setTimeout)(gn*2**(t-1)*(.8+.4*Math.random()))}}function bn(){return{async getLatestVersion(e){let t=(await(await yn(`https://registry.npmjs.org/-/package/${e}/dist-tags`)).json()).latest;if(!t)throw Error(`no 'latest' dist-tag in registry response`);return t},async getDeclaredDependency(e,t,n){let r=await(await yn(`https://registry.npmjs.org/${e}/${t}`)).json();return r.dependencies?.[n]??r.peerDependencies?.[n]}}}async function xn(e,t){let n=await Promise.all(t.map(async t=>[t,await e.getLatestVersion(t)]));return new Map(n)}function Sn(e){return t=>e.get(t)}var Cn=[/^@platforma-sdk\//,/^@milaboratories\//];function wn(e){return Cn.some(t=>t.test(e))}async function Tn(e,t=bn()){return e.length===0?()=>void 0:Sn(await xn(t,e))}function En(e){return/^\d+\.\d+\.\d+(?:[-+][0-9A-Za-z.-]+)?$/.test(e)}async function Dn(e,t=bn()){if(e.length===0)return()=>void 0;let n=await Promise.all(e.map(async e=>{let n=await t.getDeclaredDependency(e.of,e.ofVersion??`latest`,e.entry);if(n===void 0)throw Error(`derived catalog pin '${e.entry}': package '${e.of}'${e.ofVersion?`@${e.ofVersion}`:` (latest)`} declares no dependency '${e.entry}'. A derived pin requires the source to declare the dep as an exact version.`);if(!En(n))throw Error(`derived catalog pin '${e.entry}': package '${e.of}'${e.ofVersion?`@${e.ofVersion}`:` (latest)`} declares '${e.entry}: ${n}', which is not an exact version. A derived pin requires an exact ('x.y.z') source dependency so the catalog can pin to it precisely.`);return[e.entry,n]})),r=new Map(n);return e=>r.get(e)}var On=[`vite`,`tsup`,`vue-tsc`,`@vitejs/plugin-vue`,`vite-plugin-dts`,`@platforma-sdk/eslint-config`];function kn(){for(let e of On)V(e)}var Z=[`@platforma-sdk/model`,`@platforma-sdk/ui-vue`,`@platforma-sdk/workflow-tengo`,`@platforma-sdk/test`,`@platforma-sdk/block-tools`,`@platforma-sdk/tengo-builder`,`@platforma-sdk/package-builder`,`@milaboratories/ts-builder`,`@milaboratories/ts-configs`],An=`0.0.0-init-must-fetch`;for(let e of Z)if(!wn(e))throw Error(`SDK_CATALOG_PACKAGES entry '${e}' matches no catalog bump pattern; its placeholder would never be resolved to npm latest on init. Add it to CATALOG_BUMP_PATTERNS or move it to the infra floor.`);var jn={turbo:`~2.8.11`,shx:`~0.4.0`,"@changesets/cli":`~2.29.8`,vitest:`~4.0.18`},Mn=[{entry:`vue`,of:`@platforma-sdk/ui-vue`},{entry:`@milaboratories/helpers`,of:`@platforma-sdk/model`}],Nn=`@platforma-open/milaboratories.runenv-python-3`,Pn=`1.8.2`;function Fn(e){let t=e.modules.filter(e=>e.path!==``).map(e=>e.path).sort(),n={};for(let e of Z)n[e]=An;return Object.assign(n,jn),e.modules.some(e=>e.scope===`software`)&&(n[Nn]=Pn),{packages:t,catalog:n}}function In(){mt();for(let e of On)yt(e)}var Ln=[`.test_auth.json`,`node_modules/`,`dist/`,`block-pack/`,`dev/`,`work/`,`log/`,`.turbo`,`vite.config.*.timestamp-*`,`software/**/*.tgz`,`.DS_Store`,`.vscode/sftp.json`,`test-dry-run.json`];function Rn(){bt(Ln)}function zn(){_(`root`,()=>{v(({ctx:e})=>!e.isSdkInternal,()=>{x(`turbo.json`,D(()=>pn()),()=>{mn()}),b(`.vscode/settings.json`,T(`root/.vscode/settings.json`)),x(`package.json`,D(()=>cn()),()=>{ln()}),x(`pnpm-workspace.yaml`,D(e=>Fn(e)),()=>{In()}),x(`.gitignore`,T(`root/.gitignore`),()=>{Rn()})})})}function Bn(e){return e.split(/[-_]+/).filter(e=>e.length>0).map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(` `)}function Vn(){_(`root`,()=>{v(({ctx:e})=>!e.isSdkInternal,()=>{b(`.github/workflows/build.yaml`,E(`workflows/build.tpl.yaml`,e=>{let t=e.blockVars.shortName;return{appName:`Block: ${Bn(t)}`,appNameSlug:`block-${t}`}})),b(`.github/workflows/mark-stable.yaml`,E(`workflows/mark-stable.tpl.yaml`,e=>({appName:`Block: ${Bn(e.blockVars.shortName)} - Mark Stable`})))})})}var Hn={"@platforma-open":{s3:`s3://milab-euce1-prod-pkgs-s3-block-registry/pub/releases/?region=eu-central-1`,serveUrl:`https://blocks.pl-open.science`},"@milaboratories":{s3:`s3://milab-euce1-prod-pkgs-s3-block-registry/pub/releases/?region=eu-central-1`,serveUrl:`https://block.registry.platforma.bio/releases`}},Un={s3:`s3://milab-euce1-prod-pkgs-s3-block-registry/pub/releases/?region=eu-central-1`,serveUrl:`https://blocks.pl-open.science`},Wn={s3:`s3://milab-euce1-prod-pkgs-s3-block-registry/aux/dev/?region=eu-central-1`,serveUrl:`https://aux-blocks.pl-open.science`};function Gn(e,t){let n=t?Wn:Hn[e]??Un;return`block-tools publish -r ${n.s3} --registry-serve-url ${n.serveUrl}`}function Kn(e){let t={};for(let n of q(e,`workflow`))t.workflow=`${n.name}/dist/tengo/tpl/main.plj.gz`;for(let n of q(e,`model`))t.model=`${n.name}/dist/model.json`;for(let n of q(e,`ui`))t.ui=`${n.name}/dist`;return t}function qn(e,t){return{build:`ts-builder build --target block-facade && block-tools pack`,check:`ts-builder type-check --target block-facade`,prepublishOnly:Gn(e,t),"do-pack":`shx rm -f package.tgz && pnpm pack && shx mv *.tgz package.tgz`}}var Jn={"@milaboratories/ts-builder":`sdk:`,"@milaboratories/ts-configs":`sdk:`,"@platforma-sdk/block-tools":`sdk:`,"@platforma-sdk/model":`sdk:`,shx:`catalog:`,typescript:`catalog:`},Yn={".":{sources:`./src/index.ts`,types:`./dist/index.d.ts`,default:`./dist/index.js`}};function Xn(e){if(Object.keys(e.components).length===0)throw Error(`block.components is empty — no workflow/model/ui module was discovered`);let t=e.meta,n=[[`block.meta.title`,t.title],[`block.meta.description`,t.description],[`block.meta.logo`,t.logo],[`block.meta.organization.name`,t.organization?.name],[`block.meta.organization.url`,t.organization?.url],[`block.meta.organization.logo`,t.organization?.logo]];for(let[e,t]of n)if(typeof t!=`string`||t===``)throw Error(`required block field '${e}' is empty`)}function Zn(e){let t=e.blockVars,n={...Jn,...J(e,`model`),...J(e,`ui`),...J(e,`workflow`),...J(e,`kind`)},r={components:Kn(e),meta:{title:t.shortName,description:`${t.shortName} block`,logo:`file:logos/block-logo.png`,organization:{name:t.orgScope,url:`https://example.com`,logo:`file:logos/organization-logo.png`}}};return Xn(r),{name:`${t.facadeName}.block`,version:`1.0.0`,type:`module`,files:[`dist`,`block-pack`],main:`./dist/index.js`,module:`./dist/index.js`,types:`./dist/index.d.ts`,exports:Yn,scripts:qn(t.npmOrg,e.isSdkInternal),dependencies:{},devDependencies:n,block:r}}function Qn(e){let t=e.blockVars,n=q(e,`kind`);if(n.length!==1)throw Error(n.length===0?`block '${t.facadeName}' declares no kind — every block must have a sibling kind/ package`:`block '${t.facadeName}' declares ${n.length} kinds; exactly one is required`);P(`type`,`module`),P(`files`,[`dist`,`block-pack`]),P(`main`,`./dist/index.js`),P(`module`,`./dist/index.js`),P(`types`,`./dist/index.d.ts`),P(`exports`,Yn);let r=qn(t.npmOrg,e.isSdkInternal);for(let[e,t]of Object.entries(r))I(e,t);L(`mark-stable`),W(`model`),W(`ui`),W(`workflow`),W(`kind`),B(`@milaboratories/ts-builder`,`sdk:`),B(`@milaboratories/ts-configs`,`sdk:`),B(`@platforma-sdk/block-tools`,`sdk:`),B(`@platforma-sdk/model`,`sdk:`),B(`shx`,`catalog:`),B(`typescript`,`catalog:`),P(`block.components`,Kn(e)),at(`version`,`facade package.json must carry a 'version' (the facade publishes)`),K(`dependencies`),K(`devDependencies`),K(`peerDependencies`),K(`optionalDependencies`),G([...X])}function $n(e){let t=e.split(/[^A-Za-z0-9]+/).filter(e=>e.length>0).map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(``);return/^[0-9]/.test(t)?`_${t}`:t}function er(){_(`block`,()=>{w(`index.js`),w(`index.d.ts`),b(`src/index.ts`,E(`block/src/index.tpl.ts`,e=>({facadeName:e.blockVars.facadeName,pascalName:$n(e.blockVars.shortName)}))),b(`src/AGENTS.ts`,T(`block/src/AGENTS.ts`)),S(`src/block-extra.ts`,T(`block/src/block-extra.ts`)),S(`src/agents-extra.ts`,T(`block/src/agents-extra.ts`)),b(`tsconfig.json`,T(`block/tsconfig.json`)),C(`logos/block-logo.png`,je(`block/logos/block-logo.png`)),C(`logos/organization-logo.png`,je(`block/logos/organization-logo.png`)),x(`package.json`,D(e=>Zn(e)),e=>{Qn(e)})})}var Q=`src/**/*.test.ts`;function tr(e){return{name:`${e.blockVars.facadeName}.model`,private:!0,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`},"./dist/*":`./dist/*`},scripts:{fmt:`ts-builder format`,watch:`ts-builder build --target block-model --watch`,build:`ts-builder build --target block-model && block-tools build-model`,check:`ts-builder check --target block-model`},dependencies:{"@platforma-sdk/model":`sdk:`,...J(e,`kind`)},devDependencies:{"@milaboratories/ts-builder":`sdk:`,"@milaboratories/ts-configs":`sdk:`,"@platforma-sdk/block-tools":`sdk:`},peerDependencies:{"@types/node":`*`,typescript:`*`}}}function nr(){P(`private`,!0),P(`type`,`module`),P(`main`,`dist/index.cjs`),P(`module`,`dist/index.js`),P(`types`,`dist/index.d.ts`),P(`exports`,{".":{types:`./dist/index.d.ts`,sources:`./src/index.ts`,import:`./dist/index.js`},"./dist/*":`./dist/*`}),I(`fmt`,`ts-builder format`),I(`watch`,`ts-builder build --target block-model --watch`),I(`build`,`ts-builder build --target block-model && block-tools build-model`),I(`check`,`ts-builder check --target block-model`),z(`@platforma-sdk/model`,`sdk:`),ut(`kind`),H({"@milaboratories/ts-builder":`sdk:`,"@milaboratories/ts-configs":`sdk:`,"@platforma-sdk/block-tools":`sdk:`}),U({"@types/node":`*`,typescript:`*`}),v(({ctx:e})=>!e.isSdkInternal,()=>v(y(Q),()=>{I(`test`,`vitest run --passWithNoTests`),B(`vitest`,`catalog:`),B(`@types/node`,`*`)},()=>V(`vitest`))),kn(),F(`tsup`),L(`lint`),K(`dependencies`),K(`devDependencies`),K(`peerDependencies`),K(`optionalDependencies`),G([...X])}function rr(){_(`model`,()=>{v(y(Q),()=>b(`tsconfig.json`,T(`model/tsconfig.node.json`)),()=>b(`tsconfig.json`,T(`model/tsconfig.json`))),b(`.oxlintrc.json`,T(`model/.oxlintrc.json`)),b(`.oxfmtrc.json`,T(`model/.oxfmtrc.json`)),C(`src/index.ts`,E(`model/src/index.tpl.ts`,e=>({kindPkg:`${e.blockVars.facadeName}.kind`}))),x(`package.json`,D(e=>tr(e)),()=>{nr()})})}var ir={".":{types:`./dist/index.d.ts`,sources:`./src/index.ts`,import:`./dist/index.js`,require:`./dist/index.cjs`,default:`./dist/index.js`}};function ar(e){return{name:`${e.blockVars.facadeName}.kind`,private:!0,type:`module`,main:`./dist/index.cjs`,module:`./dist/index.js`,types:`./dist/index.d.ts`,exports:ir,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":`sdk:`},devDependencies:{"@milaboratories/ts-builder":`sdk:`,"@milaboratories/ts-configs":`sdk:`,"@platforma-sdk/block-tools":`sdk:`},peerDependencies:{"@types/node":`*`,typescript:`*`}}}function or(){P(`private`,!0),P(`type`,`module`),P(`main`,`./dist/index.cjs`),P(`module`,`./dist/index.js`),P(`types`,`./dist/index.d.ts`),P(`exports`,ir),I(`fmt`,`ts-builder format`),I(`watch`,`ts-builder build --target block-kind --watch`),I(`build`,`ts-builder build --target block-kind && block-tools build-kind-manifest`),I(`check`,`ts-builder check --target block-kind`),L(`lint`),z(`@platforma-sdk/block-kind`,`sdk:`),H({"@milaboratories/ts-builder":`sdk:`,"@milaboratories/ts-configs":`sdk:`,"@platforma-sdk/block-tools":`sdk:`}),U({"@types/node":`*`,typescript:`*`}),K(`dependencies`),K(`devDependencies`),K(`peerDependencies`),K(`optionalDependencies`),G([...X])}function sr(){_(`kind`,()=>{b(`tsconfig.json`,T(`kind/tsconfig.json`)),b(`.oxlintrc.json`,T(`kind/.oxlintrc.json`)),b(`.oxfmtrc.json`,T(`kind/.oxfmtrc.json`)),C(`src/index.ts`,T(`kind/src/index.ts`)),x(`package.json`,D(e=>ar(e)),()=>{or()})})}function cr(e){return{name:`${e.blockVars.facadeName}.ui`,private:!0,type:`module`,scripts:{fmt:`ts-builder format`,dev:`ts-builder serve --target block-ui`,watch:`ts-builder build --target block-ui --watch`,build:`ts-builder build --target block-ui`,check:`ts-builder check --target block-ui`},dependencies:{"@platforma-sdk/ui-vue":`sdk:`,vue:`catalog:`,...Yt(e,`model`)},devDependencies:{"@milaboratories/ts-builder":`sdk:`,"@milaboratories/ts-configs":`sdk:`},peerDependencies:{"@types/node":`*`,typescript:`*`}}}function lr(){P(`private`,!0),P(`type`,`module`),I(`fmt`,`ts-builder format`),I(`dev`,`ts-builder serve --target block-ui`),I(`watch`,`ts-builder build --target block-ui --watch`),I(`build`,`ts-builder build --target block-ui`),I(`check`,`ts-builder check --target block-ui`),z(`@platforma-sdk/ui-vue`,`sdk:`),z(`vue`,`catalog:`),ut(`model`),H({"@milaboratories/ts-builder":`sdk:`,"@milaboratories/ts-configs":`sdk:`}),kn(),L(`preview`),L(`lint`),U({"@types/node":`*`,typescript:`*`}),v(({ctx:e})=>!e.isSdkInternal,()=>v(y(Q),()=>{I(`test`,`vitest run --passWithNoTests`),B(`vitest`,`catalog:`),B(`@types/node`,`*`)},()=>V(`vitest`))),K(`dependencies`),K(`devDependencies`),K(`peerDependencies`),K(`optionalDependencies`),G([...X])}function ur(){_(`ui`,()=>{v(y(Q),()=>b(`tsconfig.json`,T(`ui/tsconfig.node.json`)),()=>b(`tsconfig.json`,T(`ui/tsconfig.json`))),b(`.oxlintrc.json`,T(`ui/.oxlintrc.json`)),b(`.oxfmtrc.json`,T(`ui/.oxfmtrc.json`)),S(`index.html`,T(`ui/index.html`)),C(`src/main.ts`,T(`ui/src/main.ts`)),C(`src/app.ts`,E(`ui/src/app.tpl.ts`,e=>({modelPkg:`${e.blockVars.facadeName}.model`}))),C(`src/MainPage.vue`,E(`ui/src/MainPage.tpl.vue`,e=>({shortName:e.blockVars.shortName}))),x(`package.json`,D(e=>cr(e)),()=>{lr()})})}function dr(e){return{name:`${e.blockVars.facadeName}.workflow`,private:!0,type:`module`,scripts:{build:`shx rm -rf dist && pl-tengo build`,check:`pl-tengo check`,format:`/usr/bin/env emacs --script ./format.el || echo 'No emacs.'`},dependencies:{"@platforma-sdk/workflow-tengo":`sdk:`,...J(e,`software`)},devDependencies:{"@platforma-sdk/tengo-builder":`sdk:`,"@platforma-sdk/test":`sdk:`,shx:`catalog:`}}}function fr(){P(`private`,!0),P(`type`,`module`),I(`build`,`shx rm -rf dist && pl-tengo build`),I(`check`,`pl-tengo check`),I(`format`,`/usr/bin/env emacs --script ./format.el || echo 'No emacs.'`),v(({ctx:e})=>!e.isSdkInternal,()=>v(y(Q),()=>{I(`test`,`vitest run --passWithNoTests`),H({vitest:`catalog:`})},()=>V(`vitest`))),z(`@platforma-sdk/workflow-tengo`,`sdk:`),ut(`software`),H({"@platforma-sdk/tengo-builder":`sdk:`,"@platforma-sdk/test":`sdk:`,shx:`catalog:`}),kn(),K(`dependencies`),K(`devDependencies`),K(`peerDependencies`),K(`optionalDependencies`),G([...X])}function pr(){_(`workflow`,()=>{b(`format.el`,T(`workflow/format.el`)),v(({ctx:e})=>!e.isSdkInternal,()=>v(y(Q),()=>{b(`tsconfig.json`,T(`workflow/tsconfig.json`)),S(`vitest.config.mts`,T(`workflow/vitest.config.mts`))},()=>{w(`tsconfig.json`),w(`vitest.config.mts`)})),w(`index.js`),w(`index.d.ts`),C(`src/main.tpl.tengo`,E(`workflow/src/main.tpl.tengo`,e=>({shortName:e.blockVars.shortName}))),x(`package.json`,D(e=>dr(e)),()=>{fr()})})}function mr(e){return{name:`${e.blockVars.facadeName}.test`,private:!0,type:`module`,scripts:{fmt:`ts-builder format`,check:`ts-builder check --target block-test`,test:`vitest run --passWithNoTests`},peerDependencies:{typescript:`*`},devDependencies:{"@platforma-sdk/test":`sdk:`,"@milaboratories/ts-builder":`sdk:`,"@milaboratories/ts-configs":`sdk:`,vitest:`catalog:`}}}function hr(){P(`private`,!0),P(`type`,`module`),I(`fmt`,`ts-builder format`),I(`check`,`ts-builder check --target block-test`),I(`test`,`vitest run --passWithNoTests`),L(`lint`),H({"@platforma-sdk/test":`sdk:`,"@milaboratories/ts-builder":`sdk:`,"@milaboratories/ts-configs":`sdk:`,vitest:`catalog:`}),U({typescript:`*`}),V(`@types/node`),kn(),K(`dependencies`),K(`devDependencies`),K(`peerDependencies`),K(`optionalDependencies`),G([...X])}function gr(){_(`test`,()=>{b(`tsconfig.json`,T(`test/tsconfig.json`)),b(`.oxlintrc.json`,T(`test/.oxlintrc.json`)),b(`.oxfmtrc.json`,T(`test/.oxfmtrc.json`)),S(`vitest.config.mts`,T(`test/vitest.config.mts`)),C(`src/demo.test.ts`,Me(`import { expect, test } from "vitest";
12
+ `}function qe(e){return e.replace(/(^|\s)#.*$/,`$1`).trim()}function Je(e,t){let n=qe(e);return n===``?!1:n===t.trim()}function Ye(e,t){for(let n of e)if(Je(n,t))return!0;return!1}function Xe(e,t){return e===`sdk:`?t?`workspace:*`:`catalog:`:e}var Ze=[`dependencies`,`devDependencies`,`peerDependencies`,`optionalDependencies`];function Qe(e,t){if(N(e))for(let n of Ze){let r=e[n];if(N(r))for(let e of Object.keys(r))r[e]===`sdk:`&&(r[e]=t?`workspace:*`:`catalog:`)}}var A;function $e(e){if(!A)throw Error(`${e}() only valid inside a managed(...) body. Move this call inside managed(path, initial, () => {...}).`);return A}function j(e){let t=$e(e);if(t.kind!==`json`)throw Error(`${e}() requires a JSON-managed body; got '${t.kind}'.`);return t}function M(e){let t=$e(e);if(t.kind!==`yaml`)throw Error(`${e}() requires a YAML-managed body; got '${t.kind}'.`);return t}function et(e){let t=$e(e);if(t.kind!==`lines`)throw Error(`${e}() requires a lines-managed body; got '${t.kind}'.`);return t}function tt(e,t){let n=e.ctx??Se();if(!n)throw Error(`${t}() needs a RunContext but none is active. Pass { ctx } via the with-managed-* helper or run inside engine.run(...).`);return n}function N(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function nt(e,t,n={}){if(A)throw Error(`Nested managed(...) body — engine bug.`);A={kind:`json`,obj:e,ctx:n.ctx,triggerContext:n.triggerContext};try{return t(n.ctx??n.triggerContext?.ctx),e}finally{A=void 0}}function rt(e,t,n={}){if(A)throw Error(`Nested managed(...) body — engine bug.`);A={kind:`yaml`,doc:e,ctx:n.ctx,triggerContext:n.triggerContext,getLatestVersion:n.getLatestVersion,getDerivedDependencyPin:n.getDerivedDependencyPin};try{return t(n.ctx??n.triggerContext?.ctx),e}finally{A=void 0}}function it(e,t,n={}){if(A)throw Error(`Nested managed(...) body — engine bug.`);A={kind:`lines`,lines:e,ctx:n.ctx,triggerContext:n.triggerContext};try{return t(n.ctx??n.triggerContext?.ctx),e}finally{A=void 0}}Ee((e,t)=>{if(!A)return!1;let n=A.triggerContext;if(!n)throw Error("when() inside a managed(...) body requires a triggerContext. The runner supplies it via the `triggerContext` opt to with-managed-*; ensure your test/test helper passes one.");return e(n)&&t(),!0});function P(e,t){He(j(`ensureField`).obj,e,t)}function F(e,t){let n=j(`removeField`).obj;Ve(n,e)&&(t&&!t(Be(n,e))||Ue(n,e))}function at(e,t){let n=j(`requireField`).obj;if(!Ve(n,e))throw Error(t??`requireField: missing field '${e}'`)}function ot(e,t){let n=j(`ensureFieldEntries`).obj,r=Ve(n,e)?Be(n,e):void 0,i=N(r)?r:{};for(let[e,n]of Object.entries(t))i[e]=n;N(r)||He(n,e,i)}function I(e,t){P(`scripts.${e}`,t)}function L(e){F(`scripts.${e}`)}var st=[`dependencies`,`devDependencies`,`peerDependencies`,`optionalDependencies`];function R(e,t,n,r){let i=j(e),a=i.obj,o=n===`sdk:`?Xe(n,tt(i,e).isSdkInternal):n;for(let e of st){if(e===r)continue;let n=a[e];N(n)&&t in n&&delete n[t]}let s=a[r],c=N(s)?s:{};c[t]=o,N(s)||(a[r]=c)}function z(e,t){R(`ensureDep`,e,t,`dependencies`)}function B(e,t){R(`ensureDevDep`,e,t,`devDependencies`)}function ct(e,t){R(`ensurePeerDep`,e,t,`peerDependencies`)}function V(e){let t=j(`removeDep`).obj;for(let n of st){let r=t[n];N(r)&&e in r&&delete r[e]}}function H(e){for(let[t,n]of Object.entries(e))B(t,n)}function U(e){for(let[t,n]of Object.entries(e))ct(t,n)}function lt(e,t,n){let r=tt(j(e),e);for(let i of r.modules)i.scope===t&&R(e,i.name,`workspace:*`,n)}function ut(e){lt(`ensureWorkspaceScopeDeps`,e,`dependencies`)}function W(e){lt(`ensureWorkspaceScopeDevDeps`,e,`devDependencies`)}function dt(e){let t=j(`pruneKeysMatching`).obj;for(let n of Object.keys(t))e(n,t[n])&&delete t[n]}function ft(e,t){let n=We(e,t);for(let t of Object.keys(e))delete e[t];for(let t of Object.keys(n))e[t]=n[t]}function G(e){ft(j(`enforceFieldOrder`).obj,e)}function pt(e,t){let n=Object.keys(e).sort(),r={};for(let t of n)r[t]=e[t];for(let t of Object.keys(e))delete e[t];for(let i of n)e[i]=r[i],t&&N(e[i])&&pt(e[i],!0)}function K(e=``,t={}){let n=t.recursive??!1;if(e===``&&!n)return;let r=j(`enforceAlphabeticalOrder`).obj;if(e===``){pt(r,!0);return}let i=Be(r,e);N(i)&&pt(i,n)}function mt(){let e=M(`ensureWorkspaceModulePaths`),t=tt(e,`ensureWorkspaceModulePaths`).modules.filter(e=>e.path!==``).map(e=>e.path).sort(),n=e.doc.toJSON()?.packages;Array.isArray(n)&&n.length===t.length&&n.every((e,n)=>e===t[n])||e.doc.setIn([`packages`],t)}function ht(e,t){let n=e.doc.getIn([`catalog`,t]);return typeof n==`string`?n:void 0}function gt(e,t){let n=M(`ensureCatalogVersion`);ht(n,e)===void 0&&n.doc.setIn([`catalog`,e],t)}function _t(e){let t=M(`ensureCatalogLatest`);if(!t.getLatestVersion)return;let n=t.getLatestVersion(e);n!==void 0&&ht(t,e)!==n&&t.doc.setIn([`catalog`,e],n)}function vt(e,t){let n=M(`pinCatalogToDependencyOf`);if(!n.getDerivedDependencyPin)return;let r=n.getDerivedDependencyPin(e);r!==void 0&&ht(n,e)!==r&&n.doc.setIn([`catalog`,e],r)}function yt(e){let t=M(`ensureCatalogAbsent`);t.doc.hasIn([`catalog`,e])&&t.doc.deleteIn([`catalog`,e])}function bt(e){let t=et(`ensureGitignoreEntries`);for(let n of e)Ye(t.lines,n)||t.lines.push(n)}function xt(e){return(0,s.parseDocument)(e)}function St(e){return e.toString()}var Ct=`.structure`;function wt(e){if(!e.exists(`.structure`))return{version:0};try{let t=JSON.parse(e.read(Ct));return{version:typeof t?.version==`number`?t.version:0}}catch{return{version:0}}}function Tt(e,t=0){if(e<t)throw new Et(e,t)}var Et=class extends Error{constructor(e,t){super(`Block .structure version is ${e}, below floor ${t}. Bootstrap via the legacy-migration skill, then re-run.`),this.version=e,this.floor=t,this.name=`StructureVersionFloorError`}};function Dt(e,t){e.write(Ct,JSON.stringify(t))}var Ot=class extends Error{constructor(e){super(`Post-run recheck: rule set not idempotent. Failing item: ${e.primitive} '${e.path}' (scope=${e.scope}, action=${e.action}). Engine bug.`),this.failing=e,this.name=`RecheckError`}};function kt(e,t,n,r){switch(e.kind){case`text`:return e.value;case`file`:if(!n)throw Error(`file('${e.path}'): no TemplateProvider configured. Pass opts.templates to engine.run(...).`);return n.staticRead(e.path);case`tpl`:if(!n)throw Error(`tpl('${e.path}'): no TemplateProvider configured. Pass opts.templates to engine.run(...).`);return ue(n.textRead(e.path),typeof e.vars==`function`?e.vars(r):e.vars);case`generate`:{let n=e.fn(r);if(t.endsWith(`.json`))return Qe(n,r.isSdkInternal),ze(n,{collapse:!t.endsWith(`package.json`)});if(t.endsWith(`.yaml`)||t.endsWith(`.yml`))return(0,s.stringify)(n);if(typeof n!=`string`)throw Error(`generate() for '${t}' must return a string for non-JSON/YAML files; got ${typeof n}`);return n}case`binary`:throw Error(`binary('${e.path}') cannot be resolved to a string; it is only valid inside seed()/scaffold(), which copy it verbatim via fs.writeBinary.`)}}function At(e,t,n,r,i){if(n.kind===`binary`){if(!r)throw Error(`binary('${n.path}'): no TemplateProvider configured. Pass opts.templates to engine.run(...).`);e.writeBinary(t,r.staticReadBinary(n.path));return}e.write(t,kt(n,t,r,i))}function jt(e,t,n,r,i,a){let o=e.split(`/`).pop()??e;if(e.endsWith(`.json`)){let i=Ne(t);if(typeof i!=`object`||!i||Array.isArray(i))throw Error(`managed: parsed value at '${e}' is not a JSON object`);return nt(i,n,{triggerContext:r}),ze(i,{collapse:o!==`package.json`})}if(e.endsWith(`.yaml`)||e.endsWith(`.yml`)){let e=xt(t);return rt(e,n,{triggerContext:r,getLatestVersion:i,getDerivedDependencyPin:a}),St(e)}if(o===`.gitignore`||o.endsWith(`.gitignore`)){let e=Ge(t);return it(e,n,{triggerContext:r}),Ke(e)}throw Error(`managed('${e}'): unsupported file kind. Only .json, .yaml, .yml, .gitignore are dispatched.`)}function Mt(e){let t=e.list(``),n=new Set;for(let e of t){n.add(e);let t=e.split(`/`);for(let e=1;e<t.length;e++)n.add(t.slice(0,e).join(`/`))}return n}function Nt(e,t){let n=t===``?t:t.endsWith(`/`)?t.slice(0,-1):t;return e.has(n)}function Pt(e,t,n){return{ctx:t,version:t.version,pathExists:t=>Nt(e,t),pathMissing:t=>!Nt(e,t),filesMatch:t=>{let r=n?`${n}/${t}`:t;for(let t of e)if(ye(r,t))return!0;return!1}}}function Ft(e,t){for(let n of e.triggers)if(!n(t))return!1;return!0}function It(e,t){return t?`init`:e.updateDepsOnly?`updateDeps`:`default`}function Lt(e,t){return e.filter(e=>e.modes.includes(t))}function Rt(e,t,n,r,i,a){let o=e.leaf;if(o.kind===`fixed`){let i=kt(o.content,e.resolvedPath,r,a);return t.exists(e.resolvedPath)?t.read(e.resolvedPath)===i?void 0:(n||t.write(e.resolvedPath,i),{scope:e.scope,path:e.resolvedPath,primitive:`fixed`,action:`update`}):(n||t.write(e.resolvedPath,i),{scope:e.scope,path:e.resolvedPath,primitive:`fixed`,action:`create`})}if(o.kind===`scaffold`)return t.exists(e.resolvedPath)?void 0:(n||At(t,e.resolvedPath,o.initial,r,a),{scope:e.scope,path:e.resolvedPath,primitive:`scaffold`,action:`create`});if(o.kind===`seed`)return!i||t.exists(e.resolvedPath)?void 0:(n||At(t,e.resolvedPath,o.initial,r,a),{scope:e.scope,path:e.resolvedPath,primitive:`seed`,action:`create`});if(o.kind===`remove`)return t.exists(e.resolvedPath)?(n||t.delete(e.resolvedPath),{scope:e.scope,path:e.resolvedPath,primitive:`remove`,action:`delete`}):void 0;if(o.kind===`rename`){if(!t.exists(e.resolvedPath))return;let r=e.resolvedTo;return t.exists(r)?void 0:(n||t.move(e.resolvedPath,r),{scope:e.scope,path:e.resolvedPath,primitive:`rename`,action:`rename`})}}function zt(e,t,n,r,i,a,o,s){if(e.leaf.kind!==`managed`)return;let c=e.leaf,l=e.resolvedPath,u=t.exists(l),d,f=!1;u?d=t.read(l):(d=kt(c.initial,l,i,s),f=!0);let p=jt(l,d,c.body,r,a,o);if(f)return n||t.write(l,p),{scope:e.scope,path:l,primitive:`managed`,action:`create`};if(p!==d)return n||t.write(l,p),{scope:e.scope,path:l,primitive:`managed`,action:`update`}}function Bt(e,t,n,r,i,a,o,s){let c=Lt(e,It(n,a)),l=[],u=Mt(t);for(let e of c){if(e.leaf.kind===`managed`||!Ft(e,Pt(u,n,e.modulePath)))continue;let o=Rt(e,t,r,i,a,n);o&&l.push(o)}let d=Mt(t);for(let e of c){if(e.leaf.kind!==`managed`)continue;let a=Pt(d,n,e.modulePath);if(!Ft(e,a))continue;let c=zt(e,t,r,a,i,o,s,n);c&&l.push(c)}return l}function Vt(e,t,n,r={}){return xe(n,()=>{let i=me(e,n),a=!!r.initMode,o=Bt(i,t,n,n.dryRun,r.templates,a,r.registryLookup,r.derivedPinLookup);if(!n.dryRun&&!n.updateDepsOnly&&!a){Dt(t,{version:2});let i={...r.rediscover?r.rediscover(t):n,dryRun:!0},a=Bt(me(e,i),t,i,!0,r.templates,!1,r.registryLookup,r.derivedPinLookup).filter(e=>e.path!==Ct);if(a.length>0)throw new Ot(a[0])}return a&&!n.dryRun&&Dt(t,{version:2}),{changes:o}})}var Ht=[`root`,`block`,`model`,`ui`,`workflow`,`test`,`software`,`kind`],Ut=class extends Error{constructor(e,t){super(e),this.path=t,this.name=`DiscoveryError`}};function Wt(e){let t=new Set;for(let n of[e.dependencies,e.devDependencies,e.peerDependencies,e.optionalDependencies])if(n)for(let e of Object.keys(n))t.add(e);return t}function Gt(e){return e===``||e===`.`}function Kt(e){let t=e.pkg[`block-scope`];if(typeof t==`string`){if(!Ht.includes(t))throw new Ut(`package.json "block-scope" must be one of ${Ht.join(`, `)}, got '${t}'`,e.path);return t}if(Gt(e.path))return`root`;if(e.pkg.block!==void 0)return`block`;let n=Wt(e.pkg);if(n.has(`@platforma-sdk/block-kind`))return`kind`;if(e.pkg[`block-software`]!==void 0)return`software`;if(n.has(`@platforma-sdk/package-builder`)){for(let e of n)if(/^@platforma-open\/.*runenv/.test(e))return`software`}if(n.has(`@platforma-sdk/workflow-tengo`))return`workflow`;if((n.has(`@platforma-sdk/ui-vue`)||n.has(`vue`))&&!e.pkg.main)return`ui`;if(n.has(`@platforma-sdk/model`)&&e.pkg.main)return`model`;if(n.has(`@platforma-sdk/test`))return`test`}function qt(e){let t=[];for(let n of e){let e=Kt(n);if(!e)throw new Ut(`Unclassified workspace package at '${n.path}'. Add a top-level "block-scope" string to its package.json.`,n.path);t.push({scope:e,name:n.pkg.name??n.path,path:Gt(n.path)?``:n.path})}return t}function q(e,t){return e.modules.filter(e=>e.scope===t)}function Jt(e,t){let n=q(e,t);if(n.length===0)throw Error(`findModule: expected one '${t}' module, found none`);if(n.length>1)throw Error(`findModule: expected exactly one '${t}' module, found ${n.length}`);return n[0]}function Yt(e,t){return{[Jt(e,t).name]:`workspace:*`}}function J(e,t){let n={};for(let r of q(e,t))n[r.name]=`workspace:*`;return n}function Xt(e){let t=e.facadeName,n=[{scope:`root`,name:t,path:``},{scope:`block`,name:`${t}.block`,path:`block`},{scope:`model`,name:`${t}.model`,path:`model`},{scope:`kind`,name:`${t}.kind`,path:`kind`},{scope:`ui`,name:`${t}.ui`,path:`ui`},{scope:`workflow`,name:`${t}.workflow`,path:`workflow`},{scope:`test`,name:`${t}.test`,path:`test`}];return e.softwarePlatform&&n.push({scope:`software`,name:`${t}.software`,path:`software`}),n}function Zt(e){return{isSdkInternal:e.isSdkInternal??!1,updateDepsOnly:e.updateDepsOnly??!1,modules:e.modules,blockVars:e.blockVars,version:e.version??0,dryRun:e.dryRun??!1}}var Y=class extends Error{constructor(e){super(e),this.name=`StructureCliError`}};function Qt(e,t){return e===``?t:`${e}/${t}`}function $t(e,t){try{return JSON.parse(e.read(t))}catch{return}}function en(e){if(e.includes(`*`))throw new Y(`pnpm-workspace.yaml 'packages:' entry '${e}' contains a glob. The structurer requires literal package paths — replace the glob with one entry per package directory.`);let t=e.replace(/^\.\//,``).replace(/\/$/,``);return t===`.`?``:t}function tn(e){let t;try{t=e.read(`pnpm-workspace.yaml`)}catch{throw new Y(`No pnpm-workspace.yaml found. This directory is empty or unrecognisable as a block — run 'block-tools structure init' instead, or pass --sdk-internal for an in-monorepo block.`)}let n=(0,s.parse)(t)??{},r=Array.isArray(n.packages)?n.packages:[],i=new Set([``]);for(let t of r){let n=en(t);(n===``||e.exists(n))&&i.add(n)}let a=[];for(let t of i){let n=$t(e,Qt(t,`package.json`));n&&a.push({path:t,pkg:n})}return a}function nn(e){let t=[],n=new Set([`node_modules`,`.turbo`,`dist`,`.git`,`block-pack`]);function r(i,a){let o=e.listDir(i);for(let s of o){if(!s.isDirectory||n.has(s.name))continue;let o=Qt(i,s.name),c=$t(e,Qt(o,`package.json`));c&&t.push({path:o,pkg:c}),a<2&&r(o,a+1)}}return r(``,1),t}function rn(e){let t=e.indexOf(`/`);if(!e.startsWith(`@`)||t<0)throw new Y(`Cannot parse block name '${e}': expected '@npm-org/org-scope.short-name'.`);let n=e.slice(0,t),r=e.slice(t+1),i=r.indexOf(`.`);if(i<0)throw new Y(`Cannot parse block name '${e}': base name '${r}' has no '.' separating org-scope from short-name.`);return{facadeName:e,baseName:r,npmOrg:n,orgScope:r.slice(0,i),shortName:r.slice(i+1)}}function an(e){let{fs:t,isSdkInternal:n}=e,r=n?nn(t):tn(t);if(r.length===0)throw new Y(`No workspace packages found. Run 'block-tools structure init' to scaffold a block.`);let i=qt(r),a=wt(t);Tt(a.version,0);let o=i.find(e=>e.scope===`block`)??i.find(e=>e.scope===`root`);if(!o)throw new Y(`Could not find a 'block' (or root-as-block) package to derive BlockVars from.`);let s=rn(o.name.replace(/\.block$/,``));return Zt({isSdkInternal:n,updateDepsOnly:e.updateDepsOnly??!1,modules:i,blockVars:s,version:a.version,dryRun:e.dryRun??!1})}var X=[`name`,`version`,`private`,`description`,`keywords`,`files`,`type`,`main`,`module`,`types`,`exports`,`scripts`,`dependencies`,`devDependencies`,`peerDependencies`,`optionalDependencies`,`packageManager`,`pnpm`,`block`,`block-software`],on={"build:dev-local":`env PL_BUILD_CHANNEL=dev PL_BUILD_VARIANT=all PL_BUILD_LOCATION=local turbo run build`,"build:dev-remote":`env PL_BUILD_CHANNEL=dev PL_BUILD_VARIANT=all PL_BUILD_LOCATION=remote turbo run build`,"build:dev-no-software":`env PL_BUILD_CHANNEL=dev PL_BUILD_VARIANT=none turbo run build`,"build:dev-binary-existing":`env PL_BUILD_CHANNEL=dev PL_BUILD_USE_PUBLISHED=true turbo run build`,"build:release":`env PL_BUILD_CHANNEL=release PL_BUILD_VARIANT=all PL_BUILD_LOCATION=remote turbo run build`},sn={test:`env PL_BUILD_CHANNEL=dev PL_BUILD_VARIANT=binary PL_BUILD_LOCATION=local turbo run test --concurrency 1`,"test:dry-run":`env PL_BUILD_CHANNEL=dev PL_BUILD_VARIANT=binary PL_BUILD_LOCATION=local turbo run test --dry-run=json`};function cn(){return{version:`1.0.0`,private:!0,scripts:{fmt:`turbo run fmt`,check:`turbo run check`,...on,...sn,"mark-stable":`turbo run mark-stable`,"do-pack":`turbo run do-pack`,watch:`turbo watch build`,changeset:`changeset`,"version-packages":`changeset version`,"update-sdk":`block-tools structure refresh --update-deps-only`,"upgrade-sdk":`block-tools structure refresh --update-deps-only && pnpm i && block-tools structure refresh && pnpm i && pnpm fmt`},peerDependencies:{oxlint:`*`,oxfmt:`*`},devDependencies:{"@changesets/cli":`catalog:`,"@milaboratories/ts-builder":`sdk:`,"@platforma-sdk/block-tools":`sdk:`,shx:`catalog:`,turbo:`catalog:`},packageManager:`pnpm@9.12.0`}}function ln(){P(`packageManager`,`pnpm@9.12.0`),F(`name`),I(`fmt`,`turbo run fmt`),I(`check`,`turbo run check`);for(let[e,t]of Object.entries(on))I(e,t);for(let[e,t]of Object.entries(sn))I(e,t);L(`build`),L(`build:dev`),I(`mark-stable`,`turbo run mark-stable`),I(`do-pack`,`turbo run do-pack`),I(`watch`,`turbo watch build`),I(`changeset`,`changeset`),I(`version-packages`,`changeset version`),I(`update-sdk`,`block-tools structure refresh --update-deps-only`),L(`update`),I(`upgrade-sdk`,`block-tools structure refresh --update-deps-only && pnpm i && block-tools structure refresh && pnpm i && pnpm fmt`),H({"@changesets/cli":`catalog:`,"@milaboratories/ts-builder":`sdk:`,"@platforma-sdk/block-tools":`sdk:`,shx:`catalog:`,turbo:`catalog:`}),U({oxlint:`*`,oxfmt:`*`}),dt((e,t)=>{if(!/^(\/\/|--)/.test(e)||typeof t!=`object`||!t)return!1;let n=t;return n.pnpm!==void 0||n.overrides!==void 0}),K(`dependencies`),K(`devDependencies`),K(`peerDependencies`),K(`optionalDependencies`),G([...X])}var un=`https://turbo.build/schema.json`,dn=[`tsconfig.json`],fn={fmt:{cache:!1},check:{dependsOn:[`^build`],outputs:[]},build:{dependsOn:[`^build`,`check`],inputs:[`$TURBO_DEFAULT$`],env:[`PL_DOCKER_REGISTRY_PUSH_TO`,`PL_BUILD_CHANNEL`,`PL_BUILD_VARIANT`,`PL_BUILD_LOCATION`,`PL_BUILD_USE_PUBLISHED`,`PL_DEV_DOCKER_PUSH_URL`,`PL_DEV_DOCKER_PULL_URL`,`PL_DEV_BINARY_UPLOAD_URL`,`PL_RELEASE_DOCKER_PUSH_URL`,`PL_RELEASE_DOCKER_PULL_URL`,`PL_RELEASE_BINARY_UPLOAD_URL`,`PL_REGISTRY_PLATFORMA_OPEN_UPLOAD_URL`],passThroughEnv:[`AWS_*`,`PL_AWS_*`],outputs:[`./dist/**`,`./block-pack/**`,`./pkg-*.tgz`]},"do-pack":{dependsOn:[`build`],outputs:[`package.tgz`]},test:{dependsOn:[`build`,`check`],passThroughEnv:[`PL_ADDRESS`,`PL_TEST_PASSWORD`,`PL_TEST_USER`,`PL_TEST_PROXY`,`DEBUG`]},"mark-stable":{passThroughEnv:[`PL_REGISTRY`,`AWS_*`],cache:!1}};function pn(){return{$schema:un,globalDependencies:dn,tasks:{...fn}}}function mn(){P(`$schema`,un),P(`globalDependencies`,dn),ot(`tasks`,fn),F(`tasks.build:dev`),G([`$schema`,`globalDependencies`,`tasks`])}var hn=2,gn=500,_n=3e4;function vn(e){if(!e)return null;let t=Number(e);if(Number.isFinite(t)&&t>0)return t*1e3;let n=Date.parse(e);return Number.isNaN(n)?null:Math.max(0,n-Date.now())}async function yn(e){for(let t=1;;t++){let n;try{n=await fetch(e,{signal:AbortSignal.timeout(_n)})}catch(e){if(t>hn)throw e;await(0,c.setTimeout)(gn*2**(t-1)*(.8+.4*Math.random()));continue}if(n.ok)return n;if(!(n.status===429||n.status>=500)||t>hn)throw Error(`registry returned HTTP ${n.status}`);let r=vn(n.headers.get(`retry-after`));if(r!=null){await(0,c.setTimeout)(r);continue}await(0,c.setTimeout)(gn*2**(t-1)*(.8+.4*Math.random()))}}function bn(){return{async getLatestVersion(e){let t=(await(await yn(`https://registry.npmjs.org/-/package/${e}/dist-tags`)).json()).latest;if(!t)throw Error(`no 'latest' dist-tag in registry response`);return t},async getDeclaredDependency(e,t,n){let r=await(await yn(`https://registry.npmjs.org/${e}/${t}`)).json();return r.dependencies?.[n]??r.peerDependencies?.[n]}}}async function xn(e,t){let n=await Promise.all(t.map(async t=>[t,await e.getLatestVersion(t)]));return new Map(n)}function Sn(e){return t=>e.get(t)}var Cn=[/^@platforma-sdk\//,/^@milaboratories\//];function wn(e){return Cn.some(t=>t.test(e))}async function Tn(e,t=bn()){return e.length===0?()=>void 0:Sn(await xn(t,e))}function En(e){return/^\d+\.\d+\.\d+(?:[-+][0-9A-Za-z.-]+)?$/.test(e)}async function Dn(e,t=bn()){if(e.length===0)return()=>void 0;let n=await Promise.all(e.map(async e=>{let n=await t.getDeclaredDependency(e.of,e.ofVersion??`latest`,e.entry);if(n===void 0)throw Error(`derived catalog pin '${e.entry}': package '${e.of}'${e.ofVersion?`@${e.ofVersion}`:` (latest)`} declares no dependency '${e.entry}'. A derived pin requires the source to declare the dep as an exact version.`);if(!En(n))throw Error(`derived catalog pin '${e.entry}': package '${e.of}'${e.ofVersion?`@${e.ofVersion}`:` (latest)`} declares '${e.entry}: ${n}', which is not an exact version. A derived pin requires an exact ('x.y.z') source dependency so the catalog can pin to it precisely.`);return[e.entry,n]})),r=new Map(n);return e=>r.get(e)}var On=[`vite`,`tsup`,`vue-tsc`,`@vitejs/plugin-vue`,`vite-plugin-dts`,`@platforma-sdk/eslint-config`];function kn(){for(let e of On)V(e)}var Z=[`@platforma-sdk/model`,`@platforma-sdk/ui-vue`,`@platforma-sdk/workflow-tengo`,`@platforma-sdk/test`,`@platforma-sdk/block-tools`,`@platforma-sdk/block-kind`,`@platforma-sdk/tengo-builder`,`@platforma-sdk/package-builder`,`@milaboratories/ts-builder`,`@milaboratories/ts-configs`],An=`0.0.0-init-must-fetch`;for(let e of Z)if(!wn(e))throw Error(`SDK_CATALOG_PACKAGES entry '${e}' matches no catalog bump pattern; its placeholder would never be resolved to npm latest on init. Add it to CATALOG_BUMP_PATTERNS or move it to the infra floor.`);var jn={turbo:`~2.8.11`,shx:`~0.4.0`,"@changesets/cli":`~2.29.8`,vitest:`~4.0.18`},Mn=[{entry:`vue`,of:`@platforma-sdk/ui-vue`},{entry:`@milaboratories/helpers`,of:`@platforma-sdk/model`}],Nn=`@platforma-open/milaboratories.runenv-python-3`,Pn=`1.8.2`;function Fn(e){let t=e.modules.filter(e=>e.path!==``).map(e=>e.path).sort(),n={};for(let e of Z)n[e]=An;return Object.assign(n,jn),e.modules.some(e=>e.scope===`software`)&&(n[Nn]=Pn),{packages:t,catalog:n}}function In(){mt();for(let e of On)yt(e)}var Ln=[`.test_auth.json`,`node_modules/`,`dist/`,`block-pack/`,`dev/`,`work/`,`log/`,`.turbo`,`vite.config.*.timestamp-*`,`software/**/*.tgz`,`.DS_Store`,`.vscode/sftp.json`,`test-dry-run.json`];function Rn(){bt(Ln)}function zn(){_(`root`,()=>{v(({ctx:e})=>!e.isSdkInternal,()=>{x(`turbo.json`,D(()=>pn()),()=>{mn()}),b(`.vscode/settings.json`,T(`root/.vscode/settings.json`)),x(`package.json`,D(()=>cn()),()=>{ln()}),x(`pnpm-workspace.yaml`,D(e=>Fn(e)),()=>{In()}),x(`.gitignore`,T(`root/.gitignore`),()=>{Rn()})})})}function Bn(e){return e.split(/[-_]+/).filter(e=>e.length>0).map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(` `)}function Vn(){_(`root`,()=>{v(({ctx:e})=>!e.isSdkInternal,()=>{b(`.github/workflows/build.yaml`,E(`workflows/build.tpl.yaml`,e=>{let t=e.blockVars.shortName;return{appName:`Block: ${Bn(t)}`,appNameSlug:`block-${t}`}})),b(`.github/workflows/mark-stable.yaml`,E(`workflows/mark-stable.tpl.yaml`,e=>({appName:`Block: ${Bn(e.blockVars.shortName)} - Mark Stable`})))})})}var Hn={"@platforma-open":{s3:`s3://milab-euce1-prod-pkgs-s3-block-registry/pub/releases/?region=eu-central-1`,serveUrl:`https://blocks.pl-open.science`},"@milaboratories":{s3:`s3://milab-euce1-prod-pkgs-s3-block-registry/pub/releases/?region=eu-central-1`,serveUrl:`https://block.registry.platforma.bio/releases`}},Un={s3:`s3://milab-euce1-prod-pkgs-s3-block-registry/pub/releases/?region=eu-central-1`,serveUrl:`https://blocks.pl-open.science`},Wn={s3:`s3://milab-euce1-prod-pkgs-s3-block-registry/aux/dev/?region=eu-central-1`,serveUrl:`https://aux-blocks.pl-open.science`};function Gn(e,t){let n=t?Wn:Hn[e]??Un;return`block-tools publish -r ${n.s3} --registry-serve-url ${n.serveUrl}`}function Kn(e){let t={};for(let n of q(e,`workflow`))t.workflow=`${n.name}/dist/tengo/tpl/main.plj.gz`;for(let n of q(e,`model`))t.model=`${n.name}/dist/model.json`;for(let n of q(e,`ui`))t.ui=`${n.name}/dist`;return t}function qn(e,t){return{build:`ts-builder build --target block-facade && block-tools pack`,check:`ts-builder type-check --target block-facade`,prepublishOnly:Gn(e,t),"do-pack":`shx rm -f package.tgz && pnpm pack && shx mv *.tgz package.tgz`}}var Jn={"@milaboratories/ts-builder":`sdk:`,"@milaboratories/ts-configs":`sdk:`,"@platforma-sdk/block-tools":`sdk:`,"@platforma-sdk/model":`sdk:`,shx:`catalog:`,typescript:`catalog:`},Yn={".":{sources:`./src/index.ts`,types:`./dist/index.d.ts`,default:`./dist/index.js`}};function Xn(e){if(Object.keys(e.components).length===0)throw Error(`block.components is empty — no workflow/model/ui module was discovered`);let t=e.meta,n=[[`block.meta.title`,t.title],[`block.meta.description`,t.description],[`block.meta.logo`,t.logo],[`block.meta.organization.name`,t.organization?.name],[`block.meta.organization.url`,t.organization?.url],[`block.meta.organization.logo`,t.organization?.logo]];for(let[e,t]of n)if(typeof t!=`string`||t===``)throw Error(`required block field '${e}' is empty`)}function Zn(e){let t=e.blockVars,n={...Jn,...J(e,`model`),...J(e,`ui`),...J(e,`workflow`),...J(e,`kind`)},r={components:Kn(e),meta:{title:t.shortName,description:`${t.shortName} block`,logo:`file:logos/block-logo.png`,organization:{name:t.orgScope,url:`https://example.com`,logo:`file:logos/organization-logo.png`}}};return Xn(r),{name:`${t.facadeName}.block`,version:`1.0.0`,type:`module`,files:[`dist`,`block-pack`],main:`./dist/index.js`,module:`./dist/index.js`,types:`./dist/index.d.ts`,exports:Yn,scripts:qn(t.npmOrg,e.isSdkInternal),dependencies:{},devDependencies:n,block:r}}function Qn(e){let t=e.blockVars,n=q(e,`kind`);if(n.length!==1)throw Error(n.length===0?`block '${t.facadeName}' declares no kind — every block must have a sibling kind/ package`:`block '${t.facadeName}' declares ${n.length} kinds; exactly one is required`);P(`type`,`module`),P(`files`,[`dist`,`block-pack`]),P(`main`,`./dist/index.js`),P(`module`,`./dist/index.js`),P(`types`,`./dist/index.d.ts`),P(`exports`,Yn);let r=qn(t.npmOrg,e.isSdkInternal);for(let[e,t]of Object.entries(r))I(e,t);L(`mark-stable`),W(`model`),W(`ui`),W(`workflow`),W(`kind`),B(`@milaboratories/ts-builder`,`sdk:`),B(`@milaboratories/ts-configs`,`sdk:`),B(`@platforma-sdk/block-tools`,`sdk:`),B(`@platforma-sdk/model`,`sdk:`),B(`shx`,`catalog:`),B(`typescript`,`catalog:`),P(`block.components`,Kn(e)),at(`version`,`facade package.json must carry a 'version' (the facade publishes)`),K(`dependencies`),K(`devDependencies`),K(`peerDependencies`),K(`optionalDependencies`),G([...X])}function $n(e){let t=e.split(/[^A-Za-z0-9]+/).filter(e=>e.length>0).map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(``);return/^[0-9]/.test(t)?`_${t}`:t}function er(){_(`block`,()=>{w(`index.js`),w(`index.d.ts`),b(`src/index.ts`,E(`block/src/index.tpl.ts`,e=>({facadeName:e.blockVars.facadeName,pascalName:$n(e.blockVars.shortName)}))),b(`src/AGENTS.ts`,T(`block/src/AGENTS.ts`)),S(`src/block-extra.ts`,T(`block/src/block-extra.ts`)),S(`src/agents-extra.ts`,T(`block/src/agents-extra.ts`)),b(`tsconfig.json`,T(`block/tsconfig.json`)),C(`logos/block-logo.png`,je(`block/logos/block-logo.png`)),C(`logos/organization-logo.png`,je(`block/logos/organization-logo.png`)),x(`package.json`,D(e=>Zn(e)),e=>{Qn(e)})})}var Q=`src/**/*.test.ts`;function tr(e){return{name:`${e.blockVars.facadeName}.model`,private:!0,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`},"./dist/*":`./dist/*`},scripts:{fmt:`ts-builder format`,watch:`ts-builder build --target block-model --watch`,build:`ts-builder build --target block-model && block-tools build-model`,check:`ts-builder check --target block-model`},dependencies:{"@platforma-sdk/model":`sdk:`,...J(e,`kind`)},devDependencies:{"@milaboratories/ts-builder":`sdk:`,"@milaboratories/ts-configs":`sdk:`,"@platforma-sdk/block-tools":`sdk:`},peerDependencies:{"@types/node":`*`,typescript:`*`}}}function nr(){P(`private`,!0),P(`type`,`module`),P(`main`,`dist/index.cjs`),P(`module`,`dist/index.js`),P(`types`,`dist/index.d.ts`),P(`exports`,{".":{types:`./dist/index.d.ts`,sources:`./src/index.ts`,import:`./dist/index.js`},"./dist/*":`./dist/*`}),I(`fmt`,`ts-builder format`),I(`watch`,`ts-builder build --target block-model --watch`),I(`build`,`ts-builder build --target block-model && block-tools build-model`),I(`check`,`ts-builder check --target block-model`),z(`@platforma-sdk/model`,`sdk:`),ut(`kind`),H({"@milaboratories/ts-builder":`sdk:`,"@milaboratories/ts-configs":`sdk:`,"@platforma-sdk/block-tools":`sdk:`}),U({"@types/node":`*`,typescript:`*`}),v(({ctx:e})=>!e.isSdkInternal,()=>v(y(Q),()=>{I(`test`,`vitest run --passWithNoTests`),B(`vitest`,`catalog:`),B(`@types/node`,`*`)},()=>V(`vitest`))),kn(),F(`tsup`),L(`lint`),K(`dependencies`),K(`devDependencies`),K(`peerDependencies`),K(`optionalDependencies`),G([...X])}function rr(){_(`model`,()=>{v(y(Q),()=>b(`tsconfig.json`,T(`model/tsconfig.node.json`)),()=>b(`tsconfig.json`,T(`model/tsconfig.json`))),b(`.oxlintrc.json`,T(`model/.oxlintrc.json`)),b(`.oxfmtrc.json`,T(`model/.oxfmtrc.json`)),C(`src/index.ts`,E(`model/src/index.tpl.ts`,e=>({kindPkg:`${e.blockVars.facadeName}.kind`}))),x(`package.json`,D(e=>tr(e)),()=>{nr()})})}var ir={".":{types:`./dist/index.d.ts`,sources:`./src/index.ts`,import:`./dist/index.js`,require:`./dist/index.cjs`,default:`./dist/index.js`}};function ar(e){return{name:`${e.blockVars.facadeName}.kind`,private:!0,type:`module`,main:`./dist/index.cjs`,module:`./dist/index.js`,types:`./dist/index.d.ts`,exports:ir,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":`sdk:`},devDependencies:{"@milaboratories/ts-builder":`sdk:`,"@milaboratories/ts-configs":`sdk:`,"@platforma-sdk/block-tools":`sdk:`},peerDependencies:{"@types/node":`*`,typescript:`*`}}}function or(){P(`private`,!0),P(`type`,`module`),P(`main`,`./dist/index.cjs`),P(`module`,`./dist/index.js`),P(`types`,`./dist/index.d.ts`),P(`exports`,ir),I(`fmt`,`ts-builder format`),I(`watch`,`ts-builder build --target block-kind --watch`),I(`build`,`ts-builder build --target block-kind && block-tools build-kind-manifest`),I(`check`,`ts-builder check --target block-kind`),L(`lint`),z(`@platforma-sdk/block-kind`,`sdk:`),H({"@milaboratories/ts-builder":`sdk:`,"@milaboratories/ts-configs":`sdk:`,"@platforma-sdk/block-tools":`sdk:`}),U({"@types/node":`*`,typescript:`*`}),K(`dependencies`),K(`devDependencies`),K(`peerDependencies`),K(`optionalDependencies`),G([...X])}function sr(){_(`kind`,()=>{b(`tsconfig.json`,T(`kind/tsconfig.json`)),b(`.oxlintrc.json`,T(`kind/.oxlintrc.json`)),b(`.oxfmtrc.json`,T(`kind/.oxfmtrc.json`)),C(`src/index.ts`,T(`kind/src/index.ts`)),x(`package.json`,D(e=>ar(e)),()=>{or()})})}function cr(e){return{name:`${e.blockVars.facadeName}.ui`,private:!0,type:`module`,scripts:{fmt:`ts-builder format`,dev:`ts-builder serve --target block-ui`,watch:`ts-builder build --target block-ui --watch`,build:`ts-builder build --target block-ui`,check:`ts-builder check --target block-ui`},dependencies:{"@platforma-sdk/ui-vue":`sdk:`,vue:`catalog:`,...Yt(e,`model`)},devDependencies:{"@milaboratories/ts-builder":`sdk:`,"@milaboratories/ts-configs":`sdk:`},peerDependencies:{"@types/node":`*`,typescript:`*`}}}function lr(){P(`private`,!0),P(`type`,`module`),I(`fmt`,`ts-builder format`),I(`dev`,`ts-builder serve --target block-ui`),I(`watch`,`ts-builder build --target block-ui --watch`),I(`build`,`ts-builder build --target block-ui`),I(`check`,`ts-builder check --target block-ui`),z(`@platforma-sdk/ui-vue`,`sdk:`),z(`vue`,`catalog:`),ut(`model`),H({"@milaboratories/ts-builder":`sdk:`,"@milaboratories/ts-configs":`sdk:`}),kn(),L(`preview`),L(`lint`),U({"@types/node":`*`,typescript:`*`}),v(({ctx:e})=>!e.isSdkInternal,()=>v(y(Q),()=>{I(`test`,`vitest run --passWithNoTests`),B(`vitest`,`catalog:`),B(`@types/node`,`*`)},()=>V(`vitest`))),K(`dependencies`),K(`devDependencies`),K(`peerDependencies`),K(`optionalDependencies`),G([...X])}function ur(){_(`ui`,()=>{v(y(Q),()=>b(`tsconfig.json`,T(`ui/tsconfig.node.json`)),()=>b(`tsconfig.json`,T(`ui/tsconfig.json`))),b(`.oxlintrc.json`,T(`ui/.oxlintrc.json`)),b(`.oxfmtrc.json`,T(`ui/.oxfmtrc.json`)),S(`index.html`,T(`ui/index.html`)),C(`src/main.ts`,T(`ui/src/main.ts`)),C(`src/app.ts`,E(`ui/src/app.tpl.ts`,e=>({modelPkg:`${e.blockVars.facadeName}.model`}))),C(`src/MainPage.vue`,E(`ui/src/MainPage.tpl.vue`,e=>({shortName:e.blockVars.shortName}))),x(`package.json`,D(e=>cr(e)),()=>{lr()})})}function dr(e){return{name:`${e.blockVars.facadeName}.workflow`,private:!0,type:`module`,scripts:{build:`shx rm -rf dist && pl-tengo build`,check:`pl-tengo check`,format:`/usr/bin/env emacs --script ./format.el || echo 'No emacs.'`},dependencies:{"@platforma-sdk/workflow-tengo":`sdk:`,...J(e,`software`)},devDependencies:{"@platforma-sdk/tengo-builder":`sdk:`,"@platforma-sdk/test":`sdk:`,shx:`catalog:`}}}function fr(){P(`private`,!0),P(`type`,`module`),I(`build`,`shx rm -rf dist && pl-tengo build`),I(`check`,`pl-tengo check`),I(`format`,`/usr/bin/env emacs --script ./format.el || echo 'No emacs.'`),v(({ctx:e})=>!e.isSdkInternal,()=>v(y(Q),()=>{I(`test`,`vitest run --passWithNoTests`),H({vitest:`catalog:`})},()=>V(`vitest`))),z(`@platforma-sdk/workflow-tengo`,`sdk:`),ut(`software`),H({"@platforma-sdk/tengo-builder":`sdk:`,"@platforma-sdk/test":`sdk:`,shx:`catalog:`}),kn(),K(`dependencies`),K(`devDependencies`),K(`peerDependencies`),K(`optionalDependencies`),G([...X])}function pr(){_(`workflow`,()=>{b(`format.el`,T(`workflow/format.el`)),v(({ctx:e})=>!e.isSdkInternal,()=>v(y(Q),()=>{b(`tsconfig.json`,T(`workflow/tsconfig.json`)),S(`vitest.config.mts`,T(`workflow/vitest.config.mts`))},()=>{w(`tsconfig.json`),w(`vitest.config.mts`)})),w(`index.js`),w(`index.d.ts`),C(`src/main.tpl.tengo`,E(`workflow/src/main.tpl.tengo`,e=>({shortName:e.blockVars.shortName}))),x(`package.json`,D(e=>dr(e)),()=>{fr()})})}function mr(e){return{name:`${e.blockVars.facadeName}.test`,private:!0,type:`module`,scripts:{fmt:`ts-builder format`,check:`ts-builder check --target block-test`,test:`vitest run --passWithNoTests`},peerDependencies:{typescript:`*`},devDependencies:{"@platforma-sdk/test":`sdk:`,"@milaboratories/ts-builder":`sdk:`,"@milaboratories/ts-configs":`sdk:`,vitest:`catalog:`}}}function hr(){P(`private`,!0),P(`type`,`module`),I(`fmt`,`ts-builder format`),I(`check`,`ts-builder check --target block-test`),I(`test`,`vitest run --passWithNoTests`),L(`lint`),H({"@platforma-sdk/test":`sdk:`,"@milaboratories/ts-builder":`sdk:`,"@milaboratories/ts-configs":`sdk:`,vitest:`catalog:`}),U({typescript:`*`}),V(`@types/node`),kn(),K(`dependencies`),K(`devDependencies`),K(`peerDependencies`),K(`optionalDependencies`),G([...X])}function gr(){_(`test`,()=>{b(`tsconfig.json`,T(`test/tsconfig.json`)),b(`.oxlintrc.json`,T(`test/.oxlintrc.json`)),b(`.oxfmtrc.json`,T(`test/.oxfmtrc.json`)),S(`vitest.config.mts`,T(`test/vitest.config.mts`)),C(`src/demo.test.ts`,Me(`import { expect, test } from "vitest";
13
13
 
14
14
  test("scaffolded block sanity check", () => {
15
15
  expect(true).toBe(true);