@microtronics/studio-cli 1.3.0-alpha.7 → 1.3.0-alpha.8

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/out/api.js CHANGED
@@ -2766,7 +2766,7 @@ Changing the size of an existing field can result in data loss or unexpected beh
2766
2766
  `)}async function nc(x,A,e){let r=[];for(let t of e){let s=v0.filePaths.studio.auto.dlo.autoDdeInc.replace("X",t.name);await A.stat(yi.Utils.joinPath(x,s))&&r.push(`#include "${v0.fileNames.autoDdeInc.replace("X",t.name)}"`)}return r}async function Dt(x,A,e,r){let t=yi.Utils.joinPath(x,v0.filePaths.studio.auto.dlo.path,r);await A.stat(t)&&e.push(`#include "${r}"`)}var oo=nx(require("semver")),Fo=require("yaml");var SA=Y0.ContainerType,an=Y0.TransferDirection,ic=Y0.fieldTypeDefinitions,Qr={$ref:"#/components/parameters/contextId"},sc={$ref:"#/components/parameters/addonId"},ac={$ref:"#/components/parameters/appId"},ao={$ref:"#/components/schemas/histdataResponse"},oc={$ref:"#/components/schemas/histdataRequest"},on={$ref:"#/components/schemas/rapidM2MStamp"},Fc={$ref:"#/components/schemas/timeseriesRequestBase"},vc={$ref:"#/components/headers/xMtBackfill"},fc="x-mt-backfill",wi={[fc]:vc},sn="rapidM2M Stamp",QA={description:"Successful operation"},vo={parameters:{contextId:{name:"siteUid",in:"path",description:"The site uid",schema:{type:"string"},required:!0},appId:{name:"appUid",in:"path",description:"The app uid",schema:{type:"string"},required:!0}},schemas:{rapidM2MStamp:{type:"string",format:"YYYYMMDDhhmmssSSS",description:'Special format of an UTC timestamp. Important: The trailing 0 are truncated. eg.: "2024-02-10" -> "2024021"'}},headers:{xMtBackfill:{description:["Only set by the local PoV API of the companion app, never by the myDatanet server.",'Present (value "pending") while the companion app is still fetching the requested time range from the device (on-demand backfill).',"The body is always answered immediately from the local data mirror in the normal shape; the loading signal lives only in this header.","Clients should show a loading indicator and re-issue the same request (poll) until the header disappears - every poll reads the by-then-larger mirror.",'A backfill is only armed by an explicit "from" stamp in the request; a request without "from" or with from: "*" never triggers a device fetch.',"The header is absent when the range is already local, the fetch completed within the internal grace wait, no device is connected, the connected device belongs to another site, the fetch failed (15 s cooldown before retry) or the device no longer retains the range.",'A range the device no longer holds simply stays empty and should be rendered as an empty/partial result, not as an error. Deep ranges can stay "pending" for a while, a completed depth is persisted and never fetched twice.'].join(" "),schema:{type:"string",enum:["pending"]}}}},fo={...structuredClone(vo)};Object.assign(fo.schemas,{histdataResponse:{type:"array",description:"Array of histdata records. Array starts with the youngest record",items:{type:"array",description:'First item is always the rapidM2M timestamp of the record. All following values are in the order of the "select" array.',items:{anyOf:[on,{type:"string"},{type:"number"}]}}},histdataRequest:{type:"object",additionalProperties:!1,required:["from","until"],properties:{from:{type:"string",format:sn,description:"items to include must be older or equal, UTC w/o time saving."},until:{type:"string",format:sn,description:"items to include must be younger, UTC w/o time saving. Reply set is limited like that: from <= item.stamp < until."},count:{type:"integer",description:"limits the number of returned records, negative values will count the records from the end of the result set."},offset:{type:"integer",description:"skips the given number of records in the result set."}}},timeseriesRequestBase:{type:"object",additionalProperties:!1,properties:{count:{type:"integer",description:"limits the number of returned records, negative values will count the records from the end of the result set.",minimum:-1e3,maximum:1e3,default:1e3},from:{type:"string",format:sn,description:"items to include must be older or equal, UTC w/o time saving"},until:{type:"string",format:sn,description:"items to include must be younger, UTC w/o time saving. Reply set is limited like that: from <= item.stamp < until"},offset:{type:"integer",description:"Skips the given number of records in the result set",minimum:0,default:0}}}});var jt={content:{"application/json":{schema:{type:"object",additionalProperties:!1,properties:{err:{type:"string",description:"Information what went wrong"}}}}}},Ar={401:{description:"Permission denied",...jt},403:{description:"Forbidden",...jt},404:{description:"Resource not found",...jt},500:{description:"Internal error",...jt}};function Si(x,A,e=null){let r=oo.coerce(A.version)?.version,t={openapi:"3.0.3",info:{description:A.description,title:A.name,version:r||""},tags:[],paths:{},components:{parameters:{},schemas:{},headers:{}}};e?Object.assign(t.components,structuredClone(vo)):Object.assign(t.components,structuredClone(fo));let s=e0.isAddon(A),i=e0.isAnalytics(A);s&&(t.components.parameters.addonId={name:"addonUid",in:"path",description:"The addon uid",schema:{type:"string"},required:!0});for(let v of Object.values(x.containers))e&&(!v.libraries.includes(e)||v.containerType===SA.hx)||!e&&!Y0.hasContainerAppFields(v)||v.containerType===SA.aloha||(Ec(t,v),cc(t,v,e),dc(t,v,s,i),!s&&!i&&(lc(t,v,e),Bc(t,v)));return t.tags.push({name:"app-center",description:"App Center related routes"}),(0,Fo.stringify)(t)}function Ec(x,A){x.tags.push({name:uA(A.title),description:`Transfer direction ${A.transferDirection}`})}function uA(x){return x.split("_").join(" ")}function lc(x,A,e){let r=`${A.name}`,t={type:"object",description:`Container: "${A.title}"`,additionalProperties:!1,properties:{}},s=[];A.containerType===SA.hx&&(r+="Select",s.push("select"),t.properties.select={type:"array",items:{type:"string",enum:[]}});for(let i of A.fields)i.library!==e||i.type==="shadow"||(A.containerType===SA.hx?t.properties.select.items.enum.push(i.id):(t.properties[i.id]=Eo(i),!i.readPermission&&!i.writePermission&&s.push(i.id)));t.required=s.length?s:void 0,x.components.schemas[r]=t}function cc(x,A,e=null){let r=`${A.title}`,t={type:"object",description:`Container: "${A.title}" with device transfer direction "${A.transferDirection}"`,additionalProperties:!1,properties:{}},s=[],i=A.containerType===SA.hx;for(let l of A.fields)l.library!==e||l.type==="shadow"||(t.properties[l.name]=Eo(l),!l.readPermission&&!l.writePermission&&s.push(l.name));t.required=s.length?s:void 0,x.components.schemas[r]=t;let v=t.properties;if(i){t.required=t.required?.map(d=>d.toLowerCase());let l={};for(let[d,p]of Object.entries(t.properties))l[d.toLowerCase()]=p;t.properties=l}if(i){let l={type:"object",description:`Request schema of "${A.title}"`,additionalProperties:!1,properties:{select:{type:"array",description:"Optional selection of specific fields of the given container",items:{type:"string",enum:Object.keys(v)}}}};x.components.schemas[`${r}RequestSingle`]=l,x.components.schemas[`${r}Request`]={allOf:[Fc,l]},t.properties.stamp=on,s.push("stamp")}}function Eo(x){let e={...ic[x.type].openApi},r=Cc(x);return e.default=r,e.example=r,e.description=x.description,e}function Cc(x){return x.defaultValue===void 0?x.defaultValue:x.type==="binary"?`${x.defaultValue.substring(2)}`:x.defaultValue}function Bc(x,A){let e=`/api/1/sites/{siteUid}/${A.name}`,r={get:void 0,put:void 0};if([SA.cx,SA.cb].includes(A.containerType))r.get={deprecated:!0,tags:[uA(A.title)],summary:`Retrieve the data of the "${uA(A.title)}" container`,parameters:[Qr],responses:{200:{...QA,content:{"application/json":{schema:{allOf:[{type:"object",required:["stamp"],properties:{stamp:on}},{$ref:`#/components/schemas/${A.name}`}]}}}},...Ar}},[an.down,an.backendOnly].includes(A.transferDirection)&&(r.put={deprecated:!0,tags:[uA(A.title)],summary:`Modify the data of the "${uA(A.title)}" container`,parameters:[Qr],requestBody:{content:{"application/json":{schema:{$ref:`#/components/schemas/${A.name}`}}}},responses:{201:{...QA},204:{...QA},...Ar}});else if(A.containerType===SA.hx){let t=`${e}`;e+="/youngest",r.get={deprecated:!0,tags:[uA(A.title)],summary:`Retrieve the youngest data of the "${uA(A.title)}" container`,parameters:[Qr,{name:"json",in:"query",required:!0,schema:{$ref:`#/components/schemas/${A.name}Select`}}],responses:{200:{...QA,content:{"application/json":{schema:ao}}},...Ar}},x.paths[t]={get:{deprecated:!0,tags:[uA(A.title)],summary:`Get the historical data of the "${uA(A.title)}" container.`,parameters:[Qr,{name:"json",in:"query",required:!0,schema:{allOf:[{$ref:`#/components/schemas/${A.name}Select`},oc]}}],responses:{200:{...QA,headers:wi,content:{"application/json":{schema:ao}}},...Ar}}}}x.paths[e]=r}function dc(x,A,e=!1,r=!1){let s=A.containerType===SA.hx?"timeseries":"containers",i=[],v=uA(A.title);r||i.push({path:`/api/1/sites/{siteUid}/${s}/${A.title}`,params:[Qr],tags:[v]}),e&&(i=[{path:`/api/1/sites/{siteUid}/addons/{addonUid}/${s}/${A.title}`,params:[Qr,sc],tags:[v]}]);let l={path:`/api/1/app-center/apps/{appUid}/${s}/${A.title}`,params:[ac],tags:["app-center"]};r&&l.tags.push(v),i.push(l);let d={get:void 0,put:void 0,post:void 0},p={tags:[],summary:`Retrieve the data of the "${uA(A.title)}" container`,parameters:[],responses:{200:{...QA,content:{"application/json":{schema:{allOf:[{type:"object",required:["stamp"],properties:{stamp:on}},{$ref:`#/components/schemas/${A.title}`}]}}}},...Ar}};if([SA.cx,SA.cb].includes(A.containerType)&&(d.get=p,[an.down,an.backendOnly].includes(A.transferDirection)&&(d.put={tags:[],summary:`Modify the data of the "${uA(A.title)}" container`,parameters:[],requestBody:{content:{"application/json":{schema:{$ref:`#/components/schemas/${A.title}`}}}},responses:{201:{...QA},204:{...QA},...Ar}}),i.forEach(j=>{let h=structuredClone(d);Object.values(h).forEach(_=>{_?.parameters?.unshift(...j.params),_?.tags?.unshift(...j.tags)}),x.paths[j.path]=h})),A.containerType===SA.hx){d.get={tags:[],summary:`Get the historical data of "${A.title}"`,parameters:[{name:"json",in:"query",required:!1,schema:{$ref:`#/components/schemas/${A.title}Request`}}],responses:{200:{...QA,headers:wi,content:{"application/json":{schema:{type:"array",items:{$ref:`#/components/schemas/${A.title}`}}}}},...Ar}},e&&(d.post={tags:[],summary:`Insert data into the "${uA(A.title)}" container`,parameters:[{name:"allow_future_date",in:"query",description:"Allow inserting records with a stamp value in the future",schema:{type:"boolean"}}],requestBody:{content:{"application/json":{schema:{$ref:`#/components/schemas/${A.title}`}}}},responses:{201:{...QA},400:{description:"Bad request",...jt},...Ar}});let j=i[0],h=structuredClone(d);Object.values(h).forEach(z=>{z?.parameters?.unshift(...j.params),z?.tags?.unshift(...j.tags)}),x.paths[j.path]=h;let _={...QA,headers:wi,content:{"application/json":{schema:{$ref:`#/components/schemas/${A.title}`}}}},y=`${j.path}/youngest`,P={get:structuredClone(h.get)};P.get.summary=`Get the youngest record of "${A.title}" container`,P.get.responses[200]=_;let R=e?2:1;P.get.parameters[R].schema.$ref=`#/components/schemas/${A.title}RequestSingle`,x.paths[y]=P;let N=`${j.path}/oldest`,q={get:structuredClone(h.get)};q.get.summary=`Get the oldest record of "${A.title}" container`,q.get.responses[200]=_,q.get.parameters[R].schema.$ref=`#/components/schemas/${A.title}RequestSingle`,x.paths[N]=q}}var co=Y0.TransferDirection,Fn=" new szTemp{64};",vn=" return strcat(aData, szTemp, sizeof(szTemp));";function Co(x){if(!x.printf&&x.printfFormat==="memtostr")return"bin";if(!x.printf)return null;let A=x.rwp||"%n",e=A.includes("["),t=A.includes("{")||e;if(x.printfFormat==="stampToISOString")return t?null:"stamp";switch(x.printf){case"%d":return t?null:"d";case"%f":return t?null:"f";case"%s":return e?null:"s";default:return null}}function Ti(x){if(x.type==="shadow"||x.shadowRef)return null;let A=wA(x);return!A||A==="skip"?null:Co(A)}function Bo(x){return[Y0.ContainerType.hx,Y0.ContainerType.cx].includes(x.containerType)&&x.transferDirection!==co.backendOnly}function Dc(x){if(x.type==="shadow"||x.shadowRef)return!1;let A=wA(x);return!!A&&A!=="skip"}function uc(x,A,e){let r=x.name.indexOf("]"),t=r>=0?x.name.substring(r+1):"",s=`${x.arrayRef.name}|${t}|${A}`;e.has(s)||e.set(s,{fields:[],formatType:A}),e.get(s).fields.push(x)}function pc(x){let A=[],e=new Map,r=new Set,t=!1;for(let s of x){if(!Dc(s))continue;let i=Ti(s);s.arrayRef&&i?uc(s,i,e):(A.push(s),i?r.add(i):t=!0)}return{standaloneFields:A,groupMap:e,usedFormats:r,hasInlineFields:t}}function bc(x,A,e){e.sort((d,p)=>d.arrayRef.index-p.arrayRef.index);let r=e.map(d=>d.byteOffset),t=r[1]-r[0];if(!(t>0&&r.every((d,p)=>p===0||d-r[p-1]===t)))return null;let[i,v]=A.split("|"),l=e[0].library?`_${R0.generateHashForLibraryName(e[0].library)}`:"DDE_";return{arrayName:i,subField:v,fields:e,startOffset:r[0],endOffset:r[r.length-1],step:t,formatType:Ti(e[0]),pawnVarBase:`${l}${x}_${i}`}}function jc(x,A){let{standaloneFields:e,groupMap:r,usedFormats:t,hasInlineFields:s}=pc(A),i=[];for(let[v,l]of r){let{fields:d,formatType:p}=l;if(d.length<2){e.push(...d),t.add(p);continue}let j=bc(x,v,d);j?(t.add(p),i.push(j)):(e.push(...d),t.add(p))}return e.sort((v,l)=>v.byteOffset-l.byteOffset),{arrayGroups:i,standaloneFields:e,usedFormats:t,hasInlineFields:s}}function mc(x){let A=new Set;for(let[,e]of Object.entries(x.containers))if(Bo(e))for(let r of e.fields){let t=Ti(r);t&&A.add(t)}return A}function hc(x,A){A.has("d")&&(x("stock _DDE_fmt_d(aData{}, value) {"),x(Fn),x(' sprintf(szTemp, _, "%d", value);'),x(vn),x("}")),A.has("f")&&(x(""),x("stock _DDE_fmt_f(aData{}, Float:value) {"),x(Fn),x(' sprintf(szTemp, _, "%.3f", value);'),x(vn),x("}")),A.has("s")&&(x(""),x("stock _DDE_fmt_s(aData{}, value{}) {"),x(Fn),x(' sprintf(szTemp, _, "%s", value);'),x(vn),x("}")),A.has("stamp")&&(x(""),x("stock _DDE_fmt_stamp(aData{}, value) {"),x(Fn),x(' sprintf(szTemp, _, "%s", (stampToISOString(value)));'),x(vn),x("}")),A.has("bin")&&(x(""),x("stock _DDE_fmt_bin(aData{}, mem{}, dim) {"),x(" #pragma warning disable 224"),x(" memtostr(aData, mem, 0, dim);"),x(" #pragma warning disable 224"),x(" return dim;"),x("}"))}function gc(x,A){return A===1?x===0?"idx":`idx - ${x}`:x===0?`idx / ${A}`:`(idx - ${x}) / ${A}`}function kc(x,A,e){let r=`idx >= ${x} && idx <= ${A}`;if(e===1)return r;let t=x===0?`idx % ${e} == 0`:`(idx - ${x}) % ${e} == 0`;return`${r} && ${t}`}function yc(x,A){let{startOffset:e,endOffset:r,step:t,formatType:s,pawnVarBase:i,subField:v}=A,l=gc(e,t),d=kc(e,r,t);if(x(` if (${d}) {`),s==="bin"){let p=`${i}[${l}]${v}`,j=v?v.substring(1):"",h=j?`${i}_${j}_dim`:`${i}_dim`;x(` return _DDE_fmt_bin(aData, ${p}, ${h});`)}else x(` return _DDE_fmt_${s}(aData, ${i}[${l}]${v});`);x(" }")}function _c(x,A,e){if(e.type==="shadow"||e.shadowRef)return;let r=wA(e);if(!r||r==="skip")return;let s=`${e.library?`_${R0.generateHashForLibraryName(e.library)}`:"DDE_"}${A}_${e.name}`,i=Co(r);if(i==="bin")x(` case ${e.byteOffset}: return _DDE_fmt_bin(aData, ${s}, ${s}_dim);`);else if(i)x(` case ${e.byteOffset}: return _DDE_fmt_${i}(aData, ${s});`);else{if(x(` case ${e.byteOffset}: {`),r.printf){let v=s;r.printfFormat&&(v=`(${r.printfFormat}(${v}))`),x(` sprintf(szTemp, _, "${r.printf}", ${v});`),x(" return (strcat(aData, szTemp, sizeof(szTemp)));")}x(" }")}}function wc(x,A,e){x(` case '${A.at(-1)}': {`),x(` return _DDE_local_${e.title}(aData, idx);`),x(" }")}function lo(x,A,e){let r=e===Y0.ContainerType.cx?"c":"h",t=e===Y0.ContainerType.cx?"config":"histdata";x(` if(cname{0} == '${r}'){`),x(" switch(cname{1}) {");for(let[s,i]of Object.entries(A.containers))e===i.containerType&&s.startsWith(t)&&i.transferDirection!==co.backendOnly&&wc(x,s,i);x(" default:"),x(" return OK;"),x(" }"),x(" return OK;"),x(" }")}function Sc(x,A){let e=jc(A.title,A.fields);x(""),x(`stock _DDE_local_${A.title}(aData{}, idx) {`),e.hasInlineFields&&x(" new szTemp{64};");for(let r of e.arrayGroups)yc(x,r);if(e.standaloneFields.length>0){x(" switch(idx) {");for(let r of e.standaloneFields)_c(x,A.title,r);x(" default:"),x(" return OK;"),x(" }")}x(" return OK;"),x("}")}function Tc(x,A){for(let[,e]of Object.entries(A.containers))Bo(e)&&Sc(x,e)}function Do(x){let A=[],e=A.push.bind(A),r=mc(x);return hc(e,r),r.size>0&&e(""),e("stock DDE_get_local_data(cname{}, aData{}, idx) {"),lo(e,x,Y0.ContainerType.cx),lo(e,x,Y0.ContainerType.hx),e(" return OK;"),e("}"),Tc(e,x),A.join(`
