UNPKG

systemjs-cjs-extra

Version:

An extra for SystemJS 6 to load CommonJS modules in the browser

1 lines 12.5 kB
{"version":3,"file":"index.min.js","sources":["../src/constants.js","../src/utils.js","../src/index.js"],"sourcesContent":["export const CJS_REQUIRE_REGEX =\n /(?:^\\uFEFF?|[^$_a-zA-Z\\xA0-\\uFFFF.\"'])require\\s*\\(\\s*(\"[^\"\\\\]*(?:\\\\.[^\"\\\\]*)*\"|'[^'\\\\]*(?:\\\\.[^'\\\\]*)*'|`[^`\\\\]*(?:\\\\.[^`\\\\]*)*`)\\s*\\)/g;\nexport const AMD_MODULE_REGEX =\n /(?:^\\uFEFF?|[^$_a-zA-Z\\xA0-\\uFFFF.])define\\s*\\(\\s*(\"[^\"]+\"\\s*,\\s*|'[^']+'\\s*,\\s*)?\\s*(\\[(\\s*((\"[^\"]+\"|'[^']+')\\s*,|\\/\\/.*\\r?\\n|\\/\\*(.|\\s)*?\\*\\/))*(\\s*(\"[^\"]+\"|'[^']+')\\s*,?)?(\\s*(\\/\\/.*\\r?\\n|\\/\\*(.|\\s)*?\\*\\/))*\\s*\\]|function\\s*|{|[_$a-zA-Z\\xA0-\\uFFFF][_$a-zA-Z0-9\\xA0-\\uFFFF]*\\))/;\nexport const CJS_EXPORTS_REGEX =\n /(?:^\\uFEFF?|[^$_a-zA-Z\\xA0-\\uFFFF.])(exports\\s*(\\[['\"]|\\.)|module(\\.exports|\\['exports'\\]|\\[\"exports\"\\])\\s*(\\[['\"]|[=,\\.]))/;\nexport const CJS_FILEDIR_REGEX = /__filename|__dirname]/;\nexport const COMMENT_REGEX = /(^|[^\\\\])(\\/\\*([\\s\\S]*?)\\*\\/|([^:]|^)\\/\\/(.*)$)/mg;\nexport const STRING_REGEX = /(\"[^\"\\\\\\n\\r]*(\\\\.[^\"\\\\\\n\\r]*)*\"|'[^'\\\\\\n\\r]*(\\\\.[^'\\\\\\n\\r]*)*')/g;\nexport const JAVASCRIPT_REGEX = /^[^#?]+\\.js([?#].*)?$/;\nexport const JS_CONTENT_TYPE_REGEX = /^(text|application)\\/(x-)?javascript(;|$)/;\n","import {\n AMD_MODULE_REGEX,\n CJS_EXPORTS_REGEX,\n CJS_FILEDIR_REGEX,\n CJS_REQUIRE_REGEX,\n COMMENT_REGEX,\n STRING_REGEX,\n} from \"./constants\";\n\nexport function isCJSFormat(source) {\n return (\n !AMD_MODULE_REGEX.test(source) &&\n (CJS_REQUIRE_REGEX.test(source) ||\n CJS_EXPORTS_REGEX.test(source) ||\n CJS_FILEDIR_REGEX.test(source))\n );\n}\n\nexport function errMsg(errCode, msg) {\n return (\n (msg || \"\") +\n \" (SystemJS Error#\" +\n errCode +\n \" \" +\n \"https://github.com/systemjs/systemjs/blob/main/docs/errors.md#\" +\n errCode +\n \")\"\n );\n}\n\nexport function getPathVars(url) {\n const filename = url.substring(url.lastIndexOf(\"/\") + 1);\n let dirname = url.split(\"/\");\n dirname.pop();\n dirname = dirname.join(\"/\");\n\n return {\n filename,\n dirname,\n };\n}\n\nexport function extractDepsFromSource(source) {\n CJS_REQUIRE_REGEX.lastIndex =\n COMMENT_REGEX.lastIndex =\n STRING_REGEX.lastIndex =\n 0;\n let depIndentifiers = [];\n let stringLocations = [];\n let commentLocations = [];\n let match;\n\n if (source.length / source.split(\"\\n\").length < 200) {\n while ((match = STRING_REGEX.exec(source))) {\n stringLocations.push([match.index, match.index + match[0].length]);\n }\n\n while ((match = COMMENT_REGEX.exec(source))) {\n // only track comments not starting in strings\n if (!inLocation(stringLocations, match)) {\n commentLocations.push([\n match.index + match[1].length,\n match.index + match[0].length - 1,\n ]);\n }\n }\n }\n\n while ((match = CJS_REQUIRE_REGEX.exec(source))) {\n // ensure we're not within a string or comment location\n if (\n !inLocation(stringLocations, match) &&\n !inLocation(commentLocations, match)\n ) {\n var dep = match[1].substring(1, match[1].length - 1);\n // skip cases like require('\" + file + \"')\n if (dep.match(/\"|'/)) {\n continue;\n }\n depIndentifiers.push(dep);\n }\n }\n\n return depIndentifiers;\n}\n\nfunction inLocation(locations, match) {\n for (var i = 0; i < locations.length; i++) {\n if (locations[i][0] < match.index && locations[i][1] > match.index) {\n return true;\n }\n }\n return false;\n}\n\nexport function template(source) {\n return `(function (module,exports,require,__filename,__dirname, global, GLOBAL) {\n${source}\n}).apply(__cjsWrapper.exports, __cjsWrapper.args)`;\n}\n\nexport function createRequire(loader, parentUrl) {\n return function require(id) {\n const resolvedUrl = loader.resolve(id, parentUrl);\n const module = loader.get(resolvedUrl);\n\n if (!module) {\n throw new Error(\n 'Module not already loaded loading \"' +\n id +\n '\" as ' +\n resolvedUrl +\n (parentUrl ? ' from \"' + parentUrl + '\".' : \".\"),\n );\n }\n\n return \"__useDefault\" in module ? module.default : module;\n };\n}\n","import {\n createRequire,\n extractDepsFromSource,\n getPathVars,\n template,\n isCJSFormat,\n errMsg,\n} from \"./utils\";\n\nimport { JAVASCRIPT_REGEX, JS_CONTENT_TYPE_REGEX } from \"./constants\";\n\nimport global from \"global\";\n\nconst systemJSPrototype = global.System.constructor.prototype;\nconst originalInstantiate = systemJSPrototype.instantiate;\nconst originalShouldFetch =\n systemJSPrototype.shouldFetch.bind(systemJSPrototype);\n\nsystemJSPrototype.shouldFetch = function (url) {\n return originalShouldFetch(url) || JAVASCRIPT_REGEX.test(url);\n};\n\nsystemJSPrototype.instantiate = function (url, parentUrl, meta) {\n const isJavascriptFile = JAVASCRIPT_REGEX.test(url);\n\n if (!this.shouldFetch(url)) {\n return originalInstantiate.call(this, url, parentUrl, meta);\n }\n\n if (isJavascriptFile) {\n return systemJSPrototype\n .fetch(url, {\n credentials: \"same-origin\",\n meta: meta,\n })\n .then((res) => {\n if (!res.ok) {\n throw Error(\n errMsg(\n 7,\n res.status +\n \" \" +\n res.statusText +\n \", loading \" +\n url +\n (parentUrl ? \" from \" + parentUrl : \"\"),\n ),\n );\n }\n const contentType = res.headers.get(\"content-type\");\n\n if (!contentType || !JS_CONTENT_TYPE_REGEX.test(contentType)) {\n throw Error(\n errMsg(\n 4,\n 'Unknown Content-Type \"' +\n contentType +\n '\", loading ' +\n url +\n (parentUrl ? \" from \" + parentUrl : \"\"),\n ),\n );\n }\n\n return res.text().then((source) => {\n if (isCJSFormat(source)) {\n const exports = {};\n const module = { exports };\n const require = createRequire(this, parentUrl ?? url);\n const dependencies = extractDepsFromSource(source);\n\n // Import all dependencies into the SystemJS registry\n const depsPromises = dependencies.map((dep) =>\n global.System.import(dep, parentUrl ?? url),\n );\n\n // Make sure all deps are loaded before attempting to exec the module\n // otherwise \"require\" will fail at System.get\n return Promise.all(depsPromises).then(() => {\n let _src = template(source);\n\n if (_src.indexOf(\"//# sourceURL=\") < 0) {\n _src += \"\\n//# sourceURL=\" + url;\n }\n\n const { filename, dirname } = getPathVars(url);\n global.__cjsWrapper = {\n exports,\n args: [\n module,\n exports,\n require,\n filename,\n dirname,\n global,\n global,\n ],\n };\n // exec the code to capture exports.\n (0, eval)(_src);\n\n global.__cjsWrapper = undefined;\n\n // Create a System.register format and pass the dependencies\n // and module exports.\n systemJSPrototype.register(dependencies, function (_export) {\n return {\n setters: [],\n execute: function () {\n _export(module.exports);\n _export(\"default\", module.exports);\n },\n };\n });\n\n // Return the new module\n return systemJSPrototype.getRegister(url);\n });\n } else {\n // If not a CommonJS module, use default behavior\n if (source.indexOf(\"//# sourceURL=\") < 0) {\n source += \"\\n//# sourceURL=\" + url;\n }\n (0, eval)(source);\n return systemJSPrototype.getRegister(url);\n }\n });\n });\n }\n\n // If not a JS file, use default behavior\n return originalInstantiate.call(this, url, parentUrl, meta);\n};\n"],"names":["CJS_REQUIRE_REGEX","AMD_MODULE_REGEX","CJS_EXPORTS_REGEX","CJS_FILEDIR_REGEX","COMMENT_REGEX","STRING_REGEX","JAVASCRIPT_REGEX","JS_CONTENT_TYPE_REGEX","isCJSFormat","source","errMsg","errCode","msg","getPathVars","url","filename","dirname","extractDepsFromSource","depIndentifiers","stringLocations","commentLocations","match","inLocation","dep","locations","i","template","createRequire","loader","parentUrl","id","resolvedUrl","module","systemJSPrototype","global","originalInstantiate","originalShouldFetch","meta","isJavascriptFile","res","contentType","exports","require","dependencies","depsPromises","_src","_export"],"mappings":"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"}