UNPKG

@mojir/lits

Version:

Lits is a pure functional programming language implemented in TypeScript

3 lines (2 loc) 1.82 kB
import e from"node:fs";import t from"node:path";const n=new Set(["assert","grid","random","vector","linear-algebra","matrix","number-theory","math","functional","string","collection","sequence","bitwise"]),r=/import\(\s*"([^"]+)"\s*\)|import\(\s*'([^']+)'\s*\)/g;function o(o){const i=t.resolve(o),s=t.dirname(i),c=new Map,a=new Map,f=new Map;!function n(o,i){if(i.includes(o)){const e=[...i.slice(i.indexOf(o)),o];throw new Error(`Circular dependency detected: ${e.join(" → ")}`)}if(c.has(o))return;if(!e.existsSync(o))throw new Error(`File not found: ${o}`);const s=e.readFileSync(o,"utf-8");c.set(o,s);const a=new Set;f.set(o,a);const u=t.dirname(o);for(const e of s.matchAll(r)){const r=e[1]??e[2],s=t.resolve(u,r);a.add(s),n(s,[...i,o])}}(i,[]),function(e){const t=new Set;for(const r of c.keys()){if(r===i)continue;let o=l(r,e);for(;n.has(o)||t.has(o);)o=`_${o}`;t.add(o),a.set(r,o)}}(s);const u=function(e){const t=[],n=new Set,r=new Set;return function o(i){if(n.has(i))return;if(r.has(i))throw new Error(`Circular dependency detected during topological sort: ${i}`);r.add(i);const s=f.get(i);if(s)for(const e of s)o(e);r.delete(i),n.add(i),i!==e&&t.push(i)}(e),t}(i).map(e=>{const t=p(c.get(e),e);return[a.get(e),t]});return{program:p(c.get(i),i),fileModules:u};function l(e,n){const r=t.relative(n,e);if(!r.startsWith(".."))return d(r);return d(e.split(t.sep).slice(-2).join("/"))}function d(e){return e.endsWith(".lits")?e.slice(0,-5):e}function p(e,n){const o=t.dirname(n);return e.replace(r,(e,n,r)=>{const i=n??r,s=t.resolve(o,i),c=a.get(s);if(!c)throw new Error(`No canonical name for: ${s}`);return`import(${c})`})}}function i(e){return"object"==typeof e&&null!==e&&"string"==typeof e.program&&Array.isArray(e.fileModules)}export{o as bundle,i as isLitsBundle}; //# sourceMappingURL=bundler.esm.js.map