2767
2767
  `)}var jo=R0.yamlRangeToLineInformation,mt=v0.filePaths.dde.path,TA;(s0=>{let x=Y0.DDEJson,A=R0.convertBlobToString;s0.DDE_SCHEMA=Qa;async function r(L,k){let G=await k.readFile(L);return A(G)}s0.readYamlFile=r;async function t(L,k,G=v0.fileNames.mainDDE,V){let Y=[],$=await e0.read(L,k),U=await uo(L,k,$);if(V)for(let Z of U){let{result:f0,unresolvedKeys:K}=yx.replaceDefineTemplates(Z.yaml,V);Z.yaml=f0;for(let a0 of K)Y.push({file:Z.path,level:"error",message:`Unresolved define template: {{${a0}}}`,line:0,startCharacter:0,endCharacter:0})}for(let Z of U)Y.push(...l(Z.path,Z.yaml));let r0=_x.Utils.joinPath(L,mt,G),Q=await r(r0,k);if(V){let{result:Z,unresolvedKeys:f0}=yx.replaceDefineTemplates(Q,V);Q=Z;for(let K of f0)Y.push({file:r0,level:"error",message:`Unresolved define template: {{${K}}}`,line:0,startCharacter:0,endCharacter:0})}return Y.push(...l(r0,Q)),{manifest:$,libraryFiles:U,main:{path:r0,yaml:Q},diagnostics:Y}}s0.validate=t;async function s(L,k,G,V=v0.fileNames.mainDDE){let Y=await e0.read(L,k),$=await yx.read(L,k,G),U=await t(L,k,V,$.flat);if(U.diagnostics.filter(p0=>p0.level==="error").length>0)return{ddeJSON:null,diagnostics:U.diagnostics};let Q=await _(L,k,G),Z=new rn.PreCompiler(Y,U.libraryFiles,Q),f0=Z.parseLibraries();if(f0.find(p0=>p0.level==="error"))return{ddeJSON:null,diagnostics:[...U.diagnostics,...f0]};let{ddeJSON:a0,diagnostics:l0}=Z.parseMainDDE(U.main.path,U.main.yaml);return{ddeJSON:a0,diagnostics:[...U.diagnostics,...l0]}}s0.compileDDE=s;let i=new po.default({strict:!1,allErrors:!0,verbose:!0});(0,bo.default)(i);let v=i.compile(s0.DDE_SCHEMA);function l(L,k){let G=new fn.LineCounter,V=(0,fn.parseDocument)(k,{lineCounter:G,keepSourceTokens:!0}),Y=[];for(let r0 of V.errors){let Q=r0.pos?jo(G,[r0.pos[0],r0.pos[1],r0.pos[1]]):{line:0,startCharacter:0,endCharacter:0};Y.push({file:L,level:"error",message:r0.message,...Q})}if(Y.length>0)return Y;let $=V.toJSON();if(!v($)){let Q=(v.errors||[]).filter(f0=>f0.keyword!=="if"),Z=new Set;for(let f0 of Q){let K=Ic(f0);if(Z.has(K))continue;Z.add(K);let a0=Nc(V,G,f0);Y.push({file:L,level:"error",message:K,...a0})}}return Y}s0.validateJsonSchema=l,s0.PreCompiler=(L,k,G)=>new rn.PreCompiler(L,k,G);function p(L,k){return mi(L,k)}s0.generateMyDatanetXML=p;async function j(L,k,G,V){let Y=await e0.read(L,k),$=mi(Y,V),U=_x.Utils.joinPath(L,v0.filePaths.dist.ddeXmlPath);await k.writeFile(U,$),G.log("Generated",v0.filePaths.dist.ddeXmlPath)}s0.exportMyDatanetXML=j;async function h(L,k,G,V,Y){let $=_x.Utils.joinPath(L,v0.filePaths.studio.auto.dde.historyJson);await k.rm($).catch(console.error);let U=await e0.read(L,k);if(!e0.isApp(U)||!U.registry?.id)return;if(!Y){G.warn("Could not fetch dde of previous version: No API token provided.");return}let r0=le.coerce(U.version);try{let f0=(await ux.getExistingApplication(Y,U.publisher,U.registry.id,V)).versions.find(p0=>!le.prerelease(p0.version)&&le.lte(p0.version,r0)),K=f0?.files.find(p0=>p0.name==="dde.json");if(!K){G.warn("Could not find a valid previous released app version to fetch the previous dde from.");return}let a0=await fetch(K.downloadUrl,{headers:{..._A(Y),...ux.injectSemverHeader(!0)}});if(a0.status!==200){G.warn(`Could not fetch the dde.json of version "${f0?.version}"`);return}let l0=await a0.text();await k.writeFile($,l0),G.log(`Saved history.json of previous app version ${f0.version}`)}catch(Q){G.error("Failed to fetch the dde of previous version",Q)}}s0.fetchPreviousHistoryJson=h;async function _(L,k,G){try{let V=_x.Utils.joinPath(L,v0.filePaths.studio.auto.dde.historyJson);if(await k.stat(V)){let $=await k.readFile(V);return JSON.parse(A($))}let Y=_x.Utils.joinPath(L,mt,"history.json");if(await k.stat(Y)){G.warn(`"${v0.filePaths.studio.auto.dde.historyJson}" does not exist - fallback to "${mt}history.json"`);let $=await k.readFile(Y),U=JSON.parse(A($)),r0=await e0.read(L,k),Q=le.coerce(r0.version)?.version,Z=Object.keys(U||{}).sort(le.rcompare).find(K=>K!==Q);if(!Z)return null;let f0=U[Z];return{version:Z,...f0}}}catch(V){G.error("Failed to read history.json",V)}return G.warn("history.json does not exist"),null}s0.getHistoryJson=_;function y(L,k){return{version:le.coerce(k.version)?.version||"1.0.0",...structuredClone(L)}}s0.buildHistoryJson=y;async function P(L,k,G,V){let Y=await e0.read(L,k),$=y(V,Y),U=_x.Utils.joinPath(L,v0.filePaths.dist.historyJson);await k.writeFile(U,JSON.stringify($,null," ")),G.log("Generated",v0.filePaths.dist.historyJson)}s0.exportHistoryJson=P;async function R(L,k){return k.rm(_x.Utils.joinPath(L,v0.filePaths.studio.auto.dlo.path))}s0.clearAutoDloDir=R;async function N(L,k,G,V){await R(L,k);let Y=await e0.read(L,k),$=await uo(L,k,Y),U=await yx.read(L,k,G),r0=ro(V,U,Y),Z=new bt(Y,V,null).generate();for(let Cx of $){let rA=new bt(Y,V,Cx.libraryName),{globals:NA,helper:Ux}=rA.generate(),U0=[...NA,...Ux].join(`\r
