Kills old TGUI, hardsyncs TGUI to 3.0
This commit is contained in:
@@ -0,0 +1,70 @@
|
||||
/**
|
||||
* @file
|
||||
* 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.
|
||||
*
|
||||
* This plugin saves overall about 10KB on the final bundle size, so it's
|
||||
* sort of worth it.
|
||||
*/
|
||||
|
||||
/**
|
||||
* 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,
|
||||
};
|
||||
Reference in New Issue
Block a user