UNPKG

coffee-ahk

Version:
2 lines (1 loc) 3 kB
"use strict";var e=require("cson"),t=require("fire-keeper"),n=require("iconv-lite"),i=require("./index-C0-GN7ek.js");require("coffeescript"),require("lodash"),require("kleur");const r=new Map,o=[".ahk",".coffee",".json",".yaml"];let s="",a=0;const c=e=>e.split(/\n/u).map((e=>` ${e}`)).join("\n"),d=(e,t)=>{const n=e.split("\n");for(const e of n)if(e.startsWith(t))return!0;return!1},f=async(e,n)=>{const[r,s]=n.includes(" from ")?n.replace("import ","").split(" from ").map((e=>e.trim())):["",n.replace("import ","").trim()],a=await(async(e,n)=>{const i=n.startsWith("."),r=o.some((e=>n.endsWith(e)))?[n]:[`${n}.coffee`,`${n}/index.coffee`];r.filter(((t,n)=>r[n]=i?`${e}/${t}`:`./node_modules/${t}`));const s=await t.glob(r);if(s.length)return s[0];const a=await t.read(`./node_modules/${n}/package.json`);if(!a?.main)throw new Error(`invalid package '${e}'`);const c=await t.glob(`./node_modules/${n}/${a.main}`);if(!c.length)throw new Error(`invalid package '${e}'`);return c[0]})(t.getDirname(e),i.trim(s," /'\""));return[r,a]},u=async(e,t)=>{const n=[];for(const i of t.split("\n")){if(!i.startsWith("import ")){n.push(i);continue}const[t,o]=await f(e,i);r.has(o)||r.set(o,{content:"",dependencies:[],id:t?++a:0});const c=r.get(o)?.id??0;if(!c)continue;const d=t?`${t} = __${s}_module_${c}__`:"";d&&n.push(d)}return n.join("\n")},l=(e=[],t=[])=>([...r].forEach((n=>{const[i,{content:o,dependencies:s}]=n;s.length||(e.push(o),t.push(i),r.delete(i))})),r.size?([...r].forEach((e=>{const[n,{dependencies:i}]=e;r.set(n,{...e[1],dependencies:i.filter((e=>!t.includes(e)))})})),l(e,t)):e),p=async()=>{for(const i of[...r]){const[o,a]=i;if(a.content)continue;const l=await t.read(o);if(!l){r.delete(o);continue}const p=l instanceof Buffer?n.decode(l,"utf8",{addBOM:!0}):"string"==typeof l?l:t.toString(l),h=await(async()=>{if(o.endsWith(".coffee")){const e=[];for(const t of p.split("\n")){if(!t.startsWith("import "))continue;const[,n]=await f(o,t);e.push(n)}return e}return[]})(),w=o.endsWith(".coffee")?await u(o,p):p,$=(()=>{if(o.endsWith(".ahk"))return["```",w,"```"].join("\n");if(o.endsWith(".coffee"))return d(w,"export ")?[`__${s}_module_${a.id}__ = do ->`,c(w)].join("\n"):w;if(o.endsWith(".json")||o.endsWith(".yaml")){const n=e.stringify(t.toJSON(w));return`__${s}_module_${a.id}__ = ${n.includes("\n")?`\n${n}`:n}`}throw new Error(`invalid source '${o}'`)})();r.set(o,{...a,content:$,dependencies:h})}[...r].filter((e=>!e[1].content)).length&&await p()};var h=async(e,n)=>{let i=e;const r=".coffee";i.endsWith(r)||(i+=r);const o=await(async(e,n)=>{s=n;const i=await t.read(e);if(!i)throw new Error(`invalid source '${e}'`);const r=await u(e,i);return await p(),[...l(),r].join("\n")})(i,n);if(!o)throw new Error(`invalid source '${i}'`);return o.replace(/\r/g,"")};var w=async(e,i,r)=>{const{basename:o,dirname:s}=t.getName(e);await t.write(`${s}/${o}.ahk`,n.encode(i.content,"utf8",{addBOM:!0}).toString()),r.ast&&await t.write(`${s}/${o}.ast.json`,i.ast)};exports.read=h,exports.write=w;