mirror of
https://github.com/SPLURT-Station/S.P.L.U.R.T-Station-13.git
synced 2025-12-10 18:02:57 +00:00
74 lines
1.9 KiB
JavaScript
74 lines
1.9 KiB
JavaScript
/**
|
|
* This plugin saves overall about 10KB on the final bundle size, so it's
|
|
* sort of worth it.
|
|
*
|
|
* We are using a .cjs extension because:
|
|
*
|
|
* 1. Webpack CLI only supports CommonJS modules;
|
|
* 2. tgui-dev-server supports both, but we still need to signal NodeJS
|
|
* to import it as a CommonJS module, hence .cjs extension.
|
|
*
|
|
* We need to copy-paste the whole "multiline" function because we can't
|
|
* synchronously import an ES module from a CommonJS module.
|
|
*
|
|
* @file
|
|
* @copyright 2020 Aleksej Komarov
|
|
* @license MIT
|
|
*/
|
|
|
|
/**
|
|
* Removes excess whitespace and indentation from the string.
|
|
*/
|
|
const multiline = str => {
|
|
const lines = str.split('\n');
|
|
// Determine base indentation
|
|
let minIndent;
|
|
for (let line of lines) {
|
|
for (let indent = 0; indent < line.length; indent++) {
|
|
const char = line[indent];
|
|
if (char !== ' ') {
|
|
if (minIndent === undefined || indent < minIndent) {
|
|
minIndent = indent;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
if (!minIndent) {
|
|
minIndent = 0;
|
|
}
|
|
// Remove this base indentation and trim the resulting string
|
|
// from both ends.
|
|
return lines
|
|
.map(line => line.substr(minIndent).trimRight())
|
|
.join('\n')
|
|
.trim();
|
|
};
|
|
|
|
const StringPlugin = ref => {
|
|
return {
|
|
visitor: {
|
|
TaggedTemplateExpression: path => {
|
|
if (path.node.tag.name === 'multiline') {
|
|
const { quasi } = path.node;
|
|
if (quasi.expressions.length > 0) {
|
|
throw new Error('Multiline tag does not support expressions!');
|
|
}
|
|
if (quasi.quasis.length > 1) {
|
|
throw new Error('Quasis is longer than 1');
|
|
}
|
|
const { value } = quasi.quasis[0];
|
|
value.raw = multiline(value.raw);
|
|
value.cooked = multiline(value.cooked);
|
|
path.replaceWith(quasi);
|
|
}
|
|
},
|
|
},
|
|
};
|
|
};
|
|
|
|
module.exports = {
|
|
__esModule: true,
|
|
default: StringPlugin,
|
|
};
|