@milaboratories/pl-middle-layer 1.10.49 → 1.11.0

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/index.js CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";var Jt=Object.defineProperty;var Mt=(o,e,t)=>e in o?Jt(o,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):o[e]=t;var p=(o,e,t)=>Mt(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"),Kt=require("yaml"),h=require("@milaboratories/ts-helpers"),Ut=require("node:fs/promises"),$t=require("@milaboratories/resolve-helper"),u=require("@milaboratories/pl-client"),Be=require("@milaboratories/pl-tree"),S=require("@milaboratories/computable"),K=require("node:crypto"),nt=require("denque"),Gt=require("@platforma-sdk/workflow-tengo"),Te=require("canonicalize"),Ht=require("node:assert"),ne=require("quickjs-emscripten"),_t=require("node:timers/promises"),qt=require("node:os"),A=require("@milaboratories/pl-drivers"),zt=require("@milaboratories/pframes-node");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 Wt=at(Ut),ct=at(qt);async function _e(o){try{return await Wt.stat(o,{bigint:!0})}catch(e){if(e.code==="ENOENT")return;throw e}}const Yt=[T.RegistryV1.PlPackageYamlConfigFile],Qt=[T.RegistryV1.PlPackageJsonConfigFile],De=["backend","dist","tengo","tpl","main.plj.gz"],Ee=["config","dist","config.json"],lt=["frontend","dist"],qe="block-model/dist/config.json",Zt="block-ui/package.json",Xt=[De,Ee,Yt,Qt,lt];async function er(o){return await _e(N.join(o,...Ee))!==void 0||await _e(N.join(o,...De))!==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 er(o))return{workflow:N.join(o,...De),config:N.join(o,...Ee),ui:N.join(o,...lt)};{const t=me(o,qe),r=me(o,qe),s=me(o,Zt);return{workflow:t,config:r,ui:N.resolve(s,"..","dist")}}}async function tr(o){try{return await x.promises.readFile(o,"utf8")}catch(e){if(e.code==="ENOENT")return;throw e}}async function rr(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 Xt){const r=N.join(o,...t),s=await rr(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 or{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}:{},n=await(await G.request(`${r.url}/${T.RegistryV1.GlobalOverviewPath}`,s)).body.json();for(const a of n){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 tr(N.join(c,T.RegistryV1.PlPackageYamlConfigFile));if(l!==void 0){const d=T.RegistryV1.PlPackageConfigData.parse(Kt.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 ut{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 sr={type:"remote-v2",url:"https://blocks.pl-open.science/"},ir={type:"remote-v1",url:"https://block.registry.platforma.bio/releases"},nr={type:"remote-v1",url:"https://block.registry.platforma.bio/dev"},ar={groups:[{id:"default",label:"Default",blocks:[]}]},cr={stagingRefreshTimestamp:0,blocksInLimbo:[]},lr={label:"New Project"},ur={name:"UserProject",version:"2"},dt="SchemaVersion",pt="1",xe="ProjectCreated",Z="ProjectLastModified",X="ProjectMeta",_="ProjectStructure",ae="BlockRenderingState",dr="BlockFrontendState/",pr=/^BlockFrontendState\/(?<blockid>.*)$/;function we(o){return`${dr}${o}`}const gr="BlockArgsAuthor/";function Se(o){return`${gr}${o}`}const ke="ProjectStructureAuthor";function hr(o){const e=o.match(pr);if(e!==null)return e.groups.blockid}const fr="__serviceTemplate_";function Pe(o){return`${fr}${o}`}function P(o,e){return`${o}-${e}`}const mr=/^(?<blockId>.*)-(?<fieldName>blockPack|prodArgs|currentArgs|prodCtx|prodUiCtx|prodOutput|prodCtxPrevious|prodUiCtxPrevious|prodOutputPrevious|stagingCtx|stagingUiCtx|stagingOutput|stagingCtxPrevious|stagingUiCtxPrevious|stagingOutputPrevious)$/;function vr(o){const e=o.match(mr);if(e===null)return;const{blockId:t,fieldName:r}=e.groups;return{blockId:t,fieldName:r}}const yr="projects",gt={name:"Projects",version:"1"},br=o=>u.resourceTypesEqual(o.type,gt)?o.fields:[];async function wr(o,e,t,r){const s=await Be.SynchronizedTreeState.init(o,e,{...r.ops.defaultTreeOptions,pruning:br},r.logger);return{computable:S.Computable.make(n=>{const a=n.accessor(s.entry()).node(),c=t.getValue(n);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 Sr={name:"EphRenderTemplate",version:"1"},kr={name:"RenderTemplate",version:"1"};function Ae(o,e,t,r,s){if(s.length===0)throw new Error("Zero output names provided");const i=t?o.createEphemeral(Sr):o.createStruct(kr),n=u.field(i,"template"),a=u.field(i,"inputs");return o.createField(n,"Input",e),o.createField(a,"Input",u.Pl.createPlMap(o,r,t)),o.lockInputs(i),u.Pl.futureRecord(o,i,s,"Output","outputs/")}const Pr={name:"BContextEnd",version:"1"},Cr={name:"BContext",version:"1"},Fr="id",Rr="parent/",Or=["context","result"];function We(o,e,t){return Ae(o,e,!0,t,Or)}function Br(o){const e=o.createEphemeral(Pr);return o.lock(e),e}function Tr(o,e){if(e.length===0)return Br(o);if(e.length===1)return e[0];const t=o.createEphemeral(Cr);o.createField(u.field(t,Fr),"Input",u.Pl.createPlString(o,K.randomUUID()));for(let r=0;r<e.length;r++)o.createField(u.field(t,`${Rr}${r}`),"Input",e[r]);return o.lock(t),t}const ht={name:"TengoTemplateGet",version:"1"},ft="registry",mt="templateURI",vt="template",yt={name:"TengoTemplatePack",version:"1"},bt={name:"TengoTemplatePackConvert",version:"1"},wt="templatePack",St="template";async function kt(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 Dr(o,e){const t=o.createStruct(ht),r=u.field(t,ft),s=u.field(t,mt),i=u.field(t,vt);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)))),i}function Er(o,e){const t=o.createValue(yt,e.content),r=o.createStruct(bt),s=u.field(r,wt),i=u.field(r,St);return o.setField(s,t),i}function pe(o,e){switch(e.type){case"from-registry":return Dr(o,e);case"explicit":return Er(o,e);default:return h.assertNever(e)}}const Ie={name:"Frontend/FromUrl",version:"1"},Ne={name:"Frontend/FromFolder",version:"1"};function jr(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 xr={name:"BlockPackCustom",version:"1"},Pt="template",Ct="frontend";function Ye(o){return o.endsWith("/")?o:`${o}/`}class Ar{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")),i=t.ui;return{type:"explicit",template:{type:"explicit",content:r},config:s,frontend:{type:"local",path:i,signature:this.signer.sign(i)},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),i=t.components.ui.folder,n={...e};return e.mtime===void 0&&(n.mtime=await de(t)),{type:"explicit",template:{type:"explicit",content:s},config:r,frontend:{type:"local",path:i,signature:this.signer.sign(i)},source:n}}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`,i=await G.request(s,t);if(i.statusCode!==200)throw new Error(`Block not found in registry (url = ${s} ; code = ${i.statusCode}): `+JSON.stringify(e));const n=new Uint8Array(await i.body.arrayBuffer()),c=await(await G.request(`${r}/config.json`,t)).body.json();return{type:"explicit",template:{type:"explicit",content:n},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),i=async()=>await(await G.request(s.model.url,t)).body.json(),n=async()=>await(await G.request(s.workflow.main.url,t)).body.arrayBuffer(),[a,c]=await Promise.all([i(),n()]);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 Ir(o,e){const t={config:e.config,source:e.source},r=o.createStruct(xr,JSON.stringify(t));return o.createField(u.field(r,Pt),"Input",pe(o,e.template)),o.createField(u.field(r,Ct),"Input",jr(o,e.frontend)),o.lock(r),r}function Qe(o,e){switch(e.type){case"explicit":return Ir(o,e);default:return h.assertNever(e.type)}}function oe(o,e){return{__isRef:!0,blockId:o,name:e}}function Nr(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(Nr(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 Vr(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 Ft{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 i=new Set(s);for(;s.length>0;){let n=[];for(const a of s){const c=this.nodes.get(a);r(c),c[e].forEach(l=>{i.has(l)||(i.add(l),n.push(l))})}s=n}}}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 Ft(e)}function se(o,e){const t=new Map,r=new Set;for(const{id:s}of V(o)){const i=e(s);if(i===void 0)continue;const n=Vr(i,r),a={id:s,missingReferences:n.missingReferences,upstream:n.upstreams,downstream:new Set};t.set(s,a),n.upstreams.forEach(c=>t.get(c).downstream.add(s)),r.add(s)}return new Ft(t)}function Lr(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(i=>{const n=e.nodes.get(i.id);n===void 0?t.add(i.id):(!Lr(i.upstream,n.upstream)||Re(i.upstream,s))&&s.add(i.id)}),e.nodes.forEach(i=>{o.nodes.has(i.id)?Re(i.upstream,s)&&s.add(i.id):r.add(i.id)}),{onlyInA:t,onlyInB:r,different:s}}let ve;async function Rt(){if(ve===void 0){const o=await kt(Gt.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 Jr(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 i=o();return r!==i&&(r=i,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),Pt,"Input")}}const Mr=o=>{throw new Error(`No new block info for ${o}`)};class ce{constructor(e,t,r,s,i,n,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=i,this.meta=n,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,i){this.setBlockFieldObj(e,t,{ref:r,status:s,value:i})}deleteBlockFields(e,...t){let r=!1;const s=this.getBlockInfo(e);for(const i of t){const n=s.fields;i in n&&(this.tx.removeField(u.field(this.rid,P(e,i))),delete n[i],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,i;const t=this.getBlockInfo(e).fields;((r=t.stagingOutput)==null?void 0:r.status)==="Ready"&&((s=t.stagingCtx)==null?void 0:s.status)==="Ready"&&((i=t.stagingUiCtx)==null?void 0:i.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,i;const t=this.getBlockInfo(e).fields;((r=t.prodOutput)==null?void 0:r.status)==="Ready"&&((s=t.prodCtx)==null?void 0:s.status)==="Ready"&&((i=t.prodUiCtx)==null?void 0:i.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 i=this.getBlockInfo(r);JSON.parse(s);const n=Buffer.from(s);if(Buffer.compare(i.fields.currentArgs.value,n)===0)continue;const a=this.tx.createValue(u.Pl.JsonObject,n);this.setBlockField(r,"currentArgs",a,"Ready",n),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 i of V(r))if(i.id===e){i.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 i=this.getBlockInfo(s);if(i.fields[t]===void 0||i.fields[t].ref===void 0)throw new Error("One of the upstreams staging is not rendered.");r.push(u.Pl.unwrapHolder(this.tx,i.fields[t].ref))}),Tr(this.tx,r)}exportCtx(e){return Jr(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),i=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,i.context),"NotReady"),this.setBlockField(e,"stagingUiCtx",this.exportCtx(i.context),"NotReady"),this.setBlockField(e,"stagingOutput",i.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),i=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,i.context),"NotReady"),this.setBlockField(e,"prodUiCtx",this.exportCtx(i.context),"NotReady"),this.setBlockField(e,"prodOutput",i.result,"NotReady"),this.setBlockFieldObj(e,"prodArgs",t.fields.currentArgs),this.blocksInLimbo.delete(e)&&(this.renderingStateChanged=!0)}updateStructure(e,t=Mr){const r=this.getStagingGraph(),s=this.getActualProductionGraph(),i=Fe(e),n=se(e,l=>{var d;return(d=this.blockInfos.get(l))==null?void 0:d.actualProductionInputs}),a=Ze(r,i),c=Ze(s,n);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 i=!1;for(const n of s.groups){const a=n.blocks.findIndex(c=>c.id===r);if(!(a<0)){n.blocks.splice(a,0,e),i=!0;break}}if(!i)throw new Error(`Can't find element with id: ${r}`)}this.updateStructure(s,i=>{if(i!==e.id)throw new Error("Unexpected");return t})}deleteBlock(e){const t=this.structure;let r=!1;for(const s of t.groups){const i=s.blocks.findIndex(n=>n.id===e);if(!(i<0)){s.blocks.splice(i,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:i})=>this.resetStaging(i)),s.productionRendered&&this.getActualProductionGraph().traverse("downstream",[e],({id:i})=>this.resetOrLimboProduction(i)),this.updateLastModified()}renderProduction(e,t=!1){const r=new Set(e),s=this.getPendingProductionGraph();if(t)s.traverse("upstream",e,n=>{r.add(n.id)});else for(const n of r){const a=s.nodes.get(n);if(a===void 0)throw new Error(`Can't find block with id: ${n}`);for(const c of a.upstream)if(!r.has(c))throw new Error("Can't render blocks not including all upstreams.")}const i=new Set;for(const n of V(this.structure)){if(!r.has(n.id))continue;let a=this.getBlockInfo(n.id).requireProductionRendering||this.blocksInLimbo.has(n.id);if(!a){for(const c of s.nodes.get(n.id).upstream)if(i.has(c)){a=!0;break}}a&&(this.renderProductionFor(n.id),i.add(n.id))}return s.traverse("downstream",[...i],n=>{i.has(n.id)||this.resetOrLimboProduction(n.id)}),i.size>0&&this.updateLastModified(),i}stopProduction(...e){var n,a;const t=this.getActualProductionGraph(),r=new nt(e),s=new Set(e),i=[];for(;!r.isEmpty();){const c=r.shift(),l=this.getBlockInfo(c).fields;if(!(((n=l.prodOutput)==null?void 0:n.status)==="Ready"&&((a=l.prodCtx)==null?void 0:a.status)==="Ready")&&this.deleteBlockFields(c,"prodOutput","prodCtx","prodUiCtx","prodArgs")){i.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",...i))this.resetOrLimboProduction(c)}traverseWithStagingLag(e){const t=new Map;this.getStagingGraph().nodes.forEach(s=>{let n=this.getBlockInfo(s.id).stagingRendered?0:1;s.upstream.forEach(a=>{const c=t.get(a);c!==0&&(n=Math.max(c+1,n))}),e(s.id,n),t.set(s.id,n)})}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((i,n)=>{n!==0&&(r===void 0||n<=r)&&(this.renderStagingFor(i),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,i,n;((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"),((i=t.fields.stagingCtx)==null?void 0:i.status)==="Ready"&&((n=t.fields.stagingOutput)==null?void 0:n.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),i=e.getKValueJson(t,dt),n=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,B,{stagingRefreshTimestamp:L,blocksInLimbo:U},ee]=await Promise.all([s,i,n,a,c,l,d]);if(f!==pt)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 O=vr(w.name);if(O===void 0)continue;let C=H.get(O.blockId);C===void 0&&(C={id:O.blockId,fields:{}},H.set(O.blockId,C)),C.fields[O.fieldName]=u.isNullResourceId(w.value)?{modCount:0}:{modCount:0,ref:w.value}}const q=await Rt(),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 O=hr(w.key);O!==void 0&&D.set(O,w.value)}const R=[];H.forEach(({id:w,fields:O})=>{for(const[,C]of Object.entries(O))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,O]of R){const C=await O;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:O})=>$.set(w,new Xe(w,O)));const J=new Set;for(const w of V(B)){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,B,z,j,$,D,M);return re.fixProblems(),re}}async function Kr(o,e=lr){const t=o.createEphemeral(ur);o.lock(t);const r=String(Date.now());o.setKValue(t,dt,JSON.stringify(pt)),o.setKValue(t,xe,r),o.setKValue(t,Z,r),o.setKValue(t,X,JSON.stringify(e)),o.setKValue(t,_,JSON.stringify(ar)),o.setKValue(t,ae,JSON.stringify(cr));const s=await Rt();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 i=await ce.load(s,e,t),n=await r(i);return i.wasModified&&(i.save(),await s.commit()),n});{const s=await ce.load(o,e,t),i=await r(s);return s.save(),i}}function*Ur(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 $r(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 Gr=u.resourceType("PColumnData/JsonPartitioned","1"),Hr=u.resourceType("PColumnData/Partitioned/JsonPartitioned","1"),_r=u.resourceType("PColumnData/BinaryPartitioned","1"),qr=u.resourceType("PColumnData/Partitioned/BinaryPartitioned","1"),zr=u.resourceType("PColumnData/Json","1");function Wr(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,zr)){const t=e;return{type:"Json",keyLength:t.keyLength,data:t.data}}else if(u.resourceTypesEqual(o.resourceType,Gr)){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,Hr)){const t=e,r={};for(const s of o.listInputFields()){const i=o.traverse({field:s,errorIfFieldNotSet:!0}),n=i.listInputFields();if(n===void 0)throw new Error(`no partition keys for super key ${s}`);for(const a of n){const c=JSON.stringify([...JSON.parse(s),...JSON.parse(a)]);r[c]=i.traverse({field:a,errorIfFieldNotSet:!0}).resourceInfo}}return{type:"JsonPartitioned",partitionKeyLength:t.superPartitionKeyLength+t.partitionKeyLength,parts:r}}else if(u.resourceTypesEqual(o.resourceType,_r)){const t=e,r={};for(const s of o.listInputFields())if(s.endsWith(".index")){const i=s.slice(0,s.length-6);let n=r[i];n===void 0&&(n={},r[i]=n),n.index=o.traverse({field:s,errorIfFieldNotSet:!0}).resourceInfo}else if(s.endsWith(".values")){const i=s.slice(0,s.length-7);let n=r[i];n===void 0&&(n={},r[i]=n),n.values=o.traverse({field:s,errorIfFieldNotSet:!0}).resourceInfo}else throw new Error(`unrecognized part field name: ${s}`);for(const[s,i]of Object.entries(r)){if(i.index===void 0)throw new Error(`no index for part ${s}`);if(i.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,qr)){const t=e,r={};for(const s of o.listInputFields()){const i=o.traverse({field:s,errorIfFieldNotSet:!0}),n=i.listInputFields();if(n===void 0)throw new Error(`no partition keys for super key ${s}`);for(const a of n)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=i.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=i.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 Bt(o,e=!0,t=!1,r=""){var a,c,l;const s=/^(?<name>.*)\.(?<type>spec|data)$/,i=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=i.get(f);switch(b===void 0&&(b={},i.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 n=o.getInputsLocked();if(n)for(const[,d]of i)d.data===void 0&&(d.hasData=!1);return{locked:n,results:i}}function Yr(o,e=!0,t=""){if(!o.getIsReadyOrError())throw new Error("resource is not ready");const r=Bt(o,e,!1,t);Ht(r.locked);const s={};for(const[i,n]of r.results){if(n.spec===void 0)throw new Error(`no spec for key ${i}`);if(n.hasData!==!0||n.data===void 0)throw new Error(`no data for key ${i}`);const a=n.data();if(a===void 0)throw new Error(`no data for key ${i}`);if(!a.ok)throw new Be.PlError(a.error);s[i]={id:Ot(n.spec,a.value),spec:n.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 i of[s.prod,s.staging])if(i!==void 0){if(!i.locked){r=!1;break e}for(const n of i.results.values())if(n.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=n=>{r===void 0&&(r=n),t=!1},i=(n,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(n,a),obj:{id:l.ok?Ot(c.spec,l.value):void 0,spec:c.spec,data:l}}):s(`no_data:${n}:${a}`)}};for(const[n,a]of this.blocks){const c=new Set;if(a.prod!==void 0){a.prod.locked||s(`prod_not_locked:${n}`);for(const[l,d]of a.prod.results)c.add(l),i(n,l,d)}if(a.staging!==void 0){a.staging.locked||s(`staging_not_locked:${n}`);for(const[l,d]of a.staging.results)c.has(l)||i(n,l,d)}}return{entries:e,isComplete:t,instabilityMarker:r}}getSpecs(){const e=[];let t=!0,r;const s=i=>{r===void 0&&(r=i),t=!1};for(const[i,n]of this.blocks){const a=new Set;if(n.staging!==void 0){n.staging.locked||s(`staging_not_locked:${i}`);for(const[c,l]of n.staging.results)l.spec!==void 0&&(e.push({ref:oe(i,c),obj:l.spec}),a.add(c))}else s(`staging_not_rendered:${i}`);if(n.prod!==void 0){n.prod.locked||s(`prod_not_locked:${i}`);for(const[c,l]of n.prod.results)a.has(c)||l.spec!==void 0&&e.push({ref:oe(i,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,i=n=>{for(const[a,c]of n.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&&i(r.staging),r.prod!==void 0&&i(r.prod)}return t}static create(e,t,r){const s=e.accessor(t).node(),i=h.notEmpty(s.getKeyValueAsJson(_)),a=Fe(i).traverseIds("upstream",r),c=new Map;for(const l of V(i)){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 Bt(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:i=>{const n=i.accessor(t).node(),a=h.notEmpty(n.getKeyValueAsJson(_)),c=new Map;for(const l of V(a))c.set(l.id,l);return c}}}function Tt(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 i;const s=(i=r.accessor(t).node({ignoreError:!0}).traverse({field:P(e,"stagingOutput"),ignoreError:!0}))==null?void 0:i.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 Qr(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 Zr(o){switch(o.type){case"GetImportProgress":return!0;default:return!1}}function Xr(o){for(const e of E(o))if(Zr(e))return!0;return!1}function ge(o){return{type:"ReturnResult",result:o}}function m(o){return()=>ge(o)}const eo=o=>{const e={};for(const[t,r]of Object.entries(o))e[t]=r;return m(e)},to=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)},ro=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 Dt(o,e){const t={},r=o.length;for(let s=0;s<r;s++)t[String(s)]=e(o[s]);return t}function oo(o,e){return t=>{const r=t.source;return r===void 0?m(void 0):()=>({type:"ScheduleSubroutine",subroutine:Et(r.length),args:Dt(r,s=>y({...o,[e.itVar]:s},e.mapping))})}}function Et(o){return e=>{const t=[];for(let r=0;r<o;r++)t.push(e[String(r)]);return m(t)}}function so(o,e){return t=>{const r=t.source;if(r===void 0)return m(void 0);const s={};for(const[i,n]of Object.entries(r)){const a={...o,[e.itVar]:n};s[i]=y(a,e.mapping)}return()=>({type:"ScheduleSubroutine",subroutine:io,args:s})}}const io=o=>m(o),no=o=>{const e=o.arg;return m(e===void 0?void 0:e.length===0)},ao=o=>{const e=o.operand;return m(e===void 0?void 0:!e)},co=o=>{const e=o.operand1,t=o.operand2;return m(e===void 0||t===void 0?void 0:e&&t)},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.source;return e===void 0?m(void 0):({cCtx:t})=>{var r;return ge((r=t.accessor(e).node())==null?void 0:r.getDataAsJson())}},po=o=>{const e=o.source,t=o.field;return m(e===void 0||t===void 0?void 0:e[t])};function go(o,e){return t=>{const r=t.source;return r===void 0?m(void 0):({cCtx:s})=>{const i=s.accessor(r).node(),n={};for(const a of i.listInputFields()){const c=i.traverse(a);if(c===void 0)n[a]=m(void 0);else{const l={...o,[e.itVar]:c.persist()};n[a]=y(l,e.mapping)}}return{type:"ScheduleSubroutine",subroutine:ho,args:n}}}}const ho=o=>m(o),fo=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)}})})},mo=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 i=>i===void 0?void 0:(await r.blobDriver.getContent(i.handle)).toString()})}}},vo=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())}})})},yo=o=>{const e=o.source;return e===void 0?m(void 0):({drivers:t})=>({type:"ScheduleComputable",computable:t.blobDriver.getDownloadedBlob(e)})},bo=o=>{const e=o.source;return e===void 0?m(void 0):({drivers:t})=>({type:"ScheduleComputable",computable:t.blobDriver.getOnDemandBlob(e)})},wo=o=>{const e=o.source;return e===void 0?m(void 0):({drivers:t})=>({type:"ScheduleComputable",computable:t.uploadDriver.getProgressId(e)})},So=o=>e=>{const t=e.source;return t===void 0?m(void 0):({drivers:r})=>({type:"ScheduleComputable",computable:r.logDriver.getLastLogs(t,o)})},ko=o=>e=>{const t=e.source;return t===void 0?m(void 0):({drivers:r})=>({type:"ScheduleComputable",computable:r.logDriver.getProgressLog(t,o)})},Po=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:It(r,o,e.cfg)});case"Immediate":return m(e.value);case"GetJsonField":return()=>({type:"ScheduleSubroutine",subroutine:po,args:{source:y(o,e.source),field:y(o,e.field)}});case"MapArrayValues":return()=>({type:"ScheduleSubroutine",subroutine:oo(o,e),args:{source:y(o,e.source)}});case"MapRecordValues":return()=>({type:"ScheduleSubroutine",subroutine:so(o,e),args:{source:y(o,e.source)}});case"MakeObject":return()=>({type:"ScheduleSubroutine",subroutine:eo,args:Qr(e.template,r=>y(o,r))});case"MakeArray":return()=>({type:"ScheduleSubroutine",subroutine:Et(e.template.length),args:Dt(e.template,r=>y(o,r))});case"Flatten":return()=>({type:"ScheduleSubroutine",subroutine:to,args:{source:y(o,e.source)}});case"IsEmpty":return()=>({type:"ScheduleSubroutine",subroutine:no,args:{arg:y(o,e.arg)}});case"Not":return()=>({type:"ScheduleSubroutine",subroutine:ao,args:{operand:y(o,e.operand)}});case"And":return()=>({type:"ScheduleSubroutine",subroutine:co,args:{operand1:y(o,e.operand1),operand2:y(o,e.operand2)}});case"Or":return()=>({type:"ScheduleSubroutine",subroutine:lo,args:{operand1:y(o,e.operand1),operand2:y(o,e.operand2)}});case"MapResourceFields":return()=>({type:"ScheduleSubroutine",subroutine:go(o,e),args:{source:y(o,e.source)}});case"GetResourceField":return()=>({type:"ScheduleSubroutine",subroutine:ro,args:{source:y(o,e.source),field:y(o,e.field)}});case"GetResourceValueAsJson":return()=>({type:"ScheduleSubroutine",subroutine:uo,args:{source:y(o,e.source)}});case"GetBlobContent":return()=>({type:"ScheduleSubroutine",subroutine:fo,args:{source:y(o,e.source)}});case"GetBlobContentAsString":return()=>({type:"ScheduleSubroutine",subroutine:mo,args:{source:y(o,e.source)}});case"GetBlobContentAsJson":return()=>({type:"ScheduleSubroutine",subroutine:vo,args:{source:y(o,e.source)}});case"GetDownloadedBlobContent":return()=>({type:"ScheduleSubroutine",subroutine:yo,args:{source:y(o,e.source)}});case"GetOnDemandBlobContent":return()=>({type:"ScheduleSubroutine",subroutine:bo,args:{source:y(o,e.source)}});case"GetImportProgress":return()=>({type:"ScheduleSubroutine",subroutine:wo,args:{source:y(o,e.source)}});case"GetLastLogs":return()=>({type:"ScheduleSubroutine",subroutine:So(e.lines),args:{source:y(o,e.source)}});case"GetProgressLog":return()=>({type:"ScheduleSubroutine",subroutine:ko(e.patternToSearch),args:{source:y(o,e.source)}});case"GetLogHandle":return()=>({type:"ScheduleSubroutine",subroutine:Po,args:{source:y(o,e.source)}});default:return h.assertNever(e)}}const Co=["$prod","$staging"];function Fo(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 jt=Symbol(),xt="return",Ro={op:jt,arg:xt};function Oo(o){return o.op==jt&&o.arg==xt}function Bo(){return{pendingSubroutines:new Map}}function rt(o,e,t,r){const s=new nt(t),i=(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},n=[];e:for(;s.length>0;){const a=s.shift(),c=a.operation(o);switch(c.type){case"ReturnResult":if(!i(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");n.push({destination:a.destination,computable:c.computable});break;default:h.assertNever(c)}}return n}function At(o,e,t,r={}){return It(o,Fo(e),t,r)}function It(o,e,t,r={}){const s=Te({ctx:Object.fromEntries(Object.entries(e).filter(([i])=>Co.indexOf(i)===-1)),cfg:t});return S.Computable.makeRaw(i=>{const n={drivers:o,cCtx:i},a=Bo();return{ir:rt(n,a,[{destination:Ro,operation:y(e,t)}],!0),async postprocessValue(l,d){const g=[];for(const B of l)g.push({destination:B.destination,operation:m(B.computable)});const f={drivers:o,get cCtx(){throw new Error("asynchronous operations are forbidden in this context")}},v=new Map;for(const[B,L]of a.pendingSubroutines)v.set(B,{...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 To(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,i){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=i,this.callbackRegistry=this.scope.manage(this.vm.newObject()),this.fnJSONStringify=e.manage(t.getProp(t.global,"JSON").consume(n=>t.getProp(n,"stringify"))),t.typeof(this.fnJSONStringify)!=="function")throw new Error("JSON.stringify() not found.");if(this.fnJSONParse=e.manage(t.getProp(t.global,"JSON").consume(n=>t.getProp(n,"parse"))),t.typeof(this.fnJSONParse)!=="function")throw new Error("JSON.parse() not found.");this.meta=r.blockMeta(i),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 ne.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(i=>this.exportObjectUniversal(i,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 i=this.blockCtx[s];if(i===void 0)throw new Error("Staging context not available");const n=i(this.computableCtx);n?this.accessors.set(r,this.computableCtx.accessor(n).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 i=Yr(s,t,r),n={};for(const[a,c]of Object.entries(i))n[a]=F.mapPObjectData(c,l=>this.wrapAccessor(l));return n}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(To(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(){ne.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,i)=>{this.vm.newFunction(s,i).consume(n=>this.vm.setProp(t,s,n))};r("getAccessorHandleByName",s=>this.exportSingleValue(this.getAccessorHandleByName(this.vm.getString(s)),void 0)),r("resolveWithCommon",(s,i,...n)=>this.exportSingleValue(this.resolveWithCommon(this.vm.getString(s),this.importObjectViaJson(i),...n.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,i)=>this.exportSingleValue(this.getKeyValueBase64(this.vm.getString(s),this.vm.getString(i)),void 0)),r("getKeyValueAsString",(s,i)=>this.exportSingleValue(this.getKeyValueAsString(this.vm.getString(s),this.vm.getString(i)),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,i,n)=>this.exportObjectUniversal(this.parsePObjectCollection(this.vm.getString(s),this.vm.dump(i),this.vm.getString(n)),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,i)=>this.exportSingleValue(this.getLastLogs(this.vm.getString(s),this.vm.getNumber(i)),void 0)),r("getProgressLog",(s,i)=>this.exportSingleValue(this.getProgressLog(this.vm.getString(s),this.vm.getString(i)),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 Do(o,e,t,r,s={}){return S.Computable.makeRaw(i=>{const n=new ne.Scope;i.addOnDestroy(()=>n.dispose());const a=n.manage(o.quickJs.newRuntime());a.setMemoryLimit(1024*640),a.setMaxStackSize(1024*320);const c=n.manage(a.newContext()),l=new ue(n,c,e,o,i);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 Oe(o,e,t,r,s={}){if(F.isFunctionHandle(t)){if(r===void 0)throw new Error("No code bundle.");return Do(o,e,t,r,s)}else return At(o.driverKit,e,t,s)}function Eo(o,e,t){return S.Computable.make(r=>{var b,B,L,U,ee,H,q,te;const s=r.accessor(o).node(),i=h.notEmpty(s.getKeyValueAsJson(xe)),n=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||((B=R.value)==null?void 0:B.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:O}=le(J==null?void 0:J.config,fe=>{const W=F.normalizeBlockConfig(fe),He=Le(s,k);return{sections:Oe(t,He,W.sections,W.code),inputsValid:Oe(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:O,navigationState:e.getState(k)}});return{meta:a,created:new Date(i),lastModified:new Date(n),authorMarker:s.getKeyValueAsJson(ke),blocks:v}},{postprocessValue:r=>{const s=new Set,i=new Set;return{...r,blocks:r.blocks.map(n=>{n.inputsValid||s.add(n.id),n.stale&&i.add(n.id);const a=n.stale||n.upstreams.findIndex(l=>i.has(l))!==-1,c=a&&!!n.inputsValid&&!n.missingReference&&n.upstreams.findIndex(l=>s.has(l))===-1;return{...n,canRun:c,stale:a}})}}}).withStableType()}function Nt(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 jo(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 xo(o,e){if(o!==void 0)return S.Computable.make(t=>jo(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 Ao(o,e,t){return S.Computable.make(r=>{var a;const s=r.accessor(o).node(),i=Nt(s,e),n=(a=s.traverse({field:P(e,"blockPack"),assertFieldType:"Dynamic"},{field:u.Pl.HolderRefField,assertFieldType:"Input",errorIfFieldNotFound:!0},{field:Ct,assertFieldType:"Input"}))==null?void 0:a.persist();return{path:xo(n,t),sdkVersion:i==null?void 0:i.sdkVersion}},{mode:"StableOnlyLive"})}function Io(o,e,t){return S.Computable.make(r=>{const s=r.accessor(o).node(),i=Le(s,e);return{author:s.getKeyValueAsJson(Se(e)),args:JSON.parse(i.args),ui:i.uiState!==void 0?JSON.parse(i.uiState):void 0}},{key:"inputs#"+u.resourceIdToString(o.rid)+e})}function No(o,e,t){return S.Computable.make(r=>{const s=r.accessor(o).node(),i=Tt(s,e),n=Nt(s,e);return le(n,a=>{const c={};for(const[l,d]of Object.entries(a.outputs))c[l]=S.Computable.wrapError(Oe(t,i,d,a.code));return c})},{key:"outputs#"+u.resourceIdToString(o.rid)+e}).withStableType()}function Vo(o,e){return S.Computable.make(t=>{const r=t.accessor(o).node(),s=h.notEmpty(r.getKeyValueAsJson(_)),i=[];for(const{id:n,renderingMode:a}of V(s)){const c=r.traverse({field:P(n,"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)&&Xr(v)).map(v=>v);if(g.length===0)continue;const f=Tt(r,n);for(const v of g)i.push(S.Computable.wrapError(At(e.driverKit,f,v)))}return i})}class Lo{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 Lo);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=Eo(r.entry(),this.navigationStates,e).withPreCalculatedValueTree(),this.rid=t,this.refreshLoopResult=this.refreshLoop(),this.activeConfigs=Vo(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 _t.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,i=K.randomUUID()){const n=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:i,label:e,renderingMode:a.renderingMode},{args:JSON.stringify(a.initialArgs),blockPack:n},r)),await this.projectTree.refreshState(),i}async updateBlockPack(e,t,r=!1,s){const i=await this.env.bpPreparer.prepare(t),n=await this.env.bpPreparer.getBlockConfig(t);await I(this.env.pl,this.rid,s,a=>a.migrateBlockPack(e,i,r?JSON.stringify(n.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 i=s.groups[0];if(i.blocks.length!==e.length)throw new Error(`Lengh mismatch: ${i.blocks.length} !== ${e.length}`);if(new Set(e).size!==e.length)throw new Error("Repeated block ids");const n={groups:[{id:i.id,label:i.label,blocks:e.map(a=>{const c=i.blocks.find(l=>l.id===a);if(c===void 0)throw new Error(`Can't find block: ${a}`);return c})}]};r.updateStructure(n)}),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,i=>{i.setArgs([{blockId:e,args:JSON.stringify(t)}]),i.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),i=u.ensureResourceIdNotNull((await r.getField(u.field(s,u.Pl.HolderRefField))).value),n=await r.getResourceData(i,!1),a=JSON.parse(Buffer.from(h.notEmpty(n.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=No(this.projectTree.entry(),e,this.env),i={fullState:S.Computable.make(n=>({argsAndUiState:Io(this.projectTree.entry(),e),outputs:r,navigationState:this.navigationStates.getState(e)}),{postprocessValue:n=>({...n.argsAndUiState,outputs:n.outputs,navigationState:n.navigationState})}).withPreCalculatedValueTree()};return this.blockComputables.set(e,i),i}return t}getBlockState(e){return this.getBlockComputables(e).fullState}getBlockFrontend(e){const t=this.blockFrontends.get(e);if(t===void 0){const r=Ao(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 Be.SynchronizedTreeState.init(e.pl,t,e.ops.defaultTreeOptions,e.logger);return new he(e,t,r)}}const Je={logger:new h.ConsoleLoggerAdapter,platformLocalStorageNameToPath:{},localStorageNameToPath:{local:ct.homedir()},blobDriverOps:{cacheSoftSizeBytes:100*1024*1024,nConcurrentDownloads:10},uploadDriverOps:{nConcurrentPartUploads:10,nConcurrentGetProgresses:10,pollingInterval:1e3,stopPollingDelay:1e3},logStreamDriverOps:{nConcurrentGetLogs:10,pollingInterval:1e3,stopPollingDelay:1e3}},Vt={...Je,defaultTreeOptions:{pollingInterval:350,stopPollingDelay:2500},devBlockUpdateRecheckInterval:1e3,projectRefreshInterval:700,stagingRenderingRate:5},Jo={minDelay:1500},Mo="__no_updates__";class Ko extends S.PollComputablePool{constructor(t,r,s={}){super({...s,...Jo},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 Mo}}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 i=await de(s);return i===t.mtime?void 0:{...t,mtime:i}}catch(s){this.logger.warn(s);return}case"from-registry-v2":try{const i=(r=await this.registryProvider.getRegistry(t.registryUrl).getOverviewForSpec(t.id))==null?void 0:r.spec;if((i==null?void 0:i.type)!=="from-registry-v2")throw new Error("Unexpected");return Y.blockPackIdEquals(i.id,t.id)?void 0:i}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 it(o){return String(o.id)}class Uo{constructor(e,t){p(this,"pFrame",new zt.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)});this.blobDriver=e,this.columns=t,this.pFrame.setDataSource(this);for(const r of t){for(const i of Ur(r.data))this.blobIdToResource.set(it(i),i);const s=$r(r.data,it);try{this.pFrame.addColumnSpec(r.id,r.spec),this.pFrame.setColumnData(r.id,s)}catch(i){throw new Error(`Adding column ${r.id} to PFrame failed: ${i}; Spec: ${r.spec}, DataInfo: ${s}.`)}}}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 $o{constructor(e){p(this,"pFrames");p(this,"pTables");this.blobDriver=e,this.pFrames=new class extends st{constructor(t){super(),this.blobDriver=t}createNewResource(t){return new Uo(this.blobDriver,t)}calculateParamsKey(t){return Ho(t)}}(this.blobDriver),this.pTables=new class extends st{constructor(t){super(),this.pFrames=t}async createNewResource(t){const s=await this.pFrames.getByKey(t.pFrameHandle).pFrame.createTable({src:Q(t.def.src),filters:t.def.filters});return t.def.sorting.length!==0?s.sort(t.def.sorting):s}calculateParamsKey(t){return Go(t)}}(this.pFrames)}createPFrame(e,t){const r=e.map(i=>F.mapPObjectData(i,n=>Wr(n))),s=this.pFrames.acquire(r);return t.addOnDestroy(s.unref),s.key}createPTable(e,t){const r=this.createPFrame(_o(e.src),t),s=F.mapPTableDef(e,n=>n.id),i=this.pTables.acquire({def:s,pFrameHandle:r});return t.addOnDestroy(i.unref),i.key}async findColumns(e,t){const r={...t,compatibleWith:t.compatibleWith.length!==0?[{axesSpec:t.compatibleWith,qualifications:[]}]:[]};return{hits:(await this.pFrames.getByKey(e).pFrame.findColumns(r)).hits.map(s=>s.hit)}}async getColumnSpec(e,t){return this.pFrames.getByKey(e).pFrame.getColumnSpec(t)}async listColumns(e){return this.pFrames.getByKey(e).pFrame.listColumns()}async calculateTableData(e,t){let r=await this.pFrames.getByKey(e).pFrame.createTable({src:Q(t.src),filters:t.filters});if(t.sorting.length>0){const n=await r.sort(t.sorting);r.dispose(),r=n}const s=r.getSpec(),i=await r.getData([...s.keys()]);return r.dispose(),s.map((n,a)=>({spec:n,data:i[a]}))}async getUniqueValues(e,t){return 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){return(await this.pTables.getByKey(e)).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 Go(o){const e=K.createHash("sha256");return e.update(o.pFrameHandle),e.update(Te(o.def)),e.digest().toString("hex")}function Ho(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 _o(o){const e=new Map;return ie(o,e),[...e.values()]}function ie(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)ie(t,e);return;case"outer":ie(o.primary,e);for(const t of o.secondary)ie(t,e);return;default:h.assertNever(o)}}async function Lt(o,e){const t={...Je,...e};qo(t.logger,t);const r=new h.HmacSha256Signer(t.localSecret),s=A.createDownloadClient(t.logger,o,t.platformLocalStorageNameToPath),i=A.createLogsClient(o,t.logger),n=A.createUploadBlobClient(o,t.logger),a=A.createUploadProgressClient(o,t.logger),c=A.createLsFilesClient(o,t.logger),l=new A.DownloadDriver(t.logger,s,i,t.blobDownloadPath,r,t.blobDriverOps),d=new A.UploadDriver(t.logger,r,n,a,t.uploadDriverOps),g=new A.LogsStreamDriver(i,t.logStreamDriverOps),f=new A.LogsDriver(g,l),v=new A.LsDriver(t.logger,c,o,r,t.localStorageNameToPath),b=new $o(l);return{blobDriver:l,logDriver:f,lsDriver:v,signer:r,uploadDriver:d,pFrameDriver:b}}function qo(o,e){e.localStorageNameToPath.local!=ct.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,i,n,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=i,this.projectListTree=n,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 i=await Kr(s,e);return s.createField(u.field(this.projectListResourceId,t),"Dynamic",i),await s.commit(),await u.toGlobalResourceId(i)});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={...Vt,...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 B=u.field(b.clientRoot,yr);b.createField(B,"Dynamic");const L=await b.getField(B);if(u.isNullResourceId(L.value)){const U=b.createEphemeral(gt);return b.lock(U),b.setField(B,U),await b.commit(),await U.globalId}else return L.value}),i=r.logger,n=await Lt(e,r),a=new G.RetryAgent(e.httpDispatcher,{minTimeout:250,maxRetries:4}),c=new ut(a),l=new Ar(c,n.signer,a),d=new A.DownloadUrlDriver(i,e.httpDispatcher,r.frontendDownloadPath),g={pl:e,signer:n.signer,logger:i,httpDispatcher:e.httpDispatcher,retryHttpDispatcher:a,ops:r,bpPreparer:l,frontendDownloadDriver:d,driverKit:n,blockUpdateWatcher:new Ko(c,i,{minDelay:r.devBlockUpdateRecheckInterval,http:a}),quickJs:await ne.getQuickJS()},f=new S.WatchableValue([]),v=await wr(e,s,f,g);return new Me(g,n,n.signer,s,f,v.tree,c,v.computable)}}exports.BlockPackRegistry=or;exports.CentralBlockRegistry=sr;exports.DefaultDriverKitOps=Je;exports.DefaultMiddleLayerOps=Vt;exports.FrontendFromFolderResourceType=Ne;exports.FrontendFromUrlResourceType=Ie;exports.MiddleLayer=Me;exports.Project=he;exports.TengoTemplateGet=ht;exports.TengoTemplateGetRegistry=ft;exports.TengoTemplateGetTemplate=vt;exports.TengoTemplateGetTemplateURI=mt;exports.TengoTemplatePack=yt;exports.TengoTemplatePackConvert=bt;exports.TengoTemplatePackConvertTemplate=St;exports.TengoTemplatePackConvertTemplatePack=wt;exports.V1CentralDevSnapshotRegistry=nr;exports.V1CentralRegistry=ir;exports.V2RegistryProvider=ut;exports.createRenderTemplate=Ae;exports.getDevV1PacketMtime=je;exports.getDevV2PacketMtime=de;exports.initDriverKit=Lt;exports.loadTemplate=pe;exports.prepareTemplateSpec=kt;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 Kt=Object.defineProperty;var Ut=(o,e,t)=>e in o?Kt(o,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):o[e]=t;var p=(o,e,t)=>Ut(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"),$t=require("yaml"),f=require("@milaboratories/ts-helpers"),Gt=require("node:fs/promises"),Ht=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"),_t=require("@platforma-sdk/workflow-tengo"),De=require("canonicalize"),Wt=require("node:assert"),ie=require("quickjs-emscripten"),qt=require("node:timers/promises"),zt=require("node:os"),I=require("@milaboratories/pl-drivers"),Yt=require("@milaboratories/pframes-node");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 Qt=lt(Gt),ut=lt(zt);async function We(o){try{return await Qt.stat(o,{bigint:!0})}catch(e){if(e.code==="ENOENT")return;throw e}}const Zt=[T.RegistryV1.PlPackageYamlConfigFile],Xt=[T.RegistryV1.PlPackageJsonConfigFile],Ee=["backend","dist","tengo","tpl","main.plj.gz"],je=["config","dist","config.json"],dt=["frontend","dist"],qe="block-model/dist/config.json",er="block-ui/package.json",tr=[Ee,je,Zt,Xt,dt];async function rr(o){return await We(N.join(o,...je))!==void 0||await We(N.join(o,...Ee))!==void 0}function me(o,e){const t=Ht.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 rr(o))return{workflow:N.join(o,...Ee),config:N.join(o,...je),ui:N.join(o,...dt)};{const t=me(o,qe),r=me(o,qe),s=me(o,er);return{workflow:t,config:r,ui:N.resolve(s,"..","dist")}}}async function or(o){try{return await x.promises.readFile(o,"utf8")}catch(e){if(e.code==="ENOENT")return;throw e}}async function sr(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 tr){const r=N.join(o,...t),s=await sr(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 nr{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,h={organization:c,name:l,version:g};t.push({registryId:e.id,id:h,meta:{title:d.title??"No title",description:d.description??"No Description",organization:{name:c,url:"https://unknown.com"}},spec:{type:"from-registry-v1",id:h,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 or(N.join(c,T.RegistryV1.PlPackageYamlConfigFile));if(l!==void 0){const d=T.RegistryV1.PlPackageConfigData.parse($t.parse(l)),g=await xe(c),h={organization:d.organization,name:d.package,version:"DEV"};t.push({registryId:e.id,id:h,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 f.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 pt{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 ir={type:"remote-v2",url:"https://blocks.pl-open.science/"},ar={type:"remote-v1",url:"https://block.registry.platforma.bio/releases"},cr={type:"remote-v1",url:"https://block.registry.platforma.bio/dev"},lr={groups:[{id:"default",label:"Default",blocks:[]}]},ur={stagingRefreshTimestamp:0,blocksInLimbo:[]},dr={label:"New Project"},pr={name:"UserProject",version:"2"},gt="SchemaVersion",ft="1",Ie="ProjectCreated",Z="ProjectLastModified",X="ProjectMeta",_="ProjectStructure",ae="BlockRenderingState",gr="BlockFrontendState/",fr=/^BlockFrontendState\/(?<blockid>.*)$/;function we(o){return`${gr}${o}`}const hr="BlockArgsAuthor/";function Se(o){return`${hr}${o}`}const ke="ProjectStructureAuthor";function mr(o){const e=o.match(fr);if(e!==null)return e.groups.blockid}const vr="__serviceTemplate_";function Pe(o){return`${vr}${o}`}function P(o,e){return`${o}-${e}`}const yr=/^(?<blockId>.*)-(?<fieldName>blockPack|prodArgs|currentArgs|prodCtx|prodUiCtx|prodOutput|prodCtxPrevious|prodUiCtxPrevious|prodOutputPrevious|stagingCtx|stagingUiCtx|stagingOutput|stagingCtxPrevious|stagingUiCtxPrevious|stagingOutputPrevious)$/;function br(o){const e=o.match(yr);if(e===null)return;const{blockId:t,fieldName:r}=e.groups;return{blockId:t,fieldName:r}}const wr="projects",ht={name:"Projects",version:"1"},Sr=o=>u.resourceTypesEqual(o.type,ht)?o.fields:[];async function kr(o,e,t,r){const s=await Te.SynchronizedTreeState.init(o,e,{...r.ops.defaultTreeOptions,pruning:Sr},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 h=f.notEmpty(g.getKeyValueAsJson(X)),v=f.notEmpty(g.getKeyValueAsJson(Ie)),b=f.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:h})}return l.sort(d=>-d.lastModified.valueOf()),l}).withStableType(),tree:s}}const Pr={name:"EphRenderTemplate",version:"1"},Cr={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(Pr):o.createStruct(Cr),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 Fr={name:"BContextEnd",version:"1"},Rr={name:"BContext",version:"1"},Br="id",Or="parent/",Tr=["context","result"];function Ye(o,e,t){return Ae(o,e,!0,t,Tr)}function Dr(o){const e=o.createEphemeral(Fr);return o.lock(e),e}function Er(o,e){if(e.length===0)return Dr(o);if(e.length===1)return e[0];const t=o.createEphemeral(Rr);o.createField(u.field(t,Br),"Input",u.Pl.createPlString(o,K.randomUUID()));for(let r=0;r<e.length;r++)o.createField(u.field(t,`${Or}${r}`),"Input",e[r]);return o.lock(t),t}const mt={name:"TengoTemplateGet",version:"1"},vt="registry",yt="templateURI",bt="template",wt={name:"TengoTemplatePack",version:"1"},St={name:"TengoTemplatePackConvert",version:"1"},kt="templatePack",Pt="template";async function Ct(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 f.assertNever(o)}}function jr(o,e){const t=o.createStruct(mt),r=u.field(t,vt),s=u.field(t,yt),n=u.field(t,bt);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 xr(o,e){const t=o.createValue(wt,e.content),r=o.createStruct(St),s=u.field(r,kt),n=u.field(r,Pt);return o.setField(s,t),n}function pe(o,e){switch(e.type){case"from-registry":return jr(o,e);case"explicit":return xr(o,e);default:return f.assertNever(e)}}const Ne={name:"Frontend/FromUrl",version:"1"},Ve={name:"Frontend/FromFolder",version:"1"};function Ir(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 f.assertNever(e)}}const Ar={name:"BlockPackCustom",version:"1"},Ft="template",Rt="frontend";function Qe(o){return o.endsWith("/")?o:`${o}/`}class Nr{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 f.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 f.assertNever(e)}}}function Vr(o,e){const t={config:e.config,source:e.source},r=o.createStruct(Ar,JSON.stringify(t));return o.createField(u.field(r,Ft),"Input",pe(o,e.template)),o.createField(u.field(r,Rt),"Input",Ir(o,e.frontend)),o.lock(r),r}function Ze(o,e){switch(e.type){case"explicit":return Vr(o,e);default:return f.assertNever(e.type)}}function oe(o,e){return{__isRef:!0,blockId:o,name:e}}function Lr(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(Lr(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:f.assertNever(r)}}function Jr(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 Bt{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 Bt(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=Jr(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 Bt(t)}function Mr(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):(!Mr(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 Ot(){if(ve===void 0){const o=await Ct(_t.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 Kr(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),Ft,"Input")}}const Ur=o=>{throw new Error(`No new block info for ${o}`)};class ce{constructor(e,t,r,s,n,i,a,c,l,d,g,h){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=h}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 f.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))}),Er(this.tx,r)}exportCtx(e){return Kr(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=Ur){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),h=Ze(this.tx,g.blockPack);this.setBlockField(l,"blockPack",u.Pl.wrapInHolder(this.tx,h),"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,gt),i=e.getKValueJson(t,Z),a=e.getKValueJson(t,X),c=e.getKValueJson(t,_),l=e.getKValueJson(t,ae),d=e.listKeyValuesString(t),[g,h,v,b,O,{stagingRefreshTimestamp:L,blocksInLimbo:U},ee]=await Promise.all([s,n,i,a,c,l,d]);if(h!==ft)throw new Error(`Can't act on this project resource because it has a wrong schema version: ${h}`);const H=new Map;for(const w of g.fields){const B=br(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 W=await Ot(),te=Pe(W.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,W.spec)),e.createField(u.field(t,Pe(W.hash)),"Dynamic",M));const q={stagingRefreshTimestamp:L},j=new Set(U),D=new Map;for(const w of ee){const B=mr(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,h,v,b,O,q,j,$,D,M);return re.fixProblems(),re}}async function $r(o,e=dr){const t=o.createEphemeral(pr);o.lock(t);const r=String(Date.now());o.setKValue(t,gt,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(lr)),o.setKValue(t,ae,JSON.stringify(ur));const s=await Ot();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*Gr(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:f.assertNever(o)}}function tt(o,e){return Object.fromEntries(Object.entries(o).map(([t,r])=>[t,e(r,t)]))}function Hr(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:f.assertNever(o)}}const _r=u.resourceType("PColumnData/JsonPartitioned","1"),Wr=u.resourceType("PColumnData/Partitioned/JsonPartitioned","1"),qr=u.resourceType("PColumnData/BinaryPartitioned","1"),zr=u.resourceType("PColumnData/Partitioned/BinaryPartitioned","1"),Yr=u.resourceType("PColumnData/Json","1");function Qr(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,Yr)){const t=e;return{type:"Json",keyLength:t.keyLength,data:t.data}}else if(u.resourceTypesEqual(o.resourceType,_r)){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,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 Tt(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 Dt(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 h=f.notEmpty((a=g.groups)==null?void 0:a.name);if(!h.startsWith(r)){if(e)throw new Error(`unexpected field name ${d}`);continue}h=h.slice(r.length);const v=f.notEmpty((c=g.groups)==null?void 0:c.type);let b=n.get(h);switch(b===void 0&&(b={},n.set(h,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 Zr(o,e=!0,t=""){if(!o.getIsReadyOrError())throw new Error("resource is not ready");const r=Dt(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:Tt(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 f.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?Tt(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=f.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 Dt(e.value,!1,!0)}function Je(o,e){const t=o.persist(),r=f.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=f.notEmpty(i.getKeyValueAsJson(_)),c=new Map;for(const l of V(a))c.set(l.id,l);return c}}}function Et(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:f.assertNever(o)}}function Xr(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 eo(o){switch(o.type){case"GetImportProgress":return!0;default:return!1}}function to(o){for(const e of E(o))if(eo(e))return!0;return!1}function ge(o){return{type:"ReturnResult",result:o}}function m(o){return()=>ge(o)}const ro=o=>{const e={};for(const[t,r]of Object.entries(o))e[t]=r;return m(e)},oo=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)},so=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 jt(o,e){const t={},r=o.length;for(let s=0;s<r;s++)t[String(s)]=e(o[s]);return t}function no(o,e){return t=>{const r=t.source;return r===void 0?m(void 0):()=>({type:"ScheduleSubroutine",subroutine:xt(r.length),args:jt(r,s=>y({...o,[e.itVar]:s},e.mapping))})}}function xt(o){return e=>{const t=[];for(let r=0;r<o;r++)t.push(e[String(r)]);return m(t)}}function io(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:ao,args:s})}}const ao=o=>m(o),co=o=>{const e=o.arg;return m(e===void 0?void 0:e.length===0)},lo=o=>{const e=o.operand;return m(e===void 0?void 0:!e)},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.operand1,t=o.operand2;return m(e===void 0||t===void 0?void 0:e||t)},go=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 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:mo,args:i}}}}const mo=o=>m(o),vo=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)}})})},yo=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()})}}},bo=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())}})})},wo=o=>{const e=o.source;return e===void 0?m(void 0):({drivers:t})=>({type:"ScheduleComputable",computable:t.blobDriver.getDownloadedBlob(e)})},So=o=>{const e=o.source;return e===void 0?m(void 0):({drivers:t})=>({type:"ScheduleComputable",computable:t.blobDriver.getOnDemandBlob(e)})},ko=o=>{const e=o.source;return e===void 0?m(void 0):({drivers:t})=>({type:"ScheduleComputable",computable:t.uploadDriver.getProgressId(e)})},Po=o=>e=>{const t=e.source;return t===void 0?m(void 0):({drivers:r})=>({type:"ScheduleComputable",computable:r.logDriver.getLastLogs(t,o)})},Co=o=>e=>{const t=e.source;return t===void 0?m(void 0):({drivers:r})=>({type:"ScheduleComputable",computable:r.logDriver.getProgressLog(t,o)})},Fo=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:Vt(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:no(o,e),args:{source:y(o,e.source)}});case"MapRecordValues":return()=>({type:"ScheduleSubroutine",subroutine:io(o,e),args:{source:y(o,e.source)}});case"MakeObject":return()=>({type:"ScheduleSubroutine",subroutine:ro,args:Xr(e.template,r=>y(o,r))});case"MakeArray":return()=>({type:"ScheduleSubroutine",subroutine:xt(e.template.length),args:jt(e.template,r=>y(o,r))});case"Flatten":return()=>({type:"ScheduleSubroutine",subroutine:oo,args:{source:y(o,e.source)}});case"IsEmpty":return()=>({type:"ScheduleSubroutine",subroutine:co,args:{arg:y(o,e.arg)}});case"Not":return()=>({type:"ScheduleSubroutine",subroutine:lo,args:{operand:y(o,e.operand)}});case"And":return()=>({type:"ScheduleSubroutine",subroutine:uo,args:{operand1:y(o,e.operand1),operand2:y(o,e.operand2)}});case"Or":return()=>({type:"ScheduleSubroutine",subroutine:po,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:so,args:{source:y(o,e.source),field:y(o,e.field)}});case"GetResourceValueAsJson":return()=>({type:"ScheduleSubroutine",subroutine:go,args:{source:y(o,e.source)}});case"GetBlobContent":return()=>({type:"ScheduleSubroutine",subroutine:vo,args:{source:y(o,e.source)}});case"GetBlobContentAsString":return()=>({type:"ScheduleSubroutine",subroutine:yo,args:{source:y(o,e.source)}});case"GetBlobContentAsJson":return()=>({type:"ScheduleSubroutine",subroutine:bo,args:{source:y(o,e.source)}});case"GetDownloadedBlobContent":return()=>({type:"ScheduleSubroutine",subroutine:wo,args:{source:y(o,e.source)}});case"GetOnDemandBlobContent":return()=>({type:"ScheduleSubroutine",subroutine:So,args:{source:y(o,e.source)}});case"GetImportProgress":return()=>({type:"ScheduleSubroutine",subroutine:ko,args:{source:y(o,e.source)}});case"GetLastLogs":return()=>({type:"ScheduleSubroutine",subroutine:Po(e.lines),args:{source:y(o,e.source)}});case"GetProgressLog":return()=>({type:"ScheduleSubroutine",subroutine:Co(e.patternToSearch),args:{source:y(o,e.source)}});case"GetLogHandle":return()=>({type:"ScheduleSubroutine",subroutine:Fo,args:{source:y(o,e.source)}});default:return f.assertNever(e)}}const Ro=["$prod","$staging"];function Bo(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 It=Symbol(),At="return",Oo={op:It,arg:At};function To(o){return o.op==It&&o.arg==At}function Do(){return{pendingSubroutines:new Map}}function ot(o,e,t,r){const s=new ct(t),n=(a,c)=>{if(To(a))return e.result=c,!1;const l=f.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[h,v]of d)s.push({destination:{op:l,arg:h},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:f.assertNever(c)}}return i}function Nt(o,e,t,r={}){return Vt(o,Bo(e),t,r)}function Vt(o,e,t,r={}){const s=De({ctx:Object.fromEntries(Object.entries(e).filter(([n])=>Ro.indexOf(n)===-1)),cfg:t});return S.Computable.makeRaw(n=>{const i={drivers:o,cCtx:n},a=Do();return{ir:ot(i,a,[{destination:Oo,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 h={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(h,b,g,!1),!("result"in b))throw new Error("illegal cfg rendering stack state, no result");return b.result}}},{...r,key:s})}function Eo(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=Zr(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=f.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(Eo(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 jo(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[h,v]of Object.entries(g))l.runCallback(h,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 jo(o,e,t,r,s)}else return Nt(o.driverKit,e,t,s)}function xo(o,e,t){return S.Computable.make(r=>{var b,O,L,U,ee,H,W,te;const s=r.accessor(o).node(),n=f.notEmpty(s.getKeyValueAsJson(Ie)),i=f.notEmpty(s.getKeyValueAsJson(Z)),a=f.notEmpty(s.getKeyValueAsJson(X)),c=f.notEmpty(s.getKeyValueAsJson(_)),l=f.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 q;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});q={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=(W=R.value)==null?void 0:W.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:q})}const g=se(c,k=>d.get(k).currentArguments),h=new Set(l.blocksInLimbo),v=[...V(c)].map(({id:k,label:M,renderingMode:q})=>{var Ue,$e,Ge,He;const j=f.notEmpty(d.get(k)),D=f.notEmpty(g.nodes.get(k));let R="NotCalculated";j.prod!==void 0&&(h.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,he=>{const z=F.normalizeBlockConfig(he),_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,he=>t.blockUpdateWatcher.get(he.source));return{id:k,label:M,renderingMode:q,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 Lt(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 Io(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 Ao(o,e){if(o!==void 0)return S.Computable.make(t=>Io(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 No(o,e,t){return S.Computable.make(r=>{var a;const s=r.accessor(o).node(),n=Lt(s,e),i=(a=s.traverse({field:P(e,"blockPack"),assertFieldType:"Dynamic"},{field:u.Pl.HolderRefField,assertFieldType:"Input",errorIfFieldNotFound:!0},{field:Rt,assertFieldType:"Input"}))==null?void 0:a.persist();return{path:Ao(i,t),sdkVersion:n==null?void 0:n.sdkVersion}},{mode:"StableOnlyLive"})}function Vo(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 Lo(o,e,t){return S.Computable.make(r=>{const s=r.accessor(o).node(),n=Et(s,e),i=Lt(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 Jo(o,e){return S.Computable.make(t=>{const r=t.accessor(o).node(),s=f.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)&&to(v)).map(v=>v);if(g.length===0)continue;const h=Et(r,i);for(const v of g)n.push(S.Computable.wrapError(Nt(e.driverKit,h,v)))}return n})}class Mo{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 fe{constructor(e,t,r){p(this,"rid");p(this,"overview");p(this,"navigationStates",new Mo);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=xo(r.entry(),this.navigationStates,e).withPreCalculatedValueTree(),this.rid=t,this.refreshLoopResult=this.refreshLoop(),this.activeConfigs=Jo(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 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(f.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=Lo(this.projectTree.entry(),e,this.env),n={fullState:S.Computable.make(i=>({argsAndUiState:Vo(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=No(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:$o,pruning:Ko},e.logger);return new fe(e,t,r)}}function Ko(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 Uo(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 $o(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 Uo(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 f.ConsoleLoggerAdapter,platformLocalStorageNameToPath:{},localStorageNameToPath:{local:ut.homedir()},blobDriverOps:{cacheSoftSizeBytes:100*1024*1024,nConcurrentDownloads:10},uploadDriverOps:{nConcurrentPartUploads:10,nConcurrentGetProgresses:10,pollingInterval:1e3,stopPollingDelay:1e3},logStreamDriverOps:{nConcurrentGetLogs:10,pollingInterval:1e3,stopPollingDelay:1e3}},Jt={...Me,defaultTreeOptions:{pollingInterval:350,stopPollingDelay:2500},devBlockUpdateRecheckInterval:1e3,projectRefreshInterval:700,stagingRenderingRate:5},Go={minDelay:1500},Ho="__no_updates__";class _o extends S.PollComputablePool{constructor(t,r,s={}){super({...s,...Go},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 Ho}}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:f.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){p(this,"pFrame",new Yt.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)});this.blobDriver=e,this.columns=t,this.pFrame.setDataSource(this);for(const r of t){for(const n of Gr(r.data))this.blobIdToResource.set(at(n),n);const s=Hr(r.data,at);try{this.pFrame.addColumnSpec(r.id,r.spec),this.pFrame.setColumnData(r.id,s)}catch(n){throw new Error(`Adding column ${r.id} to PFrame failed: ${n}; Spec: ${r.spec}, DataInfo: ${s}.`)}}}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 qo{constructor(e){p(this,"pFrames");p(this,"pTables");this.blobDriver=e,this.pFrames=new class extends it{constructor(t){super(),this.blobDriver=t}createNewResource(t){return new Wo(this.blobDriver,t)}calculateParamsKey(t){return Yo(t)}}(this.blobDriver),this.pTables=new class extends it{constructor(t){super(),this.pFrames=t}async createNewResource(t){const s=await this.pFrames.getByKey(t.pFrameHandle).pFrame.createTable({src:Q(t.def.src),filters:t.def.filters});return t.def.sorting.length!==0?s.sort(t.def.sorting):s}calculateParamsKey(t){return zo(t)}}(this.pFrames)}createPFrame(e,t){const r=e.map(n=>F.mapPObjectData(n,i=>Qr(i))),s=this.pFrames.acquire(r);return t.addOnDestroy(s.unref),s.key}createPTable(e,t){const r=this.createPFrame(Qo(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.pFrames.getByKey(e).pFrame.findColumns(r)).hits.map(s=>s.hit)}}async getColumnSpec(e,t){return this.pFrames.getByKey(e).pFrame.getColumnSpec(t)}async listColumns(e){return this.pFrames.getByKey(e).pFrame.listColumns()}async calculateTableData(e,t){let r=await this.pFrames.getByKey(e).pFrame.createTable({src:Q(t.src),filters:t.filters});if(t.sorting.length>0){const i=await r.sort(t.sorting);r.dispose(),r=i}const s=r.getSpec(),n=await r.getData([...s.keys()]);return r.dispose(),s.map((i,a)=>({spec:i,data:n[a]}))}async getUniqueValues(e,t){return 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){return(await this.pTables.getByKey(e)).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:f.assertNever(o)}}function zo(o){const e=K.createHash("sha256");return e.update(o.pFrameHandle),e.update(De(o.def)),e.digest().toString("hex")}function Yo(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 Qo(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:f.assertNever(o)}}async function Mt(o,e){const t={...Me,...e};Zo(t.logger,t);const r=new f.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),h=new I.LogsDriver(g,l),v=new I.LsDriver(t.logger,c,o,r,t.localStorageNameToPath),b=new qo(l);return{blobDriver:l,logDriver:h,lsDriver:v,signer:r,uploadDriver:d,pFrameDriver:b}}function Zo(o,e){e.localStorageNameToPath.local!=ut.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 $r(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 fe.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 f.HmacSha256Signer.generateSecret()}static async init(e,t){const r={...Jt,...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,wr);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 Mt(e,r),a=new G.RetryAgent(e.httpDispatcher,{minTimeout:250,maxRetries:4}),c=new pt(a),l=new Nr(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 _o(c,n,{minDelay:r.devBlockUpdateRecheckInterval,http:a}),quickJs:await ie.getQuickJS()},h=new S.WatchableValue([]),v=await kr(e,s,h,g);return new Ke(g,i,i.signer,s,h,v.tree,c,v.computable)}}exports.BlockPackRegistry=nr;exports.CentralBlockRegistry=ir;exports.DefaultDriverKitOps=Me;exports.DefaultMiddleLayerOps=Jt;exports.FrontendFromFolderResourceType=Ve;exports.FrontendFromUrlResourceType=Ne;exports.MiddleLayer=Ke;exports.Project=fe;exports.TengoTemplateGet=mt;exports.TengoTemplateGetRegistry=vt;exports.TengoTemplateGetTemplate=bt;exports.TengoTemplateGetTemplateURI=yt;exports.TengoTemplatePack=wt;exports.TengoTemplatePackConvert=St;exports.TengoTemplatePackConvertTemplate=Pt;exports.TengoTemplatePackConvertTemplatePack=kt;exports.V1CentralDevSnapshotRegistry=cr;exports.V1CentralRegistry=ar;exports.V2RegistryProvider=pt;exports.createRenderTemplate=Ae;exports.getDevV1PacketMtime=xe;exports.getDevV2PacketMtime=de;exports.initDriverKit=Mt;exports.loadTemplate=pe;exports.prepareTemplateSpec=Ct;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