@studiokloek/vite-config 0.1.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/LICENSE +21 -0
- package/README.md +16 -0
- package/bin/build.js +33 -0
- package/bin/development.js +4 -0
- package/dist/index.js +477 -0
- package/dist/public.d.ts +18 -0
- package/package.json +97 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2021 Studio Kloek
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# vite-config
|
|
2
|
+
Externalize our vitejs config setup, so we can use it in multiple projects. Right now built for internal use, maybe useful for the world later...
|
|
3
|
+
|
|
4
|
+
# Installation
|
|
5
|
+
```
|
|
6
|
+
npm i @studiokloek/vite-config --save-dev
|
|
7
|
+
```
|
|
8
|
+
|
|
9
|
+
# Usage
|
|
10
|
+
```
|
|
11
|
+
npm run kloek-development
|
|
12
|
+
npm run kloek-build --empty-output-dir --base "https://example.com/test"
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
# Under development
|
|
16
|
+
This module is currently under development and may not be ready for production.
|
package/bin/build.js
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import meow from 'meow';
|
|
3
|
+
import {kloekBuild} from '../dist/index.js';
|
|
4
|
+
|
|
5
|
+
const cli = meow(
|
|
6
|
+
`
|
|
7
|
+
Usage
|
|
8
|
+
$ kloek-build
|
|
9
|
+
|
|
10
|
+
Options:
|
|
11
|
+
--path PATH set the base path
|
|
12
|
+
|
|
13
|
+
Other options:
|
|
14
|
+
-e, --empty-out-dir empty output dir before building
|
|
15
|
+
`,
|
|
16
|
+
{
|
|
17
|
+
importMeta: import.meta,
|
|
18
|
+
flags: {
|
|
19
|
+
emptyOutDir: {
|
|
20
|
+
type: 'boolean',
|
|
21
|
+
alias: 'e',
|
|
22
|
+
default: true,
|
|
23
|
+
},
|
|
24
|
+
base: {
|
|
25
|
+
type: 'string',
|
|
26
|
+
alias: 'b',
|
|
27
|
+
default: '/',
|
|
28
|
+
},
|
|
29
|
+
},
|
|
30
|
+
},
|
|
31
|
+
);
|
|
32
|
+
|
|
33
|
+
await kloekBuild(cli.flags);
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,477 @@
|
|
|
1
|
+
import { normalizePath, createServer, build } from 'vite';
|
|
2
|
+
import { readFileSync, existsSync, promises } from 'node:fs';
|
|
3
|
+
import path from 'node:path';
|
|
4
|
+
import { fileURLToPath } from 'node:url';
|
|
5
|
+
import legacyPlugin from '@vitejs/plugin-legacy';
|
|
6
|
+
import bannerPlugin from 'vite-plugin-banner';
|
|
7
|
+
import { createHtmlPlugin } from 'vite-plugin-html';
|
|
8
|
+
import imageminPlugin2 from 'vite-plugin-imagemin';
|
|
9
|
+
import { svelte } from '@sveltejs/vite-plugin-svelte';
|
|
10
|
+
import fullReload from 'vite-plugin-full-reload';
|
|
11
|
+
import tsconfigPathsPlugin from 'vite-tsconfig-paths';
|
|
12
|
+
import os from 'node:os';
|
|
13
|
+
import handlebarsPlugin2 from 'vite-plugin-handlebars';
|
|
14
|
+
|
|
15
|
+
function imageminPlugin(environment, options) {
|
|
16
|
+
return imageminPlugin2({
|
|
17
|
+
disable: environment.mode !== 'production',
|
|
18
|
+
mozjpeg: {
|
|
19
|
+
quality: options?.jpeg ?? 80,
|
|
20
|
+
},
|
|
21
|
+
pngquant: {
|
|
22
|
+
strip: true,
|
|
23
|
+
speed: 2,
|
|
24
|
+
dithering: 0.25,
|
|
25
|
+
quality: options?.png ?? [0.5, 0.7],
|
|
26
|
+
},
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
function renderGameManifest(pageId, settings, config) {
|
|
31
|
+
const manifest = {
|
|
32
|
+
short_name: `${settings.meta.apptitle}`,
|
|
33
|
+
name: `${settings.meta.title}`,
|
|
34
|
+
description: `${settings.meta.description}`,
|
|
35
|
+
scope: `${config.base}${pageId}.html`,
|
|
36
|
+
start_url: `${config.base}${pageId}.html`,
|
|
37
|
+
display: 'fullscreen',
|
|
38
|
+
orientation: `${settings.options.orientation ?? 'landscape'}`,
|
|
39
|
+
icons: [
|
|
40
|
+
{
|
|
41
|
+
src: `${config.base}meta/${settings.info.id}/icons/chrome-touch-icon-192x192.png`,
|
|
42
|
+
type: 'image/png',
|
|
43
|
+
sizes: '192x192',
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
src: `${config.base}meta/${settings.info.id}/icons/icon.png`,
|
|
47
|
+
type: 'image/png',
|
|
48
|
+
sizes: '1024x1024',
|
|
49
|
+
},
|
|
50
|
+
],
|
|
51
|
+
background_color: `${settings.options.backgroundColor}`,
|
|
52
|
+
theme_color: `${settings.options.backgroundColor}`,
|
|
53
|
+
};
|
|
54
|
+
return `${JSON.stringify(manifest, null, 2)}\n`;
|
|
55
|
+
}
|
|
56
|
+
function manifestPlugin(games) {
|
|
57
|
+
let config;
|
|
58
|
+
return {
|
|
59
|
+
name: 'vite-plugin-kloek-manifest',
|
|
60
|
+
enforce: 'post',
|
|
61
|
+
apply: 'build',
|
|
62
|
+
async configResolved(resolvedConfig) {
|
|
63
|
+
config = resolvedConfig;
|
|
64
|
+
},
|
|
65
|
+
generateBundle(_, bundle) {
|
|
66
|
+
// Voor iedere app een manifest maken:
|
|
67
|
+
for (const [pageId, settings] of Object.entries(games)) {
|
|
68
|
+
bundle[`${pageId}.webmanifest`] = {
|
|
69
|
+
isAsset: true,
|
|
70
|
+
type: 'asset',
|
|
71
|
+
name: undefined,
|
|
72
|
+
source: renderGameManifest(pageId, settings, config),
|
|
73
|
+
fileName: `${pageId}.webmanifest`,
|
|
74
|
+
};
|
|
75
|
+
bundle[`${pageId}-serviceworker.js`] = {
|
|
76
|
+
isAsset: true,
|
|
77
|
+
type: 'asset',
|
|
78
|
+
name: undefined,
|
|
79
|
+
source: "self.addEventListener('fetch', function() { return; });",
|
|
80
|
+
fileName: `${pageId}-serviceworker.js`,
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
},
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
// Build plugins
|
|
88
|
+
function buildPlugins(options) {
|
|
89
|
+
// No build? no plugins..
|
|
90
|
+
if (options.environment.command !== 'build') {
|
|
91
|
+
return [];
|
|
92
|
+
}
|
|
93
|
+
const plugins = [];
|
|
94
|
+
if (options.config.build.legacy === true) {
|
|
95
|
+
// Make sure the page works in older browsers
|
|
96
|
+
plugins.push(legacyPlugin({
|
|
97
|
+
targets: options.config.build.browserslist ?? [],
|
|
98
|
+
}));
|
|
99
|
+
}
|
|
100
|
+
const pages = Object.keys(options.settings.games).map((gameId) => {
|
|
101
|
+
return {
|
|
102
|
+
filename: `${gameId}.html`,
|
|
103
|
+
template: `${gameId}.html`,
|
|
104
|
+
};
|
|
105
|
+
});
|
|
106
|
+
plugins.push(
|
|
107
|
+
// Minify image assets
|
|
108
|
+
imageminPlugin(options.environment, options.config.build.imageQuality),
|
|
109
|
+
// Make the html output smaller
|
|
110
|
+
...createHtmlPlugin({ minify: true, pages }),
|
|
111
|
+
// Add a banner to generated js/css
|
|
112
|
+
bannerPlugin(`
|
|
113
|
+
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
|
|
114
|
+
|
|
115
|
+
__ , _ _
|
|
116
|
+
/ ) | o /| / | | | |
|
|
117
|
+
\\__ _|_ __| __ |__/ | | __ _ | |
|
|
118
|
+
\\ | | | / | | / \\_ | \\ |/ / \\_|/ |/_)
|
|
119
|
+
(___/ |_/ \\_/|_/\\_/|_/|_/\\__/ | \\_/|__/\\__/ |__/| \\_/
|
|
120
|
+
|
|
121
|
+
Concept, ontwerp & ontwikkeling
|
|
122
|
+
https://studiokloek.nl
|
|
123
|
+
|
|
124
|
+
Studio Kloek ❤ PixiJS, GSAP & howler.js
|
|
125
|
+
|
|
126
|
+
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
|
|
127
|
+
|
|
128
|
+
`), manifestPlugin(options.settings.games));
|
|
129
|
+
return plugins;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
function mergeGameSettings(generic, game, infoTypes) {
|
|
133
|
+
const settings = {};
|
|
134
|
+
// Alle props op één level diep mergen
|
|
135
|
+
for (const property of infoTypes) {
|
|
136
|
+
settings[property] = {
|
|
137
|
+
...generic[property],
|
|
138
|
+
...game[property],
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
return settings;
|
|
142
|
+
}
|
|
143
|
+
function parsePackageGamesSettings(packageSettings) {
|
|
144
|
+
// Merge settings
|
|
145
|
+
const infoTypes = Object.keys(packageSettings.generic);
|
|
146
|
+
const { generic } = packageSettings;
|
|
147
|
+
const allSettings = {
|
|
148
|
+
development: generic,
|
|
149
|
+
games: {},
|
|
150
|
+
};
|
|
151
|
+
for (const game of packageSettings.games ?? []) {
|
|
152
|
+
const settings = mergeGameSettings(generic, game, infoTypes);
|
|
153
|
+
// Zorg er voor dat page altijd gezet is
|
|
154
|
+
const pageId = settings.info.page ?? settings.info.id ?? 'unknown';
|
|
155
|
+
settings.info.page = settings.info.id;
|
|
156
|
+
// Sla settings op onder page id
|
|
157
|
+
allSettings.games[pageId] = settings;
|
|
158
|
+
}
|
|
159
|
+
return allSettings;
|
|
160
|
+
}
|
|
161
|
+
function getPageToServe(config, settings) {
|
|
162
|
+
// Hoeveel pages zijn er?
|
|
163
|
+
const pageIds = Object.keys(settings);
|
|
164
|
+
const page = pageIds.length === 1 ? pageIds[0] : 'development';
|
|
165
|
+
return path.posix.join(config.build.basePath, `${page}.html${config.dev.serveParams ?? ''}`);
|
|
166
|
+
}
|
|
167
|
+
function getPageIdFromUrl(url) {
|
|
168
|
+
if (!url) {
|
|
169
|
+
return '';
|
|
170
|
+
}
|
|
171
|
+
let pathname;
|
|
172
|
+
try {
|
|
173
|
+
pathname = new URL(url, 'https://studiokloek.nl').pathname;
|
|
174
|
+
}
|
|
175
|
+
catch {
|
|
176
|
+
return '';
|
|
177
|
+
}
|
|
178
|
+
// If request is not html , directly return next()
|
|
179
|
+
if (!pathname.endsWith('.html') && pathname !== '/') {
|
|
180
|
+
return '';
|
|
181
|
+
}
|
|
182
|
+
// Pagina id opvragen
|
|
183
|
+
const index = pathname.lastIndexOf('/');
|
|
184
|
+
const fileName = index === -1 ? pathname : pathname.slice(index + 1);
|
|
185
|
+
return fileName.replace('.html', '');
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
function defineBuildConfig(options) {
|
|
189
|
+
const input = {};
|
|
190
|
+
for (const gameId of Object.keys(options.settings.games)) {
|
|
191
|
+
input[gameId] = path.resolve(options.root, `${gameId}.html`);
|
|
192
|
+
}
|
|
193
|
+
// Libs die aparte js krijgen:
|
|
194
|
+
const vendorChunks = ['firebase', 'pixi', 'lodash', 'capacitor', 'gsap'];
|
|
195
|
+
return {
|
|
196
|
+
reportCompressedSize: false,
|
|
197
|
+
brotliSize: false,
|
|
198
|
+
chunkSizeWarningLimit: 1000,
|
|
199
|
+
outDir: '../public',
|
|
200
|
+
assetsDir: 'generated',
|
|
201
|
+
rollupOptions: {
|
|
202
|
+
input,
|
|
203
|
+
output: {
|
|
204
|
+
manualChunks(id) {
|
|
205
|
+
if (id.includes('node_modules')) {
|
|
206
|
+
const name = id
|
|
207
|
+
.toString()
|
|
208
|
+
.split('node_modules/')[1]
|
|
209
|
+
.split('/')[0]
|
|
210
|
+
.toString();
|
|
211
|
+
for (const value of vendorChunks) {
|
|
212
|
+
if (name.includes(value)) {
|
|
213
|
+
return value;
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
return '';
|
|
218
|
+
},
|
|
219
|
+
},
|
|
220
|
+
},
|
|
221
|
+
};
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
function readJSON(path) {
|
|
225
|
+
try {
|
|
226
|
+
const data = readFileSync(path);
|
|
227
|
+
return JSON.parse(data.toString());
|
|
228
|
+
}
|
|
229
|
+
catch {
|
|
230
|
+
//
|
|
231
|
+
}
|
|
232
|
+
return false;
|
|
233
|
+
}
|
|
234
|
+
const cwd = normalizePath(process.cwd());
|
|
235
|
+
|
|
236
|
+
// Helpers voor handlebars
|
|
237
|
+
function handlebarsPlugin(partialDirectory, options) {
|
|
238
|
+
return handlebarsPlugin2({
|
|
239
|
+
partialDirectory,
|
|
240
|
+
helpers: {
|
|
241
|
+
json: (object, indent = 0) => JSON.stringify(object, undefined, indent),
|
|
242
|
+
concat: (...arguments_) => arguments_.slice(0, -1).join(''),
|
|
243
|
+
eq: (a, b) => a === b,
|
|
244
|
+
neq: (a, b) => a !== b,
|
|
245
|
+
isdefined: (value) => value !== undefined,
|
|
246
|
+
'resolve-root'(p) {
|
|
247
|
+
// Tijdelijke hack voor bug in handlebars plugin
|
|
248
|
+
// zie ook https://github.com/alexlafroscia/vite-plugin-handlebars/pull/129
|
|
249
|
+
const resolvedPath = path.resolve(options.root, p);
|
|
250
|
+
return os.platform() === 'win32' ? `/${resolvedPath}` : resolvedPath;
|
|
251
|
+
},
|
|
252
|
+
},
|
|
253
|
+
context(pagePath) {
|
|
254
|
+
const gameId = getPageIdFromUrl(pagePath);
|
|
255
|
+
if (!gameId) {
|
|
256
|
+
return {};
|
|
257
|
+
}
|
|
258
|
+
if (gameId === 'development') {
|
|
259
|
+
// Pagina settings teruggeven
|
|
260
|
+
return {
|
|
261
|
+
env: options.environment,
|
|
262
|
+
data: options.settings.development,
|
|
263
|
+
games: options.settings.games,
|
|
264
|
+
};
|
|
265
|
+
}
|
|
266
|
+
// Op basis van pad data bepalen
|
|
267
|
+
const settings = options.settings.games[gameId];
|
|
268
|
+
// Pagina settings teruggeven
|
|
269
|
+
return {
|
|
270
|
+
env: options.environment,
|
|
271
|
+
data: settings ?? {},
|
|
272
|
+
};
|
|
273
|
+
},
|
|
274
|
+
});
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
const PAGE_TEMPLATE = '{{> game data=data}}';
|
|
278
|
+
const DEVELOPMENT_TEMPLATE = '{{> development data=data}}';
|
|
279
|
+
async function renderTemporaryFile(filePath) {
|
|
280
|
+
// Bestaat die file nog niet?
|
|
281
|
+
if (!existsSync(filePath)) {
|
|
282
|
+
// Aanmaken
|
|
283
|
+
await promises.writeFile(filePath, PAGE_TEMPLATE);
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
function htmlPlugin(games) {
|
|
287
|
+
return {
|
|
288
|
+
name: 'vite-plugin-kloek-html',
|
|
289
|
+
enforce: 'pre',
|
|
290
|
+
async config(_config, environment) {
|
|
291
|
+
// Bij een build maken we tijdelijk files aan
|
|
292
|
+
if (environment.command === 'build') {
|
|
293
|
+
const actions = [];
|
|
294
|
+
for (const pageId of Object.keys(games)) {
|
|
295
|
+
// Pad naar file
|
|
296
|
+
const filePath = path.resolve(cwd, 'source', `${pageId}.html`);
|
|
297
|
+
actions.push(renderTemporaryFile(filePath));
|
|
298
|
+
}
|
|
299
|
+
await Promise.all(actions);
|
|
300
|
+
}
|
|
301
|
+
},
|
|
302
|
+
configureServer(server) {
|
|
303
|
+
return () => {
|
|
304
|
+
// Zorg er voor dat tijdens development de pagina ge-rendered terug gegeven wordt wordt
|
|
305
|
+
server.middlewares.use('/', async (request, response, next) => {
|
|
306
|
+
const url = request?.url ?? '';
|
|
307
|
+
const pageId = getPageIdFromUrl(url);
|
|
308
|
+
if (!pageId) {
|
|
309
|
+
next();
|
|
310
|
+
}
|
|
311
|
+
if (pageId === 'development') {
|
|
312
|
+
// Development? geef terug...
|
|
313
|
+
response.end(await server.transformIndexHtml(url, DEVELOPMENT_TEMPLATE, request.originalUrl));
|
|
314
|
+
}
|
|
315
|
+
else if (Object.keys(games).includes(pageId)) {
|
|
316
|
+
// Bestaande game? zorg er voor dat de template ge-rendered wordt
|
|
317
|
+
response.end(await server.transformIndexHtml(url, PAGE_TEMPLATE, request.originalUrl));
|
|
318
|
+
}
|
|
319
|
+
else {
|
|
320
|
+
// Niks gevonden
|
|
321
|
+
response.end('404');
|
|
322
|
+
}
|
|
323
|
+
});
|
|
324
|
+
};
|
|
325
|
+
},
|
|
326
|
+
async closeBundle() {
|
|
327
|
+
// Verwijder de aangemaakte files
|
|
328
|
+
const actions = [];
|
|
329
|
+
for (const pageId of Object.keys(games)) {
|
|
330
|
+
// Pad naar file
|
|
331
|
+
const filePath = path.resolve(cwd, 'source', `${pageId}.html`);
|
|
332
|
+
if (existsSync(filePath)) {
|
|
333
|
+
try {
|
|
334
|
+
actions.push(promises.rm(filePath));
|
|
335
|
+
}
|
|
336
|
+
catch {
|
|
337
|
+
//
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
await Promise.all(actions);
|
|
342
|
+
},
|
|
343
|
+
};
|
|
344
|
+
}
|
|
345
|
+
|
|
346
|
+
function servePlugins(options) {
|
|
347
|
+
return [
|
|
348
|
+
htmlPlugin(options.settings.games),
|
|
349
|
+
...svelte({
|
|
350
|
+
// Hot: false,
|
|
351
|
+
experimental: {
|
|
352
|
+
prebundleSvelteLibraries: true,
|
|
353
|
+
useVitePreprocess: true,
|
|
354
|
+
},
|
|
355
|
+
}),
|
|
356
|
+
tsconfigPathsPlugin({
|
|
357
|
+
root: path.resolve(cwd),
|
|
358
|
+
extensions: ['.ts', '.json'],
|
|
359
|
+
loose: true,
|
|
360
|
+
}),
|
|
361
|
+
fullReload(['script/**/*.ts', 'svelte/**/*.svelte'], {
|
|
362
|
+
root: path.join(path.resolve(cwd), 'source'),
|
|
363
|
+
log: true,
|
|
364
|
+
always: true,
|
|
365
|
+
}),
|
|
366
|
+
handlebarsPlugin(options.config.serve.partials, options),
|
|
367
|
+
];
|
|
368
|
+
}
|
|
369
|
+
|
|
370
|
+
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
371
|
+
async function defineKloekViteConfig(environment) {
|
|
372
|
+
const pkg = readJSON(path.resolve(cwd, 'package.json'));
|
|
373
|
+
const kloekConfig = pkg.vite;
|
|
374
|
+
const browserslist = pkg.browserslist;
|
|
375
|
+
const options = {
|
|
376
|
+
root: path.resolve(cwd, 'source'),
|
|
377
|
+
environment,
|
|
378
|
+
settings: parsePackageGamesSettings(pkg.settings),
|
|
379
|
+
config: {
|
|
380
|
+
...kloekConfig,
|
|
381
|
+
build: { ...kloekConfig.build, browserslist },
|
|
382
|
+
serve: {
|
|
383
|
+
partials: [
|
|
384
|
+
path.resolve(__dirname, 'partials'),
|
|
385
|
+
path.resolve(cwd, 'source', 'partials'),
|
|
386
|
+
],
|
|
387
|
+
},
|
|
388
|
+
},
|
|
389
|
+
};
|
|
390
|
+
const config = {
|
|
391
|
+
logLevel: 'info',
|
|
392
|
+
base: kloekConfig.build.basePath,
|
|
393
|
+
root: options.root,
|
|
394
|
+
publicDir: 'static',
|
|
395
|
+
define: {},
|
|
396
|
+
// OptimizeDeps: {
|
|
397
|
+
// exclude: ['@studiokloek/ts-core-lib'],
|
|
398
|
+
// },
|
|
399
|
+
esbuild: {
|
|
400
|
+
legalComments: 'none',
|
|
401
|
+
},
|
|
402
|
+
resolve: {
|
|
403
|
+
alias: {
|
|
404
|
+
lodash: 'lodash-es',
|
|
405
|
+
'@meta': path.resolve(cwd, 'source', 'static', 'meta'),
|
|
406
|
+
'@fonts': path.resolve(cwd, 'source', 'static', 'fonts'),
|
|
407
|
+
},
|
|
408
|
+
},
|
|
409
|
+
css: {
|
|
410
|
+
preprocessorOptions: {
|
|
411
|
+
scss: {
|
|
412
|
+
charset: false,
|
|
413
|
+
// AdditionalData: `@charset "UTF-8"`,
|
|
414
|
+
},
|
|
415
|
+
},
|
|
416
|
+
},
|
|
417
|
+
plugins: [...servePlugins(options)],
|
|
418
|
+
};
|
|
419
|
+
switch (environment.command) {
|
|
420
|
+
case 'serve':
|
|
421
|
+
config.server = {
|
|
422
|
+
https: {
|
|
423
|
+
key: readFileSync(path.resolve(cwd, 'cert', 'key.pem')),
|
|
424
|
+
cert: readFileSync(path.resolve(cwd, 'cert', 'cert.pem')),
|
|
425
|
+
},
|
|
426
|
+
open: getPageToServe(options.config, options.settings.games),
|
|
427
|
+
};
|
|
428
|
+
break;
|
|
429
|
+
case 'build':
|
|
430
|
+
config.build = defineBuildConfig(options);
|
|
431
|
+
config.plugins = [
|
|
432
|
+
...(config.plugins ? config.plugins : []),
|
|
433
|
+
...buildPlugins(options),
|
|
434
|
+
];
|
|
435
|
+
break;
|
|
436
|
+
}
|
|
437
|
+
return config;
|
|
438
|
+
}
|
|
439
|
+
|
|
440
|
+
async function kloekDevelopment() {
|
|
441
|
+
const config = await defineKloekViteConfig({
|
|
442
|
+
command: 'serve',
|
|
443
|
+
mode: 'development',
|
|
444
|
+
});
|
|
445
|
+
const server = await createServer({
|
|
446
|
+
configFile: false,
|
|
447
|
+
envFile: false,
|
|
448
|
+
...config,
|
|
449
|
+
});
|
|
450
|
+
await server.listen();
|
|
451
|
+
server.printUrls();
|
|
452
|
+
}
|
|
453
|
+
async function kloekBuild(flags) {
|
|
454
|
+
const config = await defineKloekViteConfig({
|
|
455
|
+
command: 'build',
|
|
456
|
+
mode: 'production',
|
|
457
|
+
});
|
|
458
|
+
// Empty out the Output dir before building?
|
|
459
|
+
if (flags.emptyOutDir !== undefined) {
|
|
460
|
+
config.build = {
|
|
461
|
+
...config.build,
|
|
462
|
+
emptyOutDir: flags.emptyOutDir,
|
|
463
|
+
};
|
|
464
|
+
}
|
|
465
|
+
// Different base path
|
|
466
|
+
if (typeof flags.base === 'string') {
|
|
467
|
+
config.base = flags.base;
|
|
468
|
+
}
|
|
469
|
+
await build({
|
|
470
|
+
configFile: false,
|
|
471
|
+
envFile: false,
|
|
472
|
+
...config,
|
|
473
|
+
});
|
|
474
|
+
}
|
|
475
|
+
|
|
476
|
+
export { kloekBuild, kloekDevelopment };
|
|
477
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VzIjpbIi4uL3NyYy9wbHVnaW5zL2xpYi9pbWFnZS1wbHVnaW4udHMiLCIuLi9zcmMvcGx1Z2lucy9saWIvbWFuaWZlc3QtcGx1Z2luLnRzIiwiLi4vc3JjL3BsdWdpbnMvYnVpbGQudHMiLCIuLi9zcmMvdXRpbHMvZ2FtZS50cyIsIi4uL3NyYy91dGlscy9idWlsZC50cyIsIi4uL3NyYy91dGlscy9pbmRleC50cyIsIi4uL3NyYy9wbHVnaW5zL2xpYi9oYW5kbGViYXJzLXBsdWdpbi50cyIsIi4uL3NyYy9wbHVnaW5zL2xpYi9odG1sLXBsdWdpbi50cyIsIi4uL3NyYy9wbHVnaW5zL3NlcnZlLnRzIiwiLi4vc3JjL2NvbmZpZy50cyIsIi4uL3NyYy9pbmRleC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbmZpZ0VudiwgUGx1Z2lufSBmcm9tICd2aXRlJztcbmltcG9ydCBpbWFnZW1pblBsdWdpbjIgZnJvbSAndml0ZS1wbHVnaW4taW1hZ2VtaW4nO1xuaW1wb3J0IHtJbWFnZVF1YWxpdHlDb25maWd9IGZyb20gJy4uLy4uL3V0aWxzL2ludGVyZmFjZXMnO1xuXG5leHBvcnQgZnVuY3Rpb24gaW1hZ2VtaW5QbHVnaW4oXG4gIGVudmlyb25tZW50OiBDb25maWdFbnYsXG4gIG9wdGlvbnM6IEltYWdlUXVhbGl0eUNvbmZpZyxcbik6IFBsdWdpbiB7XG4gIHJldHVybiBpbWFnZW1pblBsdWdpbjIoe1xuICAgIGRpc2FibGU6IGVudmlyb25tZW50Lm1vZGUgIT09ICdwcm9kdWN0aW9uJyxcbiAgICBtb3pqcGVnOiB7XG4gICAgICBxdWFsaXR5OiBvcHRpb25zPy5qcGVnID8/IDgwLFxuICAgIH0sXG4gICAgcG5ncXVhbnQ6IHtcbiAgICAgIHN0cmlwOiB0cnVlLFxuICAgICAgc3BlZWQ6IDIsXG4gICAgICBkaXRoZXJpbmc6IDAuMjUsXG4gICAgICBxdWFsaXR5OiBvcHRpb25zPy5wbmcgPz8gWzAuNSwgMC43XSxcbiAgICB9LFxuICB9KSBhcyBQbHVnaW47XG59XG4iLCJpbXBvcnQge1BsdWdpbiwgUmVzb2x2ZWRDb25maWd9IGZyb20gJ3ZpdGUnO1xuaW1wb3J0IHtHYW1lU2V0dGluZ3MsIEdhbWVzU2V0dGluZ3N9IGZyb20gJy4uLy4uL3V0aWxzL2ludGVyZmFjZXMnO1xuXG5mdW5jdGlvbiByZW5kZXJHYW1lTWFuaWZlc3QoXG4gIHBhZ2VJZDogc3RyaW5nLFxuICBzZXR0aW5nczogR2FtZVNldHRpbmdzLFxuICBjb25maWc6IFJlc29sdmVkQ29uZmlnLFxuKTogc3RyaW5nIHtcbiAgY29uc3QgbWFuaWZlc3QgPSB7XG4gICAgc2hvcnRfbmFtZTogYCR7c2V0dGluZ3MubWV0YS5hcHB0aXRsZX1gLFxuICAgIG5hbWU6IGAke3NldHRpbmdzLm1ldGEudGl0bGV9YCxcbiAgICBkZXNjcmlwdGlvbjogYCR7c2V0dGluZ3MubWV0YS5kZXNjcmlwdGlvbn1gLFxuICAgIHNjb3BlOiBgJHtjb25maWcuYmFzZX0ke3BhZ2VJZH0uaHRtbGAsXG4gICAgc3RhcnRfdXJsOiBgJHtjb25maWcuYmFzZX0ke3BhZ2VJZH0uaHRtbGAsXG4gICAgZGlzcGxheTogJ2Z1bGxzY3JlZW4nLFxuICAgIG9yaWVudGF0aW9uOiBgJHtzZXR0aW5ncy5vcHRpb25zLm9yaWVudGF0aW9uID8/ICdsYW5kc2NhcGUnfWAsXG4gICAgaWNvbnM6IFtcbiAgICAgIHtcbiAgICAgICAgc3JjOiBgJHtjb25maWcuYmFzZX1tZXRhLyR7c2V0dGluZ3MuaW5mby5pZH0vaWNvbnMvY2hyb21lLXRvdWNoLWljb24tMTkyeDE5Mi5wbmdgLFxuICAgICAgICB0eXBlOiAnaW1hZ2UvcG5nJyxcbiAgICAgICAgc2l6ZXM6ICcxOTJ4MTkyJyxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHNyYzogYCR7Y29uZmlnLmJhc2V9bWV0YS8ke3NldHRpbmdzLmluZm8uaWR9L2ljb25zL2ljb24ucG5nYCxcbiAgICAgICAgdHlwZTogJ2ltYWdlL3BuZycsXG4gICAgICAgIHNpemVzOiAnMTAyNHgxMDI0JyxcbiAgICAgIH0sXG4gICAgXSxcbiAgICBiYWNrZ3JvdW5kX2NvbG9yOiBgJHtzZXR0aW5ncy5vcHRpb25zLmJhY2tncm91bmRDb2xvcn1gLFxuICAgIHRoZW1lX2NvbG9yOiBgJHtzZXR0aW5ncy5vcHRpb25zLmJhY2tncm91bmRDb2xvcn1gLFxuICB9O1xuXG4gIHJldHVybiBgJHtKU09OLnN0cmluZ2lmeShtYW5pZmVzdCwgbnVsbCwgMil9XFxuYDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1hbmlmZXN0UGx1Z2luKGdhbWVzOiBHYW1lc1NldHRpbmdzKTogUGx1Z2luIHtcbiAgbGV0IGNvbmZpZzogUmVzb2x2ZWRDb25maWc7XG5cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAndml0ZS1wbHVnaW4ta2xvZWstbWFuaWZlc3QnLFxuICAgIGVuZm9yY2U6ICdwb3N0JyxcbiAgICBhcHBseTogJ2J1aWxkJyxcbiAgICBhc3luYyBjb25maWdSZXNvbHZlZChyZXNvbHZlZENvbmZpZzogUmVzb2x2ZWRDb25maWcpIHtcbiAgICAgIGNvbmZpZyA9IHJlc29sdmVkQ29uZmlnO1xuICAgIH0sXG4gICAgZ2VuZXJhdGVCdW5kbGUoXywgYnVuZGxlKSB7XG4gICAgICAvLyBWb29yIGllZGVyZSBhcHAgZWVuIG1hbmlmZXN0IG1ha2VuOlxuICAgICAgZm9yIChjb25zdCBbcGFnZUlkLCBzZXR0aW5nc10gb2YgT2JqZWN0LmVudHJpZXMoZ2FtZXMpKSB7XG4gICAgICAgIGJ1bmRsZVtgJHtwYWdlSWR9LndlYm1hbmlmZXN0YF0gPSB7XG4gICAgICAgICAgaXNBc3NldDogdHJ1ZSxcbiAgICAgICAgICB0eXBlOiAnYXNzZXQnLFxuICAgICAgICAgIG5hbWU6IHVuZGVmaW5lZCxcbiAgICAgICAgICBzb3VyY2U6IHJlbmRlckdhbWVNYW5pZmVzdChwYWdlSWQsIHNldHRpbmdzLCBjb25maWcpLFxuICAgICAgICAgIGZpbGVOYW1lOiBgJHtwYWdlSWR9LndlYm1hbmlmZXN0YCxcbiAgICAgICAgfTtcblxuICAgICAgICBidW5kbGVbYCR7cGFnZUlkfS1zZXJ2aWNld29ya2VyLmpzYF0gPSB7XG4gICAgICAgICAgaXNBc3NldDogdHJ1ZSxcbiAgICAgICAgICB0eXBlOiAnYXNzZXQnLFxuICAgICAgICAgIG5hbWU6IHVuZGVmaW5lZCxcbiAgICAgICAgICBzb3VyY2U6IFwic2VsZi5hZGRFdmVudExpc3RlbmVyKCdmZXRjaCcsIGZ1bmN0aW9uKCkgeyByZXR1cm47IH0pO1wiLFxuICAgICAgICAgIGZpbGVOYW1lOiBgJHtwYWdlSWR9LXNlcnZpY2V3b3JrZXIuanNgLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH0sXG4gIH07XG59XG4iLCJpbXBvcnQgbGVnYWN5UGx1Z2luIGZyb20gJ0B2aXRlanMvcGx1Z2luLWxlZ2FjeSc7XG5pbXBvcnQge1BsdWdpbn0gZnJvbSAndml0ZSc7XG5pbXBvcnQgYmFubmVyUGx1Z2luIGZyb20gJ3ZpdGUtcGx1Z2luLWJhbm5lcic7XG5pbXBvcnQge2NyZWF0ZUh0bWxQbHVnaW59IGZyb20gJ3ZpdGUtcGx1Z2luLWh0bWwnO1xuaW1wb3J0IHtWaXRlT3B0aW9uc30gZnJvbSBcIi4uL3V0aWxzL2ludGVyZmFjZXNcIjtcbmltcG9ydCB7aW1hZ2VtaW5QbHVnaW59IGZyb20gJy4vbGliL2ltYWdlLXBsdWdpbic7XG5pbXBvcnQge21hbmlmZXN0UGx1Z2lufSBmcm9tICcuL2xpYi9tYW5pZmVzdC1wbHVnaW4nO1xuXG4vLyBCdWlsZCBwbHVnaW5zXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRQbHVnaW5zKG9wdGlvbnM6IFZpdGVPcHRpb25zKTogUGx1Z2luW10ge1xuICAvLyBObyBidWlsZD8gbm8gcGx1Z2lucy4uXG4gIGlmIChvcHRpb25zLmVudmlyb25tZW50LmNvbW1hbmQgIT09ICdidWlsZCcpIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICBjb25zdCBwbHVnaW5zOiBQbHVnaW5bXSA9IFtdO1xuXG4gIGlmIChvcHRpb25zLmNvbmZpZy5idWlsZC5sZWdhY3kgPT09IHRydWUpIHtcbiAgICAvLyBNYWtlIHN1cmUgdGhlIHBhZ2Ugd29ya3MgaW4gb2xkZXIgYnJvd3NlcnNcbiAgICBwbHVnaW5zLnB1c2goXG4gICAgICBsZWdhY3lQbHVnaW4oe1xuICAgICAgICB0YXJnZXRzOiAob3B0aW9ucy5jb25maWcuYnVpbGQuYnJvd3NlcnNsaXN0IGFzIHN0cmluZ1tdKSA/PyBbXSxcbiAgICAgIH0pLFxuICAgICk7XG4gIH1cblxuICBjb25zdCBwYWdlcyA9IE9iamVjdC5rZXlzKG9wdGlvbnMuc2V0dGluZ3MuZ2FtZXMpLm1hcCgoZ2FtZUlkKSA9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGZpbGVuYW1lOiBgJHtnYW1lSWR9Lmh0bWxgLFxuICAgICAgdGVtcGxhdGU6IGAke2dhbWVJZH0uaHRtbGAsXG4gICAgfTtcbiAgfSk7XG5cbiAgcGx1Z2lucy5wdXNoKFxuICAgIC8vIE1pbmlmeSBpbWFnZSBhc3NldHNcbiAgICBpbWFnZW1pblBsdWdpbihvcHRpb25zLmVudmlyb25tZW50LCBvcHRpb25zLmNvbmZpZy5idWlsZC5pbWFnZVF1YWxpdHkpLFxuXG4gICAgLy8gTWFrZSB0aGUgaHRtbCBvdXRwdXQgc21hbGxlclxuICAgIC4uLihjcmVhdGVIdG1sUGx1Z2luKHttaW5pZnk6IHRydWUsIHBhZ2VzfSkgYXMgUGx1Z2luW10pLFxuXG4gICAgLy8gQWRkIGEgYmFubmVyIHRvIGdlbmVyYXRlZCBqcy9jc3NcbiAgICBiYW5uZXJQbHVnaW4oXG4gICAgICBgXG4gICAgLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLlxuXG4gICAgICAgICBfXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgICAgIF8gICAgICAgICAgICBfXG4gICAgICAgIC8gICkgICAgICAgICAgICAgIHwgIG8gICAgICAgICAvfCAgIC8gfCB8ICAgICAgICAgIHwgfFxuICAgICAgICBcXFxcX18gX3xfICAgICAgICAgX198ICAgICAgX18gICAgIHxfXy8gIHwgfCAgX18gICBfICB8IHxcbiAgICAgICAgICAgXFxcXCB8ICB8ICAgfCAgLyAgfCAgfCAgLyAgXFxcXF8gICB8IFxcXFwgICB8LyAgLyAgXFxcXF98LyAgfC9fKVxuICAgICAgIChfX18vIHxfLyBcXFxcXy98Xy9cXFxcXy98Xy98Xy9cXFxcX18vICAgIHwgIFxcXFxfL3xfXy9cXFxcX18vIHxfXy98IFxcXFxfL1xuXG4gICAgICAgIENvbmNlcHQsIG9udHdlcnAgJiBvbnR3aWtrZWxpbmdcbiAgICAgICAgaHR0cHM6Ly9zdHVkaW9rbG9lay5ubFxuXG4gICAgICAgIFN0dWRpbyBLbG9layDinaQgUGl4aUpTLCBHU0FQICYgaG93bGVyLmpzXG5cbiAgICAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuXG5cbiAgICBgLFxuICAgICksXG5cbiAgICBtYW5pZmVzdFBsdWdpbihvcHRpb25zLnNldHRpbmdzLmdhbWVzKSxcbiAgKTtcblxuICByZXR1cm4gcGx1Z2lucztcbn1cbiIsImltcG9ydCBwYXRoIGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQge1xuICBHYW1lU2V0dGluZ3MsXG4gIEdhbWVTZXR0aW5nc1Byb3BlcnR5LFxuICBHYW1lc1NldHRpbmdzLFxuICBHYW1lc1NldHRpbmdzRGF0YSxcbiAgS2xvZWtWaXRlQ29uZmlnLFxuICBQYWNrYWdlR2FtZXNTZXR0aW5ncyxcbn0gZnJvbSBcIi4vaW50ZXJmYWNlc1wiO1xuXG5mdW5jdGlvbiBtZXJnZUdhbWVTZXR0aW5ncyhcbiAgZ2VuZXJpYzogR2FtZVNldHRpbmdzLFxuICBnYW1lOiBHYW1lU2V0dGluZ3MsXG4gIGluZm9UeXBlczogR2FtZVNldHRpbmdzUHJvcGVydHlbXSxcbik6IEdhbWVTZXR0aW5ncyB7XG4gIGNvbnN0IHNldHRpbmdzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuXG4gIC8vIEFsbGUgcHJvcHMgb3Agw6nDqW4gbGV2ZWwgZGllcCBtZXJnZW5cbiAgZm9yIChjb25zdCBwcm9wZXJ0eSBvZiBpbmZvVHlwZXMpIHtcbiAgICBzZXR0aW5nc1twcm9wZXJ0eV0gPSB7XG4gICAgICAuLi5nZW5lcmljW3Byb3BlcnR5XSxcbiAgICAgIC4uLmdhbWVbcHJvcGVydHldLFxuICAgIH07XG4gIH1cblxuICByZXR1cm4gc2V0dGluZ3MgYXMgdW5rbm93biBhcyBHYW1lU2V0dGluZ3M7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVBhY2thZ2VHYW1lc1NldHRpbmdzKFxuICBwYWNrYWdlU2V0dGluZ3M6IFBhY2thZ2VHYW1lc1NldHRpbmdzLFxuKTogR2FtZXNTZXR0aW5nc0RhdGEge1xuICAvLyBNZXJnZSBzZXR0aW5nc1xuICBjb25zdCBpbmZvVHlwZXMgPSBPYmplY3Qua2V5cyhcbiAgICBwYWNrYWdlU2V0dGluZ3MuZ2VuZXJpYyxcbiAgKSBhcyBHYW1lU2V0dGluZ3NQcm9wZXJ0eVtdO1xuICBjb25zdCB7Z2VuZXJpY30gPSBwYWNrYWdlU2V0dGluZ3M7XG4gIGNvbnN0IGFsbFNldHRpbmdzOiBHYW1lc1NldHRpbmdzRGF0YSA9IHtcbiAgICBkZXZlbG9wbWVudDogZ2VuZXJpYyxcbiAgICBnYW1lczoge30sXG4gIH07XG5cbiAgZm9yIChjb25zdCBnYW1lIG9mIHBhY2thZ2VTZXR0aW5ncy5nYW1lcyA/PyBbXSkge1xuICAgIGNvbnN0IHNldHRpbmdzID0gbWVyZ2VHYW1lU2V0dGluZ3MoZ2VuZXJpYywgZ2FtZSwgaW5mb1R5cGVzKTtcblxuICAgIC8vIFpvcmcgZXIgdm9vciBkYXQgcGFnZSBhbHRpamQgZ2V6ZXQgaXNcbiAgICBjb25zdCBwYWdlSWQgPSBzZXR0aW5ncy5pbmZvLnBhZ2UgPz8gc2V0dGluZ3MuaW5mby5pZCA/PyAndW5rbm93bic7XG4gICAgc2V0dGluZ3MuaW5mby5wYWdlID0gc2V0dGluZ3MuaW5mby5pZDtcblxuICAgIC8vIFNsYSBzZXR0aW5ncyBvcCBvbmRlciBwYWdlIGlkXG4gICAgYWxsU2V0dGluZ3MuZ2FtZXNbcGFnZUlkXSA9IHNldHRpbmdzO1xuICB9XG5cbiAgcmV0dXJuIGFsbFNldHRpbmdzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGF0aFRvR2FtZURhdGEoXG4gIGZ1bGxGaWxlUGF0aDogc3RyaW5nLFxuICBzZXR0aW5nczogR2FtZXNTZXR0aW5ncyxcbik6IEdhbWVTZXR0aW5ncyB8IHVuZGVmaW5lZCB7XG4gIC8vIERldGVybWluZSBmaWxlbmFtZSB3aXRob3V0IGV4dGVuc2lvblxuICBsZXQgZmlsZVBhdGggPSBwYXRoLmJhc2VuYW1lKGZ1bGxGaWxlUGF0aCwgcGF0aC5leHRuYW1lKGZ1bGxGaWxlUGF0aCkpO1xuXG4gIC8vIERldGVybWluZSBkaXIgJiByZW1vdmUgbGVhZGluZyBzbGFzaFxuICBsZXQgZmlsZURpcmVjdG9yeSA9IHBhdGguZGlybmFtZShmdWxsRmlsZVBhdGgpO1xuICBmaWxlRGlyZWN0b3J5ID0gZmlsZURpcmVjdG9yeS5yZXBsYWNlKC9eXFwvKy9nLCAnJyk7XG5cbiAgaWYgKGZpbGVEaXJlY3RvcnkpIHtcbiAgICBmaWxlUGF0aCA9IGAke2ZpbGVEaXJlY3Rvcnl9LyR7ZmlsZVBhdGh9YDtcbiAgfVxuXG4gIHJldHVybiBzZXR0aW5nc1tmaWxlUGF0aF07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYWdlVG9TZXJ2ZShcbiAgY29uZmlnOiBLbG9la1ZpdGVDb25maWcsXG4gIHNldHRpbmdzOiBHYW1lc1NldHRpbmdzLFxuKTogc3RyaW5nIHtcbiAgLy8gSG9ldmVlbCBwYWdlcyB6aWpuIGVyP1xuICBjb25zdCBwYWdlSWRzID0gT2JqZWN0LmtleXMoc2V0dGluZ3MpO1xuICBjb25zdCBwYWdlID0gcGFnZUlkcy5sZW5ndGggPT09IDEgPyBwYWdlSWRzWzBdIDogJ2RldmVsb3BtZW50JztcblxuICByZXR1cm4gcGF0aC5wb3NpeC5qb2luKFxuICAgIGNvbmZpZy5idWlsZC5iYXNlUGF0aCxcbiAgICBgJHtwYWdlfS5odG1sJHtjb25maWcuZGV2LnNlcnZlUGFyYW1zID8/ICcnfWAsXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYWdlSWRGcm9tVXJsKHVybDogc3RyaW5nKTogc3RyaW5nIHtcbiAgaWYgKCF1cmwpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBsZXQgcGF0aG5hbWU6IHN0cmluZztcblxuICB0cnkge1xuICAgIHBhdGhuYW1lID0gbmV3IFVSTCh1cmwsICdodHRwczovL3N0dWRpb2tsb2VrLm5sJykucGF0aG5hbWU7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIC8vIElmIHJlcXVlc3QgaXMgbm90IGh0bWwgLCBkaXJlY3RseSByZXR1cm4gbmV4dCgpXG4gIGlmICghcGF0aG5hbWUuZW5kc1dpdGgoJy5odG1sJykgJiYgcGF0aG5hbWUgIT09ICcvJykge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIC8vIFBhZ2luYSBpZCBvcHZyYWdlblxuICBjb25zdCBpbmRleCA9IHBhdGhuYW1lLmxhc3RJbmRleE9mKCcvJyk7XG4gIGNvbnN0IGZpbGVOYW1lID0gaW5kZXggPT09IC0xID8gcGF0aG5hbWUgOiBwYXRobmFtZS5zbGljZShpbmRleCArIDEpO1xuXG4gIHJldHVybiBmaWxlTmFtZS5yZXBsYWNlKCcuaHRtbCcsICcnKTtcbn1cbiIsImltcG9ydCBwYXRoIGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQge0J1aWxkT3B0aW9uc30gZnJvbSAndml0ZSc7XG5pbXBvcnQge1ZpdGVPcHRpb25zfSBmcm9tICcuL2ludGVyZmFjZXMnO1xuXG5leHBvcnQgZnVuY3Rpb24gZGVmaW5lQnVpbGRDb25maWcob3B0aW9uczogVml0ZU9wdGlvbnMpOiBCdWlsZE9wdGlvbnMge1xuICBjb25zdCBpbnB1dDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuXG4gIGZvciAoY29uc3QgZ2FtZUlkIG9mIE9iamVjdC5rZXlzKG9wdGlvbnMuc2V0dGluZ3MuZ2FtZXMpKSB7XG4gICAgaW5wdXRbZ2FtZUlkXSA9IHBhdGgucmVzb2x2ZShvcHRpb25zLnJvb3QsIGAke2dhbWVJZH0uaHRtbGApO1xuICB9XG5cbiAgLy8gTGlicyBkaWUgYXBhcnRlIGpzIGtyaWpnZW46XG4gIGNvbnN0IHZlbmRvckNodW5rcyA9IFsnZmlyZWJhc2UnLCAncGl4aScsICdsb2Rhc2gnLCAnY2FwYWNpdG9yJywgJ2dzYXAnXTtcblxuICByZXR1cm4ge1xuICAgIHJlcG9ydENvbXByZXNzZWRTaXplOiBmYWxzZSxcbiAgICBicm90bGlTaXplOiBmYWxzZSxcbiAgICBjaHVua1NpemVXYXJuaW5nTGltaXQ6IDEwMDAsXG4gICAgb3V0RGlyOiAnLi4vcHVibGljJyxcbiAgICBhc3NldHNEaXI6ICdnZW5lcmF0ZWQnLFxuICAgIHJvbGx1cE9wdGlvbnM6IHtcbiAgICAgIGlucHV0LFxuICAgICAgb3V0cHV0OiB7XG4gICAgICAgIG1hbnVhbENodW5rcyhpZCkge1xuICAgICAgICAgIGlmIChpZC5pbmNsdWRlcygnbm9kZV9tb2R1bGVzJykpIHtcbiAgICAgICAgICAgIGNvbnN0IG5hbWUgPSBpZFxuICAgICAgICAgICAgICAudG9TdHJpbmcoKVxuICAgICAgICAgICAgICAuc3BsaXQoJ25vZGVfbW9kdWxlcy8nKVsxXVxuICAgICAgICAgICAgICAuc3BsaXQoJy8nKVswXVxuICAgICAgICAgICAgICAudG9TdHJpbmcoKTtcblxuICAgICAgICAgICAgZm9yIChjb25zdCB2YWx1ZSBvZiB2ZW5kb3JDaHVua3MpIHtcbiAgICAgICAgICAgICAgaWYgKG5hbWUuaW5jbHVkZXModmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9LFxuICB9O1xufVxuIiwiaW1wb3J0IHtyZWFkRmlsZVN5bmN9IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHtub3JtYWxpemVQYXRofSBmcm9tICd2aXRlJztcblxuZXhwb3J0IGZ1bmN0aW9uIHJlYWRKU09OKHBhdGg6IHN0cmluZyk6IHVua25vd24ge1xuICB0cnkge1xuICAgIGNvbnN0IGRhdGEgPSByZWFkRmlsZVN5bmMocGF0aCk7XG4gICAgcmV0dXJuIEpTT04ucGFyc2UoZGF0YS50b1N0cmluZygpKTtcbiAgfSBjYXRjaCB7XG4gICAgLy9cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuZXhwb3J0IGNvbnN0IGN3ZCA9IG5vcm1hbGl6ZVBhdGgocHJvY2Vzcy5jd2QoKSk7XG5cbmV4cG9ydCAqIGZyb20gJy4vZ2FtZSc7XG5leHBvcnQgKiBmcm9tICcuL2J1aWxkJztcbiIsImltcG9ydCBvcyBmcm9tICdub2RlOm9zJztcbmltcG9ydCBwYXRoIGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQge1BsdWdpbn0gZnJvbSAndml0ZSc7XG5pbXBvcnQgaGFuZGxlYmFyc1BsdWdpbjIgZnJvbSAndml0ZS1wbHVnaW4taGFuZGxlYmFycyc7XG5pbXBvcnQge1ZpdGVPcHRpb25zfSBmcm9tICcuLi8uLi91dGlscy9pbnRlcmZhY2VzJztcbmltcG9ydCB7Z2V0UGFnZUlkRnJvbVVybH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xuXG4vLyBIZWxwZXJzIHZvb3IgaGFuZGxlYmFyc1xuZXhwb3J0IGZ1bmN0aW9uIGhhbmRsZWJhcnNQbHVnaW4oXG4gIHBhcnRpYWxEaXJlY3Rvcnk6IHN0cmluZyB8IHN0cmluZ1tdLFxuICBvcHRpb25zOiBWaXRlT3B0aW9ucyxcbik6IFBsdWdpbiB7XG4gIHJldHVybiBoYW5kbGViYXJzUGx1Z2luMih7XG4gICAgcGFydGlhbERpcmVjdG9yeSxcblxuICAgIGhlbHBlcnM6IHtcbiAgICAgIGpzb246IChvYmplY3QsIGluZGVudCA9IDApID0+IEpTT04uc3RyaW5naWZ5KG9iamVjdCwgdW5kZWZpbmVkLCBpbmRlbnQpLFxuICAgICAgY29uY2F0OiAoLi4uYXJndW1lbnRzXykgPT4gYXJndW1lbnRzXy5zbGljZSgwLCAtMSkuam9pbignJyksXG4gICAgICBlcTogKGEsIGIpID0+IGEgPT09IGIsXG4gICAgICBuZXE6IChhLCBiKSA9PiBhICE9PSBiLFxuICAgICAgaXNkZWZpbmVkOiAodmFsdWUpID0+IHZhbHVlICE9PSB1bmRlZmluZWQsXG4gICAgICAncmVzb2x2ZS1yb290JyhwKSB7XG4gICAgICAgIC8vIFRpamRlbGlqa2UgaGFjayB2b29yIGJ1ZyBpbiBoYW5kbGViYXJzIHBsdWdpblxuICAgICAgICAvLyB6aWUgb29rIGh0dHBzOi8vZ2l0aHViLmNvbS9hbGV4bGFmcm9zY2lhL3ZpdGUtcGx1Z2luLWhhbmRsZWJhcnMvcHVsbC8xMjlcbiAgICAgICAgY29uc3QgcmVzb2x2ZWRQYXRoID0gcGF0aC5yZXNvbHZlKG9wdGlvbnMucm9vdCwgcCk7XG4gICAgICAgIHJldHVybiBvcy5wbGF0Zm9ybSgpID09PSAnd2luMzInID8gYC8ke3Jlc29sdmVkUGF0aH1gIDogcmVzb2x2ZWRQYXRoO1xuICAgICAgfSxcbiAgICB9LFxuXG4gICAgY29udGV4dChwYWdlUGF0aDogc3RyaW5nKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICAgICAgY29uc3QgZ2FtZUlkID0gZ2V0UGFnZUlkRnJvbVVybChwYWdlUGF0aCk7XG5cbiAgICAgIGlmICghZ2FtZUlkKSB7XG4gICAgICAgIHJldHVybiB7fTtcbiAgICAgIH1cblxuICAgICAgaWYgKGdhbWVJZCA9PT0gJ2RldmVsb3BtZW50Jykge1xuICAgICAgICAvLyBQYWdpbmEgc2V0dGluZ3MgdGVydWdnZXZlblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGVudjogb3B0aW9ucy5lbnZpcm9ubWVudCxcbiAgICAgICAgICBkYXRhOiBvcHRpb25zLnNldHRpbmdzLmRldmVsb3BtZW50LFxuICAgICAgICAgIGdhbWVzOiBvcHRpb25zLnNldHRpbmdzLmdhbWVzLFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICAvLyBPcCBiYXNpcyB2YW4gcGFkIGRhdGEgYmVwYWxlblxuICAgICAgY29uc3Qgc2V0dGluZ3MgPSBvcHRpb25zLnNldHRpbmdzLmdhbWVzW2dhbWVJZF07XG5cbiAgICAgIC8vIFBhZ2luYSBzZXR0aW5ncyB0ZXJ1Z2dldmVuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBlbnY6IG9wdGlvbnMuZW52aXJvbm1lbnQsXG4gICAgICAgIGRhdGE6IHNldHRpbmdzID8/IHt9LFxuICAgICAgfTtcbiAgICB9LFxuICB9KTtcbn1cbiIsImltcG9ydCB7ZXhpc3RzU3luYywgcHJvbWlzZXN9IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHBhdGggZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCB7Q29uZmlnRW52LCBQbHVnaW4sIFVzZXJDb25maWcsIFZpdGVEZXZTZXJ2ZXJ9IGZyb20gJ3ZpdGUnO1xuaW1wb3J0IHtHYW1lc1NldHRpbmdzfSBmcm9tICcuLi8uLi91dGlscy9pbnRlcmZhY2VzJztcbmltcG9ydCB7Y3dkLCBnZXRQYWdlSWRGcm9tVXJsfSBmcm9tICcuLi8uLi91dGlscyc7XG5cbmNvbnN0IFBBR0VfVEVNUExBVEUgPSAne3s+IGdhbWUgZGF0YT1kYXRhfX0nO1xuY29uc3QgREVWRUxPUE1FTlRfVEVNUExBVEUgPSAne3s+IGRldmVsb3BtZW50IGRhdGE9ZGF0YX19JztcblxuYXN5bmMgZnVuY3Rpb24gcmVuZGVyVGVtcG9yYXJ5RmlsZShmaWxlUGF0aDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gIC8vIEJlc3RhYXQgZGllIGZpbGUgbm9nIG5pZXQ/XG4gIGlmICghZXhpc3RzU3luYyhmaWxlUGF0aCkpIHtcbiAgICAvLyBBYW5tYWtlblxuICAgIGF3YWl0IHByb21pc2VzLndyaXRlRmlsZShmaWxlUGF0aCwgUEFHRV9URU1QTEFURSk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGh0bWxQbHVnaW4oZ2FtZXM6IEdhbWVzU2V0dGluZ3MpOiBQbHVnaW4ge1xuICByZXR1cm4ge1xuICAgIG5hbWU6ICd2aXRlLXBsdWdpbi1rbG9lay1odG1sJyxcbiAgICBlbmZvcmNlOiAncHJlJyxcblxuICAgIGFzeW5jIGNvbmZpZyhfY29uZmlnOiBVc2VyQ29uZmlnLCBlbnZpcm9ubWVudDogQ29uZmlnRW52KSB7XG4gICAgICAvLyBCaWogZWVuIGJ1aWxkIG1ha2VuIHdlIHRpamRlbGlqayBmaWxlcyBhYW5cbiAgICAgIGlmIChlbnZpcm9ubWVudC5jb21tYW5kID09PSAnYnVpbGQnKSB7XG4gICAgICAgIGNvbnN0IGFjdGlvbnM6IEFycmF5PFByb21pc2U8dm9pZD4+ID0gW107XG5cbiAgICAgICAgZm9yIChjb25zdCBwYWdlSWQgb2YgT2JqZWN0LmtleXMoZ2FtZXMpKSB7XG4gICAgICAgICAgLy8gUGFkIG5hYXIgZmlsZVxuICAgICAgICAgIGNvbnN0IGZpbGVQYXRoID0gcGF0aC5yZXNvbHZlKGN3ZCwgJ3NvdXJjZScsIGAke3BhZ2VJZH0uaHRtbGApO1xuICAgICAgICAgIGFjdGlvbnMucHVzaChyZW5kZXJUZW1wb3JhcnlGaWxlKGZpbGVQYXRoKSk7XG4gICAgICAgIH1cblxuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChhY3Rpb25zKTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY29uZmlndXJlU2VydmVyKHNlcnZlcjogVml0ZURldlNlcnZlcikge1xuICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgLy8gWm9yZyBlciB2b29yIGRhdCB0aWpkZW5zIGRldmVsb3BtZW50IGRlIHBhZ2luYSBnZS1yZW5kZXJlZCB0ZXJ1ZyBnZWdldmVuIHdvcmR0IHdvcmR0XG4gICAgICAgIHNlcnZlci5taWRkbGV3YXJlcy51c2UoJy8nLCBhc3luYyAocmVxdWVzdCwgcmVzcG9uc2UsIG5leHQpID0+IHtcbiAgICAgICAgICBjb25zdCB1cmwgPSByZXF1ZXN0Py51cmwgPz8gJyc7XG4gICAgICAgICAgY29uc3QgcGFnZUlkID0gZ2V0UGFnZUlkRnJvbVVybCh1cmwpO1xuXG4gICAgICAgICAgaWYgKCFwYWdlSWQpIHtcbiAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAocGFnZUlkID09PSAnZGV2ZWxvcG1lbnQnKSB7XG4gICAgICAgICAgICAvLyBEZXZlbG9wbWVudD8gZ2VlZiB0ZXJ1Zy4uLlxuICAgICAgICAgICAgcmVzcG9uc2UuZW5kKFxuICAgICAgICAgICAgICBhd2FpdCBzZXJ2ZXIudHJhbnNmb3JtSW5kZXhIdG1sKFxuICAgICAgICAgICAgICAgIHVybCxcbiAgICAgICAgICAgICAgICBERVZFTE9QTUVOVF9URU1QTEFURSxcbiAgICAgICAgICAgICAgICByZXF1ZXN0Lm9yaWdpbmFsVXJsLFxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKE9iamVjdC5rZXlzKGdhbWVzKS5pbmNsdWRlcyhwYWdlSWQpKSB7XG4gICAgICAgICAgICAvLyBCZXN0YWFuZGUgZ2FtZT8gem9yZyBlciB2b29yIGRhdCBkZSB0ZW1wbGF0ZSBnZS1yZW5kZXJlZCB3b3JkdFxuICAgICAgICAgICAgcmVzcG9uc2UuZW5kKFxuICAgICAgICAgICAgICBhd2FpdCBzZXJ2ZXIudHJhbnNmb3JtSW5kZXhIdG1sKFxuICAgICAgICAgICAgICAgIHVybCxcbiAgICAgICAgICAgICAgICBQQUdFX1RFTVBMQVRFLFxuICAgICAgICAgICAgICAgIHJlcXVlc3Qub3JpZ2luYWxVcmwsXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBOaWtzIGdldm9uZGVuXG4gICAgICAgICAgICByZXNwb25zZS5lbmQoJzQwNCcpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgIH0sXG5cbiAgICBhc3luYyBjbG9zZUJ1bmRsZSgpIHtcbiAgICAgIC8vIFZlcndpamRlciBkZSBhYW5nZW1hYWt0ZSBmaWxlc1xuICAgICAgY29uc3QgYWN0aW9uczogQXJyYXk8UHJvbWlzZTx2b2lkPj4gPSBbXTtcbiAgICAgIGZvciAoY29uc3QgcGFnZUlkIG9mIE9iamVjdC5rZXlzKGdhbWVzKSkge1xuICAgICAgICAvLyBQYWQgbmFhciBmaWxlXG4gICAgICAgIGNvbnN0IGZpbGVQYXRoID0gcGF0aC5yZXNvbHZlKGN3ZCwgJ3NvdXJjZScsIGAke3BhZ2VJZH0uaHRtbGApO1xuICAgICAgICBpZiAoZXhpc3RzU3luYyhmaWxlUGF0aCkpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgYWN0aW9ucy5wdXNoKHByb21pc2VzLnJtKGZpbGVQYXRoKSk7XG4gICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICAvL1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChhY3Rpb25zKTtcbiAgICB9LFxuICB9O1xufVxuIiwiaW1wb3J0IHBhdGggZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCB7c3ZlbHRlfSBmcm9tICdAc3ZlbHRlanMvdml0ZS1wbHVnaW4tc3ZlbHRlJztcbmltcG9ydCB7UGx1Z2lufSBmcm9tICd2aXRlJztcbmltcG9ydCBmdWxsUmVsb2FkIGZyb20gJ3ZpdGUtcGx1Z2luLWZ1bGwtcmVsb2FkJztcbmltcG9ydCB0c2NvbmZpZ1BhdGhzUGx1Z2luIGZyb20gJ3ZpdGUtdHNjb25maWctcGF0aHMnO1xuaW1wb3J0IHtWaXRlT3B0aW9uc30gZnJvbSAnLi4vdXRpbHMvaW50ZXJmYWNlcyc7XG5pbXBvcnQge2N3ZH0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHtoYW5kbGViYXJzUGx1Z2lufSBmcm9tICcuL2xpYi9oYW5kbGViYXJzLXBsdWdpbic7XG5pbXBvcnQge2h0bWxQbHVnaW59IGZyb20gJy4vbGliL2h0bWwtcGx1Z2luJztcblxuZXhwb3J0IGZ1bmN0aW9uIHNlcnZlUGx1Z2lucyhvcHRpb25zOiBWaXRlT3B0aW9ucyk6IFBsdWdpbltdIHtcbiAgcmV0dXJuIFtcbiAgICBodG1sUGx1Z2luKG9wdGlvbnMuc2V0dGluZ3MuZ2FtZXMpLFxuXG4gICAgLi4uc3ZlbHRlKHtcbiAgICAgIC8vIEhvdDogZmFsc2UsXG4gICAgICBleHBlcmltZW50YWw6IHtcbiAgICAgICAgcHJlYnVuZGxlU3ZlbHRlTGlicmFyaWVzOiB0cnVlLFxuICAgICAgICB1c2VWaXRlUHJlcHJvY2VzczogdHJ1ZSxcbiAgICAgIH0sXG4gICAgfSksXG5cbiAgICB0c2NvbmZpZ1BhdGhzUGx1Z2luKHtcbiAgICAgIHJvb3Q6IHBhdGgucmVzb2x2ZShjd2QpLFxuICAgICAgZXh0ZW5zaW9uczogWycudHMnLCAnLmpzb24nXSxcbiAgICAgIGxvb3NlOiB0cnVlLFxuICAgIH0pLFxuXG4gICAgZnVsbFJlbG9hZChbJ3NjcmlwdC8qKi8qLnRzJywgJ3N2ZWx0ZS8qKi8qLnN2ZWx0ZSddLCB7XG4gICAgICByb290OiBwYXRoLmpvaW4ocGF0aC5yZXNvbHZlKGN3ZCksICdzb3VyY2UnKSxcbiAgICAgIGxvZzogdHJ1ZSxcbiAgICAgIGFsd2F5czogdHJ1ZSxcbiAgICB9KSBhcyBQbHVnaW4sXG5cbiAgICBoYW5kbGViYXJzUGx1Z2luKG9wdGlvbnMuY29uZmlnLnNlcnZlLnBhcnRpYWxzLCBvcHRpb25zKSxcbiAgXTtcbn1cbiIsImltcG9ydCB7cmVhZEZpbGVTeW5jfSBmcm9tICdub2RlOmZzJztcbmltcG9ydCBwYXRoIGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQge2ZpbGVVUkxUb1BhdGh9IGZyb20gJ25vZGU6dXJsJztcbmltcG9ydCB7Q29uZmlnRW52LCBVc2VyQ29uZmlnfSBmcm9tICd2aXRlJztcbmltcG9ydCB7YnVpbGRQbHVnaW5zfSBmcm9tICcuL3BsdWdpbnMvYnVpbGQnO1xuaW1wb3J0IHtzZXJ2ZVBsdWdpbnN9IGZyb20gJy4vcGx1Z2lucy9zZXJ2ZSc7XG5pbXBvcnQge1xuICBjd2QsXG4gIGRlZmluZUJ1aWxkQ29uZmlnLFxuICBnZXRQYWdlVG9TZXJ2ZSxcbiAgcGFyc2VQYWNrYWdlR2FtZXNTZXR0aW5ncyxcbiAgcmVhZEpTT04sXG59IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHtcbiAgS2xvZWtWaXRlQ29uZmlnLFxuICBQYWNrYWdlR2FtZXNTZXR0aW5ncyxcbiAgVml0ZU9wdGlvbnMsXG59IGZyb20gJy4vdXRpbHMvaW50ZXJmYWNlcyc7XG5cbmNvbnN0IF9fZGlybmFtZSA9IHBhdGguZGlybmFtZShmaWxlVVJMVG9QYXRoKGltcG9ydC5tZXRhLnVybCkpO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZGVmaW5lS2xvZWtWaXRlQ29uZmlnKFxuICBlbnZpcm9ubWVudDogQ29uZmlnRW52LFxuKTogUHJvbWlzZTxVc2VyQ29uZmlnPiB7XG4gIGNvbnN0IHBrZyA9IHJlYWRKU09OKHBhdGgucmVzb2x2ZShjd2QsICdwYWNrYWdlLmpzb24nKSkgYXMgUmVjb3JkPFxuICAgIHN0cmluZyxcbiAgICB1bmtub3duXG4gID47XG4gIGNvbnN0IGtsb2VrQ29uZmlnID0gcGtnLnZpdGUgYXMgS2xvZWtWaXRlQ29uZmlnO1xuICBjb25zdCBicm93c2Vyc2xpc3QgPSBwa2cuYnJvd3NlcnNsaXN0IGFzIHN0cmluZyB8IHN0cmluZ1tdO1xuICBjb25zdCBvcHRpb25zOiBWaXRlT3B0aW9ucyA9IHtcbiAgICByb290OiBwYXRoLnJlc29sdmUoY3dkLCAnc291cmNlJyksXG4gICAgZW52aXJvbm1lbnQsXG4gICAgc2V0dGluZ3M6IHBhcnNlUGFja2FnZUdhbWVzU2V0dGluZ3MocGtnLnNldHRpbmdzIGFzIFBhY2thZ2VHYW1lc1NldHRpbmdzKSxcbiAgICBjb25maWc6IHtcbiAgICAgIC4uLmtsb2VrQ29uZmlnLFxuICAgICAgYnVpbGQ6IHsuLi5rbG9la0NvbmZpZy5idWlsZCwgYnJvd3NlcnNsaXN0fSxcbiAgICAgIHNlcnZlOiB7XG4gICAgICAgIHBhcnRpYWxzOiBbXG4gICAgICAgICAgcGF0aC5yZXNvbHZlKF9fZGlybmFtZSwgJ3BhcnRpYWxzJyksXG4gICAgICAgICAgcGF0aC5yZXNvbHZlKGN3ZCwgJ3NvdXJjZScsICdwYXJ0aWFscycpLFxuICAgICAgICBdLFxuICAgICAgfSxcbiAgICB9LFxuICB9O1xuXG4gIGNvbnN0IGNvbmZpZzogVXNlckNvbmZpZyA9IHtcbiAgICBsb2dMZXZlbDogJ2luZm8nLFxuICAgIGJhc2U6IGtsb2VrQ29uZmlnLmJ1aWxkLmJhc2VQYXRoLFxuICAgIHJvb3Q6IG9wdGlvbnMucm9vdCxcbiAgICBwdWJsaWNEaXI6ICdzdGF0aWMnLFxuICAgIGRlZmluZToge30sXG5cbiAgICAvLyBPcHRpbWl6ZURlcHM6IHtcbiAgICAvLyAgIGV4Y2x1ZGU6IFsnQHN0dWRpb2tsb2VrL3RzLWNvcmUtbGliJ10sXG4gICAgLy8gfSxcblxuICAgIGVzYnVpbGQ6IHtcbiAgICAgIGxlZ2FsQ29tbWVudHM6ICdub25lJyxcbiAgICB9LFxuXG4gICAgcmVzb2x2ZToge1xuICAgICAgYWxpYXM6IHtcbiAgICAgICAgbG9kYXNoOiAnbG9kYXNoLWVzJyxcbiAgICAgICAgJ0BtZXRhJzogcGF0aC5yZXNvbHZlKGN3ZCwgJ3NvdXJjZScsICdzdGF0aWMnLCAnbWV0YScpLFxuICAgICAgICAnQGZvbnRzJzogcGF0aC5yZXNvbHZlKGN3ZCwgJ3NvdXJjZScsICdzdGF0aWMnLCAnZm9udHMnKSxcbiAgICAgIH0sXG4gICAgfSxcblxuICAgIGNzczoge1xuICAgICAgcHJlcHJvY2Vzc29yT3B0aW9uczoge1xuICAgICAgICBzY3NzOiB7XG4gICAgICAgICAgY2hhcnNldDogZmFsc2UsXG4gICAgICAgICAgLy8gQWRkaXRpb25hbERhdGE6IGBAY2hhcnNldCBcIlVURi04XCJgLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9LFxuXG4gICAgcGx1Z2luczogWy4uLnNlcnZlUGx1Z2lucyhvcHRpb25zKV0sXG4gIH07XG5cbiAgc3dpdGNoIChlbnZpcm9ubWVudC5jb21tYW5kKSB7XG4gICAgY2FzZSAnc2VydmUnOlxuICAgICAgY29uZmlnLnNlcnZlciA9IHtcbiAgICAgICAgaHR0cHM6IHtcbiAgICAgICAgICBrZXk6IHJlYWRGaWxlU3luYyhwYXRoLnJlc29sdmUoY3dkLCAnY2VydCcsICdrZXkucGVtJykpLFxuICAgICAgICAgIGNlcnQ6IHJlYWRGaWxlU3luYyhwYXRoLnJlc29sdmUoY3dkLCAnY2VydCcsICdjZXJ0LnBlbScpKSxcbiAgICAgICAgfSxcbiAgICAgICAgb3BlbjogZ2V0UGFnZVRvU2VydmUob3B0aW9ucy5jb25maWcsIG9wdGlvbnMuc2V0dGluZ3MuZ2FtZXMpLFxuICAgICAgfTtcblxuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdidWlsZCc6XG4gICAgICBjb25maWcuYnVpbGQgPSBkZWZpbmVCdWlsZENvbmZpZyhvcHRpb25zKTtcbiAgICAgIGNvbmZpZy5wbHVnaW5zID0gW1xuICAgICAgICAuLi4oY29uZmlnLnBsdWdpbnMgPyBjb25maWcucGx1Z2lucyA6IFtdKSxcbiAgICAgICAgLi4uYnVpbGRQbHVnaW5zKG9wdGlvbnMpLFxuICAgICAgXTtcbiAgICAgIGJyZWFrO1xuXG4gICAgZGVmYXVsdDpcbiAgfVxuXG4gIHJldHVybiBjb25maWc7XG59XG4iLCJpbXBvcnQge1R5cGVkRmxhZ3N9IGZyb20gJ21lb3cnO1xuaW1wb3J0IHtidWlsZCwgY3JlYXRlU2VydmVyfSBmcm9tICd2aXRlJztcbmltcG9ydCB7ZGVmaW5lS2xvZWtWaXRlQ29uZmlnfSBmcm9tICcuL2NvbmZpZyc7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBrbG9la0RldmVsb3BtZW50KCk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBjb25maWcgPSBhd2FpdCBkZWZpbmVLbG9la1ZpdGVDb25maWcoe1xuICAgIGNvbW1hbmQ6ICdzZXJ2ZScsXG4gICAgbW9kZTogJ2RldmVsb3BtZW50JyxcbiAgfSk7XG5cbiAgY29uc3Qgc2VydmVyID0gYXdhaXQgY3JlYXRlU2VydmVyKHtcbiAgICBjb25maWdGaWxlOiBmYWxzZSxcbiAgICBlbnZGaWxlOiBmYWxzZSxcbiAgICAuLi5jb25maWcsXG4gIH0pO1xuXG4gIGF3YWl0IHNlcnZlci5saXN0ZW4oKTtcbiAgc2VydmVyLnByaW50VXJscygpO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24ga2xvZWtCdWlsZChcbiAgZmxhZ3M6IFR5cGVkRmxhZ3M8e1xuICAgIGVtcHR5T3V0RGlyOiB7XG4gICAgICB0eXBlOiAnYm9vbGVhbic7XG4gICAgICBhbGlhczogc3RyaW5nO1xuICAgICAgZGVmYXVsdDogdHJ1ZTtcbiAgICB9O1xuICAgIGJhc2U6IHtcbiAgICAgIHR5cGU6ICdzdHJpbmcnO1xuICAgICAgYWxpYXM6IHN0cmluZztcbiAgICAgIGRlZmF1bHQ6IHN0cmluZztcbiAgICB9O1xuICB9Pixcbik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBjb25maWcgPSBhd2FpdCBkZWZpbmVLbG9la1ZpdGVDb25maWcoe1xuICAgIGNvbW1hbmQ6ICdidWlsZCcsXG4gICAgbW9kZTogJ3Byb2R1Y3Rpb24nLFxuICB9KTtcblxuICAvLyBFbXB0eSBvdXQgdGhlIE91dHB1dCBkaXIgYmVmb3JlIGJ1aWxkaW5nP1xuICBpZiAoZmxhZ3MuZW1wdHlPdXREaXIgIT09IHVuZGVmaW5lZCkge1xuICAgIGNvbmZpZy5idWlsZCA9IHtcbiAgICAgIC4uLmNvbmZpZy5idWlsZCxcbiAgICAgIGVtcHR5T3V0RGlyOiBmbGFncy5lbXB0eU91dERpcixcbiAgICB9O1xuICB9XG5cbiAgLy8gRGlmZmVyZW50IGJhc2UgcGF0aFxuICBpZiAodHlwZW9mIGZsYWdzLmJhc2UgPT09ICdzdHJpbmcnKSB7XG4gICAgY29uZmlnLmJhc2UgPSBmbGFncy5iYXNlO1xuICB9XG5cbiAgYXdhaXQgYnVpbGQoe1xuICAgIGNvbmZpZ0ZpbGU6IGZhbHNlLFxuICAgIGVudkZpbGU6IGZhbHNlLFxuICAgIC4uLmNvbmZpZyxcbiAgfSk7XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7QUFJZ0IsU0FBQSxjQUFjLENBQzVCLFdBQXNCLEVBQ3RC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
|
package/dist/public.d.ts
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { TypedFlags } from 'meow';
|
|
2
|
+
|
|
3
|
+
export declare function kloekBuild(flags: TypedFlags<{
|
|
4
|
+
emptyOutDir: {
|
|
5
|
+
type: 'boolean';
|
|
6
|
+
alias: string;
|
|
7
|
+
default: true;
|
|
8
|
+
};
|
|
9
|
+
base: {
|
|
10
|
+
type: 'string';
|
|
11
|
+
alias: string;
|
|
12
|
+
default: string;
|
|
13
|
+
};
|
|
14
|
+
}>): Promise<void>;
|
|
15
|
+
|
|
16
|
+
export declare function kloekDevelopment(): Promise<void>;
|
|
17
|
+
|
|
18
|
+
export { }
|
package/package.json
ADDED
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@studiokloek/vite-config",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"license": "MIT",
|
|
5
|
+
"author": "Martijn Swart <opensource@studiokloek.nl> (https://studiokloek.nl)",
|
|
6
|
+
"description": "Base Vite config for usage in our projects.",
|
|
7
|
+
"homepage": "https://github.com/studiokloek/vite-config/tree/main/#readme",
|
|
8
|
+
"type": "module",
|
|
9
|
+
"exports": {
|
|
10
|
+
".": "./dist/index.js",
|
|
11
|
+
"./package.json": "./package.json"
|
|
12
|
+
},
|
|
13
|
+
"main": "dist/index.js",
|
|
14
|
+
"types": "dist/index.d.ts",
|
|
15
|
+
"bin": {
|
|
16
|
+
"kloek-development": "./bin/development.js",
|
|
17
|
+
"kloek-build": "./bin/build.js"
|
|
18
|
+
},
|
|
19
|
+
"repository": {
|
|
20
|
+
"type": "git",
|
|
21
|
+
"url": "git+https://github.com/studiokloek/vite-config.git"
|
|
22
|
+
},
|
|
23
|
+
"bugs": {
|
|
24
|
+
"url": "https://github.com/studiokloek/vite-config/issues"
|
|
25
|
+
},
|
|
26
|
+
"scripts": {
|
|
27
|
+
"dev": "rimraf dist && pnpm run build-bundle -w",
|
|
28
|
+
"build": "rimraf dist && run-s build-bundle build-types",
|
|
29
|
+
"build-bundle": "rollup --config rollup.config.ts --configPlugin @rollup/plugin-typescript",
|
|
30
|
+
"build-types": "run-s build-types-temp build-types-roll",
|
|
31
|
+
"build-types-temp": "tsc --project tsconfig.types.json",
|
|
32
|
+
"build-types-roll": "api-extractor run && rimraf tmp/types",
|
|
33
|
+
"release": "np"
|
|
34
|
+
},
|
|
35
|
+
"engines": {
|
|
36
|
+
"node": ">=14.6.0"
|
|
37
|
+
},
|
|
38
|
+
"np": {
|
|
39
|
+
"yarn": false,
|
|
40
|
+
"tests": false
|
|
41
|
+
},
|
|
42
|
+
"files": [
|
|
43
|
+
"dist/*",
|
|
44
|
+
"bin/*"
|
|
45
|
+
],
|
|
46
|
+
"publishConfig": {
|
|
47
|
+
"access": "public"
|
|
48
|
+
},
|
|
49
|
+
"xo": {
|
|
50
|
+
"prettier": true,
|
|
51
|
+
"rules": {
|
|
52
|
+
"import/extensions": [
|
|
53
|
+
1,
|
|
54
|
+
{
|
|
55
|
+
"ts": "never"
|
|
56
|
+
}
|
|
57
|
+
],
|
|
58
|
+
"node/prefer-global/process": [
|
|
59
|
+
"error",
|
|
60
|
+
"always"
|
|
61
|
+
]
|
|
62
|
+
}
|
|
63
|
+
},
|
|
64
|
+
"dependencies": {
|
|
65
|
+
"@sveltejs/kit": "^1.0.0-next.350",
|
|
66
|
+
"@sveltejs/vite-plugin-svelte": "^1.0.0-next.49",
|
|
67
|
+
"@vitejs/plugin-legacy": "^1.8.2",
|
|
68
|
+
"meow": "^10.1.3",
|
|
69
|
+
"node-sass": "^7.0.1",
|
|
70
|
+
"autoprefixer": "^10.4.7",
|
|
71
|
+
"sass": "~1.52.3",
|
|
72
|
+
"svelte": "^3.48.0",
|
|
73
|
+
"vite": "v2.9.12",
|
|
74
|
+
"vite-plugin-banner": "^0.3.0",
|
|
75
|
+
"vite-plugin-full-reload": "^1.0.0",
|
|
76
|
+
"vite-plugin-handlebars": "^1.6.0",
|
|
77
|
+
"vite-plugin-html": "3.2.0",
|
|
78
|
+
"vite-plugin-imagemin": "studiokloek/vite-plugin-imagemin#tmp-release",
|
|
79
|
+
"vite-plugin-live-reload": "^2.1.0",
|
|
80
|
+
"vite-tsconfig-paths": "^3.5.0"
|
|
81
|
+
},
|
|
82
|
+
"devDependencies": {
|
|
83
|
+
"@microsoft/api-extractor": "^7.25.0",
|
|
84
|
+
"@rollup/plugin-node-resolve": "^13.3.0",
|
|
85
|
+
"@rollup/plugin-typescript": "^8.3.3",
|
|
86
|
+
"@types/ejs": "^3.1.1",
|
|
87
|
+
"@types/html-minifier-terser": "^6.1.0",
|
|
88
|
+
"@types/node": "^17.0.43",
|
|
89
|
+
"np": "^7.6.1",
|
|
90
|
+
"npm-run-all": "^4.1.5",
|
|
91
|
+
"prettier": "^2.7.0",
|
|
92
|
+
"rimraf": "^3.0.2",
|
|
93
|
+
"rollup": "^2.75.6",
|
|
94
|
+
"typescript": "^4.7.3",
|
|
95
|
+
"xo": "^0.50.0"
|
|
96
|
+
}
|
|
97
|
+
}
|