@hpcc-js/observablehq-compiler
Version:
hpcc-js - ObservableHQ Compiler (unoffical)
33 lines (27 loc) • 14.7 kB
JavaScript
;var N=Object.defineProperty;var ie=Object.getOwnPropertyDescriptor;var se=Object.getOwnPropertyNames;var ae=Object.prototype.hasOwnProperty;var ce=(e,t)=>{for(var r in t)N(e,r,{get:t[r],enumerable:!0})},le=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of se(t))!ae.call(e,o)&&o!==r&&N(e,o,{get:()=>t[o],enumerable:!(n=ie(t,o))||n.enumerable});return e};var ue=e=>le(N({},"__esModule",{value:!0}),e);var Ne={};ce(Ne,{FunctionConstructors:()=>d,Writer:()=>v,compile:()=>D,compileCell:()=>U,compileNotebook:()=>q,constructFunction:()=>P,createFunction:()=>w,download:()=>Z,fixRelativeUrl:()=>m,html2notebook:()=>me,isNotebookKit:()=>ee,isOhqNotebook:()=>$e,isRelativePath:()=>E,notebook:()=>Y,notebook2html:()=>ye,obfuscatedImport:()=>R,ojs2notebook:()=>F,ojs2notebookKit:()=>K,omd2notebook:()=>$,omd2notebookKit:()=>H,resetCellIDs:()=>be,toCell:()=>p.toCell,toNotebook:()=>p.toNotebook});module.exports=ue(Ne);var te=require("jsdom");var O=require("@observablehq/notebook-kit");var p=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 pe(e=!1,t=!1){return!e&&!t?d.regular:e&&!t?d.async:!e&&t?d.generator:d.asyncGenerator}function w(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(pe(t,r))(...e.args,n?o.substring(1,o.length-1).trim():`return (
${o}
);`)}function fe(e,t){return t?e.replace(/\/+$/,"")+"/"+t.replace(/^\/+/,""):e}var E=e=>e[0]===".",m=(e,t)=>E(e)?fe(t,e):e,de=new d.async("url","return import(url)");async function R(e){return de(e)}function T(e,t,r){if(e.type!=="FunctionExpression"&&e.type!=="FunctionDeclaration"&&e.type!=="ArrowFunctionExpression")throw new Error(`Unsupported function type: ${e.type}`);let n=e.async&&e.generator?d.asyncGenerator:e.async?d.async:e.generator?d.generator:d.regular,o=e.params?.map(u=>t.slice(u.start,u.end)).join(", ")??"",i=e.body.type==="BlockStatement",{start:s,end:c}=e.body,a=i?t.slice(s+1,c-1):`return ${t.slice(s,c)}`;if(r){let f=(oe=>{let k=oe.replace(/[^A-Za-z0-9_$]/g,"_");return/^[A-Za-z_$]/.test(k)||(k="_"+k),k})(r),b=e.async?"async ":"",x=e.generator?"*":"",ne=`return ${b}function${x} ${f}(${o}) {
${a}
}`,_=new Function(ne)();try{_.displayName=r}catch{}return _}return n(o,a)}function P(e,t){let{body:r}=(0,p.parseJavaScript)(e);if(r.type==="Program"){if(r.body.length!==1)throw new Error(`Expected a single function, but found ${r.body.length} statements`);return T(r.body[0],e,t)}return T(r,e,t)}var me=e=>(0,p.deserialize)(e),ye=e=>(0,p.serialize)(e);function U(e,{inline:t=!0,resolveLocalImports:r=!1,includePinned:n=!0}={}){let o=[];try{let s=(0,O.transpile)(e,{resolveLocalImports:r});if(o.push({id:e.id,...s,body:t?P(s.body,`cell_${e.id}`):s.body}),n&&e.pinned){let c=(0,O.transpile)({...e,mode:"md",value:`\`\`\`${e.mode}
${e.value}
\`\`\``});o.push({id:1e6+e.id,...c,body:t?P(c.body,`cell_${1e6+e.id}`):c.body})}}catch(s){console.error(`Error compiling cell ${e.id}:`,s)}return o}function q(e,{inline:t=!0,resolveLocalImports:r=!1,includePinned:n=!0}={}){let o=[];for(let i of e.cells){let s=U(i,{inline:t,resolveLocalImports:r,includePinned:n});o.push(...s)}return o}function be(e,t=0,r=1){for(let n of e.cells)n.id=t,t+=r;return e}var A=require("@observablehq/stdlib");var S=require("acorn"),j=require("acorn-walk"),g=require("@observablehq/parser");var ge=require("acorn-walk");var G=require("acorn-walk"),L=(0,G.make)({Import(){},ViewExpression(e,t,r){r(e.id,t,"Identifier")},MutableExpression(e,t,r){r(e.id,t,"Identifier")}});var he=require("acorn-walk");var M=class extends g.CellParser{parseTopLevel(t){for(t.cells||(t.cells=[]);this.type!==S.tokTypes.eof;){let r=this.parseCell(this.startNode());r.input=this.input,t.cells.push(r)}return this.next(),this.finishNode(t,"Program")}};function h(e){return M.parse(e,{ecmaVersion:"latest"}).cells.map(t=>({type:"Cell",text:e.substring(t.start,t.end),start:t.start,end:t.end}))}function V(e){return(0,g.parseCell)(e)}var J=g.walk;function xe(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&&(0,j.ancestor)(e.body,{Identifier(i){let s=t.substring(i.start,i.end);r[s]},MutableExpression(i){let c=t.substring(i.start,i.end).split(" ").join("_")+".value";o(i,c)},ViewExpression(i){let c=t.substring(i.start,i.end).split(" ").join("_");o(i,c)},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())")}},J),n}function we(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 ve(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:w(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 Fe(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:w(r,t.async,t.generator,t.body.type==="BlockStatement",n)},variable:{type:"variable",id:o,inputs:["Mutable",s],func:(c,a)=>new c(a)},variableValue:{type:"variable",id:i,inputs:[o],func:c=>c.generator}}}function Ce(e,t,r,n){return{type:"variable",id:t.id&&e.substring(t.id?.start,t.id?.end),inputs:r.inputs,func:w(r,t.async,t.generator,t.body.type==="BlockStatement",n)}}function W(e,t){let r=V(e),n=r.body&&e.substring(r.body.start,r.body.end);switch(r.body?.type){case"ImportDeclaration":return we(r);case"ImportExpression":r.body.source.type==="Literal"?n=`import("${m(""+r.body.source.value,t)}")`:console.error("Unexpected import value")}let o=xe(r,e);switch(r.id?.type){case"ViewExpression":return ve(e,r,o,n);case"MutableExpression":return Fe(e,r,o,n);default:return Ce(e,r,o,n)}}var v=class{_files=[];_imports=[];_functions=[];_defines=[];_defineUid=0;_functionUid=0;constructor(){}toString(){return`${this._imports.join(`
`)}
${this._functions.join(`
`).split(`
) {`).join("){")}
export default function define(runtime, observer) {
const main = runtime.module();
function toString() { return this.url; }
const fileAttachments = new Map([
${this._files.map(t=>`["${t.name}", { url: new URL("${t.url}"), mimeType: ${JSON.stringify(t.mime_type)}, toString }]`).join(`,
`)}
]);
main.builtin("FileAttachment", runtime.fileAttachments(name => fileAttachments.get(name)));
${this._defines.join(`
`)}
return main;
}
`}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)}, `:"",c=t.inputs??[],a=c.length?`[${c.map(u=>JSON.stringify(u)).join(", ")}], `:"",l=n?t.func?.toString():o;this._defines.push(`main${i}.define(${s}${a}${l});`)}error(t){}};function B(e){return e.split("`").join("\\`")}function I(e,t,r){let n,o;try{n=V(e)}catch(i){o=i}return{ojs:e,offset:t,inlineMD:r,cell:n,error:o}}function z(e){let t=[],r=/(```(?:\s|\S)[\s\S]*?```)/g,n=0,o=r.exec(e);for(;o!==null;){o.index>n&&t.push(I(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 c=i.substring(3,i.length-3);t.push(I(c,o.index+3,!1))}else t.push(I(i,o.index,!0));n=o.index+o[0].length,o=r.exec(e)}return e.length>n&&t.push(I(e.substring(n,e.length),n,!0)),t}function F(e){let t=h(e);return{files:[],nodes:t.map((r,n)=>({id:n,mode:"js",value:r.text,start:r.start,end:r.end}))}}function K(e){let t=h(e).map((r,n)=>(0,p.toCell)({id:n,mode:"ojs",value:r.text}));return(0,p.toNotebook)({cells:t})}function $(e){let t=z(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 H(e){let t=[];return z(e).forEach(r=>{r.inlineMD?t.push((0,p.toCell)({id:t.length+1,mode:"md",value:r.ojs})):h(r.ojs).forEach(n=>{t.push((0,p.toCell)({id:t.length+1,mode:"ojs",value:n.text}))})}),(0,p.toNotebook)({cells:t})}function C(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 Z(e,t,r){let n=e.indexOf("https://observablehq.com/d")===0;return C(e.replace(`https://observablehq.com/${n?"d/":""}`,"https://api.observablehq.com/document/"),t,r).then(o=>o.json())}async function ke(e,t){let r=m(e,t),n=await C(r).then(s=>s.text()),o;e.endsWith(".ojsnb")?o=JSON.parse(n):e.endsWith(".ojs")?o=F(n):e.endsWith(".omd")?o=$(n):(console.warn(`Unknown file type: ${e}, assuming .ojsnb`),o=JSON.parse(n));let i=D(o,{baseUrl:t});return i.delete=()=>{},i.write=s=>{s.import(r)},i}async function Ee(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 Pe(e){let t=`https://api.observablehq.com/document/${e}`,r=C(t).then(o=>o.json()).catch(o=>{console.error(t),console.error(o)}),n=D(await r);return n.delete=()=>{},n.write=o=>{o.import(t)},n}async function Ve(e,t,r,{baseUrl:n,importMode:o}){let i=E(t.src)?await ke(t.src,n??""):o==="recursive"?await Pe(t.src):await Ee(t.src),s=[],c=[];t.specifiers.forEach(l=>{let u=l.view?"viewof ":"";s.push(Q(u+l.name,u+l.alias)),l.view&&s.push(Q(l.name,l.alias))});let a=(l,u,f)=>{let b=l.module(i);return t.injections.length&&(b=b.derive(t.injections,u)),c.forEach(x=>x(u,f)),s.forEach(x=>x(u,b)),b};return a.importVariables=s,a.variables=c,a.delete=()=>{s.forEach(l=>l.delete()),c.forEach(l=>l.delete()),i.delete()},a.write=l=>{i.write(l),l.importDefine(t)},a}function y(e,t,r,n,o,i=!1){let s,c,a=(l,u)=>{if(t&&u&&(s=u(r,e.id)),c=l.variable(s),arguments.length>1)try{c.define(r,n,o)}catch(f){console.error(f?.message)}if(e.pinned){c=u?l.variable(u(r,e.id)):l.variable();try{c.define(void 0,["md"],f=>f`\`\`\`js
${e.value}
\`\`\``)}catch(f){console.error(f?.message)}}return c};return a.delete=()=>{try{s?._node?.remove()}catch{}s=void 0;try{c?.delete()}catch{}c=void 0},a.write=l=>{if(i)l.define({id:r,inputs:n,func:o},t,!0);else{let u=l.function({id:r,func:o});l.define({id:r,inputs:n,func:o},t,!1,u)}},a}function Q(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 X(e,t){let r=[],n=[];try{let i=e.mode&&e.mode!=="js"?`${e.mode}\`${B(e.value)}\``:e.value,s=h(i);for(let c of s){let a=W(c.text,t.baseUrl??"");switch(a.type){case"import":r.push(await Ve(e,a,c.text,t));break;case"viewof":n.push(y(e,!0,a.variable.id,a.variable.inputs,a.variable.func)),n.push(y(e,!1,a.variableValue.id,a.variableValue.inputs,a.variableValue.func,!0));break;case"mutable":n.push(y(e,!1,a.initial.id,a.initial.inputs,a.initial.func)),n.push(y(e,!1,a.variable.id,a.variable.inputs,a.variable.func)),n.push(y(e,!0,a.variableValue.id,a.variableValue.inputs,a.variableValue.func,!0));break;case"variable":n.push(y(e,!0,a.id,a.inputs,a.func));break}}}catch(i){n.push(y(e,!0,void 0,[],i.message??"Unkown error"))}let o=(i,s,c)=>{r.forEach(a=>a(i,s,c)),n.forEach(a=>a(s,c))};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 Ie(e,t){function r(){return globalThis.url??""}return[e.name,{url:new URL(m(e.url,t.baseUrl??"")),mimeType:e.mime_type,toString:r}]}function Y(e=[],t=[],{baseUrl:r=".",importMode:n="precompiled"}={}){let o=e.map(a=>Ie(a,{baseUrl:r,importMode:n})),i=new Map(o),s=new Map(t.map(a=>[a.id,a])),c=(a,l)=>{a.fileAttachments||(a.fileAttachments=A.FileAttachments);let u=a.module();return u.builtin("FileAttachment",(0,A.FileAttachments)(f=>i.get(f)??{url:new URL(m(f,r)),mimeType:null})),u.builtin("fetchEx",C),s.forEach(f=>{f(a,u,l)}),u};return c.fileAttachments=i,c.cells=s,c.set=async a=>{let l=await X(a,{baseUrl:r,importMode:n});return c.delete(l.id),s.set(l.id,l),l},c.get=a=>s.get(a),c.delete=a=>{let l=s.get(a);return l?(l.delete(),s.delete(a)):!1},c.clear=()=>{s.forEach(a=>a.delete()),s.clear()},c.write=a=>{a.files(e),s.forEach(l=>l.write(a))},c.toString=(a=new v)=>(c.write(a),a.toString().trim()),c}function ee(e){return!!e&&Array.isArray(e.cells)}function $e(e){return!!e&&Array.isArray(e.nodes)}async function D(e,{baseUrl:t=".",importMode:r="precompiled"}={}){if(ee(e))return q(e);typeof e=="string"&&(e=F(e));let n=await Promise.all(e.nodes.map(o=>X(o,{baseUrl:t,importMode:r})));return Y(e.files,n,{baseUrl:t,importMode:r})}var{window:re}=new te.JSDOM;globalThis.document=re.document;globalThis.DOMParser=re.DOMParser;0&&(module.exports={FunctionConstructors,Writer,compile,compileCell,compileNotebook,constructFunction,createFunction,download,fixRelativeUrl,html2notebook,isNotebookKit,isOhqNotebook,isRelativePath,notebook,notebook2html,obfuscatedImport,ojs2notebook,ojs2notebookKit,omd2notebook,omd2notebookKit,resetCellIDs,toCell,toNotebook});
//# sourceMappingURL=index.cjs.map