moduloze
Version:
Convert CommonJS (CJS) modules to UMD and ESM formats
5 lines • 9.65 kB
JavaScript
/*! Moduloze: esm.js
v0.9.1 (c) 2022 Kyle Simpson
MIT License: http://getify.mit-license.org
*/
!function UMD(e,t,r,i){"function"==typeof define&&define.amd?(r=Object.values(r),define(e,r,i)):"undefined"!=typeof module&&module.exports?(r=Object.keys(r).map((e=>require(e))),module.exports=i(...r)):(r=Object.values(r).map((e=>t[e])),t[e]=i(...r))}("ESM","undefined"!=typeof globalThis?globalThis:"undefined"!=typeof global?global:"undefined"!=typeof window?window:"undefined"!=typeof self?self:new Function("return this")(),{path:"NodePath","@babel/types":"BabelTypes","@babel/template":"BabelTemplate","@babel/generator":"BabelGenerator","./helpers.js":"Helpers","./analysis.js":"Analysis"},(function DEF(e,t,r,i,n,a){"use strict";var o=e,s=t,{default:p}=r,{default:l}=i,{expandHomeDir:c,addRelativeCurrentDir:f,generateName:d,rootRelativePath:u,qualifyDepPaths:m,isPathBasedSpecifier:x}=n,{identifyRequiresAndExports:g,analyzeRequires:b,analyzeExports:I}=a;let E={};function build(e,t,r,i){i={...i};var{programAST:n,programPath:a,convertRequires:p,convertExports:m}=g(t,r),b=e.from,I=o.resolve(b,c(t)),E=u(b,I),D=i[E];if(!D){if(!e.ignoreUnknownDependency)throw new Error(`Unknown module: ${t}`);D=d(),i[t]=D,E=t}var y,h={},S=!1,T=new Map,w=new Map;for(let[e,t]of p.entries()){if("substitute-named-import-indirect"==t.esmType||"substitute-default-import-indirect"==t.esmType)continue;T.has(t.context.statement)||T.set(t.context.statement,{reqIdxs:[],reqs:[]});let r=T.get(t.context.statement);r.reqIdxs.push(e),r.reqs.push(t)}for(let[e,t]of m.entries())if(T.has(t.context.statement)){let{reqIdxs:r,reqs:i}=T.get(t.context.statement);for(let e of r)p[e]=!1;m[e]=!1,w.has(t.context.statement)||w.set(t.context.statement,{requires:[...i],exports:[]}),w.get(t.context.statement).exports.push(t)}p=p.filter(Boolean),m=m.filter(Boolean);for(let[t,r]of w.entries()){let n,p=r.requires[0];if(x(p.specifier)){let t=o.resolve(o.dirname(I),c(p.specifier)),r=u(b,t);if(r==E)throw new Error(`Module dependency is an illegal self-reference: ${p.specifier}`);let a=i[r],s=u(o.dirname(I),c(p.specifier));if(!a){if(!e.ignoreUnknownDependency)throw new Error(`Unknown dependency: ${p.specifier}`);a=d(),i[r]=a}h[r]=s,n=f(renameFileExtension(e,s))}else{let t=`:::${p.specifier}`,r=i[t];if(!r){if(!e.ignoreUnknownDependency)throw new Error(`Unknown dependency: ${p.specifier}`);r=d(),i[t]=r}h[t]=t,n=p.specifier}let l=r.exports[0];if("default-import-indirect"!=p.esmType&&"named-import-indirect"!=p.esmType||"named-declaration-export"!=l.esmType&&"destructured-declaration-export"!=l.esmType)if("default-import-indirect"==p.esmType&&"default-export"==l.esmType){registerDefaultExport(l.context.exportsExpression);let r=s.Identifier(p.binding.uniqueTarget);t.replaceWithMultiple([s.ImportDeclaration([e.namespaceImport?s.ImportNamespaceSpecifier(r):s.ImportDefaultSpecifier(r)],s.StringLiteral(n)),s.ExportDefaultDeclaration(r)])}else{if("substitute-module-exports-reference"!=l.esmType)throw new Error("Unsupported: combined import/export form not ESM compatible");if(registerDefaultExport(l.context.exportsExpression),"substitute-default-import-indirect"==p.esmType){let t=s.Identifier(p.binding.uniqueTarget);p.context.statement.insertBefore(s.ImportDeclaration([e.namespaceImport?s.ImportNamespaceSpecifier(t):s.ImportDefaultSpecifier(t)],s.StringLiteral(n))),p.context.requireCall.replaceWith(t)}else if("substitute-named-import-indirect"==p.esmType){let e=s.Identifier(p.binding.uniqueTarget);p.context.statement.insertBefore(s.ImportDeclaration(["default"==p.binding.source?s.ImportDefaultSpecifier(e):s.ImportSpecifier(e,s.Identifier(p.binding.source))],s.StringLiteral(n))),p.context.expression.replaceWith(e)}y||(y=createModuleExports(a,t,m[m.length-1].context.statement)),l.context.exportsExpression.replaceWith(y)}else"default"==l.binding.target&®isterDefaultExport(l.context.exportsExpression),t.replaceWith(s.ExportNamedDeclaration(null,[s.ExportSpecifier(s.Identifier(p.binding.source),s.Identifier(l.binding.target))],s.StringLiteral(n)))}for(let t of p){let r;if(x(t.specifier)){let n=o.resolve(o.dirname(I),c(t.specifier)),a=u(b,n);if(a==E)throw new Error(`Module dependency is an illegal self-reference: ${t.specifier}`);let s=i[a],p=u(o.dirname(I),c(t.specifier));if(!s){if(!e.ignoreUnknownDependency)throw new Error(`Unknown dependency: ${t.specifier}`);s=d(),i[a]=s}h[a]=p,r=f(renameFileExtension(e,p))}else{let n=`:::${t.specifier}`,a=i[n];if(!a){if(!e.ignoreUnknownDependency)throw new Error(`Unknown dependency: ${t.specifier}`);a=d(),i[n]=a}h[n]=n,r=t.specifier}if("bare-import"==t.esmType)t.context.statement.replaceWith(s.ImportDeclaration([],s.StringLiteral(r)));else if("default-import"==t.esmType)t.context.statement.insertBefore(s.ImportDeclaration([e.namespaceImport?s.ImportNamespaceSpecifier(s.Identifier(t.binding.target)):s.ImportDefaultSpecifier(s.Identifier(t.binding.target))],s.StringLiteral(r))),t.context.declarator.remove();else if("named-import"==t.esmType){let e=[];for(let r of Array.isArray(t.binding)?t.binding:[t.binding]){let t=s.Identifier(r.target);e.push("default"==r.source?s.ImportDefaultSpecifier(t):s.ImportSpecifier(t,s.Identifier(r.source)))}t.context.statement.insertBefore(s.ImportDeclaration(e,s.StringLiteral(r))),t.context.declarator.remove()}else if("default-import-indirect"==t.esmType)t.context.statement.replaceWithMultiple([s.ImportDeclaration([e.namespaceImport?s.ImportNamespaceSpecifier(s.Identifier(t.binding.uniqueTarget)):s.ImportDefaultSpecifier(s.Identifier(t.binding.uniqueTarget))],s.StringLiteral(r)),s.ExpressionStatement(s.AssignmentExpression("=",s.Identifier(t.binding.target),s.Identifier(t.binding.uniqueTarget)))]);else if("named-import-indirect"==t.esmType){let e=[],i=[];for(let r of Array.isArray(t.binding)?t.binding:[t.binding]){let t=s.Identifier(r.uniqueTarget);e.push("default"==r.source?s.ImportDefaultSpecifier(t):s.ImportSpecifier(t,s.Identifier(r.source))),i.push(s.ExpressionStatement(s.AssignmentExpression("=",s.Identifier(r.target),t)))}t.context.statement.replaceWithMultiple([s.ImportDeclaration(e,s.StringLiteral(r)),...i])}else if("substitute-default-import-indirect"==t.esmType){let i=s.Identifier(t.binding.uniqueTarget);t.context.statement.insertBefore(s.ImportDeclaration([e.namespaceImport?s.ImportNamespaceSpecifier(i):s.ImportDefaultSpecifier(i)],s.StringLiteral(r))),t.context.requireCall.replaceWith(i)}else if("substitute-named-import-indirect"==t.esmType){let e=s.Identifier(t.binding.uniqueTarget);t.context.statement.insertBefore(s.ImportDeclaration(["default"==t.binding.source?s.ImportDefaultSpecifier(e):s.ImportSpecifier(e,s.Identifier(t.binding.source))],s.StringLiteral(r))),t.context.expression.replaceWith(e)}}for(let e of m)"default-export"==e.esmType?(registerDefaultExport(e.context.exportsExpression),e.context.statement.replaceWith(s.ExportDefaultDeclaration(e.binding.source))):"destructured-declaration-export"==e.esmType?e.context.statement.replaceWith(s.ExportNamedDeclaration(s.VariableDeclaration("let",[s.VariableDeclarator(s.ObjectPattern([s.ObjectProperty(s.Identifier(e.binding.sourceName),s.Identifier(e.binding.target),!1,e.binding.sourceName==e.binding.target)]),e.binding.source)]))):"named-declaration-export"==e.esmType?("default"==e.binding.target&®isterDefaultExport(e.context.exportsExpression),e.context.statement.replaceWithMultiple([s.VariableDeclaration("let",[s.VariableDeclarator(s.Identifier(e.binding.uniqueTarget),e.binding.source)]),"default"==e.binding.target?s.ExportDefaultDeclaration(s.Identifier(e.binding.uniqueTarget)):s.ExportNamedDeclaration(null,[s.ExportSpecifier(s.Identifier(e.binding.uniqueTarget),s.Identifier(e.binding.target))])])):"named-export"==e.esmType?("default"==e.binding.target&®isterDefaultExport(e.context.exportsExpression),e.context.statement.replaceWith("default"==e.binding.target?s.ExportDefaultDeclaration(e.binding.source):s.ExportNamedDeclaration(null,[s.ExportSpecifier(s.Identifier(e.binding.source),s.Identifier(e.binding.target))]))):"substitute-module-exports-reference"==e.esmType&&(registerDefaultExport(e.context.exportsExpression),y||(y=createModuleExports(a,e.context.statement,m[m.length-1].context.statement)),e.context.exportsExpression.replaceWith(y));return n.program.directives.length=0,{...l(n),ast:n,depMap:i,refDeps:h,pathStr:renameFileExtension(e,E),origPathStr:E,name:D};function registerDefaultExport(e){if(S)throw new Error("Multiple default exports not allowed in the same module");S=!0}}function renameFileExtension(e,t){return e[".cjs"]&&(t=t.replace(/\.cjs$/,".js")),e[".mjs"]&&(t=t.replace(/\.c?js$/,".mjs")),t}function createModuleExports(e,t,r){var i=s.Identifier(e.scope.generateUidIdentifier("exp").name);return t.insertBefore(s.VariableDeclaration("let",[s.VariableDeclarator(i,s.ObjectExpression([]))])),r.insertAfter(s.ExportDefaultDeclaration(i)),i}return E=build,E.build=build,E.index=function index(e,t,r){var i=Object.keys(r).find((e=>/\.cjs$/.test(e)))?"cjs":"js",n=`./index.${i}`,a="cjs"==i?"index.js":"index.cjs",o=r[n||a]||"Index",c=Object.entries(r).filter((([e])=>!e.startsWith(":::")&&t.find((t=>t.origPathStr==e))&&![n,a].includes(e)));n=renameFileExtension(e,n);var d=s.File(p.program("")());for(let[t,r]of c){let i,n=r;t.startsWith(":::")?i=t.slice(3):(i=t,i=f(i),i=renameFileExtension(e,i));let a=s.Identifier(n);d.program.body.push(s.ExportNamedDeclaration(null,[e.exportDefaultFrom?s.ExportDefaultSpecifier(a):e.namespaceExport?s.ExportNamespaceSpecifier(a):s.ExportSpecifier(s.Identifier("default"),a)],s.StringLiteral(i)))}return{...l(d),ast:d,depMap:r,refDeps:r,pathStr:n,origPathStr:n,name:o}},E}));