@milaboratories/pl-middle-layer 1.12.1 → 1.12.2
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/block_registry/watcher.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1164 -1211
- package/dist/index.mjs.map +1 -1
- package/dist/middle_layer/project.d.ts.map +1 -1
- package/package.json +8 -8
- package/src/block_registry/watcher.ts +12 -1
- package/src/middle_layer/project.ts +1 -75
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"watcher.d.ts","sourceRoot":"","sources":["../../src/block_registry/watcher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAC7E,OAAO,EAAqB,aAAa,EAAE,MAAM,uCAAuC,CAAC;AACzF,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAGpC,OAAO,EAAe,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAE5D,eAAO,MAAM,4BAA4B,EAAE,WAE1C,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG,OAAO,CAAC,WAAW,CAAC,GAAG;IAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,UAAU,CAAA;CAAE,CAAC;AAI1F,qBAAa,kBAAmB,SAAQ,kBAAkB,CACxD,aAAa,EACb,aAAa,GAAG,SAAS,CAC1B;IAIG,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IAHnC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAa;gBAGhB,gBAAgB,EAAE,kBAAkB,EACrD,MAAM,EAAE,QAAQ,EAChB,GAAG,GAAE,qBAA0B;IAMjC,SAAS,CAAC,MAAM,CAAC,GAAG,EAAE,aAAa,GAAG,MAAM;cAa5B,SAAS,CAAC,GAAG,EAAE,aAAa,GAAG,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"watcher.d.ts","sourceRoot":"","sources":["../../src/block_registry/watcher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAC7E,OAAO,EAAqB,aAAa,EAAE,MAAM,uCAAuC,CAAC;AACzF,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAGpC,OAAO,EAAe,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAE5D,eAAO,MAAM,4BAA4B,EAAE,WAE1C,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG,OAAO,CAAC,WAAW,CAAC,GAAG;IAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,UAAU,CAAA;CAAE,CAAC;AAI1F,qBAAa,kBAAmB,SAAQ,kBAAkB,CACxD,aAAa,EACb,aAAa,GAAG,SAAS,CAC1B;IAIG,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IAHnC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAa;gBAGhB,gBAAgB,EAAE,kBAAkB,EACrD,MAAM,EAAE,QAAQ,EAChB,GAAG,GAAE,qBAA0B;IAMjC,SAAS,CAAC,MAAM,CAAC,GAAG,EAAE,aAAa,GAAG,MAAM;cAa5B,SAAS,CAAC,GAAG,EAAE,aAAa,GAAG,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC;IA4DjF,SAAS,CAAC,YAAY,CACpB,IAAI,EAAE,aAAa,GAAG,SAAS,EAC/B,IAAI,EAAE,aAAa,GAAG,SAAS,GAC9B,OAAO;CAqBX"}
|
package/dist/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var Ut=Object.defineProperty;var $t=(o,e,t)=>e in o?Ut(o,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):o[e]=t;var p=(o,e,t)=>$t(o,typeof e!="symbol"?e+"":e,t);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const F=require("@platforma-sdk/model"),Y=require("@milaboratories/pl-model-middle-layer"),G=require("undici"),T=require("@platforma-sdk/block-tools"),x=require("node:fs"),N=require("node:path"),Gt=require("yaml"),h=require("@milaboratories/ts-helpers"),Ht=require("node:fs/promises"),_t=require("@milaboratories/resolve-helper"),u=require("@milaboratories/pl-client"),Te=require("@milaboratories/pl-tree"),S=require("@milaboratories/computable"),K=require("node:crypto"),ct=require("denque"),qt=require("@platforma-sdk/workflow-tengo"),De=require("canonicalize"),Wt=require("node:assert"),ie=require("quickjs-emscripten"),zt=require("node:timers/promises"),Yt=require("node:os"),I=require("@milaboratories/pl-drivers"),Qt=require("@milaboratories/pframes-node"),Zt=require("lru-cache");function lt(o){const e=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(o){for(const t in o)if(t!=="default"){const r=Object.getOwnPropertyDescriptor(o,t);Object.defineProperty(e,t,r.get?r:{enumerable:!0,get:()=>o[t]})}}return e.default=o,Object.freeze(e)}const ut=lt(Ht),dt=lt(Yt);async function qe(o){try{return await ut.stat(o,{bigint:!0})}catch(e){if(e.code==="ENOENT")return;throw e}}const Xt=[T.RegistryV1.PlPackageYamlConfigFile],er=[T.RegistryV1.PlPackageJsonConfigFile],Ee=["backend","dist","tengo","tpl","main.plj.gz"],je=["config","dist","config.json"],pt=["frontend","dist"],We="block-model/dist/config.json",tr="block-ui/package.json",rr=[Ee,je,Xt,er,pt];async function or(o){return await qe(N.join(o,...je))!==void 0||await qe(N.join(o,...Ee))!==void 0}function me(o,e){const t=_t.tryResolve(o,e);if(t===void 0)throw new Error(`Can't resolve ${e} against ${o}`);return t}async function ze(o,e){if(N.isAbsolute(o)||(o=N.resolve(o)),await or(o))return{workflow:N.join(o,...Ee),config:N.join(o,...je),ui:N.join(o,...pt)};{const t=me(o,We),r=me(o,We),s=me(o,tr);return{workflow:t,config:r,ui:N.resolve(s,"..","dist")}}}async function sr(o){try{return await x.promises.readFile(o,"utf8")}catch(e){if(e.code==="ENOENT")return;throw e}}async function nr(o){try{return await x.promises.stat(o,{bigint:!0})}catch(e){if(e.code==="ENOENT")return;throw e}}async function xe(o){let e=0n;for(const t of rr){const r=N.join(o,...t),s=await nr(r);s!==void 0&&e<s.mtimeNs&&(e=s.mtimeNs)}return e.toString()}async function de(o){const e=await x.promises.stat(o.components.workflow.main.file,{bigint:!0}),t=await x.promises.stat(o.components.model.file,{bigint:!0});return(e.mtimeNs>t.mtimeNs?e.mtimeNs:t.mtimeNs).toString()}class ir{constructor(e,t,r){this.v2Provider=e,this.registries=t,this.http=r}async getPackagesForRoot(e){const t=[],r=e.spec;switch(r.type){case"remote-v1":const s=this.http!==void 0?{dispatcher:this.http}:{},i=await(await G.request(`${r.url}/${T.RegistryV1.GlobalOverviewPath}`,s)).body.json();for(const a of i){const{organization:c,package:l,latestMeta:d,latestVersion:g}=a,f={organization:c,name:l,version:g};t.push({registryId:e.id,id:f,meta:{title:d.title??"No title",description:d.description??"No Description",organization:{name:c,url:"https://unknown.com"}},spec:{type:"from-registry-v1",id:f,registryUrl:r.url},otherVersions:a.allVersions})}return t;case"remote-v2":return(await this.v2Provider.getRegistry(r.url).listBlockPacks()).map(a=>({...a,registryId:e.id}));case"local-dev":for(const a of await x.promises.readdir(r.path,{withFileTypes:!0})){if(!a.isDirectory())continue;const c=N.join(r.path,a.name),l=await sr(N.join(c,T.RegistryV1.PlPackageYamlConfigFile));if(l!==void 0){const d=T.RegistryV1.PlPackageConfigData.parse(Gt.parse(l)),g=await xe(c),f={organization:d.organization,name:d.package,version:"DEV"};t.push({registryId:e.id,id:f,meta:{title:d.meta.title??"No title",description:d.meta.description??"No Description",organization:{name:d.organization,url:"https://unknown.com"}},spec:{type:"dev-v2",folder:c,mtime:g},otherVersions:[]})}else{const d=await T.tryLoadPackDescription(c);if(d!==void 0){const g=await de(d);t.push({registryId:e.id,id:d.id,meta:await T.BlockPackMetaEmbedAbsoluteBytes.parseAsync(d.meta),spec:{type:"dev-v2",folder:c,mtime:g},otherVersions:[]})}}}return t;default:return h.assertNever(r)}}async listBlockPacks(){const e=[],t=[];for(const r of this.registries)t.push({...r,status:"online"}),e.push(...await this.getPackagesForRoot(r));return{registries:t,blockPacks:e}}}class gt{constructor(e){p(this,"registries",new Map);this.http=e}getRegistry(e){const t=this.registries.get(e);if(t)return t;const r=new T.RegistryV2Reader(T.folderReaderByUrl(e,this.http));return this.registries.set(e,r),r}}const ar={type:"remote-v2",url:"https://blocks.pl-open.science/"},cr={type:"remote-v1",url:"https://block.registry.platforma.bio/releases"},lr={type:"remote-v1",url:"https://block.registry.platforma.bio/dev"},ur={groups:[{id:"default",label:"Default",blocks:[]}]},dr={stagingRefreshTimestamp:0,blocksInLimbo:[]},pr={label:"New Project"},gr={name:"UserProject",version:"2"},ht="SchemaVersion",ft="1",Ie="ProjectCreated",Z="ProjectLastModified",X="ProjectMeta",_="ProjectStructure",ae="BlockRenderingState",hr="BlockFrontendState/",fr=/^BlockFrontendState\/(?<blockid>.*)$/;function we(o){return`${hr}${o}`}const mr="BlockArgsAuthor/";function Se(o){return`${mr}${o}`}const ke="ProjectStructureAuthor";function vr(o){const e=o.match(fr);if(e!==null)return e.groups.blockid}const yr="__serviceTemplate_";function Pe(o){return`${yr}${o}`}function P(o,e){return`${o}-${e}`}const br=/^(?<blockId>.*)-(?<fieldName>blockPack|prodArgs|currentArgs|prodCtx|prodUiCtx|prodOutput|prodCtxPrevious|prodUiCtxPrevious|prodOutputPrevious|stagingCtx|stagingUiCtx|stagingOutput|stagingCtxPrevious|stagingUiCtxPrevious|stagingOutputPrevious)$/;function wr(o){const e=o.match(br);if(e===null)return;const{blockId:t,fieldName:r}=e.groups;return{blockId:t,fieldName:r}}const Sr="projects",mt={name:"Projects",version:"1"},kr=o=>u.resourceTypesEqual(o.type,mt)?o.fields:[];async function Pr(o,e,t,r){const s=await Te.SynchronizedTreeState.init(o,e,{...r.ops.defaultTreeOptions,pruning:kr},r.logger);return{computable:S.Computable.make(i=>{const a=i.accessor(s.entry()).node(),c=t.getValue(i);if(a===void 0)return;const l=[];for(const d of a.listDynamicFields()){const g=a.traverse(d);if(g===void 0)continue;const f=h.notEmpty(g.getKeyValueAsJson(X)),v=h.notEmpty(g.getKeyValueAsJson(Ie)),b=h.notEmpty(g.getKeyValueAsJson(Z));l.push({id:d,rid:g.id,created:new Date(v),lastModified:new Date(b),opened:c.indexOf(g.id)>=0,meta:f})}return l.sort(d=>-d.lastModified.valueOf()),l}).withStableType(),tree:s}}const Cr={name:"EphRenderTemplate",version:"1"},Fr={name:"RenderTemplate",version:"1"};function Ae(o,e,t,r,s){if(s.length===0)throw new Error("Zero output names provided");const n=t?o.createEphemeral(Cr):o.createStruct(Fr),i=u.field(n,"template"),a=u.field(n,"inputs");return o.createField(i,"Input",e),o.createField(a,"Input",u.Pl.createPlMap(o,r,t)),o.lockInputs(n),u.Pl.futureRecord(o,n,s,"Output","outputs/")}const Rr={name:"BContextEnd",version:"1"},Br={name:"BContext",version:"1"},Or="id",Tr="parent/",Dr=["context","result"];function Ye(o,e,t){return Ae(o,e,!0,t,Dr)}function Er(o){const e=o.createEphemeral(Rr);return o.lock(e),e}function jr(o,e){if(e.length===0)return Er(o);if(e.length===1)return e[0];const t=o.createEphemeral(Br);o.createField(u.field(t,Or),"Input",u.Pl.createPlString(o,K.randomUUID()));for(let r=0;r<e.length;r++)o.createField(u.field(t,`${Tr}${r}`),"Input",e[r]);return o.lock(t),t}const vt={name:"TengoTemplateGet",version:"1"},yt="registry",bt="templateURI",wt="template",St={name:"TengoTemplatePack",version:"1"},kt={name:"TengoTemplatePackConvert",version:"1"},Pt="templatePack",Ct="template";async function Ft(o){switch(o.type){case"from-file":return{type:"explicit",content:await x.promises.readFile(o.path)};case"from-registry":case"explicit":return o;default:return h.assertNever(o)}}function xr(o,e){const t=o.createStruct(vt),r=u.field(t,yt),s=u.field(t,bt),n=u.field(t,wt);return o.setField(r,o.createValue(u.Pl.JsonString,Buffer.from(JSON.stringify(e.registry)))),o.setField(s,o.createValue(u.Pl.JsonString,Buffer.from(JSON.stringify(e.path)))),n}function Ir(o,e){const t=o.createValue(St,e.content),r=o.createStruct(kt),s=u.field(r,Pt),n=u.field(r,Ct);return o.setField(s,t),n}function pe(o,e){switch(e.type){case"from-registry":return xr(o,e);case"explicit":return Ir(o,e);default:return h.assertNever(e)}}const Ne={name:"Frontend/FromUrl",version:"1"},Ve={name:"Frontend/FromFolder",version:"1"};function Ar(o,e){switch(e.type){case"url":return o.createValue(Ne,JSON.stringify({url:e.url}));case"local":return o.createValue(Ve,JSON.stringify({path:e.path,signature:e.signature}));default:return h.assertNever(e)}}const Nr={name:"BlockPackCustom",version:"1"},Rt="template",Bt="frontend";function Qe(o){return o.endsWith("/")?o:`${o}/`}class Vr{constructor(e,t,r){this.v2RegistryProvider=e,this.signer=t,this.http=r}async getBlockConfig(e){switch(e.type){case"explicit":return e.config;case"dev-v1":{const t=await ze(e.folder),r=await x.promises.readFile(t.config,{encoding:"utf-8"});return JSON.parse(r)}case"dev-v2":{const t=await T.loadPackDescription(e.folder),r=await x.promises.readFile(t.components.model.file,{encoding:"utf-8"});return JSON.parse(r)}case"from-registry-v1":{const t=this.http!==void 0?{dispatcher:this.http}:{},r=`${Qe(e.registryUrl)}${T.RegistryV1.packageContentPrefix({organization:e.id.organization,package:e.id.name,version:e.id.version})}`;return await(await G.request(`${r}/config.json`,t)).body.json()}case"from-registry-v2":{const t=this.http!==void 0?{dispatcher:this.http}:{},s=await this.v2RegistryProvider.getRegistry(e.registryUrl).getComponents(e.id);return await(await G.request(s.model.url,t)).body.json()}default:return h.assertNever(e)}}async prepare(e){switch(e.type){case"explicit":return e;case"dev-v1":{const t=await ze(e.folder),r=await x.promises.readFile(t.workflow),s=JSON.parse(await x.promises.readFile(t.config,"utf-8")),n=t.ui;return{type:"explicit",template:{type:"explicit",content:r},config:s,frontend:{type:"local",path:n,signature:this.signer.sign(n)},source:e}}case"dev-v2":{const t=await T.loadPackDescription(e.folder),r=JSON.parse(await x.promises.readFile(t.components.model.file,{encoding:"utf-8"})),s=await x.promises.readFile(t.components.workflow.main.file),n=t.components.ui.folder,i={...e};return e.mtime===void 0&&(i.mtime=await de(t)),{type:"explicit",template:{type:"explicit",content:s},config:r,frontend:{type:"local",path:n,signature:this.signer.sign(n)},source:i}}case"from-registry-v1":{const t=this.http!==void 0?{dispatcher:this.http}:{},r=`${Qe(e.registryUrl)}${T.RegistryV1.packageContentPrefix({organization:e.id.organization,package:e.id.name,version:e.id.version})}`,s=`${r}/template.plj.gz`,n=await G.request(s,t);if(n.statusCode!==200)throw new Error(`Block not found in registry (url = ${s} ; code = ${n.statusCode}): `+JSON.stringify(e));const i=new Uint8Array(await n.body.arrayBuffer()),c=await(await G.request(`${r}/config.json`,t)).body.json();return{type:"explicit",template:{type:"explicit",content:i},config:c,frontend:{type:"url",url:`${r}/frontend.tgz`},source:e}}case"from-registry-v2":{const t=this.http!==void 0?{dispatcher:this.http}:{},s=await this.v2RegistryProvider.getRegistry(e.registryUrl).getComponents(e.id),n=async()=>await(await G.request(s.model.url,t)).body.json(),i=async()=>await(await G.request(s.workflow.main.url,t)).body.arrayBuffer(),[a,c]=await Promise.all([n(),i()]);return{type:"explicit",template:{type:"explicit",content:Buffer.from(c)},config:a,frontend:{type:"url",url:s.ui.url},source:e}}default:return h.assertNever(e)}}}function Lr(o,e){const t={config:e.config,source:e.source},r=o.createStruct(Nr,JSON.stringify(t));return o.createField(u.field(r,Rt),"Input",pe(o,e.template)),o.createField(u.field(r,Bt),"Input",Ar(o,e.frontend)),o.lock(r),r}function Ze(o,e){switch(e.type){case"explicit":return Lr(o,e);default:return h.assertNever(e.type)}}function oe(o,e){return{__isRef:!0,blockId:o,name:e}}function Jr(o){return typeof o=="object"&&o!==null&&o.__isRef===!0&&"blockId"in o&&"name"in o}function Ce(o,e,t){const r=typeof e;switch(r){case"function":case"bigint":case"number":case"string":case"boolean":case"symbol":case"undefined":return;case"object":if(e===null)return;if(Jr(e))t===void 0||t.has(e.blockId)?o.upstreams.add(e.blockId):o.missingReferences=!0;else if(Array.isArray(e))for(const s of e)Ce(o,s,t);else for(const[,s]of Object.entries(e))Ce(o,s,t);return;default:h.assertNever(r)}}function Mr(o,e){const t={upstreams:new Set,missingReferences:!1};return Ce(t,o,e),t}function V(o){return{*[Symbol.iterator](){for(const e of o.groups)for(const t of e.blocks)yield t}}}class Ot{constructor(e){p(this,"nodes");this.nodes=e}traverseIds(e,...t){const r=new Set;return this.traverse(e,t,s=>r.add(s.id)),r}traverseIdsExcludingRoots(e,...t){const r=this.traverseIds(e,...t);for(const s of t)r.delete(s);return r}traverse(e,t,r){let s=[...t];const n=new Set(s);for(;s.length>0;){let i=[];for(const a of s){const c=this.nodes.get(a);r(c),c[e].forEach(l=>{n.has(l)||(n.add(l),i.push(l))})}s=i}}}function Fe(o){const e=new Map;let t;for(const{id:r}of V(o)){const s={id:r,missingReferences:!1};e.set(r,s),t===void 0?s.upstream=new Set:(s.upstream=new Set([t.id]),t.downstream=new Set([s.id])),t=s}return t!==void 0&&(t.downstream=new Set),new Ot(e)}function se(o,e){const t=new Map,r=new Set;for(const{id:s}of V(o)){const n=e(s);if(n===void 0)continue;const i=Mr(n,r),a={id:s,missingReferences:i.missingReferences,upstream:i.upstreams,downstream:new Set};t.set(s,a),i.upstreams.forEach(c=>t.get(c).downstream.add(s)),r.add(s)}return new Ot(t)}function Kr(o,e){if(o.size!==e.size)return!1;for(const t of o)if(!e.has(t))return!1;return!0}function Re(o,e){if(o.size>e.size)return Re(e,o);for(const t of o)if(e.has(t))return!0;return!1}function Xe(o,e){const t=new Set,r=new Set,s=new Set;return o.nodes.forEach(n=>{const i=e.nodes.get(n.id);i===void 0?t.add(n.id):(!Kr(n.upstream,i.upstream)||Re(n.upstream,s))&&s.add(n.id)}),e.nodes.forEach(n=>{o.nodes.has(n.id)?Re(n.upstream,s)&&s.add(n.id):r.add(n.id)}),{onlyInA:t,onlyInB:r,different:s}}let ve;async function Tt(){if(ve===void 0){const o=await Ft(qt.Templates["pframes.export-pframe"]);if(o.type!=="explicit")throw new Error("Unexpected prepared template type.");const e=K.createHash("sha256").update(o.content).digest("hex");ve={spec:o,hash:e}}return ve}function Ur(o,e,t){return Ae(o,e,!0,{pf:t},["result"]).result}function ye(o,e){let t=!1,r,s;return()=>{if(!t)return t=!0,r=o(),s=e(),s;const n=o();return r!==n&&(r=n,s=e()),e()}}class et{constructor(e,t){p(this,"currentInputsC",ye(()=>this.fields.currentArgs.modCount,()=>JSON.parse(Buffer.from(this.fields.currentArgs.value).toString())));p(this,"actualProductionInputsC",ye(()=>{var e;return(e=this.fields.prodArgs)==null?void 0:e.modCount},()=>{var t;const e=(t=this.fields.prodArgs)==null?void 0:t.value;if(e!==void 0)return JSON.parse(Buffer.from(e).toString())}));p(this,"productionStaleC",ye(()=>{var e;return`${this.fields.currentArgs.modCount}_${(e=this.fields.prodArgs)==null?void 0:e.modCount}`},()=>this.fields.prodArgs===void 0||Buffer.compare(this.fields.currentArgs.value,this.fields.prodArgs.value)!==0));this.id=e,this.fields=t}check(){if(this.fields.prodOutput===void 0!=(this.fields.prodCtx===void 0))throw new Error("inconsistent prod fields");if(this.fields.stagingOutput===void 0!=(this.fields.stagingCtx===void 0))throw new Error("inconsistent stage fields");if(this.fields.prodOutputPrevious===void 0!=(this.fields.prodCtxPrevious===void 0))throw new Error("inconsistent prod cache fields");if(this.fields.stagingOutputPrevious===void 0!=(this.fields.stagingCtxPrevious===void 0))throw new Error("inconsistent stage cache fields");if(this.fields.blockPack===void 0)throw new Error("no block pack field");if(this.fields.currentArgs===void 0)throw new Error("no current args field")}get currentInputs(){return this.currentInputsC()}get stagingRendered(){return this.fields.stagingCtx!==void 0}get productionRendered(){return this.fields.prodCtx!==void 0}get productionStale(){return this.productionRendered&&this.productionStaleC()}get requireProductionRendering(){return!this.productionRendered||this.productionStaleC()}get actualProductionInputs(){return this.actualProductionInputsC()}getTemplate(e){return e.getFutureFieldValue(u.Pl.unwrapHolder(e,this.fields.blockPack.ref),Rt,"Input")}}const $r=o=>{throw new Error(`No new block info for ${o}`)};class ce{constructor(e,t,r,s,n,i,a,c,l,d,g,f){p(this,"globalModCount",0);p(this,"fieldsChanged",!1);p(this,"lastModifiedChanged",!1);p(this,"structureChanged",!1);p(this,"metaChanged",!1);p(this,"renderingStateChanged",!1);p(this,"changedBlockFrontendStates",new Set);p(this,"blocksWithChangedInputs",new Set);p(this,"stagingGraph");p(this,"pendingProductionGraph");p(this,"actualProductionGraph");this.rid=e,this.tx=t,this.author=r,this.schema=s,this.lastModified=n,this.meta=i,this.struct=a,this.renderingState=c,this.blocksInLimbo=l,this.blockInfos=d,this.blockFrontendStates=g,this.ctxExportTplHolder=f}fixProblems(){this.blockInfos.forEach(e=>{(e.fields.prodArgs===void 0||e.fields.prodOutput===void 0||e.fields.prodCtx===void 0)&&this.deleteBlockFields(e.id,"prodArgs","prodOutput","prodCtx")})}get wasModified(){return this.lastModifiedChanged||this.structureChanged||this.fieldsChanged||this.metaChanged||this.renderingStateChanged||this.changedBlockFrontendStates.size>0}get structure(){return JSON.parse(JSON.stringify(this.struct))}getStagingGraph(){return this.stagingGraph===void 0&&(this.stagingGraph=Fe(this.struct)),this.stagingGraph}getPendingProductionGraph(){return this.pendingProductionGraph===void 0&&(this.pendingProductionGraph=se(this.struct,e=>this.getBlockInfo(e).currentInputs)),this.pendingProductionGraph}getActualProductionGraph(){return this.actualProductionGraph===void 0&&(this.actualProductionGraph=se(this.struct,e=>this.getBlockInfo(e).actualProductionInputs)),this.actualProductionGraph}getBlockInfo(e){return h.notEmpty(this.blockInfos.get(e))}getBlock(e){for(const t of V(this.struct))if(t.id===e)return t;throw new Error("block not found")}setBlockFieldObj(e,t,r){const s=u.field(this.rid,P(e,t));if(r.ref===void 0)throw new Error("Can't set value with empty ref");this.getBlockInfo(e).fields[t]===void 0?this.tx.createField(s,"Dynamic",r.ref):this.tx.setField(s,r.ref),this.getBlockInfo(e).fields[t]={modCount:this.globalModCount++,...r},this.fieldsChanged=!0}setBlockField(e,t,r,s,n){this.setBlockFieldObj(e,t,{ref:r,status:s,value:n})}deleteBlockFields(e,...t){let r=!1;const s=this.getBlockInfo(e);for(const n of t){const i=s.fields;n in i&&(this.tx.removeField(u.field(this.rid,P(e,n))),delete i[n],this.fieldsChanged=!0,r=!0)}return r}updateLastModified(){this.lastModified=Date.now(),this.lastModifiedChanged=!0}resetStagingRefreshTimestamp(){this.renderingState.stagingRefreshTimestamp=Date.now(),this.renderingStateChanged=!0}resetStaging(e){var r,s,n;const t=this.getBlockInfo(e).fields;((r=t.stagingOutput)==null?void 0:r.status)==="Ready"&&((s=t.stagingCtx)==null?void 0:s.status)==="Ready"&&((n=t.stagingUiCtx)==null?void 0:n.status)==="Ready"&&(this.setBlockFieldObj(e,"stagingOutputPrevious",t.stagingOutput),this.setBlockFieldObj(e,"stagingCtxPrevious",t.stagingCtx),this.setBlockFieldObj(e,"stagingUiCtxPrevious",t.stagingUiCtx)),this.deleteBlockFields(e,"stagingOutput","stagingCtx","stagingUiCtx")&&this.resetStagingRefreshTimestamp()}resetProduction(e){var r,s,n;const t=this.getBlockInfo(e).fields;((r=t.prodOutput)==null?void 0:r.status)==="Ready"&&((s=t.prodCtx)==null?void 0:s.status)==="Ready"&&((n=t.prodUiCtx)==null?void 0:n.status)==="Ready"&&(this.setBlockFieldObj(e,"prodOutputPrevious",t.prodOutput),this.setBlockFieldObj(e,"prodCtxPrevious",t.prodCtx),this.setBlockFieldObj(e,"prodUiCtxPrevious",t.prodUiCtx)),this.deleteBlockFields(e,"prodOutput","prodCtx","prodUiCtx","prodArgs")}resetOrLimboProduction(e){var r,s;const t=this.getBlockInfo(e).fields;return((r=t.prodOutput)==null?void 0:r.status)==="Ready"&&((s=t.prodCtx)==null?void 0:s.status)==="Ready"?this.blocksInLimbo.has(e)?!1:(this.blocksInLimbo.add(e),this.renderingStateChanged=!0,this.deleteBlockFields(e,"prodOutputPrevious","prodCtxPrevious","prodUiCtxPrevious"),!0):this.deleteBlockFields(e,"prodOutput","prodCtx","prodUiCtx","prodArgs")}setArgs(e){const t=[];for(const{blockId:r,args:s}of e){const n=this.getBlockInfo(r);JSON.parse(s);const i=Buffer.from(s);if(Buffer.compare(n.fields.currentArgs.value,i)===0)continue;const a=this.tx.createValue(u.Pl.JsonObject,i);this.setBlockField(r,"currentArgs",a,"Ready",i),this.blocksWithChangedInputs.add(r),t.push(r)}this.getStagingGraph().traverse("downstream",t,({id:r})=>this.resetStaging(r)),t.length>0&&this.updateLastModified()}setUiState(e,t){if(this.blockInfos.get(e)===void 0)throw new Error("no such block");this.blockFrontendStates.get(e)!==t&&(t===void 0?this.blockFrontendStates.delete(e):this.blockFrontendStates.set(e,t),this.changedBlockFrontendStates.add(e),this.blocksWithChangedInputs.add(e),this.updateLastModified())}setBlockLabel(e,t){const r=this.structure;let s=!1;for(const n of V(r))if(n.id===e){n.label=t,s=!0;break}if(!s)throw new Error(`block ${e} not found`);this.updateStructure(r),this.updateLastModified()}createCtx(e,t){const r=[];return e.forEach(s=>{const n=this.getBlockInfo(s);if(n.fields[t]===void 0||n.fields[t].ref===void 0)throw new Error("One of the upstreams staging is not rendered.");r.push(u.Pl.unwrapHolder(this.tx,n.fields[t].ref))}),jr(this.tx,r)}exportCtx(e){return Ur(this.tx,u.Pl.unwrapHolder(this.tx,this.ctxExportTplHolder),e)}renderStagingFor(e){this.resetStaging(e);const t=this.getBlockInfo(e),r=this.createCtx(this.getStagingGraph().nodes.get(e).upstream,"stagingCtx");if(this.getBlock(e).renderingMode!=="Heavy")throw new Error("not supported yet");const s=t.getTemplate(this.tx),n=Ye(this.tx,s,{args:t.fields.currentArgs.ref,blockId:this.tx.createValue(u.Pl.JsonString,JSON.stringify(e)),isProduction:this.tx.createValue(u.Pl.JsonBool,JSON.stringify(!1)),context:r});this.setBlockField(e,"stagingCtx",u.Pl.wrapInEphHolder(this.tx,n.context),"NotReady"),this.setBlockField(e,"stagingUiCtx",this.exportCtx(n.context),"NotReady"),this.setBlockField(e,"stagingOutput",n.result,"NotReady")}renderProductionFor(e){this.resetProduction(e);const t=this.getBlockInfo(e),r=this.createCtx(this.getPendingProductionGraph().nodes.get(e).upstream,"prodCtx");if(this.getBlock(e).renderingMode==="Light")throw new Error("Can't render production for light block.");const s=t.getTemplate(this.tx),n=Ye(this.tx,s,{args:t.fields.currentArgs.ref,blockId:this.tx.createValue(u.Pl.JsonString,JSON.stringify(e)),isProduction:this.tx.createValue(u.Pl.JsonBool,JSON.stringify(!0)),context:r});this.setBlockField(e,"prodCtx",u.Pl.wrapInEphHolder(this.tx,n.context),"NotReady"),this.setBlockField(e,"prodUiCtx",this.exportCtx(n.context),"NotReady"),this.setBlockField(e,"prodOutput",n.result,"NotReady"),this.setBlockFieldObj(e,"prodArgs",t.fields.currentArgs),this.blocksInLimbo.delete(e)&&(this.renderingStateChanged=!0)}updateStructure(e,t=$r){const r=this.getStagingGraph(),s=this.getActualProductionGraph(),n=Fe(e),i=se(e,l=>{var d;return(d=this.blockInfos.get(l))==null?void 0:d.actualProductionInputs}),a=Xe(r,n),c=Xe(s,i);for(const l of a.onlyInA){const{fields:d}=this.getBlockInfo(l);this.deleteBlockFields(l,...Object.keys(d)),this.blockInfos.delete(l),this.blocksInLimbo.delete(l)&&(this.renderingStateChanged=!0),this.blockFrontendStates.delete(l)&&this.changedBlockFrontendStates.add(l)}for(const l of a.onlyInB){const d=new et(l,{});this.blockInfos.set(l,d);const g=t(l),f=Ze(this.tx,g.blockPack);this.setBlockField(l,"blockPack",u.Pl.wrapInHolder(this.tx,f),"NotReady");const v=Buffer.from(g.args),b=this.tx.createValue(u.Pl.JsonObject,v);this.setBlockField(l,"currentArgs",b,"Ready",v),d.check()}for(const l of a.different)this.resetStaging(l);s.traverse("downstream",[...c.different],l=>{this.resetOrLimboProduction(l.id)}),(a.onlyInB.size>0||a.onlyInA.size>0||a.different.size>0)&&this.resetStagingRefreshTimestamp(),this.struct=e,this.structureChanged=!0,this.stagingGraph=void 0,this.pendingProductionGraph=void 0,this.actualProductionGraph=void 0,this.updateLastModified()}addBlock(e,t,r){const s=this.structure;if(r===void 0)s.groups[s.groups.length-1].blocks.push(e);else{let n=!1;for(const i of s.groups){const a=i.blocks.findIndex(c=>c.id===r);if(!(a<0)){i.blocks.splice(a,0,e),n=!0;break}}if(!n)throw new Error(`Can't find element with id: ${r}`)}this.updateStructure(s,n=>{if(n!==e.id)throw new Error("Unexpected");return t})}deleteBlock(e){const t=this.structure;let r=!1;for(const s of t.groups){const n=s.blocks.findIndex(i=>i.id===e);if(!(n<0)){s.blocks.splice(n,1),r=!0;break}}if(!r)throw new Error(`Can't find element with id: ${e}`);this.updateStructure(t)}migrateBlockPack(e,t,r){const s=this.getBlockInfo(e);this.setBlockField(e,"blockPack",u.Pl.wrapInHolder(this.tx,Ze(this.tx,t)),"NotReady"),r!==void 0?(this.setArgs([{blockId:e,args:r}]),this.setUiState(e,void 0)):this.getStagingGraph().traverse("downstream",[e],({id:n})=>this.resetStaging(n)),s.productionRendered&&this.getActualProductionGraph().traverse("downstream",[e],({id:n})=>this.resetOrLimboProduction(n)),this.updateLastModified()}renderProduction(e,t=!1){const r=new Set(e),s=this.getPendingProductionGraph();if(t)s.traverse("upstream",e,i=>{r.add(i.id)});else for(const i of r){const a=s.nodes.get(i);if(a===void 0)throw new Error(`Can't find block with id: ${i}`);for(const c of a.upstream)if(!r.has(c))throw new Error("Can't render blocks not including all upstreams.")}const n=new Set;for(const i of V(this.structure)){if(!r.has(i.id))continue;let a=this.getBlockInfo(i.id).requireProductionRendering||this.blocksInLimbo.has(i.id);if(!a){for(const c of s.nodes.get(i.id).upstream)if(n.has(c)){a=!0;break}}a&&(this.renderProductionFor(i.id),n.add(i.id))}return s.traverse("downstream",[...n],i=>{n.has(i.id)||this.resetOrLimboProduction(i.id)}),n.size>0&&this.updateLastModified(),n}stopProduction(...e){var i,a;const t=this.getActualProductionGraph(),r=new ct(e),s=new Set(e),n=[];for(;!r.isEmpty();){const c=r.shift(),l=this.getBlockInfo(c).fields;if(!(((i=l.prodOutput)==null?void 0:i.status)==="Ready"&&((a=l.prodCtx)==null?void 0:a.status)==="Ready")&&this.deleteBlockFields(c,"prodOutput","prodCtx","prodUiCtx","prodArgs")){n.push(c);for(const d of t.traverseIdsExcludingRoots("downstream",c))s.has(d)||(r.push(d),s.add(d))}}for(const c of t.traverseIdsExcludingRoots("downstream",...n))this.resetOrLimboProduction(c)}traverseWithStagingLag(e){const t=new Map;this.getStagingGraph().nodes.forEach(s=>{let i=this.getBlockInfo(s.id).stagingRendered?0:1;s.upstream.forEach(a=>{const c=t.get(a);c!==0&&(i=Math.max(c+1,i))}),e(s.id,i),t.set(s.id,i)})}refreshStagings(e){const t=Date.now()-this.renderingState.stagingRefreshTimestamp,r=e===void 0?void 0:1+Math.max(0,t*e/1e3);let s=0;this.traverseWithStagingLag((n,i)=>{i!==0&&(r===void 0||i<=r)&&(this.renderStagingFor(n),s++)}),s>0&&this.resetStagingRefreshTimestamp()}setMeta(e){this.meta=e,this.metaChanged=!0,this.updateLastModified()}doRefresh(e){this.refreshStagings(e),this.blockInfos.forEach(t=>{var r,s,n,i;((r=t.fields.prodCtx)==null?void 0:r.status)==="Ready"&&((s=t.fields.prodOutput)==null?void 0:s.status)==="Ready"&&this.deleteBlockFields(t.id,"prodOutputPrevious","prodCtxPrevious","prodUiCtxPrevious"),((n=t.fields.stagingCtx)==null?void 0:n.status)==="Ready"&&((i=t.fields.stagingOutput)==null?void 0:i.status)==="Ready"&&this.deleteBlockFields(t.id,"stagingOutputPrevious","stagingCtxPrevious","stagingUiCtxPrevious")})}assignAuthorMarkers(){const e=this.author?JSON.stringify(this.author):void 0;for(const t of this.blocksWithChangedInputs)e===void 0?this.tx.deleteKValue(this.rid,Se(t)):this.tx.setKValue(this.rid,Se(t),e);(this.metaChanged||this.structureChanged)&&(e===void 0?this.tx.deleteKValue(this.rid,ke):this.tx.setKValue(this.rid,ke,e))}save(){if(this.wasModified){this.lastModifiedChanged&&this.tx.setKValue(this.rid,Z,JSON.stringify(this.lastModified)),this.structureChanged&&this.tx.setKValue(this.rid,_,JSON.stringify(this.struct)),this.renderingStateChanged&&this.tx.setKValue(this.rid,ae,JSON.stringify({...this.renderingState,blocksInLimbo:[...this.blocksInLimbo]})),this.metaChanged&&this.tx.setKValue(this.rid,X,JSON.stringify(this.meta));for(const e of this.changedBlockFrontendStates){const t=this.blockFrontendStates.get(e);t===void 0?this.tx.deleteKValue(this.rid,we(e)):this.tx.setKValue(this.rid,we(e),t)}this.assignAuthorMarkers()}}static async load(e,t,r){const s=e.getResourceData(t,!0),n=e.getKValueJson(t,ht),i=e.getKValueJson(t,Z),a=e.getKValueJson(t,X),c=e.getKValueJson(t,_),l=e.getKValueJson(t,ae),d=e.listKeyValuesString(t),[g,f,v,b,O,{stagingRefreshTimestamp:L,blocksInLimbo:U},ee]=await Promise.all([s,n,i,a,c,l,d]);if(f!==ft)throw new Error(`Can't act on this project resource because it has a wrong schema version: ${f}`);const H=new Map;for(const w of g.fields){const B=wr(w.name);if(B===void 0)continue;let C=H.get(B.blockId);C===void 0&&(C={id:B.blockId,fields:{}},H.set(B.blockId,C)),C.fields[B.fieldName]=u.isNullResourceId(w.value)?{modCount:0}:{modCount:0,ref:w.value}}const q=await Tt(),te=Pe(q.hash),k=g.fields.find(w=>w.name===te);let M;k!==void 0?M=u.ensureResourceIdNotNull(k.value):(M=u.Pl.wrapInHolder(e,pe(e,q.spec)),e.createField(u.field(t,Pe(q.hash)),"Dynamic",M));const W={stagingRefreshTimestamp:L},j=new Set(U),D=new Map;for(const w of ee){const B=vr(w.key);B!==void 0&&D.set(B,w.value)}const R=[];H.forEach(({id:w,fields:B})=>{for(const[,C]of Object.entries(B))if(C.ref!==void 0){if(!u.isResource(C.ref)||u.isResourceRef(C.ref))throw new Error("unexpected behaviour");R.push([C,e.getResourceData(C.ref,!1)])}});for(const[w,B]of R){const C=await B;w.value=C.data,u.isNotNullResourceId(C.error)?w.status="Error":C.resourceReady||u.isNotNullResourceId(C.originalResourceId)?w.status="Ready":w.status="NotReady"}const $=new Map;H.forEach(({id:w,fields:B})=>$.set(w,new et(w,B)));const J=new Set;for(const w of V(O)){if(!$.has(w.id))throw new Error(`Inconsistent project structure: no inputs for ${w.id}`);J.add(w.id)}$.forEach(w=>{if(!J.has(w.id))throw new Error(`Inconsistent project structure: no structure entry for ${w.id}`);w.check()});const re=new ce(t,e,r,f,v,b,O,W,j,$,D,M);return re.fixProblems(),re}}async function Gr(o,e=pr){const t=o.createEphemeral(gr);o.lock(t);const r=String(Date.now());o.setKValue(t,ht,JSON.stringify(ft)),o.setKValue(t,Ie,r),o.setKValue(t,Z,r),o.setKValue(t,X,JSON.stringify(e)),o.setKValue(t,_,JSON.stringify(ur)),o.setKValue(t,ae,JSON.stringify(dr));const s=await Tt();return o.createField(u.field(t,Pe(s.hash)),"Dynamic",u.Pl.wrapInHolder(o,pe(o,s.spec))),t}async function be(o,e,t){return A(o,e,void 0,t)}async function A(o,e,t,r){if(o instanceof u.PlClient)return await o.withWriteTx("ProjectAction",async s=>{const n=await ce.load(s,e,t),i=await r(n);return n.wasModified&&(n.save(),await s.commit()),i});{const s=await ce.load(o,e,t),n=await r(s);return s.save(),n}}function*Hr(o){switch(o.type){case"Json":return;case"JsonPartitioned":for(const[,e]of Object.entries(o.parts))yield e;return;case"BinaryPartitioned":for(const[,{index:e,values:t}]of Object.entries(o.parts))yield e,yield t;return;default:h.assertNever(o)}}function tt(o,e){return Object.fromEntries(Object.entries(o).map(([t,r])=>[t,e(r,t)]))}function _r(o,e){switch(o.type){case"Json":return{...o};case"JsonPartitioned":return{...o,parts:tt(o.parts,e)};case"BinaryPartitioned":return{...o,parts:tt(o.parts,t=>({index:e(t.index),values:e(t.values)}))};default:h.assertNever(o)}}const qr=u.resourceType("PColumnData/JsonPartitioned","1"),Wr=u.resourceType("PColumnData/Partitioned/JsonPartitioned","1"),zr=u.resourceType("PColumnData/BinaryPartitioned","1"),Yr=u.resourceType("PColumnData/Partitioned/BinaryPartitioned","1"),Qr=u.resourceType("PColumnData/Json","1");function Zr(o){if(!o.getIsReadyOrError())throw new Error("Data not ready.");const e=o.getDataAsJson();if(e===void 0)throw new Error("unexpected data info structure, no resource data");if(u.resourceTypesEqual(o.resourceType,Qr)){const t=e;return{type:"Json",keyLength:t.keyLength,data:t.data}}else if(u.resourceTypesEqual(o.resourceType,qr)){const t=e,r=Object.fromEntries(o.listInputFields().map(s=>[s,o.traverse({field:s,errorIfFieldNotSet:!0}).resourceInfo]));return{type:"JsonPartitioned",partitionKeyLength:t.partitionKeyLength,parts:r}}else if(u.resourceTypesEqual(o.resourceType,Wr)){const t=e,r={};for(const s of o.listInputFields()){const n=o.traverse({field:s,errorIfFieldNotSet:!0}),i=n.listInputFields();if(i===void 0)throw new Error(`no partition keys for super key ${s}`);for(const a of i){const c=JSON.stringify([...JSON.parse(s),...JSON.parse(a)]);r[c]=n.traverse({field:a,errorIfFieldNotSet:!0}).resourceInfo}}return{type:"JsonPartitioned",partitionKeyLength:t.superPartitionKeyLength+t.partitionKeyLength,parts:r}}else if(u.resourceTypesEqual(o.resourceType,zr)){const t=e,r={};for(const s of o.listInputFields())if(s.endsWith(".index")){const n=s.slice(0,s.length-6);let i=r[n];i===void 0&&(i={},r[n]=i),i.index=o.traverse({field:s,errorIfFieldNotSet:!0}).resourceInfo}else if(s.endsWith(".values")){const n=s.slice(0,s.length-7);let i=r[n];i===void 0&&(i={},r[n]=i),i.values=o.traverse({field:s,errorIfFieldNotSet:!0}).resourceInfo}else throw new Error(`unrecognized part field name: ${s}`);for(const[s,n]of Object.entries(r)){if(n.index===void 0)throw new Error(`no index for part ${s}`);if(n.values===void 0)throw new Error(`no values for part ${s}`)}return{type:"BinaryPartitioned",partitionKeyLength:t.partitionKeyLength,parts:r}}else if(u.resourceTypesEqual(o.resourceType,Yr)){const t=e,r={};for(const s of o.listInputFields()){const n=o.traverse({field:s,errorIfFieldNotSet:!0}),i=n.listInputFields();if(i===void 0)throw new Error(`no partition keys for super key ${s}`);for(const a of i)if(a.endsWith(".index")){const c=a.slice(0,a.length-6),l=JSON.stringify([...JSON.parse(s),...JSON.parse(c)]);let d=r[l];d===void 0&&(d={},r[l]=d),r[l].index=n.traverse({field:a,errorIfFieldNotSet:!0}).resourceInfo}else if(a.endsWith(".values")){const c=a.slice(0,a.length-7),l=JSON.stringify([...JSON.parse(s),...JSON.parse(c)]);let d=r[l];d===void 0&&(d={},r[l]=d),r[l].values=n.traverse({field:a,errorIfFieldNotSet:!0}).resourceInfo}else throw new Error(`unrecognized part field name: ${a}`)}return{type:"BinaryPartitioned",partitionKeyLength:t.superPartitionKeyLength+t.partitionKeyLength,parts:r}}throw new Error(`unsupported resource type: ${u.resourceTypeToString(o.resourceType)}`)}function Dt(o,e){const t=K.createHash("sha256");return t.update(De(o)),t.update(String(u.isNullResourceId(e.originalId)?e.id:e.originalId)),t.digest().toString("hex")}function Et(o,e=!0,t=!1,r=""){var a,c,l;const s=/^(?<name>.*)\.(?<type>spec|data)$/,n=new Map;for(const d of o.listInputFields()){const g=d.match(s);if(!g){if(e)throw new Error(`unexpected field name ${d}`);continue}let f=h.notEmpty((a=g.groups)==null?void 0:a.name);if(!f.startsWith(r)){if(e)throw new Error(`unexpected field name ${d}`);continue}f=f.slice(r.length);const v=h.notEmpty((c=g.groups)==null?void 0:c.type);let b=n.get(f);switch(b===void 0&&(b={},n.set(f,b)),v){case"spec":b.spec=(l=o.traverse({field:d,ignoreError:t,pureFieldErrorToUndefined:t}))==null?void 0:l.getDataAsJson();break;case"data":b.hasData=!0,b.data=()=>o.traverseOrError({field:d,ignoreError:t});default:continue}}const i=o.getInputsLocked();if(i)for(const[,d]of n)d.data===void 0&&(d.hasData=!1);return{locked:i,results:n}}function Xr(o,e=!0,t=""){if(!o.getIsReadyOrError())throw new Error("resource is not ready");const r=Et(o,e,!1,t);Wt(r.locked);const s={};for(const[n,i]of r.results){if(i.spec===void 0)throw new Error(`no spec for key ${n}`);if(i.hasData!==!0||i.data===void 0)throw new Error(`no data for key ${n}`);const a=i.data();if(a===void 0)throw new Error(`no data for key ${n}`);if(!a.ok)throw new Te.PlError(a.error);s[n]={id:Dt(i.spec,a.value),spec:i.spec,data:a.value}}return s}class Le{constructor(e,t){p(this,"allSpecsAvailable");this.ctx=e,this.blocks=t;let r=!0;e:for(const s of t.values())for(const n of[s.prod,s.staging])if(n!==void 0){if(!n.locked){r=!1;break e}for(const i of n.results.values())if(i.spec===void 0){r=!1;break e}}this.allSpecsAvailable=r}getBlockLabel(e){var t,r;return h.notEmpty((r=(t=this.blocks.get(e))==null?void 0:t.info)==null?void 0:r.label,`block "${e}" not found`)}getData(){const e=this.getDataWithErrors(),t=[];for(const r of e.entries)r.obj.id!==void 0&&r.obj.data.ok&&t.push({ref:r.ref,obj:{id:r.obj.id,spec:r.obj.spec,data:r.obj.data.value}});return{entries:t,isComplete:e.isComplete,instabilityMarker:e.instabilityMarker}}getDataWithErrors(){const e=[];let t=!0,r;const s=i=>{r===void 0&&(r=i),t=!1},n=(i,a,c)=>{if(c.spec!==void 0&&c.hasData===!0&&c.data!==void 0){const l=c.data();l!==void 0?e.push({ref:oe(i,a),obj:{id:l.ok?Dt(c.spec,l.value):void 0,spec:c.spec,data:l}}):s(`no_data:${i}:${a}`)}};for(const[i,a]of this.blocks){const c=new Set;if(a.prod!==void 0){a.prod.locked||s(`prod_not_locked:${i}`);for(const[l,d]of a.prod.results)c.add(l),n(i,l,d)}if(a.staging!==void 0){a.staging.locked||s(`staging_not_locked:${i}`);for(const[l,d]of a.staging.results)c.has(l)||n(i,l,d)}}return{entries:e,isComplete:t,instabilityMarker:r}}getSpecs(){const e=[];let t=!0,r;const s=n=>{r===void 0&&(r=n),t=!1};for(const[n,i]of this.blocks){const a=new Set;if(i.staging!==void 0){i.staging.locked||s(`staging_not_locked:${n}`);for(const[c,l]of i.staging.results)l.spec!==void 0&&(e.push({ref:oe(n,c),obj:l.spec}),a.add(c))}else s(`staging_not_rendered:${n}`);if(i.prod!==void 0){i.prod.locked||s(`prod_not_locked:${n}`);for(const[c,l]of i.prod.results)a.has(c)||l.spec!==void 0&&e.push({ref:oe(n,c),obj:l.spec})}}return{entries:e,isComplete:t,instabilityMarker:r}}calculateOptions(e){const t=[];for(const r of this.blocks.values()){const s=new Set,n=i=>{for(const[a,c]of i.results)s.has(a)||c.spec===void 0||(s.add(a),F.executePSpecPredicate(e,c.spec)&&t.push({label:r.info.label+" / "+a,ref:oe(r.info.id,a),spec:c.spec}))};r.staging!==void 0&&n(r.staging),r.prod!==void 0&&n(r.prod)}return t}static create(e,t,r){const s=e.accessor(t).node(),n=h.notEmpty(s.getKeyValueAsJson(_)),a=Fe(n).traverseIds("upstream",r),c=new Map;for(const l of V(n)){if(!a.has(l.id))continue;const d=rt(s.traverse({field:P(l.id,"prodCtx"),ignoreError:!0,pureFieldErrorToUndefined:!0,stableIfNotFound:!0})!==void 0,s.traverseOrError({field:P(l.id,"prodUiCtx"),stableIfNotFound:!0})),g=rt(s.traverse({field:P(l.id,"stagingCtx"),ignoreError:!0,pureFieldErrorToUndefined:!0})!==void 0,s.traverseOrError({field:P(l.id,"stagingUiCtx")}));c.set(l.id,{info:l,prod:d,staging:g})}return new Le(e,c)}}function rt(o,e){if(e===void 0)return o?{locked:!1,results:new Map}:void 0;if(e.ok)return Et(e.value,!1,!0)}function Je(o,e){const t=o.persist(),r=h.notEmpty(o.traverse({field:P(e,"currentArgs"),errorIfFieldNotSet:!0}).getDataAsString()),s=o.getKeyValueAsString(we(e));return{blockId:e,args:r,uiState:s,blockMeta:n=>{const i=n.accessor(t).node(),a=h.notEmpty(i.getKeyValueAsJson(_)),c=new Map;for(const l of V(a))c.set(l.id,l);return c}}}function jt(o,e){const t=o.persist();return{...Je(o,e),prod:r=>{var s;return(s=r.accessor(t).node({ignoreError:!0}).traverse({field:P(e,"prodOutput"),stableIfNotFound:!0,ignoreError:!0}))==null?void 0:s.persist()},staging:r=>{var n;const s=(n=r.accessor(t).node({ignoreError:!0}).traverse({field:P(e,"stagingOutput"),ignoreError:!0}))==null?void 0:n.persist();return s===void 0&&r.markUnstable("staging_not_rendered"),s},getResultsPool:r=>Le.create(r,t,e)}}function*E(o,e){switch(yield o,o.type){case"GetFromCtx":case"Immediate":return;case"Isolate":yield*E(o.cfg);return;case"MakeObject":for(const[,t]of Object.entries(o.template))yield*E(t);return;case"MakeArray":for(const t of o.template)yield*E(t);return;case"GetJsonField":case"GetResourceField":yield*E(o.source),yield*E(o.field);return;case"MapRecordValues":case"MapArrayValues":case"MapResourceFields":yield*E(o.source),yield*E(o.mapping);return;case"Flatten":case"GetResourceValueAsJson":case"GetBlobContent":case"GetBlobContentAsString":case"GetBlobContentAsJson":case"GetDownloadedBlobContent":case"GetOnDemandBlobContent":case"GetImportProgress":case"GetLastLogs":case"GetProgressLog":case"GetLogHandle":yield*E(o.source);return;case"IsEmpty":yield*E(o.arg);return;case"Not":yield*E(o.operand);return;case"And":case"Or":yield*E(o.operand1),yield*E(o.operand2);return;default:h.assertNever(o)}}function eo(o,e){const t={};for(const[r,s]of Object.entries(o))t[r]=e(s);return t}function le(o,e){return o===void 0?void 0:e(o)}function to(o){switch(o.type){case"GetImportProgress":return!0;default:return!1}}function ro(o){for(const e of E(o))if(to(e))return!0;return!1}function ge(o){return{type:"ReturnResult",result:o}}function m(o){return()=>ge(o)}const oo=o=>{const e={};for(const[t,r]of Object.entries(o))e[t]=r;return m(e)},so=o=>{const e=o.source;if(e===void 0)return m(void 0);const t=[];for(const r of e)r instanceof Array?t.push(...r):t.push(r);return m(t)},no=o=>{const e=o.source,t=o.field;return e===void 0||t===void 0?m(void 0):({cCtx:r})=>{var s;return ge((s=r.accessor(e).node().traverse(t))==null?void 0:s.persist())}};function xt(o,e){const t={},r=o.length;for(let s=0;s<r;s++)t[String(s)]=e(o[s]);return t}function io(o,e){return t=>{const r=t.source;return r===void 0?m(void 0):()=>({type:"ScheduleSubroutine",subroutine:It(r.length),args:xt(r,s=>y({...o,[e.itVar]:s},e.mapping))})}}function It(o){return e=>{const t=[];for(let r=0;r<o;r++)t.push(e[String(r)]);return m(t)}}function ao(o,e){return t=>{const r=t.source;if(r===void 0)return m(void 0);const s={};for(const[n,i]of Object.entries(r)){const a={...o,[e.itVar]:i};s[n]=y(a,e.mapping)}return()=>({type:"ScheduleSubroutine",subroutine:co,args:s})}}const co=o=>m(o),lo=o=>{const e=o.arg;return m(e===void 0?void 0:e.length===0)},uo=o=>{const e=o.operand;return m(e===void 0?void 0:!e)},po=o=>{const e=o.operand1,t=o.operand2;return m(e===void 0||t===void 0?void 0:e&&t)},go=o=>{const e=o.operand1,t=o.operand2;return m(e===void 0||t===void 0?void 0:e||t)},ho=o=>{const e=o.source;return e===void 0?m(void 0):({cCtx:t})=>{var r;return ge((r=t.accessor(e).node())==null?void 0:r.getDataAsJson())}},fo=o=>{const e=o.source,t=o.field;return m(e===void 0||t===void 0?void 0:e[t])};function mo(o,e){return t=>{const r=t.source;return r===void 0?m(void 0):({cCtx:s})=>{const n=s.accessor(r).node(),i={};for(const a of n.listInputFields()){const c=n.traverse(a);if(c===void 0)i[a]=m(void 0);else{const l={...o,[e.itVar]:c.persist()};i[a]=y(l,e.mapping)}}return{type:"ScheduleSubroutine",subroutine:vo,args:i}}}}const vo=o=>m(o),yo=o=>{const e=o.source;return e===void 0?m(void 0):({drivers:t})=>({type:"ScheduleComputable",computable:S.Computable.make(r=>t.blobDriver.getDownloadedBlob(r.accessor(e).node().resourceInfo),{postprocessValue:async r=>{if(r!==void 0)return await t.blobDriver.getContent(r.handle)}})})},bo=o=>{const e=o.source;return e===void 0?m(void 0):({cCtx:t,drivers:r})=>{const s=t.accessor(e).node().resourceInfo;return{type:"ScheduleComputable",computable:S.Computable.make(()=>r.blobDriver.getDownloadedBlob(s),{postprocessValue:async n=>n===void 0?void 0:(await r.blobDriver.getContent(n.handle)).toString()})}}},wo=o=>{const e=o.source;return e===void 0?m(void 0):({drivers:t})=>({type:"ScheduleComputable",computable:S.Computable.make(r=>t.blobDriver.getDownloadedBlob(r.accessor(e).node().resourceInfo),{postprocessValue:async r=>{if(r==null)return;const s=await t.blobDriver.getContent(r.handle);if(s!=null)return JSON.parse(Buffer.from(s).toString())}})})},So=o=>{const e=o.source;return e===void 0?m(void 0):({drivers:t})=>({type:"ScheduleComputable",computable:t.blobDriver.getDownloadedBlob(e)})},ko=o=>{const e=o.source;return e===void 0?m(void 0):({drivers:t})=>({type:"ScheduleComputable",computable:t.blobDriver.getOnDemandBlob(e)})},Po=o=>{const e=o.source;return e===void 0?m(void 0):({drivers:t})=>({type:"ScheduleComputable",computable:t.uploadDriver.getProgressId(e)})},Co=o=>e=>{const t=e.source;return t===void 0?m(void 0):({drivers:r})=>({type:"ScheduleComputable",computable:r.logDriver.getLastLogs(t,o)})},Fo=o=>e=>{const t=e.source;return t===void 0?m(void 0):({drivers:r})=>({type:"ScheduleComputable",computable:r.logDriver.getProgressLog(t,o)})},Ro=o=>{const e=o.source;return e===void 0?m(void 0):({drivers:t})=>({type:"ScheduleComputable",computable:t.logDriver.getLogHandle(e)})};function y(o,e){switch(e.type){case"GetFromCtx":const t=o[e.variable];return typeof t=="function"?r=>ge(t(r.cCtx)):(t===void 0&&console.log("asdasd"),m(t));case"Isolate":return({drivers:r})=>({type:"ScheduleComputable",computable:Lt(r,o,e.cfg)});case"Immediate":return m(e.value);case"GetJsonField":return()=>({type:"ScheduleSubroutine",subroutine:fo,args:{source:y(o,e.source),field:y(o,e.field)}});case"MapArrayValues":return()=>({type:"ScheduleSubroutine",subroutine:io(o,e),args:{source:y(o,e.source)}});case"MapRecordValues":return()=>({type:"ScheduleSubroutine",subroutine:ao(o,e),args:{source:y(o,e.source)}});case"MakeObject":return()=>({type:"ScheduleSubroutine",subroutine:oo,args:eo(e.template,r=>y(o,r))});case"MakeArray":return()=>({type:"ScheduleSubroutine",subroutine:It(e.template.length),args:xt(e.template,r=>y(o,r))});case"Flatten":return()=>({type:"ScheduleSubroutine",subroutine:so,args:{source:y(o,e.source)}});case"IsEmpty":return()=>({type:"ScheduleSubroutine",subroutine:lo,args:{arg:y(o,e.arg)}});case"Not":return()=>({type:"ScheduleSubroutine",subroutine:uo,args:{operand:y(o,e.operand)}});case"And":return()=>({type:"ScheduleSubroutine",subroutine:po,args:{operand1:y(o,e.operand1),operand2:y(o,e.operand2)}});case"Or":return()=>({type:"ScheduleSubroutine",subroutine:go,args:{operand1:y(o,e.operand1),operand2:y(o,e.operand2)}});case"MapResourceFields":return()=>({type:"ScheduleSubroutine",subroutine:mo(o,e),args:{source:y(o,e.source)}});case"GetResourceField":return()=>({type:"ScheduleSubroutine",subroutine:no,args:{source:y(o,e.source),field:y(o,e.field)}});case"GetResourceValueAsJson":return()=>({type:"ScheduleSubroutine",subroutine:ho,args:{source:y(o,e.source)}});case"GetBlobContent":return()=>({type:"ScheduleSubroutine",subroutine:yo,args:{source:y(o,e.source)}});case"GetBlobContentAsString":return()=>({type:"ScheduleSubroutine",subroutine:bo,args:{source:y(o,e.source)}});case"GetBlobContentAsJson":return()=>({type:"ScheduleSubroutine",subroutine:wo,args:{source:y(o,e.source)}});case"GetDownloadedBlobContent":return()=>({type:"ScheduleSubroutine",subroutine:So,args:{source:y(o,e.source)}});case"GetOnDemandBlobContent":return()=>({type:"ScheduleSubroutine",subroutine:ko,args:{source:y(o,e.source)}});case"GetImportProgress":return()=>({type:"ScheduleSubroutine",subroutine:Po,args:{source:y(o,e.source)}});case"GetLastLogs":return()=>({type:"ScheduleSubroutine",subroutine:Co(e.lines),args:{source:y(o,e.source)}});case"GetProgressLog":return()=>({type:"ScheduleSubroutine",subroutine:Fo(e.patternToSearch),args:{source:y(o,e.source)}});case"GetLogHandle":return()=>({type:"ScheduleSubroutine",subroutine:Ro,args:{source:y(o,e.source)}});default:return h.assertNever(e)}}const Bo=["$prod","$staging"];function Oo(o){return{$blockId:o.blockId,$args:JSON.parse(o.args),$ui:o.uiState!==void 0?JSON.parse(o.uiState):void 0,$prod:o.prod,$staging:o.staging}}const At=Symbol(),Nt="return",To={op:At,arg:Nt};function Do(o){return o.op==At&&o.arg==Nt}function Eo(){return{pendingSubroutines:new Map}}function ot(o,e,t,r){const s=new ct(t),n=(a,c)=>{if(Do(a))return e.result=c,!1;const l=h.notEmpty(e.pendingSubroutines.get(a.op));if(a.arg in l.args)throw new Error("argument already set");return l.args[a.arg]=c,l.argCounter--,l.argCounter===0&&(e.pendingSubroutines.delete(a.op),s.push({destination:l.destination,operation:l.subroutine(l.args)})),!0},i=[];e:for(;s.length>0;){const a=s.shift(),c=a.operation(o);switch(c.type){case"ReturnResult":if(!n(a.destination,c.result))break e;break;case"ScheduleSubroutine":const l=Symbol(),d=Object.entries(c.args),g=d.length;if(g===0)s.push({destination:a.destination,operation:c.subroutine({})});else{for(const[f,v]of d)s.push({destination:{op:l,arg:f},operation:v});e.pendingSubroutines.set(l,{argCounter:g,args:{},subroutine:c.subroutine,destination:a.destination})}break;case"ScheduleComputable":if(!r)throw new Error("asynchronous operations are forbidden in this context");i.push({destination:a.destination,computable:c.computable});break;default:h.assertNever(c)}}return i}function Vt(o,e,t,r={}){return Lt(o,Oo(e),t,r)}function Lt(o,e,t,r={}){const s=De({ctx:Object.fromEntries(Object.entries(e).filter(([n])=>Bo.indexOf(n)===-1)),cfg:t});return S.Computable.makeRaw(n=>{const i={drivers:o,cCtx:n},a=Eo();return{ir:ot(i,a,[{destination:To,operation:y(e,t)}],!0),async postprocessValue(l,d){const g=[];for(const O of l)g.push({destination:O.destination,operation:m(O.computable)});const f={drivers:o,get cCtx(){throw new Error("asynchronous operations are forbidden in this context")}},v=new Map;for(const[O,L]of a.pendingSubroutines)v.set(O,{...L,args:{...L.args}});const b={result:a.result,pendingSubroutines:v};if(ot(f,b,g,!1),!("result"in b))throw new Error("illegal cfg rendering stack state, no result");return b.result}}},{...r,key:s})}function jo(o){return o instanceof ArrayBuffer||ArrayBuffer.isView(o)}function st(o){return o!==void 0?Buffer.from(o).toString("base64"):void 0}class ue{constructor(e,t,r,s,n){p(this,"callbackRegistry");p(this,"fnJSONStringify");p(this,"fnJSONParse");p(this,"computablesToResolve",{});p(this,"computableCtx");p(this,"accessors",new Map);p(this,"meta");p(this,"_resultPool");if(this.scope=e,this.vm=t,this.blockCtx=r,this.env=s,this.computableCtx=n,this.callbackRegistry=this.scope.manage(this.vm.newObject()),this.fnJSONStringify=e.manage(t.getProp(t.global,"JSON").consume(i=>t.getProp(i,"stringify"))),t.typeof(this.fnJSONStringify)!=="function")throw new Error("JSON.stringify() not found.");if(this.fnJSONParse=e.manage(t.getProp(t.global,"JSON").consume(i=>t.getProp(i,"parse"))),t.typeof(this.fnJSONParse)!=="function")throw new Error("JSON.parse() not found.");this.meta=r.blockMeta(n),this.injectCtx()}resetComputableCtx(){this.computableCtx=void 0,this.accessors.clear()}static cleanErrorContext(e){typeof e=="object"&&e!==null&&"context"in e&&delete e.context}evaluateBundle(e){try{this.vm.unwrapResult(this.vm.evalCode(e,"bundle.js",{type:"global"})).dispose()}catch(t){throw ue.cleanErrorContext(t),t}}runCallback(e,...t){try{return ie.Scope.withScope(r=>{const s=r.manage(this.vm.getProp(this.callbackRegistry,e));if(this.vm.typeof(s)!=="function")throw new Error(`No such callback: ${e}`);return this.scope.manage(this.vm.unwrapResult(this.vm.callFunction(s,this.vm.undefined,...t.map(n=>this.exportObjectUniversal(n,r)))))})}catch(r){throw ue.cleanErrorContext(r),r}}getAccessorHandleByName(e){if(this.computableCtx===void 0)throw new Error("Accessors can't be used in this context");const t=(r,s)=>{if(!this.accessors.has(r)){const n=this.blockCtx[s];if(n===void 0)throw new Error("Staging context not available");const i=n(this.computableCtx);i?this.accessors.set(r,this.computableCtx.accessor(i).node({ignoreError:!0})):this.accessors.set(r,void 0)}return this.accessors.get(r)?r:void 0};if(e==="staging")return t("staging","staging");if(e==="main")return t("main","prod")}resolveWithCommon(e,t,...r){return this.wrapAccessor(this.getAccessor(e).traverseWithCommon(t,...r))}getResourceType(e){return this.getAccessor(e).resourceType}getInputsLocked(e){return this.getAccessor(e).getInputsLocked()}getOutputsLocked(e){return this.getAccessor(e).getOutputsLocked()}getIsReadyOrError(e){return this.getAccessor(e).getIsReadyOrError()}getIsFinal(e){return this.getAccessor(e).getIsFinal()}getError(e){return this.wrapAccessor(this.getAccessor(e).getError())}listInputFields(e){return this.getAccessor(e).listInputFields()}listOutputFields(e){return this.getAccessor(e).listOutputFields()}listDynamicFields(e){return this.getAccessor(e).listDynamicFields()}getKeyValueBase64(e,t){return st(this.getAccessor(e).getKeyValue(t))}getKeyValueAsString(e,t){return this.getAccessor(e).getKeyValueAsString(t)}getDataBase64(e){return st(this.getAccessor(e).getData())}getDataAsString(e){return this.getAccessor(e).getDataAsString()}parsePObjectCollection(e,t,r){const s=this.getAccessor(e);if(!s.getIsReadyOrError())return;const n=Xr(s,t,r),i={};for(const[a,c]of Object.entries(n))i[a]=F.mapPObjectData(c,l=>this.wrapAccessor(l));return i}registerComputable(e,t){const r=`${e}_${K.randomUUID()}`;return this.computablesToResolve[r]=t,r}getBlobContentAsString(e){const t=this.getAccessor(e).resourceInfo;return this.registerComputable("getBlobContentAsString",S.Computable.make(r=>this.env.driverKit.blobDriver.getDownloadedBlob(t,r),{postprocessValue:async r=>{if(r!==void 0)return Buffer.from(await this.env.driverKit.blobDriver.getContent(r.handle)).toString("utf-8")}}))}getBlobContentAsBase64(e){const t=this.getAccessor(e).resourceInfo;return this.registerComputable("getBlobContentAsBase64",S.Computable.make(r=>this.env.driverKit.blobDriver.getDownloadedBlob(t,r),{postprocessValue:async r=>{if(r!==void 0)return Buffer.from(await this.env.driverKit.blobDriver.getContent(r.handle)).toString("base64")}}))}getDownloadedBlobContentHandle(e){const t=this.getAccessor(e).resourceInfo;return this.registerComputable("getDownloadedBlobContentHandle",this.env.driverKit.blobDriver.getDownloadedBlob(t))}getOnDemandBlobContentHandle(e){const t=this.getAccessor(e).persist();return this.registerComputable("getOnDemandBlobContentHandle",this.env.driverKit.blobDriver.getOnDemandBlob(t))}getImportProgress(e){const t=this.getAccessor(e).persist();return this.registerComputable("getImportProgress",this.env.driverKit.uploadDriver.getProgressId(t))}getLastLogs(e,t){const r=this.getAccessor(e).persist();return this.registerComputable("getLastLogs",this.env.driverKit.logDriver.getLastLogs(r,t))}getProgressLog(e,t){const r=this.getAccessor(e).persist();return this.registerComputable("getProgressLog",this.env.driverKit.logDriver.getProgressLog(r,t))}getLogHandle(e){const t=this.getAccessor(e).persist();return this.registerComputable("getLogHandle",this.env.driverKit.logDriver.getLogHandle(t))}getBlockLabel(e){const t=this.meta.get(e);if(t===void 0)throw new Error(`Block ${e} not found.`);return t.label}get resultPool(){if(this._resultPool===void 0){if(this.computableCtx===void 0)throw new Error("can't use result pool in this context (most porbably called from the future mapper)");this._resultPool=h.notEmpty(this.blockCtx.getResultsPool,"getResultsPool")(this.computableCtx)}return this._resultPool}calculateOptions(e){return this.resultPool.calculateOptions(e)}getDataFromResultPool(){const e=this.resultPool.getData();return e.instabilityMarker!==void 0&&this.computableCtx.markUnstable(`incomplete_result_pool:${e.instabilityMarker}`),{isComplete:e.isComplete,entries:e.entries.map(t=>({ref:t.ref,obj:F.mapPObjectData(t.obj,r=>this.wrapAccessor(r))}))}}getDataWithErrorsFromResultPool(){const e=this.resultPool.getDataWithErrors();return e.instabilityMarker!==void 0&&this.computableCtx.markUnstable(`incomplete_result_pool:${e.instabilityMarker}`),{isComplete:e.isComplete,entries:e.entries.map(t=>({ref:t.ref,obj:{id:t.obj.id,spec:t.obj.spec,data:F.mapValueInVOE(t.obj.data,r=>this.wrapAccessor(r))}}))}}getSpecsFromResultPool(){const e=this.resultPool.getSpecs();return e.instabilityMarker!==void 0&&this.computableCtx.markUnstable(`specs_from_pool_incomplete:${e.instabilityMarker}`),e}createPFrame(e){if(this.computableCtx===void 0)throw new Error("can't instantiate PFrames from this context (most porbably called from the future mapper)");return this.env.driverKit.pFrameDriver.createPFrame(e.map(t=>F.mapPObjectData(t,r=>this.getAccessor(r))),this.computableCtx)}createPTable(e){if(this.computableCtx===void 0)throw new Error("can't instantiate PTable from this context (most porbably called from the future mapper)");return this.env.driverKit.pFrameDriver.createPTable(F.mapPTableDef(e,t=>F.mapPObjectData(t,r=>this.getAccessor(r))),this.computableCtx)}getAccessor(e){const t=this.accessors.get(e);if(t===void 0)throw new Error("No such accessor");return t}wrapAccessor(e){if(e!==void 0){const t=K.randomUUID();return this.accessors.set(t,e),t}}exportSingleValue(e,t){const r=this.tryExportSingleValue(e,t);if(r===void 0)throw new Error(`Can't export value: ${e}`);return r}tryExportSingleValue(e,t){let r,s=!1;switch(typeof e){case"string":r=this.vm.newString(e),s=!0;break;case"number":r=this.vm.newNumber(e),s=!0;break;case"undefined":r=this.vm.undefined;break;case"boolean":r=e?this.vm.true:this.vm.false;break;default:if(e===null){r=this.vm.null;break}if(jo(e)){r=this.vm.newArrayBuffer(e),s=!0;break}return}return s&&t!=null?t.manage(r):r}exportObjectUniversal(e,t){const r=this.tryExportSingleValue(e,t);return r!==void 0?r:this.exportObjectViaJson(e,t)}exportObjectViaJson(e,t){const r=this.vm.newString(JSON.stringify(e)).consume(s=>this.vm.unwrapResult(this.vm.callFunction(this.fnJSONParse,this.vm.undefined,s)));return t!==void 0?t.manage(r):r}importObjectUniversal(e){switch(this.vm.typeof(e)){case"undefined":return;case"boolean":case"number":case"string":return this.vm.dump(e);default:return this.importObjectViaJson(e)}}importObjectViaJson(e){const t=this.vm.unwrapResult(this.vm.callFunction(this.fnJSONStringify,this.vm.undefined,e)).consume(r=>this.vm.getString(r));if(t!=="undefined")return JSON.parse(t)}injectCtx(){ie.Scope.withScope(e=>{const t=e.manage(this.vm.newObject());this.vm.setProp(t,"args",e.manage(this.vm.newString(this.blockCtx.args))),this.blockCtx.uiState!==void 0&&this.vm.setProp(t,"uiState",e.manage(this.vm.newString(this.blockCtx.uiState))),this.vm.setProp(t,"callbackRegistry",this.callbackRegistry);const r=(s,n)=>{this.vm.newFunction(s,n).consume(i=>this.vm.setProp(t,s,i))};r("getAccessorHandleByName",s=>this.exportSingleValue(this.getAccessorHandleByName(this.vm.getString(s)),void 0)),r("resolveWithCommon",(s,n,...i)=>this.exportSingleValue(this.resolveWithCommon(this.vm.getString(s),this.importObjectViaJson(n),...i.map(a=>this.importObjectViaJson(a))),void 0)),r("getResourceType",s=>this.exportObjectViaJson(this.getResourceType(this.vm.getString(s)),void 0)),r("getInputsLocked",s=>this.exportSingleValue(this.getInputsLocked(this.vm.getString(s)),void 0)),r("getOutputsLocked",s=>this.exportSingleValue(this.getOutputsLocked(this.vm.getString(s)),void 0)),r("getIsReadyOrError",s=>this.exportSingleValue(this.getIsReadyOrError(this.vm.getString(s)),void 0)),r("getIsFinal",s=>this.exportSingleValue(this.getIsFinal(this.vm.getString(s)),void 0)),r("getError",s=>this.exportSingleValue(this.getError(this.vm.getString(s)),void 0)),r("listInputFields",s=>this.exportObjectViaJson(this.listInputFields(this.vm.getString(s)),void 0)),r("listOutputFields",s=>this.exportObjectViaJson(this.listInputFields(this.vm.getString(s)),void 0)),r("listDynamicFields",s=>this.exportObjectViaJson(this.listInputFields(this.vm.getString(s)),void 0)),r("getKeyValueBase64",(s,n)=>this.exportSingleValue(this.getKeyValueBase64(this.vm.getString(s),this.vm.getString(n)),void 0)),r("getKeyValueAsString",(s,n)=>this.exportSingleValue(this.getKeyValueAsString(this.vm.getString(s),this.vm.getString(n)),void 0)),r("getDataBase64",s=>this.exportSingleValue(this.getDataBase64(this.vm.getString(s)),void 0)),r("getDataAsString",s=>this.exportSingleValue(this.getDataAsString(this.vm.getString(s)),void 0)),r("parsePObjectCollection",(s,n,i)=>this.exportObjectUniversal(this.parsePObjectCollection(this.vm.getString(s),this.vm.dump(n),this.vm.getString(i)),void 0)),r("getBlobContentAsBase64",s=>this.exportSingleValue(this.getBlobContentAsBase64(this.vm.getString(s)),void 0)),r("getBlobContentAsString",s=>this.exportSingleValue(this.getBlobContentAsString(this.vm.getString(s)),void 0)),r("getDownloadedBlobContentHandle",s=>this.exportSingleValue(this.getDownloadedBlobContentHandle(this.vm.getString(s)),void 0)),r("getOnDemandBlobContentHandle",s=>this.exportSingleValue(this.getOnDemandBlobContentHandle(this.vm.getString(s)),void 0)),r("getImportProgress",s=>this.exportSingleValue(this.getImportProgress(this.vm.getString(s)),void 0)),r("getLastLogs",(s,n)=>this.exportSingleValue(this.getLastLogs(this.vm.getString(s),this.vm.getNumber(n)),void 0)),r("getProgressLog",(s,n)=>this.exportSingleValue(this.getProgressLog(this.vm.getString(s),this.vm.getString(n)),void 0)),r("getLogHandle",s=>this.exportSingleValue(this.getLogHandle(this.vm.getString(s)),void 0)),r("getBlockLabel",s=>this.exportSingleValue(this.getBlockLabel(this.vm.getString(s)),void 0)),r("getDataFromResultPool",s=>this.exportObjectUniversal(this.getDataFromResultPool(),void 0)),r("getDataWithErrorsFromResultPool",s=>this.exportObjectUniversal(this.getDataWithErrorsFromResultPool(),void 0)),r("getSpecsFromResultPool",s=>this.exportObjectUniversal(this.getSpecsFromResultPool(),void 0)),r("calculateOptions",s=>this.exportObjectUniversal(this.calculateOptions(this.importObjectViaJson(s)),void 0)),r("createPFrame",s=>this.exportSingleValue(this.createPFrame(this.importObjectViaJson(s)),void 0)),r("createPTable",s=>this.exportSingleValue(this.createPTable(this.importObjectViaJson(s)),void 0)),this.vm.setProp(this.vm.global,"cfgRenderCtx",t)})}}function xo(o,e,t,r,s={}){return S.Computable.makeRaw(n=>{const i=new ie.Scope;n.addOnDestroy(()=>i.dispose());const a=i.manage(o.quickJs.newRuntime());a.setMemoryLimit(1024*640),a.setMaxStackSize(1024*320);const c=i.manage(a.newContext()),l=new ue(i,c,e,o,n);l.evaluateBundle(r.content);const d=l.runCallback(t);return l.resetComputableCtx(),{ir:l.computablesToResolve,postprocessValue:async g=>{for(const[f,v]of Object.entries(g))l.runCallback(f,v);return l.importObjectUniversal(d)}}},s)}function Be(o,e,t,r,s={}){if(F.isFunctionHandle(t)){if(r===void 0)throw new Error("No code bundle.");return xo(o,e,t,r,s)}else return Vt(o.driverKit,e,t,s)}function Io(o,e,t){return S.Computable.make(r=>{var b,O,L,U,ee,H,q,te;const s=r.accessor(o).node(),n=h.notEmpty(s.getKeyValueAsJson(Ie)),i=h.notEmpty(s.getKeyValueAsJson(Z)),a=h.notEmpty(s.getKeyValueAsJson(X)),c=h.notEmpty(s.getKeyValueAsJson(_)),l=h.notEmpty(s.getKeyValueAsJson(ae)),d=new Map;for(const{id:k}of V(c)){const M=s.traverse({field:P(k,"currentArgs"),assertFieldType:"Dynamic",errorIfFieldNotSet:!0});let W;const j=s.traverse({field:P(k,"prodArgs"),assertFieldType:"Dynamic",stableIfNotFound:!0});if(j!==void 0){const D=s.getField({field:P(k,"prodOutput"),assertFieldType:"Dynamic",errorIfFieldNotFound:!0}),R=s.getField({field:P(k,"prodUiCtx"),assertFieldType:"Dynamic",errorIfFieldNotFound:!0});W={arguments:j.getDataAsJson(),stale:M.id!==j.id,outputError:D.error!==void 0||R.error!==void 0||((b=D.value)==null?void 0:b.getError())!==void 0||((O=R.value)==null?void 0:O.getError())!==void 0,outputsError:((L=D.error)==null?void 0:L.getDataAsString())??((ee=(U=D.value)==null?void 0:U.getError())==null?void 0:ee.getDataAsString()),exportsError:((H=R.error)==null?void 0:H.getDataAsString())??((te=(q=R.value)==null?void 0:q.getError())==null?void 0:te.getDataAsString()),finished:(D.value!==void 0&&D.value.getIsReadyOrError()||D.error!==void 0&&D.error.getIsReadyOrError())&&(R.value!==void 0&&R.value.getIsReadyOrError()||R.error!==void 0&&R.error.getIsReadyOrError())}}d.set(k,{currentArguments:M.getDataAsJson(),prod:W})}const g=se(c,k=>d.get(k).currentArguments),f=new Set(l.blocksInLimbo),v=[...V(c)].map(({id:k,label:M,renderingMode:W})=>{var Ue,$e,Ge,He;const j=h.notEmpty(d.get(k)),D=h.notEmpty(g.nodes.get(k));let R="NotCalculated";j.prod!==void 0&&(f.has(k)?R="Limbo":R=j.prod.finished?"Done":"Running");const $=s.traverse({field:P(k,"blockPack"),assertFieldType:"Dynamic",errorIfFieldNotSet:!0},{field:u.Pl.HolderRefField,assertFieldType:"Input",errorIfFieldNotFound:!0}),J=$==null?void 0:$.getDataAsJson(),{sections:re,inputsValid:w,sdkVersion:B}=le(J==null?void 0:J.config,fe=>{const z=F.normalizeBlockConfig(fe),_e=Je(s,k);return{sections:Be(t,_e,z.sections,z.code),inputsValid:Be(t,_e,z.inputsValid,z.code),sdkVersion:z.sdkVersion}})||{},C=le(J,fe=>t.blockUpdateWatcher.get(fe.source));return{id:k,label:M,renderingMode:W,stale:((Ue=j.prod)==null?void 0:Ue.stale)!==!1||R==="Limbo",missingReference:D.missingReferences,upstreams:[...g.traverseIdsExcludingRoots("upstream",k)],downstreams:[...g.traverseIdsExcludingRoots("downstream",k)],calculationStatus:R,outputErrors:(($e=j.prod)==null?void 0:$e.outputError)===!0,outputsError:(Ge=j.prod)==null?void 0:Ge.outputsError,exportsError:(He=j.prod)==null?void 0:He.exportsError,sections:re,inputsValid:w,currentBlockPack:J==null?void 0:J.source,updatedBlockPack:C,sdkVersion:B,navigationState:e.getState(k)}});return{meta:a,created:new Date(n),lastModified:new Date(i),authorMarker:s.getKeyValueAsJson(ke),blocks:v}},{postprocessValue:r=>{const s=new Set,n=new Set;return{...r,blocks:r.blocks.map(i=>{i.inputsValid||s.add(i.id),i.stale&&n.add(i.id);const a=i.stale||i.upstreams.findIndex(l=>n.has(l))!==-1,c=a&&!!i.inputsValid&&!i.missingReference&&i.upstreams.findIndex(l=>s.has(l))===-1;return{...i,canRun:c,stale:a}})}}}).withStableType()}function Jt(o,e){var t,r;return le((r=(t=o.traverse({field:P(e,"blockPack"),assertFieldType:"Dynamic",errorIfFieldNotSet:!0},{field:u.Pl.HolderRefField,assertFieldType:"Input",errorIfFieldNotFound:!0}))==null?void 0:t.getDataAsJson())==null?void 0:r.config,s=>F.normalizeBlockConfig(s))}function Ao(o,e){const t=o.node();if(u.resourceTypesEqual(t.resourceType,Ne)){const r=t.getDataAsJson();if(r===void 0)throw new Error("No resource data.");return e.frontendDownloadDriver.getPath(new URL(r.url)).withStableType()}else if(u.resourceTypesEqual(t.resourceType,Ve)){const r=t.getDataAsJson();if(r===void 0)throw new Error("No resource data.");return e.signer.verify(r.path,r.signature,`Frontend path signature mismatch for: ${r.path}`),r.path}else throw new Error(`Unsupported resource type: ${JSON.stringify(t.resourceType)}`)}function No(o,e){if(o!==void 0)return S.Computable.make(t=>Ao(t.accessor(o),e),{postprocessValue:t=>{if(t!==void 0){if(typeof t=="string")return t;if(t.error!==void 0)throw new Error(t.error);return t.path}}}).withStableType()}function Vo(o,e,t){return S.Computable.make(r=>{var a;const s=r.accessor(o).node(),n=Jt(s,e),i=(a=s.traverse({field:P(e,"blockPack"),assertFieldType:"Dynamic"},{field:u.Pl.HolderRefField,assertFieldType:"Input",errorIfFieldNotFound:!0},{field:Bt,assertFieldType:"Input"}))==null?void 0:a.persist();return{path:No(i,t),sdkVersion:n==null?void 0:n.sdkVersion}},{mode:"StableOnlyLive"})}function Lo(o,e,t){return S.Computable.make(r=>{const s=r.accessor(o).node(),n=Je(s,e);return{author:s.getKeyValueAsJson(Se(e)),args:JSON.parse(n.args),ui:n.uiState!==void 0?JSON.parse(n.uiState):void 0}},{key:"inputs#"+u.resourceIdToString(o.rid)+e})}function Jo(o,e,t){return S.Computable.make(r=>{const s=r.accessor(o).node(),n=jt(s,e),i=Jt(s,e);return le(i,a=>{const c={};for(const[l,d]of Object.entries(a.outputs))c[l]=S.Computable.wrapError(Be(t,n,d,a.code));return c})},{key:"outputs#"+u.resourceIdToString(o.rid)+e}).withStableType()}function Mo(o,e){return S.Computable.make(t=>{const r=t.accessor(o).node(),s=h.notEmpty(r.getKeyValueAsJson(_)),n=[];for(const{id:i,renderingMode:a}of V(s)){const c=r.traverse({field:P(i,"blockPack"),assertFieldType:"Dynamic",errorIfFieldNotSet:!0},{field:u.Pl.HolderRefField,assertFieldType:"Input",errorIfFieldNotFound:!0}),l=c==null?void 0:c.getDataAsJson();if((l==null?void 0:l.config)===void 0)continue;const d=F.normalizeBlockConfig(l.config),g=Object.entries(d.outputs).map(([,v])=>v).filter(v=>!F.isFunctionHandle(v)&&ro(v)).map(v=>v);if(g.length===0)continue;const f=jt(r,i);for(const v of g)n.push(S.Computable.wrapError(Vt(e.driverKit,f,v)))}return n})}class Ko{constructor(){p(this,"states",new Map)}setState(e,t){const r=this.states.get(e);if(r===void 0){this.states.set(e,{state:t,change:new S.ChangeSource});return}r.state={...t},r.change.markChanged()}readState(e,t){let r=this.states.get(t);return r===void 0&&(r={state:{...F.DefaultNavigationState},change:new S.ChangeSource},this.states.set(t,r)),r.change.attachWatcher(e.watcher),r.state}getState(e){return S.Computable.make(t=>this.readState(t,e),{key:`navigationState#${e}`})}deleteBlock(e){const t=this.states.get(e);t!==void 0&&(this.states.delete(e),t.change.markChanged())}}class he{constructor(e,t,r){p(this,"rid");p(this,"overview");p(this,"navigationStates",new Ko);p(this,"blockComputables",new Map);p(this,"blockFrontends",new Map);p(this,"activeConfigs");p(this,"refreshLoopResult");p(this,"abortController",new AbortController);p(this,"destroyed",!1);this.env=e,this.projectTree=r,this.overview=Io(r.entry(),this.navigationStates,e).withPreCalculatedValueTree(),this.rid=t,this.refreshLoopResult=this.refreshLoop(),this.activeConfigs=Mo(r.entry(),e)}async refreshLoop(){for(;!this.destroyed;)try{await be(this.env.pl,this.rid,e=>{e.doRefresh(this.env.ops.stagingRenderingRate)}),await this.activeConfigs.getValue(),await zt.setTimeout(this.env.ops.projectRefreshInterval,this.abortController.signal)}catch(e){if(u.isNotFoundError(e)){console.warn("project refresh routine terminated, because project was externally deleted");break}else if(!u.isTimeoutOrCancelError(e))throw new Error("Unexpected exception",{cause:e})}}async addBlock(e,t,r,s=void 0,n=K.randomUUID()){const i=await this.env.bpPreparer.prepare(t),a=await this.env.bpPreparer.getBlockConfig(t);return await A(this.env.pl,this.rid,s,c=>c.addBlock({id:n,label:e,renderingMode:a.renderingMode},{args:JSON.stringify(a.initialArgs),blockPack:i},r)),await this.projectTree.refreshState(),n}async updateBlockPack(e,t,r=!1,s){const n=await this.env.bpPreparer.prepare(t),i=await this.env.bpPreparer.getBlockConfig(t);await A(this.env.pl,this.rid,s,a=>a.migrateBlockPack(e,n,r?JSON.stringify(i.initialArgs):void 0)),await this.projectTree.refreshState()}async deleteBlock(e,t){await A(this.env.pl,this.rid,t,r=>r.deleteBlock(e)),this.navigationStates.deleteBlock(e),await this.projectTree.refreshState()}async reorderBlocks(e,t){await A(this.env.pl,this.rid,t,r=>{const s=r.structure;if(s.groups.length!==1)throw new Error("Unexpected project structure, non-sinular block group");const n=s.groups[0];if(n.blocks.length!==e.length)throw new Error(`Lengh mismatch: ${n.blocks.length} !== ${e.length}`);if(new Set(e).size!==e.length)throw new Error("Repeated block ids");const i={groups:[{id:n.id,label:n.label,blocks:e.map(a=>{const c=n.blocks.find(l=>l.id===a);if(c===void 0)throw new Error(`Can't find block: ${a}`);return c})}]};r.updateStructure(i)}),await this.projectTree.refreshState()}async runBlock(e){await be(this.env.pl,this.rid,t=>t.renderProduction([e],!0)),await this.projectTree.refreshState()}async stopBlock(e){await be(this.env.pl,this.rid,t=>t.stopProduction(e)),await this.projectTree.refreshState()}async setBlockLabel(e,t,r){await A(this.env.pl,this.rid,r,s=>{s.setBlockLabel(e,t)}),await this.projectTree.refreshState()}async setBlockArgs(e,t,r){await A(this.env.pl,this.rid,r,s=>s.setArgs([{blockId:e,args:JSON.stringify(t)}])),await this.projectTree.refreshState()}async setUiState(e,t,r){await A(this.env.pl,this.rid,r,s=>s.setUiState(e,t===void 0?void 0:JSON.stringify(t))),await this.projectTree.refreshState()}async setNavigationState(e,t){this.navigationStates.setState(e,t)}async setBlockArgsAndUiState(e,t,r,s){await A(this.env.pl,this.rid,s,n=>{n.setArgs([{blockId:e,args:JSON.stringify(t)}]),n.setUiState(e,JSON.stringify(r))}),await this.projectTree.refreshState()}async resetBlockArgsAndUiState(e,t){await this.env.pl.withWriteTx("BlockInputsReset",async r=>{const s=u.ensureResourceIdNotNull((await r.getField(u.field(this.rid,P(e,"blockPack")))).value),n=u.ensureResourceIdNotNull((await r.getField(u.field(s,u.Pl.HolderRefField))).value),i=await r.getResourceData(n,!1),a=JSON.parse(Buffer.from(h.notEmpty(i.data)).toString("utf-8"));await A(r,this.rid,t,c=>{c.setArgs([{blockId:e,args:JSON.stringify(a.config.initialArgs)}]),c.setUiState(e,void 0)}),await r.commit()}),await this.projectTree.refreshState()}getBlockComputables(e){const t=this.blockComputables.get(e);if(t===void 0){const r=Jo(this.projectTree.entry(),e,this.env),n={fullState:S.Computable.make(i=>({argsAndUiState:Lo(this.projectTree.entry(),e),outputs:r,navigationState:this.navigationStates.getState(e)}),{postprocessValue:i=>({...i.argsAndUiState,outputs:i.outputs,navigationState:i.navigationState})}).withPreCalculatedValueTree()};return this.blockComputables.set(e,n),n}return t}getBlockState(e){return this.getBlockComputables(e).fullState}getBlockFrontend(e){const t=this.blockFrontends.get(e);if(t===void 0){const r=Vo(this.projectTree.entry(),e,this.env).withPreCalculatedValueTree();return this.blockFrontends.set(e,r),r}return t}async destroy(){this.destroyed=!0,this.abortController.abort(),await this.refreshLoopResult,await this.projectTree.terminate(),this.overview.resetState(),this.blockFrontends.forEach(e=>e.resetState()),this.blockComputables.forEach(e=>{e.fullState.resetState()}),this.activeConfigs.resetState()}async destroyAndAwaitTermination(){await this.destroy()}static async init(e,t){const r=await Te.SynchronizedTreeState.init(e.pl,t,{...e.ops.defaultTreeOptions,finalPredicate:Go,pruning:Uo},e.logger);return new he(e,t,r)}}function Uo(o){switch(o.type.name){case"BlockPackCustom":return o.fields.filter(e=>e.name!=="template");case"UserProject":return o.fields.filter(e=>!e.name.startsWith("__serviceTemplate"));case"Blob":return[];default:return o.fields}}function Oe(o){return o.resourceReady||u.isNotNullResourceId(o.originalResourceId)||u.isNotNullResourceId(o.error)}function $o(o){if(!Oe(o)||!o.outputsLocked)return!1;for(const[,e]of o.fields)if(u.isNullResourceId(e.error)&&u.isNullResourceId(e.value))return!1;return!0}const nt=new Set;function Go(o){switch(o.type.name){case"StdMap":case"std/map":case"EphStdMap":case"PFrame":case"BContext":case"BlockPackCustom":case"BinaryMap":case"BinaryValue":case"BlobMap":case"BResolveSingle":case"BResolveSingleNoResult":case"BQueryResult":case"TengoTemplate":case"TengoLib":case"SoftwareInfo":case"Dummy":return Oe(o);case"json/resourceError":return o.type.version==="1";case"json/object":case"json/string":case"json/array":case"json/number":case"BContextEnd":case"Frontend/FromUrl":case"Frontend/FromFolder":case"BObjectSpec":return!0;case"UserProject":return!1;default:if(o.type.name.startsWith("Blob/"))return!0;if(o.type.name.startsWith("BlobUpload/"))return $o(o);if(o.type.name.startsWith("PColumnData/"))return Oe(o);nt.has(o.type.name)||(console.log("UNKNOWN RESOURCE TYPE: "+o.type.name),nt.add(o.type.name))}return!1}const Me={logger:new h.ConsoleLoggerAdapter,platformLocalStorageNameToPath:{},localStorageNameToPath:{local:dt.homedir()},blobDriverOps:{cacheSoftSizeBytes:100*1024*1024,nConcurrentDownloads:10},uploadDriverOps:{nConcurrentPartUploads:10,nConcurrentGetProgresses:10,pollingInterval:1e3,stopPollingDelay:1e3},logStreamDriverOps:{nConcurrentGetLogs:10,pollingInterval:1e3,stopPollingDelay:1e3}},Mt={...Me,defaultTreeOptions:{pollingInterval:350,stopPollingDelay:2500},devBlockUpdateRecheckInterval:1e3,projectRefreshInterval:700,stagingRenderingRate:5},Ho={minDelay:1500},_o="__no_updates__";class qo extends S.PollComputablePool{constructor(t,r,s={}){super({...s,...Ho},r);p(this,"http");this.registryProvider=t,this.http=s.http}getKey(t){switch(t.type){case"dev-v1":return`dev_1_${t.folder}_${t.mtime}`;case"dev-v2":return`dev_2_${t.folder}_${t.mtime}`;case"from-registry-v2":return`from_registry_v2_${t.registryUrl}_${t.id.organization}_${t.id.name}_${t.id.version}`;default:return _o}}async readValue(t){var r;try{switch(t.type){case"dev-v1":try{const s=await xe(t.folder);return s===t.mtime?void 0:{...t,mtime:s}}catch(s){this.logger.warn(s);return}case"dev-v2":try{const s=await T.tryLoadPackDescription(t.folder,this.logger);if(s===void 0)return;const n=await de(s);return n===t.mtime?void 0:{...t,mtime:n}}catch(s){this.logger.warn(s);return}case"from-registry-v2":try{const n=(r=await this.registryProvider.getRegistry(t.registryUrl).getOverviewForSpec(t.id))==null?void 0:r.spec;if((n==null?void 0:n.type)!=="from-registry-v2")throw new Error("Unexpected");return Y.blockPackIdEquals(n.id,t.id)?void 0:n}catch(s){this.logger.warn(s);return}default:return}}catch(s){this.logger.warn(s);return}}resultsEqual(t,r){if(t===void 0&&r===void 0)return!0;if(t===void 0||r===void 0||t.type!==r.type)return!1;switch(t.type){case"from-registry-v1":return r.type!=="from-registry-v1"?!1:t.registryUrl===r.registryUrl&&Y.blockPackIdEquals(t.id,r.id);case"from-registry-v2":return r.type!=="from-registry-v2"?!1:t.registryUrl===r.registryUrl&&Y.blockPackIdEquals(t.id,r.id);case"dev-v1":return r.type!=="dev-v1"?!1:t.folder===r.folder&&t.mtime===r.mtime;case"dev-v2":return r.type!=="dev-v2"?!1:t.folder===r.folder&&t.mtime===r.mtime;default:h.assertNever(t)}}}class it{constructor(){p(this,"resources",new Map)}check(e){const t=this.resources.get(e);if(t===void 0)throw new Error("Unexpected state.");if(t.refCount===0){this.resources.delete(e);const r=t.resource;r!=null&&typeof r[Symbol.dispose]=="function"&&r[Symbol.dispose]()}}acquire(e){const t=this.calculateParamsKey(e);let r=this.resources.get(t);r===void 0&&(r={refCount:0,resource:this.createNewResource(e)},this.resources.set(t,r)),r.refCount++;let s=!1;return{resource:r.resource,key:t,unref:()=>{s||(r.refCount--,s=!0,this.check(t))}}}getByKey(e){if(!this.resources.has(e))throw new Error(`resource not found, key = ${e}`);return this.resources.get(e).resource}tryGetByKey(e){var t;return(t=this.resources.get(e))==null?void 0:t.resource}}function at(o){return String(o.id)}class Wo{constructor(e,t,r){p(this,"pFrame",new Qt.PFrame);p(this,"blobIdToResource",new Map);p(this,"blobHandleComputables",new Map);p(this,"preloadBlob",async e=>{const t=e.map(r=>this.getOrCreateComputableForBlob(r));for(const r of t)await r.awaitStableFullValue()});p(this,"resolveBlob",async e=>{const t=this.getOrCreateComputableForBlob(e);return this.blobDriver.getLocalPath((await t.awaitStableValue()).handle)});p(this,"resolveBlobContent",async e=>{const t=this.getOrCreateComputableForBlob(e),r=this.blobDriver.getLocalPath((await t.awaitStableValue()).handle);return await this.blobContentCache.forceFetch(r)});this.blobDriver=e,this.blobContentCache=t,this.columns=r,this.pFrame.setDataSource(this);for(const s of r){for(const i of Hr(s.data))this.blobIdToResource.set(at(i),i);const n=_r(s.data,at);try{this.pFrame.addColumnSpec(s.id,s.spec),this.pFrame.setColumnData(s.id,n)}catch(i){throw new Error(`Adding column ${s.id} to PFrame failed: ${i}; Spec: ${s.spec}, DataInfo: ${n}.`)}}}getOrCreateComputableForBlob(e){let t=this.blobHandleComputables.get(e);if(t!==void 0)return t;const r=this.blobIdToResource.get(e);if(r===void 0)throw new Error(`Blob with id ${e} not found.`);return t=this.blobDriver.getDownloadedBlob(r).withPreCalculatedValueTree(),this.blobHandleComputables.set(e,t),t}[Symbol.dispose](){for(const e of this.blobHandleComputables.values())e.resetState();this.pFrame.dispose()}}class zo{constructor(e){p(this,"pFrames");p(this,"pTables");p(this,"blobContentCache");p(this,"concurrencyLimiter");this.blobDriver=e;const t=new Zt.LRUCache({maxSize:1e9,fetchMethod:async s=>await ut.readFile(s),sizeCalculation:s=>s.length}),r=new h.ConcurrencyLimitingExecutor(2);this.blobContentCache=t,this.concurrencyLimiter=r,this.pFrames=new class extends it{constructor(s){super(),this.blobDriver=s}createNewResource(s){return new Wo(this.blobDriver,t,s)}calculateParamsKey(s){return Qo(s)}}(this.blobDriver),this.pTables=new class extends it{constructor(s){super(),this.pFrames=s}async createNewResource(s){const n=this.pFrames.getByKey(s.pFrameHandle),i=await r.run(async()=>await n.pFrame.createTable({src:Q(s.def.src),filters:s.def.filters}));return s.def.sorting.length!==0?i.sort(s.def.sorting):i}calculateParamsKey(s){return Yo(s)}}(this.pFrames)}createPFrame(e,t){const r=e.map(n=>F.mapPObjectData(n,i=>Zr(i))),s=this.pFrames.acquire(r);return t.addOnDestroy(s.unref),s.key}createPTable(e,t){const r=this.createPFrame(Zo(e.src),t),s=F.mapPTableDef(e,i=>i.id),n=this.pTables.acquire({def:s,pFrameHandle:r});return t.addOnDestroy(n.unref),n.key}async findColumns(e,t){const r={...t,compatibleWith:t.compatibleWith.length!==0?[{axesSpec:t.compatibleWith,qualifications:[]}]:[]};return{hits:(await this.concurrencyLimiter.run(async()=>await this.pFrames.getByKey(e).pFrame.findColumns(r))).hits.map(s=>s.hit)}}async getColumnSpec(e,t){return await this.concurrencyLimiter.run(async()=>await this.pFrames.getByKey(e).pFrame.getColumnSpec(t))}async listColumns(e){return await this.concurrencyLimiter.run(async()=>await this.pFrames.getByKey(e).pFrame.listColumns())}async calculateTableData(e,t){let r=await this.concurrencyLimiter.run(async()=>await this.pFrames.getByKey(e).pFrame.createTable({src:Q(t.src),filters:t.filters}));if(t.sorting.length>0){const i=await this.concurrencyLimiter.run(async()=>await r.sort(t.sorting));r.dispose(),r=i}const s=r.getSpec(),n=await this.concurrencyLimiter.run(async()=>await r.getData([...s.keys()]));return r.dispose(),s.map((i,a)=>({spec:i,data:n[a]}))}async getUniqueValues(e,t){return await this.concurrencyLimiter.run(async()=>await this.pFrames.getByKey(e).pFrame.getUniqueValues(t))}async getShape(e){return(await this.pTables.getByKey(e)).getShape()}async getSpec(e){return(await this.pTables.getByKey(e)).getSpec()}async getData(e,t,r){const s=await this.pTables.getByKey(e);return await this.concurrencyLimiter.run(async()=>await s.getData(t,r))}}function Q(o){switch(o.type){case"column":return{type:"column",columnId:o.column,qualifications:[]};case"inner":case"full":return{type:o.type,entries:o.entries.map(e=>Q(e))};case"outer":return{type:"outer",primary:Q(o.primary),secondary:o.secondary.map(e=>Q(e))};default:h.assertNever(o)}}function Yo(o){const e=K.createHash("sha256");return e.update(o.pFrameHandle),e.update(De(o.def)),e.digest().toString("hex")}function Qo(o){const e=o.map(s=>s.id).sort(),t=K.createHash("sha256");let r="";for(const s of e)r!==s&&(t.update(s),r=s);return t.digest().toString("hex")}function Zo(o){const e=new Map;return ne(o,e),[...e.values()]}function ne(o,e){switch(o.type){case"column":e.set(o.column.id,o.column);return;case"full":case"inner":for(const t of o.entries)ne(t,e);return;case"outer":ne(o.primary,e);for(const t of o.secondary)ne(t,e);return;default:h.assertNever(o)}}async function Kt(o,e){const t={...Me,...e};Xo(t.logger,t);const r=new h.HmacSha256Signer(t.localSecret),s=I.createDownloadClient(t.logger,o,t.platformLocalStorageNameToPath),n=I.createLogsClient(o,t.logger),i=I.createUploadBlobClient(o,t.logger),a=I.createUploadProgressClient(o,t.logger),c=I.createLsFilesClient(o,t.logger),l=new I.DownloadDriver(t.logger,s,n,t.blobDownloadPath,r,t.blobDriverOps),d=new I.UploadDriver(t.logger,r,i,a,t.uploadDriverOps),g=new I.LogsStreamDriver(n,t.logStreamDriverOps),f=new I.LogsDriver(g,l),v=new I.LsDriver(t.logger,c,o,r,t.localStorageNameToPath),b=new zo(l);return{blobDriver:l,logDriver:f,lsDriver:v,signer:r,uploadDriver:d,pFrameDriver:b}}function Xo(o,e){e.localStorageNameToPath.local!=dt.homedir()&&o.info(`'local' storage with homedir was overwrote: ${e.localStorageNameToPath.local}`);const t=Object.keys(e.platformLocalStorageNameToPath),r=Object.keys(e.localStorageNameToPath).find(s=>t.includes(s));if(r)throw new Error(`Platform local storages include one or more local storages: ${r}. Note that we automatically included 'local' storage with user's home directory.`)}class Ke{constructor(e,t,r,s,n,i,a,c){p(this,"pl");p(this,"projectList");p(this,"openedProjectsByRid",new Map);this.env=e,this.driverKit=t,this.signer=r,this.projectListResourceId=s,this.openedProjectsList=n,this.projectListTree=i,this.blockRegistryProvider=a,this.projectList=c,this.pl=this.env.pl}get internalDriverKit(){return this.env.driverKit}async createProject(e,t=K.randomUUID()){const r=await this.pl.withWriteTx("MLCreateProject",async s=>{const n=await Gr(s,e);return s.createField(u.field(this.projectListResourceId,t),"Dynamic",n),await s.commit(),await u.toGlobalResourceId(n)});return await this.projectListTree.refreshState(),r}async setProjectMeta(e,t,r){await A(this.pl,e,r,async s=>{s.setMeta(t)}),await this.projectListTree.refreshState()}async deleteProject(e){await this.pl.withWriteTx("MLRemoveProject",async t=>{t.removeField(u.field(this.projectListResourceId,e)),await t.commit()}),await this.projectListTree.refreshState()}async projectIdToResourceId(e){return await this.pl.withReadTx("Project id to resource id",async t=>{const r=(await t.getField(u.field(this.projectListResourceId,e))).value;if(u.isNullResourceId(r))throw new Error("Unexpected project list structure.");return r})}async ensureProjectRid(e){return typeof e=="string"?await this.projectIdToResourceId(e):e}async openProject(e){const t=await this.ensureProjectRid(e);if(this.openedProjectsByRid.has(t))throw new Error(`Project ${t} already opened`);this.openedProjectsByRid.set(t,await he.init(this.env,t)),this.openedProjectsList.setValue([...this.openedProjectsByRid.keys()])}async closeProject(e){const t=this.openedProjectsByRid.get(e);if(t===void 0)throw new Error(`Project ${e} not found among opened projects`);this.openedProjectsByRid.delete(e),await t.destroy(),this.openedProjectsList.setValue([...this.openedProjectsByRid.keys()])}getOpenedProject(e){const t=this.openedProjectsByRid.get(e);if(t===void 0)throw new Error(`Project ${e} not found among opened projects`);return t}async close(){await Promise.all([...this.openedProjectsByRid.values()].map(e=>e.destroy())),await this.projectListTree.terminate(),await this.env.retryHttpDispatcher.destroy(),await this.pl.close()}async closeAndAwaitTermination(){await this.close()}static generateLocalSecret(){return h.HmacSha256Signer.generateSecret()}static async init(e,t){const r={...Mt,...t};process.env.MI_LOG_TREE_STAT&&(r.defaultTreeOptions.logStat=process.env.MI_LOG_TREE_STAT==="cumulative"?"cumulative":"per-request");const s=await e.withWriteTx("MLInitialization",async b=>{const O=u.field(b.clientRoot,Sr);b.createField(O,"Dynamic");const L=await b.getField(O);if(u.isNullResourceId(L.value)){const U=b.createEphemeral(mt);return b.lock(U),b.setField(O,U),await b.commit(),await U.globalId}else return L.value}),n=r.logger,i=await Kt(e,r),a=new G.RetryAgent(e.httpDispatcher,{minTimeout:250,maxRetries:4}),c=new gt(a),l=new Vr(c,i.signer,a),d=new I.DownloadUrlDriver(n,e.httpDispatcher,r.frontendDownloadPath),g={pl:e,signer:i.signer,logger:n,httpDispatcher:e.httpDispatcher,retryHttpDispatcher:a,ops:r,bpPreparer:l,frontendDownloadDriver:d,driverKit:i,blockUpdateWatcher:new qo(c,n,{minDelay:r.devBlockUpdateRecheckInterval,http:a}),quickJs:await ie.getQuickJS()},f=new S.WatchableValue([]),v=await Pr(e,s,f,g);return new Ke(g,i,i.signer,s,f,v.tree,c,v.computable)}}exports.BlockPackRegistry=ir;exports.CentralBlockRegistry=ar;exports.DefaultDriverKitOps=Me;exports.DefaultMiddleLayerOps=Mt;exports.FrontendFromFolderResourceType=Ve;exports.FrontendFromUrlResourceType=Ne;exports.MiddleLayer=Ke;exports.Project=he;exports.TengoTemplateGet=vt;exports.TengoTemplateGetRegistry=yt;exports.TengoTemplateGetTemplate=wt;exports.TengoTemplateGetTemplateURI=bt;exports.TengoTemplatePack=St;exports.TengoTemplatePackConvert=kt;exports.TengoTemplatePackConvertTemplate=Ct;exports.TengoTemplatePackConvertTemplatePack=Pt;exports.V1CentralDevSnapshotRegistry=lr;exports.V1CentralRegistry=cr;exports.V2RegistryProvider=gt;exports.createRenderTemplate=Ae;exports.getDevV1PacketMtime=xe;exports.getDevV2PacketMtime=de;exports.initDriverKit=Kt;exports.loadTemplate=pe;exports.prepareTemplateSpec=Ft;Object.keys(F).forEach(o=>{o!=="default"&&!Object.prototype.hasOwnProperty.call(exports,o)&&Object.defineProperty(exports,o,{enumerable:!0,get:()=>F[o]})});Object.keys(Y).forEach(o=>{o!=="default"&&!Object.prototype.hasOwnProperty.call(exports,o)&&Object.defineProperty(exports,o,{enumerable:!0,get:()=>Y[o]})});Object.keys(u).forEach(o=>{o!=="default"&&!Object.prototype.hasOwnProperty.call(exports,o)&&Object.defineProperty(exports,o,{enumerable:!0,get:()=>u[o]})});
|
|
1
|
+
"use strict";var Mt=Object.defineProperty;var Kt=(o,e,t)=>e in o?Mt(o,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):o[e]=t;var p=(o,e,t)=>Kt(o,typeof e!="symbol"?e+"":e,t);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const F=require("@platforma-sdk/model"),Y=require("@milaboratories/pl-model-middle-layer"),G=require("undici"),T=require("@platforma-sdk/block-tools"),x=require("node:fs"),N=require("node:path"),Ut=require("yaml"),h=require("@milaboratories/ts-helpers"),$t=require("node:fs/promises"),Gt=require("@milaboratories/resolve-helper"),u=require("@milaboratories/pl-client"),Oe=require("@milaboratories/pl-tree"),S=require("@milaboratories/computable"),K=require("node:crypto"),it=require("denque"),Ht=require("@platforma-sdk/workflow-tengo"),Te=require("canonicalize"),_t=require("node:assert"),ie=require("quickjs-emscripten"),qt=require("node:timers/promises"),zt=require("node:os"),A=require("@milaboratories/pl-drivers"),Wt=require("@milaboratories/pframes-node"),Yt=require("lru-cache");function at(o){const e=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(o){for(const t in o)if(t!=="default"){const r=Object.getOwnPropertyDescriptor(o,t);Object.defineProperty(e,t,r.get?r:{enumerable:!0,get:()=>o[t]})}}return e.default=o,Object.freeze(e)}const ct=at($t),lt=at(zt);async function _e(o){try{return await ct.stat(o,{bigint:!0})}catch(e){if(e.code==="ENOENT")return;throw e}}const Qt=[T.RegistryV1.PlPackageYamlConfigFile],Zt=[T.RegistryV1.PlPackageJsonConfigFile],De=["backend","dist","tengo","tpl","main.plj.gz"],Ee=["config","dist","config.json"],ut=["frontend","dist"],qe="block-model/dist/config.json",Xt="block-ui/package.json",er=[De,Ee,Qt,Zt,ut];async function tr(o){return await _e(N.join(o,...Ee))!==void 0||await _e(N.join(o,...De))!==void 0}function me(o,e){const t=Gt.tryResolve(o,e);if(t===void 0)throw new Error(`Can't resolve ${e} against ${o}`);return t}async function ze(o,e){if(N.isAbsolute(o)||(o=N.resolve(o)),await tr(o))return{workflow:N.join(o,...De),config:N.join(o,...Ee),ui:N.join(o,...ut)};{const t=me(o,qe),r=me(o,qe),s=me(o,Xt);return{workflow:t,config:r,ui:N.resolve(s,"..","dist")}}}async function rr(o){try{return await x.promises.readFile(o,"utf8")}catch(e){if(e.code==="ENOENT")return;throw e}}async function or(o){try{return await x.promises.stat(o,{bigint:!0})}catch(e){if(e.code==="ENOENT")return;throw e}}async function je(o){let e=0n;for(const t of er){const r=N.join(o,...t),s=await or(r);s!==void 0&&e<s.mtimeNs&&(e=s.mtimeNs)}return e.toString()}async function de(o){const e=await x.promises.stat(o.components.workflow.main.file,{bigint:!0}),t=await x.promises.stat(o.components.model.file,{bigint:!0});return(e.mtimeNs>t.mtimeNs?e.mtimeNs:t.mtimeNs).toString()}class sr{constructor(e,t,r){this.v2Provider=e,this.registries=t,this.http=r}async getPackagesForRoot(e){const t=[],r=e.spec;switch(r.type){case"remote-v1":const s=this.http!==void 0?{dispatcher:this.http}:{},i=await(await G.request(`${r.url}/${T.RegistryV1.GlobalOverviewPath}`,s)).body.json();for(const a of i){const{organization:c,package:l,latestMeta:d,latestVersion:g}=a,f={organization:c,name:l,version:g};t.push({registryId:e.id,id:f,meta:{title:d.title??"No title",description:d.description??"No Description",organization:{name:c,url:"https://unknown.com"}},spec:{type:"from-registry-v1",id:f,registryUrl:r.url},otherVersions:a.allVersions})}return t;case"remote-v2":return(await this.v2Provider.getRegistry(r.url).listBlockPacks()).map(a=>({...a,registryId:e.id}));case"local-dev":for(const a of await x.promises.readdir(r.path,{withFileTypes:!0})){if(!a.isDirectory())continue;const c=N.join(r.path,a.name),l=await rr(N.join(c,T.RegistryV1.PlPackageYamlConfigFile));if(l!==void 0){const d=T.RegistryV1.PlPackageConfigData.parse(Ut.parse(l)),g=await je(c),f={organization:d.organization,name:d.package,version:"DEV"};t.push({registryId:e.id,id:f,meta:{title:d.meta.title??"No title",description:d.meta.description??"No Description",organization:{name:d.organization,url:"https://unknown.com"}},spec:{type:"dev-v2",folder:c,mtime:g},otherVersions:[]})}else{const d=await T.tryLoadPackDescription(c);if(d!==void 0){const g=await de(d);t.push({registryId:e.id,id:d.id,meta:await T.BlockPackMetaEmbedAbsoluteBytes.parseAsync(d.meta),spec:{type:"dev-v2",folder:c,mtime:g},otherVersions:[]})}}}return t;default:return h.assertNever(r)}}async listBlockPacks(){const e=[],t=[];for(const r of this.registries)t.push({...r,status:"online"}),e.push(...await this.getPackagesForRoot(r));return{registries:t,blockPacks:e}}}class dt{constructor(e){p(this,"registries",new Map);this.http=e}getRegistry(e){const t=this.registries.get(e);if(t)return t;const r=new T.RegistryV2Reader(T.folderReaderByUrl(e,this.http));return this.registries.set(e,r),r}}const nr={type:"remote-v2",url:"https://blocks.pl-open.science/"},ir={type:"remote-v1",url:"https://block.registry.platforma.bio/releases"},ar={type:"remote-v1",url:"https://block.registry.platforma.bio/dev"},cr={groups:[{id:"default",label:"Default",blocks:[]}]},lr={stagingRefreshTimestamp:0,blocksInLimbo:[]},ur={label:"New Project"},dr={name:"UserProject",version:"2"},pt="SchemaVersion",gt="1",xe="ProjectCreated",Z="ProjectLastModified",X="ProjectMeta",_="ProjectStructure",ae="BlockRenderingState",pr="BlockFrontendState/",gr=/^BlockFrontendState\/(?<blockid>.*)$/;function we(o){return`${pr}${o}`}const hr="BlockArgsAuthor/";function Se(o){return`${hr}${o}`}const ke="ProjectStructureAuthor";function fr(o){const e=o.match(gr);if(e!==null)return e.groups.blockid}const mr="__serviceTemplate_";function Pe(o){return`${mr}${o}`}function P(o,e){return`${o}-${e}`}const vr=/^(?<blockId>.*)-(?<fieldName>blockPack|prodArgs|currentArgs|prodCtx|prodUiCtx|prodOutput|prodCtxPrevious|prodUiCtxPrevious|prodOutputPrevious|stagingCtx|stagingUiCtx|stagingOutput|stagingCtxPrevious|stagingUiCtxPrevious|stagingOutputPrevious)$/;function yr(o){const e=o.match(vr);if(e===null)return;const{blockId:t,fieldName:r}=e.groups;return{blockId:t,fieldName:r}}const br="projects",ht={name:"Projects",version:"1"},wr=o=>u.resourceTypesEqual(o.type,ht)?o.fields:[];async function Sr(o,e,t,r){const s=await Oe.SynchronizedTreeState.init(o,e,{...r.ops.defaultTreeOptions,pruning:wr},r.logger);return{computable:S.Computable.make(i=>{const a=i.accessor(s.entry()).node(),c=t.getValue(i);if(a===void 0)return;const l=[];for(const d of a.listDynamicFields()){const g=a.traverse(d);if(g===void 0)continue;const f=h.notEmpty(g.getKeyValueAsJson(X)),v=h.notEmpty(g.getKeyValueAsJson(xe)),b=h.notEmpty(g.getKeyValueAsJson(Z));l.push({id:d,rid:g.id,created:new Date(v),lastModified:new Date(b),opened:c.indexOf(g.id)>=0,meta:f})}return l.sort(d=>-d.lastModified.valueOf()),l}).withStableType(),tree:s}}const kr={name:"EphRenderTemplate",version:"1"},Pr={name:"RenderTemplate",version:"1"};function Ae(o,e,t,r,s){if(s.length===0)throw new Error("Zero output names provided");const n=t?o.createEphemeral(kr):o.createStruct(Pr),i=u.field(n,"template"),a=u.field(n,"inputs");return o.createField(i,"Input",e),o.createField(a,"Input",u.Pl.createPlMap(o,r,t)),o.lockInputs(n),u.Pl.futureRecord(o,n,s,"Output","outputs/")}const Cr={name:"BContextEnd",version:"1"},Fr={name:"BContext",version:"1"},Rr="id",Br="parent/",Or=["context","result"];function We(o,e,t){return Ae(o,e,!0,t,Or)}function Tr(o){const e=o.createEphemeral(Cr);return o.lock(e),e}function Dr(o,e){if(e.length===0)return Tr(o);if(e.length===1)return e[0];const t=o.createEphemeral(Fr);o.createField(u.field(t,Rr),"Input",u.Pl.createPlString(o,K.randomUUID()));for(let r=0;r<e.length;r++)o.createField(u.field(t,`${Br}${r}`),"Input",e[r]);return o.lock(t),t}const ft={name:"TengoTemplateGet",version:"1"},mt="registry",vt="templateURI",yt="template",bt={name:"TengoTemplatePack",version:"1"},wt={name:"TengoTemplatePackConvert",version:"1"},St="templatePack",kt="template";async function Pt(o){switch(o.type){case"from-file":return{type:"explicit",content:await x.promises.readFile(o.path)};case"from-registry":case"explicit":return o;default:return h.assertNever(o)}}function Er(o,e){const t=o.createStruct(ft),r=u.field(t,mt),s=u.field(t,vt),n=u.field(t,yt);return o.setField(r,o.createValue(u.Pl.JsonString,Buffer.from(JSON.stringify(e.registry)))),o.setField(s,o.createValue(u.Pl.JsonString,Buffer.from(JSON.stringify(e.path)))),n}function jr(o,e){const t=o.createValue(bt,e.content),r=o.createStruct(wt),s=u.field(r,St),n=u.field(r,kt);return o.setField(s,t),n}function pe(o,e){switch(e.type){case"from-registry":return Er(o,e);case"explicit":return jr(o,e);default:return h.assertNever(e)}}const Ie={name:"Frontend/FromUrl",version:"1"},Ne={name:"Frontend/FromFolder",version:"1"};function xr(o,e){switch(e.type){case"url":return o.createValue(Ie,JSON.stringify({url:e.url}));case"local":return o.createValue(Ne,JSON.stringify({path:e.path,signature:e.signature}));default:return h.assertNever(e)}}const Ar={name:"BlockPackCustom",version:"1"},Ct="template",Ft="frontend";function Ye(o){return o.endsWith("/")?o:`${o}/`}class Ir{constructor(e,t,r){this.v2RegistryProvider=e,this.signer=t,this.http=r}async getBlockConfig(e){switch(e.type){case"explicit":return e.config;case"dev-v1":{const t=await ze(e.folder),r=await x.promises.readFile(t.config,{encoding:"utf-8"});return JSON.parse(r)}case"dev-v2":{const t=await T.loadPackDescription(e.folder),r=await x.promises.readFile(t.components.model.file,{encoding:"utf-8"});return JSON.parse(r)}case"from-registry-v1":{const t=this.http!==void 0?{dispatcher:this.http}:{},r=`${Ye(e.registryUrl)}${T.RegistryV1.packageContentPrefix({organization:e.id.organization,package:e.id.name,version:e.id.version})}`;return await(await G.request(`${r}/config.json`,t)).body.json()}case"from-registry-v2":{const t=this.http!==void 0?{dispatcher:this.http}:{},s=await this.v2RegistryProvider.getRegistry(e.registryUrl).getComponents(e.id);return await(await G.request(s.model.url,t)).body.json()}default:return h.assertNever(e)}}async prepare(e){switch(e.type){case"explicit":return e;case"dev-v1":{const t=await ze(e.folder),r=await x.promises.readFile(t.workflow),s=JSON.parse(await x.promises.readFile(t.config,"utf-8")),n=t.ui;return{type:"explicit",template:{type:"explicit",content:r},config:s,frontend:{type:"local",path:n,signature:this.signer.sign(n)},source:e}}case"dev-v2":{const t=await T.loadPackDescription(e.folder),r=JSON.parse(await x.promises.readFile(t.components.model.file,{encoding:"utf-8"})),s=await x.promises.readFile(t.components.workflow.main.file),n=t.components.ui.folder,i={...e};return e.mtime===void 0&&(i.mtime=await de(t)),{type:"explicit",template:{type:"explicit",content:s},config:r,frontend:{type:"local",path:n,signature:this.signer.sign(n)},source:i}}case"from-registry-v1":{const t=this.http!==void 0?{dispatcher:this.http}:{},r=`${Ye(e.registryUrl)}${T.RegistryV1.packageContentPrefix({organization:e.id.organization,package:e.id.name,version:e.id.version})}`,s=`${r}/template.plj.gz`,n=await G.request(s,t);if(n.statusCode!==200)throw new Error(`Block not found in registry (url = ${s} ; code = ${n.statusCode}): `+JSON.stringify(e));const i=new Uint8Array(await n.body.arrayBuffer()),c=await(await G.request(`${r}/config.json`,t)).body.json();return{type:"explicit",template:{type:"explicit",content:i},config:c,frontend:{type:"url",url:`${r}/frontend.tgz`},source:e}}case"from-registry-v2":{const t=this.http!==void 0?{dispatcher:this.http}:{},s=await this.v2RegistryProvider.getRegistry(e.registryUrl).getComponents(e.id),n=async()=>await(await G.request(s.model.url,t)).body.json(),i=async()=>await(await G.request(s.workflow.main.url,t)).body.arrayBuffer(),[a,c]=await Promise.all([n(),i()]);return{type:"explicit",template:{type:"explicit",content:Buffer.from(c)},config:a,frontend:{type:"url",url:s.ui.url},source:e}}default:return h.assertNever(e)}}}function Nr(o,e){const t={config:e.config,source:e.source},r=o.createStruct(Ar,JSON.stringify(t));return o.createField(u.field(r,Ct),"Input",pe(o,e.template)),o.createField(u.field(r,Ft),"Input",xr(o,e.frontend)),o.lock(r),r}function Qe(o,e){switch(e.type){case"explicit":return Nr(o,e);default:return h.assertNever(e.type)}}function oe(o,e){return{__isRef:!0,blockId:o,name:e}}function Vr(o){return typeof o=="object"&&o!==null&&o.__isRef===!0&&"blockId"in o&&"name"in o}function Ce(o,e,t){const r=typeof e;switch(r){case"function":case"bigint":case"number":case"string":case"boolean":case"symbol":case"undefined":return;case"object":if(e===null)return;if(Vr(e))t===void 0||t.has(e.blockId)?o.upstreams.add(e.blockId):o.missingReferences=!0;else if(Array.isArray(e))for(const s of e)Ce(o,s,t);else for(const[,s]of Object.entries(e))Ce(o,s,t);return;default:h.assertNever(r)}}function Lr(o,e){const t={upstreams:new Set,missingReferences:!1};return Ce(t,o,e),t}function V(o){return{*[Symbol.iterator](){for(const e of o.groups)for(const t of e.blocks)yield t}}}class Rt{constructor(e){p(this,"nodes");this.nodes=e}traverseIds(e,...t){const r=new Set;return this.traverse(e,t,s=>r.add(s.id)),r}traverseIdsExcludingRoots(e,...t){const r=this.traverseIds(e,...t);for(const s of t)r.delete(s);return r}traverse(e,t,r){let s=[...t];const n=new Set(s);for(;s.length>0;){let i=[];for(const a of s){const c=this.nodes.get(a);r(c),c[e].forEach(l=>{n.has(l)||(n.add(l),i.push(l))})}s=i}}}function Fe(o){const e=new Map;let t;for(const{id:r}of V(o)){const s={id:r,missingReferences:!1};e.set(r,s),t===void 0?s.upstream=new Set:(s.upstream=new Set([t.id]),t.downstream=new Set([s.id])),t=s}return t!==void 0&&(t.downstream=new Set),new Rt(e)}function se(o,e){const t=new Map,r=new Set;for(const{id:s}of V(o)){const n=e(s);if(n===void 0)continue;const i=Lr(n,r),a={id:s,missingReferences:i.missingReferences,upstream:i.upstreams,downstream:new Set};t.set(s,a),i.upstreams.forEach(c=>t.get(c).downstream.add(s)),r.add(s)}return new Rt(t)}function Jr(o,e){if(o.size!==e.size)return!1;for(const t of o)if(!e.has(t))return!1;return!0}function Re(o,e){if(o.size>e.size)return Re(e,o);for(const t of o)if(e.has(t))return!0;return!1}function Ze(o,e){const t=new Set,r=new Set,s=new Set;return o.nodes.forEach(n=>{const i=e.nodes.get(n.id);i===void 0?t.add(n.id):(!Jr(n.upstream,i.upstream)||Re(n.upstream,s))&&s.add(n.id)}),e.nodes.forEach(n=>{o.nodes.has(n.id)?Re(n.upstream,s)&&s.add(n.id):r.add(n.id)}),{onlyInA:t,onlyInB:r,different:s}}let ve;async function Bt(){if(ve===void 0){const o=await Pt(Ht.Templates["pframes.export-pframe"]);if(o.type!=="explicit")throw new Error("Unexpected prepared template type.");const e=K.createHash("sha256").update(o.content).digest("hex");ve={spec:o,hash:e}}return ve}function Mr(o,e,t){return Ae(o,e,!0,{pf:t},["result"]).result}function ye(o,e){let t=!1,r,s;return()=>{if(!t)return t=!0,r=o(),s=e(),s;const n=o();return r!==n&&(r=n,s=e()),e()}}class Xe{constructor(e,t){p(this,"currentInputsC",ye(()=>this.fields.currentArgs.modCount,()=>JSON.parse(Buffer.from(this.fields.currentArgs.value).toString())));p(this,"actualProductionInputsC",ye(()=>{var e;return(e=this.fields.prodArgs)==null?void 0:e.modCount},()=>{var t;const e=(t=this.fields.prodArgs)==null?void 0:t.value;if(e!==void 0)return JSON.parse(Buffer.from(e).toString())}));p(this,"productionStaleC",ye(()=>{var e;return`${this.fields.currentArgs.modCount}_${(e=this.fields.prodArgs)==null?void 0:e.modCount}`},()=>this.fields.prodArgs===void 0||Buffer.compare(this.fields.currentArgs.value,this.fields.prodArgs.value)!==0));this.id=e,this.fields=t}check(){if(this.fields.prodOutput===void 0!=(this.fields.prodCtx===void 0))throw new Error("inconsistent prod fields");if(this.fields.stagingOutput===void 0!=(this.fields.stagingCtx===void 0))throw new Error("inconsistent stage fields");if(this.fields.prodOutputPrevious===void 0!=(this.fields.prodCtxPrevious===void 0))throw new Error("inconsistent prod cache fields");if(this.fields.stagingOutputPrevious===void 0!=(this.fields.stagingCtxPrevious===void 0))throw new Error("inconsistent stage cache fields");if(this.fields.blockPack===void 0)throw new Error("no block pack field");if(this.fields.currentArgs===void 0)throw new Error("no current args field")}get currentInputs(){return this.currentInputsC()}get stagingRendered(){return this.fields.stagingCtx!==void 0}get productionRendered(){return this.fields.prodCtx!==void 0}get productionStale(){return this.productionRendered&&this.productionStaleC()}get requireProductionRendering(){return!this.productionRendered||this.productionStaleC()}get actualProductionInputs(){return this.actualProductionInputsC()}getTemplate(e){return e.getFutureFieldValue(u.Pl.unwrapHolder(e,this.fields.blockPack.ref),Ct,"Input")}}const Kr=o=>{throw new Error(`No new block info for ${o}`)};class ce{constructor(e,t,r,s,n,i,a,c,l,d,g,f){p(this,"globalModCount",0);p(this,"fieldsChanged",!1);p(this,"lastModifiedChanged",!1);p(this,"structureChanged",!1);p(this,"metaChanged",!1);p(this,"renderingStateChanged",!1);p(this,"changedBlockFrontendStates",new Set);p(this,"blocksWithChangedInputs",new Set);p(this,"stagingGraph");p(this,"pendingProductionGraph");p(this,"actualProductionGraph");this.rid=e,this.tx=t,this.author=r,this.schema=s,this.lastModified=n,this.meta=i,this.struct=a,this.renderingState=c,this.blocksInLimbo=l,this.blockInfos=d,this.blockFrontendStates=g,this.ctxExportTplHolder=f}fixProblems(){this.blockInfos.forEach(e=>{(e.fields.prodArgs===void 0||e.fields.prodOutput===void 0||e.fields.prodCtx===void 0)&&this.deleteBlockFields(e.id,"prodArgs","prodOutput","prodCtx")})}get wasModified(){return this.lastModifiedChanged||this.structureChanged||this.fieldsChanged||this.metaChanged||this.renderingStateChanged||this.changedBlockFrontendStates.size>0}get structure(){return JSON.parse(JSON.stringify(this.struct))}getStagingGraph(){return this.stagingGraph===void 0&&(this.stagingGraph=Fe(this.struct)),this.stagingGraph}getPendingProductionGraph(){return this.pendingProductionGraph===void 0&&(this.pendingProductionGraph=se(this.struct,e=>this.getBlockInfo(e).currentInputs)),this.pendingProductionGraph}getActualProductionGraph(){return this.actualProductionGraph===void 0&&(this.actualProductionGraph=se(this.struct,e=>this.getBlockInfo(e).actualProductionInputs)),this.actualProductionGraph}getBlockInfo(e){return h.notEmpty(this.blockInfos.get(e))}getBlock(e){for(const t of V(this.struct))if(t.id===e)return t;throw new Error("block not found")}setBlockFieldObj(e,t,r){const s=u.field(this.rid,P(e,t));if(r.ref===void 0)throw new Error("Can't set value with empty ref");this.getBlockInfo(e).fields[t]===void 0?this.tx.createField(s,"Dynamic",r.ref):this.tx.setField(s,r.ref),this.getBlockInfo(e).fields[t]={modCount:this.globalModCount++,...r},this.fieldsChanged=!0}setBlockField(e,t,r,s,n){this.setBlockFieldObj(e,t,{ref:r,status:s,value:n})}deleteBlockFields(e,...t){let r=!1;const s=this.getBlockInfo(e);for(const n of t){const i=s.fields;n in i&&(this.tx.removeField(u.field(this.rid,P(e,n))),delete i[n],this.fieldsChanged=!0,r=!0)}return r}updateLastModified(){this.lastModified=Date.now(),this.lastModifiedChanged=!0}resetStagingRefreshTimestamp(){this.renderingState.stagingRefreshTimestamp=Date.now(),this.renderingStateChanged=!0}resetStaging(e){var r,s,n;const t=this.getBlockInfo(e).fields;((r=t.stagingOutput)==null?void 0:r.status)==="Ready"&&((s=t.stagingCtx)==null?void 0:s.status)==="Ready"&&((n=t.stagingUiCtx)==null?void 0:n.status)==="Ready"&&(this.setBlockFieldObj(e,"stagingOutputPrevious",t.stagingOutput),this.setBlockFieldObj(e,"stagingCtxPrevious",t.stagingCtx),this.setBlockFieldObj(e,"stagingUiCtxPrevious",t.stagingUiCtx)),this.deleteBlockFields(e,"stagingOutput","stagingCtx","stagingUiCtx")&&this.resetStagingRefreshTimestamp()}resetProduction(e){var r,s,n;const t=this.getBlockInfo(e).fields;((r=t.prodOutput)==null?void 0:r.status)==="Ready"&&((s=t.prodCtx)==null?void 0:s.status)==="Ready"&&((n=t.prodUiCtx)==null?void 0:n.status)==="Ready"&&(this.setBlockFieldObj(e,"prodOutputPrevious",t.prodOutput),this.setBlockFieldObj(e,"prodCtxPrevious",t.prodCtx),this.setBlockFieldObj(e,"prodUiCtxPrevious",t.prodUiCtx)),this.deleteBlockFields(e,"prodOutput","prodCtx","prodUiCtx","prodArgs")}resetOrLimboProduction(e){var r,s;const t=this.getBlockInfo(e).fields;return((r=t.prodOutput)==null?void 0:r.status)==="Ready"&&((s=t.prodCtx)==null?void 0:s.status)==="Ready"?this.blocksInLimbo.has(e)?!1:(this.blocksInLimbo.add(e),this.renderingStateChanged=!0,this.deleteBlockFields(e,"prodOutputPrevious","prodCtxPrevious","prodUiCtxPrevious"),!0):this.deleteBlockFields(e,"prodOutput","prodCtx","prodUiCtx","prodArgs")}setArgs(e){const t=[];for(const{blockId:r,args:s}of e){const n=this.getBlockInfo(r);JSON.parse(s);const i=Buffer.from(s);if(Buffer.compare(n.fields.currentArgs.value,i)===0)continue;const a=this.tx.createValue(u.Pl.JsonObject,i);this.setBlockField(r,"currentArgs",a,"Ready",i),this.blocksWithChangedInputs.add(r),t.push(r)}this.getStagingGraph().traverse("downstream",t,({id:r})=>this.resetStaging(r)),t.length>0&&this.updateLastModified()}setUiState(e,t){if(this.blockInfos.get(e)===void 0)throw new Error("no such block");this.blockFrontendStates.get(e)!==t&&(t===void 0?this.blockFrontendStates.delete(e):this.blockFrontendStates.set(e,t),this.changedBlockFrontendStates.add(e),this.blocksWithChangedInputs.add(e),this.updateLastModified())}setBlockLabel(e,t){const r=this.structure;let s=!1;for(const n of V(r))if(n.id===e){n.label=t,s=!0;break}if(!s)throw new Error(`block ${e} not found`);this.updateStructure(r),this.updateLastModified()}createCtx(e,t){const r=[];return e.forEach(s=>{const n=this.getBlockInfo(s);if(n.fields[t]===void 0||n.fields[t].ref===void 0)throw new Error("One of the upstreams staging is not rendered.");r.push(u.Pl.unwrapHolder(this.tx,n.fields[t].ref))}),Dr(this.tx,r)}exportCtx(e){return Mr(this.tx,u.Pl.unwrapHolder(this.tx,this.ctxExportTplHolder),e)}renderStagingFor(e){this.resetStaging(e);const t=this.getBlockInfo(e),r=this.createCtx(this.getStagingGraph().nodes.get(e).upstream,"stagingCtx");if(this.getBlock(e).renderingMode!=="Heavy")throw new Error("not supported yet");const s=t.getTemplate(this.tx),n=We(this.tx,s,{args:t.fields.currentArgs.ref,blockId:this.tx.createValue(u.Pl.JsonString,JSON.stringify(e)),isProduction:this.tx.createValue(u.Pl.JsonBool,JSON.stringify(!1)),context:r});this.setBlockField(e,"stagingCtx",u.Pl.wrapInEphHolder(this.tx,n.context),"NotReady"),this.setBlockField(e,"stagingUiCtx",this.exportCtx(n.context),"NotReady"),this.setBlockField(e,"stagingOutput",n.result,"NotReady")}renderProductionFor(e){this.resetProduction(e);const t=this.getBlockInfo(e),r=this.createCtx(this.getPendingProductionGraph().nodes.get(e).upstream,"prodCtx");if(this.getBlock(e).renderingMode==="Light")throw new Error("Can't render production for light block.");const s=t.getTemplate(this.tx),n=We(this.tx,s,{args:t.fields.currentArgs.ref,blockId:this.tx.createValue(u.Pl.JsonString,JSON.stringify(e)),isProduction:this.tx.createValue(u.Pl.JsonBool,JSON.stringify(!0)),context:r});this.setBlockField(e,"prodCtx",u.Pl.wrapInEphHolder(this.tx,n.context),"NotReady"),this.setBlockField(e,"prodUiCtx",this.exportCtx(n.context),"NotReady"),this.setBlockField(e,"prodOutput",n.result,"NotReady"),this.setBlockFieldObj(e,"prodArgs",t.fields.currentArgs),this.blocksInLimbo.delete(e)&&(this.renderingStateChanged=!0)}updateStructure(e,t=Kr){const r=this.getStagingGraph(),s=this.getActualProductionGraph(),n=Fe(e),i=se(e,l=>{var d;return(d=this.blockInfos.get(l))==null?void 0:d.actualProductionInputs}),a=Ze(r,n),c=Ze(s,i);for(const l of a.onlyInA){const{fields:d}=this.getBlockInfo(l);this.deleteBlockFields(l,...Object.keys(d)),this.blockInfos.delete(l),this.blocksInLimbo.delete(l)&&(this.renderingStateChanged=!0),this.blockFrontendStates.delete(l)&&this.changedBlockFrontendStates.add(l)}for(const l of a.onlyInB){const d=new Xe(l,{});this.blockInfos.set(l,d);const g=t(l),f=Qe(this.tx,g.blockPack);this.setBlockField(l,"blockPack",u.Pl.wrapInHolder(this.tx,f),"NotReady");const v=Buffer.from(g.args),b=this.tx.createValue(u.Pl.JsonObject,v);this.setBlockField(l,"currentArgs",b,"Ready",v),d.check()}for(const l of a.different)this.resetStaging(l);s.traverse("downstream",[...c.different],l=>{this.resetOrLimboProduction(l.id)}),(a.onlyInB.size>0||a.onlyInA.size>0||a.different.size>0)&&this.resetStagingRefreshTimestamp(),this.struct=e,this.structureChanged=!0,this.stagingGraph=void 0,this.pendingProductionGraph=void 0,this.actualProductionGraph=void 0,this.updateLastModified()}addBlock(e,t,r){const s=this.structure;if(r===void 0)s.groups[s.groups.length-1].blocks.push(e);else{let n=!1;for(const i of s.groups){const a=i.blocks.findIndex(c=>c.id===r);if(!(a<0)){i.blocks.splice(a,0,e),n=!0;break}}if(!n)throw new Error(`Can't find element with id: ${r}`)}this.updateStructure(s,n=>{if(n!==e.id)throw new Error("Unexpected");return t})}deleteBlock(e){const t=this.structure;let r=!1;for(const s of t.groups){const n=s.blocks.findIndex(i=>i.id===e);if(!(n<0)){s.blocks.splice(n,1),r=!0;break}}if(!r)throw new Error(`Can't find element with id: ${e}`);this.updateStructure(t)}migrateBlockPack(e,t,r){const s=this.getBlockInfo(e);this.setBlockField(e,"blockPack",u.Pl.wrapInHolder(this.tx,Qe(this.tx,t)),"NotReady"),r!==void 0?(this.setArgs([{blockId:e,args:r}]),this.setUiState(e,void 0)):this.getStagingGraph().traverse("downstream",[e],({id:n})=>this.resetStaging(n)),s.productionRendered&&this.getActualProductionGraph().traverse("downstream",[e],({id:n})=>this.resetOrLimboProduction(n)),this.updateLastModified()}renderProduction(e,t=!1){const r=new Set(e),s=this.getPendingProductionGraph();if(t)s.traverse("upstream",e,i=>{r.add(i.id)});else for(const i of r){const a=s.nodes.get(i);if(a===void 0)throw new Error(`Can't find block with id: ${i}`);for(const c of a.upstream)if(!r.has(c))throw new Error("Can't render blocks not including all upstreams.")}const n=new Set;for(const i of V(this.structure)){if(!r.has(i.id))continue;let a=this.getBlockInfo(i.id).requireProductionRendering||this.blocksInLimbo.has(i.id);if(!a){for(const c of s.nodes.get(i.id).upstream)if(n.has(c)){a=!0;break}}a&&(this.renderProductionFor(i.id),n.add(i.id))}return s.traverse("downstream",[...n],i=>{n.has(i.id)||this.resetOrLimboProduction(i.id)}),n.size>0&&this.updateLastModified(),n}stopProduction(...e){var i,a;const t=this.getActualProductionGraph(),r=new it(e),s=new Set(e),n=[];for(;!r.isEmpty();){const c=r.shift(),l=this.getBlockInfo(c).fields;if(!(((i=l.prodOutput)==null?void 0:i.status)==="Ready"&&((a=l.prodCtx)==null?void 0:a.status)==="Ready")&&this.deleteBlockFields(c,"prodOutput","prodCtx","prodUiCtx","prodArgs")){n.push(c);for(const d of t.traverseIdsExcludingRoots("downstream",c))s.has(d)||(r.push(d),s.add(d))}}for(const c of t.traverseIdsExcludingRoots("downstream",...n))this.resetOrLimboProduction(c)}traverseWithStagingLag(e){const t=new Map;this.getStagingGraph().nodes.forEach(s=>{let i=this.getBlockInfo(s.id).stagingRendered?0:1;s.upstream.forEach(a=>{const c=t.get(a);c!==0&&(i=Math.max(c+1,i))}),e(s.id,i),t.set(s.id,i)})}refreshStagings(e){const t=Date.now()-this.renderingState.stagingRefreshTimestamp,r=e===void 0?void 0:1+Math.max(0,t*e/1e3);let s=0;this.traverseWithStagingLag((n,i)=>{i!==0&&(r===void 0||i<=r)&&(this.renderStagingFor(n),s++)}),s>0&&this.resetStagingRefreshTimestamp()}setMeta(e){this.meta=e,this.metaChanged=!0,this.updateLastModified()}doRefresh(e){this.refreshStagings(e),this.blockInfos.forEach(t=>{var r,s,n,i;((r=t.fields.prodCtx)==null?void 0:r.status)==="Ready"&&((s=t.fields.prodOutput)==null?void 0:s.status)==="Ready"&&this.deleteBlockFields(t.id,"prodOutputPrevious","prodCtxPrevious","prodUiCtxPrevious"),((n=t.fields.stagingCtx)==null?void 0:n.status)==="Ready"&&((i=t.fields.stagingOutput)==null?void 0:i.status)==="Ready"&&this.deleteBlockFields(t.id,"stagingOutputPrevious","stagingCtxPrevious","stagingUiCtxPrevious")})}assignAuthorMarkers(){const e=this.author?JSON.stringify(this.author):void 0;for(const t of this.blocksWithChangedInputs)e===void 0?this.tx.deleteKValue(this.rid,Se(t)):this.tx.setKValue(this.rid,Se(t),e);(this.metaChanged||this.structureChanged)&&(e===void 0?this.tx.deleteKValue(this.rid,ke):this.tx.setKValue(this.rid,ke,e))}save(){if(this.wasModified){this.lastModifiedChanged&&this.tx.setKValue(this.rid,Z,JSON.stringify(this.lastModified)),this.structureChanged&&this.tx.setKValue(this.rid,_,JSON.stringify(this.struct)),this.renderingStateChanged&&this.tx.setKValue(this.rid,ae,JSON.stringify({...this.renderingState,blocksInLimbo:[...this.blocksInLimbo]})),this.metaChanged&&this.tx.setKValue(this.rid,X,JSON.stringify(this.meta));for(const e of this.changedBlockFrontendStates){const t=this.blockFrontendStates.get(e);t===void 0?this.tx.deleteKValue(this.rid,we(e)):this.tx.setKValue(this.rid,we(e),t)}this.assignAuthorMarkers()}}static async load(e,t,r){const s=e.getResourceData(t,!0),n=e.getKValueJson(t,pt),i=e.getKValueJson(t,Z),a=e.getKValueJson(t,X),c=e.getKValueJson(t,_),l=e.getKValueJson(t,ae),d=e.listKeyValuesString(t),[g,f,v,b,O,{stagingRefreshTimestamp:L,blocksInLimbo:U},ee]=await Promise.all([s,n,i,a,c,l,d]);if(f!==gt)throw new Error(`Can't act on this project resource because it has a wrong schema version: ${f}`);const H=new Map;for(const w of g.fields){const B=yr(w.name);if(B===void 0)continue;let C=H.get(B.blockId);C===void 0&&(C={id:B.blockId,fields:{}},H.set(B.blockId,C)),C.fields[B.fieldName]=u.isNullResourceId(w.value)?{modCount:0}:{modCount:0,ref:w.value}}const q=await Bt(),te=Pe(q.hash),k=g.fields.find(w=>w.name===te);let M;k!==void 0?M=u.ensureResourceIdNotNull(k.value):(M=u.Pl.wrapInHolder(e,pe(e,q.spec)),e.createField(u.field(t,Pe(q.hash)),"Dynamic",M));const z={stagingRefreshTimestamp:L},j=new Set(U),D=new Map;for(const w of ee){const B=fr(w.key);B!==void 0&&D.set(B,w.value)}const R=[];H.forEach(({id:w,fields:B})=>{for(const[,C]of Object.entries(B))if(C.ref!==void 0){if(!u.isResource(C.ref)||u.isResourceRef(C.ref))throw new Error("unexpected behaviour");R.push([C,e.getResourceData(C.ref,!1)])}});for(const[w,B]of R){const C=await B;w.value=C.data,u.isNotNullResourceId(C.error)?w.status="Error":C.resourceReady||u.isNotNullResourceId(C.originalResourceId)?w.status="Ready":w.status="NotReady"}const $=new Map;H.forEach(({id:w,fields:B})=>$.set(w,new Xe(w,B)));const J=new Set;for(const w of V(O)){if(!$.has(w.id))throw new Error(`Inconsistent project structure: no inputs for ${w.id}`);J.add(w.id)}$.forEach(w=>{if(!J.has(w.id))throw new Error(`Inconsistent project structure: no structure entry for ${w.id}`);w.check()});const re=new ce(t,e,r,f,v,b,O,z,j,$,D,M);return re.fixProblems(),re}}async function Ur(o,e=ur){const t=o.createEphemeral(dr);o.lock(t);const r=String(Date.now());o.setKValue(t,pt,JSON.stringify(gt)),o.setKValue(t,xe,r),o.setKValue(t,Z,r),o.setKValue(t,X,JSON.stringify(e)),o.setKValue(t,_,JSON.stringify(cr)),o.setKValue(t,ae,JSON.stringify(lr));const s=await Bt();return o.createField(u.field(t,Pe(s.hash)),"Dynamic",u.Pl.wrapInHolder(o,pe(o,s.spec))),t}async function be(o,e,t){return I(o,e,void 0,t)}async function I(o,e,t,r){if(o instanceof u.PlClient)return await o.withWriteTx("ProjectAction",async s=>{const n=await ce.load(s,e,t),i=await r(n);return n.wasModified&&(n.save(),await s.commit()),i});{const s=await ce.load(o,e,t),n=await r(s);return s.save(),n}}function*$r(o){switch(o.type){case"Json":return;case"JsonPartitioned":for(const[,e]of Object.entries(o.parts))yield e;return;case"BinaryPartitioned":for(const[,{index:e,values:t}]of Object.entries(o.parts))yield e,yield t;return;default:h.assertNever(o)}}function et(o,e){return Object.fromEntries(Object.entries(o).map(([t,r])=>[t,e(r,t)]))}function Gr(o,e){switch(o.type){case"Json":return{...o};case"JsonPartitioned":return{...o,parts:et(o.parts,e)};case"BinaryPartitioned":return{...o,parts:et(o.parts,t=>({index:e(t.index),values:e(t.values)}))};default:h.assertNever(o)}}const Hr=u.resourceType("PColumnData/JsonPartitioned","1"),_r=u.resourceType("PColumnData/Partitioned/JsonPartitioned","1"),qr=u.resourceType("PColumnData/BinaryPartitioned","1"),zr=u.resourceType("PColumnData/Partitioned/BinaryPartitioned","1"),Wr=u.resourceType("PColumnData/Json","1");function Yr(o){if(!o.getIsReadyOrError())throw new Error("Data not ready.");const e=o.getDataAsJson();if(e===void 0)throw new Error("unexpected data info structure, no resource data");if(u.resourceTypesEqual(o.resourceType,Wr)){const t=e;return{type:"Json",keyLength:t.keyLength,data:t.data}}else if(u.resourceTypesEqual(o.resourceType,Hr)){const t=e,r=Object.fromEntries(o.listInputFields().map(s=>[s,o.traverse({field:s,errorIfFieldNotSet:!0}).resourceInfo]));return{type:"JsonPartitioned",partitionKeyLength:t.partitionKeyLength,parts:r}}else if(u.resourceTypesEqual(o.resourceType,_r)){const t=e,r={};for(const s of o.listInputFields()){const n=o.traverse({field:s,errorIfFieldNotSet:!0}),i=n.listInputFields();if(i===void 0)throw new Error(`no partition keys for super key ${s}`);for(const a of i){const c=JSON.stringify([...JSON.parse(s),...JSON.parse(a)]);r[c]=n.traverse({field:a,errorIfFieldNotSet:!0}).resourceInfo}}return{type:"JsonPartitioned",partitionKeyLength:t.superPartitionKeyLength+t.partitionKeyLength,parts:r}}else if(u.resourceTypesEqual(o.resourceType,qr)){const t=e,r={};for(const s of o.listInputFields())if(s.endsWith(".index")){const n=s.slice(0,s.length-6);let i=r[n];i===void 0&&(i={},r[n]=i),i.index=o.traverse({field:s,errorIfFieldNotSet:!0}).resourceInfo}else if(s.endsWith(".values")){const n=s.slice(0,s.length-7);let i=r[n];i===void 0&&(i={},r[n]=i),i.values=o.traverse({field:s,errorIfFieldNotSet:!0}).resourceInfo}else throw new Error(`unrecognized part field name: ${s}`);for(const[s,n]of Object.entries(r)){if(n.index===void 0)throw new Error(`no index for part ${s}`);if(n.values===void 0)throw new Error(`no values for part ${s}`)}return{type:"BinaryPartitioned",partitionKeyLength:t.partitionKeyLength,parts:r}}else if(u.resourceTypesEqual(o.resourceType,zr)){const t=e,r={};for(const s of o.listInputFields()){const n=o.traverse({field:s,errorIfFieldNotSet:!0}),i=n.listInputFields();if(i===void 0)throw new Error(`no partition keys for super key ${s}`);for(const a of i)if(a.endsWith(".index")){const c=a.slice(0,a.length-6),l=JSON.stringify([...JSON.parse(s),...JSON.parse(c)]);let d=r[l];d===void 0&&(d={},r[l]=d),r[l].index=n.traverse({field:a,errorIfFieldNotSet:!0}).resourceInfo}else if(a.endsWith(".values")){const c=a.slice(0,a.length-7),l=JSON.stringify([...JSON.parse(s),...JSON.parse(c)]);let d=r[l];d===void 0&&(d={},r[l]=d),r[l].values=n.traverse({field:a,errorIfFieldNotSet:!0}).resourceInfo}else throw new Error(`unrecognized part field name: ${a}`)}return{type:"BinaryPartitioned",partitionKeyLength:t.superPartitionKeyLength+t.partitionKeyLength,parts:r}}throw new Error(`unsupported resource type: ${u.resourceTypeToString(o.resourceType)}`)}function Ot(o,e){const t=K.createHash("sha256");return t.update(Te(o)),t.update(String(u.isNullResourceId(e.originalId)?e.id:e.originalId)),t.digest().toString("hex")}function Tt(o,e=!0,t=!1,r=""){var a,c,l;const s=/^(?<name>.*)\.(?<type>spec|data)$/,n=new Map;for(const d of o.listInputFields()){const g=d.match(s);if(!g){if(e)throw new Error(`unexpected field name ${d}`);continue}let f=h.notEmpty((a=g.groups)==null?void 0:a.name);if(!f.startsWith(r)){if(e)throw new Error(`unexpected field name ${d}`);continue}f=f.slice(r.length);const v=h.notEmpty((c=g.groups)==null?void 0:c.type);let b=n.get(f);switch(b===void 0&&(b={},n.set(f,b)),v){case"spec":b.spec=(l=o.traverse({field:d,ignoreError:t,pureFieldErrorToUndefined:t}))==null?void 0:l.getDataAsJson();break;case"data":b.hasData=!0,b.data=()=>o.traverseOrError({field:d,ignoreError:t});default:continue}}const i=o.getInputsLocked();if(i)for(const[,d]of n)d.data===void 0&&(d.hasData=!1);return{locked:i,results:n}}function Qr(o,e=!0,t=""){if(!o.getIsReadyOrError())throw new Error("resource is not ready");const r=Tt(o,e,!1,t);_t(r.locked);const s={};for(const[n,i]of r.results){if(i.spec===void 0)throw new Error(`no spec for key ${n}`);if(i.hasData!==!0||i.data===void 0)throw new Error(`no data for key ${n}`);const a=i.data();if(a===void 0)throw new Error(`no data for key ${n}`);if(!a.ok)throw new Oe.PlError(a.error);s[n]={id:Ot(i.spec,a.value),spec:i.spec,data:a.value}}return s}class Ve{constructor(e,t){p(this,"allSpecsAvailable");this.ctx=e,this.blocks=t;let r=!0;e:for(const s of t.values())for(const n of[s.prod,s.staging])if(n!==void 0){if(!n.locked){r=!1;break e}for(const i of n.results.values())if(i.spec===void 0){r=!1;break e}}this.allSpecsAvailable=r}getBlockLabel(e){var t,r;return h.notEmpty((r=(t=this.blocks.get(e))==null?void 0:t.info)==null?void 0:r.label,`block "${e}" not found`)}getData(){const e=this.getDataWithErrors(),t=[];for(const r of e.entries)r.obj.id!==void 0&&r.obj.data.ok&&t.push({ref:r.ref,obj:{id:r.obj.id,spec:r.obj.spec,data:r.obj.data.value}});return{entries:t,isComplete:e.isComplete,instabilityMarker:e.instabilityMarker}}getDataWithErrors(){const e=[];let t=!0,r;const s=i=>{r===void 0&&(r=i),t=!1},n=(i,a,c)=>{if(c.spec!==void 0&&c.hasData===!0&&c.data!==void 0){const l=c.data();l!==void 0?e.push({ref:oe(i,a),obj:{id:l.ok?Ot(c.spec,l.value):void 0,spec:c.spec,data:l}}):s(`no_data:${i}:${a}`)}};for(const[i,a]of this.blocks){const c=new Set;if(a.prod!==void 0){a.prod.locked||s(`prod_not_locked:${i}`);for(const[l,d]of a.prod.results)c.add(l),n(i,l,d)}if(a.staging!==void 0){a.staging.locked||s(`staging_not_locked:${i}`);for(const[l,d]of a.staging.results)c.has(l)||n(i,l,d)}}return{entries:e,isComplete:t,instabilityMarker:r}}getSpecs(){const e=[];let t=!0,r;const s=n=>{r===void 0&&(r=n),t=!1};for(const[n,i]of this.blocks){const a=new Set;if(i.staging!==void 0){i.staging.locked||s(`staging_not_locked:${n}`);for(const[c,l]of i.staging.results)l.spec!==void 0&&(e.push({ref:oe(n,c),obj:l.spec}),a.add(c))}else s(`staging_not_rendered:${n}`);if(i.prod!==void 0){i.prod.locked||s(`prod_not_locked:${n}`);for(const[c,l]of i.prod.results)a.has(c)||l.spec!==void 0&&e.push({ref:oe(n,c),obj:l.spec})}}return{entries:e,isComplete:t,instabilityMarker:r}}calculateOptions(e){const t=[];for(const r of this.blocks.values()){const s=new Set,n=i=>{for(const[a,c]of i.results)s.has(a)||c.spec===void 0||(s.add(a),F.executePSpecPredicate(e,c.spec)&&t.push({label:r.info.label+" / "+a,ref:oe(r.info.id,a),spec:c.spec}))};r.staging!==void 0&&n(r.staging),r.prod!==void 0&&n(r.prod)}return t}static create(e,t,r){const s=e.accessor(t).node(),n=h.notEmpty(s.getKeyValueAsJson(_)),a=Fe(n).traverseIds("upstream",r),c=new Map;for(const l of V(n)){if(!a.has(l.id))continue;const d=tt(s.traverse({field:P(l.id,"prodCtx"),ignoreError:!0,pureFieldErrorToUndefined:!0,stableIfNotFound:!0})!==void 0,s.traverseOrError({field:P(l.id,"prodUiCtx"),stableIfNotFound:!0})),g=tt(s.traverse({field:P(l.id,"stagingCtx"),ignoreError:!0,pureFieldErrorToUndefined:!0})!==void 0,s.traverseOrError({field:P(l.id,"stagingUiCtx")}));c.set(l.id,{info:l,prod:d,staging:g})}return new Ve(e,c)}}function tt(o,e){if(e===void 0)return o?{locked:!1,results:new Map}:void 0;if(e.ok)return Tt(e.value,!1,!0)}function Le(o,e){const t=o.persist(),r=h.notEmpty(o.traverse({field:P(e,"currentArgs"),errorIfFieldNotSet:!0}).getDataAsString()),s=o.getKeyValueAsString(we(e));return{blockId:e,args:r,uiState:s,blockMeta:n=>{const i=n.accessor(t).node(),a=h.notEmpty(i.getKeyValueAsJson(_)),c=new Map;for(const l of V(a))c.set(l.id,l);return c}}}function Dt(o,e){const t=o.persist();return{...Le(o,e),prod:r=>{var s;return(s=r.accessor(t).node({ignoreError:!0}).traverse({field:P(e,"prodOutput"),stableIfNotFound:!0,ignoreError:!0}))==null?void 0:s.persist()},staging:r=>{var n;const s=(n=r.accessor(t).node({ignoreError:!0}).traverse({field:P(e,"stagingOutput"),ignoreError:!0}))==null?void 0:n.persist();return s===void 0&&r.markUnstable("staging_not_rendered"),s},getResultsPool:r=>Ve.create(r,t,e)}}function*E(o,e){switch(yield o,o.type){case"GetFromCtx":case"Immediate":return;case"Isolate":yield*E(o.cfg);return;case"MakeObject":for(const[,t]of Object.entries(o.template))yield*E(t);return;case"MakeArray":for(const t of o.template)yield*E(t);return;case"GetJsonField":case"GetResourceField":yield*E(o.source),yield*E(o.field);return;case"MapRecordValues":case"MapArrayValues":case"MapResourceFields":yield*E(o.source),yield*E(o.mapping);return;case"Flatten":case"GetResourceValueAsJson":case"GetBlobContent":case"GetBlobContentAsString":case"GetBlobContentAsJson":case"GetDownloadedBlobContent":case"GetOnDemandBlobContent":case"GetImportProgress":case"GetLastLogs":case"GetProgressLog":case"GetLogHandle":yield*E(o.source);return;case"IsEmpty":yield*E(o.arg);return;case"Not":yield*E(o.operand);return;case"And":case"Or":yield*E(o.operand1),yield*E(o.operand2);return;default:h.assertNever(o)}}function Zr(o,e){const t={};for(const[r,s]of Object.entries(o))t[r]=e(s);return t}function le(o,e){return o===void 0?void 0:e(o)}function Xr(o){switch(o.type){case"GetImportProgress":return!0;default:return!1}}function eo(o){for(const e of E(o))if(Xr(e))return!0;return!1}function ge(o){return{type:"ReturnResult",result:o}}function m(o){return()=>ge(o)}const to=o=>{const e={};for(const[t,r]of Object.entries(o))e[t]=r;return m(e)},ro=o=>{const e=o.source;if(e===void 0)return m(void 0);const t=[];for(const r of e)r instanceof Array?t.push(...r):t.push(r);return m(t)},oo=o=>{const e=o.source,t=o.field;return e===void 0||t===void 0?m(void 0):({cCtx:r})=>{var s;return ge((s=r.accessor(e).node().traverse(t))==null?void 0:s.persist())}};function Et(o,e){const t={},r=o.length;for(let s=0;s<r;s++)t[String(s)]=e(o[s]);return t}function so(o,e){return t=>{const r=t.source;return r===void 0?m(void 0):()=>({type:"ScheduleSubroutine",subroutine:jt(r.length),args:Et(r,s=>y({...o,[e.itVar]:s},e.mapping))})}}function jt(o){return e=>{const t=[];for(let r=0;r<o;r++)t.push(e[String(r)]);return m(t)}}function no(o,e){return t=>{const r=t.source;if(r===void 0)return m(void 0);const s={};for(const[n,i]of Object.entries(r)){const a={...o,[e.itVar]:i};s[n]=y(a,e.mapping)}return()=>({type:"ScheduleSubroutine",subroutine:io,args:s})}}const io=o=>m(o),ao=o=>{const e=o.arg;return m(e===void 0?void 0:e.length===0)},co=o=>{const e=o.operand;return m(e===void 0?void 0:!e)},lo=o=>{const e=o.operand1,t=o.operand2;return m(e===void 0||t===void 0?void 0:e&&t)},uo=o=>{const e=o.operand1,t=o.operand2;return m(e===void 0||t===void 0?void 0:e||t)},po=o=>{const e=o.source;return e===void 0?m(void 0):({cCtx:t})=>{var r;return ge((r=t.accessor(e).node())==null?void 0:r.getDataAsJson())}},go=o=>{const e=o.source,t=o.field;return m(e===void 0||t===void 0?void 0:e[t])};function ho(o,e){return t=>{const r=t.source;return r===void 0?m(void 0):({cCtx:s})=>{const n=s.accessor(r).node(),i={};for(const a of n.listInputFields()){const c=n.traverse(a);if(c===void 0)i[a]=m(void 0);else{const l={...o,[e.itVar]:c.persist()};i[a]=y(l,e.mapping)}}return{type:"ScheduleSubroutine",subroutine:fo,args:i}}}}const fo=o=>m(o),mo=o=>{const e=o.source;return e===void 0?m(void 0):({drivers:t})=>({type:"ScheduleComputable",computable:S.Computable.make(r=>t.blobDriver.getDownloadedBlob(r.accessor(e).node().resourceInfo),{postprocessValue:async r=>{if(r!==void 0)return await t.blobDriver.getContent(r.handle)}})})},vo=o=>{const e=o.source;return e===void 0?m(void 0):({cCtx:t,drivers:r})=>{const s=t.accessor(e).node().resourceInfo;return{type:"ScheduleComputable",computable:S.Computable.make(()=>r.blobDriver.getDownloadedBlob(s),{postprocessValue:async n=>n===void 0?void 0:(await r.blobDriver.getContent(n.handle)).toString()})}}},yo=o=>{const e=o.source;return e===void 0?m(void 0):({drivers:t})=>({type:"ScheduleComputable",computable:S.Computable.make(r=>t.blobDriver.getDownloadedBlob(r.accessor(e).node().resourceInfo),{postprocessValue:async r=>{if(r==null)return;const s=await t.blobDriver.getContent(r.handle);if(s!=null)return JSON.parse(Buffer.from(s).toString())}})})},bo=o=>{const e=o.source;return e===void 0?m(void 0):({drivers:t})=>({type:"ScheduleComputable",computable:t.blobDriver.getDownloadedBlob(e)})},wo=o=>{const e=o.source;return e===void 0?m(void 0):({drivers:t})=>({type:"ScheduleComputable",computable:t.blobDriver.getOnDemandBlob(e)})},So=o=>{const e=o.source;return e===void 0?m(void 0):({drivers:t})=>({type:"ScheduleComputable",computable:t.uploadDriver.getProgressId(e)})},ko=o=>e=>{const t=e.source;return t===void 0?m(void 0):({drivers:r})=>({type:"ScheduleComputable",computable:r.logDriver.getLastLogs(t,o)})},Po=o=>e=>{const t=e.source;return t===void 0?m(void 0):({drivers:r})=>({type:"ScheduleComputable",computable:r.logDriver.getProgressLog(t,o)})},Co=o=>{const e=o.source;return e===void 0?m(void 0):({drivers:t})=>({type:"ScheduleComputable",computable:t.logDriver.getLogHandle(e)})};function y(o,e){switch(e.type){case"GetFromCtx":const t=o[e.variable];return typeof t=="function"?r=>ge(t(r.cCtx)):(t===void 0&&console.log("asdasd"),m(t));case"Isolate":return({drivers:r})=>({type:"ScheduleComputable",computable:Nt(r,o,e.cfg)});case"Immediate":return m(e.value);case"GetJsonField":return()=>({type:"ScheduleSubroutine",subroutine:go,args:{source:y(o,e.source),field:y(o,e.field)}});case"MapArrayValues":return()=>({type:"ScheduleSubroutine",subroutine:so(o,e),args:{source:y(o,e.source)}});case"MapRecordValues":return()=>({type:"ScheduleSubroutine",subroutine:no(o,e),args:{source:y(o,e.source)}});case"MakeObject":return()=>({type:"ScheduleSubroutine",subroutine:to,args:Zr(e.template,r=>y(o,r))});case"MakeArray":return()=>({type:"ScheduleSubroutine",subroutine:jt(e.template.length),args:Et(e.template,r=>y(o,r))});case"Flatten":return()=>({type:"ScheduleSubroutine",subroutine:ro,args:{source:y(o,e.source)}});case"IsEmpty":return()=>({type:"ScheduleSubroutine",subroutine:ao,args:{arg:y(o,e.arg)}});case"Not":return()=>({type:"ScheduleSubroutine",subroutine:co,args:{operand:y(o,e.operand)}});case"And":return()=>({type:"ScheduleSubroutine",subroutine:lo,args:{operand1:y(o,e.operand1),operand2:y(o,e.operand2)}});case"Or":return()=>({type:"ScheduleSubroutine",subroutine:uo,args:{operand1:y(o,e.operand1),operand2:y(o,e.operand2)}});case"MapResourceFields":return()=>({type:"ScheduleSubroutine",subroutine:ho(o,e),args:{source:y(o,e.source)}});case"GetResourceField":return()=>({type:"ScheduleSubroutine",subroutine:oo,args:{source:y(o,e.source),field:y(o,e.field)}});case"GetResourceValueAsJson":return()=>({type:"ScheduleSubroutine",subroutine:po,args:{source:y(o,e.source)}});case"GetBlobContent":return()=>({type:"ScheduleSubroutine",subroutine:mo,args:{source:y(o,e.source)}});case"GetBlobContentAsString":return()=>({type:"ScheduleSubroutine",subroutine:vo,args:{source:y(o,e.source)}});case"GetBlobContentAsJson":return()=>({type:"ScheduleSubroutine",subroutine:yo,args:{source:y(o,e.source)}});case"GetDownloadedBlobContent":return()=>({type:"ScheduleSubroutine",subroutine:bo,args:{source:y(o,e.source)}});case"GetOnDemandBlobContent":return()=>({type:"ScheduleSubroutine",subroutine:wo,args:{source:y(o,e.source)}});case"GetImportProgress":return()=>({type:"ScheduleSubroutine",subroutine:So,args:{source:y(o,e.source)}});case"GetLastLogs":return()=>({type:"ScheduleSubroutine",subroutine:ko(e.lines),args:{source:y(o,e.source)}});case"GetProgressLog":return()=>({type:"ScheduleSubroutine",subroutine:Po(e.patternToSearch),args:{source:y(o,e.source)}});case"GetLogHandle":return()=>({type:"ScheduleSubroutine",subroutine:Co,args:{source:y(o,e.source)}});default:return h.assertNever(e)}}const Fo=["$prod","$staging"];function Ro(o){return{$blockId:o.blockId,$args:JSON.parse(o.args),$ui:o.uiState!==void 0?JSON.parse(o.uiState):void 0,$prod:o.prod,$staging:o.staging}}const xt=Symbol(),At="return",Bo={op:xt,arg:At};function Oo(o){return o.op==xt&&o.arg==At}function To(){return{pendingSubroutines:new Map}}function rt(o,e,t,r){const s=new it(t),n=(a,c)=>{if(Oo(a))return e.result=c,!1;const l=h.notEmpty(e.pendingSubroutines.get(a.op));if(a.arg in l.args)throw new Error("argument already set");return l.args[a.arg]=c,l.argCounter--,l.argCounter===0&&(e.pendingSubroutines.delete(a.op),s.push({destination:l.destination,operation:l.subroutine(l.args)})),!0},i=[];e:for(;s.length>0;){const a=s.shift(),c=a.operation(o);switch(c.type){case"ReturnResult":if(!n(a.destination,c.result))break e;break;case"ScheduleSubroutine":const l=Symbol(),d=Object.entries(c.args),g=d.length;if(g===0)s.push({destination:a.destination,operation:c.subroutine({})});else{for(const[f,v]of d)s.push({destination:{op:l,arg:f},operation:v});e.pendingSubroutines.set(l,{argCounter:g,args:{},subroutine:c.subroutine,destination:a.destination})}break;case"ScheduleComputable":if(!r)throw new Error("asynchronous operations are forbidden in this context");i.push({destination:a.destination,computable:c.computable});break;default:h.assertNever(c)}}return i}function It(o,e,t,r={}){return Nt(o,Ro(e),t,r)}function Nt(o,e,t,r={}){const s=Te({ctx:Object.fromEntries(Object.entries(e).filter(([n])=>Fo.indexOf(n)===-1)),cfg:t});return S.Computable.makeRaw(n=>{const i={drivers:o,cCtx:n},a=To();return{ir:rt(i,a,[{destination:Bo,operation:y(e,t)}],!0),async postprocessValue(l,d){const g=[];for(const O of l)g.push({destination:O.destination,operation:m(O.computable)});const f={drivers:o,get cCtx(){throw new Error("asynchronous operations are forbidden in this context")}},v=new Map;for(const[O,L]of a.pendingSubroutines)v.set(O,{...L,args:{...L.args}});const b={result:a.result,pendingSubroutines:v};if(rt(f,b,g,!1),!("result"in b))throw new Error("illegal cfg rendering stack state, no result");return b.result}}},{...r,key:s})}function Do(o){return o instanceof ArrayBuffer||ArrayBuffer.isView(o)}function ot(o){return o!==void 0?Buffer.from(o).toString("base64"):void 0}class ue{constructor(e,t,r,s,n){p(this,"callbackRegistry");p(this,"fnJSONStringify");p(this,"fnJSONParse");p(this,"computablesToResolve",{});p(this,"computableCtx");p(this,"accessors",new Map);p(this,"meta");p(this,"_resultPool");if(this.scope=e,this.vm=t,this.blockCtx=r,this.env=s,this.computableCtx=n,this.callbackRegistry=this.scope.manage(this.vm.newObject()),this.fnJSONStringify=e.manage(t.getProp(t.global,"JSON").consume(i=>t.getProp(i,"stringify"))),t.typeof(this.fnJSONStringify)!=="function")throw new Error("JSON.stringify() not found.");if(this.fnJSONParse=e.manage(t.getProp(t.global,"JSON").consume(i=>t.getProp(i,"parse"))),t.typeof(this.fnJSONParse)!=="function")throw new Error("JSON.parse() not found.");this.meta=r.blockMeta(n),this.injectCtx()}resetComputableCtx(){this.computableCtx=void 0,this.accessors.clear()}static cleanErrorContext(e){typeof e=="object"&&e!==null&&"context"in e&&delete e.context}evaluateBundle(e){try{this.vm.unwrapResult(this.vm.evalCode(e,"bundle.js",{type:"global"})).dispose()}catch(t){throw ue.cleanErrorContext(t),t}}runCallback(e,...t){try{return ie.Scope.withScope(r=>{const s=r.manage(this.vm.getProp(this.callbackRegistry,e));if(this.vm.typeof(s)!=="function")throw new Error(`No such callback: ${e}`);return this.scope.manage(this.vm.unwrapResult(this.vm.callFunction(s,this.vm.undefined,...t.map(n=>this.exportObjectUniversal(n,r)))))})}catch(r){throw ue.cleanErrorContext(r),r}}getAccessorHandleByName(e){if(this.computableCtx===void 0)throw new Error("Accessors can't be used in this context");const t=(r,s)=>{if(!this.accessors.has(r)){const n=this.blockCtx[s];if(n===void 0)throw new Error("Staging context not available");const i=n(this.computableCtx);i?this.accessors.set(r,this.computableCtx.accessor(i).node({ignoreError:!0})):this.accessors.set(r,void 0)}return this.accessors.get(r)?r:void 0};if(e==="staging")return t("staging","staging");if(e==="main")return t("main","prod")}resolveWithCommon(e,t,...r){return this.wrapAccessor(this.getAccessor(e).traverseWithCommon(t,...r))}getResourceType(e){return this.getAccessor(e).resourceType}getInputsLocked(e){return this.getAccessor(e).getInputsLocked()}getOutputsLocked(e){return this.getAccessor(e).getOutputsLocked()}getIsReadyOrError(e){return this.getAccessor(e).getIsReadyOrError()}getIsFinal(e){return this.getAccessor(e).getIsFinal()}getError(e){return this.wrapAccessor(this.getAccessor(e).getError())}listInputFields(e){return this.getAccessor(e).listInputFields()}listOutputFields(e){return this.getAccessor(e).listOutputFields()}listDynamicFields(e){return this.getAccessor(e).listDynamicFields()}getKeyValueBase64(e,t){return ot(this.getAccessor(e).getKeyValue(t))}getKeyValueAsString(e,t){return this.getAccessor(e).getKeyValueAsString(t)}getDataBase64(e){return ot(this.getAccessor(e).getData())}getDataAsString(e){return this.getAccessor(e).getDataAsString()}parsePObjectCollection(e,t,r){const s=this.getAccessor(e);if(!s.getIsReadyOrError())return;const n=Qr(s,t,r),i={};for(const[a,c]of Object.entries(n))i[a]=F.mapPObjectData(c,l=>this.wrapAccessor(l));return i}registerComputable(e,t){const r=`${e}_${K.randomUUID()}`;return this.computablesToResolve[r]=t,r}getBlobContentAsString(e){const t=this.getAccessor(e).resourceInfo;return this.registerComputable("getBlobContentAsString",S.Computable.make(r=>this.env.driverKit.blobDriver.getDownloadedBlob(t,r),{postprocessValue:async r=>{if(r!==void 0)return Buffer.from(await this.env.driverKit.blobDriver.getContent(r.handle)).toString("utf-8")}}))}getBlobContentAsBase64(e){const t=this.getAccessor(e).resourceInfo;return this.registerComputable("getBlobContentAsBase64",S.Computable.make(r=>this.env.driverKit.blobDriver.getDownloadedBlob(t,r),{postprocessValue:async r=>{if(r!==void 0)return Buffer.from(await this.env.driverKit.blobDriver.getContent(r.handle)).toString("base64")}}))}getDownloadedBlobContentHandle(e){const t=this.getAccessor(e).resourceInfo;return this.registerComputable("getDownloadedBlobContentHandle",this.env.driverKit.blobDriver.getDownloadedBlob(t))}getOnDemandBlobContentHandle(e){const t=this.getAccessor(e).persist();return this.registerComputable("getOnDemandBlobContentHandle",this.env.driverKit.blobDriver.getOnDemandBlob(t))}getImportProgress(e){const t=this.getAccessor(e).persist();return this.registerComputable("getImportProgress",this.env.driverKit.uploadDriver.getProgressId(t))}getLastLogs(e,t){const r=this.getAccessor(e).persist();return this.registerComputable("getLastLogs",this.env.driverKit.logDriver.getLastLogs(r,t))}getProgressLog(e,t){const r=this.getAccessor(e).persist();return this.registerComputable("getProgressLog",this.env.driverKit.logDriver.getProgressLog(r,t))}getLogHandle(e){const t=this.getAccessor(e).persist();return this.registerComputable("getLogHandle",this.env.driverKit.logDriver.getLogHandle(t))}getBlockLabel(e){const t=this.meta.get(e);if(t===void 0)throw new Error(`Block ${e} not found.`);return t.label}get resultPool(){if(this._resultPool===void 0){if(this.computableCtx===void 0)throw new Error("can't use result pool in this context (most porbably called from the future mapper)");this._resultPool=h.notEmpty(this.blockCtx.getResultsPool,"getResultsPool")(this.computableCtx)}return this._resultPool}calculateOptions(e){return this.resultPool.calculateOptions(e)}getDataFromResultPool(){const e=this.resultPool.getData();return e.instabilityMarker!==void 0&&this.computableCtx.markUnstable(`incomplete_result_pool:${e.instabilityMarker}`),{isComplete:e.isComplete,entries:e.entries.map(t=>({ref:t.ref,obj:F.mapPObjectData(t.obj,r=>this.wrapAccessor(r))}))}}getDataWithErrorsFromResultPool(){const e=this.resultPool.getDataWithErrors();return e.instabilityMarker!==void 0&&this.computableCtx.markUnstable(`incomplete_result_pool:${e.instabilityMarker}`),{isComplete:e.isComplete,entries:e.entries.map(t=>({ref:t.ref,obj:{id:t.obj.id,spec:t.obj.spec,data:F.mapValueInVOE(t.obj.data,r=>this.wrapAccessor(r))}}))}}getSpecsFromResultPool(){const e=this.resultPool.getSpecs();return e.instabilityMarker!==void 0&&this.computableCtx.markUnstable(`specs_from_pool_incomplete:${e.instabilityMarker}`),e}createPFrame(e){if(this.computableCtx===void 0)throw new Error("can't instantiate PFrames from this context (most porbably called from the future mapper)");return this.env.driverKit.pFrameDriver.createPFrame(e.map(t=>F.mapPObjectData(t,r=>this.getAccessor(r))),this.computableCtx)}createPTable(e){if(this.computableCtx===void 0)throw new Error("can't instantiate PTable from this context (most porbably called from the future mapper)");return this.env.driverKit.pFrameDriver.createPTable(F.mapPTableDef(e,t=>F.mapPObjectData(t,r=>this.getAccessor(r))),this.computableCtx)}getAccessor(e){const t=this.accessors.get(e);if(t===void 0)throw new Error("No such accessor");return t}wrapAccessor(e){if(e!==void 0){const t=K.randomUUID();return this.accessors.set(t,e),t}}exportSingleValue(e,t){const r=this.tryExportSingleValue(e,t);if(r===void 0)throw new Error(`Can't export value: ${e}`);return r}tryExportSingleValue(e,t){let r,s=!1;switch(typeof e){case"string":r=this.vm.newString(e),s=!0;break;case"number":r=this.vm.newNumber(e),s=!0;break;case"undefined":r=this.vm.undefined;break;case"boolean":r=e?this.vm.true:this.vm.false;break;default:if(e===null){r=this.vm.null;break}if(Do(e)){r=this.vm.newArrayBuffer(e),s=!0;break}return}return s&&t!=null?t.manage(r):r}exportObjectUniversal(e,t){const r=this.tryExportSingleValue(e,t);return r!==void 0?r:this.exportObjectViaJson(e,t)}exportObjectViaJson(e,t){const r=this.vm.newString(JSON.stringify(e)).consume(s=>this.vm.unwrapResult(this.vm.callFunction(this.fnJSONParse,this.vm.undefined,s)));return t!==void 0?t.manage(r):r}importObjectUniversal(e){switch(this.vm.typeof(e)){case"undefined":return;case"boolean":case"number":case"string":return this.vm.dump(e);default:return this.importObjectViaJson(e)}}importObjectViaJson(e){const t=this.vm.unwrapResult(this.vm.callFunction(this.fnJSONStringify,this.vm.undefined,e)).consume(r=>this.vm.getString(r));if(t!=="undefined")return JSON.parse(t)}injectCtx(){ie.Scope.withScope(e=>{const t=e.manage(this.vm.newObject());this.vm.setProp(t,"args",e.manage(this.vm.newString(this.blockCtx.args))),this.blockCtx.uiState!==void 0&&this.vm.setProp(t,"uiState",e.manage(this.vm.newString(this.blockCtx.uiState))),this.vm.setProp(t,"callbackRegistry",this.callbackRegistry);const r=(s,n)=>{this.vm.newFunction(s,n).consume(i=>this.vm.setProp(t,s,i))};r("getAccessorHandleByName",s=>this.exportSingleValue(this.getAccessorHandleByName(this.vm.getString(s)),void 0)),r("resolveWithCommon",(s,n,...i)=>this.exportSingleValue(this.resolveWithCommon(this.vm.getString(s),this.importObjectViaJson(n),...i.map(a=>this.importObjectViaJson(a))),void 0)),r("getResourceType",s=>this.exportObjectViaJson(this.getResourceType(this.vm.getString(s)),void 0)),r("getInputsLocked",s=>this.exportSingleValue(this.getInputsLocked(this.vm.getString(s)),void 0)),r("getOutputsLocked",s=>this.exportSingleValue(this.getOutputsLocked(this.vm.getString(s)),void 0)),r("getIsReadyOrError",s=>this.exportSingleValue(this.getIsReadyOrError(this.vm.getString(s)),void 0)),r("getIsFinal",s=>this.exportSingleValue(this.getIsFinal(this.vm.getString(s)),void 0)),r("getError",s=>this.exportSingleValue(this.getError(this.vm.getString(s)),void 0)),r("listInputFields",s=>this.exportObjectViaJson(this.listInputFields(this.vm.getString(s)),void 0)),r("listOutputFields",s=>this.exportObjectViaJson(this.listInputFields(this.vm.getString(s)),void 0)),r("listDynamicFields",s=>this.exportObjectViaJson(this.listInputFields(this.vm.getString(s)),void 0)),r("getKeyValueBase64",(s,n)=>this.exportSingleValue(this.getKeyValueBase64(this.vm.getString(s),this.vm.getString(n)),void 0)),r("getKeyValueAsString",(s,n)=>this.exportSingleValue(this.getKeyValueAsString(this.vm.getString(s),this.vm.getString(n)),void 0)),r("getDataBase64",s=>this.exportSingleValue(this.getDataBase64(this.vm.getString(s)),void 0)),r("getDataAsString",s=>this.exportSingleValue(this.getDataAsString(this.vm.getString(s)),void 0)),r("parsePObjectCollection",(s,n,i)=>this.exportObjectUniversal(this.parsePObjectCollection(this.vm.getString(s),this.vm.dump(n),this.vm.getString(i)),void 0)),r("getBlobContentAsBase64",s=>this.exportSingleValue(this.getBlobContentAsBase64(this.vm.getString(s)),void 0)),r("getBlobContentAsString",s=>this.exportSingleValue(this.getBlobContentAsString(this.vm.getString(s)),void 0)),r("getDownloadedBlobContentHandle",s=>this.exportSingleValue(this.getDownloadedBlobContentHandle(this.vm.getString(s)),void 0)),r("getOnDemandBlobContentHandle",s=>this.exportSingleValue(this.getOnDemandBlobContentHandle(this.vm.getString(s)),void 0)),r("getImportProgress",s=>this.exportSingleValue(this.getImportProgress(this.vm.getString(s)),void 0)),r("getLastLogs",(s,n)=>this.exportSingleValue(this.getLastLogs(this.vm.getString(s),this.vm.getNumber(n)),void 0)),r("getProgressLog",(s,n)=>this.exportSingleValue(this.getProgressLog(this.vm.getString(s),this.vm.getString(n)),void 0)),r("getLogHandle",s=>this.exportSingleValue(this.getLogHandle(this.vm.getString(s)),void 0)),r("getBlockLabel",s=>this.exportSingleValue(this.getBlockLabel(this.vm.getString(s)),void 0)),r("getDataFromResultPool",s=>this.exportObjectUniversal(this.getDataFromResultPool(),void 0)),r("getDataWithErrorsFromResultPool",s=>this.exportObjectUniversal(this.getDataWithErrorsFromResultPool(),void 0)),r("getSpecsFromResultPool",s=>this.exportObjectUniversal(this.getSpecsFromResultPool(),void 0)),r("calculateOptions",s=>this.exportObjectUniversal(this.calculateOptions(this.importObjectViaJson(s)),void 0)),r("createPFrame",s=>this.exportSingleValue(this.createPFrame(this.importObjectViaJson(s)),void 0)),r("createPTable",s=>this.exportSingleValue(this.createPTable(this.importObjectViaJson(s)),void 0)),this.vm.setProp(this.vm.global,"cfgRenderCtx",t)})}}function Eo(o,e,t,r,s={}){return S.Computable.makeRaw(n=>{const i=new ie.Scope;n.addOnDestroy(()=>i.dispose());const a=i.manage(o.quickJs.newRuntime());a.setMemoryLimit(1024*640),a.setMaxStackSize(1024*320);const c=i.manage(a.newContext()),l=new ue(i,c,e,o,n);l.evaluateBundle(r.content);const d=l.runCallback(t);return l.resetComputableCtx(),{ir:l.computablesToResolve,postprocessValue:async g=>{for(const[f,v]of Object.entries(g))l.runCallback(f,v);return l.importObjectUniversal(d)}}},s)}function Be(o,e,t,r,s={}){if(F.isFunctionHandle(t)){if(r===void 0)throw new Error("No code bundle.");return Eo(o,e,t,r,s)}else return It(o.driverKit,e,t,s)}function jo(o,e,t){return S.Computable.make(r=>{var b,O,L,U,ee,H,q,te;const s=r.accessor(o).node(),n=h.notEmpty(s.getKeyValueAsJson(xe)),i=h.notEmpty(s.getKeyValueAsJson(Z)),a=h.notEmpty(s.getKeyValueAsJson(X)),c=h.notEmpty(s.getKeyValueAsJson(_)),l=h.notEmpty(s.getKeyValueAsJson(ae)),d=new Map;for(const{id:k}of V(c)){const M=s.traverse({field:P(k,"currentArgs"),assertFieldType:"Dynamic",errorIfFieldNotSet:!0});let z;const j=s.traverse({field:P(k,"prodArgs"),assertFieldType:"Dynamic",stableIfNotFound:!0});if(j!==void 0){const D=s.getField({field:P(k,"prodOutput"),assertFieldType:"Dynamic",errorIfFieldNotFound:!0}),R=s.getField({field:P(k,"prodUiCtx"),assertFieldType:"Dynamic",errorIfFieldNotFound:!0});z={arguments:j.getDataAsJson(),stale:M.id!==j.id,outputError:D.error!==void 0||R.error!==void 0||((b=D.value)==null?void 0:b.getError())!==void 0||((O=R.value)==null?void 0:O.getError())!==void 0,outputsError:((L=D.error)==null?void 0:L.getDataAsString())??((ee=(U=D.value)==null?void 0:U.getError())==null?void 0:ee.getDataAsString()),exportsError:((H=R.error)==null?void 0:H.getDataAsString())??((te=(q=R.value)==null?void 0:q.getError())==null?void 0:te.getDataAsString()),finished:(D.value!==void 0&&D.value.getIsReadyOrError()||D.error!==void 0&&D.error.getIsReadyOrError())&&(R.value!==void 0&&R.value.getIsReadyOrError()||R.error!==void 0&&R.error.getIsReadyOrError())}}d.set(k,{currentArguments:M.getDataAsJson(),prod:z})}const g=se(c,k=>d.get(k).currentArguments),f=new Set(l.blocksInLimbo),v=[...V(c)].map(({id:k,label:M,renderingMode:z})=>{var Ke,Ue,$e,Ge;const j=h.notEmpty(d.get(k)),D=h.notEmpty(g.nodes.get(k));let R="NotCalculated";j.prod!==void 0&&(f.has(k)?R="Limbo":R=j.prod.finished?"Done":"Running");const $=s.traverse({field:P(k,"blockPack"),assertFieldType:"Dynamic",errorIfFieldNotSet:!0},{field:u.Pl.HolderRefField,assertFieldType:"Input",errorIfFieldNotFound:!0}),J=$==null?void 0:$.getDataAsJson(),{sections:re,inputsValid:w,sdkVersion:B}=le(J==null?void 0:J.config,fe=>{const W=F.normalizeBlockConfig(fe),He=Le(s,k);return{sections:Be(t,He,W.sections,W.code),inputsValid:Be(t,He,W.inputsValid,W.code),sdkVersion:W.sdkVersion}})||{},C=le(J,fe=>t.blockUpdateWatcher.get(fe.source));return{id:k,label:M,renderingMode:z,stale:((Ke=j.prod)==null?void 0:Ke.stale)!==!1||R==="Limbo",missingReference:D.missingReferences,upstreams:[...g.traverseIdsExcludingRoots("upstream",k)],downstreams:[...g.traverseIdsExcludingRoots("downstream",k)],calculationStatus:R,outputErrors:((Ue=j.prod)==null?void 0:Ue.outputError)===!0,outputsError:($e=j.prod)==null?void 0:$e.outputsError,exportsError:(Ge=j.prod)==null?void 0:Ge.exportsError,sections:re,inputsValid:w,currentBlockPack:J==null?void 0:J.source,updatedBlockPack:C,sdkVersion:B,navigationState:e.getState(k)}});return{meta:a,created:new Date(n),lastModified:new Date(i),authorMarker:s.getKeyValueAsJson(ke),blocks:v}},{postprocessValue:r=>{const s=new Set,n=new Set;return{...r,blocks:r.blocks.map(i=>{i.inputsValid||s.add(i.id),i.stale&&n.add(i.id);const a=i.stale||i.upstreams.findIndex(l=>n.has(l))!==-1,c=a&&!!i.inputsValid&&!i.missingReference&&i.upstreams.findIndex(l=>s.has(l))===-1;return{...i,canRun:c,stale:a}})}}}).withStableType()}function Vt(o,e){var t,r;return le((r=(t=o.traverse({field:P(e,"blockPack"),assertFieldType:"Dynamic",errorIfFieldNotSet:!0},{field:u.Pl.HolderRefField,assertFieldType:"Input",errorIfFieldNotFound:!0}))==null?void 0:t.getDataAsJson())==null?void 0:r.config,s=>F.normalizeBlockConfig(s))}function xo(o,e){const t=o.node();if(u.resourceTypesEqual(t.resourceType,Ie)){const r=t.getDataAsJson();if(r===void 0)throw new Error("No resource data.");return e.frontendDownloadDriver.getPath(new URL(r.url)).withStableType()}else if(u.resourceTypesEqual(t.resourceType,Ne)){const r=t.getDataAsJson();if(r===void 0)throw new Error("No resource data.");return e.signer.verify(r.path,r.signature,`Frontend path signature mismatch for: ${r.path}`),r.path}else throw new Error(`Unsupported resource type: ${JSON.stringify(t.resourceType)}`)}function Ao(o,e){if(o!==void 0)return S.Computable.make(t=>xo(t.accessor(o),e),{postprocessValue:t=>{if(t!==void 0){if(typeof t=="string")return t;if(t.error!==void 0)throw new Error(t.error);return t.path}}}).withStableType()}function Io(o,e,t){return S.Computable.make(r=>{var a;const s=r.accessor(o).node(),n=Vt(s,e),i=(a=s.traverse({field:P(e,"blockPack"),assertFieldType:"Dynamic"},{field:u.Pl.HolderRefField,assertFieldType:"Input",errorIfFieldNotFound:!0},{field:Ft,assertFieldType:"Input"}))==null?void 0:a.persist();return{path:Ao(i,t),sdkVersion:n==null?void 0:n.sdkVersion}},{mode:"StableOnlyLive"})}function No(o,e,t){return S.Computable.make(r=>{const s=r.accessor(o).node(),n=Le(s,e);return{author:s.getKeyValueAsJson(Se(e)),args:JSON.parse(n.args),ui:n.uiState!==void 0?JSON.parse(n.uiState):void 0}},{key:"inputs#"+u.resourceIdToString(o.rid)+e})}function Vo(o,e,t){return S.Computable.make(r=>{const s=r.accessor(o).node(),n=Dt(s,e),i=Vt(s,e);return le(i,a=>{const c={};for(const[l,d]of Object.entries(a.outputs))c[l]=S.Computable.wrapError(Be(t,n,d,a.code));return c})},{key:"outputs#"+u.resourceIdToString(o.rid)+e}).withStableType()}function Lo(o,e){return S.Computable.make(t=>{const r=t.accessor(o).node(),s=h.notEmpty(r.getKeyValueAsJson(_)),n=[];for(const{id:i,renderingMode:a}of V(s)){const c=r.traverse({field:P(i,"blockPack"),assertFieldType:"Dynamic",errorIfFieldNotSet:!0},{field:u.Pl.HolderRefField,assertFieldType:"Input",errorIfFieldNotFound:!0}),l=c==null?void 0:c.getDataAsJson();if((l==null?void 0:l.config)===void 0)continue;const d=F.normalizeBlockConfig(l.config),g=Object.entries(d.outputs).map(([,v])=>v).filter(v=>!F.isFunctionHandle(v)&&eo(v)).map(v=>v);if(g.length===0)continue;const f=Dt(r,i);for(const v of g)n.push(S.Computable.wrapError(It(e.driverKit,f,v)))}return n})}class Jo{constructor(){p(this,"states",new Map)}setState(e,t){const r=this.states.get(e);if(r===void 0){this.states.set(e,{state:t,change:new S.ChangeSource});return}r.state={...t},r.change.markChanged()}readState(e,t){let r=this.states.get(t);return r===void 0&&(r={state:{...F.DefaultNavigationState},change:new S.ChangeSource},this.states.set(t,r)),r.change.attachWatcher(e.watcher),r.state}getState(e){return S.Computable.make(t=>this.readState(t,e),{key:`navigationState#${e}`})}deleteBlock(e){const t=this.states.get(e);t!==void 0&&(this.states.delete(e),t.change.markChanged())}}class he{constructor(e,t,r){p(this,"rid");p(this,"overview");p(this,"navigationStates",new Jo);p(this,"blockComputables",new Map);p(this,"blockFrontends",new Map);p(this,"activeConfigs");p(this,"refreshLoopResult");p(this,"abortController",new AbortController);p(this,"destroyed",!1);this.env=e,this.projectTree=r,this.overview=jo(r.entry(),this.navigationStates,e).withPreCalculatedValueTree(),this.rid=t,this.refreshLoopResult=this.refreshLoop(),this.activeConfigs=Lo(r.entry(),e)}async refreshLoop(){for(;!this.destroyed;)try{await be(this.env.pl,this.rid,e=>{e.doRefresh(this.env.ops.stagingRenderingRate)}),await this.activeConfigs.getValue(),await qt.setTimeout(this.env.ops.projectRefreshInterval,this.abortController.signal)}catch(e){if(u.isNotFoundError(e)){console.warn("project refresh routine terminated, because project was externally deleted");break}else if(!u.isTimeoutOrCancelError(e))throw new Error("Unexpected exception",{cause:e})}}async addBlock(e,t,r,s=void 0,n=K.randomUUID()){const i=await this.env.bpPreparer.prepare(t),a=await this.env.bpPreparer.getBlockConfig(t);return await I(this.env.pl,this.rid,s,c=>c.addBlock({id:n,label:e,renderingMode:a.renderingMode},{args:JSON.stringify(a.initialArgs),blockPack:i},r)),await this.projectTree.refreshState(),n}async updateBlockPack(e,t,r=!1,s){const n=await this.env.bpPreparer.prepare(t),i=await this.env.bpPreparer.getBlockConfig(t);await I(this.env.pl,this.rid,s,a=>a.migrateBlockPack(e,n,r?JSON.stringify(i.initialArgs):void 0)),await this.projectTree.refreshState()}async deleteBlock(e,t){await I(this.env.pl,this.rid,t,r=>r.deleteBlock(e)),this.navigationStates.deleteBlock(e),await this.projectTree.refreshState()}async reorderBlocks(e,t){await I(this.env.pl,this.rid,t,r=>{const s=r.structure;if(s.groups.length!==1)throw new Error("Unexpected project structure, non-sinular block group");const n=s.groups[0];if(n.blocks.length!==e.length)throw new Error(`Lengh mismatch: ${n.blocks.length} !== ${e.length}`);if(new Set(e).size!==e.length)throw new Error("Repeated block ids");const i={groups:[{id:n.id,label:n.label,blocks:e.map(a=>{const c=n.blocks.find(l=>l.id===a);if(c===void 0)throw new Error(`Can't find block: ${a}`);return c})}]};r.updateStructure(i)}),await this.projectTree.refreshState()}async runBlock(e){await be(this.env.pl,this.rid,t=>t.renderProduction([e],!0)),await this.projectTree.refreshState()}async stopBlock(e){await be(this.env.pl,this.rid,t=>t.stopProduction(e)),await this.projectTree.refreshState()}async setBlockLabel(e,t,r){await I(this.env.pl,this.rid,r,s=>{s.setBlockLabel(e,t)}),await this.projectTree.refreshState()}async setBlockArgs(e,t,r){await I(this.env.pl,this.rid,r,s=>s.setArgs([{blockId:e,args:JSON.stringify(t)}])),await this.projectTree.refreshState()}async setUiState(e,t,r){await I(this.env.pl,this.rid,r,s=>s.setUiState(e,t===void 0?void 0:JSON.stringify(t))),await this.projectTree.refreshState()}async setNavigationState(e,t){this.navigationStates.setState(e,t)}async setBlockArgsAndUiState(e,t,r,s){await I(this.env.pl,this.rid,s,n=>{n.setArgs([{blockId:e,args:JSON.stringify(t)}]),n.setUiState(e,JSON.stringify(r))}),await this.projectTree.refreshState()}async resetBlockArgsAndUiState(e,t){await this.env.pl.withWriteTx("BlockInputsReset",async r=>{const s=u.ensureResourceIdNotNull((await r.getField(u.field(this.rid,P(e,"blockPack")))).value),n=u.ensureResourceIdNotNull((await r.getField(u.field(s,u.Pl.HolderRefField))).value),i=await r.getResourceData(n,!1),a=JSON.parse(Buffer.from(h.notEmpty(i.data)).toString("utf-8"));await I(r,this.rid,t,c=>{c.setArgs([{blockId:e,args:JSON.stringify(a.config.initialArgs)}]),c.setUiState(e,void 0)}),await r.commit()}),await this.projectTree.refreshState()}getBlockComputables(e){const t=this.blockComputables.get(e);if(t===void 0){const r=Vo(this.projectTree.entry(),e,this.env),n={fullState:S.Computable.make(i=>({argsAndUiState:No(this.projectTree.entry(),e),outputs:r,navigationState:this.navigationStates.getState(e)}),{postprocessValue:i=>({...i.argsAndUiState,outputs:i.outputs,navigationState:i.navigationState})}).withPreCalculatedValueTree()};return this.blockComputables.set(e,n),n}return t}getBlockState(e){return this.getBlockComputables(e).fullState}getBlockFrontend(e){const t=this.blockFrontends.get(e);if(t===void 0){const r=Io(this.projectTree.entry(),e,this.env).withPreCalculatedValueTree();return this.blockFrontends.set(e,r),r}return t}async destroy(){this.destroyed=!0,this.abortController.abort(),await this.refreshLoopResult,await this.projectTree.terminate(),this.overview.resetState(),this.blockFrontends.forEach(e=>e.resetState()),this.blockComputables.forEach(e=>{e.fullState.resetState()}),this.activeConfigs.resetState()}async destroyAndAwaitTermination(){await this.destroy()}static async init(e,t){const r=await Oe.SynchronizedTreeState.init(e.pl,t,{...e.ops.defaultTreeOptions,pruning:Mo},e.logger);return new he(e,t,r)}}function Mo(o){switch(o.type.name){case"BlockPackCustom":return o.fields.filter(e=>e.name!=="template");case"UserProject":return o.fields.filter(e=>!e.name.startsWith("__serviceTemplate"));case"Blob":return[];default:return o.fields}}const Je={logger:new h.ConsoleLoggerAdapter,platformLocalStorageNameToPath:{},localStorageNameToPath:{local:lt.homedir()},blobDriverOps:{cacheSoftSizeBytes:100*1024*1024,nConcurrentDownloads:10},uploadDriverOps:{nConcurrentPartUploads:10,nConcurrentGetProgresses:10,pollingInterval:1e3,stopPollingDelay:1e3},logStreamDriverOps:{nConcurrentGetLogs:10,pollingInterval:1e3,stopPollingDelay:1e3}},Lt={...Je,defaultTreeOptions:{pollingInterval:350,stopPollingDelay:2500},devBlockUpdateRecheckInterval:1e3,projectRefreshInterval:700,stagingRenderingRate:5},Ko={minDelay:1500},Uo="__no_updates__";class $o extends S.PollComputablePool{constructor(t,r,s={}){super({...s,...Ko},r);p(this,"http");this.registryProvider=t,this.http=s.http}getKey(t){switch(t.type){case"dev-v1":return`dev_1_${t.folder}_${t.mtime}`;case"dev-v2":return`dev_2_${t.folder}_${t.mtime}`;case"from-registry-v2":return`from_registry_v2_${t.registryUrl}_${t.id.organization}_${t.id.name}_${t.id.version}`;default:return Uo}}async readValue(t){var r;try{switch(t.type){case"dev-v1":try{const s=await je(t.folder);return s===t.mtime?void 0:{...t,mtime:s}}catch(s){this.logger.warn(s);return}case"dev-v2":try{const s=await T.tryLoadPackDescription(t.folder,this.logger);if(s===void 0)return;const n=await de(s);return n===t.mtime?void 0:{...t,mtime:n}}catch(s){this.logger.warn(s);return}case"from-registry-v2":try{const s=this.registryProvider.getRegistry(t.registryUrl),n=(r=await s.getOverviewForSpec(t.id))==null?void 0:r.spec;if((n==null?void 0:n.type)!=="from-registry-v2")throw new Error("Unexpected");return Y.blockPackIdEquals(n.id,t.id)?void 0:((async()=>{try{await s.getComponents(n.id)}catch(i){this.logger.warn(i)}})(),n)}catch(s){this.logger.warn(s);return}default:return}}catch(s){this.logger.warn(s);return}}resultsEqual(t,r){if(t===void 0&&r===void 0)return!0;if(t===void 0||r===void 0||t.type!==r.type)return!1;switch(t.type){case"from-registry-v1":return r.type!=="from-registry-v1"?!1:t.registryUrl===r.registryUrl&&Y.blockPackIdEquals(t.id,r.id);case"from-registry-v2":return r.type!=="from-registry-v2"?!1:t.registryUrl===r.registryUrl&&Y.blockPackIdEquals(t.id,r.id);case"dev-v1":return r.type!=="dev-v1"?!1:t.folder===r.folder&&t.mtime===r.mtime;case"dev-v2":return r.type!=="dev-v2"?!1:t.folder===r.folder&&t.mtime===r.mtime;default:h.assertNever(t)}}}class st{constructor(){p(this,"resources",new Map)}check(e){const t=this.resources.get(e);if(t===void 0)throw new Error("Unexpected state.");if(t.refCount===0){this.resources.delete(e);const r=t.resource;r!=null&&typeof r[Symbol.dispose]=="function"&&r[Symbol.dispose]()}}acquire(e){const t=this.calculateParamsKey(e);let r=this.resources.get(t);r===void 0&&(r={refCount:0,resource:this.createNewResource(e)},this.resources.set(t,r)),r.refCount++;let s=!1;return{resource:r.resource,key:t,unref:()=>{s||(r.refCount--,s=!0,this.check(t))}}}getByKey(e){if(!this.resources.has(e))throw new Error(`resource not found, key = ${e}`);return this.resources.get(e).resource}tryGetByKey(e){var t;return(t=this.resources.get(e))==null?void 0:t.resource}}function nt(o){return String(o.id)}class Go{constructor(e,t,r){p(this,"pFrame",new Wt.PFrame);p(this,"blobIdToResource",new Map);p(this,"blobHandleComputables",new Map);p(this,"preloadBlob",async e=>{const t=e.map(r=>this.getOrCreateComputableForBlob(r));for(const r of t)await r.awaitStableFullValue()});p(this,"resolveBlob",async e=>{const t=this.getOrCreateComputableForBlob(e);return this.blobDriver.getLocalPath((await t.awaitStableValue()).handle)});p(this,"resolveBlobContent",async e=>{const t=this.getOrCreateComputableForBlob(e),r=this.blobDriver.getLocalPath((await t.awaitStableValue()).handle);return await this.blobContentCache.forceFetch(r)});this.blobDriver=e,this.blobContentCache=t,this.columns=r,this.pFrame.setDataSource(this);for(const s of r){for(const i of $r(s.data))this.blobIdToResource.set(nt(i),i);const n=Gr(s.data,nt);try{this.pFrame.addColumnSpec(s.id,s.spec),this.pFrame.setColumnData(s.id,n)}catch(i){throw new Error(`Adding column ${s.id} to PFrame failed: ${i}; Spec: ${s.spec}, DataInfo: ${n}.`)}}}getOrCreateComputableForBlob(e){let t=this.blobHandleComputables.get(e);if(t!==void 0)return t;const r=this.blobIdToResource.get(e);if(r===void 0)throw new Error(`Blob with id ${e} not found.`);return t=this.blobDriver.getDownloadedBlob(r).withPreCalculatedValueTree(),this.blobHandleComputables.set(e,t),t}[Symbol.dispose](){for(const e of this.blobHandleComputables.values())e.resetState();this.pFrame.dispose()}}class Ho{constructor(e){p(this,"pFrames");p(this,"pTables");p(this,"blobContentCache");p(this,"concurrencyLimiter");this.blobDriver=e;const t=new Yt.LRUCache({maxSize:1e9,fetchMethod:async s=>await ct.readFile(s),sizeCalculation:s=>s.length}),r=new h.ConcurrencyLimitingExecutor(2);this.blobContentCache=t,this.concurrencyLimiter=r,this.pFrames=new class extends st{constructor(s){super(),this.blobDriver=s}createNewResource(s){return new Go(this.blobDriver,t,s)}calculateParamsKey(s){return qo(s)}}(this.blobDriver),this.pTables=new class extends st{constructor(s){super(),this.pFrames=s}async createNewResource(s){const n=this.pFrames.getByKey(s.pFrameHandle),i=await r.run(async()=>await n.pFrame.createTable({src:Q(s.def.src),filters:s.def.filters}));return s.def.sorting.length!==0?i.sort(s.def.sorting):i}calculateParamsKey(s){return _o(s)}}(this.pFrames)}createPFrame(e,t){const r=e.map(n=>F.mapPObjectData(n,i=>Yr(i))),s=this.pFrames.acquire(r);return t.addOnDestroy(s.unref),s.key}createPTable(e,t){const r=this.createPFrame(zo(e.src),t),s=F.mapPTableDef(e,i=>i.id),n=this.pTables.acquire({def:s,pFrameHandle:r});return t.addOnDestroy(n.unref),n.key}async findColumns(e,t){const r={...t,compatibleWith:t.compatibleWith.length!==0?[{axesSpec:t.compatibleWith,qualifications:[]}]:[]};return{hits:(await this.concurrencyLimiter.run(async()=>await this.pFrames.getByKey(e).pFrame.findColumns(r))).hits.map(s=>s.hit)}}async getColumnSpec(e,t){return await this.concurrencyLimiter.run(async()=>await this.pFrames.getByKey(e).pFrame.getColumnSpec(t))}async listColumns(e){return await this.concurrencyLimiter.run(async()=>await this.pFrames.getByKey(e).pFrame.listColumns())}async calculateTableData(e,t){let r=await this.concurrencyLimiter.run(async()=>await this.pFrames.getByKey(e).pFrame.createTable({src:Q(t.src),filters:t.filters}));if(t.sorting.length>0){const i=await this.concurrencyLimiter.run(async()=>await r.sort(t.sorting));r.dispose(),r=i}const s=r.getSpec(),n=await this.concurrencyLimiter.run(async()=>await r.getData([...s.keys()]));return r.dispose(),s.map((i,a)=>({spec:i,data:n[a]}))}async getUniqueValues(e,t){return await this.concurrencyLimiter.run(async()=>await this.pFrames.getByKey(e).pFrame.getUniqueValues(t))}async getShape(e){return(await this.pTables.getByKey(e)).getShape()}async getSpec(e){return(await this.pTables.getByKey(e)).getSpec()}async getData(e,t,r){const s=await this.pTables.getByKey(e);return await this.concurrencyLimiter.run(async()=>await s.getData(t,r))}}function Q(o){switch(o.type){case"column":return{type:"column",columnId:o.column,qualifications:[]};case"inner":case"full":return{type:o.type,entries:o.entries.map(e=>Q(e))};case"outer":return{type:"outer",primary:Q(o.primary),secondary:o.secondary.map(e=>Q(e))};default:h.assertNever(o)}}function _o(o){const e=K.createHash("sha256");return e.update(o.pFrameHandle),e.update(Te(o.def)),e.digest().toString("hex")}function qo(o){const e=o.map(s=>s.id).sort(),t=K.createHash("sha256");let r="";for(const s of e)r!==s&&(t.update(s),r=s);return t.digest().toString("hex")}function zo(o){const e=new Map;return ne(o,e),[...e.values()]}function ne(o,e){switch(o.type){case"column":e.set(o.column.id,o.column);return;case"full":case"inner":for(const t of o.entries)ne(t,e);return;case"outer":ne(o.primary,e);for(const t of o.secondary)ne(t,e);return;default:h.assertNever(o)}}async function Jt(o,e){const t={...Je,...e};Wo(t.logger,t);const r=new h.HmacSha256Signer(t.localSecret),s=A.createDownloadClient(t.logger,o,t.platformLocalStorageNameToPath),n=A.createLogsClient(o,t.logger),i=A.createUploadBlobClient(o,t.logger),a=A.createUploadProgressClient(o,t.logger),c=A.createLsFilesClient(o,t.logger),l=new A.DownloadDriver(t.logger,s,n,t.blobDownloadPath,r,t.blobDriverOps),d=new A.UploadDriver(t.logger,r,i,a,t.uploadDriverOps),g=new A.LogsStreamDriver(n,t.logStreamDriverOps),f=new A.LogsDriver(g,l),v=new A.LsDriver(t.logger,c,o,r,t.localStorageNameToPath),b=new Ho(l);return{blobDriver:l,logDriver:f,lsDriver:v,signer:r,uploadDriver:d,pFrameDriver:b}}function Wo(o,e){e.localStorageNameToPath.local!=lt.homedir()&&o.info(`'local' storage with homedir was overwrote: ${e.localStorageNameToPath.local}`);const t=Object.keys(e.platformLocalStorageNameToPath),r=Object.keys(e.localStorageNameToPath).find(s=>t.includes(s));if(r)throw new Error(`Platform local storages include one or more local storages: ${r}. Note that we automatically included 'local' storage with user's home directory.`)}class Me{constructor(e,t,r,s,n,i,a,c){p(this,"pl");p(this,"projectList");p(this,"openedProjectsByRid",new Map);this.env=e,this.driverKit=t,this.signer=r,this.projectListResourceId=s,this.openedProjectsList=n,this.projectListTree=i,this.blockRegistryProvider=a,this.projectList=c,this.pl=this.env.pl}get internalDriverKit(){return this.env.driverKit}async createProject(e,t=K.randomUUID()){const r=await this.pl.withWriteTx("MLCreateProject",async s=>{const n=await Ur(s,e);return s.createField(u.field(this.projectListResourceId,t),"Dynamic",n),await s.commit(),await u.toGlobalResourceId(n)});return await this.projectListTree.refreshState(),r}async setProjectMeta(e,t,r){await I(this.pl,e,r,async s=>{s.setMeta(t)}),await this.projectListTree.refreshState()}async deleteProject(e){await this.pl.withWriteTx("MLRemoveProject",async t=>{t.removeField(u.field(this.projectListResourceId,e)),await t.commit()}),await this.projectListTree.refreshState()}async projectIdToResourceId(e){return await this.pl.withReadTx("Project id to resource id",async t=>{const r=(await t.getField(u.field(this.projectListResourceId,e))).value;if(u.isNullResourceId(r))throw new Error("Unexpected project list structure.");return r})}async ensureProjectRid(e){return typeof e=="string"?await this.projectIdToResourceId(e):e}async openProject(e){const t=await this.ensureProjectRid(e);if(this.openedProjectsByRid.has(t))throw new Error(`Project ${t} already opened`);this.openedProjectsByRid.set(t,await he.init(this.env,t)),this.openedProjectsList.setValue([...this.openedProjectsByRid.keys()])}async closeProject(e){const t=this.openedProjectsByRid.get(e);if(t===void 0)throw new Error(`Project ${e} not found among opened projects`);this.openedProjectsByRid.delete(e),await t.destroy(),this.openedProjectsList.setValue([...this.openedProjectsByRid.keys()])}getOpenedProject(e){const t=this.openedProjectsByRid.get(e);if(t===void 0)throw new Error(`Project ${e} not found among opened projects`);return t}async close(){await Promise.all([...this.openedProjectsByRid.values()].map(e=>e.destroy())),await this.projectListTree.terminate(),await this.env.retryHttpDispatcher.destroy(),await this.pl.close()}async closeAndAwaitTermination(){await this.close()}static generateLocalSecret(){return h.HmacSha256Signer.generateSecret()}static async init(e,t){const r={...Lt,...t};process.env.MI_LOG_TREE_STAT&&(r.defaultTreeOptions.logStat=process.env.MI_LOG_TREE_STAT==="cumulative"?"cumulative":"per-request");const s=await e.withWriteTx("MLInitialization",async b=>{const O=u.field(b.clientRoot,br);b.createField(O,"Dynamic");const L=await b.getField(O);if(u.isNullResourceId(L.value)){const U=b.createEphemeral(ht);return b.lock(U),b.setField(O,U),await b.commit(),await U.globalId}else return L.value}),n=r.logger,i=await Jt(e,r),a=new G.RetryAgent(e.httpDispatcher,{minTimeout:250,maxRetries:4}),c=new dt(a),l=new Ir(c,i.signer,a),d=new A.DownloadUrlDriver(n,e.httpDispatcher,r.frontendDownloadPath),g={pl:e,signer:i.signer,logger:n,httpDispatcher:e.httpDispatcher,retryHttpDispatcher:a,ops:r,bpPreparer:l,frontendDownloadDriver:d,driverKit:i,blockUpdateWatcher:new $o(c,n,{minDelay:r.devBlockUpdateRecheckInterval,http:a}),quickJs:await ie.getQuickJS()},f=new S.WatchableValue([]),v=await Sr(e,s,f,g);return new Me(g,i,i.signer,s,f,v.tree,c,v.computable)}}exports.BlockPackRegistry=sr;exports.CentralBlockRegistry=nr;exports.DefaultDriverKitOps=Je;exports.DefaultMiddleLayerOps=Lt;exports.FrontendFromFolderResourceType=Ne;exports.FrontendFromUrlResourceType=Ie;exports.MiddleLayer=Me;exports.Project=he;exports.TengoTemplateGet=ft;exports.TengoTemplateGetRegistry=mt;exports.TengoTemplateGetTemplate=yt;exports.TengoTemplateGetTemplateURI=vt;exports.TengoTemplatePack=bt;exports.TengoTemplatePackConvert=wt;exports.TengoTemplatePackConvertTemplate=kt;exports.TengoTemplatePackConvertTemplatePack=St;exports.V1CentralDevSnapshotRegistry=ar;exports.V1CentralRegistry=ir;exports.V2RegistryProvider=dt;exports.createRenderTemplate=Ae;exports.getDevV1PacketMtime=je;exports.getDevV2PacketMtime=de;exports.initDriverKit=Jt;exports.loadTemplate=pe;exports.prepareTemplateSpec=Pt;Object.keys(F).forEach(o=>{o!=="default"&&!Object.prototype.hasOwnProperty.call(exports,o)&&Object.defineProperty(exports,o,{enumerable:!0,get:()=>F[o]})});Object.keys(Y).forEach(o=>{o!=="default"&&!Object.prototype.hasOwnProperty.call(exports,o)&&Object.defineProperty(exports,o,{enumerable:!0,get:()=>Y[o]})});Object.keys(u).forEach(o=>{o!=="default"&&!Object.prototype.hasOwnProperty.call(exports,o)&&Object.defineProperty(exports,o,{enumerable:!0,get:()=>u[o]})});
|
|
2
2
|
//# sourceMappingURL=index.js.map
|