2768
2768
  `),L0=v0.filePaths.studio.auto.dlo.autoDdeInc.replace("X",Cx.libraryName),ix=_x.Utils.joinPath(L,L0);U0.length&&(G.log("Generated",L0),await k.writeFile(ix,U0))}let f0=io(V),K=no(V,$.map(Cx=>Cx.libraryName)),a0=Do(V),l0=_x.Utils.joinPath(L,v0.filePaths.studio.auto.dlo.autoInc);await k.writeFile(l0,r0),G.log("Generated",v0.filePaths.studio.auto.dlo.autoInc);let p0=_x.Utils.joinPath(L,v0.filePaths.studio.auto.dlo.autoUplinkInc);await k.writeFile(p0,K),G.log("Generated",v0.filePaths.studio.auto.dlo.autoUplinkInc);let b0=_x.Utils.joinPath(L,v0.filePaths.studio.auto.dlo.autoLocalDataInc);await k.writeFile(b0,a0),G.log("Generated",v0.filePaths.studio.auto.dlo.autoLocalDataInc);let q0=_x.Utils.joinPath(L,v0.filePaths.studio.auto.dlo.autoDdeInc.replace("X","app"));await k.writeFile(q0,[...Z.globals,...Z.helper].join(`
2769
- `)),G.log("Generated",v0.filePaths.studio.auto.dlo.autoDdeInc.replace("X","app"));let M0=_x.Utils.joinPath(L,v0.filePaths.studio.auto.dlo.autoDdeInc.replace("X","main"));await k.writeFile(M0,f0),G.log("Generated",v0.filePaths.studio.auto.dlo.autoDdeInc.replace("X","main")),await z(L,k,G)}s0.exportAutoDloFiles=N;async function q(L,k,G,V){let Y=await e0.read(L,k),$=e0.isLibrary(Y),U=_x.Utils.joinPath(L,v0.filePaths.dist.path,"dde-api.yaml");await k.rm(U).catch(()=>{});let r0=_x.Utils.joinPath(L,v0.filePaths.dist.ddeApi);if(await k.writeFile(r0,Si(V,Y)),G.log("Generated",v0.filePaths.dist.ddeApi),$){let Q=_x.Utils.joinPath(L,v0.filePaths.dist.ddeApiPath,`${Y.name}.yaml`),Z=Si(V,Y,Y.name);Z.length&&(await k.writeFile(Q,Z),G.log("Generated",v0.filePaths.dist.ddeApiPath+`${Y.name}.yaml`))}}s0.exportOpenApi=q;async function z(L,k,G){let V=_x.Utils.joinPath(L,v0.filePaths.studio.auto.dlo.defaultInc),Y=await so(L,k);await k.writeFile(V,Y),G.log("Generated",v0.filePaths.studio.auto.dlo.defaultInc)}s0.exportDefaultInc=z})(TA||={});async function uo(x,A,e){let r=[],t=await cx.getAll(e);for(let s in t){let i=cx.dependencyToPath(x,s),v=cx.dependencyIdToName(s),l=_x.Utils.joinPath(i,`${mt}/${v}.dde`);await A.stat(l)&&r.push({libraryName:v,path:l,yaml:await TA.readYamlFile(l,A)})}if(e0.isLibrary(e)){let s=_x.Utils.joinPath(x,`/${mt}/${e.name}.dde`);await A.stat(s)&&r.push({libraryName:e.name,path:s,yaml:await TA.readYamlFile(s,A)})}return r}function Rc(x,A,e){if(typeof x=="string")return x;if(typeof x!="object"||x===null)return"";let r=x[A];if(typeof r=="string")return r;if(typeof r!="object"||r===null)return"";let t=e?.missingProperty;return t?r[t]??"":""}function Pc(x,A,e,r){let s={required:()=>`Missing required property '${A.missingProperty}'.`,additionalProperties:()=>`Unknown property '${A.additionalProperty}' is not allowed.`,type:()=>`Must be of type '${A.type}'.`,enum:()=>`Must be one of the allowed values: ${JSON.stringify(A.allowedValues)}.`,pattern:()=>`Value does not match the required pattern. ${r?.patternErrorMessage??e}`,minimum:()=>`${e}.`,maximum:()=>`${e}.`,exclusiveMinimum:()=>`${e}.`,exclusiveMaximum:()=>`${e}.`,not:()=>`This value is not allowed here. ${r?.description??""}`.trimEnd(),anyOf:()=>`Value does not match any of the allowed schemas. ${r?.description??""}`.trimEnd(),oneOf:()=>`Value does not match any of the allowed schemas. ${r?.description??""}`.trimEnd()}[x];return s?s():e}function Ic(x){let A=x.instancePath||"/",e=x.parentSchema,r=Rc(e?.errorMessage,x.keyword,x.params);if(r)return`${A}: ${r}`;let t=x.message||"unknown validation error";return`${A}: ${Pc(x.keyword,x.params,t,e)}`}function qc(x,A){let e=A.split("/").filter(Boolean).map(r=>{let t=Number(r);return Number.isNaN(t)?r:t});for(let r=e.length;r>=0;r--){let t=e.slice(0,r),s=x.getIn(t,!0);if(s?.range)return s.range}return null}function Nc(x,A,e){let r=qc(x,e.instancePath||"");return r?jo(A,r):{line:0,startCharacter:0,endCharacter:0}}var Ri=require("vscode-uri");var Zr=class{dloFileMap={};rootUri=Ri.URI.parse("");constructor(){}set workspacePath(A){this.rootUri=A}getSequenceForFile(A){let e=A.substring(this.rootUri.path.length||0);if(this.rootUri.scheme!=="file"){let t=this.rootUri.toString();e=A.substring(t.length+1)}if(Object.hasOwn(this.dloFileMap,e))return this.dloFileMap[e];let r=R0.generateHashForFilePath(e);return this.dloFileMap[e]=r,r}getFilePathForSequence(A){let e=Object.entries(this.dloFileMap).find(([,r])=>r===A);return e?Ri.URI.parse(`${this.rootUri.path}${e[0]}`).path:null}};var Po=require("vscode-uri");function Pi(x){return x.replace(/\\/g,"/").split("/").pop()??""}function er(x){return/\.spec\.dlo$/i.test(Pi(x))}function ht(x,A){let e=Pi(x);if(!e)return!1;if(er(e))return!0;let r=A?.dlo?.mainFile;return r?Pi(r)===e:e==="main.dlo"}var Oc=/^\s*#define\s+TEST_OWN_MAIN\b/m;function Mc(x){return Oc.test(x)}function En(x,A){if(!er(x))return[];let e=["DLO_TEST_SPEC=1"];return A!==void 0&&Mc(A)&&e.push("TEST_OWN_MAIN=1"),e}var gt="__it_";var cn=31-gt.length-4;function mo(x){return x.replace(/^_+/,"").replace(/_+$/,"")}function ln(x,A=cn){let e=mo(x.toLowerCase().replace(/[^a-zA-Z0-9_]+/g,"_"));return mo(e.substring(0,Math.max(0,A)))}function Cn(x,A){let e=ln(x);if(!e||!A.has(e))return e;for(let r=2;;r++){let t=`_${r}`,s=`${ln(x,cn-t.length)}${t}`;if(!A.has(s))return s}}function Bn(x){return`${gt}${x}`}function kt(x,A){return`${gt}${x}__${A}`}function dn(x,A){return`// @it ${x} "${A}"`}var ho=/\/\/\s*@it\s+([A-Za-z0-9_]+)\s+"((?:[^"\\]|\\.)*)"/;var Dn=class{quote="";step(A,e){let r=A[e];return this.quote?r==="\\"&&e+1<A.length?{insideString:!0,nextIndex:e+2}:(this.quote=r===this.quote?"":this.quote,{insideString:!0,nextIndex:e+1}):r==='"'||r==="'"?(this.quote=r,{insideString:!0,nextIndex:e+1}):{insideString:!1,nextIndex:e+1}}};function go(x,A){let e=new Dn,r=0;for(let t=A;t<x.length;){let{insideString:s,nextIndex:i}=e.step(x,t);if(!s){if(x[t]==="(")r++;else if(x[t]===")"&&--r===0)return t}t=i}return-1}function un(x){let A=new Dn,e=[],r=0,t="";for(let s=0;s<x.length;){let{insideString:i,nextIndex:v}=A.step(x,s),l=x[s];!i&&l===","&&r===0?(e.push(t),t=""):(!i&&(l==="("||l==="{")?r++:!i&&(l===")"||l==="}")&&r--,t+=x.slice(s,v)),s=v}return e.push(t),e}var Lc=/^[A-Za-z_@][A-Za-z0-9_@]*$/;function ko(x){return Lc.test(x.trim())}function yo(x){return/^\{[\s\S]*\}$/.test(x.trim())}var Gc=/^(?:0[xX][0-9a-fA-F]+|\d+|xx)$/;function _o(x){let A=x.trim().slice(1,-1).trim();if(!A)return{error:"an empty byte list {} is not valid"};let e=[];for(let r of un(A)){let t=r.trim();if(!Gc.test(t))return{error:`"${t}" is not a byte literal (decimal, 0x hex, or xx)`};if(t==="xx"){e.push("xx");continue}let s=t.startsWith("0x")||t.startsWith("0X")?parseInt(t,16):parseInt(t,10);if(s>255)return{error:`${t} is out of range 0..255 for a byte list`};e.push(s.toString(16).toUpperCase().padStart(2,"0"))}return{packed:e.join("")}}function wo(x){let A=x.trim().slice(1,-1).trim();if(!A)return{error:"an empty list {} is not valid"};let e=[];for(let r of un(A)){let t=r.trim();if(!/^-?(?:0[xX][0-9a-fA-F]+|\d+)$/.test(t))return{error:`"${t}" is not an integer literal`};let s=t.startsWith("-"),i=s?t.substring(1):t,v=(i.startsWith("0x")||i.startsWith("0X")?parseInt(i,16):parseInt(i,10))*(s?-1:1);e.push(v.toString(10))}return{packed:e.join("|")}}var Uc=/^(?:\s*#options\s+)(.*)(?:\s*)$/,Hc=/^(?:\s*#preinclude\s+)(.*)(?:\s*)$/,Kc=/^(?:\s*#ifdef\s+)(.*)$/,Wc=/^(?:\s*#ifndef\s+)(.*)$/,Jc=/^(?:\s*#elseifdef\s+)(.*)$/,zc=/^(?:\s*#elseifndef\s+)(.*)$/,Io=/^(\s*)(?:#callback\s+)(\w*)(?:\s*\(\s*)(.*?)(?:\s*\)\s*)(\{*){1}(?:\s*)$/,qo=/^(.*)(^|\s+)(?:assert\s*\(\s*)(.*?)(?:\s*,\s*)(.*?)(?:\s*\)\s*;*\s*)$/,No=/^(.*)(^|\s+)(?:assert\s*\(\s*)(.*?)(?:\s*\)\s*;*\s*)$/,Oo=/^(.*)(^|\s+)(?:assert\s*\(\s*\);*\s*)$/,Mo=/^(.*)(^|\s+)(?:catch\s*\(\s*)(.*?)(?:\s*\)\s*;*\s*)$/,Vc=/^\s*#include\s*</,Xc=/^\s*#endinput\s*/,Yc=/^\s*#pragma\s+dynamic\s+(\S+)\s*(\/\/.*|\/\*.*|)$/,$o=/^(.*)(^|\s+)(?:applog(|_ok|_warning|_alarm|_debug|_fatal)\s*\(\s*)(.*?)(?:\s*,\s*)(.*?)(?:\s*\)\s*;*\s*)$/,Lo=/^(.*)(^|\s*)(?:applog(|_ok|_warning|_alarm|_debug|_fatal)\s*\(\s*)(.*?)(?:\s*\)\s*;*\s*)$/;function So(x,A=""){let e=" ",r=x;return A.length?e={fatal:"\xA7",alarm:"!",warning:"?",debug:"~",ok:"$"}[A]||null:["!","?","~","$","\xA7"].includes(x.substring(1,1))&&(e=x.substring(1,1),r=`"${x.substring(2,x.length-1)}"`),{priority:`'${e}'`,code:r}}var Go=/^(.*)(^|\s+)(?:log(|_debug|_info|_warn|_error)\s*\(\s*)(.*?)(?:\s*\)\s*;*\s*)$/,Uo=(t=>(t[t.debug=0]="debug",t[t.info=1]="info",t[t.warn=2]="warn",t[t.error=3]="error",t))(Uo||{}),Qc=/^(.*)(^|\s*)DDE_(state|result|aloha|volatile|setting|command)_/,Zc=/^(.*)(^|\s*)onUplink(Restore|Apply)_(state|result|aloha|volatile|setting|command)/,xC=/^(.*)(^|\s*)onUplinkEvent/,AC=/(?:^|\s)(?:assert|catch|applog(?:_ok|_warning|_alarm|_debug|_fatal)?|log(?:_debug|_info|_warn|_error)?)\s*\(/,eC=/^\s*#callback\s+\w+\s*\(/;function To(x){let A=0,e=!1,r="";for(let t=0;t<x.length;t++){let s=x[t];if(e){if(s==="\\"){t++;continue}s===r&&(e=!1);continue}if(s==='"'||s==="'"){e=!0,r=s;continue}s==="("?A++:s===")"&&A--}return A}function Ho(x){return Io.test(x)||Oo.test(x)||qo.test(x)||No.test(x)||Mo.test(x)||$o.test(x)||Lo.test(x)||Go.test(x)}function rC(x,A,e){if(!(AC.test(e)||eC.test(e)))return null;let t=To(e);if(t<=0)return null;let s=t,i=[x[A]],v=[e],l=A+1,d=100;for(;s>0&&l<x.length&&l-A<d;){let h=x[l],_=h.split("//",1)[0];i.push(h),v.push(_),s+=To(_),l++}if(i.length<=1||s>0)return null;let p=i.map((h,_)=>_===0?h:h.trim()).join(" "),j=v.map((h,_)=>_===0?h:h.trim()).join(" ");return Ho(j)?{joinedOriginal:p,joinedStripped:j,extraLineCount:i.length-1}:null}var Ko=String.raw`[A-Za-z_@][A-Za-z0-9_@]*`,Wo=String.raw`"((?:[^"\\]|\\.)*)"`,tC=new RegExp(String.raw`^(\s*)IT\s*\(\s*${Wo}\s*\)(.*)$`),nC=new RegExp(String.raw`^\s*IT\s*\(\s*${Ko}\s*,\s*${Wo}\s*\)`),iC=/^(\s*)STEP\s*\(\s*(\d+)\s*\)(.*)$/,sC=new RegExp(String.raw`^\s*STEP\s*\(\s*${Ko}\s*,(\s*)\d+\s*\)`),aC=/^(\s*)AFTER_LOOP\b(.*)$/,oC=/\b(?:RUN_LOOP|MOCK_DELIVER|MOCK_DELIVER_SEC|MOCK_DELIVER_IMMEDIATES)\s*\(/,FC=/^\s*DESCRIBE\s*\(/,vC=/^(\s*)TEST_SETUP\s*\(\s*\)(.*)$/,fC=/^(\s*)TEST_TEARDOWN\s*\(\s*\)(.*)$/,EC={MOCK_RETURN:{nativeNameArgs:[1]},MOCK_RETURN_SEQ:{nativeNameArgs:[1],listArgs:{2:"ints"}},MOCK_RETURN_SEQ_STRICT:{nativeNameArgs:[1],listArgs:{2:"ints"}},MOCK_BYTES:{nativeNameArgs:[1],listArgs:{3:"bytes"}},MOCK_BYTES_RET:{nativeNameArgs:[1],listArgs:{3:"bytes"}},MOCK_SEQ:{nativeNameArgs:[1]},MOCK_SEQ_STRICT:{nativeNameArgs:[1]},MOCK_REG:{nativeNameArgs:[1],listArgs:{4:"bytes"}},MOCK_REG_MASKED:{nativeNameArgs:[1],listArgs:{5:"bytes"}},MOCK_REG_RW:{nativeNameArgs:[1]},MOCK_RESET:{nativeNameArgs:[1]},EXPECT_CALLED:{nativeNameArgs:[1]},EXPECT_ARG_INT:{nativeNameArgs:[1]},EXPECT_ARG_BYTES:{nativeNameArgs:[1],listArgs:{4:"bytes"}},EXPECT_REG:{nativeNameArgs:[1]},EXPECT_REG_WRITES:{nativeNameArgs:[1]},EXPECT_CALL_ORDER:{nativeNameArgs:[1,3]},EXPECT_RECORD_BYTES:{listArgs:{2:"bytes"}}},Ii=class{slugs=new Set;stepsOfCurrent=new Set;currentSlug=null;currentIsMacroForm=!1;sawLoopAdvance=!1;describeCount=0;sawFileWideSetup=!1;sawFileWideTeardown=!1;setupSeenForGroup=new Set;teardownSeenForGroup=new Set;rewrite(A){let e=lC(A),r=A.substring(e.length);return oC.test(e)&&(this.sawLoopAdvance=!0),FC.test(e)&&this.describeCount++,this.rewriteIt(e,r)??this.rewriteAfterLoop(e,r)??this.rewriteStep(e,r)??this.rewriteTestSetup(e,r)??this.rewriteTestTeardown(e,r)??this.rewriteMacroArgs(e,r)}finishDeclaration(A,e,r,t,s,i){let{text:v,diagnostics:l}=this.applyMacroArgRewrite(r),d=t?`${Ro(A,e,v)} ${t}`:Ro(A,e,v);return{line:s?`${d} ${s}`:d,diagnostics:[...i,...l]}}rewriteIt(A,e){let r=tC.exec(A);if(!r)return this.checkItTwoArg(A);let[,t,s,i]=r,v=Cn(s,this.slugs);return v?(this.slugs.add(v),this.currentSlug=v,this.currentIsMacroForm=!1,this.stepsOfCurrent.clear(),this.sawLoopAdvance=!1,this.finishDeclaration(t,Bn(v),i,dn(v,s),e,[])):{line:null,diagnostics:[{level:"error",message:`IT("${s}") has no name to generate: a title needs at least one letter, digit or underscore, or use the IT(id, "title") form.`}]}}checkItTwoArg(A){let e=nC.exec(A);return!e||(this.currentSlug=null,this.currentIsMacroForm=!0,this.stepsOfCurrent.clear(),this.sawLoopAdvance=!1,!e[1].includes(","))?null:{line:null,diagnostics:[{level:"warning",message:`A comma in an IT() title splits the macro argument - write it as IT("${e[1]}") without an id, or drop the comma.`}]}}rewriteStep(A,e){let r=iC.exec(A);if(!r)return this.checkStepTwoArg(A);let[,t,s,i]=r,v=Number(s),l=this.stepError(v);return l?{line:null,diagnostics:[{level:"error",message:l}]}:(this.stepsOfCurrent.add(v),this.sawLoopAdvance=!1,this.finishDeclaration(t,kt(this.currentSlug,v),i,null,e,[]))}rewriteAfterLoop(A,e){let r=aC.exec(A);if(!r)return null;let[,t,s]=r;if(this.currentIsMacroForm)return{line:null,diagnostics:[{level:"error",message:'AFTER_LOOP continues an IT("title"); an IT(id, "title") is continued by STEP(id,n).'}]};if(!this.currentSlug)return{line:null,diagnostics:[{level:"error",message:'AFTER_LOOP has no IT() before it - it continues the most recent IT("title") after the firmware main loop ran.'}]};let i=this.sawLoopAdvance,v=this.stepsOfCurrent.size?Math.max(...this.stepsOfCurrent)+1:2;this.stepsOfCurrent.add(v),this.sawLoopAdvance=!1;let l=[];return i||l.push({level:"warning",message:"AFTER_LOOP splits the test but the block before it never let the main loop run - add RUN_LOOP(ms) at its end, or merge the blocks"}),this.finishDeclaration(t,kt(this.currentSlug,v),s,null,e,l)}rewriteTestSetup(A,e){let r=vC.exec(A);if(!r)return null;let[,t,s]=r;if(this.describeCount===0)return this.sawFileWideSetup?{line:null,diagnostics:[{level:"error",message:"TEST_SETUP() is already declared for this spec."}]}:(this.sawFileWideSetup=!0,null);let i=this.describeCount;if(this.setupSeenForGroup.has(i))return{line:null,diagnostics:[{level:"error",message:"TEST_SETUP() is already declared for this DESCRIBE group."}]};this.setupSeenForGroup.add(i);let v=`__tsetup_${i}`;return this.finishDeclaration(t,v,s,`// @setup ${i}`,e,[])}rewriteTestTeardown(A,e){let r=fC.exec(A);if(!r)return null;let[,t,s]=r;if(this.describeCount===0)return this.sawFileWideTeardown?{line:null,diagnostics:[{level:"error",message:"TEST_TEARDOWN() is already declared for this spec."}]}:(this.sawFileWideTeardown=!0,null);let i=this.describeCount;if(this.teardownSeenForGroup.has(i))return{line:null,diagnostics:[{level:"error",message:"TEST_TEARDOWN() is already declared for this DESCRIBE group."}]};this.teardownSeenForGroup.add(i);let v=`__tteardown_${i}`;return this.finishDeclaration(t,v,s,`// @teardown ${i}`,e,[])}rewriteMacroArgs(A,e){let{text:r,diagnostics:t,changed:s}=this.applyMacroArgRewrite(A);return s?{line:r+e,diagnostics:t}:t.length?{line:null,diagnostics:t}:null}applyMacroArgRewrite(A){let e=A,r=!1,t=[];for(let[s,i]of Object.entries(EC))e=this.rewriteMacroCallsOf(e,s,i,t,()=>r=!0);return{text:e,diagnostics:t,changed:r}}rewriteMacroCallsOf(A,e,r,t,s){let i=new RegExp(String.raw`\b${e}\b\s*\(`,"g"),v="",l=0,d=null;for(;d=i.exec(A);){let p=d.index+d[0].length-1,j=go(A,p);if(j<0)continue;let h=CC(A.slice(p+1,j),e,r,t);h&&(v+=A.slice(l,p+1)+h+")",l=j+1,s()),i.lastIndex=j+1}return v+=A.slice(l),v}stepError(A){return A<2?`STEP(${A}) is not a continuation step - step 1 is the IT() body itself, steps start at 2.`:this.currentIsMacroForm?`STEP(${A}) continues an IT("title"); an IT(id, "title") is continued by STEP(id,${A}).`:this.currentSlug?this.stepsOfCurrent.has(A)?`STEP(${A}) is already declared for this IT().`:null:`STEP(${A}) has no IT() before it - a step continues the most recent IT("title").`}checkStepTwoArg(A){let e=sC.exec(A);return!e||!e[1]?null:{line:null,diagnostics:[{level:"warning",message:"Remove the space after the comma in STEP(id, n) - pawncc pastes it into the public name."}]}}};function lC(x){let A="";for(let e=0;e<x.length;e++){let r=x[e];if(A)r==="\\"?e++:r===A&&(A="");else if(r==='"'||r==="'")A=r;else if(r==="/"&&x[e+1]==="/")return x.substring(0,e)}return x}function cC(x,A,e,r,t){let s=x.match(/^\s*/)?.[0]??"",i=x.trim();if(r.nativeNameArgs?.includes(A)&&ko(i))return{text:`${s}"${i}"`,changed:!0};let v=r.listArgs?.[A];if(v&&yo(i)){let l=v==="bytes"?_o(i):wo(i);return l.error?(t.push({level:"error",message:`${e}(): argument ${A} - ${l.error}`}),{text:x,changed:!1}):{text:`${s}"${l.packed}"`,changed:!0}}return{text:x,changed:!1}}function CC(x,A,e,r){let t=x.length?un(x):[],s=!1,i=t.map((v,l)=>{let d=cC(v,l+1,A,e,r);return s=s||d.changed,d.text});return s?i.join(","):null}function Ro(x,A,e){let r=e.trim(),t=r?" "+r:"";return`${x}public ${A}()${t}`}var xt=class{pragmaDynamic=null;dloFileSequencer=new Zr;constructor(){}get pragmaDynamicFlag(){return this.pragmaDynamic?`-S${this.pragmaDynamic}`:null}preCompileDloFile(A,e,r,t,s){this.dloFileSequencer.workspacePath=A;let i=[],v=t.path,l=!1,d=Po.Utils.basename(t);if(v.includes(v0.filePaths.studio.auto.dlo.path)){let P=d.substring(0,d.length-8);!["app","main"].includes(P)&&d.endsWith("-dde.inc")&&(l=R0.generateHashForLibraryName(P))}else if(v.includes(v0.filePaths.studio.libdeps)){let P=v.split("libdeps/")[1],[R]=P.split("/");["dlo-core"].includes(R)||(l=R0.generateHashForLibraryName(R))}else e0.isLibrary(r)&&(d.endsWith(".dlo")||v.includes("/dlo/examples/")||v.includes("/dlo/test/")?e.log("Skipping dde mangling for project file",d):l=R0.generateHashForLibraryName(r.name));if(v.endsWith(".auto/default.inc"))return{data:s.join(`
2769
+ `)),G.log("Generated",v0.filePaths.studio.auto.dlo.autoDdeInc.replace("X","app"));let M0=_x.Utils.joinPath(L,v0.filePaths.studio.auto.dlo.autoDdeInc.replace("X","main"));await k.writeFile(M0,f0),G.log("Generated",v0.filePaths.studio.auto.dlo.autoDdeInc.replace("X","main")),await z(L,k,G)}s0.exportAutoDloFiles=N;async function q(L,k,G,V){let Y=await e0.read(L,k),$=e0.isLibrary(Y),U=_x.Utils.joinPath(L,v0.filePaths.dist.path,"dde-api.yaml");await k.rm(U).catch(()=>{});let r0=_x.Utils.joinPath(L,v0.filePaths.dist.ddeApi);if(await k.writeFile(r0,Si(V,Y)),G.log("Generated",v0.filePaths.dist.ddeApi),$){let Q=_x.Utils.joinPath(L,v0.filePaths.dist.ddeApiPath,`${Y.name}.yaml`),Z=Si(V,Y,Y.name);Z.length&&(await k.writeFile(Q,Z),G.log("Generated",v0.filePaths.dist.ddeApiPath+`${Y.name}.yaml`))}}s0.exportOpenApi=q;async function z(L,k,G){let V=_x.Utils.joinPath(L,v0.filePaths.studio.auto.dlo.defaultInc),Y=await so(L,k);await k.writeFile(V,Y),G.log("Generated",v0.filePaths.studio.auto.dlo.defaultInc)}s0.exportDefaultInc=z})(TA||={});async function uo(x,A,e){let r=[],t=await cx.getAll(e);for(let s in t){let i=cx.dependencyToPath(x,s),v=cx.dependencyIdToName(s),l=_x.Utils.joinPath(i,`${mt}/${v}.dde`);await A.stat(l)&&r.push({libraryName:v,path:l,yaml:await TA.readYamlFile(l,A)})}if(e0.isLibrary(e)){let s=_x.Utils.joinPath(x,`/${mt}/${e.name}.dde`);await A.stat(s)&&r.push({libraryName:e.name,path:s,yaml:await TA.readYamlFile(s,A)})}return r}function Rc(x,A,e){if(typeof x=="string")return x;if(typeof x!="object"||x===null)return"";let r=x[A];if(typeof r=="string")return r;if(typeof r!="object"||r===null)return"";let t=e?.missingProperty;return t?r[t]??"":""}function Pc(x,A,e,r){let s={required:()=>`Missing required property '${A.missingProperty}'.`,additionalProperties:()=>`Unknown property '${A.additionalProperty}' is not allowed.`,type:()=>`Must be of type '${A.type}'.`,enum:()=>`Must be one of the allowed values: ${JSON.stringify(A.allowedValues)}.`,pattern:()=>`Value does not match the required pattern. ${r?.patternErrorMessage??e}`,minimum:()=>`${e}.`,maximum:()=>`${e}.`,exclusiveMinimum:()=>`${e}.`,exclusiveMaximum:()=>`${e}.`,not:()=>`This value is not allowed here. ${r?.description??""}`.trimEnd(),anyOf:()=>`Value does not match any of the allowed schemas. ${r?.description??""}`.trimEnd(),oneOf:()=>`Value does not match any of the allowed schemas. ${r?.description??""}`.trimEnd()}[x];return s?s():e}function Ic(x){let A=x.instancePath||"/",e=x.parentSchema,r=Rc(e?.errorMessage,x.keyword,x.params);if(r)return`${A}: ${r}`;let t=x.message||"unknown validation error";return`${A}: ${Pc(x.keyword,x.params,t,e)}`}function qc(x,A){let e=A.split("/").filter(Boolean).map(r=>{let t=Number(r);return Number.isNaN(t)?r:t});for(let r=e.length;r>=0;r--){let t=e.slice(0,r),s=x.getIn(t,!0);if(s?.range)return s.range}return null}function Nc(x,A,e){let r=qc(x,e.instancePath||"");return r?jo(A,r):{line:0,startCharacter:0,endCharacter:0}}var Ri=require("vscode-uri");var Zr=class{dloFileMap={};rootUri=Ri.URI.parse("");constructor(){}set workspacePath(A){this.rootUri=A}getSequenceForFile(A){let e=A.substring(this.rootUri.path.length||0);if(this.rootUri.scheme!=="file"){let t=this.rootUri.toString();e=A.substring(t.length+1)}if(Object.hasOwn(this.dloFileMap,e))return this.dloFileMap[e];let r=R0.generateHashForFilePath(e);return this.dloFileMap[e]=r,r}getFilePathForSequence(A){let e=Object.entries(this.dloFileMap).find(([,r])=>r===A);return e?Ri.URI.parse(`${this.rootUri.path}${e[0]}`).path:null}};var Po=require("vscode-uri");function Pi(x){return x.replace(/\\/g,"/").split("/").pop()??""}function er(x){return/\.spec\.dlo$/i.test(Pi(x))}function ht(x,A){let e=Pi(x);if(!e)return!1;if(er(e))return!0;let r=A?.dlo?.mainFile;return r?Pi(r)===e:e==="main.dlo"}var Oc=/^\s*#define\s+TEST_OWN_MAIN\b/m;function Mc(x){return Oc.test(x)}function En(x,A){if(!er(x))return[];let e=["DLO_TEST_SPEC=1"];return A!==void 0&&Mc(A)&&e.push("TEST_OWN_MAIN=1"),e}var gt="__it_";var cn=31-gt.length-4;function mo(x){return x.replace(/^_+/,"").replace(/_+$/,"")}function ln(x,A=cn){let e=mo(x.toLowerCase().replace(/[^a-zA-Z0-9_]+/g,"_"));return mo(e.substring(0,Math.max(0,A)))}function Cn(x,A){let e=ln(x);if(!e||!A.has(e))return e;for(let r=2;;r++){let t=`_${r}`,s=`${ln(x,cn-t.length)}${t}`;if(!A.has(s))return s}}function Bn(x){return`${gt}${x}`}function kt(x,A){return`${gt}${x}__${A}`}function dn(x,A){return`// @it ${x} "${A}"`}var ho=/\/\/\s*@it\s+([A-Za-z0-9_]+)\s+"((?:[^"\\]|\\.)*)"/;var Dn=class{quote="";step(A,e){let r=A[e];return this.quote?r==="\\"&&e+1<A.length?{insideString:!0,nextIndex:e+2}:(this.quote=r===this.quote?"":this.quote,{insideString:!0,nextIndex:e+1}):r==='"'||r==="'"?(this.quote=r,{insideString:!0,nextIndex:e+1}):{insideString:!1,nextIndex:e+1}}};function go(x,A){let e=new Dn,r=0;for(let t=A;t<x.length;){let{insideString:s,nextIndex:i}=e.step(x,t);if(!s){if(x[t]==="(")r++;else if(x[t]===")"&&--r===0)return t}t=i}return-1}function un(x){let A=new Dn,e=[],r=0,t="";for(let s=0;s<x.length;){let{insideString:i,nextIndex:v}=A.step(x,s),l=x[s];!i&&l===","&&r===0?(e.push(t),t=""):(!i&&(l==="("||l==="{")?r++:!i&&(l===")"||l==="}")&&r--,t+=x.slice(s,v)),s=v}return e.push(t),e}var Lc=/^[A-Za-z_@][A-Za-z0-9_@]*$/;function ko(x){return Lc.test(x.trim())}function yo(x){return/^\{[\s\S]*\}$/.test(x.trim())}var Gc=/^(?:0[xX][0-9a-fA-F]+|\d+|xx)$/;function _o(x){let A=x.trim().slice(1,-1).trim();if(!A)return{error:"an empty byte list {} is not valid"};let e=[];for(let r of un(A)){let t=r.trim();if(!Gc.test(t))return{error:`"${t}" is not a byte literal (decimal, 0x hex, or xx)`};if(t==="xx"){e.push("xx");continue}let s=t.startsWith("0x")||t.startsWith("0X")?parseInt(t,16):parseInt(t,10);if(s>255)return{error:`${t} is out of range 0..255 for a byte list`};e.push(s.toString(16).toUpperCase().padStart(2,"0"))}return{packed:e.join("")}}function wo(x){let A=x.trim().slice(1,-1).trim();if(!A)return{error:"an empty list {} is not valid"};let e=[];for(let r of un(A)){let t=r.trim();if(!/^-?(?:0[xX][0-9a-fA-F]+|\d+)$/.test(t))return{error:`"${t}" is not an integer literal`};let s=t.startsWith("-"),i=s?t.substring(1):t,v=(i.startsWith("0x")||i.startsWith("0X")?parseInt(i,16):parseInt(i,10))*(s?-1:1);e.push(v.toString(10))}return{packed:e.join("|")}}var Uc=/^(?:\s*#options\s+)(.*)(?:\s*)$/,Hc=/^(?:\s*#preinclude\s+)(.*)(?:\s*)$/,Kc=/^(?:\s*#ifdef\s+)(.*)$/,Wc=/^(?:\s*#ifndef\s+)(.*)$/,Jc=/^(?:\s*#elseifdef\s+)(.*)$/,zc=/^(?:\s*#elseifndef\s+)(.*)$/,Io=/^(\s*)(?:#callback\s+)(\w*)(?:\s*\(\s*)(.*?)(?:\s*\)\s*)(\{*){1}(?:\s*)$/,qo=/^(.*)(^|\s+)(?:assert\s*\(\s*)(.*?)(?:\s*,\s*)(.*?)(?:\s*\)\s*;*\s*)$/,No=/^(.*)(^|\s+)(?:assert\s*\(\s*)(.*?)(?:\s*\)\s*;*\s*)$/,Oo=/^(.*)(^|\s+)(?:assert\s*\(\s*\);*\s*)$/,Mo=/^(.*)(^|\s+)(?:catch\s*\(\s*)(.*?)(?:\s*\)\s*;*\s*)$/,Vc=/^\s*#include\s*</,Xc=/^\s*#endinput\s*/,Yc=/^\s*#pragma\s+dynamic\s+(\S+)\s*(\/\/.*|\/\*.*|)$/,$o=/^(.*)(^|\s+)(?:applog(|_ok|_warning|_alarm|_debug|_fatal)\s*\(\s*)(.*?)(?:\s*,\s*)(.*?)(?:\s*\)\s*;*\s*)$/,Lo=/^(.*)(^|\s*)(?:applog(|_ok|_warning|_alarm|_debug|_fatal)\s*\(\s*)(.*?)(?:\s*\)\s*;*\s*)$/;function So(x,A=""){let e=" ",r=x;return A.length?e={fatal:"\xA7",alarm:"!",warning:"?",debug:"~",ok:"$"}[A]||null:["!","?","~","$","\xA7"].includes(x.substring(1,1))&&(e=x.substring(1,1),r=`"${x.substring(2,x.length-1)}"`),{priority:`'${e}'`,code:r}}var Go=/^(.*)(^|\s+)(?:log(|_debug|_info|_warn|_error)\s*\(\s*)(.*?)(?:\s*\)\s*;*\s*)$/,Uo=(t=>(t[t.debug=0]="debug",t[t.info=1]="info",t[t.warn=2]="warn",t[t.error=3]="error",t))(Uo||{}),Qc=/^(.*)(^|\s*)DDE_(state|result|aloha|volatile|setting|command)_/,Zc=/^(.*)(^|\s*)onUplink(Restore|Apply)_(state|result|aloha|volatile|setting|command)/,xC=/^(.*)(^|\s*)onUplinkEvent/,AC=/(?:^|\s)(?:assert|catch|applog(?:_ok|_warning|_alarm|_debug|_fatal)?|log(?:_debug|_info|_warn|_error)?)\s*\(/,eC=/^\s*#callback\s+\w+\s*\(/;function To(x){let A=0,e=!1,r="";for(let t=0;t<x.length;t++){let s=x[t];if(e){if(s==="\\"){t++;continue}s===r&&(e=!1);continue}if(s==='"'||s==="'"){e=!0,r=s;continue}s==="("?A++:s===")"&&A--}return A}function Ho(x){return Io.test(x)||Oo.test(x)||qo.test(x)||No.test(x)||Mo.test(x)||$o.test(x)||Lo.test(x)||Go.test(x)}function rC(x,A,e){if(!(AC.test(e)||eC.test(e)))return null;let t=To(e);if(t<=0)return null;let s=t,i=[x[A]],v=[e],l=A+1,d=100;for(;s>0&&l<x.length&&l-A<d;){let h=x[l],_=h.split("//",1)[0];i.push(h),v.push(_),s+=To(_),l++}if(i.length<=1||s>0)return null;let p=i.map((h,_)=>_===0?h:h.trim()).join(" "),j=v.map((h,_)=>_===0?h:h.trim()).join(" ");return Ho(j)?{joinedOriginal:p,joinedStripped:j,extraLineCount:i.length-1}:null}var Ko=String.raw`[A-Za-z_@][A-Za-z0-9_@]*`,Wo=String.raw`"((?:[^"\\]|\\.)*)"`,tC=new RegExp(String.raw`^(\s*)IT\s*\(\s*${Wo}\s*\)(.*)$`),nC=new RegExp(String.raw`^\s*IT\s*\(\s*${Ko}\s*,\s*${Wo}\s*\)`),iC=/^(\s*)STEP\s*\(\s*(\d+)\s*\)(.*)$/,sC=new RegExp(String.raw`^\s*STEP\s*\(\s*${Ko}\s*,(\s*)\d+\s*\)`),aC=/^(\s*)AFTER_LOOP\b(.*)$/,oC=/\b(?:RUN_LOOP|RUN_LOOP_SEC|MOCK_DELIVER|MOCK_DELIVER_SEC|MOCK_DELIVER_IMMEDIATES)\s*\(/,FC=/^\s*DESCRIBE\s*\(/,vC=/^(\s*)TEST_SETUP\s*\(\s*\)(.*)$/,fC=/^(\s*)TEST_TEARDOWN\s*\(\s*\)(.*)$/,EC={MOCK_RETURN:{nativeNameArgs:[1]},MOCK_RETURN_SEQ:{nativeNameArgs:[1],listArgs:{2:"ints"}},MOCK_RETURN_SEQ_STRICT:{nativeNameArgs:[1],listArgs:{2:"ints"}},MOCK_BYTES:{nativeNameArgs:[1],listArgs:{3:"bytes"}},MOCK_BYTES_RET:{nativeNameArgs:[1],listArgs:{3:"bytes"}},MOCK_SEQ:{nativeNameArgs:[1]},MOCK_SEQ_STRICT:{nativeNameArgs:[1]},MOCK_REG:{nativeNameArgs:[1],listArgs:{4:"bytes"}},MOCK_REG_MASKED:{nativeNameArgs:[1],listArgs:{5:"bytes"}},MOCK_REG_RW:{nativeNameArgs:[1]},MOCK_RESET:{nativeNameArgs:[1]},EXPECT_CALLED:{nativeNameArgs:[1]},EXPECT_ARG_INT:{nativeNameArgs:[1]},EXPECT_ARG_BYTES:{nativeNameArgs:[1],listArgs:{4:"bytes"}},EXPECT_REG:{nativeNameArgs:[1]},EXPECT_REG_WRITES:{nativeNameArgs:[1]},EXPECT_CALL_ORDER:{nativeNameArgs:[1,3]},EXPECT_RECORD_BYTES:{listArgs:{2:"bytes"}}},Ii=class{slugs=new Set;stepsOfCurrent=new Set;currentSlug=null;currentIsMacroForm=!1;sawLoopAdvance=!1;describeCount=0;sawFileWideSetup=!1;sawFileWideTeardown=!1;setupSeenForGroup=new Set;teardownSeenForGroup=new Set;rewrite(A){let e=lC(A),r=A.substring(e.length);return oC.test(e)&&(this.sawLoopAdvance=!0),FC.test(e)&&this.describeCount++,this.rewriteIt(e,r)??this.rewriteAfterLoop(e,r)??this.rewriteStep(e,r)??this.rewriteTestSetup(e,r)??this.rewriteTestTeardown(e,r)??this.rewriteMacroArgs(e,r)}finishDeclaration(A,e,r,t,s,i){let{text:v,diagnostics:l}=this.applyMacroArgRewrite(r),d=t?`${Ro(A,e,v)} ${t}`:Ro(A,e,v);return{line:s?`${d} ${s}`:d,diagnostics:[...i,...l]}}rewriteIt(A,e){let r=tC.exec(A);if(!r)return this.checkItTwoArg(A);let[,t,s,i]=r,v=Cn(s,this.slugs);return v?(this.slugs.add(v),this.currentSlug=v,this.currentIsMacroForm=!1,this.stepsOfCurrent.clear(),this.sawLoopAdvance=!1,this.finishDeclaration(t,Bn(v),i,dn(v,s),e,[])):{line:null,diagnostics:[{level:"error",message:`IT("${s}") has no name to generate: a title needs at least one letter, digit or underscore, or use the IT(id, "title") form.`}]}}checkItTwoArg(A){let e=nC.exec(A);return!e||(this.currentSlug=null,this.currentIsMacroForm=!0,this.stepsOfCurrent.clear(),this.sawLoopAdvance=!1,!e[1].includes(","))?null:{line:null,diagnostics:[{level:"warning",message:`A comma in an IT() title splits the macro argument - write it as IT("${e[1]}") without an id, or drop the comma.`}]}}rewriteStep(A,e){let r=iC.exec(A);if(!r)return this.checkStepTwoArg(A);let[,t,s,i]=r,v=Number(s),l=this.stepError(v);return l?{line:null,diagnostics:[{level:"error",message:l}]}:(this.stepsOfCurrent.add(v),this.sawLoopAdvance=!1,this.finishDeclaration(t,kt(this.currentSlug,v),i,null,e,[]))}rewriteAfterLoop(A,e){let r=aC.exec(A);if(!r)return null;let[,t,s]=r;if(this.currentIsMacroForm)return{line:null,diagnostics:[{level:"error",message:'AFTER_LOOP continues an IT("title"); an IT(id, "title") is continued by STEP(id,n).'}]};if(!this.currentSlug)return{line:null,diagnostics:[{level:"error",message:'AFTER_LOOP has no IT() before it - it continues the most recent IT("title") after the firmware main loop ran.'}]};let i=this.sawLoopAdvance,v=this.stepsOfCurrent.size?Math.max(...this.stepsOfCurrent)+1:2;this.stepsOfCurrent.add(v),this.sawLoopAdvance=!1;let l=[];return i||l.push({level:"warning",message:"AFTER_LOOP splits the test but the block before it never let the main loop run - add RUN_LOOP(ms) at its end, or merge the blocks"}),this.finishDeclaration(t,kt(this.currentSlug,v),s,null,e,l)}rewriteTestSetup(A,e){let r=vC.exec(A);if(!r)return null;let[,t,s]=r;if(this.describeCount===0)return this.sawFileWideSetup?{line:null,diagnostics:[{level:"error",message:"TEST_SETUP() is already declared for this spec."}]}:(this.sawFileWideSetup=!0,null);let i=this.describeCount;if(this.setupSeenForGroup.has(i))return{line:null,diagnostics:[{level:"error",message:"TEST_SETUP() is already declared for this DESCRIBE group."}]};this.setupSeenForGroup.add(i);let v=`__tsetup_${i}`;return this.finishDeclaration(t,v,s,`// @setup ${i}`,e,[])}rewriteTestTeardown(A,e){let r=fC.exec(A);if(!r)return null;let[,t,s]=r;if(this.describeCount===0)return this.sawFileWideTeardown?{line:null,diagnostics:[{level:"error",message:"TEST_TEARDOWN() is already declared for this spec."}]}:(this.sawFileWideTeardown=!0,null);let i=this.describeCount;if(this.teardownSeenForGroup.has(i))return{line:null,diagnostics:[{level:"error",message:"TEST_TEARDOWN() is already declared for this DESCRIBE group."}]};this.teardownSeenForGroup.add(i);let v=`__tteardown_${i}`;return this.finishDeclaration(t,v,s,`// @teardown ${i}`,e,[])}rewriteMacroArgs(A,e){let{text:r,diagnostics:t,changed:s}=this.applyMacroArgRewrite(A);return s?{line:r+e,diagnostics:t}:t.length?{line:null,diagnostics:t}:null}applyMacroArgRewrite(A){let e=A,r=!1,t=[];for(let[s,i]of Object.entries(EC))e=this.rewriteMacroCallsOf(e,s,i,t,()=>r=!0);return{text:e,diagnostics:t,changed:r}}rewriteMacroCallsOf(A,e,r,t,s){let i=new RegExp(String.raw`\b${e}\b\s*\(`,"g"),v="",l=0,d=null;for(;d=i.exec(A);){let p=d.index+d[0].length-1,j=go(A,p);if(j<0)continue;let h=CC(A.slice(p+1,j),e,r,t);h&&(v+=A.slice(l,p+1)+h+")",l=j+1,s()),i.lastIndex=j+1}return v+=A.slice(l),v}stepError(A){return A<2?`STEP(${A}) is not a continuation step - step 1 is the IT() body itself, steps start at 2.`:this.currentIsMacroForm?`STEP(${A}) continues an IT("title"); an IT(id, "title") is continued by STEP(id,${A}).`:this.currentSlug?this.stepsOfCurrent.has(A)?`STEP(${A}) is already declared for this IT().`:null:`STEP(${A}) has no IT() before it - a step continues the most recent IT("title").`}checkStepTwoArg(A){let e=sC.exec(A);return!e||!e[1]?null:{line:null,diagnostics:[{level:"warning",message:"Remove the space after the comma in STEP(id, n) - pawncc pastes it into the public name."}]}}};function lC(x){let A="";for(let e=0;e<x.length;e++){let r=x[e];if(A)r==="\\"?e++:r===A&&(A="");else if(r==='"'||r==="'")A=r;else if(r==="/"&&x[e+1]==="/")return x.substring(0,e)}return x}function cC(x,A,e,r,t){let s=x.match(/^\s*/)?.[0]??"",i=x.trim();if(r.nativeNameArgs?.includes(A)&&ko(i))return{text:`${s}"${i}"`,changed:!0};let v=r.listArgs?.[A];if(v&&yo(i)){let l=v==="bytes"?_o(i):wo(i);return l.error?(t.push({level:"error",message:`${e}(): argument ${A} - ${l.error}`}),{text:x,changed:!1}):{text:`${s}"${l.packed}"`,changed:!0}}return{text:x,changed:!1}}function CC(x,A,e,r){let t=x.length?un(x):[],s=!1,i=t.map((v,l)=>{let d=cC(v,l+1,A,e,r);return s=s||d.changed,d.text});return s?i.join(","):null}function Ro(x,A,e){let r=e.trim(),t=r?" "+r:"";return`${x}public ${A}()${t}`}var xt=class{pragmaDynamic=null;dloFileSequencer=new Zr;constructor(){}get pragmaDynamicFlag(){return this.pragmaDynamic?`-S${this.pragmaDynamic}`:null}preCompileDloFile(A,e,r,t,s){this.dloFileSequencer.workspacePath=A;let i=[],v=t.path,l=!1,d=Po.Utils.basename(t);if(v.includes(v0.filePaths.studio.auto.dlo.path)){let P=d.substring(0,d.length-8);!["app","main"].includes(P)&&d.endsWith("-dde.inc")&&(l=R0.generateHashForLibraryName(P))}else if(v.includes(v0.filePaths.studio.libdeps)){let P=v.split("libdeps/")[1],[R]=P.split("/");["dlo-core"].includes(R)||(l=R0.generateHashForLibraryName(R))}else e0.isLibrary(r)&&(d.endsWith(".dlo")||v.includes("/dlo/examples/")||v.includes("/dlo/test/")?e.log("Skipping dde mangling for project file",d):l=R0.generateHashForLibraryName(r.name));if(v.endsWith(".auto/default.inc"))return{data:s.join(`
2770
2770
  `),diagnostics:i};let p=[],j=er(v)?new Ii:null,h=this.dloFileSequencer.getSequenceForFile(v);p.push(`stock static __file{} = "${h}";`),p.push(`stock static __refid{} = "${h}";`),p.push('stock static __applog_src_id{} = "A\\0\\0\\0\\0\\0\\0\\0";'),p.push("#line 0");let y=0;for(let P=0;P<s.length;P++){let R=s[P],N=R.split("//",1)[0],q=null,z=0;if(!Ho(N)){let L=rC(s,P,N);L&&(R=L.joinedOriginal,N=L.joinedStripped,z=L.extraLineCount)}let s0=j?.rewrite(R)??null;for(let L of s0?.diagnostics??[])i.push({file:t,level:L.level,line:P,message:L.message});if(s0?.line!==null&&s0?.line!==void 0)R=s0.line;else if(q=Uc.exec(N))R="// "+R,i.push({file:t,level:"error",line:P,message:"#options is not supported here. Use the DLO settings instead."});else if(q=Hc.exec(N))R="// "+R,i.push({file:t,level:"error",line:P,message:"#preinclude is not supported here. Use the DLO settings instead."});else if(q=Yc.exec(N)){let L=Number(q[1].startsWith("(")?q[1].substring(1,q[1].length-1):q[1]);!Number.isInteger(L)||L<64?i.push({file:t,level:"error",line:P,message:"#pragma dynamic only supports integer values and must be greater than 63"}):(!this.pragmaDynamic||L>this.pragmaDynamic)&&(this.pragmaDynamic=L)}else if(q=Kc.exec(N))R=R.replace("#ifdef ","#if defined ");else if(q=Wc.exec(N))R=R.replace("#ifndef ","#if !defined ");else if(q=Jc.exec(N))R=R.replace("#elseifdef ","#elseif defined ");else if(q=zc.exec(N))R=R.replace("#elseifndef ","#elseif !defined ");else if(q=Io.exec(N)){let[,L,k,G,V]=q;R=`${L}#define ${k} _catch_funcidx( "___${k}")
2771
2771
  forward ___${k}( ${G});
2772
2772
  #line
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@microtronics/studio-cli",
3
- "version": "1.3.0-alpha.7",
3
+ "version": "1.3.0-alpha.8",
4
4
  "description": "Microtronics Studio CLI Tool",
5
5
  "main": "./out/api.js",
6
6
  "typings": "./out/studio-cli.d.ts",