@platforma-sdk/block-tools 2.11.6 → 2.11.7

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 D(e){return e===``||e===void 0?[]:e.split(`.`)}function O(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function Ie(e,t){let n=D(t),r=e;for(let e of n){if(!O(r))return;r=r[e]}return r}function Le(e,t){let n=D(t);if(n.length===0)return!0;let r=e;for(let e=0;e<n.length-1;e++){if(!O(r))return!1;r=r[n[e]]}return O(r)?n[n.length-1]in r:!1}function Re(e,t,n){let r=D(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(O(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 ze(e,t){let n=D(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(!O(r))return;r=r[n[e]]}O(r)&&delete r[n[n.length-1]]}function Be(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 Ve(e){let t=e.split(`
10
10
  `);return t.length>0&&t[t.length-1]===``&&t.pop(),t}function He(e){return e.join(`
11
11
  `)+`
12
- `}function Ue(e){return e.replace(/(^|\s)#.*$/,`$1`).trim()}function We(e,t){let n=Ue(e);return n===``?!1:n===t.trim()}function Ge(e,t){for(let n of e)if(We(n,t))return!0;return!1}function Ke(e,t){return e===`sdk:`?t?`workspace:*`:`catalog:`:e}var qe=[`dependencies`,`devDependencies`,`peerDependencies`,`optionalDependencies`];function Je(e,t){if(M(e))for(let n of qe){let r=e[n];if(M(r))for(let e of Object.keys(r))r[e]===`sdk:`&&(r[e]=t?`workspace:*`:`catalog:`)}}var k;function Ye(e){if(!k)throw Error(`${e}() only valid inside a managed(...) body. Move this call inside managed(path, initial, () => {...}).`);return k}function A(e){let t=Ye(e);if(t.kind!==`json`)throw Error(`${e}() requires a JSON-managed body; got '${t.kind}'.`);return t}function j(e){let t=Ye(e);if(t.kind!==`yaml`)throw Error(`${e}() requires a YAML-managed body; got '${t.kind}'.`);return t}function Xe(e){let t=Ye(e);if(t.kind!==`lines`)throw Error(`${e}() requires a lines-managed body; got '${t.kind}'.`);return t}function Ze(e,t){let n=e.ctx??ve();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 M(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function Qe(e,t,n={}){if(k)throw Error(`Nested managed(...) body — engine bug.`);k={kind:`json`,obj:e,ctx:n.ctx,triggerContext:n.triggerContext};try{return t(n.ctx??n.triggerContext?.ctx),e}finally{k=void 0}}function $e(e,t,n={}){if(k)throw Error(`Nested managed(...) body — engine bug.`);k={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{k=void 0}}function et(e,t,n={}){if(k)throw Error(`Nested managed(...) body — engine bug.`);k={kind:`lines`,lines:e,ctx:n.ctx,triggerContext:n.triggerContext};try{return t(n.ctx??n.triggerContext?.ctx),e}finally{k=void 0}}Se((e,t)=>{if(!k)return!1;let n=k.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 N(e,t){Re(A(`ensureField`).obj,e,t)}function P(e,t){let n=A(`removeField`).obj;Le(n,e)&&(t&&!t(Ie(n,e))||ze(n,e))}function tt(e,t){let n=A(`requireField`).obj;if(!Le(n,e))throw Error(t??`requireField: missing field '${e}'`)}function F(e,t){N(`scripts.${e}`,t)}function I(e){P(`scripts.${e}`)}var nt=[`dependencies`,`devDependencies`,`peerDependencies`,`optionalDependencies`];function L(e,t,n,r){let i=A(e),a=i.obj,o=n===`sdk:`?Ke(n,Ze(i,e).isSdkInternal):n;for(let e of nt){if(e===r)continue;let n=a[e];M(n)&&t in n&&delete n[t]}let s=a[r],c=M(s)?s:{};c[t]=o,M(s)||(a[r]=c)}function R(e,t){L(`ensureDep`,e,t,`dependencies`)}function z(e,t){L(`ensureDevDep`,e,t,`devDependencies`)}function rt(e,t){L(`ensurePeerDep`,e,t,`peerDependencies`)}function B(e){let t=A(`removeDep`).obj;for(let n of nt){let r=t[n];M(r)&&e in r&&delete r[e]}}function V(e){for(let[t,n]of Object.entries(e))z(t,n)}function H(e){for(let[t,n]of Object.entries(e))rt(t,n)}function it(e,t,n){let r=Ze(A(e),e);for(let i of r.modules)i.scope===t&&L(e,i.name,`workspace:*`,n)}function at(e){it(`ensureWorkspaceScopeDeps`,e,`dependencies`)}function ot(e){it(`ensureWorkspaceScopeDevDeps`,e,`devDependencies`)}function st(e){let t=A(`pruneKeysMatching`).obj;for(let n of Object.keys(t))e(n,t[n])&&delete t[n]}function ct(e,t){let n=Be(e,t);for(let t of Object.keys(e))delete e[t];for(let t of Object.keys(n))e[t]=n[t]}function U(e){ct(A(`enforceFieldOrder`).obj,e)}function lt(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&&M(e[i])&&lt(e[i],!0)}function W(e=``,t={}){let n=t.recursive??!1;if(e===``&&!n)return;let r=A(`enforceAlphabeticalOrder`).obj;if(e===``){lt(r,!0);return}let i=Ie(r,e);M(i)&&lt(i,n)}function ut(){let e=j(`ensureWorkspaceModulePaths`),t=Ze(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 dt(e,t){let n=e.doc.getIn([`catalog`,t]);return typeof n==`string`?n:void 0}function ft(e,t){let n=j(`ensureCatalogVersion`);dt(n,e)===void 0&&n.doc.setIn([`catalog`,e],t)}function pt(e){let t=j(`ensureCatalogLatest`);if(!t.getLatestVersion)return;let n=t.getLatestVersion(e);n!==void 0&&dt(t,e)!==n&&t.doc.setIn([`catalog`,e],n)}function mt(e,t){let n=j(`pinCatalogToDependencyOf`);if(!n.getDerivedDependencyPin)return;let r=n.getDerivedDependencyPin(e);r!==void 0&&dt(n,e)!==r&&n.doc.setIn([`catalog`,e],r)}function ht(e){let t=j(`ensureCatalogAbsent`);t.doc.hasIn([`catalog`,e])&&t.doc.deleteIn([`catalog`,e])}function gt(e){let t=Xe(`ensureGitignoreEntries`);for(let n of e)Ge(t.lines,n)||t.lines.push(n)}function _t(e){return(0,o.parseDocument)(e)}function vt(e){return e.toString()}var yt=`.structure`;function bt(e,t=0){if(e<t)throw new xt(e,t)}var xt=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 St(e,t=1){let n={version:t};e.write(yt,JSON.stringify(n))}var Ct=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 wt(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 oe(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 Je(n,r.isSdkInternal),Fe(n,{collapse:!t.endsWith(`package.json`)});if(t.endsWith(`.yaml`)||t.endsWith(`.yml`))return(0,o.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 Tt(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,wt(n,t,r,i))}function Et(e,t,n,r,i,a){let o=e.split(`/`).pop()??e;if(e.endsWith(`.json`)){let i=ke(t);if(typeof i!=`object`||!i||Array.isArray(i))throw Error(`managed: parsed value at '${e}' is not a JSON object`);return Qe(i,n,{triggerContext:r}),Fe(i,{collapse:o!==`package.json`})}if(e.endsWith(`.yaml`)||e.endsWith(`.yml`)){let e=_t(t);return $e(e,n,{triggerContext:r,getLatestVersion:i,getDerivedDependencyPin:a}),vt(e)}if(o===`.gitignore`||o.endsWith(`.gitignore`)){let e=Ve(t);return et(e,n,{triggerContext:r}),He(e)}throw Error(`managed('${e}'): unsupported file kind. Only .json, .yaml, .yml, .gitignore are dispatched.`)}function Dt(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 Ot(e,t){let n=t===``?t:t.endsWith(`/`)?t.slice(0,-1):t;return e.has(n)}function kt(e,t,n){return{ctx:t,version:t.version,pathExists:t=>Ot(e,t),pathMissing:t=>!Ot(e,t),filesMatch:t=>{let r=n?`${n}/${t}`:t;for(let t of e)if(he(r,t))return!0;return!1}}}function At(e,t){for(let n of e.triggers)if(!n(t))return!1;return!0}function jt(e,t){return t?`init`:e.updateDepsOnly?`updateDeps`:`default`}function Mt(e,t){return e.filter(e=>e.modes.includes(t))}function Nt(e,t,n,r,i,a){let o=e.leaf;if(o.kind===`fixed`){let i=wt(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||Tt(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||Tt(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 Pt(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,ee=!1;u?d=t.read(l):(d=wt(c.initial,l,i,s),ee=!0);let f=Et(l,d,c.body,r,a,o);if(ee)return n||t.write(l,f),{scope:e.scope,path:l,primitive:`managed`,action:`create`};if(f!==d)return n||t.write(l,f),{scope:e.scope,path:l,primitive:`managed`,action:`update`}}function Ft(e,t,n,r,i,a,o,s){let c=Mt(e,jt(n,a)),l=[],u=Dt(t);for(let e of c){if(e.leaf.kind===`managed`||!At(e,kt(u,n,e.modulePath)))continue;let o=Nt(e,t,r,i,a,n);o&&l.push(o)}let d=Dt(t);for(let e of c){if(e.leaf.kind!==`managed`)continue;let a=kt(d,n,e.modulePath);if(!At(e,a))continue;let c=Pt(e,t,r,a,i,o,s,n);c&&l.push(c)}return l}function It(e,t,n,r={}){return _e(n,()=>{let i=ue(e,n),a=!!r.initMode,o=Ft(i,t,n,n.dryRun,r.templates,a,r.registryLookup,r.derivedPinLookup);if(!n.dryRun&&!n.updateDepsOnly&&!a){St(t);let i={...r.rediscover?r.rediscover(t):n,dryRun:!0},a=Ft(ue(e,i),t,i,!0,r.templates,!1,r.registryLookup,r.derivedPinLookup).filter(e=>e.path!==yt);if(a.length>0)throw new Ct(a[0])}return a&&!n.dryRun&&St(t),{changes:o}})}var Lt=[`root`,`block`,`model`,`ui`,`workflow`,`test`,`software`],Rt=class extends Error{constructor(e,t){super(e),this.path=t,this.name=`DiscoveryError`}};function zt(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 Bt(e){return e===``||e===`.`}function Vt(e){let t=e.pkg[`block-scope`];if(typeof t==`string`){if(!Lt.includes(t))throw new Rt(`package.json "block-scope" must be one of ${Lt.join(`, `)}, got '${t}'`,e.path);return t}if(Bt(e.path))return`root`;if(e.pkg.block!==void 0)return`block`;let n=zt(e.pkg);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 Ht(e){let t=[];for(let n of e){let e=Vt(n);if(!e)throw new Rt(`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:Bt(n.path)?``:n.path})}return t}function G(e,t){return e.modules.filter(e=>e.scope===t)}function Ut(e,t){let n=G(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 Wt(e,t){return{[Ut(e,t).name]:`workspace:*`}}function K(e,t){let n={};for(let r of G(e,t))n[r.name]=`workspace:*`;return n}function Gt(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:`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 Kt(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 q=class extends Error{constructor(e){super(e),this.name=`StructureCliError`}};function qt(e,t){return e===``?t:`${e}/${t}`}function Jt(e,t){try{return JSON.parse(e.read(t))}catch{return}}function Yt(e){if(e.includes(`*`))throw new q(`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 Xt(e){let t;try{t=e.read(`pnpm-workspace.yaml`)}catch{throw new q(`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,o.parse)(t)??{},r=Array.isArray(n.packages)?n.packages:[],i=new Set([``]);for(let t of r){let n=Yt(t);(n===``||e.exists(n))&&i.add(n)}let a=[];for(let t of i){let n=Jt(e,qt(t,`package.json`));n&&a.push({path:t,pkg:n})}return a}function Zt(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=Jt(e,qt(o,`package.json`));c&&t.push({path:o,pkg:c}),a<2&&r(o,a+1)}}return r(``,1),t}function Qt(e){let t=e.indexOf(`/`);if(!e.startsWith(`@`)||t<0)throw new q(`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 q(`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 $t(e){try{let t=JSON.parse(e.read(yt));return typeof t.version==`number`?t.version:0}catch{return 0}}function en(e){let{fs:t,isSdkInternal:n}=e,r=n?Zt(t):Xt(t);if(r.length===0)throw new q(`No workspace packages found. Run 'block-tools structure init' to scaffold a block.`);let i=Ht(r),a=$t(t);bt(a,0);let o=i.find(e=>e.scope===`block`)??i.find(e=>e.scope===`root`);if(!o)throw new q(`Could not find a 'block' (or root-as-block) package to derive BlockVars from.`);let s=Qt(o.name.replace(/\.block$/,``));return Kt({isSdkInternal:n,updateDepsOnly:e.updateDepsOnly??!1,modules:i,blockVars:s,version:a,dryRun:e.dryRun??!1})}var J=[`name`,`version`,`private`,`description`,`keywords`,`files`,`type`,`main`,`module`,`types`,`exports`,`scripts`,`dependencies`,`devDependencies`,`peerDependencies`,`optionalDependencies`,`packageManager`,`pnpm`,`block`,`block-software`];function tn(e){return{version:`1.0.0`,private:!0,scripts:{fmt:`turbo run fmt`,check:`turbo run check`,build:`turbo run build`,"build:dev":`env PL_PKG_DEV=local turbo run build`,test:`env PL_PKG_DEV=local turbo run test --concurrency 1`,"test:dry-run":`env PL_PKG_DEV=local turbo run test --dry-run=json`,"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 nn(){N(`packageManager`,`pnpm@9.12.0`),P(`name`),F(`fmt`,`turbo run fmt`),F(`check`,`turbo run check`),F(`build`,`turbo run build`),F(`build:dev`,`env PL_PKG_DEV=local turbo run build`),F(`test`,`env PL_PKG_DEV=local turbo run test --concurrency 1`),F(`test:dry-run`,`env PL_PKG_DEV=local turbo run test --dry-run=json`),F(`mark-stable`,`turbo run mark-stable`),F(`do-pack`,`turbo run do-pack`),F(`watch`,`turbo watch build`),F(`changeset`,`changeset`),F(`version-packages`,`changeset version`),F(`update-sdk`,`block-tools structure refresh --update-deps-only`),I(`update`),F(`upgrade-sdk`,`block-tools structure refresh --update-deps-only && pnpm i && block-tools structure refresh && pnpm i && pnpm fmt`),V({"@changesets/cli":`catalog:`,"@milaboratories/ts-builder":`sdk:`,"@platforma-sdk/block-tools":`sdk:`,shx:`catalog:`,turbo:`catalog:`}),H({oxlint:`*`,oxfmt:`*`}),st((e,t)=>{if(!/^(\/\/|--)/.test(e)||typeof t!=`object`||!t)return!1;let n=t;return n.pnpm!==void 0||n.overrides!==void 0}),W(`dependencies`),W(`devDependencies`),W(`peerDependencies`),W(`optionalDependencies`),U([...J])}var rn=2,an=500,on=3e4;function sn(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 cn(e){for(let t=1;;t++){let n;try{n=await fetch(e,{signal:AbortSignal.timeout(on)})}catch(e){if(t>rn)throw e;await(0,s.setTimeout)(an*2**(t-1)*(.8+.4*Math.random()));continue}if(n.ok)return n;if(!(n.status===429||n.status>=500)||t>rn)throw Error(`registry returned HTTP ${n.status}`);let r=sn(n.headers.get(`retry-after`));if(r!=null){await(0,s.setTimeout)(r);continue}await(0,s.setTimeout)(an*2**(t-1)*(.8+.4*Math.random()))}}function ln(){return{async getLatestVersion(e){let t=(await(await cn(`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 cn(`https://registry.npmjs.org/${e}/${t}`)).json();return r.dependencies?.[n]??r.peerDependencies?.[n]}}}async function un(e,t){let n=await Promise.all(t.map(async t=>[t,await e.getLatestVersion(t)]));return new Map(n)}function dn(e){return t=>e.get(t)}var fn=[/^@platforma-sdk\//,/^@milaboratories\//];function pn(e){return fn.some(t=>t.test(e))}async function mn(e,t=ln()){return e.length===0?()=>void 0:dn(await un(t,e))}function hn(e){return/^\d+\.\d+\.\d+(?:[-+][0-9A-Za-z.-]+)?$/.test(e)}async function gn(e,t=ln()){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(!hn(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 _n=[`vite`,`tsup`,`vue-tsc`,`@vitejs/plugin-vue`,`vite-plugin-dts`,`@platforma-sdk/eslint-config`];function Y(){for(let e of _n)B(e)}var X=[`@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`],vn=`0.0.0-init-must-fetch`;for(let e of X)if(!pn(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 yn={turbo:`~2.8.11`,shx:`~0.4.0`,"@changesets/cli":`~2.29.8`,vitest:`~4.0.18`},bn=[{entry:`vue`,of:`@platforma-sdk/ui-vue`}],xn=`@platforma-open/milaboratories.runenv-python-3`,Sn=`1.8.2`;function Cn(e){let t=e.modules.filter(e=>e.path!==``).map(e=>e.path).sort(),n={};for(let e of X)n[e]=vn;return Object.assign(n,yn),e.modules.some(e=>e.scope===`software`)&&(n[xn]=Sn),{packages:t,catalog:n}}function wn(){ut();for(let e of _n)ht(e)}var Tn=[`.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 En(){gt(Tn)}function Dn(){g(`root`,()=>{_(({ctx:e})=>!e.isSdkInternal,()=>{y(`turbo.json`,w(`root/turbo.json`)),y(`.vscode/settings.json`,w(`root/.vscode/settings.json`)),b(`package.json`,E(e=>tn(e)),()=>{nn()}),b(`pnpm-workspace.yaml`,E(e=>Cn(e)),()=>{wn()}),b(`.gitignore`,w(`root/.gitignore`),()=>{En()})})})}function On(e){return e.split(/[-_]+/).filter(e=>e.length>0).map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(` `)}function kn(){g(`root`,()=>{_(({ctx:e})=>!e.isSdkInternal,()=>{y(`.github/workflows/build.yaml`,T(`workflows/build.tpl.yaml`,e=>{let t=e.blockVars.shortName;return{appName:`Block: ${On(t)}`,appNameSlug:`block-${t}`}})),y(`.github/workflows/mark-stable.yaml`,T(`workflows/mark-stable.tpl.yaml`,e=>({appName:`Block: ${On(e.blockVars.shortName)} - Mark Stable`})))})})}var An={"@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`}},jn={s3:`s3://milab-euce1-prod-pkgs-s3-block-registry/pub/releases/?region=eu-central-1`,serveUrl:`https://blocks.pl-open.science`},Mn={s3:`s3://milab-euce1-prod-pkgs-s3-block-registry/aux/dev/?region=eu-central-1`,serveUrl:`https://aux-blocks.pl-open.science`};function Nn(e,t){let n=t?Mn:An[e]??jn;return`block-tools publish -r ${n.s3} --registry-serve-url ${n.serveUrl}`}function Pn(e){let t={};for(let n of G(e,`workflow`))t.workflow=`${n.name}/dist/tengo/tpl/main.plj.gz`;for(let n of G(e,`model`))t.model=`${n.name}/dist/model.json`;for(let n of G(e,`ui`))t.ui=`${n.name}/dist`;return t}function Fn(e,t){return{build:`ts-builder build --target block-facade && block-tools pack`,check:`ts-builder type-check --target block-facade`,prepublishOnly:Nn(e,t),"do-pack":`pnpm pack && shx mv *.tgz package.tgz`}}var In={"@milaboratories/ts-builder":`sdk:`,"@milaboratories/ts-configs":`sdk:`,"@platforma-sdk/block-tools":`sdk:`,"@platforma-sdk/model":`sdk:`,shx:`catalog:`,typescript:`catalog:`},Ln={".":{sources:`./src/index.ts`,types:`./dist/index.d.ts`,default:`./dist/index.js`}};function Rn(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={...In,...K(e,`model`),...K(e,`ui`),...K(e,`workflow`)},r={components:Pn(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 Rn(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:Ln,scripts:Fn(t.npmOrg,e.isSdkInternal),dependencies:{},devDependencies:n,block:r}}function Bn(e){let t=e.blockVars;N(`type`,`module`),N(`files`,[`dist`,`block-pack`]),N(`main`,`./dist/index.js`),N(`module`,`./dist/index.js`),N(`types`,`./dist/index.d.ts`),N(`exports`,Ln);let n=Fn(t.npmOrg,e.isSdkInternal);for(let[e,t]of Object.entries(n))F(e,t);I(`mark-stable`),ot(`model`),ot(`ui`),ot(`workflow`),z(`@milaboratories/ts-builder`,`sdk:`),z(`@milaboratories/ts-configs`,`sdk:`),z(`@platforma-sdk/block-tools`,`sdk:`),z(`@platforma-sdk/model`,`sdk:`),z(`shx`,`catalog:`),z(`typescript`,`catalog:`),N(`block.components`,Pn(e)),tt(`version`,`facade package.json must carry a 'version' (the facade publishes)`),W(`dependencies`),W(`devDependencies`),W(`peerDependencies`),W(`optionalDependencies`),U([...J])}function Vn(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 Hn(){g(`block`,()=>{C(`index.js`),C(`index.d.ts`),y(`src/index.ts`,T(`block/src/index.tpl.ts`,e=>({facadeName:e.blockVars.facadeName,pascalName:Vn(e.blockVars.shortName)}))),y(`src/AGENTS.ts`,w(`block/src/AGENTS.ts`)),x(`src/block-extra.ts`,w(`block/src/block-extra.ts`)),x(`src/agents-extra.ts`,w(`block/src/agents-extra.ts`)),y(`tsconfig.json`,w(`block/tsconfig.json`)),S(`logos/block-logo.png`,De(`block/logos/block-logo.png`)),S(`logos/organization-logo.png`,De(`block/logos/organization-logo.png`)),b(`package.json`,E(e=>zn(e)),e=>{Bn(e)})})}var Z=`src/**/*.test.ts`;function Un(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:`},devDependencies:{"@milaboratories/ts-builder":`sdk:`,"@milaboratories/ts-configs":`sdk:`,"@platforma-sdk/block-tools":`sdk:`},peerDependencies:{"@types/node":`*`,typescript:`*`}}}function Wn(){N(`private`,!0),N(`type`,`module`),N(`main`,`dist/index.cjs`),N(`module`,`dist/index.js`),N(`types`,`dist/index.d.ts`),N(`exports`,{".":{types:`./dist/index.d.ts`,sources:`./src/index.ts`,import:`./dist/index.js`},"./dist/*":`./dist/*`}),F(`fmt`,`ts-builder format`),F(`watch`,`ts-builder build --target block-model --watch`),F(`build`,`ts-builder build --target block-model && block-tools build-model`),F(`check`,`ts-builder check --target block-model`),R(`@platforma-sdk/model`,`sdk:`),V({"@milaboratories/ts-builder":`sdk:`,"@milaboratories/ts-configs":`sdk:`,"@platforma-sdk/block-tools":`sdk:`}),H({"@types/node":`*`,typescript:`*`}),_(({ctx:e})=>!e.isSdkInternal,()=>_(v(Z),()=>{F(`test`,`vitest run --passWithNoTests`),z(`vitest`,`catalog:`),z(`@types/node`,`*`)},()=>B(`vitest`))),Y(),P(`tsup`),I(`lint`),W(`dependencies`),W(`devDependencies`),W(`peerDependencies`),W(`optionalDependencies`),U([...J])}function Gn(){g(`model`,()=>{_(v(Z),()=>y(`tsconfig.json`,w(`model/tsconfig.node.json`)),()=>y(`tsconfig.json`,w(`model/tsconfig.json`))),y(`.oxlintrc.json`,w(`model/.oxlintrc.json`)),y(`.oxfmtrc.json`,w(`model/.oxfmtrc.json`)),S(`src/index.ts`,w(`model/src/index.ts`)),b(`package.json`,E(e=>Un(e)),()=>{Wn()})})}function Kn(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:`,...Wt(e,`model`)},devDependencies:{"@milaboratories/ts-builder":`sdk:`,"@milaboratories/ts-configs":`sdk:`},peerDependencies:{"@types/node":`*`,typescript:`*`}}}function qn(){N(`private`,!0),N(`type`,`module`),F(`fmt`,`ts-builder format`),F(`dev`,`ts-builder serve --target block-ui`),F(`watch`,`ts-builder build --target block-ui --watch`),F(`build`,`ts-builder build --target block-ui`),F(`check`,`ts-builder check --target block-ui`),R(`@platforma-sdk/ui-vue`,`sdk:`),R(`vue`,`catalog:`),at(`model`),V({"@milaboratories/ts-builder":`sdk:`,"@milaboratories/ts-configs":`sdk:`}),Y(),I(`preview`),I(`lint`),H({"@types/node":`*`,typescript:`*`}),_(({ctx:e})=>!e.isSdkInternal,()=>_(v(Z),()=>{F(`test`,`vitest run --passWithNoTests`),z(`vitest`,`catalog:`),z(`@types/node`,`*`)},()=>B(`vitest`))),W(`dependencies`),W(`devDependencies`),W(`peerDependencies`),W(`optionalDependencies`),U([...J])}function Jn(){g(`ui`,()=>{_(v(Z),()=>y(`tsconfig.json`,w(`ui/tsconfig.node.json`)),()=>y(`tsconfig.json`,w(`ui/tsconfig.json`))),y(`.oxlintrc.json`,w(`ui/.oxlintrc.json`)),y(`.oxfmtrc.json`,w(`ui/.oxfmtrc.json`)),x(`index.html`,w(`ui/index.html`)),S(`src/main.ts`,w(`ui/src/main.ts`)),S(`src/app.ts`,T(`ui/src/app.tpl.ts`,e=>({modelPkg:`${e.blockVars.facadeName}.model`}))),S(`src/MainPage.vue`,T(`ui/src/MainPage.tpl.vue`,e=>({shortName:e.blockVars.shortName}))),b(`package.json`,E(e=>Kn(e)),()=>{qn()})})}function Yn(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:`,...K(e,`software`)},devDependencies:{"@platforma-sdk/tengo-builder":`sdk:`,"@platforma-sdk/test":`sdk:`,shx:`catalog:`}}}function Xn(){N(`private`,!0),N(`type`,`module`),F(`build`,`shx rm -rf dist && pl-tengo build`),F(`check`,`pl-tengo check`),F(`format`,`/usr/bin/env emacs --script ./format.el || echo 'No emacs.'`),_(({ctx:e})=>!e.isSdkInternal,()=>_(v(Z),()=>{F(`test`,`vitest run --passWithNoTests`),V({vitest:`catalog:`})},()=>B(`vitest`))),R(`@platforma-sdk/workflow-tengo`,`sdk:`),at(`software`),V({"@platforma-sdk/tengo-builder":`sdk:`,"@platforma-sdk/test":`sdk:`,shx:`catalog:`}),Y(),W(`dependencies`),W(`devDependencies`),W(`peerDependencies`),W(`optionalDependencies`),U([...J])}function Zn(){g(`workflow`,()=>{y(`format.el`,w(`workflow/format.el`)),_(({ctx:e})=>!e.isSdkInternal,()=>_(v(Z),()=>{y(`tsconfig.json`,w(`workflow/tsconfig.json`)),x(`vitest.config.mts`,w(`workflow/vitest.config.mts`))},()=>{C(`tsconfig.json`),C(`vitest.config.mts`)})),C(`index.js`),C(`index.d.ts`),S(`src/main.tpl.tengo`,T(`workflow/src/main.tpl.tengo`,e=>({shortName:e.blockVars.shortName}))),b(`package.json`,E(e=>Yn(e)),()=>{Xn()})})}function Qn(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 $n(){N(`private`,!0),N(`type`,`module`),F(`fmt`,`ts-builder format`),F(`check`,`ts-builder check --target block-test`),F(`test`,`vitest run --passWithNoTests`),I(`lint`),V({"@platforma-sdk/test":`sdk:`,"@milaboratories/ts-builder":`sdk:`,"@milaboratories/ts-configs":`sdk:`,vitest:`catalog:`}),H({typescript:`*`}),B(`@types/node`),Y(),W(`dependencies`),W(`devDependencies`),W(`peerDependencies`),W(`optionalDependencies`),U([...J])}function er(){g(`test`,()=>{y(`tsconfig.json`,w(`test/tsconfig.json`)),y(`.oxlintrc.json`,w(`test/.oxlintrc.json`)),y(`.oxfmtrc.json`,w(`test/.oxfmtrc.json`)),x(`vitest.config.mts`,w(`test/vitest.config.mts`)),S(`src/demo.test.ts`,Oe(`import { expect, test } from "vitest";
12
+ `}function Ue(e){return e.replace(/(^|\s)#.*$/,`$1`).trim()}function We(e,t){let n=Ue(e);return n===``?!1:n===t.trim()}function Ge(e,t){for(let n of e)if(We(n,t))return!0;return!1}function Ke(e,t){return e===`sdk:`?t?`workspace:*`:`catalog:`:e}var qe=[`dependencies`,`devDependencies`,`peerDependencies`,`optionalDependencies`];function Je(e,t){if(M(e))for(let n of qe){let r=e[n];if(M(r))for(let e of Object.keys(r))r[e]===`sdk:`&&(r[e]=t?`workspace:*`:`catalog:`)}}var k;function Ye(e){if(!k)throw Error(`${e}() only valid inside a managed(...) body. Move this call inside managed(path, initial, () => {...}).`);return k}function A(e){let t=Ye(e);if(t.kind!==`json`)throw Error(`${e}() requires a JSON-managed body; got '${t.kind}'.`);return t}function j(e){let t=Ye(e);if(t.kind!==`yaml`)throw Error(`${e}() requires a YAML-managed body; got '${t.kind}'.`);return t}function Xe(e){let t=Ye(e);if(t.kind!==`lines`)throw Error(`${e}() requires a lines-managed body; got '${t.kind}'.`);return t}function Ze(e,t){let n=e.ctx??ve();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 M(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function Qe(e,t,n={}){if(k)throw Error(`Nested managed(...) body — engine bug.`);k={kind:`json`,obj:e,ctx:n.ctx,triggerContext:n.triggerContext};try{return t(n.ctx??n.triggerContext?.ctx),e}finally{k=void 0}}function $e(e,t,n={}){if(k)throw Error(`Nested managed(...) body — engine bug.`);k={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{k=void 0}}function et(e,t,n={}){if(k)throw Error(`Nested managed(...) body — engine bug.`);k={kind:`lines`,lines:e,ctx:n.ctx,triggerContext:n.triggerContext};try{return t(n.ctx??n.triggerContext?.ctx),e}finally{k=void 0}}Se((e,t)=>{if(!k)return!1;let n=k.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 N(e,t){Re(A(`ensureField`).obj,e,t)}function P(e,t){let n=A(`removeField`).obj;Le(n,e)&&(t&&!t(Ie(n,e))||ze(n,e))}function tt(e,t){let n=A(`requireField`).obj;if(!Le(n,e))throw Error(t??`requireField: missing field '${e}'`)}function F(e,t){N(`scripts.${e}`,t)}function I(e){P(`scripts.${e}`)}var nt=[`dependencies`,`devDependencies`,`peerDependencies`,`optionalDependencies`];function L(e,t,n,r){let i=A(e),a=i.obj,o=n===`sdk:`?Ke(n,Ze(i,e).isSdkInternal):n;for(let e of nt){if(e===r)continue;let n=a[e];M(n)&&t in n&&delete n[t]}let s=a[r],c=M(s)?s:{};c[t]=o,M(s)||(a[r]=c)}function R(e,t){L(`ensureDep`,e,t,`dependencies`)}function z(e,t){L(`ensureDevDep`,e,t,`devDependencies`)}function rt(e,t){L(`ensurePeerDep`,e,t,`peerDependencies`)}function B(e){let t=A(`removeDep`).obj;for(let n of nt){let r=t[n];M(r)&&e in r&&delete r[e]}}function V(e){for(let[t,n]of Object.entries(e))z(t,n)}function H(e){for(let[t,n]of Object.entries(e))rt(t,n)}function it(e,t,n){let r=Ze(A(e),e);for(let i of r.modules)i.scope===t&&L(e,i.name,`workspace:*`,n)}function at(e){it(`ensureWorkspaceScopeDeps`,e,`dependencies`)}function ot(e){it(`ensureWorkspaceScopeDevDeps`,e,`devDependencies`)}function st(e){let t=A(`pruneKeysMatching`).obj;for(let n of Object.keys(t))e(n,t[n])&&delete t[n]}function ct(e,t){let n=Be(e,t);for(let t of Object.keys(e))delete e[t];for(let t of Object.keys(n))e[t]=n[t]}function U(e){ct(A(`enforceFieldOrder`).obj,e)}function lt(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&&M(e[i])&&lt(e[i],!0)}function W(e=``,t={}){let n=t.recursive??!1;if(e===``&&!n)return;let r=A(`enforceAlphabeticalOrder`).obj;if(e===``){lt(r,!0);return}let i=Ie(r,e);M(i)&&lt(i,n)}function ut(){let e=j(`ensureWorkspaceModulePaths`),t=Ze(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 dt(e,t){let n=e.doc.getIn([`catalog`,t]);return typeof n==`string`?n:void 0}function ft(e,t){let n=j(`ensureCatalogVersion`);dt(n,e)===void 0&&n.doc.setIn([`catalog`,e],t)}function pt(e){let t=j(`ensureCatalogLatest`);if(!t.getLatestVersion)return;let n=t.getLatestVersion(e);n!==void 0&&dt(t,e)!==n&&t.doc.setIn([`catalog`,e],n)}function mt(e,t){let n=j(`pinCatalogToDependencyOf`);if(!n.getDerivedDependencyPin)return;let r=n.getDerivedDependencyPin(e);r!==void 0&&dt(n,e)!==r&&n.doc.setIn([`catalog`,e],r)}function ht(e){let t=j(`ensureCatalogAbsent`);t.doc.hasIn([`catalog`,e])&&t.doc.deleteIn([`catalog`,e])}function gt(e){let t=Xe(`ensureGitignoreEntries`);for(let n of e)Ge(t.lines,n)||t.lines.push(n)}function _t(e){return(0,o.parseDocument)(e)}function vt(e){return e.toString()}var yt=`.structure`;function bt(e,t=0){if(e<t)throw new xt(e,t)}var xt=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 St(e,t=1){let n={version:t};e.write(yt,JSON.stringify(n))}var Ct=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 wt(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 oe(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 Je(n,r.isSdkInternal),Fe(n,{collapse:!t.endsWith(`package.json`)});if(t.endsWith(`.yaml`)||t.endsWith(`.yml`))return(0,o.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 Tt(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,wt(n,t,r,i))}function Et(e,t,n,r,i,a){let o=e.split(`/`).pop()??e;if(e.endsWith(`.json`)){let i=ke(t);if(typeof i!=`object`||!i||Array.isArray(i))throw Error(`managed: parsed value at '${e}' is not a JSON object`);return Qe(i,n,{triggerContext:r}),Fe(i,{collapse:o!==`package.json`})}if(e.endsWith(`.yaml`)||e.endsWith(`.yml`)){let e=_t(t);return $e(e,n,{triggerContext:r,getLatestVersion:i,getDerivedDependencyPin:a}),vt(e)}if(o===`.gitignore`||o.endsWith(`.gitignore`)){let e=Ve(t);return et(e,n,{triggerContext:r}),He(e)}throw Error(`managed('${e}'): unsupported file kind. Only .json, .yaml, .yml, .gitignore are dispatched.`)}function Dt(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 Ot(e,t){let n=t===``?t:t.endsWith(`/`)?t.slice(0,-1):t;return e.has(n)}function kt(e,t,n){return{ctx:t,version:t.version,pathExists:t=>Ot(e,t),pathMissing:t=>!Ot(e,t),filesMatch:t=>{let r=n?`${n}/${t}`:t;for(let t of e)if(he(r,t))return!0;return!1}}}function At(e,t){for(let n of e.triggers)if(!n(t))return!1;return!0}function jt(e,t){return t?`init`:e.updateDepsOnly?`updateDeps`:`default`}function Mt(e,t){return e.filter(e=>e.modes.includes(t))}function Nt(e,t,n,r,i,a){let o=e.leaf;if(o.kind===`fixed`){let i=wt(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||Tt(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||Tt(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 Pt(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,ee=!1;u?d=t.read(l):(d=wt(c.initial,l,i,s),ee=!0);let f=Et(l,d,c.body,r,a,o);if(ee)return n||t.write(l,f),{scope:e.scope,path:l,primitive:`managed`,action:`create`};if(f!==d)return n||t.write(l,f),{scope:e.scope,path:l,primitive:`managed`,action:`update`}}function Ft(e,t,n,r,i,a,o,s){let c=Mt(e,jt(n,a)),l=[],u=Dt(t);for(let e of c){if(e.leaf.kind===`managed`||!At(e,kt(u,n,e.modulePath)))continue;let o=Nt(e,t,r,i,a,n);o&&l.push(o)}let d=Dt(t);for(let e of c){if(e.leaf.kind!==`managed`)continue;let a=kt(d,n,e.modulePath);if(!At(e,a))continue;let c=Pt(e,t,r,a,i,o,s,n);c&&l.push(c)}return l}function It(e,t,n,r={}){return _e(n,()=>{let i=ue(e,n),a=!!r.initMode,o=Ft(i,t,n,n.dryRun,r.templates,a,r.registryLookup,r.derivedPinLookup);if(!n.dryRun&&!n.updateDepsOnly&&!a){St(t);let i={...r.rediscover?r.rediscover(t):n,dryRun:!0},a=Ft(ue(e,i),t,i,!0,r.templates,!1,r.registryLookup,r.derivedPinLookup).filter(e=>e.path!==yt);if(a.length>0)throw new Ct(a[0])}return a&&!n.dryRun&&St(t),{changes:o}})}var Lt=[`root`,`block`,`model`,`ui`,`workflow`,`test`,`software`],Rt=class extends Error{constructor(e,t){super(e),this.path=t,this.name=`DiscoveryError`}};function zt(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 Bt(e){return e===``||e===`.`}function Vt(e){let t=e.pkg[`block-scope`];if(typeof t==`string`){if(!Lt.includes(t))throw new Rt(`package.json "block-scope" must be one of ${Lt.join(`, `)}, got '${t}'`,e.path);return t}if(Bt(e.path))return`root`;if(e.pkg.block!==void 0)return`block`;let n=zt(e.pkg);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 Ht(e){let t=[];for(let n of e){let e=Vt(n);if(!e)throw new Rt(`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:Bt(n.path)?``:n.path})}return t}function G(e,t){return e.modules.filter(e=>e.scope===t)}function Ut(e,t){let n=G(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 Wt(e,t){return{[Ut(e,t).name]:`workspace:*`}}function K(e,t){let n={};for(let r of G(e,t))n[r.name]=`workspace:*`;return n}function Gt(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:`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 Kt(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 q=class extends Error{constructor(e){super(e),this.name=`StructureCliError`}};function qt(e,t){return e===``?t:`${e}/${t}`}function Jt(e,t){try{return JSON.parse(e.read(t))}catch{return}}function Yt(e){if(e.includes(`*`))throw new q(`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 Xt(e){let t;try{t=e.read(`pnpm-workspace.yaml`)}catch{throw new q(`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,o.parse)(t)??{},r=Array.isArray(n.packages)?n.packages:[],i=new Set([``]);for(let t of r){let n=Yt(t);(n===``||e.exists(n))&&i.add(n)}let a=[];for(let t of i){let n=Jt(e,qt(t,`package.json`));n&&a.push({path:t,pkg:n})}return a}function Zt(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=Jt(e,qt(o,`package.json`));c&&t.push({path:o,pkg:c}),a<2&&r(o,a+1)}}return r(``,1),t}function Qt(e){let t=e.indexOf(`/`);if(!e.startsWith(`@`)||t<0)throw new q(`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 q(`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 $t(e){try{let t=JSON.parse(e.read(yt));return typeof t.version==`number`?t.version:0}catch{return 0}}function en(e){let{fs:t,isSdkInternal:n}=e,r=n?Zt(t):Xt(t);if(r.length===0)throw new q(`No workspace packages found. Run 'block-tools structure init' to scaffold a block.`);let i=Ht(r),a=$t(t);bt(a,0);let o=i.find(e=>e.scope===`block`)??i.find(e=>e.scope===`root`);if(!o)throw new q(`Could not find a 'block' (or root-as-block) package to derive BlockVars from.`);let s=Qt(o.name.replace(/\.block$/,``));return Kt({isSdkInternal:n,updateDepsOnly:e.updateDepsOnly??!1,modules:i,blockVars:s,version:a,dryRun:e.dryRun??!1})}var J=[`name`,`version`,`private`,`description`,`keywords`,`files`,`type`,`main`,`module`,`types`,`exports`,`scripts`,`dependencies`,`devDependencies`,`peerDependencies`,`optionalDependencies`,`packageManager`,`pnpm`,`block`,`block-software`];function tn(e){return{version:`1.0.0`,private:!0,scripts:{fmt:`turbo run fmt`,check:`turbo run check`,build:`turbo run build`,"build:dev":`env PL_PKG_DEV=local turbo run build`,test:`env PL_PKG_DEV=local turbo run test --concurrency 1`,"test:dry-run":`env PL_PKG_DEV=local turbo run test --dry-run=json`,"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 nn(){N(`packageManager`,`pnpm@9.12.0`),P(`name`),F(`fmt`,`turbo run fmt`),F(`check`,`turbo run check`),F(`build`,`turbo run build`),F(`build:dev`,`env PL_PKG_DEV=local turbo run build`),F(`test`,`env PL_PKG_DEV=local turbo run test --concurrency 1`),F(`test:dry-run`,`env PL_PKG_DEV=local turbo run test --dry-run=json`),F(`mark-stable`,`turbo run mark-stable`),F(`do-pack`,`turbo run do-pack`),F(`watch`,`turbo watch build`),F(`changeset`,`changeset`),F(`version-packages`,`changeset version`),F(`update-sdk`,`block-tools structure refresh --update-deps-only`),I(`update`),F(`upgrade-sdk`,`block-tools structure refresh --update-deps-only && pnpm i && block-tools structure refresh && pnpm i && pnpm fmt`),V({"@changesets/cli":`catalog:`,"@milaboratories/ts-builder":`sdk:`,"@platforma-sdk/block-tools":`sdk:`,shx:`catalog:`,turbo:`catalog:`}),H({oxlint:`*`,oxfmt:`*`}),st((e,t)=>{if(!/^(\/\/|--)/.test(e)||typeof t!=`object`||!t)return!1;let n=t;return n.pnpm!==void 0||n.overrides!==void 0}),W(`dependencies`),W(`devDependencies`),W(`peerDependencies`),W(`optionalDependencies`),U([...J])}var rn=2,an=500,on=3e4;function sn(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 cn(e){for(let t=1;;t++){let n;try{n=await fetch(e,{signal:AbortSignal.timeout(on)})}catch(e){if(t>rn)throw e;await(0,s.setTimeout)(an*2**(t-1)*(.8+.4*Math.random()));continue}if(n.ok)return n;if(!(n.status===429||n.status>=500)||t>rn)throw Error(`registry returned HTTP ${n.status}`);let r=sn(n.headers.get(`retry-after`));if(r!=null){await(0,s.setTimeout)(r);continue}await(0,s.setTimeout)(an*2**(t-1)*(.8+.4*Math.random()))}}function ln(){return{async getLatestVersion(e){let t=(await(await cn(`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 cn(`https://registry.npmjs.org/${e}/${t}`)).json();return r.dependencies?.[n]??r.peerDependencies?.[n]}}}async function un(e,t){let n=await Promise.all(t.map(async t=>[t,await e.getLatestVersion(t)]));return new Map(n)}function dn(e){return t=>e.get(t)}var fn=[/^@platforma-sdk\//,/^@milaboratories\//];function pn(e){return fn.some(t=>t.test(e))}async function mn(e,t=ln()){return e.length===0?()=>void 0:dn(await un(t,e))}function hn(e){return/^\d+\.\d+\.\d+(?:[-+][0-9A-Za-z.-]+)?$/.test(e)}async function gn(e,t=ln()){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(!hn(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 _n=[`vite`,`tsup`,`vue-tsc`,`@vitejs/plugin-vue`,`vite-plugin-dts`,`@platforma-sdk/eslint-config`];function Y(){for(let e of _n)B(e)}var X=[`@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`],vn=`0.0.0-init-must-fetch`;for(let e of X)if(!pn(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 yn={turbo:`~2.8.11`,shx:`~0.4.0`,"@changesets/cli":`~2.29.8`,vitest:`~4.0.18`},bn=[{entry:`vue`,of:`@platforma-sdk/ui-vue`}],xn=`@platforma-open/milaboratories.runenv-python-3`,Sn=`1.8.2`;function Cn(e){let t=e.modules.filter(e=>e.path!==``).map(e=>e.path).sort(),n={};for(let e of X)n[e]=vn;return Object.assign(n,yn),e.modules.some(e=>e.scope===`software`)&&(n[xn]=Sn),{packages:t,catalog:n}}function wn(){ut();for(let e of _n)ht(e)}var Tn=[`.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 En(){gt(Tn)}function Dn(){g(`root`,()=>{_(({ctx:e})=>!e.isSdkInternal,()=>{y(`turbo.json`,w(`root/turbo.json`)),y(`.vscode/settings.json`,w(`root/.vscode/settings.json`)),b(`package.json`,E(e=>tn(e)),()=>{nn()}),b(`pnpm-workspace.yaml`,E(e=>Cn(e)),()=>{wn()}),b(`.gitignore`,w(`root/.gitignore`),()=>{En()})})})}function On(e){return e.split(/[-_]+/).filter(e=>e.length>0).map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(` `)}function kn(){g(`root`,()=>{_(({ctx:e})=>!e.isSdkInternal,()=>{y(`.github/workflows/build.yaml`,T(`workflows/build.tpl.yaml`,e=>{let t=e.blockVars.shortName;return{appName:`Block: ${On(t)}`,appNameSlug:`block-${t}`}})),y(`.github/workflows/mark-stable.yaml`,T(`workflows/mark-stable.tpl.yaml`,e=>({appName:`Block: ${On(e.blockVars.shortName)} - Mark Stable`})))})})}var An={"@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`}},jn={s3:`s3://milab-euce1-prod-pkgs-s3-block-registry/pub/releases/?region=eu-central-1`,serveUrl:`https://blocks.pl-open.science`},Mn={s3:`s3://milab-euce1-prod-pkgs-s3-block-registry/aux/dev/?region=eu-central-1`,serveUrl:`https://aux-blocks.pl-open.science`};function Nn(e,t){let n=t?Mn:An[e]??jn;return`block-tools publish -r ${n.s3} --registry-serve-url ${n.serveUrl}`}function Pn(e){let t={};for(let n of G(e,`workflow`))t.workflow=`${n.name}/dist/tengo/tpl/main.plj.gz`;for(let n of G(e,`model`))t.model=`${n.name}/dist/model.json`;for(let n of G(e,`ui`))t.ui=`${n.name}/dist`;return t}function Fn(e,t){return{build:`ts-builder build --target block-facade && block-tools pack`,check:`ts-builder type-check --target block-facade`,prepublishOnly:Nn(e,t),"do-pack":`shx rm -f package.tgz && pnpm pack && shx mv *.tgz package.tgz`}}var In={"@milaboratories/ts-builder":`sdk:`,"@milaboratories/ts-configs":`sdk:`,"@platforma-sdk/block-tools":`sdk:`,"@platforma-sdk/model":`sdk:`,shx:`catalog:`,typescript:`catalog:`},Ln={".":{sources:`./src/index.ts`,types:`./dist/index.d.ts`,default:`./dist/index.js`}};function Rn(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={...In,...K(e,`model`),...K(e,`ui`),...K(e,`workflow`)},r={components:Pn(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 Rn(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:Ln,scripts:Fn(t.npmOrg,e.isSdkInternal),dependencies:{},devDependencies:n,block:r}}function Bn(e){let t=e.blockVars;N(`type`,`module`),N(`files`,[`dist`,`block-pack`]),N(`main`,`./dist/index.js`),N(`module`,`./dist/index.js`),N(`types`,`./dist/index.d.ts`),N(`exports`,Ln);let n=Fn(t.npmOrg,e.isSdkInternal);for(let[e,t]of Object.entries(n))F(e,t);I(`mark-stable`),ot(`model`),ot(`ui`),ot(`workflow`),z(`@milaboratories/ts-builder`,`sdk:`),z(`@milaboratories/ts-configs`,`sdk:`),z(`@platforma-sdk/block-tools`,`sdk:`),z(`@platforma-sdk/model`,`sdk:`),z(`shx`,`catalog:`),z(`typescript`,`catalog:`),N(`block.components`,Pn(e)),tt(`version`,`facade package.json must carry a 'version' (the facade publishes)`),W(`dependencies`),W(`devDependencies`),W(`peerDependencies`),W(`optionalDependencies`),U([...J])}function Vn(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 Hn(){g(`block`,()=>{C(`index.js`),C(`index.d.ts`),y(`src/index.ts`,T(`block/src/index.tpl.ts`,e=>({facadeName:e.blockVars.facadeName,pascalName:Vn(e.blockVars.shortName)}))),y(`src/AGENTS.ts`,w(`block/src/AGENTS.ts`)),x(`src/block-extra.ts`,w(`block/src/block-extra.ts`)),x(`src/agents-extra.ts`,w(`block/src/agents-extra.ts`)),y(`tsconfig.json`,w(`block/tsconfig.json`)),S(`logos/block-logo.png`,De(`block/logos/block-logo.png`)),S(`logos/organization-logo.png`,De(`block/logos/organization-logo.png`)),b(`package.json`,E(e=>zn(e)),e=>{Bn(e)})})}var Z=`src/**/*.test.ts`;function Un(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:`},devDependencies:{"@milaboratories/ts-builder":`sdk:`,"@milaboratories/ts-configs":`sdk:`,"@platforma-sdk/block-tools":`sdk:`},peerDependencies:{"@types/node":`*`,typescript:`*`}}}function Wn(){N(`private`,!0),N(`type`,`module`),N(`main`,`dist/index.cjs`),N(`module`,`dist/index.js`),N(`types`,`dist/index.d.ts`),N(`exports`,{".":{types:`./dist/index.d.ts`,sources:`./src/index.ts`,import:`./dist/index.js`},"./dist/*":`./dist/*`}),F(`fmt`,`ts-builder format`),F(`watch`,`ts-builder build --target block-model --watch`),F(`build`,`ts-builder build --target block-model && block-tools build-model`),F(`check`,`ts-builder check --target block-model`),R(`@platforma-sdk/model`,`sdk:`),V({"@milaboratories/ts-builder":`sdk:`,"@milaboratories/ts-configs":`sdk:`,"@platforma-sdk/block-tools":`sdk:`}),H({"@types/node":`*`,typescript:`*`}),_(({ctx:e})=>!e.isSdkInternal,()=>_(v(Z),()=>{F(`test`,`vitest run --passWithNoTests`),z(`vitest`,`catalog:`),z(`@types/node`,`*`)},()=>B(`vitest`))),Y(),P(`tsup`),I(`lint`),W(`dependencies`),W(`devDependencies`),W(`peerDependencies`),W(`optionalDependencies`),U([...J])}function Gn(){g(`model`,()=>{_(v(Z),()=>y(`tsconfig.json`,w(`model/tsconfig.node.json`)),()=>y(`tsconfig.json`,w(`model/tsconfig.json`))),y(`.oxlintrc.json`,w(`model/.oxlintrc.json`)),y(`.oxfmtrc.json`,w(`model/.oxfmtrc.json`)),S(`src/index.ts`,w(`model/src/index.ts`)),b(`package.json`,E(e=>Un(e)),()=>{Wn()})})}function Kn(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:`,...Wt(e,`model`)},devDependencies:{"@milaboratories/ts-builder":`sdk:`,"@milaboratories/ts-configs":`sdk:`},peerDependencies:{"@types/node":`*`,typescript:`*`}}}function qn(){N(`private`,!0),N(`type`,`module`),F(`fmt`,`ts-builder format`),F(`dev`,`ts-builder serve --target block-ui`),F(`watch`,`ts-builder build --target block-ui --watch`),F(`build`,`ts-builder build --target block-ui`),F(`check`,`ts-builder check --target block-ui`),R(`@platforma-sdk/ui-vue`,`sdk:`),R(`vue`,`catalog:`),at(`model`),V({"@milaboratories/ts-builder":`sdk:`,"@milaboratories/ts-configs":`sdk:`}),Y(),I(`preview`),I(`lint`),H({"@types/node":`*`,typescript:`*`}),_(({ctx:e})=>!e.isSdkInternal,()=>_(v(Z),()=>{F(`test`,`vitest run --passWithNoTests`),z(`vitest`,`catalog:`),z(`@types/node`,`*`)},()=>B(`vitest`))),W(`dependencies`),W(`devDependencies`),W(`peerDependencies`),W(`optionalDependencies`),U([...J])}function Jn(){g(`ui`,()=>{_(v(Z),()=>y(`tsconfig.json`,w(`ui/tsconfig.node.json`)),()=>y(`tsconfig.json`,w(`ui/tsconfig.json`))),y(`.oxlintrc.json`,w(`ui/.oxlintrc.json`)),y(`.oxfmtrc.json`,w(`ui/.oxfmtrc.json`)),x(`index.html`,w(`ui/index.html`)),S(`src/main.ts`,w(`ui/src/main.ts`)),S(`src/app.ts`,T(`ui/src/app.tpl.ts`,e=>({modelPkg:`${e.blockVars.facadeName}.model`}))),S(`src/MainPage.vue`,T(`ui/src/MainPage.tpl.vue`,e=>({shortName:e.blockVars.shortName}))),b(`package.json`,E(e=>Kn(e)),()=>{qn()})})}function Yn(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:`,...K(e,`software`)},devDependencies:{"@platforma-sdk/tengo-builder":`sdk:`,"@platforma-sdk/test":`sdk:`,shx:`catalog:`}}}function Xn(){N(`private`,!0),N(`type`,`module`),F(`build`,`shx rm -rf dist && pl-tengo build`),F(`check`,`pl-tengo check`),F(`format`,`/usr/bin/env emacs --script ./format.el || echo 'No emacs.'`),_(({ctx:e})=>!e.isSdkInternal,()=>_(v(Z),()=>{F(`test`,`vitest run --passWithNoTests`),V({vitest:`catalog:`})},()=>B(`vitest`))),R(`@platforma-sdk/workflow-tengo`,`sdk:`),at(`software`),V({"@platforma-sdk/tengo-builder":`sdk:`,"@platforma-sdk/test":`sdk:`,shx:`catalog:`}),Y(),W(`dependencies`),W(`devDependencies`),W(`peerDependencies`),W(`optionalDependencies`),U([...J])}function Zn(){g(`workflow`,()=>{y(`format.el`,w(`workflow/format.el`)),_(({ctx:e})=>!e.isSdkInternal,()=>_(v(Z),()=>{y(`tsconfig.json`,w(`workflow/tsconfig.json`)),x(`vitest.config.mts`,w(`workflow/vitest.config.mts`))},()=>{C(`tsconfig.json`),C(`vitest.config.mts`)})),C(`index.js`),C(`index.d.ts`),S(`src/main.tpl.tengo`,T(`workflow/src/main.tpl.tengo`,e=>({shortName:e.blockVars.shortName}))),b(`package.json`,E(e=>Yn(e)),()=>{Xn()})})}function Qn(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 $n(){N(`private`,!0),N(`type`,`module`),F(`fmt`,`ts-builder format`),F(`check`,`ts-builder check --target block-test`),F(`test`,`vitest run --passWithNoTests`),I(`lint`),V({"@platforma-sdk/test":`sdk:`,"@milaboratories/ts-builder":`sdk:`,"@milaboratories/ts-configs":`sdk:`,vitest:`catalog:`}),H({typescript:`*`}),B(`@types/node`),Y(),W(`dependencies`),W(`devDependencies`),W(`peerDependencies`),W(`optionalDependencies`),U([...J])}function er(){g(`test`,()=>{y(`tsconfig.json`,w(`test/tsconfig.json`)),y(`.oxlintrc.json`,w(`test/.oxlintrc.json`)),y(`.oxfmtrc.json`,w(`test/.oxfmtrc.json`)),x(`vitest.config.mts`,w(`test/vitest.config.mts`)),S(`src/demo.test.ts`,Oe(`import { expect, test } from "vitest";
13
13
 
14
14
  test("scaffolded block sanity check", () => {
15
15
  expect(true).toBe(true);