@hpcc-js/observablehq-compiler 3.3.9 → 3.4.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.
@@ -0,0 +1,28 @@
1
+ "use strict";var P=Object.defineProperty;var te=Object.getOwnPropertyDescriptor;var re=Object.getOwnPropertyNames;var ne=Object.prototype.hasOwnProperty;var oe=(t,e)=>{for(var r in e)P(t,r,{get:e[r],enumerable:!0})},ie=(t,e,r,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of re(e))!ne.call(t,o)&&o!==r&&P(t,o,{get:()=>e[o],enumerable:!(n=te(e,o))||n.enumerable});return t};var ae=t=>ie(P({},"__esModule",{value:!0}),t);var qe={};oe(qe,{Writer:()=>v,compile:()=>N,compileKit:()=>X,download:()=>G,html2notebook:()=>B,isNotebookKit:()=>Y,isOhqNotebook:()=>ke,notebook:()=>Q,notebook2html:()=>J,ojs2notebook:()=>g,ojs2notebookKit:()=>U,omd2notebook:()=>C,omd2notebookKit:()=>_});module.exports=ae(qe);var Z=require("jsdom");var K=require("@observablehq/notebook-kit");var V=require("acorn"),I=require("acorn-walk"),b=require("@observablehq/parser");var se=require("acorn-walk");var R=require("acorn-walk"),$=(0,R.make)({Import(){},ViewExpression(t,e,r){r(t.id,e,"Identifier")},MutableExpression(t,e,r){r(t.id,e,"Identifier")}});var le=require("acorn-walk");var j=class extends b.CellParser{parseTopLevel(e){for(e.cells||(e.cells=[]);this.type!==V.tokTypes.eof;){let r=this.parseCell(this.startNode());r.input=this.input,e.cells.push(r)}return this.next(),this.finishNode(e,"Program")}};function h(t){return j.parse(t,{ecmaVersion:"latest"}).cells.map(e=>({type:"Cell",text:t.substring(e.start,e.end),start:e.start,end:e.end}))}function k(t){return(0,b.parseCell)(t)}var M=b.walk;var u=require("@observablehq/notebook-kit");var d={regular:Object.getPrototypeOf(function(){}).constructor,async:Object.getPrototypeOf(async function(){}).constructor,generator:Object.getPrototypeOf(function*(){}).constructor,asyncGenerator:Object.getPrototypeOf(async function*(){}).constructor};function ce(t=!1,e=!1){return!t&&!e?d.regular:t&&!e?d.async:!t&&e?d.generator:d.asyncGenerator}function F(t,e=!1,r=!1,n=!1,o){if(o!==void 0)return t.patches.sort((i,s)=>s.start-i.start),t.patches.forEach(i=>{o=o.substring(0,i.start)+i.newText+o.substring(i.end)}),new(ce(e,r))(...t.args,n?o.substring(1,o.length-1).trim():`return (
2
+ ${o}
3
+ );`)}function pe(t,e){return e?t.replace(/\/+$/,"")+"/"+e.replace(/^\/+/,""):t}var S=t=>t[0]===".",y=(t,e)=>S(t)?pe(e,t):t,ue=new d.async("url","return import(url)");async function A(t){return ue(t)}function D(t){return t.split("`").join("\\`")}function q(t,e,r){let n,o;try{n=k(t)}catch(i){o=i}return{ojs:t,offset:e,inlineMD:r,cell:n,error:o}}function T(t){let e=[],r=/(```(?:\s|\S)[\s\S]*?```)/g,n=0,o=r.exec(t);for(;o!==null;){o.index>n&&e.push(q(t.substring(n,o.index),n,!0));let i=o[0];if(i.indexOf("``` ")===0||i.indexOf("```\n")===0||i.indexOf("```\r\n")===0){let l=i.substring(3,i.length-3);e.push(q(l,o.index+3,!1))}else e.push(q(i,o.index,!0));n=o.index+o[0].length,o=r.exec(t)}return t.length>n&&e.push(q(t.substring(n,t.length),n,!0)),e}function g(t){let e=h(t);return{files:[],nodes:e.map((r,n)=>({id:n,mode:"js",value:r.text,start:r.start,end:r.end}))}}function U(t){let e=h(t).map((r,n)=>(0,u.toCell)({id:n,mode:"ojs",value:r.text}));return(0,u.toNotebook)({cells:e})}function C(t){let e=T(t);return{files:[],nodes:e.map((r,n)=>({id:n,mode:r.inlineMD?"md":"js",value:r.ojs,start:r.offset,end:r.offset+r.ojs.length}))}}function _(t){let e=[];return T(t).forEach(r=>{r.inlineMD?e.push((0,u.toCell)({id:e.length+1,mode:"md",value:r.ojs})):h(r.ojs).forEach(n=>{e.push((0,u.toCell)({id:e.length+1,mode:"ojs",value:n.text}))})}),(0,u.toNotebook)({cells:e})}function x(t,e="https://api.codetabs.com/v1/proxy/?quest=",r=""){let n=t.match(/^(?:https?:\/\/)?(?:[^@\n]+@)?(?:www\.)?([^:\/\n?]+)/img);if(!n||n.length===0)throw new Error(`Invalid URL: ${t}`);return fetch(t,{headers:{origin:n[0],referer:t}}).then(o=>{if(o.ok)return o;throw new Error("CORS?")}).catch(o=>(t=`${e}${t}${r}`,fetch(t,{headers:{origin:n[0],referer:t}})))}function G(t,e,r){let n=t.indexOf("https://observablehq.com/d")===0;return x(t.replace(`https://observablehq.com/${n?"d/":""}`,"https://api.observablehq.com/document/"),e,r).then(o=>o.json())}function O(t,e){if(t.type!=="FunctionExpression"&&t.type!=="FunctionDeclaration"&&t.type!=="ArrowFunctionExpression")throw new Error(`Unsupported function type: ${t.type}`);let r=t.async&&t.generator?d.asyncGenerator:t.async?d.async:t.generator?d.generator:d.regular,n=t.params?.map(a=>e.slice(a.start,a.end)).join(", ")??"",o=t.body.type==="BlockStatement",{start:i,end:s}=t.body,l=o?e.slice(i+1,s-1):`return ${e.slice(i,s)}`;return r(n,l)}function L(t){let{body:e}=(0,u.parseJavaScript)(t);if(e.type==="Program"){if(e.body.length!==1)throw new Error(`Expected a single function, but found ${e.body.length} statements`);return O(e.body[0],t)}return O(e,t)}var B=t=>(0,u.deserialize)(t),J=t=>(0,u.serialize)(t);function fe(t,e){if(t.references===void 0)return{inputs:[],args:[],patches:[]};let r={};t.references.forEach(i=>r[e.substring(i.start,i.end)]=!0);let n={inputs:Object.keys(r),args:Object.keys(r).map(i=>i.split(" ").join("_")),patches:[]},o=(i,s)=>n.patches.push({start:i.start-(t.body?.start??0),end:i.end-(t.body?.start??0),newText:s});return t.body&&(0,I.ancestor)(t.body,{Identifier(i){let s=e.substring(i.start,i.end);r[s]},MutableExpression(i){let l=e.substring(i.start,i.end).split(" ").join("_")+".value";o(i,l)},ViewExpression(i){let l=e.substring(i.start,i.end).split(" ").join("_");o(i,l)},ThisExpression(i,s){e.substring(i.start,i.end)==="this"&&!s.find(a=>a.type==="FunctionExpression")&&o(i,"((this === globalThis || this === globalThis.window)? undefined : this?.valueOf())")}},M),n}function de(t){return{type:"import",src:t.body.source.value,specifiers:t.body.specifiers?.map(e=>({view:e.view,name:e.imported.name,alias:e.local?.name&&e.imported.name!==e.local.name?e.local.name:e.imported.name}))??[],injections:t.body.injections?.map(e=>({name:e.imported.name,alias:e.local?.name??e.imported.name}))??[]}}function me(t,e,r,n){let o=e.id&&t.substring(e.id.start,e.id.end);return{type:"viewof",variable:{type:"variable",id:o,inputs:r.inputs,func:F(r,e.async,e.generator,e.body.type==="BlockStatement",n)},variableValue:{type:"variable",id:e?.id?.id?.name,inputs:["Generators",o],func:(i,s)=>i.input(s)}}}function be(t,e,r,n){let o=e.id&&t.substring(e.id.start,e.id.end),i=e?.id?.id?.name,s=`initial ${i}`;return{type:"mutable",initial:{type:"variable",id:s,inputs:r.inputs,func:F(r,e.async,e.generator,e.body.type==="BlockStatement",n)},variable:{type:"variable",id:o,inputs:["Mutable",s],func:(l,a)=>new l(a)},variableValue:{type:"variable",id:i,inputs:[o],func:l=>l.generator}}}function he(t,e,r,n){return{type:"variable",id:e.id&&t.substring(e.id?.start,e.id?.end),inputs:r.inputs,func:F(r,e.async,e.generator,e.body.type==="BlockStatement",n)}}function W(t,e){let r=k(t),n=r.body&&t.substring(r.body.start,r.body.end);switch(r.body?.type){case"ImportDeclaration":return de(r);case"ImportExpression":switch(r.body.source.type){case"Literal":n=`import("${y(""+r.body.source.value,e)}")`;break;default:console.error("Unexpected import value")}}let o=fe(r,t);switch(r.id?.type){case"ViewExpression":return me(t,r,o,n);case"MutableExpression":return be(t,r,o,n);default:return he(t,r,o,n)}}var v=class{_files=[];_imports=[];_functions=[];_defines=[];_defineUid=0;_functionUid=0;constructor(){}toString(){return`${this._imports.join(`
4
+ `)}
5
+
6
+ ${this._functions.join(`
7
+ `).split(`
8
+ ) {`).join("){")}
9
+
10
+ export default function define(runtime, observer) {
11
+ const main = runtime.module();
12
+
13
+ function toString() { return this.url; }
14
+ const fileAttachments = new Map([
15
+ ${this._files.map(e=>`["${e.name}", { url: new URL("${e.url}"), mimeType: ${JSON.stringify(e.mime_type)}, toString }]`).join(`,
16
+ `)}
17
+ ]);
18
+ main.builtin("FileAttachment", runtime.fileAttachments(name => fileAttachments.get(name)));
19
+
20
+ ${this._defines.join(`
21
+ `)}
22
+
23
+ return main;
24
+ }
25
+ `}files(e){this._files=[...this._files,...e]}import(e){this._imports.push(`import define${++this._defineUid} from "${e}"; `)}importDefine(e){let r=e.injections??[],n=r.map(s=>s.name===s.alias?`"${s.name}"`:`{name: "${s.name}", alias: "${s.alias}"}`),o=r.length?`.derive([${n.join(", ")}], main)`:"";this._defines.push(`const child${this._defineUid} = runtime.module(define${this._defineUid})${o};`),(e.specifiers??[]).forEach(s=>{this._defines.push(`main.import("${s.name}"${s.alias&&s.alias!==s.name?`, "${s.alias}"`:""}, child${this._defineUid}); `)})}function(e){let r=e.id??`${++this._functionUid}`,n=r.split(" ");return r=`_${n[n.length-1]}`,this._functions.push(`${e.func?.toString()?.replace("anonymous",`${r}`)}`),r}define(e,r=!0,n=!1,o){o=o??e.id;let i=r?`.variable(observer(${e.id?JSON.stringify(e.id):""}))`:"",s=e.id?`${JSON.stringify(e.id)}, `:"",l=e.inputs??[],a=l.length?`[${l.map(p=>JSON.stringify(p)).join(", ")}], `:"",c=n?e.func?.toString():o;this._defines.push(`main${i}.define(${s}${a}${c});`)}error(e){}};async function ye(t,e){let r=y(t,e),n=await x(r).then(s=>s.text()),o;t.endsWith(".ojsnb")?o=JSON.parse(n):t.endsWith(".ojs")?o=g(n):t.endsWith(".omd")?o=C(n):(console.warn(`Unknown file type: ${t}, assuming .ojsnb`),o=JSON.parse(n));let i=N(o,{baseUrl:e});return i.delete=()=>{},i.write=s=>{s.import(r)},i}async function ge(t){let e=`https://api.observablehq.com/${t[0]==="@"?t:`d/${t}`}.js?v=3`,r={default:function(o,i){}};try{r=await A(e)}catch{}let n=r.default;return n.delete=()=>{},n.write=o=>{o.import(e)},n}async function xe(t){let e=`https://api.observablehq.com/document/${t}`,r=x(e).then(o=>o.json()).catch(o=>{console.error(e),console.error(o)}),n=N(await r);return n.delete=()=>{},n.write=o=>{o.import(e)},n}async function ve(t,e,r,{baseUrl:n,importMode:o}){let i=S(e.src)?await ye(e.src,n??""):o==="recursive"?await xe(e.src):await ge(e.src),s=[],l=[];e.specifiers.forEach(c=>{let p=c.view?"viewof ":"";s.push(z(p+c.name,p+c.alias)),c.view&&s.push(z(c.name,c.alias))});let a=(c,p,f)=>{let w=c.module(i);return e.injections.length&&(w=w.derive(e.injections,p)),l.forEach(E=>E(p,f)),s.forEach(E=>E(p,w)),w};return a.importVariables=s,a.variables=l,a.delete=()=>{s.forEach(c=>c.delete()),l.forEach(c=>c.delete()),i.delete()},a.write=c=>{i.write(c),c.importDefine(e)},a}function m(t,e,r,n,o,i=!1){let s,l,a=(c,p)=>{if(e&&p&&(s=p(r,t.id)),l=c.variable(s),arguments.length>1)try{l.define(r,n,o)}catch(f){console.error(f?.message)}if(t.pinned){l=p?c.variable(p(r,t.id)):c.variable();try{l.define(void 0,["md"],f=>f`\`\`\`js
26
+ ${t.value}
27
+ \`\`\``)}catch(f){console.error(f?.message)}}return l};return a.delete=()=>{try{s?._node?.remove()}catch{}s=void 0;try{l?.delete()}catch{}l=void 0},a.write=c=>{if(i)c.define({id:r,inputs:n,func:o},e,!0);else{let p=c.function({id:r,func:o});c.define({id:r,inputs:n,func:o},e,!1,p)}},a}function z(t,e){let r,n=(o,i)=>{r=o.variable(),e===void 0?r.import(t,i):r.import(t,e,i)};return n.delete=()=>{r?.delete()},n}async function H(t,e){let r=[],n=[];try{let i=t.mode&&t.mode!=="js"?`${t.mode}\`${D(t.value)}\``:t.value,s=h(i);for(let l of s){let a=W(l.text,e.baseUrl??"");switch(a.type){case"import":r.push(await ve(t,a,l.text,e));break;case"viewof":n.push(m(t,!0,a.variable.id,a.variable.inputs,a.variable.func)),n.push(m(t,!1,a.variableValue.id,a.variableValue.inputs,a.variableValue.func,!0));break;case"mutable":n.push(m(t,!1,a.initial.id,a.initial.inputs,a.initial.func)),n.push(m(t,!1,a.variable.id,a.variable.inputs,a.variable.func)),n.push(m(t,!0,a.variableValue.id,a.variableValue.inputs,a.variableValue.func,!0));break;case"variable":n.push(m(t,!0,a.id,a.inputs,a.func));break}}}catch(i){n.push(m(t,!0,void 0,[],i.message??"Unkown error"))}let o=(i,s,l)=>{r.forEach(a=>a(i,s,l)),n.forEach(a=>a(s,l))};return o.id=t.id,o.modules=r,o.variables=n,o.delete=()=>{n.forEach(i=>i.delete()),r.forEach(i=>i.delete())},o.write=i=>{r.forEach(s=>s.write(i)),n.forEach(s=>s.write(i))},o}function we(t,e){function r(){return globalThis.url??""}return[t.name,{url:new URL(y(t.url,e.baseUrl??"")),mimeType:t.mime_type,toString:r}]}function Q(t=[],e=[],{baseUrl:r=".",importMode:n="precompiled"}={}){let o=t.map(a=>we(a,{baseUrl:r,importMode:n})),i=new Map(o),s=new Map(e.map(a=>[a.id,a])),l=(a,c)=>{let p=a.module();return p.builtin("FileAttachment",a.fileAttachments(f=>i.get(f)??{url:new URL(y(f,r)),mimeType:null})),p.builtin("fetchEx",x),s.forEach(f=>{f(a,p,c)}),p};return l.fileAttachments=i,l.cells=s,l.set=async a=>{let c=await H(a,{baseUrl:r,importMode:n});return l.delete(c.id),s.set(c.id,c),c},l.get=a=>s.get(a),l.delete=a=>{let c=s.get(a);return c?(c.delete(),s.delete(a)):!1},l.clear=()=>{s.forEach(a=>a.delete()),s.clear()},l.write=a=>{a.files(t),s.forEach(c=>c.write(a))},l.toString=(a=new v)=>(l.write(a),a.toString().trim()),l}function X(t){let e=[];for(let r of t.cells){let n=(0,K.transpile)(r);e.push({id:r.id,...n,body:L(n.body)})}return e}function Y(t){return!!t&&Array.isArray(t.cells)}function ke(t){return!!t&&Array.isArray(t.nodes)}async function N(t,{baseUrl:e=".",importMode:r="precompiled"}={}){if(Y(t))return X(t);typeof t=="string"&&(t=g(t));let n=await Promise.all(t.nodes.map(o=>H(o,{baseUrl:e,importMode:r})));return Q(t.files,n,{baseUrl:e,importMode:r})}var{window:ee}=new Z.JSDOM;globalThis.document=ee.document;globalThis.DOMParser=ee.DOMParser;0&&(module.exports={Writer,compile,compileKit,download,html2notebook,isNotebookKit,isOhqNotebook,notebook,notebook2html,ojs2notebook,ojs2notebookKit,omd2notebook,omd2notebookKit});
28
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/index.node.ts", "../../src/compiler.ts", "../../src/parse.ts", "../../../../node_modules/@observablehq/parser/src/references.js", "../../../../node_modules/@observablehq/parser/src/walk.js", "../../../../node_modules/@observablehq/parser/src/features.js", "../../src/util.ts", "../../src/cst.ts", "../../src/writer.ts"],
4
+ "sourcesContent": ["import { JSDOM } from \"jsdom\";\n\nconst { window } = new JSDOM();\nglobalThis.document = window.document;\nglobalThis.DOMParser = window.DOMParser;\n\nexport * from \"./index.ts\";\n", "\nimport { type Notebook, transpile } from \"@observablehq/notebook-kit\";\nimport { type Definition } from \"@observablehq/notebook-kit/runtime\";\nimport { ohq, splitModule } from \"./observable-shim.ts\";\nimport { parseCell, ParsedImportCell } from \"./cst.ts\";\nimport { Writer } from \"./writer.ts\";\nimport { fixRelativeUrl, isRelativePath, encodeBacktick, fetchEx, obfuscatedImport, ojs2notebook, omd2notebook, constructFunction } from \"./util.ts\";\n\n// Inspector Factory ---\nexport type InspectorFactoryEx = (name: string | undefined, id: string | number) => Inspector;\n\nexport interface Inspector {\n _node?: HTMLDivElement;\n pending(): void;\n fulfilled(value: any): void;\n rejected(error: Error): void;\n}\n\n// Module ---\n\ninterface ImportDefine {\n (runtime: ohq.Runtime, inspector?: InspectorFactoryEx): ohq.Module;\n delete: () => void;\n write: (w: Writer) => void;\n}\n\nasync function importFile(relativePath: string, baseUrl: string) {\n const path = fixRelativeUrl(relativePath, baseUrl);\n const content = await fetchEx(path).then(r => r.text());\n let notebook: ohq.Notebook;\n if (relativePath.endsWith(\".ojsnb\")) {\n notebook = JSON.parse(content);\n } else if (relativePath.endsWith(\".ojs\")) {\n notebook = ojs2notebook(content);\n } else if (relativePath.endsWith(\".omd\")) {\n notebook = omd2notebook(content);\n } else {\n console.warn(`Unknown file type: ${relativePath}, assuming .ojsnb`);\n notebook = JSON.parse(content);\n }\n const retVal: ImportDefine = compile(notebook, { baseUrl }) as any;\n retVal.delete = () => { };\n retVal.write = (w: Writer) => {\n w.import(path);\n };\n return retVal;\n}\n\n// Import precompiled notebook from observable ---\nasync function importCompiledNotebook(partial: string) {\n const url = `https://api.observablehq.com/${partial[0] === \"@\" ? partial : `d/${partial}`}.js?v=3`;\n let impMod = {\n default: function (runtime: ohq.Runtime, inspector?: InspectorFactoryEx): ohq.Module | undefined {\n return undefined;\n } as any\n };\n try {\n impMod = await obfuscatedImport(url);\n } catch (e) {\n }\n const retVal: ImportDefine = impMod.default;\n retVal.delete = () => { };\n retVal.write = (w: Writer) => {\n w.import(url);\n };\n return retVal;\n}\n\n// Recursive notebook parsing and compiling\nasync function importNotebook(partial: string) {\n const url = `https://api.observablehq.com/document/${partial}`;\n const notebook = fetchEx(url)\n .then(r => {\n return r.json();\n }).catch(e => {\n console.error(url);\n console.error(e);\n });\n const retVal: ImportDefine = compile(await notebook) as any;\n retVal.delete = () => { };\n retVal.write = (w: Writer) => {\n w.import(url);\n };\n return retVal;\n}\n\nasync function createModule(node: ohq.Node, parsed: ParsedImportCell, text: string, { baseUrl, importMode }: CompileOptions) {\n const otherModule = isRelativePath(parsed.src) ?\n await importFile(parsed.src, baseUrl ?? \"\") :\n importMode === \"recursive\" ?\n await importNotebook(parsed.src) :\n await importCompiledNotebook(parsed.src);\n\n const importVariables: ImportVariableFunc[] = [];\n const variables: VariableFunc[] = [];\n parsed.specifiers.forEach(spec => {\n const viewof = spec.view ? \"viewof \" : \"\";\n importVariables.push(createImportVariable(viewof + spec.name, viewof + spec.alias));\n if (spec.view) {\n importVariables.push(createImportVariable(spec.name, spec.alias));\n }\n });\n\n const retVal = (runtime: ohq.Runtime, main: ohq.Module, inspector?: InspectorFactoryEx) => {\n\n let mod = runtime.module(otherModule);\n if (parsed.injections.length) {\n mod = mod.derive(parsed.injections, main);\n }\n variables.forEach(v => v(main, inspector));\n importVariables.forEach(v => v(main, mod));\n return mod;\n };\n retVal.importVariables = importVariables;\n retVal.variables = variables;\n retVal.delete = () => {\n importVariables.forEach(v => v.delete());\n variables.forEach(v => v.delete());\n otherModule.delete();\n };\n retVal.write = (w: Writer) => {\n otherModule.write(w);\n w.importDefine(parsed);\n };\n return retVal;\n}\ntype ModuleFunc = Awaited<ReturnType<typeof createModule>>;\n\n// Variable ---\nfunction createVariable(node: ohq.Node, inspect: boolean, name?: string, inputs?: string[], definition?: any, inline = false) {\n\n let i: ohq.Inspector | undefined;\n let v: ohq.Variable | undefined;\n\n const retVal = (module: ohq.Module, inspector?: InspectorFactoryEx) => {\n if (inspect && inspector) {\n i = inspector(name, node.id);\n }\n v = module.variable(i);\n if (arguments.length > 1) {\n try {\n v.define(name, inputs, definition);\n } catch (e: any) {\n console.error(e?.message);\n }\n }\n if (node.pinned) {\n v = inspector ? module.variable(inspector(name, node.id)) : module.variable();\n try {\n v.define(undefined, [\"md\"], (md: any) => {\n return md`\\`\\`\\`js\n${node.value}\n\\`\\`\\``;\n });\n } catch (e: any) {\n console.error(e?.message);\n }\n }\n return v;\n };\n retVal.delete = () => {\n try {\n i?._node?.remove();\n } catch (e) {\n }\n i = undefined;\n try {\n v?.delete();\n } catch (e) {\n }\n v = undefined;\n };\n retVal.write = (w: Writer) => {\n if (inline) {\n w.define({ id: name, inputs, func: definition }, inspect, true);\n } else {\n const id = w.function({ id: name, func: definition });\n w.define({ id: name, inputs, func: definition }, inspect, false, id);\n }\n };\n return retVal;\n}\ntype VariableFunc = ReturnType<typeof createVariable>;\n\nfunction createImportVariable(name: string, alias?: string) {\n\n let v: ohq.Variable;\n\n const retVal = (main: ohq.Module, otherModule: ohq.Module) => {\n v = main.variable();\n if (alias === undefined) {\n v.import(name, otherModule);\n } else {\n v.import(name, alias, otherModule);\n }\n };\n\n retVal.delete = () => {\n v?.delete();\n };\n return retVal;\n}\ntype ImportVariableFunc = ReturnType<typeof createImportVariable>;\n\n// Cell ---\nasync function createCell(node: ohq.Node, options: CompileOptions) {\n const modules: ModuleFunc[] = [];\n const variables: VariableFunc[] = [];\n try {\n const text = node.mode && node.mode !== \"js\" ? `${node.mode}\\`${encodeBacktick(node.value)}\\`` : node.value;\n const parsedModule = splitModule(text);\n for (const cell of parsedModule) {\n const parsed = parseCell(cell.text, options.baseUrl ?? \"\");\n switch (parsed.type) {\n case \"import\":\n modules.push(await createModule(node, parsed, cell.text, options));\n break;\n case \"viewof\":\n variables.push(createVariable(node, true, parsed.variable.id, parsed.variable.inputs, parsed.variable.func));\n variables.push(createVariable(node, false, parsed.variableValue.id, parsed.variableValue.inputs, parsed.variableValue.func, true));\n break;\n case \"mutable\":\n variables.push(createVariable(node, false, parsed.initial.id, parsed.initial.inputs, parsed.initial.func));\n variables.push(createVariable(node, false, parsed.variable.id, parsed.variable.inputs, parsed.variable.func));\n variables.push(createVariable(node, true, parsed.variableValue.id, parsed.variableValue.inputs, parsed.variableValue.func, true));\n break;\n case \"variable\":\n variables.push(createVariable(node, true, parsed.id, parsed.inputs, parsed.func));\n break;\n }\n }\n } catch (e: any) {\n variables.push(createVariable(node, true, undefined, [], e.message ?? \"Unkown error\"));\n }\n\n const retVal = (runtime: ohq.Runtime, main: ohq.Module, inspector?: InspectorFactoryEx) => {\n modules.forEach(imp => imp(runtime, main, inspector));\n variables.forEach(v => v(main, inspector));\n };\n retVal.id = node.id;\n retVal.modules = modules;\n retVal.variables = variables;\n retVal.delete = () => {\n variables.forEach(v => v.delete());\n modules.forEach(mod => mod.delete());\n };\n retVal.write = (w: Writer) => {\n modules.forEach(imp => imp.write(w));\n variables.forEach(v => v.write(w));\n };\n return retVal;\n}\nexport type CellFunc = Awaited<ReturnType<typeof createCell>>;\n\n// File ---\nfunction createFile(file: ohq.File, options: CompileOptions): [string, any] {\n function toString() {\n // TODO Double check url should not be URL?\n return (globalThis as any).url ?? \"\";\n }\n return [file.name, { url: new URL(fixRelativeUrl(file.url, options.baseUrl ?? \"\")), mimeType: file.mime_type, toString }];\n}\ntype FileFunc = ReturnType<typeof createFile>;\n\n// Interpret ---\nexport interface CompileOptions {\n baseUrl?: string;\n importMode?: \"recursive\" | \"precompiled\";\n}\nexport function notebook(_files: ohq.File[] = [], _cells: CellFunc[] = [], { baseUrl = \".\", importMode = \"precompiled\" }: CompileOptions = {}) {\n const files: FileFunc[] = _files.map(f => createFile(f, { baseUrl, importMode }));\n const fileAttachments = new Map<string, any>(files);\n const cells = new Map<string | number, CellFunc>(_cells.map(c => [c.id, c]));\n\n const retVal = (runtime: ohq.Runtime, inspector?: InspectorFactoryEx): ohq.Module => {\n const main = runtime.module();\n main.builtin(\"FileAttachment\", runtime.fileAttachments(name => {\n return fileAttachments.get(name) ?? { url: new URL(fixRelativeUrl(name, baseUrl)), mimeType: null };\n }));\n main.builtin(\"fetchEx\", fetchEx);\n\n cells.forEach(cell => {\n cell(runtime, main, inspector);\n });\n return main;\n };\n retVal.fileAttachments = fileAttachments;\n retVal.cells = cells;\n retVal.set = async (n: ohq.Node): Promise<CellFunc> => {\n const cell = await createCell(n, { baseUrl, importMode });\n retVal.delete(cell.id);\n cells.set(cell.id, cell);\n return cell;\n };\n retVal.get = (id: string | number): CellFunc | undefined => {\n return cells.get(id);\n };\n retVal.delete = (id: string | number): boolean => {\n const cell = cells.get(id);\n if (cell) {\n cell.delete();\n return cells.delete(id);\n }\n return false;\n };\n retVal.clear = () => {\n cells.forEach(cell => cell.delete());\n cells.clear();\n };\n retVal.write = (w: Writer) => {\n w.files(_files);\n cells.forEach(cell => cell.write(w));\n };\n retVal.toString = (w = new Writer()) => {\n retVal.write(w);\n return w.toString().trim();\n };\n return retVal;\n}\ntype NotebookFunc = ReturnType<typeof notebook>;\n\nexport function compileKit(notebook: Notebook): Definition[] {\n const retVal: Definition[] = [];\n for (const cell of notebook.cells) {\n const compiled = transpile(cell);\n retVal.push({\n id: cell.id,\n ...compiled,\n body: constructFunction(compiled.body)\n });\n }\n return retVal;\n}\n\nexport function isNotebookKit(value: any): value is Notebook {\n return !!value && Array.isArray(value.cells);\n}\n\nexport function isOhqNotebook(value: any): value is ohq.Notebook {\n return !!value && Array.isArray(value.nodes);\n}\nexport async function compile(notebookOrOjs: Notebook): Promise<Definition[]>;\nexport async function compile(notebookOrOjs: ohq.Notebook, options?: CompileOptions): Promise<NotebookFunc>;\nexport async function compile(notebookOrOjs: string, options?: CompileOptions): Promise<NotebookFunc>;\nexport async function compile(notebookOrOjs: Notebook | ohq.Notebook | string, { baseUrl = \".\", importMode = \"precompiled\" }: CompileOptions = {}) {\n if (isNotebookKit(notebookOrOjs)) {\n return compileKit(notebookOrOjs);\n } else if (typeof notebookOrOjs === \"string\") {\n notebookOrOjs = ojs2notebook(notebookOrOjs);\n }\n const _cells: CellFunc[] = await Promise.all(notebookOrOjs.nodes.map(n => createCell(n, { baseUrl, importMode })));\n return notebook(notebookOrOjs.files, _cells, { baseUrl, importMode });\n}\nexport type CompileFunc = Awaited<ReturnType<typeof compile>>;\n", "// Compare with ../../../node_modules/@observablehq/parser/src/parse.js\nimport { getLineInfo, tokTypes, Statement, ModuleDeclaration, Expression as ExpressionBase, Node } from \"acorn\";\nimport { ancestor, RecursiveVisitors, AncestorVisitors } from \"acorn-walk\";\nimport { CellParser, parseCell as ohqParseCell, walk as ohqWalk } from \"@observablehq/parser\";\nimport defaultGlobals from \"../../../node_modules/@observablehq/parser/src/globals.js\";\nimport findReferences from \"../../../node_modules/@observablehq/parser/src/references.js\";\nimport findFeatures from \"../../../node_modules/@observablehq/parser/src/features.js\";\n\nexport interface MutableExpression extends Node {\n type: \"MutableExpression\"\n}\n\nexport interface ViewExpression extends Node {\n type: \"ViewExpression\"\n}\n\nexport type Expression = ExpressionBase | MutableExpression | ViewExpression;\n\n// Find references.\n// Check for illegal references to arguments.\n// Check for illegal assignments to global references.\nfunction parseReferences(cell, input, globals = defaultGlobals) {\n if (!cell.body) {\n cell.references = [];\n } else if (cell.body.type === \"ImportDeclaration\") {\n // This is correct?!?\n cell.references = cell.body.specifiers\n ? cell.body.specifiers.map(i => i.imported)\n : [];\n } else {\n try {\n cell.references = findReferences(cell, globals);\n } catch (error: any) {\n if (error.node) {\n const loc = getLineInfo(input, error.node.start);\n error.message += ` (${loc.line}:${loc.column})`;\n error.pos = error.node.start;\n error.loc = loc;\n delete error.node;\n }\n throw error;\n }\n }\n return cell;\n}\n\n// Find features: file attachments, secrets, database clients.\n// Check for illegal references to arguments.\n// Check for illegal assignments to global references.\nfunction parseFeatures(cell, input) {\n if (cell.body && cell.body.type !== \"ImportDeclaration\") {\n try {\n cell.fileAttachments = findFeatures(cell, \"FileAttachment\");\n cell.databaseClients = findFeatures(cell, \"DatabaseClient\");\n cell.secrets = findFeatures(cell, \"Secret\");\n } catch (error: any) {\n if (error.node) {\n const loc = getLineInfo(input, error.node.start);\n error.message += ` (${loc.line}:${loc.column})`;\n error.pos = error.node.start;\n error.loc = loc;\n delete error.node;\n }\n throw error;\n }\n } else {\n cell.fileAttachments = new Map();\n cell.databaseClients = new Map();\n cell.secrets = new Map();\n }\n return cell;\n}\n\nclass ModuleParser extends CellParser {\n\n parseTopLevel(node: { cells?: Cell[] }) {\n if (!node.cells) node.cells = [];\n // @ts-ignore\n while (this.type !== tokTypes.eof) {\n // @ts-ignore\n const cell: Cell = this.parseCell(this.startNode());\n // @ts-ignore\n cell.input = this.input;\n node.cells.push(cell);\n }\n // @ts-ignore\n this.next();\n // @ts-ignore\n return this.finishNode(node, \"Program\");\n }\n}\n\n// @ts-ignore\nexport function parseModule(input, { globals }: { globals: any } = {}) {\n // @ts-ignore\n const program = ModuleParser.parse(input, { ecmaVersion: 2020 });\n for (const cell of program.cells) {\n parseReferences(cell, input, globals);\n parseFeatures(cell, input);\n }\n return program;\n}\n\nexport interface Cell extends Node {\n type: \"Cell\";\n id: Expression;\n text: string;\n body?: Statement | ModuleDeclaration | Expression;\n references: unknown[];\n async: boolean;\n generator: boolean;\n strict: boolean;\n}\n\nexport function splitModule(input: string): Cell[] {\n return (ModuleParser as any)\n .parse(input, { ecmaVersion: \"latest\" })\n .cells.map((cell: any) => ({\n type: \"Cell\",\n text: input.substring(cell.start, cell.end),\n start: cell.start,\n end: cell.end\n }));\n}\n\nexport {\n type Node,\n ancestor,\n type AncestorVisitors\n};\n\nexport function parseCell(input: string): Cell {\n return ohqParseCell(input);\n}\n\nexport const walk: RecursiveVisitors<any> = ohqWalk;\n", "// Based on https://github.com/ForbesLindesay/acorn-globals\n// Copyright (c) 2014 Forbes Lindesay\n// https://github.com/ForbesLindesay/acorn-globals/blob/master/LICENSE\n\nimport {ancestor} from \"acorn-walk\";\nimport walk from \"./walk.js\";\n\nfunction isScope(node) {\n return node.type === \"FunctionExpression\"\n || node.type === \"FunctionDeclaration\"\n || node.type === \"ArrowFunctionExpression\"\n || node.type === \"Program\";\n}\n\nfunction isBlockScope(node) {\n return node.type === \"BlockStatement\"\n || node.type === \"ForInStatement\"\n || node.type === \"ForOfStatement\"\n || node.type === \"ForStatement\"\n || isScope(node);\n}\n\nfunction declaresArguments(node) {\n return node.type === \"FunctionExpression\"\n || node.type === \"FunctionDeclaration\";\n}\n\nexport default function findReferences(cell, globals) {\n const ast = {type: \"Program\", body: [cell.body]};\n const locals = new Map;\n const globalSet = new Set(globals);\n const references = [];\n\n function hasLocal(node, name) {\n const l = locals.get(node);\n return l ? l.has(name) : false;\n }\n\n function declareLocal(node, id) {\n const l = locals.get(node);\n if (l) l.add(id.name);\n else locals.set(node, new Set([id.name]));\n }\n\n function declareClass(node) {\n if (node.id) declareLocal(node, node.id);\n }\n\n function declareFunction(node) {\n node.params.forEach(param => declarePattern(param, node));\n if (node.id) declareLocal(node, node.id);\n }\n\n function declareCatchClause(node) {\n if (node.param) declarePattern(node.param, node);\n }\n\n function declarePattern(node, parent) {\n switch (node.type) {\n case \"Identifier\":\n declareLocal(parent, node);\n break;\n case \"ObjectPattern\":\n node.properties.forEach(node => declarePattern(node, parent));\n break;\n case \"ArrayPattern\":\n node.elements.forEach(node => node && declarePattern(node, parent));\n break;\n case \"Property\":\n declarePattern(node.value, parent);\n break;\n case \"RestElement\":\n declarePattern(node.argument, parent);\n break;\n case \"AssignmentPattern\":\n declarePattern(node.left, parent);\n break;\n default:\n throw new Error(\"Unrecognized pattern type: \" + node.type);\n }\n }\n\n function declareModuleSpecifier(node) {\n declareLocal(ast, node.local);\n }\n\n ancestor(\n ast,\n {\n VariableDeclaration: (node, parents) => {\n let parent = null;\n for (let i = parents.length - 1; i >= 0 && parent === null; --i) {\n if (node.kind === \"var\" ? isScope(parents[i]) : isBlockScope(parents[i])) {\n parent = parents[i];\n }\n }\n node.declarations.forEach(declaration => declarePattern(declaration.id, parent));\n },\n FunctionDeclaration: (node, parents) => {\n let parent = null;\n for (let i = parents.length - 2; i >= 0 && parent === null; --i) {\n if (isScope(parents[i])) {\n parent = parents[i];\n }\n }\n declareLocal(parent, node.id);\n declareFunction(node);\n },\n Function: declareFunction,\n ClassDeclaration: (node, parents) => {\n let parent = null;\n for (let i = parents.length - 2; i >= 0 && parent === null; i--) {\n if (isScope(parents[i])) {\n parent = parents[i];\n }\n }\n declareLocal(parent, node.id);\n },\n Class: declareClass,\n CatchClause: declareCatchClause,\n ImportDefaultSpecifier: declareModuleSpecifier,\n ImportSpecifier: declareModuleSpecifier,\n ImportNamespaceSpecifier: declareModuleSpecifier\n },\n walk\n );\n\n function identifier(node, parents) {\n let name = node.name;\n if (name === \"undefined\") return;\n for (let i = parents.length - 2; i >= 0; --i) {\n if (name === \"arguments\") {\n if (declaresArguments(parents[i])) {\n return;\n }\n }\n if (hasLocal(parents[i], name)) {\n return;\n }\n if (parents[i].type === \"ViewExpression\") {\n node = parents[i];\n name = `viewof ${node.id.name}`;\n }\n if (parents[i].type === \"MutableExpression\") {\n node = parents[i];\n name = `mutable ${node.id.name}`;\n }\n }\n if (!globalSet.has(name)) {\n if (name === \"arguments\") {\n throw Object.assign(new SyntaxError(`arguments is not allowed`), {node});\n }\n references.push(node);\n }\n }\n\n ancestor(\n ast,\n {\n VariablePattern: identifier,\n Identifier: identifier\n },\n walk\n );\n\n function checkConst(node, parents) {\n if (!node) return;\n switch (node.type) {\n case \"Identifier\":\n case \"VariablePattern\": {\n for (const parent of parents) {\n if (hasLocal(parent, node.name)) {\n return;\n }\n }\n if (parents[parents.length - 2].type === \"MutableExpression\") {\n return;\n }\n throw Object.assign(new SyntaxError(`Assignment to constant variable ${node.name}`), {node});\n }\n case \"ArrayPattern\": {\n for (const element of node.elements) {\n checkConst(element, parents);\n }\n return;\n }\n case \"ObjectPattern\": {\n for (const property of node.properties) {\n checkConst(property, parents);\n }\n return;\n }\n case \"Property\": {\n checkConst(node.value, parents);\n return;\n }\n case \"RestElement\": {\n checkConst(node.argument, parents);\n return;\n }\n }\n }\n\n function checkConstArgument(node, parents) {\n checkConst(node.argument, parents);\n }\n\n function checkConstLeft(node, parents) {\n checkConst(node.left, parents);\n }\n\n ancestor(\n ast,\n {\n AssignmentExpression: checkConstLeft,\n AssignmentPattern: checkConstLeft,\n UpdateExpression: checkConstArgument,\n ForOfStatement: checkConstLeft,\n ForInStatement: checkConstLeft\n },\n walk\n );\n\n return references;\n}\n", "import {make} from \"acorn-walk\";\n\nexport default make({\n Import() {},\n ViewExpression(node, st, c) {\n c(node.id, st, \"Identifier\");\n },\n MutableExpression(node, st, c) {\n c(node.id, st, \"Identifier\");\n }\n});\n", "import {simple} from \"acorn-walk\";\nimport walk from \"./walk.js\";\n\nexport default function findFeatures(cell, featureName) {\n const ast = {type: \"Program\", body: [cell.body]};\n const features = new Map();\n const {references} = cell;\n\n simple(\n ast,\n {\n CallExpression: node => {\n const {callee, arguments: args} = node;\n\n // Ignore function calls that are not references to the feature.\n if (\n callee.type !== \"Identifier\" ||\n callee.name !== featureName ||\n references.indexOf(callee) < 0\n ) return;\n\n // Forbid dynamic calls.\n if (\n args.length !== 1 ||\n !((args[0].type === \"Literal\" && /^['\"]/.test(args[0].raw)) ||\n (args[0].type === \"TemplateLiteral\" && args[0].expressions.length === 0))\n ) {\n throw Object.assign(new SyntaxError(`${featureName} requires a single literal string argument`), {node});\n }\n\n const [arg] = args;\n const name = arg.type === \"Literal\" ? arg.value : arg.quasis[0].value.cooked;\n const location = {start: arg.start, end: arg.end};\n if (features.has(name)) features.get(name).push(location);\n else features.set(name, [location]);\n }\n },\n walk\n );\n\n return features;\n}\n", "import { type Notebook, type Cell, toCell, toNotebook, parseJavaScript, serialize, deserialize } from \"@observablehq/notebook-kit\";\n\nimport type { ohq } from \"./observable-shim.ts\";\nimport { parseCell, splitModule } from \"./observable-shim.ts\";\n\n// Shared function constructor utilities to avoid duplication between util modules.\n\nexport type RegularFunction = (...args: any[]) => any;\ninterface RegularFunctionConstructor {\n new(...args: string[]): RegularFunction;\n (...args: string[]): RegularFunction;\n readonly prototype: RegularFunction;\n}\n\nexport type AsyncFunction = (...args: any[]) => Promise<any>;\ninterface AsyncFunctionConstructor {\n new(...args: string[]): AsyncFunction;\n (...args: string[]): AsyncFunction;\n readonly prototype: AsyncFunction;\n}\n\nexport type GeneratorFunction = (...args: any[]) => Generator<any, any, any>;\ninterface GeneratorFunctionConstructor {\n new(...args: string[]): GeneratorFunction;\n (...args: string[]): GeneratorFunction;\n readonly prototype: GeneratorFunction;\n}\n\nexport type AsyncGeneratorFunction = (...args: any[]) => AsyncGenerator<any, any, any>;\ninterface AsyncGeneratorFunctionConstructor {\n new(...args: string[]): AsyncGeneratorFunction;\n (...args: string[]): AsyncGeneratorFunction;\n readonly prototype: AsyncGeneratorFunction;\n}\n\nexport type AnyFunction = RegularFunction | AsyncFunction | GeneratorFunction | AsyncGeneratorFunction;\n\nexport const FunctionConstructors: {\n regular: RegularFunctionConstructor;\n async: AsyncFunctionConstructor;\n generator: GeneratorFunctionConstructor;\n asyncGenerator: AsyncGeneratorFunctionConstructor;\n} = {\n regular: Object.getPrototypeOf(function () { }).constructor as RegularFunctionConstructor,\n async: Object.getPrototypeOf(async function () { }).constructor as AsyncFunctionConstructor,\n generator: Object.getPrototypeOf(function* () { }).constructor as GeneratorFunctionConstructor,\n asyncGenerator: Object.getPrototypeOf(async function* () { }).constructor as AsyncGeneratorFunctionConstructor,\n};\n\nfunction funcType(async: boolean = false, generator: boolean = false) {\n if (!async && !generator) return FunctionConstructors.regular;\n if (async && !generator) return FunctionConstructors.async;\n if (!async && generator) return FunctionConstructors.generator;\n return FunctionConstructors.asyncGenerator;\n}\n\ninterface Ref {\n start: number,\n end: number,\n newText: string\n}\n\nexport interface Refs {\n inputs: string[];\n args: string[];\n patches: Ref[];\n}\n\nexport function createFunction(refs: Refs, async = false, generator = false, blockStatement = false, body?: string) {\n if (body === undefined) {\n return undefined;\n }\n\n refs.patches.sort((l, r) => r.start - l.start);\n refs.patches.forEach(r => {\n body = body!.substring(0, r.start) + r.newText + body!.substring(r.end);\n });\n return new (funcType(async, generator))(...refs.args, blockStatement ?\n body.substring(1, body.length - 1).trim() :\n `return (\\n${body}\\n);`);\n}\n\nfunction join(baseURL: string, relativeURL: string) {\n return relativeURL\n ? baseURL.replace(/\\/+$/, \"\") + \"/\" + relativeURL.replace(/^\\/+/, \"\")\n : baseURL;\n}\n\nexport const isRelativePath = (path: string) => path[0] === \".\";\nexport const fixRelativeUrl = (path: string, basePath: string) => {\n if (isRelativePath(path)) {\n return join(basePath, path);\n }\n return path;\n};\n\n// Hide \"import\" from bundlers as they have a habit of replacing \"import\" with \"require\"\nconst obfuscatedImportFunction = new FunctionConstructors.async(\"url\", \"return import(url)\");\nexport async function obfuscatedImport(url: string) {\n return obfuscatedImportFunction(url);\n}\n\ninterface ParsedOJS {\n ojs: string;\n offset: number;\n inlineMD: boolean;\n cell: any;\n error: any;\n}\n\nexport function encodeBacktick(str: string) {\n return str\n .split(\"`\").join(\"\\\\`\")\n ;\n}\n\nfunction createParsedOJS(ojs: string, offset: number, inlineMD: boolean): ParsedOJS {\n let cell;\n let error;\n try {\n cell = parseCell(ojs);\n } catch (e) {\n error = e;\n }\n return {\n ojs,\n offset,\n inlineMD,\n cell,\n error\n };\n}\n\nfunction splitOmd(_: string): ParsedOJS[] {\n const retVal: ParsedOJS[] = [];\n // Load Markdown ---\n const re = /(```(?:\\s|\\S)[\\s\\S]*?```)/g;\n let prevOffset = 0;\n let match = re.exec(_);\n while (match !== null) {\n if (match.index > prevOffset) {\n retVal.push(createParsedOJS(_.substring(prevOffset, match.index), prevOffset, true));\n }\n\n const outer = match[0];\n if (outer.indexOf(\"``` \") === 0 || outer.indexOf(\"```\\n\") === 0 || outer.indexOf(\"```\\r\\n\") === 0) {\n const prefixLen = 3;\n const inner = outer.substring(prefixLen, outer.length - prefixLen);\n retVal.push(createParsedOJS(inner, match.index + prefixLen, false));\n } else {\n retVal.push(createParsedOJS(outer, match.index, true));\n }\n\n prevOffset = match.index + match[0].length;\n match = re.exec(_);\n }\n if (_.length > prevOffset) {\n retVal.push(createParsedOJS(_.substring(prevOffset, _.length), prevOffset, true));\n }\n return retVal;\n}\n\nexport function notebook2ojs(_: string): ParsedOJS[] {\n const parsed: ohq.Notebook = JSON.parse(_);\n return parsed.nodes.map(node => createParsedOJS(node.value, 0, node.mode === \"md\"));\n}\n\nexport function ojs2notebook(ojs: string): ohq.Notebook {\n const cells = splitModule(ojs);\n return {\n files: [],\n nodes: cells.map((cell, idx) => {\n return {\n id: idx,\n mode: \"js\",\n value: cell.text,\n start: cell.start,\n end: cell.end\n };\n })\n } as ohq.Notebook;\n}\n\nexport function ojs2notebookKit(ojs: string): Notebook {\n const cells: Cell[] = splitModule(ojs).map((cell, idx) => {\n return toCell({\n id: idx,\n mode: \"ojs\",\n value: cell.text\n });\n });\n return toNotebook({ cells });\n}\n\nexport function omd2notebook(omd: string): ohq.Notebook {\n const cells = splitOmd(omd);\n return {\n files: [],\n nodes: cells.map((cell, idx) => {\n return {\n id: idx,\n mode: cell.inlineMD ? \"md\" : \"js\",\n value: cell.ojs,\n start: cell.offset,\n end: cell.offset + cell.ojs.length\n };\n })\n } as ohq.Notebook;\n}\n\nexport function omd2notebookKit(omd: string): Notebook {\n const cells: Cell[] = [];\n splitOmd(omd).forEach((cell) => {\n if (!cell.inlineMD) {\n splitModule(cell.ojs).forEach((subCell) => {\n cells.push(toCell({\n id: cells.length + 1,\n mode: \"ojs\",\n value: subCell.text\n }));\n });\n } else {\n cells.push(toCell({\n id: cells.length + 1,\n mode: \"md\",\n value: cell.ojs\n }));\n }\n });\n return toNotebook({ cells });\n}\n\nexport function fetchEx(url: string, proxyPrefix = \"https://api.codetabs.com/v1/proxy/?quest=\", proxyPostfix = \"\") {\n const matches = url.match(/^(?:https?:\\/\\/)?(?:[^@\\n]+@)?(?:www\\.)?([^:\\/\\n?]+)/img);\n if (!matches || matches.length === 0) {\n throw new Error(`Invalid URL: ${url}`);\n }\n return fetch(url, { headers: { origin: matches[0], referer: url } }).then(response => {\n if (response.ok) return response;\n throw new Error(\"CORS?\");\n }).catch(e => {\n url = `${proxyPrefix}${url}${proxyPostfix}`;\n return fetch(url, { headers: { origin: matches[0], referer: url } });\n });\n}\n\nexport function download(impUrl: string, proxyPrefix?: string, proxyPostfix?: string): Promise<ohq.Notebook> {\n const isShared = impUrl.indexOf(\"https://observablehq.com/d\") === 0;\n return fetchEx(impUrl.replace(`https://observablehq.com/${isShared ? \"d/\" : \"\"}`, \"https://api.observablehq.com/document/\"), proxyPrefix, proxyPostfix)\n .then(r => r.json())\n ;\n}\n\nfunction _constructFunction(body, bodyStr: string) {\n if (body.type !== \"FunctionExpression\" && body.type !== \"FunctionDeclaration\" && body.type !== \"ArrowFunctionExpression\") {\n throw new Error(`Unsupported function type: ${body.type}`);\n }\n const func = body.async && body.generator ?\n FunctionConstructors.asyncGenerator :\n body.async ?\n FunctionConstructors.async :\n body.generator ?\n FunctionConstructors.generator :\n FunctionConstructors.regular;\n\n const params = body.params?.map((param) => bodyStr.slice(param.start, param.end)).join(\", \") ?? \"\";\n const isBlock = body.body.type === \"BlockStatement\";\n const { start, end } = body.body;\n const inner = isBlock\n ? bodyStr.slice(start + 1, end - 1)\n : `return ${bodyStr.slice(start, end)}`;\n return func(params, inner);\n}\n\nexport function constructFunction(bodyStr: string) {\n const { body } = parseJavaScript(bodyStr);\n if (body.type === \"Program\") {\n if (body.body.length !== 1) {\n throw new Error(`Expected a single function, but found ${body.body.length} statements`);\n }\n return _constructFunction(body.body[0], bodyStr);\n }\n return _constructFunction(body, bodyStr);\n}\n\nexport const html2notebook = (html: string): Notebook => deserialize(html);\nexport const notebook2html = (notebook: Notebook): string => serialize(notebook);\n\n", "import { ancestor, parseCell as ohqParseCell, Cell, Node, walk, AncestorVisitors } from \"./observable-shim.ts\";\n\nimport { fixRelativeUrl, createFunction, Refs } from \"./util.ts\";\n\nfunction calcRefs(cellAst: Cell, cellStr: string): Refs {\n if (cellAst.references === undefined) return { inputs: [], args: [], patches: [] };\n\n const dedup: { [id: string]: boolean } = {};\n cellAst.references.forEach((r: any) => dedup[cellStr.substring(r.start, r.end)] = true);\n const retVal: Refs = {\n inputs: Object.keys(dedup),\n args: Object.keys(dedup).map(r => r.split(\" \").join(\"_\")),\n patches: []\n };\n const pushPatch = (node: Node, newText: string) => retVal.patches.push({ start: node.start - (cellAst.body?.start ?? 0), end: node.end - (cellAst.body?.start ?? 0), newText });\n if (cellAst.body) {\n ancestor(cellAst.body, {\n Identifier(node) {\n const value = cellStr.substring(node.start, node.end);\n if (dedup[value]) {\n }\n },\n MutableExpression(node: Node) {\n const value = cellStr.substring(node.start, node.end);\n const newText = value.split(\" \").join(\"_\") + \".value\";\n pushPatch(node, newText);\n },\n ViewExpression(node: Node) {\n const value = cellStr.substring(node.start, node.end);\n const newText = value.split(\" \").join(\"_\");\n pushPatch(node, newText);\n },\n ThisExpression(node: Node, ancestors: Node[]) {\n const value = cellStr.substring(node.start, node.end);\n if (value === \"this\" && !ancestors.find(n => n.type === \"FunctionExpression\")) {\n pushPatch(node, \"((this === globalThis || this === globalThis.window)? undefined : this?.valueOf())\");\n }\n }\n } as AncestorVisitors<any>, walk);\n }\n return retVal;\n}\n\nexport interface ParsedCell {\n type: \"import\" | \"viewof\" | \"mutable\" | \"variable\" | \"identifier\"\n}\n\nexport interface ParsedImportCell extends ParsedCell {\n type: \"import\"\n src: string;\n specifiers: { view: boolean, name: string, alias?: string }[];\n injections: { name: string, alias: string }[];\n}\n\nfunction parseImportDeclaration(cellAst: any): ParsedImportCell {\n return {\n type: \"import\",\n src: cellAst.body.source.value,\n specifiers: cellAst.body.specifiers?.map((spec: any) => {\n return {\n view: spec.view,\n name: spec.imported.name,\n alias: (spec.local?.name && spec.imported.name !== spec.local.name) ? spec.local.name : spec.imported.name\n };\n }) ?? [],\n injections: cellAst.body.injections?.map((inj: any) => {\n return {\n name: inj.imported.name,\n alias: inj.local?.name ?? inj.imported.name\n };\n }) ?? [],\n };\n}\n\nexport interface ParsedVariable extends ParsedCell {\n type: \"variable\"\n id?: string,\n inputs: string[],\n func: any,\n}\n\nexport interface ParsedViewCell extends ParsedCell {\n type: \"viewof\",\n variable: ParsedVariable;\n variableValue: ParsedVariable;\n}\n\nfunction parseViewExpression(cellStr: string, cellAst: any, refs: Refs, bodyStr?: string): ParsedViewCell {\n const id = cellAst.id && cellStr.substring(cellAst.id.start, cellAst.id.end);\n return {\n type: \"viewof\",\n variable: {\n type: \"variable\",\n id,\n inputs: refs.inputs,\n func: createFunction(refs, cellAst.async, cellAst.generator, cellAst.body.type === \"BlockStatement\", bodyStr)\n },\n variableValue: {\n type: \"variable\",\n id: cellAst?.id?.id?.name,\n inputs: [\"Generators\", id],\n func: (G: any, _: any) => G.input(_)\n }\n };\n}\n\ninterface ParsedMutableCell extends ParsedCell {\n type: \"mutable\",\n initial: ParsedVariable;\n variable: ParsedVariable;\n variableValue: ParsedVariable;\n}\n\nfunction parseMutableExpression(cellStr: string, cellAst: any, refs: Refs, bodyStr?: string): ParsedMutableCell {\n const id = cellAst.id && cellStr.substring(cellAst.id.start, cellAst.id.end);\n const initialValueId = cellAst?.id?.id?.name;\n const initialId = `initial ${initialValueId}`;\n return {\n type: \"mutable\",\n initial: {\n type: \"variable\",\n id: initialId,\n inputs: refs.inputs,\n func: createFunction(refs, cellAst.async, cellAst.generator, cellAst.body.type === \"BlockStatement\", bodyStr)\n },\n variable: {\n type: \"variable\",\n id,\n inputs: [\"Mutable\", initialId],\n func: (M: any, _: any) => new M(_)\n },\n variableValue: {\n type: \"variable\",\n id: initialValueId,\n inputs: [id],\n func: (_: any) => _.generator\n }\n };\n}\n\ninterface ParsedVariableCell extends ParsedCell {\n type: \"variable\",\n id: string,\n inputs: string[],\n func: any,\n}\n\nfunction parseVariableExpression(cellStr: string, cellAst: any, refs: Refs, bodyStr?: string): ParsedVariableCell {\n return {\n type: \"variable\",\n id: cellAst.id && cellStr.substring(cellAst.id?.start, cellAst.id?.end),\n inputs: refs.inputs,\n func: createFunction(refs, cellAst.async, cellAst.generator, cellAst.body.type === \"BlockStatement\", bodyStr)\n };\n}\n\nexport function parseCell(cellStr: string, baseUrl: string): ParsedImportCell | ParsedViewCell | ParsedMutableCell | ParsedVariableCell {\n const cellAst = ohqParseCell(cellStr);\n let bodyStr = cellAst.body && cellStr.substring(cellAst.body.start, cellAst.body.end);\n switch ((cellAst.body)?.type) {\n case \"ImportDeclaration\":\n return parseImportDeclaration(cellAst);\n case \"ImportExpression\":\n switch (cellAst.body.source.type) {\n case \"Literal\":\n bodyStr = `import(\"${fixRelativeUrl(\"\" + cellAst.body.source.value, baseUrl)}\")`;\n break;\n default:\n console.error(\"Unexpected import value\");\n }\n }\n const refs = calcRefs(cellAst, cellStr);\n switch (cellAst.id?.type) {\n case \"ViewExpression\":\n return parseViewExpression(cellStr, cellAst, refs, bodyStr);\n case \"MutableExpression\":\n return parseMutableExpression(cellStr, cellAst, refs, bodyStr);\n default:\n return parseVariableExpression(cellStr, cellAst, refs, bodyStr);\n }\n}\n\n", "import { ohq } from \"./observable-shim.ts\";\nimport { ParsedImportCell, ParsedVariable } from \"./cst.ts\";\n\nexport class Writer {\n\n protected _files: ohq.File[] = [];\n protected _imports: string[] = [];\n protected _functions: string[] = [];\n protected _defines: string[] = [];\n protected _defineUid = 0;\n protected _functionUid = 0;\n\n constructor() {\n }\n\n toString() {\n return `\\\n${this._imports.join(\"\\n\")}\n\n${this._functions.join(\"\\n\").split(\"\\n) {\").join(\"){\")}\n\nexport default function define(runtime, observer) {\n const main = runtime.module();\n\n function toString() { return this.url; }\n const fileAttachments = new Map([\n ${this._files.map(f => `[\"${f.name}\", { url: new URL(\"${f.url}\"), mimeType: ${JSON.stringify(f.mime_type)}, toString }]`).join(\",\\n \")}\n ]);\n main.builtin(\"FileAttachment\", runtime.fileAttachments(name => fileAttachments.get(name)));\n\n ${this._defines.join(\"\\n \")}\n\n return main;\n}\\n`;\n }\n\n files(files: ohq.File[]) {\n this._files = [...this._files, ...files];\n }\n\n import(url: string) {\n this._imports.push(`import define${++this._defineUid} from \"${url}\"; `);\n }\n\n importDefine(imp: Partial<ParsedImportCell>) {\n const impInjections = imp.injections ?? [];\n const injections = impInjections.map(inj => {\n return inj.name === inj.alias ?\n `\"${inj.name}\"` :\n `{name: \"${inj.name}\", alias: \"${inj.alias}\"}`;\n });\n const derive = impInjections.length ? `.derive([${injections.join(\", \")}], main)` : \"\";\n this._defines.push(`const child${this._defineUid} = runtime.module(define${this._defineUid})${derive};`);\n const impSpecifiers = imp.specifiers ?? [];\n impSpecifiers.forEach(s => {\n this._defines.push(`main.import(\"${s.name}\"${s.alias && s.alias !== s.name ? `, \"${s.alias}\"` : \"\"}, child${this._defineUid}); `);\n });\n }\n\n function(variable: Partial<ParsedVariable>) {\n let id = variable.id ?? `${++this._functionUid}`;\n const idParts = id.split(\" \");\n id = `_${idParts[idParts.length - 1]}`;\n this._functions.push(`${variable.func?.toString()?.replace(\"anonymous\", `${id}`)}`);\n return id;\n }\n\n define(variable: Partial<ParsedVariable>, observable = true, inlineFunc = false, funcId?: string) {\n funcId = funcId ?? variable.id;\n const observe = observable ? `.variable(observer(${variable.id ? JSON.stringify(variable.id) : \"\"}))` : \"\";\n const id = variable.id ? `${JSON.stringify(variable.id)}, ` : \"\";\n const variableInputs = variable.inputs ?? [];\n const inputs = variableInputs.length ? `[${variableInputs.map(i => JSON.stringify(i)).join(\", \")}], ` : \"\";\n const func = inlineFunc ?\n variable.func?.toString() :\n funcId;\n this._defines.push(`main${observe}.define(${id}${inputs}${func});`);\n }\n\n error(msg: string) {\n }\n}\n\n"],
5
+ "mappings": "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",
6
+ "names": ["index_node_exports", "__export", "Writer", "compile", "compileKit", "download", "html2notebook", "isNotebookKit", "isOhqNotebook", "notebook", "notebook2html", "ojs2notebook", "ojs2notebookKit", "omd2notebook", "omd2notebookKit", "__toCommonJS", "import_jsdom", "import_notebook_kit", "import_acorn", "import_acorn_walk", "import_parser", "import_acorn_walk", "import_acorn_walk", "walk_default", "node", "st", "c", "import_acorn_walk", "ModuleParser", "node", "cell", "splitModule", "input", "ModuleParser", "cell", "parseCell", "input", "ohqParseCell", "walk", "ohqWalk", "import_notebook_kit", "FunctionConstructors", "funcType", "async", "generator", "createFunction", "refs", "blockStatement", "body", "l", "r", "join", "baseURL", "relativeURL", "isRelativePath", "path", "fixRelativeUrl", "basePath", "obfuscatedImportFunction", "obfuscatedImport", "url", "encodeBacktick", "str", "createParsedOJS", "ojs", "offset", "inlineMD", "cell", "error", "parseCell", "e", "splitOmd", "_", "retVal", "re", "prevOffset", "match", "outer", "inner", "ojs2notebook", "ojs", "cells", "splitModule", "cell", "idx", "ojs2notebookKit", "omd2notebook", "omd", "splitOmd", "omd2notebookKit", "subCell", "fetchEx", "url", "proxyPrefix", "proxyPostfix", "matches", "response", "e", "download", "impUrl", "isShared", "r", "_constructFunction", "body", "bodyStr", "func", "FunctionConstructors", "params", "param", "isBlock", "start", "end", "inner", "constructFunction", "html2notebook", "html", "notebook2html", "notebook", "calcRefs", "cellAst", "cellStr", "dedup", "r", "retVal", "pushPatch", "node", "newText", "value", "ancestors", "n", "walk", "parseImportDeclaration", "spec", "inj", "parseViewExpression", "refs", "bodyStr", "id", "createFunction", "G", "_", "parseMutableExpression", "initialValueId", "initialId", "M", "parseVariableExpression", "parseCell", "baseUrl", "fixRelativeUrl", "Writer", "f", "files", "url", "imp", "impInjections", "injections", "inj", "derive", "variable", "id", "idParts", "observable", "inlineFunc", "funcId", "observe", "variableInputs", "inputs", "i", "func", "msg", "importFile", "relativePath", "baseUrl", "path", "fixRelativeUrl", "content", "fetchEx", "r", "notebook", "ojs2notebook", "omd2notebook", "retVal", "compile", "w", "importCompiledNotebook", "partial", "url", "impMod", "runtime", "inspector", "obfuscatedImport", "importNotebook", "e", "createModule", "node", "parsed", "text", "importMode", "otherModule", "isRelativePath", "importVariables", "variables", "spec", "viewof", "createImportVariable", "main", "mod", "v", "createVariable", "inspect", "name", "inputs", "definition", "inline", "i", "module", "md", "id", "alias", "createCell", "options", "modules", "encodeBacktick", "parsedModule", "splitModule", "cell", "parseCell", "imp", "createFile", "file", "toString", "_files", "_cells", "files", "f", "fileAttachments", "cells", "c", "n", "Writer", "compileKit", "compiled", "constructFunction", "isNotebookKit", "value", "isOhqNotebook", "notebookOrOjs", "window"]
7
+ }
@@ -0,0 +1,2 @@
1
+ @import"https://fonts.googleapis.com/css2?family=Source+Serif+Pro:ital,wght@0,400;0,600;0,700;1,400;1,600;1,700&display=swap";:root{--syntax-normal: #1b1e23;--syntax-comment: #828282;--syntax-number: #20a5ba;--syntax-keyword: #c30771;--syntax-atom: #10a778;--syntax-string: #008ec4;--syntax-error: #ffbedc;--syntax-unknown-variable: #838383;--syntax-known-variable: #005f87;--syntax-matchbracket: #20bbfc;--syntax-key: #6636b4;--mono-fonts: 82%/1.5 Menlo, Consolas, monospace}.observablehq--expanded,.observablehq--collapsed,.observablehq--function,.observablehq--import,.observablehq--string:before,.observablehq--string:after,.observablehq--gray{color:var(--syntax-normal)}.observablehq--collapsed,.observablehq--expanded.observablehq--inspect a{cursor:pointer}.observablehq--field{text-indent:-1em;margin-left:1em}.observablehq--empty{color:var(--syntax_comment)}a[href],.observablehq--keyword,.observablehq--blue{color:#3182bd}.hljs-deletion,.hljs-variable,.observablehq--forbidden,.observablehq--pink{color:#e377c2}.observablehq--orange{color:#e6550d}.observablehq--null,.observablehq--undefined,.observablehq--boolean,.hljs-literal{color:var(--syntax-atom)}.hljs-number,.hljs-regexp,.hljs-bullet,.hljs-link,.observablehq--bigint,.observablehq--number,.observablehq--date,.observablehq--regexp,.observablehq--symbol,.observablehq--green{color:var(--syntax-number)}.observablehq--index,.observablehq--key{color:var(--syntax-key)}.observablehq--prototype-key{color:#aaa}.observablehq--empty{font-style:oblique}.hljs-string,.hljs-meta,.hljs-symbol,.hljs-template-tag,.hljs-template-variable,.hljs-addition,.observablehq--string,.observablehq--purple{color:var(--syntax-string)}.observablehq--error,.observablehq--red{color:#e7040f}.observablehq:empty:after,.observablehq>link:only-child,.observablehq>style:only-child,.observablehq--inspect{font:var(--monospace-font);overflow-x:auto;display:block;padding:4px 0;white-space:pre}.observablehq--error .observablehq--inspect{word-break:break-all;white-space:pre-wrap}:root{--syntax-diff: #24292e;--syntax-diff-bg: #ffffff;--hr: rgba(0, 0, 0, .05);--monospace: Menlo, Consolas, monospace;--monospace-font: 14px/1.5 var(--monospace);--serif: "Source Serif Pro", "Iowan Old Style", "Apple Garamond", "Palatino Linotype", "Times New Roman", "Droid Serif", Times, serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";--sans-serif: -apple-system, BlinkMacSystemFont, "avenir next", avenir, helvetica, "helvetica neue", ubuntu, roboto, noto, "segoe ui", arial, sans-serif}html{font:17px/1.5 var(--serif);-webkit-text-size-adjust:100%;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;color:#1b1e23}body{margin:0 14px}body.fullscreen{margin:0}h1,h2,h3,h4,h5,h6{color:#333;font-weight:700;line-height:1.15;margin-top:0;margin-bottom:.25rem}h2~p,h3~p,h4~p,h2~table,h3~table,h4~table{margin-top:0}.observablehq:first-of-type h1+h2{font-size:20px;font-style:italic;font-weight:400;margin-bottom:1rem}a[href]{text-decoration:none}a[href]:hover{text-decoration:underline}h1 code,h2 code,h3 code,h4 code,h5 code,h6 code{font-size:90%}pre,code,tt{font-family:var(--monospace);font-size:14px;line-height:1.5}img{max-width:calc(100vw - 28px)}p,table,figure,figcaption,h1,h2,h3,h4,h5,h6,.katex-display{max-width:640px}blockquote,ol,ul{max-width:600px}blockquote{margin:1rem 1.5rem}ul,ol{padding-left:28px}hr{height:1px;margin:1rem 0;padding:1rem 0;border:none;background:no-repeat center/100% 1px linear-gradient(to right,var(--hr),var(--hr))}pre{padding:2px 0}.observablehq--md-pre{overflow-x:auto}input:not([type]),input[type=email],input[type=number],input[type=password],input[type=range],input[type=search],input[type=tel],input[type=text],input[type=url]{width:240px}input,canvas,button{vertical-align:middle}button,input,textarea{accent-color:#3b5fc0}table{width:100%;border-collapse:collapse;font:13px/1.2 var(--sans-serif)}table pre,table code,table tt{font-size:inherit;line-height:inherit}th>pre:only-child,td>pre:only-child{margin:0;padding:0}th{color:#111;text-align:left;vertical-align:bottom}td{color:#444;vertical-align:top}th,td{padding:3px 6.5px 3px 0}th:last-child,td:last-child{padding-right:0}tr:not(:last-child){border-bottom:solid 1px #eee}thead tr{border-bottom:solid 1px #ccc}figure,table{margin:1rem 0}figure img{max-width:100%}figcaption{font:small var(--sans-serif);color:var(--syntax-unknown-variable)}.observablehq--caret{margin-right:4px;vertical-align:baseline}.observablehq--field{text-indent:-1rem;margin-left:1rem}.observablehq--prototype-key,.observablehq--empty,.hljs-comment{color:var(--syntax-comment)}.hljs-built_in{color:var(--syntax-known-variable)}.observablehq--unknown{color:var(--syntax-unknown-variable)}.hljs-keyword,.hljs-selector-tag,.hljs-section,.hljs-doctag,.hljs-type,.hljs-tag,.hljs-name,.hljs-selector-id,.hljs-selector-class,.hljs-strong{color:var(--syntax-keyword)}.observablehq{position:relative;margin:17px 0;min-height:1.5rem}.observablehq:before{content:"";position:absolute;left:-14px;top:0;bottom:1px;width:4px;transition:background-color .25s linear}.observablehq--running:before,.observablehq--changed:before{background-color:#a9b0bc;transition:none}.observablehq--error:before{background-color:#e7040f}.observablehq:not(.observablehq--running):empty:after{content:"<detached>";color:var(--syntax-comment);font-style:oblique}.observablehq>link:only-child,.observablehq>style:only-child{visibility:hidden;white-space:nowrap;color:var(--syntax-keyword)}.observablehq>link:only-child:before{content:"<link>";visibility:visible;text-decoration:none;pointer-events:none}.observablehq>style:only-child:before{content:"<style>";visibility:visible}.observablehq--inspect.observablehq--import{white-space:normal}.observablehq--inspect::-webkit-scrollbar{display:none}.observablehq--string-expand{margin-left:6px;padding:2px 6px;border-radius:2px;font-size:80%;background:#eee;color:var(--syntax-normal);cursor:pointer;vertical-align:middle;position:sticky;right:0}.observablehq--string-expand:hover,.observablehq--string-expand:active{background:#ddd}
2
+ /*# sourceMappingURL=index.css.map */
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/index.css"],
4
+ "sourcesContent": ["@import url(\"https://fonts.googleapis.com/css2?family=Source+Serif+Pro:ital,wght@0,400;0,600;0,700;1,400;1,600;1,700&display=swap\");\n\n:root {\n --syntax-normal: #1b1e23;\n --syntax-comment: #828282;\n --syntax-number: #20a5ba;\n --syntax-keyword: #c30771;\n --syntax-atom: #10a778;\n --syntax-string: #008ec4;\n --syntax-error: #ffbedc;\n --syntax-unknown-variable: #838383;\n --syntax-known-variable: #005f87;\n --syntax-matchbracket: #20bbfc;\n --syntax-key: #6636b4;\n --mono-fonts: 82%/1.5 Menlo, Consolas, monospace;\n}\n\n.observablehq--expanded,\n.observablehq--collapsed,\n.observablehq--function,\n.observablehq--import,\n.observablehq--string:before,\n.observablehq--string:after,\n.observablehq--gray {\n color: var(--syntax-normal);\n}\n\n.observablehq--collapsed,\n.observablehq--expanded.observablehq--inspect a {\n cursor: pointer;\n}\n\n.observablehq--field {\n text-indent: -1em;\n margin-left: 1em;\n}\n\n.observablehq--empty {\n color: var(--syntax_comment);\n}\n\na[href],\n.observablehq--keyword,\n.observablehq--blue {\n color: #3182bd;\n}\n\n.hljs-deletion,\n.hljs-variable,\n.observablehq--forbidden,\n.observablehq--pink {\n color: #e377c2;\n}\n\n.observablehq--orange {\n color: #e6550d;\n}\n\n.observablehq--null,\n.observablehq--undefined,\n.observablehq--boolean,\n.hljs-literal {\n color: var(--syntax-atom);\n}\n\n.hljs-number,\n.hljs-regexp,\n.hljs-bullet,\n.hljs-link,\n.observablehq--bigint,\n.observablehq--number,\n.observablehq--date,\n.observablehq--regexp,\n.observablehq--symbol,\n.observablehq--green {\n color: var(--syntax-number);\n}\n\n.observablehq--index,\n.observablehq--key {\n color: var(--syntax-key);\n}\n\n.observablehq--prototype-key {\n color: #aaa;\n}\n\n.observablehq--empty {\n font-style: oblique;\n}\n\n.hljs-string,\n.hljs-meta,\n.hljs-symbol,\n.hljs-template-tag,\n.hljs-template-variable,\n.hljs-addition,\n.observablehq--string,\n.observablehq--purple {\n color: var(--syntax-string);\n}\n\n.observablehq--error,\n.observablehq--red {\n color: #e7040f;\n}\n\n.observablehq:empty:after,\n.observablehq>link:only-child,\n.observablehq>style:only-child,\n.observablehq--inspect {\n font: var(--monospace-font);\n overflow-x: auto;\n display: block;\n padding: 4px 0;\n white-space: pre;\n}\n\n.observablehq--error .observablehq--inspect {\n word-break: break-all;\n white-space: pre-wrap;\n}\n\n:root {\n --syntax-diff: #24292e;\n --syntax-diff-bg: #ffffff;\n --hr: rgba(0, 0, 0, 0.05);\n --monospace: Menlo, Consolas, monospace;\n --monospace-font: 14px/1.5 var(--monospace);\n --serif: \"Source Serif Pro\", \"Iowan Old Style\", \"Apple Garamond\",\n \"Palatino Linotype\", \"Times New Roman\", \"Droid Serif\", Times, serif,\n \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\";\n --sans-serif: -apple-system, BlinkMacSystemFont, \"avenir next\", avenir,\n helvetica, \"helvetica neue\", ubuntu, roboto, noto, \"segoe ui\", arial,\n sans-serif;\n}\n\nhtml {\n font: 17px/1.5 var(--serif);\n -webkit-text-size-adjust: 100%;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n color: #1b1e23;\n}\n\nbody {\n margin: 0 14px;\n}\n\nbody.fullscreen {\n margin: 0;\n}\n\nh1,\nh2,\nh3,\nh4,\nh5,\nh6 {\n color: #333;\n font-weight: 700;\n line-height: 1.15;\n margin-top: 0;\n margin-bottom: 0.25rem;\n}\n\nh2~p,\nh3~p,\nh4~p,\nh2~table,\nh3~table,\nh4~table {\n margin-top: 0;\n}\n\n.observablehq:first-of-type h1+h2 {\n font-size: 20px;\n font-style: italic;\n font-weight: normal;\n margin-bottom: 1rem;\n /* see h2 ~ p */\n}\n\na[href] {\n text-decoration: none;\n}\n\na[href]:hover {\n text-decoration: underline;\n}\n\nh1 code,\nh2 code,\nh3 code,\nh4 code,\nh5 code,\nh6 code {\n font-size: 90%;\n}\n\npre,\ncode,\ntt {\n font-family: var(--monospace);\n font-size: 14px;\n line-height: 1.5;\n}\n\nimg {\n max-width: calc(100vw - 28px);\n}\n\np,\ntable,\nfigure,\nfigcaption,\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\n.katex-display {\n max-width: 640px;\n}\n\nblockquote,\nol,\nul {\n max-width: 600px;\n}\n\nblockquote {\n margin: 1rem 1.5rem;\n}\n\nul,\nol {\n padding-left: 28px;\n}\n\nhr {\n height: 1px;\n margin: 1rem 0;\n padding: 1rem 0;\n border: none;\n background: no-repeat center/100% 1px linear-gradient(to right, var(--hr), var(--hr));\n}\n\npre {\n padding: 2px 0;\n}\n\n.observablehq--md-pre {\n overflow-x: auto;\n}\n\ninput:not([type]),\ninput[type=\"email\"],\ninput[type=\"number\"],\ninput[type=\"password\"],\ninput[type=\"range\"],\ninput[type=\"search\"],\ninput[type=\"tel\"],\ninput[type=\"text\"],\ninput[type=\"url\"] {\n width: 240px;\n}\n\ninput,\ncanvas,\nbutton {\n vertical-align: middle;\n}\n\nbutton,\ninput,\ntextarea {\n accent-color: #3b5fc0;\n}\n\ntable {\n width: 100%;\n border-collapse: collapse;\n font: 13px/1.2 var(--sans-serif);\n}\n\ntable pre,\ntable code,\ntable tt {\n font-size: inherit;\n line-height: inherit;\n}\n\nth>pre:only-child,\ntd>pre:only-child {\n margin: 0;\n padding: 0;\n}\n\nth {\n color: #111;\n text-align: left;\n vertical-align: bottom;\n}\n\ntd {\n color: #444;\n vertical-align: top;\n}\n\nth,\ntd {\n padding: 3px 6.5px 3px 0;\n}\n\nth:last-child,\ntd:last-child {\n padding-right: 0;\n}\n\ntr:not(:last-child) {\n border-bottom: solid 1px #eee;\n}\n\nthead tr {\n border-bottom: solid 1px #ccc;\n}\n\nfigure,\ntable {\n margin: 1rem 0;\n}\n\nfigure img {\n max-width: 100%;\n}\n\nfigcaption {\n font: small var(--sans-serif);\n color: var(--syntax-unknown-variable);\n}\n\n.observablehq--caret {\n margin-right: 4px;\n vertical-align: baseline;\n}\n\n.observablehq--field {\n text-indent: -1rem;\n margin-left: 1rem;\n}\n\n.observablehq--prototype-key,\n.observablehq--empty,\n.hljs-comment {\n color: var(--syntax-comment);\n}\n\n.hljs-built_in {\n color: var(--syntax-known-variable);\n}\n\n.observablehq--unknown {\n color: var(--syntax-unknown-variable);\n}\n\n.hljs-keyword,\n.hljs-selector-tag,\n.hljs-section,\n.hljs-doctag,\n.hljs-type,\n.hljs-tag,\n.hljs-name,\n.hljs-selector-id,\n.hljs-selector-class,\n.hljs-strong {\n color: var(--syntax-keyword);\n}\n\n.observablehq {\n position: relative;\n margin: 17px 0;\n min-height: 1.5rem;\n /* the standard line-height */\n}\n\n.observablehq:before {\n content: \"\";\n position: absolute;\n left: -14px;\n top: 0;\n bottom: 1px;\n width: 4px;\n transition: background-color 250ms linear;\n}\n\n.observablehq--running:before,\n.observablehq--changed:before {\n background-color: hsl(217, 13%, 70%);\n transition: none;\n}\n\n.observablehq--error:before {\n background-color: #e7040f;\n}\n\n.observablehq:not(.observablehq--running):empty:after {\n content: \"<detached>\";\n color: var(--syntax-comment);\n font-style: oblique;\n}\n\n.observablehq>link:only-child,\n.observablehq>style:only-child {\n visibility: hidden;\n white-space: nowrap;\n color: var(--syntax-keyword);\n}\n\n.observablehq>link:only-child:before {\n content: \"<link>\";\n visibility: visible;\n text-decoration: none;\n pointer-events: none;\n}\n\n.observablehq>style:only-child:before {\n content: \"<style>\";\n visibility: visible;\n}\n\n.observablehq--inspect.observablehq--import {\n white-space: normal;\n}\n\n.observablehq--inspect::-webkit-scrollbar {\n display: none;\n}\n\n.observablehq--string-expand {\n margin-left: 6px;\n padding: 2px 6px;\n border-radius: 2px;\n font-size: 80%;\n background: #eee;\n color: var(--syntax-normal);\n cursor: pointer;\n vertical-align: middle;\n position: sticky;\n right: 0;\n}\n\n.observablehq--string-expand:hover {\n background: #ddd;\n}\n\n.observablehq--string-expand:active {\n background: #ddd;\n}"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -0,0 +1,28 @@
1
+ import{JSDOM as ge}from"jsdom";import{transpile as ce}from"@observablehq/notebook-kit";import{getLineInfo as $e,tokTypes as L}from"acorn";import{ancestor as V}from"acorn-walk";import{CellParser as B,parseCell as J,walk as W}from"@observablehq/parser";import{ancestor as qe}from"acorn-walk";import{make as G}from"acorn-walk";var j=G({Import(){},ViewExpression(e,t,r){r(e.id,t,"Identifier")},MutableExpression(e,t,r){r(e.id,t,"Identifier")}});import{simple as Pe}from"acorn-walk";var F=class extends B{parseTopLevel(t){for(t.cells||(t.cells=[]);this.type!==L.eof;){let r=this.parseCell(this.startNode());r.input=this.input,t.cells.push(r)}return this.next(),this.finishNode(t,"Program")}};function m(e){return F.parse(e,{ecmaVersion:"latest"}).cells.map(t=>({type:"Cell",text:e.substring(t.start,t.end),start:t.start,end:t.end}))}function g(e){return J(e)}var I=W;import{toCell as C,toNotebook as N,parseJavaScript as z,serialize as K,deserialize as H}from"@observablehq/notebook-kit";var f={regular:Object.getPrototypeOf(function(){}).constructor,async:Object.getPrototypeOf(async function(){}).constructor,generator:Object.getPrototypeOf(function*(){}).constructor,asyncGenerator:Object.getPrototypeOf(async function*(){}).constructor};function Q(e=!1,t=!1){return!e&&!t?f.regular:e&&!t?f.async:!e&&t?f.generator:f.asyncGenerator}function v(e,t=!1,r=!1,n=!1,o){if(o!==void 0)return e.patches.sort((i,s)=>s.start-i.start),e.patches.forEach(i=>{o=o.substring(0,i.start)+i.newText+o.substring(i.end)}),new(Q(t,r))(...e.args,n?o.substring(1,o.length-1).trim():`return (
2
+ ${o}
3
+ );`)}function X(e,t){return t?e.replace(/\/+$/,"")+"/"+t.replace(/^\/+/,""):e}var E=e=>e[0]===".",b=(e,t)=>E(e)?X(t,e):e,Y=new f.async("url","return import(url)");async function R(e){return Y(e)}function $(e){return e.split("`").join("\\`")}function x(e,t,r){let n,o;try{n=g(e)}catch(i){o=i}return{ojs:e,offset:t,inlineMD:r,cell:n,error:o}}function M(e){let t=[],r=/(```(?:\s|\S)[\s\S]*?```)/g,n=0,o=r.exec(e);for(;o!==null;){o.index>n&&t.push(x(e.substring(n,o.index),n,!0));let i=o[0];if(i.indexOf("``` ")===0||i.indexOf("```\n")===0||i.indexOf("```\r\n")===0){let l=i.substring(3,i.length-3);t.push(x(l,o.index+3,!1))}else t.push(x(i,o.index,!0));n=o.index+o[0].length,o=r.exec(e)}return e.length>n&&t.push(x(e.substring(n,e.length),n,!0)),t}function w(e){let t=m(e);return{files:[],nodes:t.map((r,n)=>({id:n,mode:"js",value:r.text,start:r.start,end:r.end}))}}function Z(e){let t=m(e).map((r,n)=>C({id:n,mode:"ojs",value:r.text}));return N({cells:t})}function P(e){let t=M(e);return{files:[],nodes:t.map((r,n)=>({id:n,mode:r.inlineMD?"md":"js",value:r.ojs,start:r.offset,end:r.offset+r.ojs.length}))}}function ee(e){let t=[];return M(e).forEach(r=>{r.inlineMD?t.push(C({id:t.length+1,mode:"md",value:r.ojs})):m(r.ojs).forEach(n=>{t.push(C({id:t.length+1,mode:"ojs",value:n.text}))})}),N({cells:t})}function h(e,t="https://api.codetabs.com/v1/proxy/?quest=",r=""){let n=e.match(/^(?:https?:\/\/)?(?:[^@\n]+@)?(?:www\.)?([^:\/\n?]+)/img);if(!n||n.length===0)throw new Error(`Invalid URL: ${e}`);return fetch(e,{headers:{origin:n[0],referer:e}}).then(o=>{if(o.ok)return o;throw new Error("CORS?")}).catch(o=>(e=`${t}${e}${r}`,fetch(e,{headers:{origin:n[0],referer:e}})))}function te(e,t,r){let n=e.indexOf("https://observablehq.com/d")===0;return h(e.replace(`https://observablehq.com/${n?"d/":""}`,"https://api.observablehq.com/document/"),t,r).then(o=>o.json())}function S(e,t){if(e.type!=="FunctionExpression"&&e.type!=="FunctionDeclaration"&&e.type!=="ArrowFunctionExpression")throw new Error(`Unsupported function type: ${e.type}`);let r=e.async&&e.generator?f.asyncGenerator:e.async?f.async:e.generator?f.generator:f.regular,n=e.params?.map(a=>t.slice(a.start,a.end)).join(", ")??"",o=e.body.type==="BlockStatement",{start:i,end:s}=e.body,l=o?t.slice(i+1,s-1):`return ${t.slice(i,s)}`;return r(n,l)}function O(e){let{body:t}=z(e);if(t.type==="Program"){if(t.body.length!==1)throw new Error(`Expected a single function, but found ${t.body.length} statements`);return S(t.body[0],e)}return S(t,e)}var re=e=>H(e),ne=e=>K(e);function oe(e,t){if(e.references===void 0)return{inputs:[],args:[],patches:[]};let r={};e.references.forEach(i=>r[t.substring(i.start,i.end)]=!0);let n={inputs:Object.keys(r),args:Object.keys(r).map(i=>i.split(" ").join("_")),patches:[]},o=(i,s)=>n.patches.push({start:i.start-(e.body?.start??0),end:i.end-(e.body?.start??0),newText:s});return e.body&&V(e.body,{Identifier(i){let s=t.substring(i.start,i.end);r[s]},MutableExpression(i){let l=t.substring(i.start,i.end).split(" ").join("_")+".value";o(i,l)},ViewExpression(i){let l=t.substring(i.start,i.end).split(" ").join("_");o(i,l)},ThisExpression(i,s){t.substring(i.start,i.end)==="this"&&!s.find(a=>a.type==="FunctionExpression")&&o(i,"((this === globalThis || this === globalThis.window)? undefined : this?.valueOf())")}},I),n}function ie(e){return{type:"import",src:e.body.source.value,specifiers:e.body.specifiers?.map(t=>({view:t.view,name:t.imported.name,alias:t.local?.name&&t.imported.name!==t.local.name?t.local.name:t.imported.name}))??[],injections:e.body.injections?.map(t=>({name:t.imported.name,alias:t.local?.name??t.imported.name}))??[]}}function ae(e,t,r,n){let o=t.id&&e.substring(t.id.start,t.id.end);return{type:"viewof",variable:{type:"variable",id:o,inputs:r.inputs,func:v(r,t.async,t.generator,t.body.type==="BlockStatement",n)},variableValue:{type:"variable",id:t?.id?.id?.name,inputs:["Generators",o],func:(i,s)=>i.input(s)}}}function se(e,t,r,n){let o=t.id&&e.substring(t.id.start,t.id.end),i=t?.id?.id?.name,s=`initial ${i}`;return{type:"mutable",initial:{type:"variable",id:s,inputs:r.inputs,func:v(r,t.async,t.generator,t.body.type==="BlockStatement",n)},variable:{type:"variable",id:o,inputs:["Mutable",s],func:(l,a)=>new l(a)},variableValue:{type:"variable",id:i,inputs:[o],func:l=>l.generator}}}function le(e,t,r,n){return{type:"variable",id:t.id&&e.substring(t.id?.start,t.id?.end),inputs:r.inputs,func:v(r,t.async,t.generator,t.body.type==="BlockStatement",n)}}function A(e,t){let r=g(e),n=r.body&&e.substring(r.body.start,r.body.end);switch(r.body?.type){case"ImportDeclaration":return ie(r);case"ImportExpression":switch(r.body.source.type){case"Literal":n=`import("${b(""+r.body.source.value,t)}")`;break;default:console.error("Unexpected import value")}}let o=oe(r,e);switch(r.id?.type){case"ViewExpression":return ae(e,r,o,n);case"MutableExpression":return se(e,r,o,n);default:return le(e,r,o,n)}}var k=class{_files=[];_imports=[];_functions=[];_defines=[];_defineUid=0;_functionUid=0;constructor(){}toString(){return`${this._imports.join(`
4
+ `)}
5
+
6
+ ${this._functions.join(`
7
+ `).split(`
8
+ ) {`).join("){")}
9
+
10
+ export default function define(runtime, observer) {
11
+ const main = runtime.module();
12
+
13
+ function toString() { return this.url; }
14
+ const fileAttachments = new Map([
15
+ ${this._files.map(t=>`["${t.name}", { url: new URL("${t.url}"), mimeType: ${JSON.stringify(t.mime_type)}, toString }]`).join(`,
16
+ `)}
17
+ ]);
18
+ main.builtin("FileAttachment", runtime.fileAttachments(name => fileAttachments.get(name)));
19
+
20
+ ${this._defines.join(`
21
+ `)}
22
+
23
+ return main;
24
+ }
25
+ `}files(t){this._files=[...this._files,...t]}import(t){this._imports.push(`import define${++this._defineUid} from "${t}"; `)}importDefine(t){let r=t.injections??[],n=r.map(s=>s.name===s.alias?`"${s.name}"`:`{name: "${s.name}", alias: "${s.alias}"}`),o=r.length?`.derive([${n.join(", ")}], main)`:"";this._defines.push(`const child${this._defineUid} = runtime.module(define${this._defineUid})${o};`),(t.specifiers??[]).forEach(s=>{this._defines.push(`main.import("${s.name}"${s.alias&&s.alias!==s.name?`, "${s.alias}"`:""}, child${this._defineUid}); `)})}function(t){let r=t.id??`${++this._functionUid}`,n=r.split(" ");return r=`_${n[n.length-1]}`,this._functions.push(`${t.func?.toString()?.replace("anonymous",`${r}`)}`),r}define(t,r=!0,n=!1,o){o=o??t.id;let i=r?`.variable(observer(${t.id?JSON.stringify(t.id):""}))`:"",s=t.id?`${JSON.stringify(t.id)}, `:"",l=t.inputs??[],a=l.length?`[${l.map(p=>JSON.stringify(p)).join(", ")}], `:"",c=n?t.func?.toString():o;this._defines.push(`main${i}.define(${s}${a}${c});`)}error(t){}};async function pe(e,t){let r=b(e,t),n=await h(r).then(s=>s.text()),o;e.endsWith(".ojsnb")?o=JSON.parse(n):e.endsWith(".ojs")?o=w(n):e.endsWith(".omd")?o=P(n):(console.warn(`Unknown file type: ${e}, assuming .ojsnb`),o=JSON.parse(n));let i=U(o,{baseUrl:t});return i.delete=()=>{},i.write=s=>{s.import(r)},i}async function ue(e){let t=`https://api.observablehq.com/${e[0]==="@"?e:`d/${e}`}.js?v=3`,r={default:function(o,i){}};try{r=await R(t)}catch{}let n=r.default;return n.delete=()=>{},n.write=o=>{o.import(t)},n}async function fe(e){let t=`https://api.observablehq.com/document/${e}`,r=h(t).then(o=>o.json()).catch(o=>{console.error(t),console.error(o)}),n=U(await r);return n.delete=()=>{},n.write=o=>{o.import(t)},n}async function de(e,t,r,{baseUrl:n,importMode:o}){let i=E(t.src)?await pe(t.src,n??""):o==="recursive"?await fe(t.src):await ue(t.src),s=[],l=[];t.specifiers.forEach(c=>{let p=c.view?"viewof ":"";s.push(D(p+c.name,p+c.alias)),c.view&&s.push(D(c.name,c.alias))});let a=(c,p,u)=>{let y=c.module(i);return t.injections.length&&(y=y.derive(t.injections,p)),l.forEach(q=>q(p,u)),s.forEach(q=>q(p,y)),y};return a.importVariables=s,a.variables=l,a.delete=()=>{s.forEach(c=>c.delete()),l.forEach(c=>c.delete()),i.delete()},a.write=c=>{i.write(c),c.importDefine(t)},a}function d(e,t,r,n,o,i=!1){let s,l,a=(c,p)=>{if(t&&p&&(s=p(r,e.id)),l=c.variable(s),arguments.length>1)try{l.define(r,n,o)}catch(u){console.error(u?.message)}if(e.pinned){l=p?c.variable(p(r,e.id)):c.variable();try{l.define(void 0,["md"],u=>u`\`\`\`js
26
+ ${e.value}
27
+ \`\`\``)}catch(u){console.error(u?.message)}}return l};return a.delete=()=>{try{s?._node?.remove()}catch{}s=void 0;try{l?.delete()}catch{}l=void 0},a.write=c=>{if(i)c.define({id:r,inputs:n,func:o},t,!0);else{let p=c.function({id:r,func:o});c.define({id:r,inputs:n,func:o},t,!1,p)}},a}function D(e,t){let r,n=(o,i)=>{r=o.variable(),t===void 0?r.import(e,i):r.import(e,t,i)};return n.delete=()=>{r?.delete()},n}async function T(e,t){let r=[],n=[];try{let i=e.mode&&e.mode!=="js"?`${e.mode}\`${$(e.value)}\``:e.value,s=m(i);for(let l of s){let a=A(l.text,t.baseUrl??"");switch(a.type){case"import":r.push(await de(e,a,l.text,t));break;case"viewof":n.push(d(e,!0,a.variable.id,a.variable.inputs,a.variable.func)),n.push(d(e,!1,a.variableValue.id,a.variableValue.inputs,a.variableValue.func,!0));break;case"mutable":n.push(d(e,!1,a.initial.id,a.initial.inputs,a.initial.func)),n.push(d(e,!1,a.variable.id,a.variable.inputs,a.variable.func)),n.push(d(e,!0,a.variableValue.id,a.variableValue.inputs,a.variableValue.func,!0));break;case"variable":n.push(d(e,!0,a.id,a.inputs,a.func));break}}}catch(i){n.push(d(e,!0,void 0,[],i.message??"Unkown error"))}let o=(i,s,l)=>{r.forEach(a=>a(i,s,l)),n.forEach(a=>a(s,l))};return o.id=e.id,o.modules=r,o.variables=n,o.delete=()=>{n.forEach(i=>i.delete()),r.forEach(i=>i.delete())},o.write=i=>{r.forEach(s=>s.write(i)),n.forEach(s=>s.write(i))},o}function me(e,t){function r(){return globalThis.url??""}return[e.name,{url:new URL(b(e.url,t.baseUrl??"")),mimeType:e.mime_type,toString:r}]}function be(e=[],t=[],{baseUrl:r=".",importMode:n="precompiled"}={}){let o=e.map(a=>me(a,{baseUrl:r,importMode:n})),i=new Map(o),s=new Map(t.map(a=>[a.id,a])),l=(a,c)=>{let p=a.module();return p.builtin("FileAttachment",a.fileAttachments(u=>i.get(u)??{url:new URL(b(u,r)),mimeType:null})),p.builtin("fetchEx",h),s.forEach(u=>{u(a,p,c)}),p};return l.fileAttachments=i,l.cells=s,l.set=async a=>{let c=await T(a,{baseUrl:r,importMode:n});return l.delete(c.id),s.set(c.id,c),c},l.get=a=>s.get(a),l.delete=a=>{let c=s.get(a);return c?(c.delete(),s.delete(a)):!1},l.clear=()=>{s.forEach(a=>a.delete()),s.clear()},l.write=a=>{a.files(e),s.forEach(c=>c.write(a))},l.toString=(a=new k)=>(l.write(a),a.toString().trim()),l}function he(e){let t=[];for(let r of e.cells){let n=ce(r);t.push({id:r.id,...n,body:O(n.body)})}return t}function ye(e){return!!e&&Array.isArray(e.cells)}function dt(e){return!!e&&Array.isArray(e.nodes)}async function U(e,{baseUrl:t=".",importMode:r="precompiled"}={}){if(ye(e))return he(e);typeof e=="string"&&(e=w(e));let n=await Promise.all(e.nodes.map(o=>T(o,{baseUrl:t,importMode:r})));return be(e.files,n,{baseUrl:t,importMode:r})}var{window:_}=new ge;globalThis.document=_.document;globalThis.DOMParser=_.DOMParser;export{k as Writer,U as compile,he as compileKit,te as download,re as html2notebook,ye as isNotebookKit,dt as isOhqNotebook,be as notebook,ne as notebook2html,w as ojs2notebook,Z as ojs2notebookKit,P as omd2notebook,ee as omd2notebookKit};
28
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/index.node.ts", "../../src/compiler.ts", "../../src/parse.ts", "../../../../node_modules/@observablehq/parser/src/references.js", "../../../../node_modules/@observablehq/parser/src/walk.js", "../../../../node_modules/@observablehq/parser/src/features.js", "../../src/util.ts", "../../src/cst.ts", "../../src/writer.ts"],
4
+ "sourcesContent": ["import { JSDOM } from \"jsdom\";\n\nconst { window } = new JSDOM();\nglobalThis.document = window.document;\nglobalThis.DOMParser = window.DOMParser;\n\nexport * from \"./index.ts\";\n", "\nimport { type Notebook, transpile } from \"@observablehq/notebook-kit\";\nimport { type Definition } from \"@observablehq/notebook-kit/runtime\";\nimport { ohq, splitModule } from \"./observable-shim.ts\";\nimport { parseCell, ParsedImportCell } from \"./cst.ts\";\nimport { Writer } from \"./writer.ts\";\nimport { fixRelativeUrl, isRelativePath, encodeBacktick, fetchEx, obfuscatedImport, ojs2notebook, omd2notebook, constructFunction } from \"./util.ts\";\n\n// Inspector Factory ---\nexport type InspectorFactoryEx = (name: string | undefined, id: string | number) => Inspector;\n\nexport interface Inspector {\n _node?: HTMLDivElement;\n pending(): void;\n fulfilled(value: any): void;\n rejected(error: Error): void;\n}\n\n// Module ---\n\ninterface ImportDefine {\n (runtime: ohq.Runtime, inspector?: InspectorFactoryEx): ohq.Module;\n delete: () => void;\n write: (w: Writer) => void;\n}\n\nasync function importFile(relativePath: string, baseUrl: string) {\n const path = fixRelativeUrl(relativePath, baseUrl);\n const content = await fetchEx(path).then(r => r.text());\n let notebook: ohq.Notebook;\n if (relativePath.endsWith(\".ojsnb\")) {\n notebook = JSON.parse(content);\n } else if (relativePath.endsWith(\".ojs\")) {\n notebook = ojs2notebook(content);\n } else if (relativePath.endsWith(\".omd\")) {\n notebook = omd2notebook(content);\n } else {\n console.warn(`Unknown file type: ${relativePath}, assuming .ojsnb`);\n notebook = JSON.parse(content);\n }\n const retVal: ImportDefine = compile(notebook, { baseUrl }) as any;\n retVal.delete = () => { };\n retVal.write = (w: Writer) => {\n w.import(path);\n };\n return retVal;\n}\n\n// Import precompiled notebook from observable ---\nasync function importCompiledNotebook(partial: string) {\n const url = `https://api.observablehq.com/${partial[0] === \"@\" ? partial : `d/${partial}`}.js?v=3`;\n let impMod = {\n default: function (runtime: ohq.Runtime, inspector?: InspectorFactoryEx): ohq.Module | undefined {\n return undefined;\n } as any\n };\n try {\n impMod = await obfuscatedImport(url);\n } catch (e) {\n }\n const retVal: ImportDefine = impMod.default;\n retVal.delete = () => { };\n retVal.write = (w: Writer) => {\n w.import(url);\n };\n return retVal;\n}\n\n// Recursive notebook parsing and compiling\nasync function importNotebook(partial: string) {\n const url = `https://api.observablehq.com/document/${partial}`;\n const notebook = fetchEx(url)\n .then(r => {\n return r.json();\n }).catch(e => {\n console.error(url);\n console.error(e);\n });\n const retVal: ImportDefine = compile(await notebook) as any;\n retVal.delete = () => { };\n retVal.write = (w: Writer) => {\n w.import(url);\n };\n return retVal;\n}\n\nasync function createModule(node: ohq.Node, parsed: ParsedImportCell, text: string, { baseUrl, importMode }: CompileOptions) {\n const otherModule = isRelativePath(parsed.src) ?\n await importFile(parsed.src, baseUrl ?? \"\") :\n importMode === \"recursive\" ?\n await importNotebook(parsed.src) :\n await importCompiledNotebook(parsed.src);\n\n const importVariables: ImportVariableFunc[] = [];\n const variables: VariableFunc[] = [];\n parsed.specifiers.forEach(spec => {\n const viewof = spec.view ? \"viewof \" : \"\";\n importVariables.push(createImportVariable(viewof + spec.name, viewof + spec.alias));\n if (spec.view) {\n importVariables.push(createImportVariable(spec.name, spec.alias));\n }\n });\n\n const retVal = (runtime: ohq.Runtime, main: ohq.Module, inspector?: InspectorFactoryEx) => {\n\n let mod = runtime.module(otherModule);\n if (parsed.injections.length) {\n mod = mod.derive(parsed.injections, main);\n }\n variables.forEach(v => v(main, inspector));\n importVariables.forEach(v => v(main, mod));\n return mod;\n };\n retVal.importVariables = importVariables;\n retVal.variables = variables;\n retVal.delete = () => {\n importVariables.forEach(v => v.delete());\n variables.forEach(v => v.delete());\n otherModule.delete();\n };\n retVal.write = (w: Writer) => {\n otherModule.write(w);\n w.importDefine(parsed);\n };\n return retVal;\n}\ntype ModuleFunc = Awaited<ReturnType<typeof createModule>>;\n\n// Variable ---\nfunction createVariable(node: ohq.Node, inspect: boolean, name?: string, inputs?: string[], definition?: any, inline = false) {\n\n let i: ohq.Inspector | undefined;\n let v: ohq.Variable | undefined;\n\n const retVal = (module: ohq.Module, inspector?: InspectorFactoryEx) => {\n if (inspect && inspector) {\n i = inspector(name, node.id);\n }\n v = module.variable(i);\n if (arguments.length > 1) {\n try {\n v.define(name, inputs, definition);\n } catch (e: any) {\n console.error(e?.message);\n }\n }\n if (node.pinned) {\n v = inspector ? module.variable(inspector(name, node.id)) : module.variable();\n try {\n v.define(undefined, [\"md\"], (md: any) => {\n return md`\\`\\`\\`js\n${node.value}\n\\`\\`\\``;\n });\n } catch (e: any) {\n console.error(e?.message);\n }\n }\n return v;\n };\n retVal.delete = () => {\n try {\n i?._node?.remove();\n } catch (e) {\n }\n i = undefined;\n try {\n v?.delete();\n } catch (e) {\n }\n v = undefined;\n };\n retVal.write = (w: Writer) => {\n if (inline) {\n w.define({ id: name, inputs, func: definition }, inspect, true);\n } else {\n const id = w.function({ id: name, func: definition });\n w.define({ id: name, inputs, func: definition }, inspect, false, id);\n }\n };\n return retVal;\n}\ntype VariableFunc = ReturnType<typeof createVariable>;\n\nfunction createImportVariable(name: string, alias?: string) {\n\n let v: ohq.Variable;\n\n const retVal = (main: ohq.Module, otherModule: ohq.Module) => {\n v = main.variable();\n if (alias === undefined) {\n v.import(name, otherModule);\n } else {\n v.import(name, alias, otherModule);\n }\n };\n\n retVal.delete = () => {\n v?.delete();\n };\n return retVal;\n}\ntype ImportVariableFunc = ReturnType<typeof createImportVariable>;\n\n// Cell ---\nasync function createCell(node: ohq.Node, options: CompileOptions) {\n const modules: ModuleFunc[] = [];\n const variables: VariableFunc[] = [];\n try {\n const text = node.mode && node.mode !== \"js\" ? `${node.mode}\\`${encodeBacktick(node.value)}\\`` : node.value;\n const parsedModule = splitModule(text);\n for (const cell of parsedModule) {\n const parsed = parseCell(cell.text, options.baseUrl ?? \"\");\n switch (parsed.type) {\n case \"import\":\n modules.push(await createModule(node, parsed, cell.text, options));\n break;\n case \"viewof\":\n variables.push(createVariable(node, true, parsed.variable.id, parsed.variable.inputs, parsed.variable.func));\n variables.push(createVariable(node, false, parsed.variableValue.id, parsed.variableValue.inputs, parsed.variableValue.func, true));\n break;\n case \"mutable\":\n variables.push(createVariable(node, false, parsed.initial.id, parsed.initial.inputs, parsed.initial.func));\n variables.push(createVariable(node, false, parsed.variable.id, parsed.variable.inputs, parsed.variable.func));\n variables.push(createVariable(node, true, parsed.variableValue.id, parsed.variableValue.inputs, parsed.variableValue.func, true));\n break;\n case \"variable\":\n variables.push(createVariable(node, true, parsed.id, parsed.inputs, parsed.func));\n break;\n }\n }\n } catch (e: any) {\n variables.push(createVariable(node, true, undefined, [], e.message ?? \"Unkown error\"));\n }\n\n const retVal = (runtime: ohq.Runtime, main: ohq.Module, inspector?: InspectorFactoryEx) => {\n modules.forEach(imp => imp(runtime, main, inspector));\n variables.forEach(v => v(main, inspector));\n };\n retVal.id = node.id;\n retVal.modules = modules;\n retVal.variables = variables;\n retVal.delete = () => {\n variables.forEach(v => v.delete());\n modules.forEach(mod => mod.delete());\n };\n retVal.write = (w: Writer) => {\n modules.forEach(imp => imp.write(w));\n variables.forEach(v => v.write(w));\n };\n return retVal;\n}\nexport type CellFunc = Awaited<ReturnType<typeof createCell>>;\n\n// File ---\nfunction createFile(file: ohq.File, options: CompileOptions): [string, any] {\n function toString() {\n // TODO Double check url should not be URL?\n return (globalThis as any).url ?? \"\";\n }\n return [file.name, { url: new URL(fixRelativeUrl(file.url, options.baseUrl ?? \"\")), mimeType: file.mime_type, toString }];\n}\ntype FileFunc = ReturnType<typeof createFile>;\n\n// Interpret ---\nexport interface CompileOptions {\n baseUrl?: string;\n importMode?: \"recursive\" | \"precompiled\";\n}\nexport function notebook(_files: ohq.File[] = [], _cells: CellFunc[] = [], { baseUrl = \".\", importMode = \"precompiled\" }: CompileOptions = {}) {\n const files: FileFunc[] = _files.map(f => createFile(f, { baseUrl, importMode }));\n const fileAttachments = new Map<string, any>(files);\n const cells = new Map<string | number, CellFunc>(_cells.map(c => [c.id, c]));\n\n const retVal = (runtime: ohq.Runtime, inspector?: InspectorFactoryEx): ohq.Module => {\n const main = runtime.module();\n main.builtin(\"FileAttachment\", runtime.fileAttachments(name => {\n return fileAttachments.get(name) ?? { url: new URL(fixRelativeUrl(name, baseUrl)), mimeType: null };\n }));\n main.builtin(\"fetchEx\", fetchEx);\n\n cells.forEach(cell => {\n cell(runtime, main, inspector);\n });\n return main;\n };\n retVal.fileAttachments = fileAttachments;\n retVal.cells = cells;\n retVal.set = async (n: ohq.Node): Promise<CellFunc> => {\n const cell = await createCell(n, { baseUrl, importMode });\n retVal.delete(cell.id);\n cells.set(cell.id, cell);\n return cell;\n };\n retVal.get = (id: string | number): CellFunc | undefined => {\n return cells.get(id);\n };\n retVal.delete = (id: string | number): boolean => {\n const cell = cells.get(id);\n if (cell) {\n cell.delete();\n return cells.delete(id);\n }\n return false;\n };\n retVal.clear = () => {\n cells.forEach(cell => cell.delete());\n cells.clear();\n };\n retVal.write = (w: Writer) => {\n w.files(_files);\n cells.forEach(cell => cell.write(w));\n };\n retVal.toString = (w = new Writer()) => {\n retVal.write(w);\n return w.toString().trim();\n };\n return retVal;\n}\ntype NotebookFunc = ReturnType<typeof notebook>;\n\nexport function compileKit(notebook: Notebook): Definition[] {\n const retVal: Definition[] = [];\n for (const cell of notebook.cells) {\n const compiled = transpile(cell);\n retVal.push({\n id: cell.id,\n ...compiled,\n body: constructFunction(compiled.body)\n });\n }\n return retVal;\n}\n\nexport function isNotebookKit(value: any): value is Notebook {\n return !!value && Array.isArray(value.cells);\n}\n\nexport function isOhqNotebook(value: any): value is ohq.Notebook {\n return !!value && Array.isArray(value.nodes);\n}\nexport async function compile(notebookOrOjs: Notebook): Promise<Definition[]>;\nexport async function compile(notebookOrOjs: ohq.Notebook, options?: CompileOptions): Promise<NotebookFunc>;\nexport async function compile(notebookOrOjs: string, options?: CompileOptions): Promise<NotebookFunc>;\nexport async function compile(notebookOrOjs: Notebook | ohq.Notebook | string, { baseUrl = \".\", importMode = \"precompiled\" }: CompileOptions = {}) {\n if (isNotebookKit(notebookOrOjs)) {\n return compileKit(notebookOrOjs);\n } else if (typeof notebookOrOjs === \"string\") {\n notebookOrOjs = ojs2notebook(notebookOrOjs);\n }\n const _cells: CellFunc[] = await Promise.all(notebookOrOjs.nodes.map(n => createCell(n, { baseUrl, importMode })));\n return notebook(notebookOrOjs.files, _cells, { baseUrl, importMode });\n}\nexport type CompileFunc = Awaited<ReturnType<typeof compile>>;\n", "// Compare with ../../../node_modules/@observablehq/parser/src/parse.js\nimport { getLineInfo, tokTypes, Statement, ModuleDeclaration, Expression as ExpressionBase, Node } from \"acorn\";\nimport { ancestor, RecursiveVisitors, AncestorVisitors } from \"acorn-walk\";\nimport { CellParser, parseCell as ohqParseCell, walk as ohqWalk } from \"@observablehq/parser\";\nimport defaultGlobals from \"../../../node_modules/@observablehq/parser/src/globals.js\";\nimport findReferences from \"../../../node_modules/@observablehq/parser/src/references.js\";\nimport findFeatures from \"../../../node_modules/@observablehq/parser/src/features.js\";\n\nexport interface MutableExpression extends Node {\n type: \"MutableExpression\"\n}\n\nexport interface ViewExpression extends Node {\n type: \"ViewExpression\"\n}\n\nexport type Expression = ExpressionBase | MutableExpression | ViewExpression;\n\n// Find references.\n// Check for illegal references to arguments.\n// Check for illegal assignments to global references.\nfunction parseReferences(cell, input, globals = defaultGlobals) {\n if (!cell.body) {\n cell.references = [];\n } else if (cell.body.type === \"ImportDeclaration\") {\n // This is correct?!?\n cell.references = cell.body.specifiers\n ? cell.body.specifiers.map(i => i.imported)\n : [];\n } else {\n try {\n cell.references = findReferences(cell, globals);\n } catch (error: any) {\n if (error.node) {\n const loc = getLineInfo(input, error.node.start);\n error.message += ` (${loc.line}:${loc.column})`;\n error.pos = error.node.start;\n error.loc = loc;\n delete error.node;\n }\n throw error;\n }\n }\n return cell;\n}\n\n// Find features: file attachments, secrets, database clients.\n// Check for illegal references to arguments.\n// Check for illegal assignments to global references.\nfunction parseFeatures(cell, input) {\n if (cell.body && cell.body.type !== \"ImportDeclaration\") {\n try {\n cell.fileAttachments = findFeatures(cell, \"FileAttachment\");\n cell.databaseClients = findFeatures(cell, \"DatabaseClient\");\n cell.secrets = findFeatures(cell, \"Secret\");\n } catch (error: any) {\n if (error.node) {\n const loc = getLineInfo(input, error.node.start);\n error.message += ` (${loc.line}:${loc.column})`;\n error.pos = error.node.start;\n error.loc = loc;\n delete error.node;\n }\n throw error;\n }\n } else {\n cell.fileAttachments = new Map();\n cell.databaseClients = new Map();\n cell.secrets = new Map();\n }\n return cell;\n}\n\nclass ModuleParser extends CellParser {\n\n parseTopLevel(node: { cells?: Cell[] }) {\n if (!node.cells) node.cells = [];\n // @ts-ignore\n while (this.type !== tokTypes.eof) {\n // @ts-ignore\n const cell: Cell = this.parseCell(this.startNode());\n // @ts-ignore\n cell.input = this.input;\n node.cells.push(cell);\n }\n // @ts-ignore\n this.next();\n // @ts-ignore\n return this.finishNode(node, \"Program\");\n }\n}\n\n// @ts-ignore\nexport function parseModule(input, { globals }: { globals: any } = {}) {\n // @ts-ignore\n const program = ModuleParser.parse(input, { ecmaVersion: 2020 });\n for (const cell of program.cells) {\n parseReferences(cell, input, globals);\n parseFeatures(cell, input);\n }\n return program;\n}\n\nexport interface Cell extends Node {\n type: \"Cell\";\n id: Expression;\n text: string;\n body?: Statement | ModuleDeclaration | Expression;\n references: unknown[];\n async: boolean;\n generator: boolean;\n strict: boolean;\n}\n\nexport function splitModule(input: string): Cell[] {\n return (ModuleParser as any)\n .parse(input, { ecmaVersion: \"latest\" })\n .cells.map((cell: any) => ({\n type: \"Cell\",\n text: input.substring(cell.start, cell.end),\n start: cell.start,\n end: cell.end\n }));\n}\n\nexport {\n type Node,\n ancestor,\n type AncestorVisitors\n};\n\nexport function parseCell(input: string): Cell {\n return ohqParseCell(input);\n}\n\nexport const walk: RecursiveVisitors<any> = ohqWalk;\n", "// Based on https://github.com/ForbesLindesay/acorn-globals\n// Copyright (c) 2014 Forbes Lindesay\n// https://github.com/ForbesLindesay/acorn-globals/blob/master/LICENSE\n\nimport {ancestor} from \"acorn-walk\";\nimport walk from \"./walk.js\";\n\nfunction isScope(node) {\n return node.type === \"FunctionExpression\"\n || node.type === \"FunctionDeclaration\"\n || node.type === \"ArrowFunctionExpression\"\n || node.type === \"Program\";\n}\n\nfunction isBlockScope(node) {\n return node.type === \"BlockStatement\"\n || node.type === \"ForInStatement\"\n || node.type === \"ForOfStatement\"\n || node.type === \"ForStatement\"\n || isScope(node);\n}\n\nfunction declaresArguments(node) {\n return node.type === \"FunctionExpression\"\n || node.type === \"FunctionDeclaration\";\n}\n\nexport default function findReferences(cell, globals) {\n const ast = {type: \"Program\", body: [cell.body]};\n const locals = new Map;\n const globalSet = new Set(globals);\n const references = [];\n\n function hasLocal(node, name) {\n const l = locals.get(node);\n return l ? l.has(name) : false;\n }\n\n function declareLocal(node, id) {\n const l = locals.get(node);\n if (l) l.add(id.name);\n else locals.set(node, new Set([id.name]));\n }\n\n function declareClass(node) {\n if (node.id) declareLocal(node, node.id);\n }\n\n function declareFunction(node) {\n node.params.forEach(param => declarePattern(param, node));\n if (node.id) declareLocal(node, node.id);\n }\n\n function declareCatchClause(node) {\n if (node.param) declarePattern(node.param, node);\n }\n\n function declarePattern(node, parent) {\n switch (node.type) {\n case \"Identifier\":\n declareLocal(parent, node);\n break;\n case \"ObjectPattern\":\n node.properties.forEach(node => declarePattern(node, parent));\n break;\n case \"ArrayPattern\":\n node.elements.forEach(node => node && declarePattern(node, parent));\n break;\n case \"Property\":\n declarePattern(node.value, parent);\n break;\n case \"RestElement\":\n declarePattern(node.argument, parent);\n break;\n case \"AssignmentPattern\":\n declarePattern(node.left, parent);\n break;\n default:\n throw new Error(\"Unrecognized pattern type: \" + node.type);\n }\n }\n\n function declareModuleSpecifier(node) {\n declareLocal(ast, node.local);\n }\n\n ancestor(\n ast,\n {\n VariableDeclaration: (node, parents) => {\n let parent = null;\n for (let i = parents.length - 1; i >= 0 && parent === null; --i) {\n if (node.kind === \"var\" ? isScope(parents[i]) : isBlockScope(parents[i])) {\n parent = parents[i];\n }\n }\n node.declarations.forEach(declaration => declarePattern(declaration.id, parent));\n },\n FunctionDeclaration: (node, parents) => {\n let parent = null;\n for (let i = parents.length - 2; i >= 0 && parent === null; --i) {\n if (isScope(parents[i])) {\n parent = parents[i];\n }\n }\n declareLocal(parent, node.id);\n declareFunction(node);\n },\n Function: declareFunction,\n ClassDeclaration: (node, parents) => {\n let parent = null;\n for (let i = parents.length - 2; i >= 0 && parent === null; i--) {\n if (isScope(parents[i])) {\n parent = parents[i];\n }\n }\n declareLocal(parent, node.id);\n },\n Class: declareClass,\n CatchClause: declareCatchClause,\n ImportDefaultSpecifier: declareModuleSpecifier,\n ImportSpecifier: declareModuleSpecifier,\n ImportNamespaceSpecifier: declareModuleSpecifier\n },\n walk\n );\n\n function identifier(node, parents) {\n let name = node.name;\n if (name === \"undefined\") return;\n for (let i = parents.length - 2; i >= 0; --i) {\n if (name === \"arguments\") {\n if (declaresArguments(parents[i])) {\n return;\n }\n }\n if (hasLocal(parents[i], name)) {\n return;\n }\n if (parents[i].type === \"ViewExpression\") {\n node = parents[i];\n name = `viewof ${node.id.name}`;\n }\n if (parents[i].type === \"MutableExpression\") {\n node = parents[i];\n name = `mutable ${node.id.name}`;\n }\n }\n if (!globalSet.has(name)) {\n if (name === \"arguments\") {\n throw Object.assign(new SyntaxError(`arguments is not allowed`), {node});\n }\n references.push(node);\n }\n }\n\n ancestor(\n ast,\n {\n VariablePattern: identifier,\n Identifier: identifier\n },\n walk\n );\n\n function checkConst(node, parents) {\n if (!node) return;\n switch (node.type) {\n case \"Identifier\":\n case \"VariablePattern\": {\n for (const parent of parents) {\n if (hasLocal(parent, node.name)) {\n return;\n }\n }\n if (parents[parents.length - 2].type === \"MutableExpression\") {\n return;\n }\n throw Object.assign(new SyntaxError(`Assignment to constant variable ${node.name}`), {node});\n }\n case \"ArrayPattern\": {\n for (const element of node.elements) {\n checkConst(element, parents);\n }\n return;\n }\n case \"ObjectPattern\": {\n for (const property of node.properties) {\n checkConst(property, parents);\n }\n return;\n }\n case \"Property\": {\n checkConst(node.value, parents);\n return;\n }\n case \"RestElement\": {\n checkConst(node.argument, parents);\n return;\n }\n }\n }\n\n function checkConstArgument(node, parents) {\n checkConst(node.argument, parents);\n }\n\n function checkConstLeft(node, parents) {\n checkConst(node.left, parents);\n }\n\n ancestor(\n ast,\n {\n AssignmentExpression: checkConstLeft,\n AssignmentPattern: checkConstLeft,\n UpdateExpression: checkConstArgument,\n ForOfStatement: checkConstLeft,\n ForInStatement: checkConstLeft\n },\n walk\n );\n\n return references;\n}\n", "import {make} from \"acorn-walk\";\n\nexport default make({\n Import() {},\n ViewExpression(node, st, c) {\n c(node.id, st, \"Identifier\");\n },\n MutableExpression(node, st, c) {\n c(node.id, st, \"Identifier\");\n }\n});\n", "import {simple} from \"acorn-walk\";\nimport walk from \"./walk.js\";\n\nexport default function findFeatures(cell, featureName) {\n const ast = {type: \"Program\", body: [cell.body]};\n const features = new Map();\n const {references} = cell;\n\n simple(\n ast,\n {\n CallExpression: node => {\n const {callee, arguments: args} = node;\n\n // Ignore function calls that are not references to the feature.\n if (\n callee.type !== \"Identifier\" ||\n callee.name !== featureName ||\n references.indexOf(callee) < 0\n ) return;\n\n // Forbid dynamic calls.\n if (\n args.length !== 1 ||\n !((args[0].type === \"Literal\" && /^['\"]/.test(args[0].raw)) ||\n (args[0].type === \"TemplateLiteral\" && args[0].expressions.length === 0))\n ) {\n throw Object.assign(new SyntaxError(`${featureName} requires a single literal string argument`), {node});\n }\n\n const [arg] = args;\n const name = arg.type === \"Literal\" ? arg.value : arg.quasis[0].value.cooked;\n const location = {start: arg.start, end: arg.end};\n if (features.has(name)) features.get(name).push(location);\n else features.set(name, [location]);\n }\n },\n walk\n );\n\n return features;\n}\n", "import { type Notebook, type Cell, toCell, toNotebook, parseJavaScript, serialize, deserialize } from \"@observablehq/notebook-kit\";\n\nimport type { ohq } from \"./observable-shim.ts\";\nimport { parseCell, splitModule } from \"./observable-shim.ts\";\n\n// Shared function constructor utilities to avoid duplication between util modules.\n\nexport type RegularFunction = (...args: any[]) => any;\ninterface RegularFunctionConstructor {\n new(...args: string[]): RegularFunction;\n (...args: string[]): RegularFunction;\n readonly prototype: RegularFunction;\n}\n\nexport type AsyncFunction = (...args: any[]) => Promise<any>;\ninterface AsyncFunctionConstructor {\n new(...args: string[]): AsyncFunction;\n (...args: string[]): AsyncFunction;\n readonly prototype: AsyncFunction;\n}\n\nexport type GeneratorFunction = (...args: any[]) => Generator<any, any, any>;\ninterface GeneratorFunctionConstructor {\n new(...args: string[]): GeneratorFunction;\n (...args: string[]): GeneratorFunction;\n readonly prototype: GeneratorFunction;\n}\n\nexport type AsyncGeneratorFunction = (...args: any[]) => AsyncGenerator<any, any, any>;\ninterface AsyncGeneratorFunctionConstructor {\n new(...args: string[]): AsyncGeneratorFunction;\n (...args: string[]): AsyncGeneratorFunction;\n readonly prototype: AsyncGeneratorFunction;\n}\n\nexport type AnyFunction = RegularFunction | AsyncFunction | GeneratorFunction | AsyncGeneratorFunction;\n\nexport const FunctionConstructors: {\n regular: RegularFunctionConstructor;\n async: AsyncFunctionConstructor;\n generator: GeneratorFunctionConstructor;\n asyncGenerator: AsyncGeneratorFunctionConstructor;\n} = {\n regular: Object.getPrototypeOf(function () { }).constructor as RegularFunctionConstructor,\n async: Object.getPrototypeOf(async function () { }).constructor as AsyncFunctionConstructor,\n generator: Object.getPrototypeOf(function* () { }).constructor as GeneratorFunctionConstructor,\n asyncGenerator: Object.getPrototypeOf(async function* () { }).constructor as AsyncGeneratorFunctionConstructor,\n};\n\nfunction funcType(async: boolean = false, generator: boolean = false) {\n if (!async && !generator) return FunctionConstructors.regular;\n if (async && !generator) return FunctionConstructors.async;\n if (!async && generator) return FunctionConstructors.generator;\n return FunctionConstructors.asyncGenerator;\n}\n\ninterface Ref {\n start: number,\n end: number,\n newText: string\n}\n\nexport interface Refs {\n inputs: string[];\n args: string[];\n patches: Ref[];\n}\n\nexport function createFunction(refs: Refs, async = false, generator = false, blockStatement = false, body?: string) {\n if (body === undefined) {\n return undefined;\n }\n\n refs.patches.sort((l, r) => r.start - l.start);\n refs.patches.forEach(r => {\n body = body!.substring(0, r.start) + r.newText + body!.substring(r.end);\n });\n return new (funcType(async, generator))(...refs.args, blockStatement ?\n body.substring(1, body.length - 1).trim() :\n `return (\\n${body}\\n);`);\n}\n\nfunction join(baseURL: string, relativeURL: string) {\n return relativeURL\n ? baseURL.replace(/\\/+$/, \"\") + \"/\" + relativeURL.replace(/^\\/+/, \"\")\n : baseURL;\n}\n\nexport const isRelativePath = (path: string) => path[0] === \".\";\nexport const fixRelativeUrl = (path: string, basePath: string) => {\n if (isRelativePath(path)) {\n return join(basePath, path);\n }\n return path;\n};\n\n// Hide \"import\" from bundlers as they have a habit of replacing \"import\" with \"require\"\nconst obfuscatedImportFunction = new FunctionConstructors.async(\"url\", \"return import(url)\");\nexport async function obfuscatedImport(url: string) {\n return obfuscatedImportFunction(url);\n}\n\ninterface ParsedOJS {\n ojs: string;\n offset: number;\n inlineMD: boolean;\n cell: any;\n error: any;\n}\n\nexport function encodeBacktick(str: string) {\n return str\n .split(\"`\").join(\"\\\\`\")\n ;\n}\n\nfunction createParsedOJS(ojs: string, offset: number, inlineMD: boolean): ParsedOJS {\n let cell;\n let error;\n try {\n cell = parseCell(ojs);\n } catch (e) {\n error = e;\n }\n return {\n ojs,\n offset,\n inlineMD,\n cell,\n error\n };\n}\n\nfunction splitOmd(_: string): ParsedOJS[] {\n const retVal: ParsedOJS[] = [];\n // Load Markdown ---\n const re = /(```(?:\\s|\\S)[\\s\\S]*?```)/g;\n let prevOffset = 0;\n let match = re.exec(_);\n while (match !== null) {\n if (match.index > prevOffset) {\n retVal.push(createParsedOJS(_.substring(prevOffset, match.index), prevOffset, true));\n }\n\n const outer = match[0];\n if (outer.indexOf(\"``` \") === 0 || outer.indexOf(\"```\\n\") === 0 || outer.indexOf(\"```\\r\\n\") === 0) {\n const prefixLen = 3;\n const inner = outer.substring(prefixLen, outer.length - prefixLen);\n retVal.push(createParsedOJS(inner, match.index + prefixLen, false));\n } else {\n retVal.push(createParsedOJS(outer, match.index, true));\n }\n\n prevOffset = match.index + match[0].length;\n match = re.exec(_);\n }\n if (_.length > prevOffset) {\n retVal.push(createParsedOJS(_.substring(prevOffset, _.length), prevOffset, true));\n }\n return retVal;\n}\n\nexport function notebook2ojs(_: string): ParsedOJS[] {\n const parsed: ohq.Notebook = JSON.parse(_);\n return parsed.nodes.map(node => createParsedOJS(node.value, 0, node.mode === \"md\"));\n}\n\nexport function ojs2notebook(ojs: string): ohq.Notebook {\n const cells = splitModule(ojs);\n return {\n files: [],\n nodes: cells.map((cell, idx) => {\n return {\n id: idx,\n mode: \"js\",\n value: cell.text,\n start: cell.start,\n end: cell.end\n };\n })\n } as ohq.Notebook;\n}\n\nexport function ojs2notebookKit(ojs: string): Notebook {\n const cells: Cell[] = splitModule(ojs).map((cell, idx) => {\n return toCell({\n id: idx,\n mode: \"ojs\",\n value: cell.text\n });\n });\n return toNotebook({ cells });\n}\n\nexport function omd2notebook(omd: string): ohq.Notebook {\n const cells = splitOmd(omd);\n return {\n files: [],\n nodes: cells.map((cell, idx) => {\n return {\n id: idx,\n mode: cell.inlineMD ? \"md\" : \"js\",\n value: cell.ojs,\n start: cell.offset,\n end: cell.offset + cell.ojs.length\n };\n })\n } as ohq.Notebook;\n}\n\nexport function omd2notebookKit(omd: string): Notebook {\n const cells: Cell[] = [];\n splitOmd(omd).forEach((cell) => {\n if (!cell.inlineMD) {\n splitModule(cell.ojs).forEach((subCell) => {\n cells.push(toCell({\n id: cells.length + 1,\n mode: \"ojs\",\n value: subCell.text\n }));\n });\n } else {\n cells.push(toCell({\n id: cells.length + 1,\n mode: \"md\",\n value: cell.ojs\n }));\n }\n });\n return toNotebook({ cells });\n}\n\nexport function fetchEx(url: string, proxyPrefix = \"https://api.codetabs.com/v1/proxy/?quest=\", proxyPostfix = \"\") {\n const matches = url.match(/^(?:https?:\\/\\/)?(?:[^@\\n]+@)?(?:www\\.)?([^:\\/\\n?]+)/img);\n if (!matches || matches.length === 0) {\n throw new Error(`Invalid URL: ${url}`);\n }\n return fetch(url, { headers: { origin: matches[0], referer: url } }).then(response => {\n if (response.ok) return response;\n throw new Error(\"CORS?\");\n }).catch(e => {\n url = `${proxyPrefix}${url}${proxyPostfix}`;\n return fetch(url, { headers: { origin: matches[0], referer: url } });\n });\n}\n\nexport function download(impUrl: string, proxyPrefix?: string, proxyPostfix?: string): Promise<ohq.Notebook> {\n const isShared = impUrl.indexOf(\"https://observablehq.com/d\") === 0;\n return fetchEx(impUrl.replace(`https://observablehq.com/${isShared ? \"d/\" : \"\"}`, \"https://api.observablehq.com/document/\"), proxyPrefix, proxyPostfix)\n .then(r => r.json())\n ;\n}\n\nfunction _constructFunction(body, bodyStr: string) {\n if (body.type !== \"FunctionExpression\" && body.type !== \"FunctionDeclaration\" && body.type !== \"ArrowFunctionExpression\") {\n throw new Error(`Unsupported function type: ${body.type}`);\n }\n const func = body.async && body.generator ?\n FunctionConstructors.asyncGenerator :\n body.async ?\n FunctionConstructors.async :\n body.generator ?\n FunctionConstructors.generator :\n FunctionConstructors.regular;\n\n const params = body.params?.map((param) => bodyStr.slice(param.start, param.end)).join(\", \") ?? \"\";\n const isBlock = body.body.type === \"BlockStatement\";\n const { start, end } = body.body;\n const inner = isBlock\n ? bodyStr.slice(start + 1, end - 1)\n : `return ${bodyStr.slice(start, end)}`;\n return func(params, inner);\n}\n\nexport function constructFunction(bodyStr: string) {\n const { body } = parseJavaScript(bodyStr);\n if (body.type === \"Program\") {\n if (body.body.length !== 1) {\n throw new Error(`Expected a single function, but found ${body.body.length} statements`);\n }\n return _constructFunction(body.body[0], bodyStr);\n }\n return _constructFunction(body, bodyStr);\n}\n\nexport const html2notebook = (html: string): Notebook => deserialize(html);\nexport const notebook2html = (notebook: Notebook): string => serialize(notebook);\n\n", "import { ancestor, parseCell as ohqParseCell, Cell, Node, walk, AncestorVisitors } from \"./observable-shim.ts\";\n\nimport { fixRelativeUrl, createFunction, Refs } from \"./util.ts\";\n\nfunction calcRefs(cellAst: Cell, cellStr: string): Refs {\n if (cellAst.references === undefined) return { inputs: [], args: [], patches: [] };\n\n const dedup: { [id: string]: boolean } = {};\n cellAst.references.forEach((r: any) => dedup[cellStr.substring(r.start, r.end)] = true);\n const retVal: Refs = {\n inputs: Object.keys(dedup),\n args: Object.keys(dedup).map(r => r.split(\" \").join(\"_\")),\n patches: []\n };\n const pushPatch = (node: Node, newText: string) => retVal.patches.push({ start: node.start - (cellAst.body?.start ?? 0), end: node.end - (cellAst.body?.start ?? 0), newText });\n if (cellAst.body) {\n ancestor(cellAst.body, {\n Identifier(node) {\n const value = cellStr.substring(node.start, node.end);\n if (dedup[value]) {\n }\n },\n MutableExpression(node: Node) {\n const value = cellStr.substring(node.start, node.end);\n const newText = value.split(\" \").join(\"_\") + \".value\";\n pushPatch(node, newText);\n },\n ViewExpression(node: Node) {\n const value = cellStr.substring(node.start, node.end);\n const newText = value.split(\" \").join(\"_\");\n pushPatch(node, newText);\n },\n ThisExpression(node: Node, ancestors: Node[]) {\n const value = cellStr.substring(node.start, node.end);\n if (value === \"this\" && !ancestors.find(n => n.type === \"FunctionExpression\")) {\n pushPatch(node, \"((this === globalThis || this === globalThis.window)? undefined : this?.valueOf())\");\n }\n }\n } as AncestorVisitors<any>, walk);\n }\n return retVal;\n}\n\nexport interface ParsedCell {\n type: \"import\" | \"viewof\" | \"mutable\" | \"variable\" | \"identifier\"\n}\n\nexport interface ParsedImportCell extends ParsedCell {\n type: \"import\"\n src: string;\n specifiers: { view: boolean, name: string, alias?: string }[];\n injections: { name: string, alias: string }[];\n}\n\nfunction parseImportDeclaration(cellAst: any): ParsedImportCell {\n return {\n type: \"import\",\n src: cellAst.body.source.value,\n specifiers: cellAst.body.specifiers?.map((spec: any) => {\n return {\n view: spec.view,\n name: spec.imported.name,\n alias: (spec.local?.name && spec.imported.name !== spec.local.name) ? spec.local.name : spec.imported.name\n };\n }) ?? [],\n injections: cellAst.body.injections?.map((inj: any) => {\n return {\n name: inj.imported.name,\n alias: inj.local?.name ?? inj.imported.name\n };\n }) ?? [],\n };\n}\n\nexport interface ParsedVariable extends ParsedCell {\n type: \"variable\"\n id?: string,\n inputs: string[],\n func: any,\n}\n\nexport interface ParsedViewCell extends ParsedCell {\n type: \"viewof\",\n variable: ParsedVariable;\n variableValue: ParsedVariable;\n}\n\nfunction parseViewExpression(cellStr: string, cellAst: any, refs: Refs, bodyStr?: string): ParsedViewCell {\n const id = cellAst.id && cellStr.substring(cellAst.id.start, cellAst.id.end);\n return {\n type: \"viewof\",\n variable: {\n type: \"variable\",\n id,\n inputs: refs.inputs,\n func: createFunction(refs, cellAst.async, cellAst.generator, cellAst.body.type === \"BlockStatement\", bodyStr)\n },\n variableValue: {\n type: \"variable\",\n id: cellAst?.id?.id?.name,\n inputs: [\"Generators\", id],\n func: (G: any, _: any) => G.input(_)\n }\n };\n}\n\ninterface ParsedMutableCell extends ParsedCell {\n type: \"mutable\",\n initial: ParsedVariable;\n variable: ParsedVariable;\n variableValue: ParsedVariable;\n}\n\nfunction parseMutableExpression(cellStr: string, cellAst: any, refs: Refs, bodyStr?: string): ParsedMutableCell {\n const id = cellAst.id && cellStr.substring(cellAst.id.start, cellAst.id.end);\n const initialValueId = cellAst?.id?.id?.name;\n const initialId = `initial ${initialValueId}`;\n return {\n type: \"mutable\",\n initial: {\n type: \"variable\",\n id: initialId,\n inputs: refs.inputs,\n func: createFunction(refs, cellAst.async, cellAst.generator, cellAst.body.type === \"BlockStatement\", bodyStr)\n },\n variable: {\n type: \"variable\",\n id,\n inputs: [\"Mutable\", initialId],\n func: (M: any, _: any) => new M(_)\n },\n variableValue: {\n type: \"variable\",\n id: initialValueId,\n inputs: [id],\n func: (_: any) => _.generator\n }\n };\n}\n\ninterface ParsedVariableCell extends ParsedCell {\n type: \"variable\",\n id: string,\n inputs: string[],\n func: any,\n}\n\nfunction parseVariableExpression(cellStr: string, cellAst: any, refs: Refs, bodyStr?: string): ParsedVariableCell {\n return {\n type: \"variable\",\n id: cellAst.id && cellStr.substring(cellAst.id?.start, cellAst.id?.end),\n inputs: refs.inputs,\n func: createFunction(refs, cellAst.async, cellAst.generator, cellAst.body.type === \"BlockStatement\", bodyStr)\n };\n}\n\nexport function parseCell(cellStr: string, baseUrl: string): ParsedImportCell | ParsedViewCell | ParsedMutableCell | ParsedVariableCell {\n const cellAst = ohqParseCell(cellStr);\n let bodyStr = cellAst.body && cellStr.substring(cellAst.body.start, cellAst.body.end);\n switch ((cellAst.body)?.type) {\n case \"ImportDeclaration\":\n return parseImportDeclaration(cellAst);\n case \"ImportExpression\":\n switch (cellAst.body.source.type) {\n case \"Literal\":\n bodyStr = `import(\"${fixRelativeUrl(\"\" + cellAst.body.source.value, baseUrl)}\")`;\n break;\n default:\n console.error(\"Unexpected import value\");\n }\n }\n const refs = calcRefs(cellAst, cellStr);\n switch (cellAst.id?.type) {\n case \"ViewExpression\":\n return parseViewExpression(cellStr, cellAst, refs, bodyStr);\n case \"MutableExpression\":\n return parseMutableExpression(cellStr, cellAst, refs, bodyStr);\n default:\n return parseVariableExpression(cellStr, cellAst, refs, bodyStr);\n }\n}\n\n", "import { ohq } from \"./observable-shim.ts\";\nimport { ParsedImportCell, ParsedVariable } from \"./cst.ts\";\n\nexport class Writer {\n\n protected _files: ohq.File[] = [];\n protected _imports: string[] = [];\n protected _functions: string[] = [];\n protected _defines: string[] = [];\n protected _defineUid = 0;\n protected _functionUid = 0;\n\n constructor() {\n }\n\n toString() {\n return `\\\n${this._imports.join(\"\\n\")}\n\n${this._functions.join(\"\\n\").split(\"\\n) {\").join(\"){\")}\n\nexport default function define(runtime, observer) {\n const main = runtime.module();\n\n function toString() { return this.url; }\n const fileAttachments = new Map([\n ${this._files.map(f => `[\"${f.name}\", { url: new URL(\"${f.url}\"), mimeType: ${JSON.stringify(f.mime_type)}, toString }]`).join(\",\\n \")}\n ]);\n main.builtin(\"FileAttachment\", runtime.fileAttachments(name => fileAttachments.get(name)));\n\n ${this._defines.join(\"\\n \")}\n\n return main;\n}\\n`;\n }\n\n files(files: ohq.File[]) {\n this._files = [...this._files, ...files];\n }\n\n import(url: string) {\n this._imports.push(`import define${++this._defineUid} from \"${url}\"; `);\n }\n\n importDefine(imp: Partial<ParsedImportCell>) {\n const impInjections = imp.injections ?? [];\n const injections = impInjections.map(inj => {\n return inj.name === inj.alias ?\n `\"${inj.name}\"` :\n `{name: \"${inj.name}\", alias: \"${inj.alias}\"}`;\n });\n const derive = impInjections.length ? `.derive([${injections.join(\", \")}], main)` : \"\";\n this._defines.push(`const child${this._defineUid} = runtime.module(define${this._defineUid})${derive};`);\n const impSpecifiers = imp.specifiers ?? [];\n impSpecifiers.forEach(s => {\n this._defines.push(`main.import(\"${s.name}\"${s.alias && s.alias !== s.name ? `, \"${s.alias}\"` : \"\"}, child${this._defineUid}); `);\n });\n }\n\n function(variable: Partial<ParsedVariable>) {\n let id = variable.id ?? `${++this._functionUid}`;\n const idParts = id.split(\" \");\n id = `_${idParts[idParts.length - 1]}`;\n this._functions.push(`${variable.func?.toString()?.replace(\"anonymous\", `${id}`)}`);\n return id;\n }\n\n define(variable: Partial<ParsedVariable>, observable = true, inlineFunc = false, funcId?: string) {\n funcId = funcId ?? variable.id;\n const observe = observable ? `.variable(observer(${variable.id ? JSON.stringify(variable.id) : \"\"}))` : \"\";\n const id = variable.id ? `${JSON.stringify(variable.id)}, ` : \"\";\n const variableInputs = variable.inputs ?? [];\n const inputs = variableInputs.length ? `[${variableInputs.map(i => JSON.stringify(i)).join(\", \")}], ` : \"\";\n const func = inlineFunc ?\n variable.func?.toString() :\n funcId;\n this._defines.push(`main${observe}.define(${id}${inputs}${func});`);\n }\n\n error(msg: string) {\n }\n}\n\n"],
5
+ "mappings": "AAAA,OAAS,SAAAA,OAAa,QCCtB,OAAwB,aAAAC,OAAiB,6BCAzC,OAAS,eAAAC,GAAa,YAAAC,MAAkF,QACxG,OAAS,YAAAC,MAAqD,aAC9D,OAAS,cAAAC,EAAY,aAAaC,EAAc,QAAQC,MAAe,uBCCvE,OAAQ,YAAAC,OAAe,aCJvB,OAAQ,QAAAC,MAAW,aAEnB,IAAOC,EAAQD,EAAK,CAClB,QAAS,CAAC,EACV,eAAeE,EAAMC,EAAIC,EAAG,CAC1BA,EAAEF,EAAK,GAAIC,EAAI,YAAY,CAC7B,EACA,kBAAkBD,EAAMC,EAAIC,EAAG,CAC7BA,EAAEF,EAAK,GAAIC,EAAI,YAAY,CAC7B,CACF,CAAC,ECVD,OAAQ,UAAAE,OAAa,aHyErB,IAAMC,EAAN,cAA2BC,CAAW,CAElC,cAAcC,EAA0B,CAGpC,IAFKA,EAAK,QAAOA,EAAK,MAAQ,CAAC,GAExB,KAAK,OAASC,EAAS,KAAK,CAE/B,IAAMC,EAAa,KAAK,UAAU,KAAK,UAAU,CAAC,EAElDA,EAAK,MAAQ,KAAK,MAClBF,EAAK,MAAM,KAAKE,CAAI,CACxB,CAEA,YAAK,KAAK,EAEH,KAAK,WAAWF,EAAM,SAAS,CAC1C,CACJ,EAwBO,SAASG,EAAYC,EAAuB,CAC/C,OAAQC,EACH,MAAMD,EAAO,CAAE,YAAa,QAAS,CAAC,EACtC,MAAM,IAAKE,IAAe,CACvB,KAAM,OACN,KAAMF,EAAM,UAAUE,EAAK,MAAOA,EAAK,GAAG,EAC1C,MAAOA,EAAK,MACZ,IAAKA,EAAK,GACd,EAAE,CACV,CAQO,SAASC,EAAUC,EAAqB,CAC3C,OAAOC,EAAaD,CAAK,CAC7B,CAEO,IAAME,EAA+BC,EIvI5C,OAAmC,UAAAC,EAAQ,cAAAC,EAAY,mBAAAC,EAAiB,aAAAC,EAAW,eAAAC,MAAmB,6BAqC/F,IAAMC,EAKT,CACA,QAAS,OAAO,eAAe,UAAY,CAAE,CAAC,EAAE,YAChD,MAAO,OAAO,eAAe,gBAAkB,CAAE,CAAC,EAAE,YACpD,UAAW,OAAO,eAAe,WAAa,CAAE,CAAC,EAAE,YACnD,eAAgB,OAAO,eAAe,iBAAmB,CAAE,CAAC,EAAE,WAClE,EAEA,SAASC,EAASC,EAAiB,GAAOC,EAAqB,GAAO,CAClE,MAAI,CAACD,GAAS,CAACC,EAAkBH,EAAqB,QAClDE,GAAS,CAACC,EAAkBH,EAAqB,MACjD,CAACE,GAASC,EAAkBH,EAAqB,UAC9CA,EAAqB,cAChC,CAcO,SAASI,EAAeC,EAAYH,EAAQ,GAAOC,EAAY,GAAOG,EAAiB,GAAOC,EAAe,CAChH,GAAIA,IAAS,OAIb,OAAAF,EAAK,QAAQ,KAAK,CAACG,EAAGC,IAAMA,EAAE,MAAQD,EAAE,KAAK,EAC7CH,EAAK,QAAQ,QAAQI,GAAK,CACtBF,EAAOA,EAAM,UAAU,EAAGE,EAAE,KAAK,EAAIA,EAAE,QAAUF,EAAM,UAAUE,EAAE,GAAG,CAC1E,CAAC,EACM,IAAKR,EAASC,EAAOC,CAAS,GAAG,GAAGE,EAAK,KAAMC,EAClDC,EAAK,UAAU,EAAGA,EAAK,OAAS,CAAC,EAAE,KAAK,EACxC;AAAA,EAAaA,CAAI;AAAA,GAAM,CAC/B,CAEA,SAASG,EAAKC,EAAiBC,EAAqB,CAChD,OAAOA,EACDD,EAAQ,QAAQ,OAAQ,EAAE,EAAI,IAAMC,EAAY,QAAQ,OAAQ,EAAE,EAClED,CACV,CAEO,IAAME,EAAkBC,GAAiBA,EAAK,CAAC,IAAM,IAC/CC,EAAiB,CAACD,EAAcE,IACrCH,EAAeC,CAAI,EACZJ,EAAKM,EAAUF,CAAI,EAEvBA,EAILG,EAA2B,IAAIjB,EAAqB,MAAM,MAAO,oBAAoB,EAC3F,eAAsBkB,EAAiBC,EAAa,CAChD,OAAOF,EAAyBE,CAAG,CACvC,CAUO,SAASC,EAAeC,EAAa,CACxC,OAAOA,EACF,MAAM,GAAG,EAAE,KAAK,KAAK,CAE9B,CAEA,SAASC,EAAgBC,EAAaC,EAAgBC,EAA8B,CAChF,IAAIC,EACAC,EACJ,GAAI,CACAD,EAAOE,EAAUL,CAAG,CACxB,OAASM,EAAG,CACRF,EAAQE,CACZ,CACA,MAAO,CACH,IAAAN,EACA,OAAAC,EACA,SAAAC,EACA,KAAAC,EACA,MAAAC,CACJ,CACJ,CAEA,SAASG,EAASC,EAAwB,CACtC,IAAMC,EAAsB,CAAC,EAEvBC,EAAK,6BACPC,EAAa,EACbC,EAAQF,EAAG,KAAKF,CAAC,EACrB,KAAOI,IAAU,MAAM,CACfA,EAAM,MAAQD,GACdF,EAAO,KAAKV,EAAgBS,EAAE,UAAUG,EAAYC,EAAM,KAAK,EAAGD,EAAY,EAAI,CAAC,EAGvF,IAAME,EAAQD,EAAM,CAAC,EACrB,GAAIC,EAAM,QAAQ,MAAM,IAAM,GAAKA,EAAM,QAAQ,OAAO,IAAM,GAAKA,EAAM,QAAQ,SAAS,IAAM,EAAG,CAE/F,IAAMC,EAAQD,EAAM,UAAU,EAAWA,EAAM,OAAS,CAAS,EACjEJ,EAAO,KAAKV,EAAgBe,EAAOF,EAAM,MAAQ,EAAW,EAAK,CAAC,CACtE,MACIH,EAAO,KAAKV,EAAgBc,EAAOD,EAAM,MAAO,EAAI,CAAC,EAGzDD,EAAaC,EAAM,MAAQA,EAAM,CAAC,EAAE,OACpCA,EAAQF,EAAG,KAAKF,CAAC,CACrB,CACA,OAAIA,EAAE,OAASG,GACXF,EAAO,KAAKV,EAAgBS,EAAE,UAAUG,EAAYH,EAAE,MAAM,EAAGG,EAAY,EAAI,CAAC,EAE7EF,CACX,CAOO,SAASM,EAAaC,EAA2B,CACpD,IAAMC,EAAQC,EAAYF,CAAG,EAC7B,MAAO,CACH,MAAO,CAAC,EACR,MAAOC,EAAM,IAAI,CAACE,EAAMC,KACb,CACH,GAAIA,EACJ,KAAM,KACN,MAAOD,EAAK,KACZ,MAAOA,EAAK,MACZ,IAAKA,EAAK,GACd,EACH,CACL,CACJ,CAEO,SAASE,EAAgBL,EAAuB,CACnD,IAAMC,EAAgBC,EAAYF,CAAG,EAAE,IAAI,CAACG,EAAMC,IACvCE,EAAO,CACV,GAAIF,EACJ,KAAM,MACN,MAAOD,EAAK,IAChB,CAAC,CACJ,EACD,OAAOI,EAAW,CAAE,MAAAN,CAAM,CAAC,CAC/B,CAEO,SAASO,EAAaC,EAA2B,CACpD,IAAMR,EAAQS,EAASD,CAAG,EAC1B,MAAO,CACH,MAAO,CAAC,EACR,MAAOR,EAAM,IAAI,CAACE,EAAMC,KACb,CACH,GAAIA,EACJ,KAAMD,EAAK,SAAW,KAAO,KAC7B,MAAOA,EAAK,IACZ,MAAOA,EAAK,OACZ,IAAKA,EAAK,OAASA,EAAK,IAAI,MAChC,EACH,CACL,CACJ,CAEO,SAASQ,GAAgBF,EAAuB,CACnD,IAAMR,EAAgB,CAAC,EACvB,OAAAS,EAASD,CAAG,EAAE,QAASN,GAAS,CACvBA,EAAK,SASNF,EAAM,KAAKK,EAAO,CACd,GAAIL,EAAM,OAAS,EACnB,KAAM,KACN,MAAOE,EAAK,GAChB,CAAC,CAAC,EAZFD,EAAYC,EAAK,GAAG,EAAE,QAASS,GAAY,CACvCX,EAAM,KAAKK,EAAO,CACd,GAAIL,EAAM,OAAS,EACnB,KAAM,MACN,MAAOW,EAAQ,IACnB,CAAC,CAAC,CACN,CAAC,CAQT,CAAC,EACML,EAAW,CAAE,MAAAN,CAAM,CAAC,CAC/B,CAEO,SAASY,EAAQC,EAAaC,EAAc,4CAA6CC,EAAe,GAAI,CAC/G,IAAMC,EAAUH,EAAI,MAAM,yDAAyD,EACnF,GAAI,CAACG,GAAWA,EAAQ,SAAW,EAC/B,MAAM,IAAI,MAAM,iBAAiBH,CAAG,EAAE,EAE1C,OAAO,MAAMA,EAAK,CAAE,QAAS,CAAE,OAAQG,EAAQ,CAAC,EAAG,QAASH,CAAI,CAAE,CAAC,EAAE,KAAKI,GAAY,CAClF,GAAIA,EAAS,GAAI,OAAOA,EACxB,MAAM,IAAI,MAAM,OAAO,CAC3B,CAAC,EAAE,MAAMC,IACLL,EAAM,GAAGC,CAAW,GAAGD,CAAG,GAAGE,CAAY,GAClC,MAAMF,EAAK,CAAE,QAAS,CAAE,OAAQG,EAAQ,CAAC,EAAG,QAASH,CAAI,CAAE,CAAC,EACtE,CACL,CAEO,SAASM,GAASC,EAAgBN,EAAsBC,EAA8C,CACzG,IAAMM,EAAWD,EAAO,QAAQ,4BAA4B,IAAM,EAClE,OAAOR,EAAQQ,EAAO,QAAQ,4BAA4BC,EAAW,KAAO,EAAE,GAAI,wCAAwC,EAAGP,EAAaC,CAAY,EACjJ,KAAKO,GAAKA,EAAE,KAAK,CAAC,CAE3B,CAEA,SAASC,EAAmBC,EAAMC,EAAiB,CAC/C,GAAID,EAAK,OAAS,sBAAwBA,EAAK,OAAS,uBAAyBA,EAAK,OAAS,0BAC3F,MAAM,IAAI,MAAM,8BAA8BA,EAAK,IAAI,EAAE,EAE7D,IAAME,EAAOF,EAAK,OAASA,EAAK,UAC5BG,EAAqB,eACrBH,EAAK,MACDG,EAAqB,MACrBH,EAAK,UACDG,EAAqB,UACrBA,EAAqB,QAE3BC,EAASJ,EAAK,QAAQ,IAAKK,GAAUJ,EAAQ,MAAMI,EAAM,MAAOA,EAAM,GAAG,CAAC,EAAE,KAAK,IAAI,GAAK,GAC1FC,EAAUN,EAAK,KAAK,OAAS,iBAC7B,CAAE,MAAAO,EAAO,IAAAC,CAAI,EAAIR,EAAK,KACtBS,EAAQH,EACRL,EAAQ,MAAMM,EAAQ,EAAGC,EAAM,CAAC,EAChC,UAAUP,EAAQ,MAAMM,EAAOC,CAAG,CAAC,GACzC,OAAON,EAAKE,EAAQK,CAAK,CAC7B,CAEO,SAASC,EAAkBT,EAAiB,CAC/C,GAAM,CAAE,KAAAD,CAAK,EAAIW,EAAgBV,CAAO,EACxC,GAAID,EAAK,OAAS,UAAW,CACzB,GAAIA,EAAK,KAAK,SAAW,EACrB,MAAM,IAAI,MAAM,yCAAyCA,EAAK,KAAK,MAAM,aAAa,EAE1F,OAAOD,EAAmBC,EAAK,KAAK,CAAC,EAAGC,CAAO,CACnD,CACA,OAAOF,EAAmBC,EAAMC,CAAO,CAC3C,CAEO,IAAMW,GAAiBC,GAA2BC,EAAYD,CAAI,EAC5DE,GAAiBC,GAA+BC,EAAUD,CAAQ,EC1R/E,SAASE,GAASC,EAAeC,EAAuB,CACpD,GAAID,EAAQ,aAAe,OAAW,MAAO,CAAE,OAAQ,CAAC,EAAG,KAAM,CAAC,EAAG,QAAS,CAAC,CAAE,EAEjF,IAAME,EAAmC,CAAC,EAC1CF,EAAQ,WAAW,QAASG,GAAWD,EAAMD,EAAQ,UAAUE,EAAE,MAAOA,EAAE,GAAG,CAAC,EAAI,EAAI,EACtF,IAAMC,EAAe,CACjB,OAAQ,OAAO,KAAKF,CAAK,EACzB,KAAM,OAAO,KAAKA,CAAK,EAAE,IAAIC,GAAKA,EAAE,MAAM,GAAG,EAAE,KAAK,GAAG,CAAC,EACxD,QAAS,CAAC,CACd,EACME,EAAY,CAACC,EAAYC,IAAoBH,EAAO,QAAQ,KAAK,CAAE,MAAOE,EAAK,OAASN,EAAQ,MAAM,OAAS,GAAI,IAAKM,EAAK,KAAON,EAAQ,MAAM,OAAS,GAAI,QAAAO,CAAQ,CAAC,EAC9K,OAAIP,EAAQ,MACRQ,EAASR,EAAQ,KAAM,CACnB,WAAWM,EAAM,CACb,IAAMG,EAAQR,EAAQ,UAAUK,EAAK,MAAOA,EAAK,GAAG,EAChDJ,EAAMO,CAAK,CAEnB,EACA,kBAAkBH,EAAY,CAE1B,IAAMC,EADQN,EAAQ,UAAUK,EAAK,MAAOA,EAAK,GAAG,EAC9B,MAAM,GAAG,EAAE,KAAK,GAAG,EAAI,SAC7CD,EAAUC,EAAMC,CAAO,CAC3B,EACA,eAAeD,EAAY,CAEvB,IAAMC,EADQN,EAAQ,UAAUK,EAAK,MAAOA,EAAK,GAAG,EAC9B,MAAM,GAAG,EAAE,KAAK,GAAG,EACzCD,EAAUC,EAAMC,CAAO,CAC3B,EACA,eAAeD,EAAYI,EAAmB,CAC5BT,EAAQ,UAAUK,EAAK,MAAOA,EAAK,GAAG,IACtC,QAAU,CAACI,EAAU,KAAKC,GAAKA,EAAE,OAAS,oBAAoB,GACxEN,EAAUC,EAAM,oFAAoF,CAE5G,CACJ,EAA4BM,CAAI,EAE7BR,CACX,CAaA,SAASS,GAAuBb,EAAgC,CAC5D,MAAO,CACH,KAAM,SACN,IAAKA,EAAQ,KAAK,OAAO,MACzB,WAAYA,EAAQ,KAAK,YAAY,IAAKc,IAC/B,CACH,KAAMA,EAAK,KACX,KAAMA,EAAK,SAAS,KACpB,MAAQA,EAAK,OAAO,MAAQA,EAAK,SAAS,OAASA,EAAK,MAAM,KAAQA,EAAK,MAAM,KAAOA,EAAK,SAAS,IAC1G,EACH,GAAK,CAAC,EACP,WAAYd,EAAQ,KAAK,YAAY,IAAKe,IAC/B,CACH,KAAMA,EAAI,SAAS,KACnB,MAAOA,EAAI,OAAO,MAAQA,EAAI,SAAS,IAC3C,EACH,GAAK,CAAC,CACX,CACJ,CAeA,SAASC,GAAoBf,EAAiBD,EAAciB,EAAYC,EAAkC,CACtG,IAAMC,EAAKnB,EAAQ,IAAMC,EAAQ,UAAUD,EAAQ,GAAG,MAAOA,EAAQ,GAAG,GAAG,EAC3E,MAAO,CACH,KAAM,SACN,SAAU,CACN,KAAM,WACN,GAAAmB,EACA,OAAQF,EAAK,OACb,KAAMG,EAAeH,EAAMjB,EAAQ,MAAOA,EAAQ,UAAWA,EAAQ,KAAK,OAAS,iBAAkBkB,CAAO,CAChH,EACA,cAAe,CACX,KAAM,WACN,GAAIlB,GAAS,IAAI,IAAI,KACrB,OAAQ,CAAC,aAAcmB,CAAE,EACzB,KAAM,CAACE,EAAQC,IAAWD,EAAE,MAAMC,CAAC,CACvC,CACJ,CACJ,CASA,SAASC,GAAuBtB,EAAiBD,EAAciB,EAAYC,EAAqC,CAC5G,IAAMC,EAAKnB,EAAQ,IAAMC,EAAQ,UAAUD,EAAQ,GAAG,MAAOA,EAAQ,GAAG,GAAG,EACrEwB,EAAiBxB,GAAS,IAAI,IAAI,KAClCyB,EAAY,WAAWD,CAAc,GAC3C,MAAO,CACH,KAAM,UACN,QAAS,CACL,KAAM,WACN,GAAIC,EACJ,OAAQR,EAAK,OACb,KAAMG,EAAeH,EAAMjB,EAAQ,MAAOA,EAAQ,UAAWA,EAAQ,KAAK,OAAS,iBAAkBkB,CAAO,CAChH,EACA,SAAU,CACN,KAAM,WACN,GAAAC,EACA,OAAQ,CAAC,UAAWM,CAAS,EAC7B,KAAM,CAACC,EAAQJ,IAAW,IAAII,EAAEJ,CAAC,CACrC,EACA,cAAe,CACX,KAAM,WACN,GAAIE,EACJ,OAAQ,CAACL,CAAE,EACX,KAAOG,GAAWA,EAAE,SACxB,CACJ,CACJ,CASA,SAASK,GAAwB1B,EAAiBD,EAAciB,EAAYC,EAAsC,CAC9G,MAAO,CACH,KAAM,WACN,GAAIlB,EAAQ,IAAMC,EAAQ,UAAUD,EAAQ,IAAI,MAAOA,EAAQ,IAAI,GAAG,EACtE,OAAQiB,EAAK,OACb,KAAMG,EAAeH,EAAMjB,EAAQ,MAAOA,EAAQ,UAAWA,EAAQ,KAAK,OAAS,iBAAkBkB,CAAO,CAChH,CACJ,CAEO,SAASU,EAAU3B,EAAiB4B,EAA6F,CACpI,IAAM7B,EAAU4B,EAAa3B,CAAO,EAChCiB,EAAUlB,EAAQ,MAAQC,EAAQ,UAAUD,EAAQ,KAAK,MAAOA,EAAQ,KAAK,GAAG,EACpF,OAASA,EAAQ,MAAO,KAAM,CAC1B,IAAK,oBACD,OAAOa,GAAuBb,CAAO,EACzC,IAAK,mBACD,OAAQA,EAAQ,KAAK,OAAO,KAAM,CAC9B,IAAK,UACDkB,EAAU,WAAWY,EAAe,GAAK9B,EAAQ,KAAK,OAAO,MAAO6B,CAAO,CAAC,KAC5E,MACJ,QACI,QAAQ,MAAM,yBAAyB,CAC/C,CACR,CACA,IAAMZ,EAAOlB,GAASC,EAASC,CAAO,EACtC,OAAQD,EAAQ,IAAI,KAAM,CACtB,IAAK,iBACD,OAAOgB,GAAoBf,EAASD,EAASiB,EAAMC,CAAO,EAC9D,IAAK,oBACD,OAAOK,GAAuBtB,EAASD,EAASiB,EAAMC,CAAO,EACjE,QACI,OAAOS,GAAwB1B,EAASD,EAASiB,EAAMC,CAAO,CACtE,CACJ,CCjLO,IAAMa,EAAN,KAAa,CAEN,OAAqB,CAAC,EACtB,SAAqB,CAAC,EACtB,WAAuB,CAAC,EACxB,SAAqB,CAAC,EACtB,WAAa,EACb,aAAe,EAEzB,aAAc,CACd,CAEA,UAAW,CACP,MAAO,GACb,KAAK,SAAS,KAAK;AAAA,CAAI,CAAC;AAAA;AAAA,EAExB,KAAK,WAAW,KAAK;AAAA,CAAI,EAAE,MAAM;AAAA,IAAO,EAAE,KAAK,IAAI,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOhD,KAAK,OAAO,IAAIC,GAAK,KAAKA,EAAE,IAAI,sBAAsBA,EAAE,GAAG,iBAAiB,KAAK,UAAUA,EAAE,SAAS,CAAC,eAAe,EAAE,KAAK;AAAA,KAAS,CAAC;AAAA;AAAA;AAAA;AAAA,IAIzI,KAAK,SAAS,KAAK;AAAA,GAAM,CAAC;AAAA;AAAA;AAAA;AAAA,CAI1B,CAEA,MAAMC,EAAmB,CACrB,KAAK,OAAS,CAAC,GAAG,KAAK,OAAQ,GAAGA,CAAK,CAC3C,CAEA,OAAOC,EAAa,CAChB,KAAK,SAAS,KAAK,gBAAgB,EAAE,KAAK,UAAU,UAAUA,CAAG,KAAK,CAC1E,CAEA,aAAaC,EAAgC,CACzC,IAAMC,EAAgBD,EAAI,YAAc,CAAC,EACnCE,EAAaD,EAAc,IAAIE,GAC1BA,EAAI,OAASA,EAAI,MACpB,IAAIA,EAAI,IAAI,IACZ,WAAWA,EAAI,IAAI,cAAcA,EAAI,KAAK,IACjD,EACKC,EAASH,EAAc,OAAS,YAAYC,EAAW,KAAK,IAAI,CAAC,WAAa,GACpF,KAAK,SAAS,KAAK,cAAc,KAAK,UAAU,2BAA2B,KAAK,UAAU,IAAIE,CAAM,GAAG,GACjFJ,EAAI,YAAc,CAAC,GAC3B,QAAQ,GAAK,CACvB,KAAK,SAAS,KAAK,gBAAgB,EAAE,IAAI,IAAI,EAAE,OAAS,EAAE,QAAU,EAAE,KAAO,MAAM,EAAE,KAAK,IAAM,EAAE,UAAU,KAAK,UAAU,KAAK,CACpI,CAAC,CACL,CAEA,SAASK,EAAmC,CACxC,IAAIC,EAAKD,EAAS,IAAM,GAAG,EAAE,KAAK,YAAY,GACxCE,EAAUD,EAAG,MAAM,GAAG,EAC5B,OAAAA,EAAK,IAAIC,EAAQA,EAAQ,OAAS,CAAC,CAAC,GACpC,KAAK,WAAW,KAAK,GAAGF,EAAS,MAAM,SAAS,GAAG,QAAQ,YAAa,GAAGC,CAAE,EAAE,CAAC,EAAE,EAC3EA,CACX,CAEA,OAAOD,EAAmCG,EAAa,GAAMC,EAAa,GAAOC,EAAiB,CAC9FA,EAASA,GAAUL,EAAS,GAC5B,IAAMM,EAAUH,EAAa,sBAAsBH,EAAS,GAAK,KAAK,UAAUA,EAAS,EAAE,EAAI,EAAE,KAAO,GAClGC,EAAKD,EAAS,GAAK,GAAG,KAAK,UAAUA,EAAS,EAAE,CAAC,KAAO,GACxDO,EAAiBP,EAAS,QAAU,CAAC,EACrCQ,EAASD,EAAe,OAAS,IAAIA,EAAe,IAAIE,GAAK,KAAK,UAAUA,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,MAAQ,GAClGC,EAAON,EACTJ,EAAS,MAAM,SAAS,EACxBK,EACJ,KAAK,SAAS,KAAK,OAAOC,CAAO,WAAWL,CAAE,GAAGO,CAAM,GAAGE,CAAI,IAAI,CACtE,CAEA,MAAMC,EAAa,CACnB,CACJ,EPvDA,eAAeC,GAAWC,EAAsBC,EAAiB,CAC7D,IAAMC,EAAOC,EAAeH,EAAcC,CAAO,EAC3CG,EAAU,MAAMC,EAAQH,CAAI,EAAE,KAAKI,GAAKA,EAAE,KAAK,CAAC,EAClDC,EACAP,EAAa,SAAS,QAAQ,EAC9BO,EAAW,KAAK,MAAMH,CAAO,EACtBJ,EAAa,SAAS,MAAM,EACnCO,EAAWC,EAAaJ,CAAO,EACxBJ,EAAa,SAAS,MAAM,EACnCO,EAAWE,EAAaL,CAAO,GAE/B,QAAQ,KAAK,sBAAsBJ,CAAY,mBAAmB,EAClEO,EAAW,KAAK,MAAMH,CAAO,GAEjC,IAAMM,EAAuBC,EAAQJ,EAAU,CAAE,QAAAN,CAAQ,CAAC,EAC1D,OAAAS,EAAO,OAAS,IAAM,CAAE,EACxBA,EAAO,MAASE,GAAc,CAC1BA,EAAE,OAAOV,CAAI,CACjB,EACOQ,CACX,CAGA,eAAeG,GAAuBC,EAAiB,CACnD,IAAMC,EAAM,gCAAgCD,EAAQ,CAAC,IAAM,IAAMA,EAAU,KAAKA,CAAO,EAAE,UACrFE,EAAS,CACT,QAAS,SAAUC,EAAsBC,EAAwD,CAEjG,CACJ,EACA,GAAI,CACAF,EAAS,MAAMG,EAAiBJ,CAAG,CACvC,MAAY,CACZ,CACA,IAAML,EAAuBM,EAAO,QACpC,OAAAN,EAAO,OAAS,IAAM,CAAE,EACxBA,EAAO,MAASE,GAAc,CAC1BA,EAAE,OAAOG,CAAG,CAChB,EACOL,CACX,CAGA,eAAeU,GAAeN,EAAiB,CAC3C,IAAMC,EAAM,yCAAyCD,CAAO,GACtDP,EAAWF,EAAQU,CAAG,EACvB,KAAKT,GACKA,EAAE,KAAK,CACjB,EAAE,MAAMe,GAAK,CACV,QAAQ,MAAMN,CAAG,EACjB,QAAQ,MAAMM,CAAC,CACnB,CAAC,EACCX,EAAuBC,EAAQ,MAAMJ,CAAQ,EACnD,OAAAG,EAAO,OAAS,IAAM,CAAE,EACxBA,EAAO,MAASE,GAAc,CAC1BA,EAAE,OAAOG,CAAG,CAChB,EACOL,CACX,CAEA,eAAeY,GAAaC,EAAgBC,EAA0BC,EAAc,CAAE,QAAAxB,EAAS,WAAAyB,CAAW,EAAmB,CACzH,IAAMC,EAAcC,EAAeJ,EAAO,GAAG,EACzC,MAAMzB,GAAWyB,EAAO,IAAKvB,GAAW,EAAE,EAC1CyB,IAAe,YACX,MAAMN,GAAeI,EAAO,GAAG,EAC/B,MAAMX,GAAuBW,EAAO,GAAG,EAEzCK,EAAwC,CAAC,EACzCC,EAA4B,CAAC,EACnCN,EAAO,WAAW,QAAQO,GAAQ,CAC9B,IAAMC,EAASD,EAAK,KAAO,UAAY,GACvCF,EAAgB,KAAKI,EAAqBD,EAASD,EAAK,KAAMC,EAASD,EAAK,KAAK,CAAC,EAC9EA,EAAK,MACLF,EAAgB,KAAKI,EAAqBF,EAAK,KAAMA,EAAK,KAAK,CAAC,CAExE,CAAC,EAED,IAAMrB,EAAS,CAACO,EAAsBiB,EAAkBhB,IAAmC,CAEvF,IAAIiB,EAAMlB,EAAQ,OAAOU,CAAW,EACpC,OAAIH,EAAO,WAAW,SAClBW,EAAMA,EAAI,OAAOX,EAAO,WAAYU,CAAI,GAE5CJ,EAAU,QAAQM,GAAKA,EAAEF,EAAMhB,CAAS,CAAC,EACzCW,EAAgB,QAAQO,GAAKA,EAAEF,EAAMC,CAAG,CAAC,EAClCA,CACX,EACA,OAAAzB,EAAO,gBAAkBmB,EACzBnB,EAAO,UAAYoB,EACnBpB,EAAO,OAAS,IAAM,CAClBmB,EAAgB,QAAQO,GAAKA,EAAE,OAAO,CAAC,EACvCN,EAAU,QAAQM,GAAKA,EAAE,OAAO,CAAC,EACjCT,EAAY,OAAO,CACvB,EACAjB,EAAO,MAASE,GAAc,CAC1Be,EAAY,MAAMf,CAAC,EACnBA,EAAE,aAAaY,CAAM,CACzB,EACOd,CACX,CAIA,SAAS2B,EAAed,EAAgBe,EAAkBC,EAAeC,EAAmBC,EAAkBC,EAAS,GAAO,CAE1H,IAAIC,EACAP,EAEE1B,EAAS,CAACkC,EAAoB1B,IAAmC,CAKnE,GAJIoB,GAAWpB,IACXyB,EAAIzB,EAAUqB,EAAMhB,EAAK,EAAE,GAE/Ba,EAAIQ,EAAO,SAASD,CAAC,EACjB,UAAU,OAAS,EACnB,GAAI,CACAP,EAAE,OAAOG,EAAMC,EAAQC,CAAU,CACrC,OAASpB,EAAQ,CACb,QAAQ,MAAMA,GAAG,OAAO,CAC5B,CAEJ,GAAIE,EAAK,OAAQ,CACba,EAAIlB,EAAY0B,EAAO,SAAS1B,EAAUqB,EAAMhB,EAAK,EAAE,CAAC,EAAIqB,EAAO,SAAS,EAC5E,GAAI,CACAR,EAAE,OAAO,OAAW,CAAC,IAAI,EAAIS,GAClBA;AAAA,EACzBtB,EAAK,KAAK;AAAA,OAEK,CACL,OAASF,EAAQ,CACb,QAAQ,MAAMA,GAAG,OAAO,CAC5B,CACJ,CACA,OAAOe,CACX,EACA,OAAA1B,EAAO,OAAS,IAAM,CAClB,GAAI,CACAiC,GAAG,OAAO,OAAO,CACrB,MAAY,CACZ,CACAA,EAAI,OACJ,GAAI,CACAP,GAAG,OAAO,CACd,MAAY,CACZ,CACAA,EAAI,MACR,EACA1B,EAAO,MAASE,GAAc,CAC1B,GAAI8B,EACA9B,EAAE,OAAO,CAAE,GAAI2B,EAAM,OAAAC,EAAQ,KAAMC,CAAW,EAAGH,EAAS,EAAI,MAC3D,CACH,IAAMQ,EAAKlC,EAAE,SAAS,CAAE,GAAI2B,EAAM,KAAME,CAAW,CAAC,EACpD7B,EAAE,OAAO,CAAE,GAAI2B,EAAM,OAAAC,EAAQ,KAAMC,CAAW,EAAGH,EAAS,GAAOQ,CAAE,CACvE,CACJ,EACOpC,CACX,CAGA,SAASuB,EAAqBM,EAAcQ,EAAgB,CAExD,IAAIX,EAEE1B,EAAS,CAACwB,EAAkBP,IAA4B,CAC1DS,EAAIF,EAAK,SAAS,EACda,IAAU,OACVX,EAAE,OAAOG,EAAMZ,CAAW,EAE1BS,EAAE,OAAOG,EAAMQ,EAAOpB,CAAW,CAEzC,EAEA,OAAAjB,EAAO,OAAS,IAAM,CAClB0B,GAAG,OAAO,CACd,EACO1B,CACX,CAIA,eAAesC,EAAWzB,EAAgB0B,EAAyB,CAC/D,IAAMC,EAAwB,CAAC,EACzBpB,EAA4B,CAAC,EACnC,GAAI,CACA,IAAML,EAAOF,EAAK,MAAQA,EAAK,OAAS,KAAO,GAAGA,EAAK,IAAI,KAAK4B,EAAe5B,EAAK,KAAK,CAAC,KAAOA,EAAK,MAChG6B,EAAeC,EAAY5B,CAAI,EACrC,QAAW6B,KAAQF,EAAc,CAC7B,IAAM5B,EAAS+B,EAAUD,EAAK,KAAML,EAAQ,SAAW,EAAE,EACzD,OAAQzB,EAAO,KAAM,CACjB,IAAK,SACD0B,EAAQ,KAAK,MAAM5B,GAAaC,EAAMC,EAAQ8B,EAAK,KAAML,CAAO,CAAC,EACjE,MACJ,IAAK,SACDnB,EAAU,KAAKO,EAAed,EAAM,GAAMC,EAAO,SAAS,GAAIA,EAAO,SAAS,OAAQA,EAAO,SAAS,IAAI,CAAC,EAC3GM,EAAU,KAAKO,EAAed,EAAM,GAAOC,EAAO,cAAc,GAAIA,EAAO,cAAc,OAAQA,EAAO,cAAc,KAAM,EAAI,CAAC,EACjI,MACJ,IAAK,UACDM,EAAU,KAAKO,EAAed,EAAM,GAAOC,EAAO,QAAQ,GAAIA,EAAO,QAAQ,OAAQA,EAAO,QAAQ,IAAI,CAAC,EACzGM,EAAU,KAAKO,EAAed,EAAM,GAAOC,EAAO,SAAS,GAAIA,EAAO,SAAS,OAAQA,EAAO,SAAS,IAAI,CAAC,EAC5GM,EAAU,KAAKO,EAAed,EAAM,GAAMC,EAAO,cAAc,GAAIA,EAAO,cAAc,OAAQA,EAAO,cAAc,KAAM,EAAI,CAAC,EAChI,MACJ,IAAK,WACDM,EAAU,KAAKO,EAAed,EAAM,GAAMC,EAAO,GAAIA,EAAO,OAAQA,EAAO,IAAI,CAAC,EAChF,KACR,CACJ,CACJ,OAASH,EAAQ,CACbS,EAAU,KAAKO,EAAed,EAAM,GAAM,OAAW,CAAC,EAAGF,EAAE,SAAW,cAAc,CAAC,CACzF,CAEA,IAAMX,EAAS,CAACO,EAAsBiB,EAAkBhB,IAAmC,CACvFgC,EAAQ,QAAQM,GAAOA,EAAIvC,EAASiB,EAAMhB,CAAS,CAAC,EACpDY,EAAU,QAAQM,GAAKA,EAAEF,EAAMhB,CAAS,CAAC,CAC7C,EACA,OAAAR,EAAO,GAAKa,EAAK,GACjBb,EAAO,QAAUwC,EACjBxC,EAAO,UAAYoB,EACnBpB,EAAO,OAAS,IAAM,CAClBoB,EAAU,QAAQM,GAAKA,EAAE,OAAO,CAAC,EACjCc,EAAQ,QAAQf,GAAOA,EAAI,OAAO,CAAC,CACvC,EACAzB,EAAO,MAASE,GAAc,CAC1BsC,EAAQ,QAAQM,GAAOA,EAAI,MAAM5C,CAAC,CAAC,EACnCkB,EAAU,QAAQM,GAAKA,EAAE,MAAMxB,CAAC,CAAC,CACrC,EACOF,CACX,CAIA,SAAS+C,GAAWC,EAAgBT,EAAwC,CACxE,SAASU,GAAW,CAEhB,OAAQ,WAAmB,KAAO,EACtC,CACA,MAAO,CAACD,EAAK,KAAM,CAAE,IAAK,IAAI,IAAIvD,EAAeuD,EAAK,IAAKT,EAAQ,SAAW,EAAE,CAAC,EAAG,SAAUS,EAAK,UAAW,SAAAC,CAAS,CAAC,CAC5H,CAQO,SAASpD,GAASqD,EAAqB,CAAC,EAAGC,EAAqB,CAAC,EAAG,CAAE,QAAA5D,EAAU,IAAK,WAAAyB,EAAa,aAAc,EAAoB,CAAC,EAAG,CAC3I,IAAMoC,EAAoBF,EAAO,IAAIG,GAAKN,GAAWM,EAAG,CAAE,QAAA9D,EAAS,WAAAyB,CAAW,CAAC,CAAC,EAC1EsC,EAAkB,IAAI,IAAiBF,CAAK,EAC5CG,EAAQ,IAAI,IAA+BJ,EAAO,IAAIK,GAAK,CAACA,EAAE,GAAIA,CAAC,CAAC,CAAC,EAErExD,EAAS,CAACO,EAAsBC,IAA+C,CACjF,IAAMgB,EAAOjB,EAAQ,OAAO,EAC5B,OAAAiB,EAAK,QAAQ,iBAAkBjB,EAAQ,gBAAgBsB,GAC5CyB,EAAgB,IAAIzB,CAAI,GAAK,CAAE,IAAK,IAAI,IAAIpC,EAAeoC,EAAMtC,CAAO,CAAC,EAAG,SAAU,IAAK,CACrG,CAAC,EACFiC,EAAK,QAAQ,UAAW7B,CAAO,EAE/B4D,EAAM,QAAQX,GAAQ,CAClBA,EAAKrC,EAASiB,EAAMhB,CAAS,CACjC,CAAC,EACMgB,CACX,EACA,OAAAxB,EAAO,gBAAkBsD,EACzBtD,EAAO,MAAQuD,EACfvD,EAAO,IAAM,MAAOyD,GAAmC,CACnD,IAAMb,EAAO,MAAMN,EAAWmB,EAAG,CAAE,QAAAlE,EAAS,WAAAyB,CAAW,CAAC,EACxD,OAAAhB,EAAO,OAAO4C,EAAK,EAAE,EACrBW,EAAM,IAAIX,EAAK,GAAIA,CAAI,EAChBA,CACX,EACA5C,EAAO,IAAOoC,GACHmB,EAAM,IAAInB,CAAE,EAEvBpC,EAAO,OAAUoC,GAAiC,CAC9C,IAAMQ,EAAOW,EAAM,IAAInB,CAAE,EACzB,OAAIQ,GACAA,EAAK,OAAO,EACLW,EAAM,OAAOnB,CAAE,GAEnB,EACX,EACApC,EAAO,MAAQ,IAAM,CACjBuD,EAAM,QAAQX,GAAQA,EAAK,OAAO,CAAC,EACnCW,EAAM,MAAM,CAChB,EACAvD,EAAO,MAASE,GAAc,CAC1BA,EAAE,MAAMgD,CAAM,EACdK,EAAM,QAAQX,GAAQA,EAAK,MAAM1C,CAAC,CAAC,CACvC,EACAF,EAAO,SAAW,CAACE,EAAI,IAAIwD,KACvB1D,EAAO,MAAME,CAAC,EACPA,EAAE,SAAS,EAAE,KAAK,GAEtBF,CACX,CAGO,SAAS2D,GAAW9D,EAAkC,CACzD,IAAMG,EAAuB,CAAC,EAC9B,QAAW4C,KAAQ/C,EAAS,MAAO,CAC/B,IAAM+D,EAAWC,GAAUjB,CAAI,EAC/B5C,EAAO,KAAK,CACR,GAAI4C,EAAK,GACT,GAAGgB,EACH,KAAME,EAAkBF,EAAS,IAAI,CACzC,CAAC,CACL,CACA,OAAO5D,CACX,CAEO,SAAS+D,GAAcC,EAA+B,CACzD,MAAO,CAAC,CAACA,GAAS,MAAM,QAAQA,EAAM,KAAK,CAC/C,CAEO,SAASC,GAAcD,EAAmC,CAC7D,MAAO,CAAC,CAACA,GAAS,MAAM,QAAQA,EAAM,KAAK,CAC/C,CAIA,eAAsB/D,EAAQiE,EAAiD,CAAE,QAAA3E,EAAU,IAAK,WAAAyB,EAAa,aAAc,EAAoB,CAAC,EAAG,CAC/I,GAAI+C,GAAcG,CAAa,EAC3B,OAAOP,GAAWO,CAAa,EACxB,OAAOA,GAAkB,WAChCA,EAAgBpE,EAAaoE,CAAa,GAE9C,IAAMf,EAAqB,MAAM,QAAQ,IAAIe,EAAc,MAAM,IAAIT,GAAKnB,EAAWmB,EAAG,CAAE,QAAAlE,EAAS,WAAAyB,CAAW,CAAC,CAAC,CAAC,EACjH,OAAOnB,GAASqE,EAAc,MAAOf,EAAQ,CAAE,QAAA5D,EAAS,WAAAyB,CAAW,CAAC,CACxE,CD9VA,GAAM,CAAE,OAAAmD,CAAO,EAAI,IAAIC,GACvB,WAAW,SAAWD,EAAO,SAC7B,WAAW,UAAYA,EAAO",
6
+ "names": ["JSDOM", "transpile", "getLineInfo", "tokTypes", "ancestor", "CellParser", "ohqParseCell", "ohqWalk", "ancestor", "make", "walk_default", "node", "st", "c", "simple", "ModuleParser", "CellParser", "node", "tokTypes", "cell", "splitModule", "input", "ModuleParser", "cell", "parseCell", "input", "ohqParseCell", "walk", "ohqWalk", "toCell", "toNotebook", "parseJavaScript", "serialize", "deserialize", "FunctionConstructors", "funcType", "async", "generator", "createFunction", "refs", "blockStatement", "body", "l", "r", "join", "baseURL", "relativeURL", "isRelativePath", "path", "fixRelativeUrl", "basePath", "obfuscatedImportFunction", "obfuscatedImport", "url", "encodeBacktick", "str", "createParsedOJS", "ojs", "offset", "inlineMD", "cell", "error", "parseCell", "e", "splitOmd", "_", "retVal", "re", "prevOffset", "match", "outer", "inner", "ojs2notebook", "ojs", "cells", "splitModule", "cell", "idx", "ojs2notebookKit", "toCell", "toNotebook", "omd2notebook", "omd", "splitOmd", "omd2notebookKit", "subCell", "fetchEx", "url", "proxyPrefix", "proxyPostfix", "matches", "response", "e", "download", "impUrl", "isShared", "r", "_constructFunction", "body", "bodyStr", "func", "FunctionConstructors", "params", "param", "isBlock", "start", "end", "inner", "constructFunction", "parseJavaScript", "html2notebook", "html", "deserialize", "notebook2html", "notebook", "serialize", "calcRefs", "cellAst", "cellStr", "dedup", "r", "retVal", "pushPatch", "node", "newText", "ancestor", "value", "ancestors", "n", "walk", "parseImportDeclaration", "spec", "inj", "parseViewExpression", "refs", "bodyStr", "id", "createFunction", "G", "_", "parseMutableExpression", "initialValueId", "initialId", "M", "parseVariableExpression", "parseCell", "baseUrl", "fixRelativeUrl", "Writer", "f", "files", "url", "imp", "impInjections", "injections", "inj", "derive", "variable", "id", "idParts", "observable", "inlineFunc", "funcId", "observe", "variableInputs", "inputs", "i", "func", "msg", "importFile", "relativePath", "baseUrl", "path", "fixRelativeUrl", "content", "fetchEx", "r", "notebook", "ojs2notebook", "omd2notebook", "retVal", "compile", "w", "importCompiledNotebook", "partial", "url", "impMod", "runtime", "inspector", "obfuscatedImport", "importNotebook", "e", "createModule", "node", "parsed", "text", "importMode", "otherModule", "isRelativePath", "importVariables", "variables", "spec", "viewof", "createImportVariable", "main", "mod", "v", "createVariable", "inspect", "name", "inputs", "definition", "inline", "i", "module", "md", "id", "alias", "createCell", "options", "modules", "encodeBacktick", "parsedModule", "splitModule", "cell", "parseCell", "imp", "createFile", "file", "toString", "_files", "_cells", "files", "f", "fileAttachments", "cells", "c", "n", "Writer", "compileKit", "compiled", "transpile", "constructFunction", "isNotebookKit", "value", "isOhqNotebook", "notebookOrOjs", "window", "JSDOM"]
7
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hpcc-js/observablehq-compiler",
3
- "version": "3.3.9",
3
+ "version": "3.4.0",
4
4
  "description": "hpcc-js - ObservableHQ Compiler (unoffical)",
5
5
  "type": "module",
6
6
  "main": "./dist/index.umd.cjs",
@@ -25,7 +25,9 @@
25
25
  },
26
26
  "scripts": {
27
27
  "clean": "rimraf --glob lib* types dist *.tsbuildinfo .turbo",
28
- "bundle": "vite build",
28
+ "bundle-node": "node ./esbuild.js",
29
+ "bundle-browser": "vite build",
30
+ "bundle": "run-s bundle-browser bundle-node",
29
31
  "bundle-watch": "vite --port 5514",
30
32
  "gen-types": "tsc --project tsconfig.json",
31
33
  "gen-types-watch": "npm run gen-types -- --watch",
@@ -43,12 +45,16 @@
43
45
  "update-major": "npx --yes npm-check-updates -u"
44
46
  },
45
47
  "dependencies": {
48
+ "jsdom": "26.1.0",
46
49
  "yargs": "17.7.2"
47
50
  },
48
51
  "devDependencies": {
49
- "@hpcc-js/esbuild-plugins": "^1.4.9",
52
+ "@hpcc-js/esbuild-plugins": "^1.5.0",
53
+ "@observablehq/notebook-kit": "1.1.0-rc.17",
50
54
  "@observablehq/parser": "6.1.0",
51
- "@observablehq/runtime": "5.9.9"
55
+ "@observablehq/runtime": "5.9.9",
56
+ "@types/jsdom": "21.1.7",
57
+ "vite-plugin-top-level-await": "^1.6.0"
52
58
  },
53
59
  "repository": {
54
60
  "type": "git",
@@ -69,5 +75,5 @@
69
75
  "url": "https://github.com/hpcc-systems/Visualization/issues"
70
76
  },
71
77
  "homepage": "https://github.com/hpcc-systems/Visualization/tree/trunk/packages/observablehq-compiler",
72
- "gitHead": "92489547b0e57f479a691236b1a47e977b43cf2e"
78
+ "gitHead": "e0dd2c2201ba3d9bd92665026ef38e3220065a9c"
73
79
  }
@@ -1,3 +1,3 @@
1
1
  export const PKG_NAME = "@hpcc-js/observablehq-compiler";
2
- export const PKG_VERSION = "3.2.0";
3
- export const BUILD_VERSION = "3.2.1";
2
+ export const PKG_VERSION = "3.4.0";
3
+ export const BUILD_VERSION = "3.10.0";