@nlabs/lex 1.59.4 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.storybook/main.ts +3 -47
- package/README.md +13 -19
- package/__mocks__/build.js +3 -3
- package/config.json +3 -1
- package/examples/lex.config.js +3 -7
- package/lib/LexConfig.d.ts +2 -6
- package/lib/LexConfig.js +2 -2
- package/lib/commands/ai/ai.js +3 -3
- package/lib/commands/build/build.d.ts +5 -3
- package/lib/commands/build/build.js +66 -156
- package/lib/commands/config/config.js +9 -7
- package/lib/commands/dev/dev.d.ts +0 -2
- package/lib/commands/dev/dev.js +24 -115
- package/lib/commands/init/init.js +4 -9
- package/lib/commands/migrate/migrate.js +2 -2
- package/lib/commands/serverless-dev/serverless-dev.js +2 -2
- package/lib/commands/versions/versions.d.ts +1 -1
- package/lib/commands/versions/versions.js +4 -4
- package/lib/lex.js +10 -11
- package/lib/types.d.ts +1 -1
- package/lib/types.js +1 -1
- package/lib/utils/app.d.ts +0 -2
- package/lib/utils/app.js +2 -29
- package/lib/utils/{webpack/LexSvgSpritemapPlugin.d.ts → assets/LexSvgSpritemap.d.ts} +6 -8
- package/lib/utils/assets/LexSvgSpritemap.js +219 -0
- package/lib/utils/file.d.ts +0 -4
- package/lib/utils/file.js +4 -100
- package/lib/utils/staticSite.d.ts +15 -0
- package/lib/utils/staticSite.js +80 -0
- package/lib/utils/vite/assets.d.ts +19 -0
- package/lib/utils/vite/assets.js +249 -0
- package/lib/utils/vite/config.d.ts +12 -0
- package/lib/utils/vite/config.js +279 -0
- package/package.json +27 -45
- package/postcss.config.js +1 -2
- package/tsconfig.lint.json +0 -1
- package/tsconfig.test.json +0 -1
- package/lib/utils/webpack/LexSvgSpritemapPlugin.js +0 -255
- package/scripts/test-webpack.js +0 -453
- package/webpack.config.d.ts +0 -2
- package/webpack.config.js +0 -960
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
function _define_property(obj, key, value) {
|
|
2
|
+
if (key in obj) {
|
|
3
|
+
Object.defineProperty(obj, key, {
|
|
4
|
+
value: value,
|
|
5
|
+
enumerable: true,
|
|
6
|
+
configurable: true,
|
|
7
|
+
writable: true
|
|
8
|
+
});
|
|
9
|
+
} else obj[key] = value;
|
|
10
|
+
return obj;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Copyright (c) 2018-Present, Nitrogen Labs, Inc.
|
|
14
|
+
* Copyrights licensed under the MIT License. See the accompanying LICENSE file for terms.
|
|
15
|
+
*/ import { readFileSync } from 'fs';
|
|
16
|
+
import { sync as globSync } from 'glob';
|
|
17
|
+
import { basename as pathBasename, extname as pathExtname, resolve as pathResolve } from 'path';
|
|
18
|
+
import { optimize } from 'svgo';
|
|
19
|
+
const DEFAULT_FILENAME = 'icons/icons.svg';
|
|
20
|
+
const ROOT_EXCLUDED_ATTRIBUTES = new Set([
|
|
21
|
+
'height',
|
|
22
|
+
'id',
|
|
23
|
+
'version',
|
|
24
|
+
'viewBox',
|
|
25
|
+
'width',
|
|
26
|
+
'xmlns'
|
|
27
|
+
]);
|
|
28
|
+
const escapeAttribute = (value)=>{
|
|
29
|
+
return value.replaceAll('&', '&').replaceAll('"', '"').replaceAll('<', '<').replaceAll('>', '>');
|
|
30
|
+
};
|
|
31
|
+
const normalizeAssetFilename = (filename)=>{
|
|
32
|
+
return filename.replace(/^[./]+/, '');
|
|
33
|
+
};
|
|
34
|
+
const parseAttributes = (input)=>{
|
|
35
|
+
const attributes = {};
|
|
36
|
+
const attributeRegex = /([:@\w-]+)\s*=\s*("([^"]*)"|'([^']*)')/g;
|
|
37
|
+
let match = attributeRegex.exec(input);
|
|
38
|
+
while(match){
|
|
39
|
+
attributes[match[1]] = match[3] ?? match[4] ?? '';
|
|
40
|
+
match = attributeRegex.exec(input);
|
|
41
|
+
}
|
|
42
|
+
return attributes;
|
|
43
|
+
};
|
|
44
|
+
const parseSvg = (source)=>{
|
|
45
|
+
const svgMatch = source.replace(/<\?xml[\s\S]*?\?>/ig, '').replace(/<!doctype[\s\S]*?>/ig, '').match(/<svg\b([^>]*)>([\s\S]*?)<\/svg>/i);
|
|
46
|
+
if (!svgMatch) {
|
|
47
|
+
return null;
|
|
48
|
+
}
|
|
49
|
+
return {
|
|
50
|
+
attributes: parseAttributes(svgMatch[1] || ''),
|
|
51
|
+
content: svgMatch[2]?.trim() || ''
|
|
52
|
+
};
|
|
53
|
+
};
|
|
54
|
+
const buildAttributeString = (attributes)=>{
|
|
55
|
+
return Object.entries(attributes).map(([name, value])=>`${name}="${escapeAttribute(value)}"`).join(' ');
|
|
56
|
+
};
|
|
57
|
+
const sanitizeIdentifier = (value)=>{
|
|
58
|
+
const sanitizedValue = value.trim().replaceAll(/\s+/g, '-').replaceAll(/[^A-Za-z0-9_-]/g, '-').replaceAll(/-{2,}/g, '-').replaceAll(/^[-_]+|[-_]+$/g, '');
|
|
59
|
+
const safeValue = sanitizedValue || 'icon';
|
|
60
|
+
return /^[A-Za-z_]/.test(safeValue) ? safeValue : `icon-${safeValue}`;
|
|
61
|
+
};
|
|
62
|
+
const getPrefix = (filePath, prefix)=>{
|
|
63
|
+
if (prefix === false) {
|
|
64
|
+
return '';
|
|
65
|
+
}
|
|
66
|
+
if (typeof prefix === 'function') {
|
|
67
|
+
return prefix(filePath);
|
|
68
|
+
}
|
|
69
|
+
return prefix || '';
|
|
70
|
+
};
|
|
71
|
+
const optimizeSvg = (content, enabled)=>{
|
|
72
|
+
if (!enabled) {
|
|
73
|
+
return content;
|
|
74
|
+
}
|
|
75
|
+
return optimize(content, {
|
|
76
|
+
multipass: true,
|
|
77
|
+
plugins: [
|
|
78
|
+
{
|
|
79
|
+
name: 'preset-default',
|
|
80
|
+
params: {
|
|
81
|
+
overrides: {
|
|
82
|
+
cleanupIds: false,
|
|
83
|
+
removeHiddenElems: false
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
]
|
|
88
|
+
}).data;
|
|
89
|
+
};
|
|
90
|
+
const createSpriteSymbol = (filePath, usedIdentifiers, prefix, warnings)=>{
|
|
91
|
+
const source = readFileSync(filePath, 'utf8');
|
|
92
|
+
const parsedSvg = parseSvg(source);
|
|
93
|
+
if (!parsedSvg) {
|
|
94
|
+
warnings.push(new Error(`Invalid SVG icon: ${filePath}`));
|
|
95
|
+
return null;
|
|
96
|
+
}
|
|
97
|
+
if (!parsedSvg.content) {
|
|
98
|
+
warnings.push(new Error(`SVG icon is empty: ${filePath}`));
|
|
99
|
+
return null;
|
|
100
|
+
}
|
|
101
|
+
const rawIdentifier = `${getPrefix(filePath, prefix)}${pathBasename(filePath, pathExtname(filePath))}`;
|
|
102
|
+
const baseIdentifier = sanitizeIdentifier(rawIdentifier);
|
|
103
|
+
let identifier = baseIdentifier;
|
|
104
|
+
let duplicateIndex = 1;
|
|
105
|
+
while(usedIdentifiers.has(identifier)){
|
|
106
|
+
duplicateIndex += 1;
|
|
107
|
+
identifier = `${baseIdentifier}-${duplicateIndex}`;
|
|
108
|
+
}
|
|
109
|
+
if (identifier !== baseIdentifier) {
|
|
110
|
+
warnings.push(new Error(`Duplicate SVG icon id "${baseIdentifier}" detected, using "${identifier}" for ${filePath}`));
|
|
111
|
+
}
|
|
112
|
+
usedIdentifiers.add(identifier);
|
|
113
|
+
const namespaceAttributes = Object.entries(parsedSvg.attributes).reduce((result, [name, value])=>{
|
|
114
|
+
if (name.toLowerCase().startsWith('xmlns:')) {
|
|
115
|
+
result[name] = value;
|
|
116
|
+
}
|
|
117
|
+
return result;
|
|
118
|
+
}, {});
|
|
119
|
+
const symbolAttributes = Object.entries(parsedSvg.attributes).reduce((result, [name, value])=>{
|
|
120
|
+
if (ROOT_EXCLUDED_ATTRIBUTES.has(name)) {
|
|
121
|
+
return result;
|
|
122
|
+
}
|
|
123
|
+
if (name.toLowerCase().startsWith('xmlns:')) {
|
|
124
|
+
return result;
|
|
125
|
+
}
|
|
126
|
+
result[name] = value;
|
|
127
|
+
return result;
|
|
128
|
+
}, {
|
|
129
|
+
id: identifier
|
|
130
|
+
});
|
|
131
|
+
if (parsedSvg.attributes.viewBox) {
|
|
132
|
+
symbolAttributes.viewBox = parsedSvg.attributes.viewBox;
|
|
133
|
+
} else {
|
|
134
|
+
const width = Number.parseFloat(parsedSvg.attributes.width || '');
|
|
135
|
+
const height = Number.parseFloat(parsedSvg.attributes.height || '');
|
|
136
|
+
if (Number.isFinite(width) && Number.isFinite(height)) {
|
|
137
|
+
symbolAttributes.viewBox = `0 0 ${width} ${height}`;
|
|
138
|
+
} else {
|
|
139
|
+
warnings.push(new Error(`SVG icon is missing a viewBox and readable width/height: ${filePath}`));
|
|
140
|
+
return null;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
return {
|
|
144
|
+
filePath,
|
|
145
|
+
namespaceAttributes,
|
|
146
|
+
symbol: `<symbol ${buildAttributeString(symbolAttributes)}>${parsedSvg.content}</symbol>`
|
|
147
|
+
};
|
|
148
|
+
};
|
|
149
|
+
const collectFiles = (patterns, allowDuplicates)=>{
|
|
150
|
+
const files = patterns.flatMap((pattern)=>{
|
|
151
|
+
return globSync(pattern, {
|
|
152
|
+
absolute: true,
|
|
153
|
+
dot: false,
|
|
154
|
+
nodir: true
|
|
155
|
+
});
|
|
156
|
+
}).map((filePath)=>pathResolve(filePath));
|
|
157
|
+
if (allowDuplicates) {
|
|
158
|
+
return files;
|
|
159
|
+
}
|
|
160
|
+
return [
|
|
161
|
+
...new Set(files)
|
|
162
|
+
];
|
|
163
|
+
};
|
|
164
|
+
export class LexSvgSpritemap {
|
|
165
|
+
buildSpritemap() {
|
|
166
|
+
const warnings = [];
|
|
167
|
+
const filePaths = collectFiles(this.patterns, this.options.allowDuplicates);
|
|
168
|
+
if (filePaths.length === 0) {
|
|
169
|
+
return {
|
|
170
|
+
content: null,
|
|
171
|
+
filePaths,
|
|
172
|
+
warnings
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
const namespaceAttributes = {};
|
|
176
|
+
const usedIdentifiers = new Set();
|
|
177
|
+
const symbols = filePaths.map((filePath)=>{
|
|
178
|
+
return createSpriteSymbol(filePath, usedIdentifiers, this.options.prefix, warnings);
|
|
179
|
+
}).filter((entry)=>entry !== null);
|
|
180
|
+
if (symbols.length === 0) {
|
|
181
|
+
return {
|
|
182
|
+
content: null,
|
|
183
|
+
filePaths,
|
|
184
|
+
warnings
|
|
185
|
+
};
|
|
186
|
+
}
|
|
187
|
+
for (const symbol of symbols){
|
|
188
|
+
for (const [name, value] of Object.entries(symbol.namespaceAttributes)){
|
|
189
|
+
namespaceAttributes[name] = value;
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
const rootAttributes = buildAttributeString({
|
|
193
|
+
xmlns: 'http://www.w3.org/2000/svg',
|
|
194
|
+
...namespaceAttributes
|
|
195
|
+
});
|
|
196
|
+
const spriteContent = `<svg ${rootAttributes}>${symbols.map((symbol)=>symbol.symbol).join('')}</svg>`;
|
|
197
|
+
return {
|
|
198
|
+
content: optimizeSvg(spriteContent, this.options.optimize),
|
|
199
|
+
filePaths,
|
|
200
|
+
warnings
|
|
201
|
+
};
|
|
202
|
+
}
|
|
203
|
+
constructor(patterns, options = {}){
|
|
204
|
+
_define_property(this, "patterns", void 0);
|
|
205
|
+
_define_property(this, "options", void 0);
|
|
206
|
+
this.patterns = Array.isArray(patterns) ? patterns : [
|
|
207
|
+
patterns
|
|
208
|
+
];
|
|
209
|
+
this.options = {
|
|
210
|
+
allowDuplicates: options.allowDuplicates ?? false,
|
|
211
|
+
filename: normalizeAssetFilename(options.filename || DEFAULT_FILENAME),
|
|
212
|
+
optimize: options.optimize ?? true,
|
|
213
|
+
prefix: options.prefix ?? false
|
|
214
|
+
};
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
export default LexSvgSpritemap;
|
|
218
|
+
|
|
219
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy91dGlscy9hc3NldHMvTGV4U3ZnU3ByaXRlbWFwLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDE4LVByZXNlbnQsIE5pdHJvZ2VuIExhYnMsIEluYy5cbiAqIENvcHlyaWdodHMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLiBTZWUgdGhlIGFjY29tcGFueWluZyBMSUNFTlNFIGZpbGUgZm9yIHRlcm1zLlxuICovXG5pbXBvcnQge3JlYWRGaWxlU3luY30gZnJvbSAnZnMnO1xuaW1wb3J0IHtzeW5jIGFzIGdsb2JTeW5jfSBmcm9tICdnbG9iJztcbmltcG9ydCB7YmFzZW5hbWUgYXMgcGF0aEJhc2VuYW1lLCBleHRuYW1lIGFzIHBhdGhFeHRuYW1lLCByZXNvbHZlIGFzIHBhdGhSZXNvbHZlfSBmcm9tICdwYXRoJztcbmltcG9ydCB7b3B0aW1pemV9IGZyb20gJ3N2Z28nO1xuXG50eXBlIElkZW50aWZpZXJQcmVmaXggPSBmYWxzZSB8IHN0cmluZyB8ICgoZmlsZVBhdGg6IHN0cmluZykgPT4gc3RyaW5nKTtcblxuZXhwb3J0IGludGVyZmFjZSBMZXhTdmdTcHJpdGVtYXBPcHRpb25zIHtcbiAgcmVhZG9ubHkgYWxsb3dEdXBsaWNhdGVzPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgZmlsZW5hbWU/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IG9wdGltaXplPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgcHJlZml4PzogSWRlbnRpZmllclByZWZpeDtcbn1cblxuaW50ZXJmYWNlIFBhcnNlZFN2ZyB7XG4gIHJlYWRvbmx5IGF0dHJpYnV0ZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIHJlYWRvbmx5IGNvbnRlbnQ6IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIFNwcml0ZVN5bWJvbCB7XG4gIHJlYWRvbmx5IGZpbGVQYXRoOiBzdHJpbmc7XG4gIHJlYWRvbmx5IG5hbWVzcGFjZUF0dHJpYnV0ZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIHJlYWRvbmx5IHN5bWJvbDogc3RyaW5nO1xufVxuXG5jb25zdCBERUZBVUxUX0ZJTEVOQU1FID0gJ2ljb25zL2ljb25zLnN2Zyc7XG5jb25zdCBST09UX0VYQ0xVREVEX0FUVFJJQlVURVMgPSBuZXcgU2V0KFtcbiAgJ2hlaWdodCcsXG4gICdpZCcsXG4gICd2ZXJzaW9uJyxcbiAgJ3ZpZXdCb3gnLFxuICAnd2lkdGgnLFxuICAneG1sbnMnXG5dKTtcblxuY29uc3QgZXNjYXBlQXR0cmlidXRlID0gKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICByZXR1cm4gdmFsdWVcbiAgICAucmVwbGFjZUFsbCgnJicsICcmYW1wOycpXG4gICAgLnJlcGxhY2VBbGwoJ1wiJywgJyZxdW90OycpXG4gICAgLnJlcGxhY2VBbGwoJzwnLCAnJmx0OycpXG4gICAgLnJlcGxhY2VBbGwoJz4nLCAnJmd0OycpO1xufTtcblxuY29uc3Qgbm9ybWFsaXplQXNzZXRGaWxlbmFtZSA9IChmaWxlbmFtZTogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgcmV0dXJuIGZpbGVuYW1lLnJlcGxhY2UoL15bLi9dKy8sICcnKTtcbn07XG5cbmNvbnN0IHBhcnNlQXR0cmlidXRlcyA9IChpbnB1dDogc3RyaW5nKTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9PiB7XG4gIGNvbnN0IGF0dHJpYnV0ZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcbiAgY29uc3QgYXR0cmlidXRlUmVnZXggPSAvKFs6QFxcdy1dKylcXHMqPVxccyooXCIoW15cIl0qKVwifCcoW14nXSopJykvZztcblxuICBsZXQgbWF0Y2g6IFJlZ0V4cEV4ZWNBcnJheSB8IG51bGwgPSBhdHRyaWJ1dGVSZWdleC5leGVjKGlucHV0KTtcbiAgd2hpbGUobWF0Y2gpIHtcbiAgICBhdHRyaWJ1dGVzW21hdGNoWzFdXSA9IG1hdGNoWzNdID8/IG1hdGNoWzRdID8/ICcnO1xuICAgIG1hdGNoID0gYXR0cmlidXRlUmVnZXguZXhlYyhpbnB1dCk7XG4gIH1cblxuICByZXR1cm4gYXR0cmlidXRlcztcbn07XG5cbmNvbnN0IHBhcnNlU3ZnID0gKHNvdXJjZTogc3RyaW5nKTogUGFyc2VkU3ZnIHwgbnVsbCA9PiB7XG4gIGNvbnN0IHN2Z01hdGNoID0gc291cmNlXG4gICAgLnJlcGxhY2UoLzxcXD94bWxbXFxzXFxTXSo/XFw/Pi9pZywgJycpXG4gICAgLnJlcGxhY2UoLzwhZG9jdHlwZVtcXHNcXFNdKj8+L2lnLCAnJylcbiAgICAubWF0Y2goLzxzdmdcXGIoW14+XSopPihbXFxzXFxTXSo/KTxcXC9zdmc+L2kpO1xuXG4gIGlmKCFzdmdNYXRjaCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBhdHRyaWJ1dGVzOiBwYXJzZUF0dHJpYnV0ZXMoc3ZnTWF0Y2hbMV0gfHwgJycpLFxuICAgIGNvbnRlbnQ6IHN2Z01hdGNoWzJdPy50cmltKCkgfHwgJydcbiAgfTtcbn07XG5cbmNvbnN0IGJ1aWxkQXR0cmlidXRlU3RyaW5nID0gKGF0dHJpYnV0ZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4pOiBzdHJpbmcgPT4ge1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMoYXR0cmlidXRlcylcbiAgICAubWFwKChbbmFtZSwgdmFsdWVdKSA9PiBgJHtuYW1lfT1cIiR7ZXNjYXBlQXR0cmlidXRlKHZhbHVlKX1cImApXG4gICAgLmpvaW4oJyAnKTtcbn07XG5cbmNvbnN0IHNhbml0aXplSWRlbnRpZmllciA9ICh2YWx1ZTogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgY29uc3Qgc2FuaXRpemVkVmFsdWUgPSB2YWx1ZVxuICAgIC50cmltKClcbiAgICAucmVwbGFjZUFsbCgvXFxzKy9nLCAnLScpXG4gICAgLnJlcGxhY2VBbGwoL1teQS1aYS16MC05Xy1dL2csICctJylcbiAgICAucmVwbGFjZUFsbCgvLXsyLH0vZywgJy0nKVxuICAgIC5yZXBsYWNlQWxsKC9eWy1fXSt8Wy1fXSskL2csICcnKTtcblxuICBjb25zdCBzYWZlVmFsdWUgPSBzYW5pdGl6ZWRWYWx1ZSB8fCAnaWNvbic7XG5cbiAgcmV0dXJuIC9eW0EtWmEtel9dLy50ZXN0KHNhZmVWYWx1ZSkgPyBzYWZlVmFsdWUgOiBgaWNvbi0ke3NhZmVWYWx1ZX1gO1xufTtcblxuY29uc3QgZ2V0UHJlZml4ID0gKGZpbGVQYXRoOiBzdHJpbmcsIHByZWZpeDogSWRlbnRpZmllclByZWZpeCk6IHN0cmluZyA9PiB7XG4gIGlmKHByZWZpeCA9PT0gZmFsc2UpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBpZih0eXBlb2YgcHJlZml4ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIHByZWZpeChmaWxlUGF0aCk7XG4gIH1cblxuICByZXR1cm4gcHJlZml4IHx8ICcnO1xufTtcblxuY29uc3Qgb3B0aW1pemVTdmcgPSAoY29udGVudDogc3RyaW5nLCBlbmFibGVkOiBib29sZWFuKTogc3RyaW5nID0+IHtcbiAgaWYoIWVuYWJsZWQpIHtcbiAgICByZXR1cm4gY29udGVudDtcbiAgfVxuXG4gIHJldHVybiBvcHRpbWl6ZShjb250ZW50LCB7XG4gICAgbXVsdGlwYXNzOiB0cnVlLFxuICAgIHBsdWdpbnM6IFt7XG4gICAgICBuYW1lOiAncHJlc2V0LWRlZmF1bHQnLFxuICAgICAgcGFyYW1zOiB7XG4gICAgICAgIG92ZXJyaWRlczoge1xuICAgICAgICAgIGNsZWFudXBJZHM6IGZhbHNlLFxuICAgICAgICAgIHJlbW92ZUhpZGRlbkVsZW1zOiBmYWxzZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfV1cbiAgfSkuZGF0YTtcbn07XG5cbmNvbnN0IGNyZWF0ZVNwcml0ZVN5bWJvbCA9IChcbiAgZmlsZVBhdGg6IHN0cmluZyxcbiAgdXNlZElkZW50aWZpZXJzOiBTZXQ8c3RyaW5nPixcbiAgcHJlZml4OiBJZGVudGlmaWVyUHJlZml4LFxuICB3YXJuaW5nczogRXJyb3JbXVxuKTogU3ByaXRlU3ltYm9sIHwgbnVsbCA9PiB7XG4gIGNvbnN0IHNvdXJjZSA9IHJlYWRGaWxlU3luYyhmaWxlUGF0aCwgJ3V0ZjgnKTtcbiAgY29uc3QgcGFyc2VkU3ZnID0gcGFyc2VTdmcoc291cmNlKTtcblxuICBpZighcGFyc2VkU3ZnKSB7XG4gICAgd2FybmluZ3MucHVzaChuZXcgRXJyb3IoYEludmFsaWQgU1ZHIGljb246ICR7ZmlsZVBhdGh9YCkpO1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaWYoIXBhcnNlZFN2Zy5jb250ZW50KSB7XG4gICAgd2FybmluZ3MucHVzaChuZXcgRXJyb3IoYFNWRyBpY29uIGlzIGVtcHR5OiAke2ZpbGVQYXRofWApKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IHJhd0lkZW50aWZpZXIgPSBgJHtnZXRQcmVmaXgoZmlsZVBhdGgsIHByZWZpeCl9JHtwYXRoQmFzZW5hbWUoZmlsZVBhdGgsIHBhdGhFeHRuYW1lKGZpbGVQYXRoKSl9YDtcbiAgY29uc3QgYmFzZUlkZW50aWZpZXIgPSBzYW5pdGl6ZUlkZW50aWZpZXIocmF3SWRlbnRpZmllcik7XG5cbiAgbGV0IGlkZW50aWZpZXIgPSBiYXNlSWRlbnRpZmllcjtcbiAgbGV0IGR1cGxpY2F0ZUluZGV4ID0gMTtcblxuICB3aGlsZSh1c2VkSWRlbnRpZmllcnMuaGFzKGlkZW50aWZpZXIpKSB7XG4gICAgZHVwbGljYXRlSW5kZXggKz0gMTtcbiAgICBpZGVudGlmaWVyID0gYCR7YmFzZUlkZW50aWZpZXJ9LSR7ZHVwbGljYXRlSW5kZXh9YDtcbiAgfVxuXG4gIGlmKGlkZW50aWZpZXIgIT09IGJhc2VJZGVudGlmaWVyKSB7XG4gICAgd2FybmluZ3MucHVzaChuZXcgRXJyb3IoYER1cGxpY2F0ZSBTVkcgaWNvbiBpZCBcIiR7YmFzZUlkZW50aWZpZXJ9XCIgZGV0ZWN0ZWQsIHVzaW5nIFwiJHtpZGVudGlmaWVyfVwiIGZvciAke2ZpbGVQYXRofWApKTtcbiAgfVxuXG4gIHVzZWRJZGVudGlmaWVycy5hZGQoaWRlbnRpZmllcik7XG5cbiAgY29uc3QgbmFtZXNwYWNlQXR0cmlidXRlcyA9IE9iamVjdC5lbnRyaWVzKHBhcnNlZFN2Zy5hdHRyaWJ1dGVzKS5yZWR1Y2U8UmVjb3JkPHN0cmluZywgc3RyaW5nPj4oKHJlc3VsdCwgW25hbWUsIHZhbHVlXSkgPT4ge1xuICAgIGlmKG5hbWUudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKCd4bWxuczonKSkge1xuICAgICAgcmVzdWx0W25hbWVdID0gdmFsdWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfSwge30pO1xuXG4gIGNvbnN0IHN5bWJvbEF0dHJpYnV0ZXMgPSBPYmplY3QuZW50cmllcyhwYXJzZWRTdmcuYXR0cmlidXRlcykucmVkdWNlPFJlY29yZDxzdHJpbmcsIHN0cmluZz4+KChyZXN1bHQsIFtuYW1lLCB2YWx1ZV0pID0+IHtcbiAgICBpZihST09UX0VYQ0xVREVEX0FUVFJJQlVURVMuaGFzKG5hbWUpKSB7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIGlmKG5hbWUudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKCd4bWxuczonKSkge1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICByZXN1bHRbbmFtZV0gPSB2YWx1ZTtcblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH0sIHtcbiAgICBpZDogaWRlbnRpZmllclxuICB9KTtcblxuICBpZihwYXJzZWRTdmcuYXR0cmlidXRlcy52aWV3Qm94KSB7XG4gICAgc3ltYm9sQXR0cmlidXRlcy52aWV3Qm94ID0gcGFyc2VkU3ZnLmF0dHJpYnV0ZXMudmlld0JveDtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCB3aWR0aCA9IE51bWJlci5wYXJzZUZsb2F0KHBhcnNlZFN2Zy5hdHRyaWJ1dGVzLndpZHRoIHx8ICcnKTtcbiAgICBjb25zdCBoZWlnaHQgPSBOdW1iZXIucGFyc2VGbG9hdChwYXJzZWRTdmcuYXR0cmlidXRlcy5oZWlnaHQgfHwgJycpO1xuXG4gICAgaWYoTnVtYmVyLmlzRmluaXRlKHdpZHRoKSAmJiBOdW1iZXIuaXNGaW5pdGUoaGVpZ2h0KSkge1xuICAgICAgc3ltYm9sQXR0cmlidXRlcy52aWV3Qm94ID0gYDAgMCAke3dpZHRofSAke2hlaWdodH1gO1xuICAgIH0gZWxzZSB7XG4gICAgICB3YXJuaW5ncy5wdXNoKG5ldyBFcnJvcihgU1ZHIGljb24gaXMgbWlzc2luZyBhIHZpZXdCb3ggYW5kIHJlYWRhYmxlIHdpZHRoL2hlaWdodDogJHtmaWxlUGF0aH1gKSk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGZpbGVQYXRoLFxuICAgIG5hbWVzcGFjZUF0dHJpYnV0ZXMsXG4gICAgc3ltYm9sOiBgPHN5bWJvbCAke2J1aWxkQXR0cmlidXRlU3RyaW5nKHN5bWJvbEF0dHJpYnV0ZXMpfT4ke3BhcnNlZFN2Zy5jb250ZW50fTwvc3ltYm9sPmBcbiAgfTtcbn07XG5cbmNvbnN0IGNvbGxlY3RGaWxlcyA9IChwYXR0ZXJuczogcmVhZG9ubHkgc3RyaW5nW10sIGFsbG93RHVwbGljYXRlczogYm9vbGVhbik6IHN0cmluZ1tdID0+IHtcbiAgY29uc3QgZmlsZXMgPSBwYXR0ZXJucy5mbGF0TWFwKChwYXR0ZXJuKSA9PiB7XG4gICAgcmV0dXJuIGdsb2JTeW5jKHBhdHRlcm4sIHtcbiAgICAgIGFic29sdXRlOiB0cnVlLFxuICAgICAgZG90OiBmYWxzZSxcbiAgICAgIG5vZGlyOiB0cnVlXG4gICAgfSkgYXMgc3RyaW5nW107XG4gIH0pLm1hcCgoZmlsZVBhdGgpID0+IHBhdGhSZXNvbHZlKGZpbGVQYXRoKSk7XG5cbiAgaWYoYWxsb3dEdXBsaWNhdGVzKSB7XG4gICAgcmV0dXJuIGZpbGVzO1xuICB9XG5cbiAgcmV0dXJuIFsuLi5uZXcgU2V0KGZpbGVzKV07XG59O1xuXG5leHBvcnQgY2xhc3MgTGV4U3ZnU3ByaXRlbWFwIHtcbiAgcmVhZG9ubHkgcGF0dGVybnM6IHN0cmluZ1tdO1xuICByZWFkb25seSBvcHRpb25zOiBSZXF1aXJlZDxMZXhTdmdTcHJpdGVtYXBPcHRpb25zPjtcblxuICBjb25zdHJ1Y3RvcihwYXR0ZXJuczogc3RyaW5nIHwgc3RyaW5nW10sIG9wdGlvbnM6IExleFN2Z1Nwcml0ZW1hcE9wdGlvbnMgPSB7fSkge1xuICAgIHRoaXMucGF0dGVybnMgPSBBcnJheS5pc0FycmF5KHBhdHRlcm5zKSA/IHBhdHRlcm5zIDogW3BhdHRlcm5zXTtcbiAgICB0aGlzLm9wdGlvbnMgPSB7XG4gICAgICBhbGxvd0R1cGxpY2F0ZXM6IG9wdGlvbnMuYWxsb3dEdXBsaWNhdGVzID8/IGZhbHNlLFxuICAgICAgZmlsZW5hbWU6IG5vcm1hbGl6ZUFzc2V0RmlsZW5hbWUob3B0aW9ucy5maWxlbmFtZSB8fCBERUZBVUxUX0ZJTEVOQU1FKSxcbiAgICAgIG9wdGltaXplOiBvcHRpb25zLm9wdGltaXplID8/IHRydWUsXG4gICAgICBwcmVmaXg6IG9wdGlvbnMucHJlZml4ID8/IGZhbHNlXG4gICAgfTtcbiAgfVxuXG4gIGJ1aWxkU3ByaXRlbWFwKCk6IHtjb250ZW50OiBzdHJpbmcgfCBudWxsOyBmaWxlUGF0aHM6IHN0cmluZ1tdOyB3YXJuaW5nczogRXJyb3JbXX0ge1xuICAgIGNvbnN0IHdhcm5pbmdzOiBFcnJvcltdID0gW107XG4gICAgY29uc3QgZmlsZVBhdGhzID0gY29sbGVjdEZpbGVzKHRoaXMucGF0dGVybnMsIHRoaXMub3B0aW9ucy5hbGxvd0R1cGxpY2F0ZXMpO1xuXG4gICAgaWYoZmlsZVBhdGhzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogbnVsbCxcbiAgICAgICAgZmlsZVBhdGhzLFxuICAgICAgICB3YXJuaW5nc1xuICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25zdCBuYW1lc3BhY2VBdHRyaWJ1dGVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG4gICAgY29uc3QgdXNlZElkZW50aWZpZXJzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgY29uc3Qgc3ltYm9scyA9IGZpbGVQYXRocy5tYXAoKGZpbGVQYXRoKSA9PiB7XG4gICAgICByZXR1cm4gY3JlYXRlU3ByaXRlU3ltYm9sKGZpbGVQYXRoLCB1c2VkSWRlbnRpZmllcnMsIHRoaXMub3B0aW9ucy5wcmVmaXgsIHdhcm5pbmdzKTtcbiAgICB9KS5maWx0ZXIoKGVudHJ5KTogZW50cnkgaXMgU3ByaXRlU3ltYm9sID0+IGVudHJ5ICE9PSBudWxsKTtcblxuICAgIGlmKHN5bWJvbHMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBudWxsLFxuICAgICAgICBmaWxlUGF0aHMsXG4gICAgICAgIHdhcm5pbmdzXG4gICAgICB9O1xuICAgIH1cblxuICAgIGZvcihjb25zdCBzeW1ib2wgb2Ygc3ltYm9scykge1xuICAgICAgZm9yKGNvbnN0IFtuYW1lLCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoc3ltYm9sLm5hbWVzcGFjZUF0dHJpYnV0ZXMpKSB7XG4gICAgICAgIG5hbWVzcGFjZUF0dHJpYnV0ZXNbbmFtZV0gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCByb290QXR0cmlidXRlcyA9IGJ1aWxkQXR0cmlidXRlU3RyaW5nKHtcbiAgICAgIHhtbG5zOiAnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnLFxuICAgICAgLi4ubmFtZXNwYWNlQXR0cmlidXRlc1xuICAgIH0pO1xuICAgIGNvbnN0IHNwcml0ZUNvbnRlbnQgPSBgPHN2ZyAke3Jvb3RBdHRyaWJ1dGVzfT4ke3N5bWJvbHMubWFwKChzeW1ib2wpID0+IHN5bWJvbC5zeW1ib2wpLmpvaW4oJycpfTwvc3ZnPmA7XG5cbiAgICByZXR1cm4ge1xuICAgICAgY29udGVudDogb3B0aW1pemVTdmcoc3ByaXRlQ29udGVudCwgdGhpcy5vcHRpb25zLm9wdGltaXplKSxcbiAgICAgIGZpbGVQYXRocyxcbiAgICAgIHdhcm5pbmdzXG4gICAgfTtcbiAgfVxuXG59XG5cbmV4cG9ydCBkZWZhdWx0IExleFN2Z1Nwcml0ZW1hcDtcbiJdLCJuYW1lcyI6WyJyZWFkRmlsZVN5bmMiLCJzeW5jIiwiZ2xvYlN5bmMiLCJiYXNlbmFtZSIsInBhdGhCYXNlbmFtZSIsImV4dG5hbWUiLCJwYXRoRXh0bmFtZSIsInJlc29sdmUiLCJwYXRoUmVzb2x2ZSIsIm9wdGltaXplIiwiREVGQVVMVF9GSUxFTkFNRSIsIlJPT1RfRVhDTFVERURfQVRUUklCVVRFUyIsIlNldCIsImVzY2FwZUF0dHJpYnV0ZSIsInZhbHVlIiwicmVwbGFjZUFsbCIsIm5vcm1hbGl6ZUFzc2V0RmlsZW5hbWUiLCJmaWxlbmFtZSIsInJlcGxhY2UiLCJwYXJzZUF0dHJpYnV0ZXMiLCJpbnB1dCIsImF0dHJpYnV0ZXMiLCJhdHRyaWJ1dGVSZWdleCIsIm1hdGNoIiwiZXhlYyIsInBhcnNlU3ZnIiwic291cmNlIiwic3ZnTWF0Y2giLCJjb250ZW50IiwidHJpbSIsImJ1aWxkQXR0cmlidXRlU3RyaW5nIiwiT2JqZWN0IiwiZW50cmllcyIsIm1hcCIsIm5hbWUiLCJqb2luIiwic2FuaXRpemVJZGVudGlmaWVyIiwic2FuaXRpemVkVmFsdWUiLCJzYWZlVmFsdWUiLCJ0ZXN0IiwiZ2V0UHJlZml4IiwiZmlsZVBhdGgiLCJwcmVmaXgiLCJvcHRpbWl6ZVN2ZyIsImVuYWJsZWQiLCJtdWx0aXBhc3MiLCJwbHVnaW5zIiwicGFyYW1zIiwib3ZlcnJpZGVzIiwiY2xlYW51cElkcyIsInJlbW92ZUhpZGRlbkVsZW1zIiwiZGF0YSIsImNyZWF0ZVNwcml0ZVN5bWJvbCIsInVzZWRJZGVudGlmaWVycyIsIndhcm5pbmdzIiwicGFyc2VkU3ZnIiwicHVzaCIsIkVycm9yIiwicmF3SWRlbnRpZmllciIsImJhc2VJZGVudGlmaWVyIiwiaWRlbnRpZmllciIsImR1cGxpY2F0ZUluZGV4IiwiaGFzIiwiYWRkIiwibmFtZXNwYWNlQXR0cmlidXRlcyIsInJlZHVjZSIsInJlc3VsdCIsInRvTG93ZXJDYXNlIiwic3RhcnRzV2l0aCIsInN5bWJvbEF0dHJpYnV0ZXMiLCJpZCIsInZpZXdCb3giLCJ3aWR0aCIsIk51bWJlciIsInBhcnNlRmxvYXQiLCJoZWlnaHQiLCJpc0Zpbml0ZSIsInN5bWJvbCIsImNvbGxlY3RGaWxlcyIsInBhdHRlcm5zIiwiYWxsb3dEdXBsaWNhdGVzIiwiZmlsZXMiLCJmbGF0TWFwIiwicGF0dGVybiIsImFic29sdXRlIiwiZG90Iiwibm9kaXIiLCJMZXhTdmdTcHJpdGVtYXAiLCJidWlsZFNwcml0ZW1hcCIsImZpbGVQYXRocyIsIm9wdGlvbnMiLCJsZW5ndGgiLCJzeW1ib2xzIiwiZmlsdGVyIiwiZW50cnkiLCJyb290QXR0cmlidXRlcyIsInhtbG5zIiwic3ByaXRlQ29udGVudCIsIkFycmF5IiwiaXNBcnJheSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTs7O0NBR0MsR0FDRCxTQUFRQSxZQUFZLFFBQU8sS0FBSztBQUNoQyxTQUFRQyxRQUFRQyxRQUFRLFFBQU8sT0FBTztBQUN0QyxTQUFRQyxZQUFZQyxZQUFZLEVBQUVDLFdBQVdDLFdBQVcsRUFBRUMsV0FBV0MsV0FBVyxRQUFPLE9BQU87QUFDOUYsU0FBUUMsUUFBUSxRQUFPLE9BQU87QUFzQjlCLE1BQU1DLG1CQUFtQjtBQUN6QixNQUFNQywyQkFBMkIsSUFBSUMsSUFBSTtJQUN2QztJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7Q0FDRDtBQUVELE1BQU1DLGtCQUFrQixDQUFDQztJQUN2QixPQUFPQSxNQUNKQyxVQUFVLENBQUMsS0FBSyxTQUNoQkEsVUFBVSxDQUFDLEtBQUssVUFDaEJBLFVBQVUsQ0FBQyxLQUFLLFFBQ2hCQSxVQUFVLENBQUMsS0FBSztBQUNyQjtBQUVBLE1BQU1DLHlCQUF5QixDQUFDQztJQUM5QixPQUFPQSxTQUFTQyxPQUFPLENBQUMsVUFBVTtBQUNwQztBQUVBLE1BQU1DLGtCQUFrQixDQUFDQztJQUN2QixNQUFNQyxhQUFxQyxDQUFDO0lBQzVDLE1BQU1DLGlCQUFpQjtJQUV2QixJQUFJQyxRQUFnQ0QsZUFBZUUsSUFBSSxDQUFDSjtJQUN4RCxNQUFN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
|
package/lib/utils/file.d.ts
CHANGED
|
@@ -4,7 +4,3 @@ export declare const relativeFilePath: (filename: string, dirPath?: string, back
|
|
|
4
4
|
export declare const relativeNodePath: (packageName: string, dirPath?: string) => string;
|
|
5
5
|
export declare const resolveBinaryPath: (binaryName: string, packageName?: string) => string;
|
|
6
6
|
export declare const findTailwindCssPath: () => string;
|
|
7
|
-
export declare const resolveWebpackPaths: (currentDirname: string) => {
|
|
8
|
-
webpackPath: string;
|
|
9
|
-
webpackConfig: string;
|
|
10
|
-
};
|
package/lib/utils/file.js
CHANGED
|
@@ -5,45 +5,16 @@
|
|
|
5
5
|
import { existsSync, readFileSync } from 'fs';
|
|
6
6
|
import { sync as globSync } from 'glob';
|
|
7
7
|
import { resolve as pathResolve, dirname } from 'path';
|
|
8
|
+
import { fileURLToPath } from 'url';
|
|
8
9
|
import { LexConfig } from '../LexConfig.js';
|
|
9
|
-
export const getDirName = ()=>
|
|
10
|
-
try {
|
|
11
|
-
return eval('new URL(".", import.meta.url).pathname');
|
|
12
|
-
} catch {
|
|
13
|
-
return process.cwd();
|
|
14
|
-
}
|
|
15
|
-
};
|
|
10
|
+
export const getDirName = ()=>dirname(fileURLToPath(import.meta.url));
|
|
16
11
|
export const getLexPackageJsonPath = ()=>{
|
|
17
12
|
const LEX_PACKAGE_NAME = '@nlabs/lex';
|
|
18
13
|
const lexInNodeModules = pathResolve(process.cwd(), 'node_modules/@nlabs/lex/package.json');
|
|
19
14
|
if (existsSync(lexInNodeModules)) {
|
|
20
15
|
return lexInNodeModules;
|
|
21
16
|
}
|
|
22
|
-
|
|
23
|
-
if (process.env.LEX_ROOT) {
|
|
24
|
-
startDir = process.env.LEX_ROOT;
|
|
25
|
-
} else {
|
|
26
|
-
try {
|
|
27
|
-
startDir = eval('new URL(".", import.meta.url).pathname');
|
|
28
|
-
} catch {
|
|
29
|
-
try {
|
|
30
|
-
startDir = eval('__filename ? require("path").dirname(__filename) : null');
|
|
31
|
-
if (!startDir) {
|
|
32
|
-
throw new Error('__filename not available');
|
|
33
|
-
}
|
|
34
|
-
} catch {
|
|
35
|
-
try {
|
|
36
|
-
if (process.argv[1] && !process.argv[1].includes('node')) {
|
|
37
|
-
startDir = dirname(process.argv[1]);
|
|
38
|
-
} else {
|
|
39
|
-
throw new Error('process.argv[1] not suitable');
|
|
40
|
-
}
|
|
41
|
-
} catch {
|
|
42
|
-
startDir = process.cwd();
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
}
|
|
17
|
+
const startDir = process.env.LEX_ROOT || getDirName();
|
|
47
18
|
let dir = startDir;
|
|
48
19
|
for(let i = 0; i < 8; i++){
|
|
49
20
|
const pkgPath = pathResolve(dir, 'package.json');
|
|
@@ -158,72 +129,5 @@ export const findTailwindCssPath = ()=>{
|
|
|
158
129
|
}
|
|
159
130
|
return '';
|
|
160
131
|
};
|
|
161
|
-
export const resolveWebpackPaths = (currentDirname)=>{
|
|
162
|
-
const possibleWebpackPaths = [
|
|
163
|
-
pathResolve(process.cwd(), 'node_modules/webpack-cli/bin/cli.js'),
|
|
164
|
-
pathResolve(process.cwd(), 'node_modules/.bin/webpack'),
|
|
165
|
-
pathResolve(process.cwd(), 'node_modules/@nlabs/lex', 'node_modules/webpack-cli/bin/cli.js'),
|
|
166
|
-
pathResolve(process.cwd(), 'node_modules/@nlabs/lex', 'node_modules/.bin/webpack'),
|
|
167
|
-
pathResolve(currentDirname, 'node_modules/@nlabs/lex/node_modules/webpack-cli/bin/cli.js'),
|
|
168
|
-
pathResolve(currentDirname, 'node_modules/@nlabs/lex/node_modules/.bin/webpack'),
|
|
169
|
-
pathResolve(process.env.LEX_HOME || '/node_modules/@nlabs/lex', 'node_modules/webpack-cli/bin/cli.js'),
|
|
170
|
-
pathResolve(process.env.LEX_HOME || '/node_modules/@nlabs/lex', 'node_modules/.bin/webpack')
|
|
171
|
-
];
|
|
172
|
-
let webpackPath = '';
|
|
173
|
-
for (const path of possibleWebpackPaths){
|
|
174
|
-
if (existsSync(path)) {
|
|
175
|
-
webpackPath = path;
|
|
176
|
-
break;
|
|
177
|
-
}
|
|
178
|
-
}
|
|
179
|
-
if (!webpackPath) {
|
|
180
|
-
try {
|
|
181
|
-
const lexPackagePath = getLexPackageJsonPath();
|
|
182
|
-
const lexPackageDir = dirname(lexPackagePath);
|
|
183
|
-
const lexWebpackCli = pathResolve(lexPackageDir, 'node_modules/webpack-cli/bin/cli.js');
|
|
184
|
-
const lexWebpackBin = pathResolve(lexPackageDir, 'node_modules/.bin/webpack');
|
|
185
|
-
if (existsSync(lexWebpackCli)) {
|
|
186
|
-
webpackPath = lexWebpackCli;
|
|
187
|
-
} else if (existsSync(lexWebpackBin)) {
|
|
188
|
-
webpackPath = lexWebpackBin;
|
|
189
|
-
} else {
|
|
190
|
-
webpackPath = 'npx';
|
|
191
|
-
}
|
|
192
|
-
} catch {
|
|
193
|
-
webpackPath = 'npx';
|
|
194
|
-
}
|
|
195
|
-
}
|
|
196
|
-
const possibleWebpackConfigPaths = [
|
|
197
|
-
pathResolve(process.cwd(), 'webpack.config.js'),
|
|
198
|
-
pathResolve(process.cwd(), 'webpack.config.ts'),
|
|
199
|
-
pathResolve(process.cwd(), 'node_modules/@nlabs/lex/webpack.config.js'),
|
|
200
|
-
pathResolve(process.cwd(), 'node_modules/@nlabs/lex/webpack.config.ts'),
|
|
201
|
-
pathResolve(currentDirname, 'node_modules/@nlabs/lex/webpack.config.js'),
|
|
202
|
-
pathResolve(currentDirname, 'node_modules/@nlabs/lex/webpack.config.ts'),
|
|
203
|
-
pathResolve(process.env.LEX_HOME || '/node_modules/@nlabs/lex', 'webpack.config.js'),
|
|
204
|
-
pathResolve(process.env.LEX_HOME || '/node_modules/@nlabs/lex', 'webpack.config.ts')
|
|
205
|
-
];
|
|
206
|
-
let webpackConfig = '';
|
|
207
|
-
for (const path of possibleWebpackConfigPaths){
|
|
208
|
-
if (existsSync(path)) {
|
|
209
|
-
webpackConfig = path;
|
|
210
|
-
break;
|
|
211
|
-
}
|
|
212
|
-
}
|
|
213
|
-
if (!webpackConfig) {
|
|
214
|
-
const lexPackagePath = getLexPackageJsonPath();
|
|
215
|
-
const lexPackageDir = dirname(lexPackagePath);
|
|
216
|
-
const lexWebpackConfig = pathResolve(lexPackageDir, 'webpack.config.js');
|
|
217
|
-
if (existsSync(lexWebpackConfig)) {
|
|
218
|
-
webpackConfig = lexWebpackConfig;
|
|
219
|
-
} else {
|
|
220
|
-
webpackConfig = pathResolve(currentDirname, '../../webpack.config.js');
|
|
221
|
-
}
|
|
222
|
-
}
|
|
223
|
-
return {
|
|
224
|
-
webpackConfig,
|
|
225
|
-
webpackPath
|
|
226
|
-
};
|
|
227
|
-
};
|
|
228
132
|
|
|
229
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9maWxlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDE4LVByZXNlbnQsIE5pdHJvZ2VuIExhYnMsIEluYy5cbiAqIENvcHlyaWdodHMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLiBTZWUgdGhlIGFjY29tcGFueWluZyBMSUNFTlNFIGZpbGUgZm9yIHRlcm1zLlxuICovXG5pbXBvcnQgZmluZEZpbGVVcCBmcm9tICdmaW5kLWZpbGUtdXAnO1xuaW1wb3J0IHtleGlzdHNTeW5jLCByZWFkRmlsZVN5bmN9IGZyb20gJ2ZzJztcbmltcG9ydCB7c3luYyBhcyBnbG9iU3luY30gZnJvbSAnZ2xvYic7XG5pbXBvcnQge3Jlc29sdmUgYXMgcGF0aFJlc29sdmUsIGRpcm5hbWV9IGZyb20gJ3BhdGgnO1xuXG5pbXBvcnQge0xleENvbmZpZ30gZnJvbSAnLi4vTGV4Q29uZmlnLmpzJztcblxuZXhwb3J0IGNvbnN0IGdldERpck5hbWUgPSAoKTogc3RyaW5nID0+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gZXZhbCgnbmV3IFVSTChcIi5cIiwgaW1wb3J0Lm1ldGEudXJsKS5wYXRobmFtZScpO1xuICB9IGNhdGNoe1xuICAgIHJldHVybiBwcm9jZXNzLmN3ZCgpO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0TGV4UGFja2FnZUpzb25QYXRoID0gKCk6IHN0cmluZyA9PiB7XG4gIGNvbnN0IExFWF9QQUNLQUdFX05BTUUgPSAnQG5sYWJzL2xleCc7XG5cbiAgY29uc3QgbGV4SW5Ob2RlTW9kdWxlcyA9IHBhdGhSZXNvbHZlKHByb2Nlc3MuY3dkKCksICdub2RlX21vZHVsZXMvQG5sYWJzL2xleC9wYWNrYWdlLmpzb24nKTtcblxuICBpZihleGlzdHNTeW5jKGxleEluTm9kZU1vZHVsZXMpKSB7XG4gICAgcmV0dXJuIGxleEluTm9kZU1vZHVsZXM7XG4gIH1cblxuICBsZXQgc3RhcnREaXI6IHN0cmluZztcblxuICBpZihwcm9jZXNzLmVudi5MRVhfUk9PVCkge1xuICAgIHN0YXJ0RGlyID0gcHJvY2Vzcy5lbnYuTEVYX1JPT1Q7XG4gIH0gZWxzZSB7XG4gICAgdHJ5IHtcbiAgICAgIHN0YXJ0RGlyID0gZXZhbCgnbmV3IFVSTChcIi5cIiwgaW1wb3J0Lm1ldGEudXJsKS5wYXRobmFtZScpO1xuICAgIH0gY2F0Y2h7XG4gICAgICB0cnkge1xuICAgICAgICBzdGFydERpciA9IGV2YWwoJ19fZmlsZW5hbWUgPyByZXF1aXJlKFwicGF0aFwiKS5kaXJuYW1lKF9fZmlsZW5hbWUpIDogbnVsbCcpO1xuICAgICAgICBpZighc3RhcnREaXIpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ19fZmlsZW5hbWUgbm90IGF2YWlsYWJsZScpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoe1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGlmKHByb2Nlc3MuYXJndlsxXSAmJiAhcHJvY2Vzcy5hcmd2WzFdLmluY2x1ZGVzKCdub2RlJykpIHtcbiAgICAgICAgICAgIHN0YXJ0RGlyID0gZGlybmFtZShwcm9jZXNzLmFyZ3ZbMV0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuYXJndlsxXSBub3Qgc3VpdGFibGUnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2h7XG4gICAgICAgICAgc3RhcnREaXIgPSBwcm9jZXNzLmN3ZCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbGV0IGRpciA9IHN0YXJ0RGlyO1xuICBmb3IobGV0IGkgPSAwOyBpIDwgODsgaSsrKSB7XG4gICAgY29uc3QgcGtnUGF0aCA9IHBhdGhSZXNvbHZlKGRpciwgJ3BhY2thZ2UuanNvbicpO1xuICAgIGlmKGV4aXN0c1N5bmMocGtnUGF0aCkpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHBrZyA9IEpTT04ucGFyc2UocmVhZEZpbGVTeW5jKHBrZ1BhdGgsICd1dGY4JykpO1xuICAgICAgICBpZihwa2cubmFtZSA9PT0gTEVYX1BBQ0tBR0VfTkFNRSkge1xuICAgICAgICAgIHJldHVybiBwa2dQYXRoO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoe1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBwYXJlbnQgPSBkaXJuYW1lKGRpcik7XG4gICAgaWYocGFyZW50ID09PSBkaXIpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBkaXIgPSBwYXJlbnQ7XG4gIH1cblxuICByZXR1cm4gcGF0aFJlc29sdmUocHJvY2Vzcy5jd2QoKSwgJ3BhY2thZ2UuanNvbicpO1xufTtcblxuZXhwb3J0IGNvbnN0IHJlbGF0aXZlRmlsZVBhdGggPSAoZmlsZW5hbWU6IHN0cmluZywgZGlyUGF0aDogc3RyaW5nID0gJy4vJywgYmFja1VwOiBudW1iZXIgPSAwKTogc3RyaW5nID0+IHtcbiAgY29uc3QgbmVzdERlcHRoOiBudW1iZXIgPSAxMDtcblxuICBpZihiYWNrVXApIHtcbiAgICBjb25zdCBmaWxlUGF0aDogc3RyaW5nID0gZmluZEZpbGVVcC5zeW5jKGZpbGVuYW1lLCBkaXJQYXRoLCBuZXN0RGVwdGgpO1xuICAgIGNvbnN0IHByZXZpb3VzUGF0aDogc3RyaW5nID0gQXJyYXkoYmFja1VwKS5maWxsKG51bGwpLm1hcCgoKSA9PiAnLi4vJykuam9pbignJyk7XG4gICAgcmV0dXJuIHBhdGhSZXNvbHZlKGZpbGVQYXRoLCBwcmV2aW91c1BhdGgpO1xuICB9XG5cbiAgcmV0dXJuIGZpbmRGaWxlVXAuc3luYyhmaWxlbmFtZSwgZGlyUGF0aCwgbmVzdERlcHRoKTtcbn07XG5cbmV4cG9ydCBjb25zdCByZWxhdGl2ZU5vZGVQYXRoID0gKHBhY2thZ2VOYW1lOiBzdHJpbmcsIGRpclBhdGg6IHN0cmluZyA9IHByb2Nlc3MuY3dkKCkpOiBzdHJpbmcgPT4ge1xuICBjb25zdCBub2RlUGF0aCA9IHBhdGhSZXNvbHZlKGRpclBhdGgsICdub2RlX21vZHVsZXMnLCBwYWNrYWdlTmFtZSk7XG4gIGlmKGV4aXN0c1N5bmMobm9kZVBhdGgpKSB7XG4gICAgcmV0dXJuIG5vZGVQYXRoO1xuICB9XG5cbiAgLy8gQ2hlY2sgcGFyZW50IGRpcmVjdG9yaWVzIGZvciBub2RlX21vZHVsZXNcbiAgbGV0IGNoZWNrRGlyID0gZGlyUGF0aDtcbiAgZm9yKGxldCBpID0gMDsgaSA8IDEwOyBpKyspIHtcbiAgICBjb25zdCBjaGVja1BhdGggPSBwYXRoUmVzb2x2ZShjaGVja0RpciwgJ25vZGVfbW9kdWxlcycsIHBhY2thZ2VOYW1lKTtcbiAgICBpZihleGlzdHNTeW5jKGNoZWNrUGF0aCkpIHtcbiAgICAgIHJldHVybiBjaGVja1BhdGg7XG4gICAgfVxuICAgIGNvbnN0IHBhcmVudERpciA9IHBhdGhSZXNvbHZlKGNoZWNrRGlyLCAnLi4nKTtcbiAgICBpZihwYXJlbnREaXIgPT09IGNoZWNrRGlyKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgY2hlY2tEaXIgPSBwYXJlbnREaXI7XG4gIH1cblxuICByZXR1cm4gJyc7XG59O1xuXG5leHBvcnQgY29uc3QgcmVzb2x2ZUJpbmFyeVBhdGggPSAoYmluYXJ5TmFtZTogc3RyaW5nLCBwYWNrYWdlTmFtZT86IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gIGNvbnN0IGxleERpciA9IExleENvbmZpZy5nZXRMZXhEaXIoKTtcblxuICBjb25zdCBsZXhCaW5QYXRoID0gcGF0aFJlc29sdmUobGV4RGlyLCBgbm9kZV9tb2R1bGVzLy5iaW4vJHtiaW5hcnlOYW1lfWApO1xuICBpZihleGlzdHNTeW5jKGxleEJpblBhdGgpKSB7XG4gICAgcmV0dXJuIGxleEJpblBhdGg7XG4gIH1cblxuICBpZihwYWNrYWdlTmFtZSkge1xuICAgIGNvbnN0IGxleFBhY2thZ2VCaW5QYXRoID0gcGF0aFJlc29sdmUobGV4RGlyLCBgbm9kZV9tb2R1bGVzLyR7cGFja2FnZU5hbWV9L2Jpbi8ke2JpbmFyeU5hbWV9YCk7XG4gICAgaWYoZXhpc3RzU3luYyhsZXhQYWNrYWdlQmluUGF0aCkpIHtcbiAgICAgIHJldHVybiBsZXhQYWNrYWdlQmluUGF0aDtcbiAgICB9XG5cbiAgICBjb25zdCBsZXhQYWNrYWdlQmluSnNQYXRoID0gcGF0aFJlc29sdmUobGV4RGlyLCBgbm9kZV9tb2R1bGVzLyR7cGFja2FnZU5hbWV9L2Jpbi8ke2JpbmFyeU5hbWV9LmpzYCk7XG4gICAgaWYoZXhpc3RzU3luYyhsZXhQYWNrYWdlQmluSnNQYXRoKSkge1xuICAgICAgcmV0dXJuIGxleFBhY2thZ2VCaW5Kc1BhdGg7XG4gICAgfVxuXG4gICAgY29uc3QgbGV4UGFja2FnZUJpbkNqc1BhdGggPSBwYXRoUmVzb2x2ZShsZXhEaXIsIGBub2RlX21vZHVsZXMvJHtwYWNrYWdlTmFtZX0vYmluLyR7YmluYXJ5TmFtZX0uY2pzYCk7XG4gICAgaWYoZXhpc3RzU3luYyhsZXhQYWNrYWdlQmluQ2pzUGF0aCkpIHtcbiAgICAgIHJldHVybiBsZXhQYWNrYWdlQmluQ2pzUGF0aDtcbiAgICB9XG4gIH1cblxuICBjb25zdCBjaGVja0JpblVwID0gKHN0YXJ0RGlyOiBzdHJpbmcpID0+IHtcbiAgICBsZXQgY2hlY2tEaXIgPSBzdGFydERpcjtcbiAgICBmb3IobGV0IGkgPSAwOyBpIDwgNTsgaSsrKSB7XG4gICAgICBjb25zdCBtb25vcmVwb0JpblBhdGggPSBwYXRoUmVzb2x2ZShjaGVja0RpciwgYG5vZGVfbW9kdWxlcy8uYmluLyR7YmluYXJ5TmFtZX1gKTtcbiAgICAgIGlmKGV4aXN0c1N5bmMobW9ub3JlcG9CaW5QYXRoKSkge1xuICAgICAgICByZXR1cm4gbW9ub3JlcG9CaW5QYXRoO1xuICAgICAgfVxuICAgICAgY29uc3QgcGFyZW50RGlyID0gcGF0aFJlc29sdmUoY2hlY2tEaXIsICcuLicpO1xuICAgICAgaWYocGFyZW50RGlyID09PSBjaGVja0Rpcikge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNoZWNrRGlyID0gcGFyZW50RGlyO1xuICAgIH1cbiAgICByZXR1cm4gJyc7XG4gIH07XG5cbiAgY29uc3QgZnJvbUN3ZCA9IGNoZWNrQmluVXAocHJvY2Vzcy5jd2QoKSk7XG4gIGlmKGZyb21Dd2QpIHtcbiAgICByZXR1cm4gZnJvbUN3ZDtcbiAgfVxuXG4gIGNvbnN0IGZyb21MZXggPSBjaGVja0JpblVwKGxleERpcik7XG4gIGlmKGZyb21MZXgpIHtcbiAgICByZXR1cm4gZnJvbUxleDtcbiAgfVxuXG4gIHJldHVybiAnJztcbn07XG5cbmV4cG9ydCBjb25zdCBmaW5kVGFpbHdpbmRDc3NQYXRoID0gKCk6IHN0cmluZyA9PiB7XG4gIGNvbnN0IHRhaWx3aW5kUGF0dGVybnMgPSBbJyoqL3RhaWx3aW5kLmNzcyddO1xuXG4gIGZvcihjb25zdCBwYXR0ZXJuIG9mIHRhaWx3aW5kUGF0dGVybnMpIHtcbiAgICBjb25zdCBmaWxlcyA9IGdsb2JTeW5jKHBhdHRlcm4sIHtcbiAgICAgIGN3ZDogcHJvY2Vzcy5jd2QoKSxcbiAgICAgIGlnbm9yZTogWycqKi9ub2RlX21vZHVsZXMvKionLCAnKiovZGlzdC8qKicsICcqKi9saWIvKionLCAnKiovYnVpbGQvKionLCAnKiovLnN0b3J5Ym9vay8qKiddXG4gICAgfSk7XG5cbiAgICBpZihmaWxlcy5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gcGF0aFJlc29sdmUocHJvY2Vzcy5jd2QoKSwgZmlsZXNbMF0pO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiAnJztcbn07XG5cbmV4cG9ydCBjb25zdCByZXNvbHZlV2VicGFja1BhdGhzID0gKGN1cnJlbnREaXJuYW1lOiBzdHJpbmcpOiB7d2VicGFja1BhdGg6IHN0cmluZzsgd2VicGFja0NvbmZpZzogc3RyaW5nfSA9PiB7XG4gIGNvbnN0IHBvc3NpYmxlV2VicGFja1BhdGhzID0gW1xuICAgIHBhdGhSZXNvbHZlKHByb2Nlc3MuY3dkKCksICdub2RlX21vZHVsZXMvd2VicGFjay1jbGkvYmluL2NsaS5qcycpLFxuICAgIHBhdGhSZXNvbHZlKHByb2Nlc3MuY3dkKCksICdub2RlX21vZHVsZXMvLmJpbi93ZWJwYWNrJyksXG4gICAgcGF0aFJlc29sdmUocHJvY2Vzcy5jd2QoKSwgJ25vZGVfbW9kdWxlcy9AbmxhYnMvbGV4JywgJ25vZGVfbW9kdWxlcy93ZWJwYWNrLWNsaS9iaW4vY2xpLmpzJyksXG4gICAgcGF0aFJlc29sdmUocHJvY2Vzcy5jd2QoKSwgJ25vZGVfbW9kdWxlcy9AbmxhYnMvbGV4JywgJ25vZGVfbW9kdWxlcy8uYmluL3dlYnBhY2snKSxcbiAgICBwYXRoUmVzb2x2ZShjdXJyZW50RGlybmFtZSwgJ25vZGVfbW9kdWxlcy9AbmxhYnMvbGV4L25vZGVfbW9kdWxlcy93ZWJwYWNrLWNsaS9iaW4vY2xpLmpzJyksXG4gICAgcGF0aFJlc29sdmUoY3VycmVudERpcm5hbWUsICdub2RlX21vZHVsZXMvQG5sYWJzL2xleC9ub2RlX21vZHVsZXMvLmJpbi93ZWJwYWNrJyksXG4gICAgcGF0aFJlc29sdmUocHJvY2Vzcy5lbnYuTEVYX0hPTUUgfHwgJy9ub2RlX21vZHVsZXMvQG5sYWJzL2xleCcsICdub2RlX21vZHVsZXMvd2VicGFjay1jbGkvYmluL2NsaS5qcycpLFxuICAgIHBhdGhSZXNvbHZlKHByb2Nlc3MuZW52LkxFWF9IT01FIHx8ICcvbm9kZV9tb2R1bGVzL0BubGFicy9sZXgnLCAnbm9kZV9tb2R1bGVzLy5iaW4vd2VicGFjaycpXG4gIF07XG5cbiAgbGV0IHdlYnBhY2tQYXRoID0gJyc7XG5cbiAgZm9yKGNvbnN0IHBhdGggb2YgcG9zc2libGVXZWJwYWNrUGF0aHMpIHtcbiAgICBpZihleGlzdHNTeW5jKHBhdGgpKSB7XG4gICAgICB3ZWJwYWNrUGF0aCA9IHBhdGg7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBpZighd2VicGFja1BhdGgpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgbGV4UGFja2FnZVBhdGggPSBnZXRMZXhQYWNrYWdlSnNvblBhdGgoKTtcbiAgICAgIGNvbnN0IGxleFBhY2thZ2VEaXIgPSBkaXJuYW1lKGxleFBhY2thZ2VQYXRoKTtcbiAgICAgIGNvbnN0IGxleFdlYnBhY2tDbGkgPSBwYXRoUmVzb2x2ZShsZXhQYWNrYWdlRGlyLCAnbm9kZV9tb2R1bGVzL3dlYnBhY2stY2xpL2Jpbi9jbGkuanMnKTtcbiAgICAgIGNvbnN0IGxleFdlYnBhY2tCaW4gPSBwYXRoUmVzb2x2ZShsZXhQYWNrYWdlRGlyLCAnbm9kZV9tb2R1bGVzLy5iaW4vd2VicGFjaycpO1xuXG4gICAgICBpZihleGlzdHNTeW5jKGxleFdlYnBhY2tDbGkpKSB7XG4gICAgICAgIHdlYnBhY2tQYXRoID0gbGV4V2VicGFja0NsaTtcbiAgICAgIH0gZWxzZSBpZihleGlzdHNTeW5jKGxleFdlYnBhY2tCaW4pKSB7XG4gICAgICAgIHdlYnBhY2tQYXRoID0gbGV4V2VicGFja0JpbjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHdlYnBhY2tQYXRoID0gJ25weCc7XG4gICAgICB9XG4gICAgfSBjYXRjaHtcbiAgICAgIHdlYnBhY2tQYXRoID0gJ25weCc7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgcG9zc2libGVXZWJwYWNrQ29uZmlnUGF0aHMgPSBbXG4gICAgcGF0aFJlc29sdmUocHJvY2Vzcy5jd2QoKSwgJ3dlYnBhY2suY29uZmlnLmpzJyksXG4gICAgcGF0aFJlc29sdmUocHJvY2Vzcy5jd2QoKSwgJ3dlYnBhY2suY29uZmlnLnRzJyksXG4gICAgcGF0aFJlc29sdmUocHJvY2Vzcy5jd2QoKSwgJ25vZGVfbW9kdWxlcy9AbmxhYnMvbGV4L3dlYnBhY2suY29uZmlnLmpzJyksXG4gICAgcGF0aFJlc29sdmUocHJvY2Vzcy5jd2QoKSwgJ25vZGVfbW9kdWxlcy9AbmxhYnMvbGV4L3dlYnBhY2suY29uZmlnLnRzJyksXG4gICAgcGF0aFJlc29sdmUoY3VycmVudERpcm5hbWUsICdub2RlX21vZHVsZXMvQG5sYWJzL2xleC93ZWJwYWNrLmNvbmZpZy5qcycpLFxuICAgIHBhdGhSZXNvbHZlKGN1cnJlbnREaXJuYW1lLCAnbm9kZV9tb2R1bGVzL0BubGFicy9sZXgvd2VicGFjay5jb25maWcudHMnKSxcbiAgICBwYXRoUmVzb2x2ZShwcm9jZXNzLmVudi5MRVhfSE9NRSB8fCAnL25vZGVfbW9kdWxlcy9AbmxhYnMvbGV4JywgJ3dlYnBhY2suY29uZmlnLmpzJyksXG4gICAgcGF0aFJlc29sdmUocHJvY2Vzcy5lbnYuTEVYX0hPTUUgfHwgJy9ub2RlX21vZHVsZXMvQG5sYWJzL2xleCcsICd3ZWJwYWNrLmNvbmZpZy50cycpXG4gIF07XG5cbiAgbGV0IHdlYnBhY2tDb25maWcgPSAnJztcblxuICBmb3IoY29uc3QgcGF0aCBvZiBwb3NzaWJsZVdlYnBhY2tDb25maWdQYXRocykge1xuICAgIGlmKGV4aXN0c1N5bmMocGF0aCkpIHtcbiAgICAgIHdlYnBhY2tDb25maWcgPSBwYXRoO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgaWYoIXdlYnBhY2tDb25maWcpIHtcbiAgICBjb25zdCBsZXhQYWNrYWdlUGF0aCA9IGdldExleFBhY2thZ2VKc29uUGF0aCgpO1xuICAgIGNvbnN0IGxleFBhY2thZ2VEaXIgPSBkaXJuYW1lKGxleFBhY2thZ2VQYXRoKTtcbiAgICBjb25zdCBsZXhXZWJwYWNrQ29uZmlnID0gcGF0aFJlc29sdmUobGV4UGFja2FnZURpciwgJ3dlYnBhY2suY29uZmlnLmpzJyk7XG5cbiAgICBpZihleGlzdHNTeW5jKGxleFdlYnBhY2tDb25maWcpKSB7XG4gICAgICB3ZWJwYWNrQ29uZmlnID0gbGV4V2VicGFja0NvbmZpZztcbiAgICB9IGVsc2Uge1xuICAgICAgd2VicGFja0NvbmZpZyA9IHBhdGhSZXNvbHZlKGN1cnJlbnREaXJuYW1lLCAnLi4vLi4vd2VicGFjay5jb25maWcuanMnKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge3dlYnBhY2tDb25maWcsIHdlYnBhY2tQYXRofTtcbn07Il0sIm5hbWVzIjpbImZpbmRGaWxlVXAiLCJleGlzdHNTeW5jIiwicmVhZEZpbGVTeW5jIiwic3luYyIsImdsb2JTeW5jIiwicmVzb2x2ZSIsInBhdGhSZXNvbHZlIiwiZGlybmFtZSIsIkxleENvbmZpZyIsImdldERpck5hbWUiLCJldmFsIiwicHJvY2VzcyIsImN3ZCIsImdldExleFBhY2thZ2VKc29uUGF0aCIsIkxFWF9QQUNLQUdFX05BTUUiLCJsZXhJbk5vZGVNb2R1bGVzIiwic3RhcnREaXIiLCJlbnYiLCJMRVhfUk9PVCIsIkVycm9yIiwiYXJndiIsImluY2x1ZGVzIiwiZGlyIiwiaSIsInBrZ1BhdGgiLCJwa2ciLCJKU09OIiwicGFyc2UiLCJuYW1lIiwicGFyZW50IiwicmVsYXRpdmVGaWxlUGF0aCIsImZpbGVuYW1lIiwiZGlyUGF0aCIsImJhY2tVcCIsIm5lc3REZXB0aCIsImZpbGVQYXRoIiwicHJldmlvdXNQYXRoIiwiQXJyYXkiLCJmaWxsIiwibWFwIiwiam9pbiIsInJlbGF0aXZlTm9kZVBhdGgiLCJwYWNrYWdlTmFtZSIsIm5vZGVQYXRoIiwiY2hlY2tEaXIiLCJjaGVja1BhdGgiLCJwYXJlbnREaXIiLCJyZXNvbHZlQmluYXJ5UGF0aCIsImJpbmFyeU5hbWUiLCJsZXhEaXIiLCJnZXRMZXhEaXIiLCJsZXhCaW5QYXRoIiwibGV4UGFja2FnZUJpblBhdGgiLCJsZXhQYWNrYWdlQmluSnNQYXRoIiwibGV4UGFja2FnZUJpbkNqc1BhdGgiLCJjaGVja0JpblVwIiwibW9ub3JlcG9CaW5QYXRoIiwiZnJvbUN3ZCIsImZyb21MZXgiLCJmaW5kVGFpbHdpbmRDc3NQYXRoIiwidGFpbHdpbmRQYXR0ZXJucyIsInBhdHRlcm4iLCJmaWxlcyIsImlnbm9yZSIsImxlbmd0aCIsInJlc29sdmVXZWJwYWNrUGF0aHMiLCJjdXJyZW50RGlybmFtZSIsInBvc3NpYmxlV2VicGFja1BhdGhzIiwiTEVYX0hPTUUiLCJ3ZWJwYWNrUGF0aCIsInBhdGgiLCJsZXhQYWNrYWdlUGF0aCIsImxleFBhY2thZ2VEaXIiLCJsZXhXZWJwYWNrQ2xpIiwibGV4V2VicGFja0JpbiIsInBvc3NpYmxlV2VicGFja0NvbmZpZ1Bh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
|
|
133
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9maWxlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDE4LVByZXNlbnQsIE5pdHJvZ2VuIExhYnMsIEluYy5cbiAqIENvcHlyaWdodHMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLiBTZWUgdGhlIGFjY29tcGFueWluZyBMSUNFTlNFIGZpbGUgZm9yIHRlcm1zLlxuICovXG5pbXBvcnQgZmluZEZpbGVVcCBmcm9tICdmaW5kLWZpbGUtdXAnO1xuaW1wb3J0IHtleGlzdHNTeW5jLCByZWFkRmlsZVN5bmN9IGZyb20gJ2ZzJztcbmltcG9ydCB7c3luYyBhcyBnbG9iU3luY30gZnJvbSAnZ2xvYic7XG5pbXBvcnQge3Jlc29sdmUgYXMgcGF0aFJlc29sdmUsIGRpcm5hbWV9IGZyb20gJ3BhdGgnO1xuaW1wb3J0IHtmaWxlVVJMVG9QYXRofSBmcm9tICd1cmwnO1xuXG5pbXBvcnQge0xleENvbmZpZ30gZnJvbSAnLi4vTGV4Q29uZmlnLmpzJztcblxuZXhwb3J0IGNvbnN0IGdldERpck5hbWUgPSAoKTogc3RyaW5nID0+IGRpcm5hbWUoZmlsZVVSTFRvUGF0aChpbXBvcnQubWV0YS51cmwpKTtcblxuZXhwb3J0IGNvbnN0IGdldExleFBhY2thZ2VKc29uUGF0aCA9ICgpOiBzdHJpbmcgPT4ge1xuICBjb25zdCBMRVhfUEFDS0FHRV9OQU1FID0gJ0BubGFicy9sZXgnO1xuXG4gIGNvbnN0IGxleEluTm9kZU1vZHVsZXMgPSBwYXRoUmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCAnbm9kZV9tb2R1bGVzL0BubGFicy9sZXgvcGFja2FnZS5qc29uJyk7XG5cbiAgaWYoZXhpc3RzU3luYyhsZXhJbk5vZGVNb2R1bGVzKSkge1xuICAgIHJldHVybiBsZXhJbk5vZGVNb2R1bGVzO1xuICB9XG5cbiAgY29uc3Qgc3RhcnREaXIgPSBwcm9jZXNzLmVudi5MRVhfUk9PVCB8fCBnZXREaXJOYW1lKCk7XG5cbiAgbGV0IGRpciA9IHN0YXJ0RGlyO1xuICBmb3IobGV0IGkgPSAwOyBpIDwgODsgaSsrKSB7XG4gICAgY29uc3QgcGtnUGF0aCA9IHBhdGhSZXNvbHZlKGRpciwgJ3BhY2thZ2UuanNvbicpO1xuICAgIGlmKGV4aXN0c1N5bmMocGtnUGF0aCkpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHBrZyA9IEpTT04ucGFyc2UocmVhZEZpbGVTeW5jKHBrZ1BhdGgsICd1dGY4JykpO1xuICAgICAgICBpZihwa2cubmFtZSA9PT0gTEVYX1BBQ0tBR0VfTkFNRSkge1xuICAgICAgICAgIHJldHVybiBwa2dQYXRoO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoe1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBwYXJlbnQgPSBkaXJuYW1lKGRpcik7XG4gICAgaWYocGFyZW50ID09PSBkaXIpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBkaXIgPSBwYXJlbnQ7XG4gIH1cblxuICByZXR1cm4gcGF0aFJlc29sdmUocHJvY2Vzcy5jd2QoKSwgJ3BhY2thZ2UuanNvbicpO1xufTtcblxuZXhwb3J0IGNvbnN0IHJlbGF0aXZlRmlsZVBhdGggPSAoZmlsZW5hbWU6IHN0cmluZywgZGlyUGF0aDogc3RyaW5nID0gJy4vJywgYmFja1VwOiBudW1iZXIgPSAwKTogc3RyaW5nID0+IHtcbiAgY29uc3QgbmVzdERlcHRoOiBudW1iZXIgPSAxMDtcblxuICBpZihiYWNrVXApIHtcbiAgICBjb25zdCBmaWxlUGF0aDogc3RyaW5nID0gZmluZEZpbGVVcC5zeW5jKGZpbGVuYW1lLCBkaXJQYXRoLCBuZXN0RGVwdGgpO1xuICAgIGNvbnN0IHByZXZpb3VzUGF0aDogc3RyaW5nID0gQXJyYXkoYmFja1VwKS5maWxsKG51bGwpLm1hcCgoKSA9PiAnLi4vJykuam9pbignJyk7XG4gICAgcmV0dXJuIHBhdGhSZXNvbHZlKGZpbGVQYXRoLCBwcmV2aW91c1BhdGgpO1xuICB9XG5cbiAgcmV0dXJuIGZpbmRGaWxlVXAuc3luYyhmaWxlbmFtZSwgZGlyUGF0aCwgbmVzdERlcHRoKTtcbn07XG5cbmV4cG9ydCBjb25zdCByZWxhdGl2ZU5vZGVQYXRoID0gKHBhY2thZ2VOYW1lOiBzdHJpbmcsIGRpclBhdGg6IHN0cmluZyA9IHByb2Nlc3MuY3dkKCkpOiBzdHJpbmcgPT4ge1xuICBjb25zdCBub2RlUGF0aCA9IHBhdGhSZXNvbHZlKGRpclBhdGgsICdub2RlX21vZHVsZXMnLCBwYWNrYWdlTmFtZSk7XG4gIGlmKGV4aXN0c1N5bmMobm9kZVBhdGgpKSB7XG4gICAgcmV0dXJuIG5vZGVQYXRoO1xuICB9XG5cbiAgLy8gQ2hlY2sgcGFyZW50IGRpcmVjdG9yaWVzIGZvciBub2RlX21vZHVsZXNcbiAgbGV0IGNoZWNrRGlyID0gZGlyUGF0aDtcbiAgZm9yKGxldCBpID0gMDsgaSA8IDEwOyBpKyspIHtcbiAgICBjb25zdCBjaGVja1BhdGggPSBwYXRoUmVzb2x2ZShjaGVja0RpciwgJ25vZGVfbW9kdWxlcycsIHBhY2thZ2VOYW1lKTtcbiAgICBpZihleGlzdHNTeW5jKGNoZWNrUGF0aCkpIHtcbiAgICAgIHJldHVybiBjaGVja1BhdGg7XG4gICAgfVxuICAgIGNvbnN0IHBhcmVudERpciA9IHBhdGhSZXNvbHZlKGNoZWNrRGlyLCAnLi4nKTtcbiAgICBpZihwYXJlbnREaXIgPT09IGNoZWNrRGlyKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgY2hlY2tEaXIgPSBwYXJlbnREaXI7XG4gIH1cblxuICByZXR1cm4gJyc7XG59O1xuXG5leHBvcnQgY29uc3QgcmVzb2x2ZUJpbmFyeVBhdGggPSAoYmluYXJ5TmFtZTogc3RyaW5nLCBwYWNrYWdlTmFtZT86IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gIGNvbnN0IGxleERpciA9IExleENvbmZpZy5nZXRMZXhEaXIoKTtcblxuICBjb25zdCBsZXhCaW5QYXRoID0gcGF0aFJlc29sdmUobGV4RGlyLCBgbm9kZV9tb2R1bGVzLy5iaW4vJHtiaW5hcnlOYW1lfWApO1xuICBpZihleGlzdHNTeW5jKGxleEJpblBhdGgpKSB7XG4gICAgcmV0dXJuIGxleEJpblBhdGg7XG4gIH1cblxuICBpZihwYWNrYWdlTmFtZSkge1xuICAgIGNvbnN0IGxleFBhY2thZ2VCaW5QYXRoID0gcGF0aFJlc29sdmUobGV4RGlyLCBgbm9kZV9tb2R1bGVzLyR7cGFja2FnZU5hbWV9L2Jpbi8ke2JpbmFyeU5hbWV9YCk7XG4gICAgaWYoZXhpc3RzU3luYyhsZXhQYWNrYWdlQmluUGF0aCkpIHtcbiAgICAgIHJldHVybiBsZXhQYWNrYWdlQmluUGF0aDtcbiAgICB9XG5cbiAgICBjb25zdCBsZXhQYWNrYWdlQmluSnNQYXRoID0gcGF0aFJlc29sdmUobGV4RGlyLCBgbm9kZV9tb2R1bGVzLyR7cGFja2FnZU5hbWV9L2Jpbi8ke2JpbmFyeU5hbWV9LmpzYCk7XG4gICAgaWYoZXhpc3RzU3luYyhsZXhQYWNrYWdlQmluSnNQYXRoKSkge1xuICAgICAgcmV0dXJuIGxleFBhY2thZ2VCaW5Kc1BhdGg7XG4gICAgfVxuXG4gICAgY29uc3QgbGV4UGFja2FnZUJpbkNqc1BhdGggPSBwYXRoUmVzb2x2ZShsZXhEaXIsIGBub2RlX21vZHVsZXMvJHtwYWNrYWdlTmFtZX0vYmluLyR7YmluYXJ5TmFtZX0uY2pzYCk7XG4gICAgaWYoZXhpc3RzU3luYyhsZXhQYWNrYWdlQmluQ2pzUGF0aCkpIHtcbiAgICAgIHJldHVybiBsZXhQYWNrYWdlQmluQ2pzUGF0aDtcbiAgICB9XG4gIH1cblxuICBjb25zdCBjaGVja0JpblVwID0gKHN0YXJ0RGlyOiBzdHJpbmcpID0+IHtcbiAgICBsZXQgY2hlY2tEaXIgPSBzdGFydERpcjtcbiAgICBmb3IobGV0IGkgPSAwOyBpIDwgNTsgaSsrKSB7XG4gICAgICBjb25zdCBtb25vcmVwb0JpblBhdGggPSBwYXRoUmVzb2x2ZShjaGVja0RpciwgYG5vZGVfbW9kdWxlcy8uYmluLyR7YmluYXJ5TmFtZX1gKTtcbiAgICAgIGlmKGV4aXN0c1N5bmMobW9ub3JlcG9CaW5QYXRoKSkge1xuICAgICAgICByZXR1cm4gbW9ub3JlcG9CaW5QYXRoO1xuICAgICAgfVxuICAgICAgY29uc3QgcGFyZW50RGlyID0gcGF0aFJlc29sdmUoY2hlY2tEaXIsICcuLicpO1xuICAgICAgaWYocGFyZW50RGlyID09PSBjaGVja0Rpcikge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNoZWNrRGlyID0gcGFyZW50RGlyO1xuICAgIH1cbiAgICByZXR1cm4gJyc7XG4gIH07XG5cbiAgY29uc3QgZnJvbUN3ZCA9IGNoZWNrQmluVXAocHJvY2Vzcy5jd2QoKSk7XG4gIGlmKGZyb21Dd2QpIHtcbiAgICByZXR1cm4gZnJvbUN3ZDtcbiAgfVxuXG4gIGNvbnN0IGZyb21MZXggPSBjaGVja0JpblVwKGxleERpcik7XG4gIGlmKGZyb21MZXgpIHtcbiAgICByZXR1cm4gZnJvbUxleDtcbiAgfVxuXG4gIHJldHVybiAnJztcbn07XG5cbmV4cG9ydCBjb25zdCBmaW5kVGFpbHdpbmRDc3NQYXRoID0gKCk6IHN0cmluZyA9PiB7XG4gIGNvbnN0IHRhaWx3aW5kUGF0dGVybnMgPSBbJyoqL3RhaWx3aW5kLmNzcyddO1xuXG4gIGZvcihjb25zdCBwYXR0ZXJuIG9mIHRhaWx3aW5kUGF0dGVybnMpIHtcbiAgICBjb25zdCBmaWxlcyA9IGdsb2JTeW5jKHBhdHRlcm4sIHtcbiAgICAgIGN3ZDogcHJvY2Vzcy5jd2QoKSxcbiAgICAgIGlnbm9yZTogWycqKi9ub2RlX21vZHVsZXMvKionLCAnKiovZGlzdC8qKicsICcqKi9saWIvKionLCAnKiovYnVpbGQvKionLCAnKiovLnN0b3J5Ym9vay8qKiddXG4gICAgfSk7XG5cbiAgICBpZihmaWxlcy5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gcGF0aFJlc29sdmUocHJvY2Vzcy5jd2QoKSwgZmlsZXNbMF0pO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiAnJztcbn07XG4iXSwibmFtZXMiOlsiZmluZEZpbGVVcCIsImV4aXN0c1N5bmMiLCJyZWFkRmlsZVN5bmMiLCJzeW5jIiwiZ2xvYlN5bmMiLCJyZXNvbHZlIiwicGF0aFJlc29sdmUiLCJkaXJuYW1lIiwiZmlsZVVSTFRvUGF0aCIsIkxleENvbmZpZyIsImdldERpck5hbWUiLCJ1cmwiLCJnZXRMZXhQYWNrYWdlSnNvblBhdGgiLCJMRVhfUEFDS0FHRV9OQU1FIiwibGV4SW5Ob2RlTW9kdWxlcyIsInByb2Nlc3MiLCJjd2QiLCJzdGFydERpciIsImVudiIsIkxFWF9ST09UIiwiZGlyIiwiaSIsInBrZ1BhdGgiLCJwa2ciLCJKU09OIiwicGFyc2UiLCJuYW1lIiwicGFyZW50IiwicmVsYXRpdmVGaWxlUGF0aCIsImZpbGVuYW1lIiwiZGlyUGF0aCIsImJhY2tVcCIsIm5lc3REZXB0aCIsImZpbGVQYXRoIiwicHJldmlvdXNQYXRoIiwiQXJyYXkiLCJmaWxsIiwibWFwIiwiam9pbiIsInJlbGF0aXZlTm9kZVBhdGgiLCJwYWNrYWdlTmFtZSIsIm5vZGVQYXRoIiwiY2hlY2tEaXIiLCJjaGVja1BhdGgiLCJwYXJlbnREaXIiLCJyZXNvbHZlQmluYXJ5UGF0aCIsImJpbmFyeU5hbWUiLCJsZXhEaXIiLCJnZXRMZXhEaXIiLCJsZXhCaW5QYXRoIiwibGV4UGFja2FnZUJpblBhdGgiLCJsZXhQYWNrYWdlQmluSnNQYXRoIiwibGV4UGFja2FnZUJpbkNqc1BhdGgiLCJjaGVja0JpblVwIiwibW9ub3JlcG9CaW5QYXRoIiwiZnJvbUN3ZCIsImZyb21MZXgiLCJmaW5kVGFpbHdpbmRDc3NQYXRoIiwidGFpbHdpbmRQYXR0ZXJucyIsInBhdHRlcm4iLCJmaWxlcyIsImlnbm9yZSIsImxlbmd0aCJdLCJtYXBwaW5ncyI6IkFBQUE7OztDQUdDLEdBQ0QsT0FBT0EsZ0JBQWdCLGVBQWU7QUFDdEMsU0FBUUMsVUFBVSxFQUFFQyxZQUFZLFFBQU8sS0FBSztBQUM1QyxTQUFRQyxRQUFRQyxRQUFRLFFBQU8sT0FBTztBQUN0QyxTQUFRQyxXQUFXQyxXQUFXLEVBQUVDLE9BQU8sUUFBTyxPQUFPO0FBQ3JELFNBQVFDLGFBQWEsUUFB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
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export type StaticRenderOutput = Record<string, string> | string;
|
|
2
|
+
export type StaticRender = ((locals: StaticRenderLocals) => Promise<StaticRenderOutput> | StaticRenderOutput) | ((locals: StaticRenderLocals, callback: (output: StaticRenderOutput) => void) => void);
|
|
3
|
+
export interface StaticRenderLocals {
|
|
4
|
+
readonly assets: Record<string, string>;
|
|
5
|
+
readonly path: string;
|
|
6
|
+
}
|
|
7
|
+
export interface StaticSiteOptions {
|
|
8
|
+
readonly assets?: Record<string, string>;
|
|
9
|
+
readonly crawl?: boolean;
|
|
10
|
+
readonly outputPath: string;
|
|
11
|
+
readonly paths?: string[] | string;
|
|
12
|
+
readonly render: StaticRender;
|
|
13
|
+
}
|
|
14
|
+
export declare const relativePathsFromHtml: (currentPath: string, source: string) => string[];
|
|
15
|
+
export declare const renderStaticSite: (options: StaticSiteOptions) => Promise<void>;
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2018-Present, Nitrogen Labs, Inc.
|
|
3
|
+
* Copyrights licensed under the MIT License. See the accompanying LICENSE file for terms.
|
|
4
|
+
*/ import { existsSync, mkdirSync, writeFileSync } from 'fs';
|
|
5
|
+
import { posix as path, resolve } from 'path';
|
|
6
|
+
const attributeValues = (html, element, attribute)=>{
|
|
7
|
+
const expression = new RegExp(`<${element}\\b[^>]*\\b${attribute}\\s*=\\s*(?:"([^"]*)"|'([^']*)'|([^\\s>]+))`, 'gi');
|
|
8
|
+
const values = [];
|
|
9
|
+
let match = expression.exec(html);
|
|
10
|
+
while(match){
|
|
11
|
+
values.push(match[1] ?? match[2] ?? match[3]);
|
|
12
|
+
match = expression.exec(html);
|
|
13
|
+
}
|
|
14
|
+
return values;
|
|
15
|
+
};
|
|
16
|
+
export const relativePathsFromHtml = (currentPath, source)=>[
|
|
17
|
+
...attributeValues(source, 'a', 'href'),
|
|
18
|
+
...attributeValues(source, 'iframe', 'src')
|
|
19
|
+
].filter((reference)=>reference.length > 0 && !reference.startsWith('#') && !reference.startsWith('//') && !/^[a-z][a-z\d+.-]*:/i.test(reference)).map((reference)=>{
|
|
20
|
+
const resolved = new URL(reference, new URL(currentPath, 'https://lex.local'));
|
|
21
|
+
return `${resolved.pathname}${resolved.search}`;
|
|
22
|
+
});
|
|
23
|
+
const pathToAssetName = (outputPath)=>{
|
|
24
|
+
let outputFileName = outputPath.replace(/^(\/|\\)/, '');
|
|
25
|
+
if (!/\.(html?)$/i.test(outputFileName)) {
|
|
26
|
+
outputFileName = path.join(outputFileName, 'index.html');
|
|
27
|
+
}
|
|
28
|
+
return outputFileName;
|
|
29
|
+
};
|
|
30
|
+
const invokeRender = async (render, locals)=>{
|
|
31
|
+
if (render.length < 2) {
|
|
32
|
+
return Promise.resolve(render(locals));
|
|
33
|
+
}
|
|
34
|
+
return new Promise((resolveOutput)=>{
|
|
35
|
+
render(locals, resolveOutput);
|
|
36
|
+
});
|
|
37
|
+
};
|
|
38
|
+
export const renderStaticSite = async (options)=>{
|
|
39
|
+
const { assets = {}, crawl = true, outputPath, paths = [
|
|
40
|
+
'/'
|
|
41
|
+
], render } = options;
|
|
42
|
+
const pending = Array.isArray(paths) ? [
|
|
43
|
+
...paths
|
|
44
|
+
] : [
|
|
45
|
+
paths
|
|
46
|
+
];
|
|
47
|
+
const renderedPaths = new Set();
|
|
48
|
+
while(pending.length > 0){
|
|
49
|
+
const currentPath = pending.shift();
|
|
50
|
+
if (!currentPath || renderedPaths.has(currentPath)) {
|
|
51
|
+
continue;
|
|
52
|
+
}
|
|
53
|
+
renderedPaths.add(currentPath);
|
|
54
|
+
const locals = {
|
|
55
|
+
assets,
|
|
56
|
+
path: currentPath
|
|
57
|
+
};
|
|
58
|
+
// Rendering is sequential because each page can enqueue newly discovered routes.
|
|
59
|
+
// eslint-disable-next-line no-await-in-loop
|
|
60
|
+
const output = await invokeRender(render, locals);
|
|
61
|
+
const outputByPath = typeof output === 'object' ? output : {
|
|
62
|
+
[currentPath]: output
|
|
63
|
+
};
|
|
64
|
+
for (const [renderedPath, html] of Object.entries(outputByPath)){
|
|
65
|
+
const assetName = pathToAssetName(renderedPath);
|
|
66
|
+
const filePath = resolve(outputPath, assetName);
|
|
67
|
+
if (!existsSync(filePath)) {
|
|
68
|
+
mkdirSync(resolve(filePath, '..'), {
|
|
69
|
+
recursive: true
|
|
70
|
+
});
|
|
71
|
+
writeFileSync(filePath, html);
|
|
72
|
+
}
|
|
73
|
+
if (crawl) {
|
|
74
|
+
pending.push(...relativePathsFromHtml(renderedPath, html));
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
};
|
|
79
|
+
|
|
80
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9zdGF0aWNTaXRlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDE4LVByZXNlbnQsIE5pdHJvZ2VuIExhYnMsIEluYy5cbiAqIENvcHlyaWdodHMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLiBTZWUgdGhlIGFjY29tcGFueWluZyBMSUNFTlNFIGZpbGUgZm9yIHRlcm1zLlxuICovXG5pbXBvcnQge2V4aXN0c1N5bmMsIG1rZGlyU3luYywgd3JpdGVGaWxlU3luY30gZnJvbSAnZnMnO1xuaW1wb3J0IHtwb3NpeCBhcyBwYXRoLCByZXNvbHZlfSBmcm9tICdwYXRoJztcblxuZXhwb3J0IHR5cGUgU3RhdGljUmVuZGVyT3V0cHV0ID0gUmVjb3JkPHN0cmluZywgc3RyaW5nPiB8IHN0cmluZztcbmV4cG9ydCB0eXBlIFN0YXRpY1JlbmRlciA9ICgobG9jYWxzOiBTdGF0aWNSZW5kZXJMb2NhbHMpID0+IFByb21pc2U8U3RhdGljUmVuZGVyT3V0cHV0PiB8IFN0YXRpY1JlbmRlck91dHB1dCkgfFxuICAoKGxvY2FsczogU3RhdGljUmVuZGVyTG9jYWxzLCBjYWxsYmFjazogKG91dHB1dDogU3RhdGljUmVuZGVyT3V0cHV0KSA9PiB2b2lkKSA9PiB2b2lkKTtcblxuZXhwb3J0IGludGVyZmFjZSBTdGF0aWNSZW5kZXJMb2NhbHMge1xuICByZWFkb25seSBhc3NldHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIHJlYWRvbmx5IHBhdGg6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTdGF0aWNTaXRlT3B0aW9ucyB7XG4gIHJlYWRvbmx5IGFzc2V0cz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIHJlYWRvbmx5IGNyYXdsPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgb3V0cHV0UGF0aDogc3RyaW5nO1xuICByZWFkb25seSBwYXRocz86IHN0cmluZ1tdIHwgc3RyaW5nO1xuICByZWFkb25seSByZW5kZXI6IFN0YXRpY1JlbmRlcjtcbn1cblxuY29uc3QgYXR0cmlidXRlVmFsdWVzID0gKGh0bWw6IHN0cmluZywgZWxlbWVudDogc3RyaW5nLCBhdHRyaWJ1dGU6IHN0cmluZyk6IHN0cmluZ1tdID0+IHtcbiAgY29uc3QgZXhwcmVzc2lvbiA9IG5ldyBSZWdFeHAoYDwke2VsZW1lbnR9XFxcXGJbXj5dKlxcXFxiJHthdHRyaWJ1dGV9XFxcXHMqPVxcXFxzKig/OlwiKFteXCJdKilcInwnKFteJ10qKSd8KFteXFxcXHM+XSspKWAsICdnaScpO1xuICBjb25zdCB2YWx1ZXM6IHN0cmluZ1tdID0gW107XG4gIGxldCBtYXRjaCA9IGV4cHJlc3Npb24uZXhlYyhodG1sKTtcblxuICB3aGlsZShtYXRjaCkge1xuICAgIHZhbHVlcy5wdXNoKG1hdGNoWzFdID8/IG1hdGNoWzJdID8/IG1hdGNoWzNdKTtcbiAgICBtYXRjaCA9IGV4cHJlc3Npb24uZXhlYyhodG1sKTtcbiAgfVxuXG4gIHJldHVybiB2YWx1ZXM7XG59O1xuXG5leHBvcnQgY29uc3QgcmVsYXRpdmVQYXRoc0Zyb21IdG1sID0gKGN1cnJlbnRQYXRoOiBzdHJpbmcsIHNvdXJjZTogc3RyaW5nKTogc3RyaW5nW10gPT4gW1xuICAuLi5hdHRyaWJ1dGVWYWx1ZXMoc291cmNlLCAnYScsICdocmVmJyksXG4gIC4uLmF0dHJpYnV0ZVZhbHVlcyhzb3VyY2UsICdpZnJhbWUnLCAnc3JjJylcbl1cbiAgLmZpbHRlcigocmVmZXJlbmNlKSA9PiByZWZlcmVuY2UubGVuZ3RoID4gMCAmJiAhcmVmZXJlbmNlLnN0YXJ0c1dpdGgoJyMnKSAmJiAhcmVmZXJlbmNlLnN0YXJ0c1dpdGgoJy8vJykgJiYgIS9eW2Etel1bYS16XFxkKy4tXSo6L2kudGVzdChyZWZlcmVuY2UpKVxuICAubWFwKChyZWZlcmVuY2UpID0+IHtcbiAgICBjb25zdCByZXNvbHZlZCA9IG5ldyBVUkwocmVmZXJlbmNlLCBuZXcgVVJMKGN1cnJlbnRQYXRoLCAnaHR0cHM6Ly9sZXgubG9jYWwnKSk7XG4gICAgcmV0dXJuIGAke3Jlc29sdmVkLnBhdGhuYW1lfSR7cmVzb2x2ZWQuc2VhcmNofWA7XG4gIH0pO1xuXG5jb25zdCBwYXRoVG9Bc3NldE5hbWUgPSAob3V0cHV0UGF0aDogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgbGV0IG91dHB1dEZpbGVOYW1lID0gb3V0cHV0UGF0aC5yZXBsYWNlKC9eKFxcL3xcXFxcKS8sICcnKTtcbiAgaWYoIS9cXC4oaHRtbD8pJC9pLnRlc3Qob3V0cHV0RmlsZU5hbWUpKSB7XG4gICAgb3V0cHV0RmlsZU5hbWUgPSBwYXRoLmpvaW4ob3V0cHV0RmlsZU5hbWUsICdpbmRleC5odG1sJyk7XG4gIH1cbiAgcmV0dXJuIG91dHB1dEZpbGVOYW1lO1xufTtcblxuY29uc3QgaW52b2tlUmVuZGVyID0gYXN5bmMgKHJlbmRlcjogU3RhdGljUmVuZGVyLCBsb2NhbHM6IFN0YXRpY1JlbmRlckxvY2Fscyk6IFByb21pc2U8U3RhdGljUmVuZGVyT3V0cHV0PiA9PiB7XG4gIGlmKHJlbmRlci5sZW5ndGggPCAyKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgocmVuZGVyIGFzIChcbiAgICAgIHJlbmRlckxvY2FsczogU3RhdGljUmVuZGVyTG9jYWxzXG4gICAgKSA9PiBQcm9taXNlPFN0YXRpY1JlbmRlck91dHB1dD4gfCBTdGF0aWNSZW5kZXJPdXRwdXQpKGxvY2FscykpO1xuICB9XG5cbiAgcmV0dXJuIG5ldyBQcm9taXNlPFN0YXRpY1JlbmRlck91dHB1dD4oKHJlc29sdmVPdXRwdXQpID0+IHtcbiAgICAocmVuZGVyIGFzIChcbiAgICAgIHJlbmRlckxvY2FsczogU3RhdGljUmVuZGVyTG9jYWxzLFxuICAgICAgY2FsbGJhY2s6ICh2YWx1ZTogU3RhdGljUmVuZGVyT3V0cHV0KSA9PiB2b2lkXG4gICAgKSA9PiB2b2lkKShsb2NhbHMsIHJlc29sdmVPdXRwdXQpO1xuICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCByZW5kZXJTdGF0aWNTaXRlID0gYXN5bmMgKG9wdGlvbnM6IFN0YXRpY1NpdGVPcHRpb25zKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gIGNvbnN0IHthc3NldHMgPSB7fSwgY3Jhd2wgPSB0cnVlLCBvdXRwdXRQYXRoLCBwYXRocyA9IFsnLyddLCByZW5kZXJ9ID0gb3B0aW9ucztcbiAgY29uc3QgcGVuZGluZyA9IEFycmF5LmlzQXJyYXkocGF0aHMpID8gWy4uLnBhdGhzXSA6IFtwYXRoc107XG4gIGNvbnN0IHJlbmRlcmVkUGF0aHMgPSBuZXcgU2V0PHN0cmluZz4oKTtcblxuICB3aGlsZShwZW5kaW5nLmxlbmd0aCA+IDApIHtcbiAgICBjb25zdCBjdXJyZW50UGF0aCA9IHBlbmRpbmcuc2hpZnQoKTtcbiAgICBpZighY3VycmVudFBhdGggfHwgcmVuZGVyZWRQYXRocy5oYXMoY3VycmVudFBhdGgpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgcmVuZGVyZWRQYXRocy5hZGQoY3VycmVudFBhdGgpO1xuXG4gICAgY29uc3QgbG9jYWxzID0ge2Fzc2V0cywgcGF0aDogY3VycmVudFBhdGh9O1xuICAgIC8vIFJlbmRlcmluZyBpcyBzZXF1ZW50aWFsIGJlY2F1c2UgZWFjaCBwYWdlIGNhbiBlbnF1ZXVlIG5ld2x5IGRpc2NvdmVyZWQgcm91dGVzLlxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1hd2FpdC1pbi1sb29wXG4gICAgY29uc3Qgb3V0cHV0ID0gYXdhaXQgaW52b2tlUmVuZGVyKHJlbmRlciwgbG9jYWxzKTtcbiAgICBjb25zdCBvdXRwdXRCeVBhdGggPSB0eXBlb2Ygb3V0cHV0ID09PSAnb2JqZWN0JyA/IG91dHB1dCA6IHtbY3VycmVudFBhdGhdOiBvdXRwdXR9O1xuXG4gICAgZm9yKGNvbnN0IFtyZW5kZXJlZFBhdGgsIGh0bWxdIG9mIE9iamVjdC5lbnRyaWVzKG91dHB1dEJ5UGF0aCkpIHtcbiAgICAgIGNvbnN0IGFzc2V0TmFtZSA9IHBhdGhUb0Fzc2V0TmFtZShyZW5kZXJlZFBhdGgpO1xuICAgICAgY29uc3QgZmlsZVBhdGggPSByZXNvbHZlKG91dHB1dFBhdGgsIGFzc2V0TmFtZSk7XG4gICAgICBpZighZXhpc3RzU3luYyhmaWxlUGF0aCkpIHtcbiAgICAgICAgbWtkaXJTeW5jKHJlc29sdmUoZmlsZVBhdGgsICcuLicpLCB7cmVjdXJzaXZlOiB0cnVlfSk7XG4gICAgICAgIHdyaXRlRmlsZVN5bmMoZmlsZVBhdGgsIGh0bWwpO1xuICAgICAgfVxuXG4gICAgICBpZihjcmF3bCkge1xuICAgICAgICBwZW5kaW5nLnB1c2goLi4ucmVsYXRpdmVQYXRoc0Zyb21IdG1sKHJlbmRlcmVkUGF0aCwgaHRtbCkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufTtcbiJdLCJuYW1lcyI6WyJleGlzdHNTeW5jIiwibWtkaXJTeW5jIiwid3JpdGVGaWxlU3luYyIsInBvc2l4IiwicGF0aCIsInJlc29sdmUiLCJhdHRyaWJ1dGVWYWx1ZXMiLCJodG1sIiwiZWxlbWVudCIsImF0dHJpYnV0ZSIsImV4cHJlc3Npb24iLCJSZWdFeHAiLCJ2YWx1ZXMiLCJtYXRjaCIsImV4ZWMiLCJwdXNoIiwicmVsYXRpdmVQYXRoc0Zyb21IdG1sIiwiY3VycmVudFBhdGgiLCJzb3VyY2UiLCJmaWx0ZXIiLCJyZWZlcmVuY2UiLCJsZW5ndGgiLCJzdGFydHNXaXRoIiwidGVzdCIsIm1hcCIsInJlc29sdmVkIiwiVVJMIiwicGF0aG5hbWUiLCJzZWFyY2giLCJwYXRoVG9Bc3NldE5hbWUiLCJvdXRwdXRQYXRoIiwib3V0cHV0RmlsZU5hbWUiLCJyZXBsYWNlIiwiam9pbiIsImludm9rZVJlbmRlciIsInJlbmRlciIsImxvY2FscyIsIlByb21pc2UiLCJyZXNvbHZlT3V0cHV0IiwicmVuZGVyU3RhdGljU2l0ZSIsIm9wdGlvbnMiLCJhc3NldHMiLCJjcmF3bCIsInBhdGhzIiwicGVuZGluZyIsIkFycmF5IiwiaXNBcnJheSIsInJlbmRlcmVkUGF0aHMiLCJTZXQiLCJzaGlmdCIsImhhcyIsImFkZCIsIm91dHB1dCIsIm91dHB1dEJ5UGF0aCIsInJlbmRlcmVkUGF0aCIsIk9iamVjdCIsImVudHJpZXMiLCJhc3NldE5hbWUiLCJmaWxlUGF0aCIsInJlY3Vyc2l2ZSJdLCJtYXBwaW5ncyI6IkFBQUE7OztDQUdDLEdBQ0QsU0FBUUEsVUFBVSxFQUFFQyxTQUFTLEVBQUVDLGFBQWEsUUFBTyxLQUFLO0FBQ3hELFNBQVFDLFNBQVNDLElBQUksRUFBRUMsT0FBTyxRQUFPLE9BQU87QUFtQjVDLE1BQU1DLGtCQUFrQixDQUFDQyxNQUFjQyxTQUFpQkM7SUFDdEQsTUFBTUMsYUFBYSxJQUFJQyxPQUFPLENBQUMsQ0FBQyxFQUFFSCxRQUFRLFdBQVcsRUFBRUMsVUFBVSwyQ0FBMkMsQ0FBQyxFQUFFO0lBQy9HLE1BQU1HLFNBQW1CLEVBQUU7SUFDM0IsSUFBSUMsUUFBUUgsV0FBV0ksSUFBSSxDQUFDUDtJQUU1QixNQUFNTSxNQUFPO1FBQ1hELE9BQU9HLElBQUksQ0FBQ0YsS0FBSyxDQUFDLEVBQUUsSUFBSUEsS0FBSyxDQUFDLEVBQUUsSUFBSUEsS0FBSyxDQUFDLEVBQUU7UUFDNUNBLFFBQVFILFdBQVdJLElBQUksQ0FBQ1A7SUFDMUI7SUFFQSxPQUFPSztBQUNUO0FBRUEsT0FBTyxNQUFNSSx3QkFBd0IsQ0FBQ0MsYUFBcUJDLFNBQTZCO1dBQ25GWixnQkFBZ0JZLFFBQVEsS0FBSztXQUM3QlosZ0JBQWdCWSxRQUFRLFVBQVU7S0FDdEMsQ0FDRUMsTUFBTSxDQUFDLENBQUNDLFlBQWNBLFVBQVVDLE1BQU0sR0FBRyxLQUFLLENBQUNELFVBQVVFLFVBQVUsQ0FBQyxRQUFRLENBQUNGLFVBQVVFLFVBQVUsQ0FBQyxTQUFTLENBQUMsc0JBQXNCQyxJQUFJLENBQUNILFlBQ3ZJSSxHQUFHLENBQUMsQ0FBQ0o7UUFDSixNQUFNSyxXQUFXLElBQUlDLElBQUlOLFdBQVcsSUFBSU0sSUFBSVQsYUFBYTtRQUN6RCxPQUFPLEdBQUdRLFNBQVNFLFFBQVEsR0FBR0YsU0FBU0csTUFBTSxFQUFFO0lBQ2pELEdBQUc7QUFFTCxNQUFNQyxrQkFBa0IsQ0FBQ0M7SUFDdkIsSUFBSUMsaUJBQWlCRCxXQUFXRSxPQUFPLENBQUMsWUFBWTtJQUNwRCxJQUFHLENBQUMsY0FBY1QsSUFBSSxDQUFDUSxpQkFBaUI7UUFDdENBLGlCQUFpQjNCLEtBQUs2QixJQUFJLENBQUNGLGdCQUFnQjtJQUM3QztJQUNBLE9BQU9BO0FBQ1Q7QUFFQSxNQUFNRyxlQUFlLE9BQU9DLFFBQXNCQztJQUNoRCxJQUFHRCxPQUFPZCxNQUFNLEdBQUcsR0FBRztRQUNwQixPQUFPZ0IsUUFBUWhDLE9BQU8sQ0FBQyxBQUFDOEIsT0FFK0JDO0lBQ3pEO0lBRUEsT0FBTyxJQUFJQyxRQUE0QixDQUFDQztRQUNyQ0gsT0FHVUMsUUFBUUU7SUFDckI7QUFDRjtBQUVBLE9BQU8sTUFBTUMsbUJBQW1CLE9BQU9DO0lBQ3JDLE1BQU0sRUFBQ0MsU0FBUyxDQUFDLENBQUMsRUFBRUMsUUFBUSxJQUFJLEVBQUVaLFVBQVUsRUFBRWEsUUFBUTtRQUFDO0tBQUksRUFBRVIsTUFBTSxFQUFDLEdBQUdLO0lBQ3ZFLE1BQU1JLFVBQVVDLE1BQU1DLE9BQU8sQ0FBQ0gsU0FBUztXQUFJQTtLQUFNLEdBQUc7UUFBQ0E7S0FBTTtJQUMzRCxNQUFNSSxnQkFBZ0IsSUFBSUM7SUFFMUIsTUFBTUosUUFBUXZCLE1BQU0sR0FBRyxFQUFHO1FBQ3hCLE1BQU1KLGNBQWMyQixRQUFRSyxLQUFLO1FBQ2pDLElBQUcsQ0FBQ2hDLGVBQWU4QixjQUFjRyxHQUFHLENBQUNqQyxjQUFjO1lBQ2pEO1FBQ0Y7UUFDQThCLGNBQWNJLEdBQUcsQ0FBQ2xDO1FBRWxCLE1BQU1tQixTQUFTO1lBQUNLO1lBQVFyQyxNQUFNYTtRQUFXO1FBQ3pDLGlGQUFpRjtRQUNqRiw0Q0FBNEM7UUFDNUMsTUFBTW1DLFNBQVMsTUFBTWxCLGFBQWFDLFFBQVFDO1FBQzFDLE1BQU1pQixlQUFlLE9BQU9ELFdBQVcsV0FBV0EsU0FBUztZQUFDLENBQUNuQyxZQUFZLEVBQUVtQztRQUFNO1FBRWpGLEtBQUksTUFBTSxDQUFDRSxjQUFjL0MsS0FBSyxJQUFJZ0QsT0FBT0MsT0FBTyxDQUFDSCxjQUFlO1lBQzlELE1BQU1JLFlBQVk1QixnQkFBZ0J5QjtZQUNsQyxNQUFNSSxXQUFXckQsUUFBUXlCLFlBQVkyQjtZQUNyQyxJQUFHLENBQUN6RCxXQUFXMEQsV0FBVztnQkFDeEJ6RCxVQUFVSSxRQUFRcUQsVUFBVSxPQUFPO29CQUFDQyxXQUFXO2dCQUFJO2dCQUNuRHpELGNBQWN3RCxVQUFVbkQ7WUFDMUI7WUFFQSxJQUFHbUMsT0FBTztnQkFDUkUsUUFBUTdCLElBQUksSUFBSUMsc0JBQXNCc0MsY0FBYy9DO1lBQ3REO1FBQ0Y7SUFDRjtBQUNGLEVBQUUifQ==
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { LexConfigType } from '../../LexConfig.js';
|
|
2
|
+
interface GeneratedFavicons {
|
|
3
|
+
readonly files: ReadonlyArray<{
|
|
4
|
+
contents: string;
|
|
5
|
+
name: string;
|
|
6
|
+
}>;
|
|
7
|
+
readonly html: string[];
|
|
8
|
+
readonly images: ReadonlyArray<{
|
|
9
|
+
contents: Buffer;
|
|
10
|
+
name: string;
|
|
11
|
+
}>;
|
|
12
|
+
}
|
|
13
|
+
export declare const generateLexFavicons: (config: LexConfigType) => Promise<GeneratedFavicons | null>;
|
|
14
|
+
export declare const copyLexWebAssets: (config: LexConfigType) => Promise<void>;
|
|
15
|
+
export declare const optimizeLexWebAssets: (config: LexConfigType) => Promise<void>;
|
|
16
|
+
export declare const compressLexWebAssets: (config: LexConfigType) => void;
|
|
17
|
+
export declare const getDevAsset: (config: LexConfigType, requestPath: string) => Promise<Buffer | null>;
|
|
18
|
+
export declare const getAssetRelativePath: (config: LexConfigType, filePath: string) => string;
|
|
19
|
+
export {};
|