diff options
Diffstat (limited to 'config/webpack/loader/to-string-loader.js')
| -rw-r--r-- | config/webpack/loader/to-string-loader.js | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/config/webpack/loader/to-string-loader.js b/config/webpack/loader/to-string-loader.js new file mode 100644 index 0000000..cf26b28 --- /dev/null +++ b/config/webpack/loader/to-string-loader.js @@ -0,0 +1,41 @@ +module.exports = function(source) { + source = source + .replaceAll("\\", "\\\\") + .replaceAll("`","\\`") + .replaceAll("${", "\\${"); + + const replacements = {}; + let i = 0; + while (true) { + i = source.indexOf("$", i) + 1; + + if (i <= 0) { + break; + } + + const end = source.indexOf("$", i); + + if (end < 0) { + break; + } + + const replacementVariable = source.substring(i, end); + replacements[replacementVariable] = 1; + source = source.substring(0, i - 1) + `\${${replacementVariable}}` + source.substring(end + 1); + i = end + 1; + } + + source = `\`${source}\``; + + const replacementList = []; + + for (const replacement in replacements) { + replacementList.push(replacement); + } + + const replacementArguments = replacementList.length > 0 + ? `{ ${replacementList.join(", ")} }` + : ""; + + return `export default (${replacementArguments}) => ${source};`; +}; |
