@sveltejs/kit 1.0.0-next.288 → 1.0.0-next.289
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/assets/client/start.js +10 -11
- package/assets/server/index.js +0 -1
- package/dist/chunks/amp_hook.js +1 -1
- package/dist/chunks/index.js +4 -3
- package/dist/chunks/index2.js +543 -728
- package/dist/chunks/index3.js +99 -622
- package/dist/chunks/index4.js +871 -96
- package/dist/chunks/index5.js +117 -842
- package/dist/chunks/index6.js +15546 -132
- package/dist/chunks/index7.js +3746 -15123
- package/dist/chunks/tsconfig.js +1032 -0
- package/dist/cli.js +6 -6
- package/package.json +10 -2
- package/types/index.d.ts +13 -5
- package/types/internal.d.ts +7 -3
- package/types/private.d.ts +10 -12
- package/dist/chunks/index8.js +0 -4207
package/dist/chunks/index2.js
CHANGED
|
@@ -1,836 +1,651 @@
|
|
|
1
1
|
import fs__default from 'fs';
|
|
2
2
|
import path__default from 'path';
|
|
3
|
+
import { p as print_config_conflicts, b as SVELTE_KIT, d as copy_assets, f as posixify, e as get_aliases, a as resolve_entry, l as load_template, r as runtime, m as mkdirp, h as rimraf } from '../cli.js';
|
|
4
|
+
import { d as deep_merge, a as create_app, g as generate_tsconfig, c as create_manifest_data } from './tsconfig.js';
|
|
5
|
+
import { g as generate_manifest } from './index3.js';
|
|
6
|
+
import vite from 'vite';
|
|
3
7
|
import { s } from './misc.js';
|
|
4
|
-
import {
|
|
8
|
+
import { svelte } from '@sveltejs/vite-plugin-svelte';
|
|
9
|
+
import 'sade';
|
|
10
|
+
import 'child_process';
|
|
11
|
+
import 'net';
|
|
12
|
+
import 'url';
|
|
13
|
+
import 'os';
|
|
5
14
|
|
|
6
15
|
/**
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
16
|
+
* @param {{
|
|
17
|
+
* cwd: string;
|
|
18
|
+
* assets_base: string;
|
|
19
|
+
* config: import('types').ValidatedConfig
|
|
20
|
+
* manifest_data: import('types').ManifestData
|
|
21
|
+
* output_dir: string;
|
|
22
|
+
* service_worker_entry_file: string | null;
|
|
23
|
+
* }} options
|
|
24
|
+
* @param {import('vite').Manifest} client_manifest
|
|
15
25
|
*/
|
|
16
|
-
function
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
26
|
+
async function build_service_worker(
|
|
27
|
+
{ cwd, assets_base, config, manifest_data, output_dir, service_worker_entry_file },
|
|
28
|
+
client_manifest
|
|
29
|
+
) {
|
|
30
|
+
// TODO add any assets referenced in template .html file, e.g. favicon?
|
|
31
|
+
const app_files = new Set();
|
|
32
|
+
for (const key in client_manifest) {
|
|
33
|
+
const { file, css } = client_manifest[key];
|
|
34
|
+
app_files.add(file);
|
|
35
|
+
if (css) {
|
|
36
|
+
css.forEach((file) => {
|
|
37
|
+
app_files.add(file);
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
}
|
|
23
41
|
|
|
24
|
-
|
|
25
|
-
* normalize kit.vite.resolve.alias as an array
|
|
26
|
-
* @param {import('vite').AliasOptions} o
|
|
27
|
-
* @returns {import('vite').Alias[]}
|
|
28
|
-
*/
|
|
29
|
-
function normalize_alias(o) {
|
|
30
|
-
if (Array.isArray(o)) return o;
|
|
31
|
-
return Object.entries(o).map(([find, replacement]) => ({ find, replacement }));
|
|
32
|
-
}
|
|
42
|
+
const service_worker = `${cwd}/${SVELTE_KIT}/generated/service-worker.js`;
|
|
33
43
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
if (b[prop]) b[prop] = normalize_alias(b[prop]);
|
|
55
|
-
}
|
|
44
|
+
fs__default.writeFileSync(
|
|
45
|
+
service_worker,
|
|
46
|
+
`
|
|
47
|
+
export const timestamp = ${Date.now()};
|
|
48
|
+
|
|
49
|
+
export const build = [
|
|
50
|
+
${Array.from(app_files)
|
|
51
|
+
.map((file) => `${s(`${config.kit.paths.base}/${config.kit.appDir}/${file}`)}`)
|
|
52
|
+
.join(',\n\t\t\t\t')}
|
|
53
|
+
];
|
|
54
|
+
|
|
55
|
+
export const files = [
|
|
56
|
+
${manifest_data.assets
|
|
57
|
+
.map((asset) => `${s(`${config.kit.paths.base}/${asset.file}`)}`)
|
|
58
|
+
.join(',\n\t\t\t\t')}
|
|
59
|
+
];
|
|
60
|
+
`
|
|
61
|
+
.replace(/^\t{3}/gm, '')
|
|
62
|
+
.trim()
|
|
63
|
+
);
|
|
56
64
|
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
65
|
+
/** @type {[any, string[]]} */
|
|
66
|
+
const [merged_config, conflicts] = deep_merge(await config.kit.vite(), {
|
|
67
|
+
configFile: false,
|
|
68
|
+
root: cwd,
|
|
69
|
+
base: assets_base,
|
|
70
|
+
build: {
|
|
71
|
+
lib: {
|
|
72
|
+
entry: service_worker_entry_file,
|
|
73
|
+
name: 'app',
|
|
74
|
+
formats: ['es']
|
|
75
|
+
},
|
|
76
|
+
rollupOptions: {
|
|
77
|
+
output: {
|
|
78
|
+
entryFileNames: 'service-worker.js'
|
|
61
79
|
}
|
|
62
|
-
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
a[prop] = [];
|
|
71
|
-
}
|
|
72
|
-
a[prop].push(...b[prop]);
|
|
73
|
-
} else {
|
|
74
|
-
// Since we're inside a for/in loop which loops over enumerable
|
|
75
|
-
// properties only, we want parity here and to check if 'a' has
|
|
76
|
-
// enumerable-only property 'prop'. Using 'hasOwnProperty' to
|
|
77
|
-
// exclude inherited properties is close enough. It is possible
|
|
78
|
-
// that someone uses Object.defineProperty to create a direct,
|
|
79
|
-
// non-enumerable property but let's not worry about that.
|
|
80
|
-
if (Object.prototype.hasOwnProperty.call(a, prop)) {
|
|
81
|
-
conflicts.push([...path, prop].join('.'));
|
|
80
|
+
},
|
|
81
|
+
outDir: `${output_dir}/client`,
|
|
82
|
+
emptyOutDir: false
|
|
83
|
+
},
|
|
84
|
+
resolve: {
|
|
85
|
+
alias: {
|
|
86
|
+
'$service-worker': service_worker,
|
|
87
|
+
$lib: config.kit.files.lib
|
|
82
88
|
}
|
|
83
|
-
a[prop] = b[prop];
|
|
84
89
|
}
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
/** @type {Map<string, string>} */
|
|
89
|
-
const previous_contents = new Map();
|
|
90
|
-
|
|
91
|
-
/**
|
|
92
|
-
* @param {string} file
|
|
93
|
-
* @param {string} code
|
|
94
|
-
*/
|
|
95
|
-
function write_if_changed(file, code) {
|
|
96
|
-
if (code !== previous_contents.get(file)) {
|
|
97
|
-
previous_contents.set(file, code);
|
|
98
|
-
mkdirp(path__default.dirname(file));
|
|
99
|
-
fs__default.writeFileSync(file, code);
|
|
100
|
-
}
|
|
101
|
-
}
|
|
90
|
+
});
|
|
102
91
|
|
|
103
|
-
|
|
92
|
+
print_config_conflicts(conflicts, 'kit.vite.', 'build_service_worker');
|
|
104
93
|
|
|
105
|
-
|
|
106
|
-
* @param {{
|
|
107
|
-
* manifest_data: ManifestData;
|
|
108
|
-
* output: string;
|
|
109
|
-
* cwd: string;
|
|
110
|
-
* }} options
|
|
111
|
-
*/
|
|
112
|
-
function create_app({ manifest_data, output, cwd = process.cwd() }) {
|
|
113
|
-
const base = path__default.relative(cwd, output);
|
|
114
|
-
|
|
115
|
-
write_if_changed(`${output}/manifest.js`, generate_client_manifest(manifest_data, base));
|
|
116
|
-
write_if_changed(`${output}/root.svelte`, generate_app(manifest_data));
|
|
94
|
+
await vite.build(merged_config);
|
|
117
95
|
}
|
|
118
96
|
|
|
119
97
|
/**
|
|
120
|
-
* @
|
|
98
|
+
* @typedef {import('rollup').RollupOutput} RollupOutput
|
|
99
|
+
* @typedef {import('rollup').OutputChunk} OutputChunk
|
|
100
|
+
* @typedef {import('rollup').OutputAsset} OutputAsset
|
|
121
101
|
*/
|
|
122
|
-
function trim(str) {
|
|
123
|
-
return str.replace(/^\t\t/gm, '').trim();
|
|
124
|
-
}
|
|
125
102
|
|
|
126
|
-
/**
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
*/
|
|
130
|
-
function generate_client_manifest(manifest_data, base) {
|
|
131
|
-
/** @type {Record<string, number>} */
|
|
132
|
-
const component_indexes = {};
|
|
103
|
+
/** @param {import('vite').UserConfig} config */
|
|
104
|
+
async function create_build(config) {
|
|
105
|
+
const { output } = /** @type {RollupOutput} */ (await vite.build(config));
|
|
133
106
|
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
const components = `[
|
|
138
|
-
${manifest_data.components
|
|
139
|
-
.map((component, i) => {
|
|
140
|
-
component_indexes[component] = i;
|
|
141
|
-
|
|
142
|
-
return `() => import(${s(get_path(component))})`;
|
|
143
|
-
})
|
|
144
|
-
.join(',\n\t\t\t\t')}
|
|
145
|
-
]`.replace(/^\t/gm, '');
|
|
146
|
-
|
|
147
|
-
/** @param {string[]} parts */
|
|
148
|
-
const get_indices = (parts) =>
|
|
149
|
-
`[${parts.map((part) => (part ? `c[${component_indexes[part]}]` : '')).join(', ')}]`;
|
|
150
|
-
|
|
151
|
-
const routes = `[
|
|
152
|
-
${manifest_data.routes
|
|
153
|
-
.map((route) => {
|
|
154
|
-
if (route.type === 'page') {
|
|
155
|
-
const params =
|
|
156
|
-
route.params.length > 0 &&
|
|
157
|
-
'(m) => ({ ' +
|
|
158
|
-
route.params
|
|
159
|
-
.map((param, i) => {
|
|
160
|
-
return param.startsWith('...')
|
|
161
|
-
? `${param.slice(3)}: d(m[${i + 1}] || '')`
|
|
162
|
-
: `${param}: d(m[${i + 1}])`;
|
|
163
|
-
})
|
|
164
|
-
.join(', ') +
|
|
165
|
-
'})';
|
|
166
|
-
|
|
167
|
-
const tuple = [route.pattern, get_indices(route.a), get_indices(route.b)];
|
|
168
|
-
|
|
169
|
-
// optional items
|
|
170
|
-
if (params || route.shadow) tuple.push(params || 'null');
|
|
171
|
-
if (route.shadow) tuple.push('1');
|
|
172
|
-
|
|
173
|
-
return `// ${route.a[route.a.length - 1]}\n\t\t[${tuple.join(', ')}]`;
|
|
174
|
-
}
|
|
175
|
-
})
|
|
176
|
-
.filter(Boolean)
|
|
177
|
-
.join(',\n\n\t\t')}
|
|
178
|
-
]`.replace(/^\t/gm, '');
|
|
179
|
-
|
|
180
|
-
return trim(`
|
|
181
|
-
const c = ${components};
|
|
182
|
-
|
|
183
|
-
const d = decodeURIComponent;
|
|
107
|
+
const chunks = output.filter(
|
|
108
|
+
/** @returns {output is OutputChunk} */ (output) => output.type === 'chunk'
|
|
109
|
+
);
|
|
184
110
|
|
|
185
|
-
|
|
111
|
+
const assets = output.filter(
|
|
112
|
+
/** @returns {output is OutputAsset} */ (output) => output.type === 'asset'
|
|
113
|
+
);
|
|
186
114
|
|
|
187
|
-
|
|
188
|
-
// connectivity errors after initialisation don't nuke the app
|
|
189
|
-
export const fallback = [c[0](), c[1]()];
|
|
190
|
-
`);
|
|
115
|
+
return { chunks, assets };
|
|
191
116
|
}
|
|
192
117
|
|
|
193
118
|
/**
|
|
194
|
-
* @param {
|
|
119
|
+
* @param {string} file
|
|
120
|
+
* @param {import('vite').Manifest} manifest
|
|
121
|
+
* @param {Set<string>} css
|
|
122
|
+
* @param {Set<string>} js
|
|
123
|
+
* @returns
|
|
195
124
|
*/
|
|
196
|
-
function
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
const max_depth = Math.max(
|
|
200
|
-
...manifest_data.routes.map((route) =>
|
|
201
|
-
route.type === 'page' ? route.a.filter(Boolean).length : 0
|
|
202
|
-
),
|
|
203
|
-
1
|
|
204
|
-
);
|
|
125
|
+
function find_deps(file, manifest, js, css) {
|
|
126
|
+
const chunk = manifest[file];
|
|
205
127
|
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
levels.push(i);
|
|
209
|
-
}
|
|
210
|
-
|
|
211
|
-
let l = max_depth;
|
|
128
|
+
if (js.has(chunk.file)) return;
|
|
129
|
+
js.add(chunk.file);
|
|
212
130
|
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
while (l--) {
|
|
216
|
-
pyramid = `
|
|
217
|
-
{#if components[${l + 1}]}
|
|
218
|
-
<svelte:component this={components[${l}]} {...(props_${l} || {})}>
|
|
219
|
-
${pyramid.replace(/\n/g, '\n\t\t\t\t\t')}
|
|
220
|
-
</svelte:component>
|
|
221
|
-
{:else}
|
|
222
|
-
<svelte:component this={components[${l}]} {...(props_${l} || {})} />
|
|
223
|
-
{/if}
|
|
224
|
-
`
|
|
225
|
-
.replace(/^\t\t\t/gm, '')
|
|
226
|
-
.trim();
|
|
131
|
+
if (chunk.css) {
|
|
132
|
+
chunk.css.forEach((file) => css.add(file));
|
|
227
133
|
}
|
|
228
134
|
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
import { setContext, afterUpdate, onMount } from 'svelte';
|
|
233
|
-
|
|
234
|
-
// stores
|
|
235
|
-
export let stores;
|
|
236
|
-
export let page;
|
|
237
|
-
|
|
238
|
-
export let components;
|
|
239
|
-
${levels.map((l) => `export let props_${l} = null;`).join('\n\t\t\t')}
|
|
240
|
-
|
|
241
|
-
setContext('__svelte__', stores);
|
|
242
|
-
|
|
243
|
-
$: stores.page.set(page);
|
|
244
|
-
afterUpdate(stores.page.notify);
|
|
245
|
-
|
|
246
|
-
let mounted = false;
|
|
247
|
-
let navigated = false;
|
|
248
|
-
let title = null;
|
|
249
|
-
|
|
250
|
-
onMount(() => {
|
|
251
|
-
const unsubscribe = stores.page.subscribe(() => {
|
|
252
|
-
if (mounted) {
|
|
253
|
-
navigated = true;
|
|
254
|
-
title = document.title || 'untitled page';
|
|
255
|
-
}
|
|
256
|
-
});
|
|
257
|
-
|
|
258
|
-
mounted = true;
|
|
259
|
-
return unsubscribe;
|
|
260
|
-
});
|
|
261
|
-
</script>
|
|
262
|
-
|
|
263
|
-
${pyramid.replace(/\n/g, '\n\t\t')}
|
|
264
|
-
|
|
265
|
-
{#if mounted}
|
|
266
|
-
<div id="svelte-announcer" aria-live="assertive" aria-atomic="true" style="position: absolute; left: 0; top: 0; clip: rect(0 0 0 0); clip-path: inset(50%); overflow: hidden; white-space: nowrap; width: 1px; height: 1px">
|
|
267
|
-
{#if navigated}
|
|
268
|
-
{title}
|
|
269
|
-
{/if}
|
|
270
|
-
</div>
|
|
271
|
-
{/if}
|
|
272
|
-
`);
|
|
135
|
+
if (chunk.imports) {
|
|
136
|
+
chunk.imports.forEach((file) => find_deps(file, manifest, js, css));
|
|
137
|
+
}
|
|
273
138
|
}
|
|
274
139
|
|
|
275
140
|
/**
|
|
276
|
-
* @param
|
|
277
|
-
*
|
|
141
|
+
* @param {{
|
|
142
|
+
* cwd: string;
|
|
143
|
+
* assets_base: string;
|
|
144
|
+
* config: import('types').ValidatedConfig
|
|
145
|
+
* manifest_data: import('types').ManifestData
|
|
146
|
+
* output_dir: string;
|
|
147
|
+
* client_entry_file: string;
|
|
148
|
+
* service_worker_entry_file: string | null;
|
|
149
|
+
* service_worker_register: boolean;
|
|
150
|
+
* }} options
|
|
278
151
|
*/
|
|
279
|
-
function
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
152
|
+
async function build_client({
|
|
153
|
+
cwd,
|
|
154
|
+
assets_base,
|
|
155
|
+
config,
|
|
156
|
+
manifest_data,
|
|
157
|
+
output_dir,
|
|
158
|
+
client_entry_file
|
|
159
|
+
}) {
|
|
160
|
+
process.env.VITE_SVELTEKIT_APP_VERSION = config.kit.version.name;
|
|
161
|
+
process.env.VITE_SVELTEKIT_APP_VERSION_FILE = `${config.kit.appDir}/version.json`;
|
|
162
|
+
process.env.VITE_SVELTEKIT_APP_VERSION_POLL_INTERVAL = `${config.kit.version.pollInterval}`;
|
|
163
|
+
|
|
164
|
+
create_app({
|
|
165
|
+
config,
|
|
166
|
+
manifest_data,
|
|
167
|
+
cwd
|
|
168
|
+
});
|
|
286
169
|
|
|
287
|
-
|
|
288
|
-
this.getType = this.getType.bind(this);
|
|
289
|
-
this.getExtension = this.getExtension.bind(this);
|
|
290
|
-
}
|
|
170
|
+
copy_assets(`${SVELTE_KIT}/runtime`);
|
|
291
171
|
|
|
292
|
-
|
|
293
|
-
* Define mimetype -> extension mappings. Each key is a mime-type that maps
|
|
294
|
-
* to an array of extensions associated with the type. The first extension is
|
|
295
|
-
* used as the default extension for the type.
|
|
296
|
-
*
|
|
297
|
-
* e.g. mime.define({'audio/ogg', ['oga', 'ogg', 'spx']});
|
|
298
|
-
*
|
|
299
|
-
* If a type declares an extension that has already been defined, an error will
|
|
300
|
-
* be thrown. To suppress this error and force the extension to be associated
|
|
301
|
-
* with the new type, pass `force`=true. Alternatively, you may prefix the
|
|
302
|
-
* extension with "*" to map the type to extension, without mapping the
|
|
303
|
-
* extension to the type.
|
|
304
|
-
*
|
|
305
|
-
* e.g. mime.define({'audio/wav', ['wav']}, {'audio/x-wav', ['*wav']});
|
|
306
|
-
*
|
|
307
|
-
*
|
|
308
|
-
* @param map (Object) type definitions
|
|
309
|
-
* @param force (Boolean) if true, force overriding of existing definitions
|
|
310
|
-
*/
|
|
311
|
-
Mime$1.prototype.define = function(typeMap, force) {
|
|
312
|
-
for (let type in typeMap) {
|
|
313
|
-
let extensions = typeMap[type].map(function(t) {
|
|
314
|
-
return t.toLowerCase();
|
|
315
|
-
});
|
|
316
|
-
type = type.toLowerCase();
|
|
317
|
-
|
|
318
|
-
for (let i = 0; i < extensions.length; i++) {
|
|
319
|
-
const ext = extensions[i];
|
|
320
|
-
|
|
321
|
-
// '*' prefix = not the preferred type for this extension. So fixup the
|
|
322
|
-
// extension, and skip it.
|
|
323
|
-
if (ext[0] === '*') {
|
|
324
|
-
continue;
|
|
325
|
-
}
|
|
326
|
-
|
|
327
|
-
if (!force && (ext in this._types)) {
|
|
328
|
-
throw new Error(
|
|
329
|
-
'Attempt to change mapping for "' + ext +
|
|
330
|
-
'" extension from "' + this._types[ext] + '" to "' + type +
|
|
331
|
-
'". Pass `force=true` to allow this, otherwise remove "' + ext +
|
|
332
|
-
'" from the list of extensions for "' + type + '".'
|
|
333
|
-
);
|
|
334
|
-
}
|
|
335
|
-
|
|
336
|
-
this._types[ext] = type;
|
|
337
|
-
}
|
|
338
|
-
|
|
339
|
-
// Use first extension as default
|
|
340
|
-
if (force || !this._extensions[type]) {
|
|
341
|
-
const ext = extensions[0];
|
|
342
|
-
this._extensions[type] = (ext[0] !== '*') ? ext : ext.substr(1);
|
|
343
|
-
}
|
|
344
|
-
}
|
|
345
|
-
};
|
|
172
|
+
process.env.VITE_SVELTEKIT_AMP = config.kit.amp ? 'true' : '';
|
|
346
173
|
|
|
347
|
-
|
|
348
|
-
* Lookup a mime type based on extension
|
|
349
|
-
*/
|
|
350
|
-
Mime$1.prototype.getType = function(path) {
|
|
351
|
-
path = String(path);
|
|
352
|
-
let last = path.replace(/^.*[/\\]/, '').toLowerCase();
|
|
353
|
-
let ext = last.replace(/^.*\./, '').toLowerCase();
|
|
174
|
+
const client_out_dir = `${output_dir}/client/${config.kit.appDir}`;
|
|
354
175
|
|
|
355
|
-
|
|
356
|
-
|
|
176
|
+
/** @type {Record<string, string>} */
|
|
177
|
+
const input = {
|
|
178
|
+
start: path__default.resolve(cwd, client_entry_file)
|
|
179
|
+
};
|
|
357
180
|
|
|
358
|
-
|
|
359
|
-
|
|
181
|
+
// This step is optional — Vite/Rollup will create the necessary chunks
|
|
182
|
+
// for everything regardless — but it means that entry chunks reflect
|
|
183
|
+
// their location in the source code, which is helpful for debugging
|
|
184
|
+
manifest_data.components.forEach((file) => {
|
|
185
|
+
const resolved = path__default.resolve(cwd, file);
|
|
186
|
+
const relative = path__default.relative(config.kit.files.routes, resolved);
|
|
187
|
+
|
|
188
|
+
const name = relative.startsWith('..')
|
|
189
|
+
? path__default.basename(file)
|
|
190
|
+
: posixify(path__default.join('pages', relative));
|
|
191
|
+
input[name] = resolved;
|
|
192
|
+
});
|
|
360
193
|
|
|
361
|
-
/**
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
194
|
+
/** @type {[any, string[]]} */
|
|
195
|
+
const [merged_config, conflicts] = deep_merge(await config.kit.vite(), {
|
|
196
|
+
configFile: false,
|
|
197
|
+
root: cwd,
|
|
198
|
+
base: assets_base,
|
|
199
|
+
build: {
|
|
200
|
+
cssCodeSplit: true,
|
|
201
|
+
manifest: true,
|
|
202
|
+
outDir: client_out_dir,
|
|
203
|
+
polyfillDynamicImport: false,
|
|
204
|
+
rollupOptions: {
|
|
205
|
+
input,
|
|
206
|
+
output: {
|
|
207
|
+
entryFileNames: '[name]-[hash].js',
|
|
208
|
+
chunkFileNames: 'chunks/[name]-[hash].js',
|
|
209
|
+
assetFileNames: 'assets/[name]-[hash][extname]'
|
|
210
|
+
},
|
|
211
|
+
preserveEntrySignatures: 'strict'
|
|
212
|
+
}
|
|
213
|
+
},
|
|
214
|
+
resolve: {
|
|
215
|
+
alias: get_aliases(config)
|
|
216
|
+
},
|
|
217
|
+
plugins: [
|
|
218
|
+
svelte({
|
|
219
|
+
extensions: config.extensions,
|
|
220
|
+
// In AMP mode, we know that there are no conditional component imports. In that case, we
|
|
221
|
+
// don't need to include CSS for components that are imported but unused, so we can just
|
|
222
|
+
// include rendered CSS.
|
|
223
|
+
// This would also apply if hydrate and router are both false, but we don't know if one
|
|
224
|
+
// has been enabled at the page level, so we don't do anything there.
|
|
225
|
+
emitCss: !config.kit.amp,
|
|
226
|
+
compilerOptions: {
|
|
227
|
+
hydratable: !!config.kit.browser.hydrate
|
|
228
|
+
}
|
|
229
|
+
})
|
|
230
|
+
]
|
|
231
|
+
});
|
|
368
232
|
|
|
369
|
-
|
|
233
|
+
print_config_conflicts(conflicts, 'kit.vite.', 'build_client');
|
|
370
234
|
|
|
371
|
-
|
|
235
|
+
const { chunks, assets } = await create_build(merged_config);
|
|
372
236
|
|
|
373
|
-
var other = {"application/prs.cww":["cww"],"application/vnd.1000minds.decision-model+xml":["1km"],"application/vnd.3gpp.pic-bw-large":["plb"],"application/vnd.3gpp.pic-bw-small":["psb"],"application/vnd.3gpp.pic-bw-var":["pvb"],"application/vnd.3gpp2.tcap":["tcap"],"application/vnd.3m.post-it-notes":["pwn"],"application/vnd.accpac.simply.aso":["aso"],"application/vnd.accpac.simply.imp":["imp"],"application/vnd.acucobol":["acu"],"application/vnd.acucorp":["atc","acutc"],"application/vnd.adobe.air-application-installer-package+zip":["air"],"application/vnd.adobe.formscentral.fcdt":["fcdt"],"application/vnd.adobe.fxp":["fxp","fxpl"],"application/vnd.adobe.xdp+xml":["xdp"],"application/vnd.adobe.xfdf":["xfdf"],"application/vnd.ahead.space":["ahead"],"application/vnd.airzip.filesecure.azf":["azf"],"application/vnd.airzip.filesecure.azs":["azs"],"application/vnd.amazon.ebook":["azw"],"application/vnd.americandynamics.acc":["acc"],"application/vnd.amiga.ami":["ami"],"application/vnd.android.package-archive":["apk"],"application/vnd.anser-web-certificate-issue-initiation":["cii"],"application/vnd.anser-web-funds-transfer-initiation":["fti"],"application/vnd.antix.game-component":["atx"],"application/vnd.apple.installer+xml":["mpkg"],"application/vnd.apple.keynote":["key"],"application/vnd.apple.mpegurl":["m3u8"],"application/vnd.apple.numbers":["numbers"],"application/vnd.apple.pages":["pages"],"application/vnd.apple.pkpass":["pkpass"],"application/vnd.aristanetworks.swi":["swi"],"application/vnd.astraea-software.iota":["iota"],"application/vnd.audiograph":["aep"],"application/vnd.balsamiq.bmml+xml":["bmml"],"application/vnd.blueice.multipass":["mpm"],"application/vnd.bmi":["bmi"],"application/vnd.businessobjects":["rep"],"application/vnd.chemdraw+xml":["cdxml"],"application/vnd.chipnuts.karaoke-mmd":["mmd"],"application/vnd.cinderella":["cdy"],"application/vnd.citationstyles.style+xml":["csl"],"application/vnd.claymore":["cla"],"application/vnd.cloanto.rp9":["rp9"],"application/vnd.clonk.c4group":["c4g","c4d","c4f","c4p","c4u"],"application/vnd.cluetrust.cartomobile-config":["c11amc"],"application/vnd.cluetrust.cartomobile-config-pkg":["c11amz"],"application/vnd.commonspace":["csp"],"application/vnd.contact.cmsg":["cdbcmsg"],"application/vnd.cosmocaller":["cmc"],"application/vnd.crick.clicker":["clkx"],"application/vnd.crick.clicker.keyboard":["clkk"],"application/vnd.crick.clicker.palette":["clkp"],"application/vnd.crick.clicker.template":["clkt"],"application/vnd.crick.clicker.wordbank":["clkw"],"application/vnd.criticaltools.wbs+xml":["wbs"],"application/vnd.ctc-posml":["pml"],"application/vnd.cups-ppd":["ppd"],"application/vnd.curl.car":["car"],"application/vnd.curl.pcurl":["pcurl"],"application/vnd.dart":["dart"],"application/vnd.data-vision.rdz":["rdz"],"application/vnd.dbf":["dbf"],"application/vnd.dece.data":["uvf","uvvf","uvd","uvvd"],"application/vnd.dece.ttml+xml":["uvt","uvvt"],"application/vnd.dece.unspecified":["uvx","uvvx"],"application/vnd.dece.zip":["uvz","uvvz"],"application/vnd.denovo.fcselayout-link":["fe_launch"],"application/vnd.dna":["dna"],"application/vnd.dolby.mlp":["mlp"],"application/vnd.dpgraph":["dpg"],"application/vnd.dreamfactory":["dfac"],"application/vnd.ds-keypoint":["kpxx"],"application/vnd.dvb.ait":["ait"],"application/vnd.dvb.service":["svc"],"application/vnd.dynageo":["geo"],"application/vnd.ecowin.chart":["mag"],"application/vnd.enliven":["nml"],"application/vnd.epson.esf":["esf"],"application/vnd.epson.msf":["msf"],"application/vnd.epson.quickanime":["qam"],"application/vnd.epson.salt":["slt"],"application/vnd.epson.ssf":["ssf"],"application/vnd.eszigno3+xml":["es3","et3"],"application/vnd.ezpix-album":["ez2"],"application/vnd.ezpix-package":["ez3"],"application/vnd.fdf":["fdf"],"application/vnd.fdsn.mseed":["mseed"],"application/vnd.fdsn.seed":["seed","dataless"],"application/vnd.flographit":["gph"],"application/vnd.fluxtime.clip":["ftc"],"application/vnd.framemaker":["fm","frame","maker","book"],"application/vnd.frogans.fnc":["fnc"],"application/vnd.frogans.ltf":["ltf"],"application/vnd.fsc.weblaunch":["fsc"],"application/vnd.fujitsu.oasys":["oas"],"application/vnd.fujitsu.oasys2":["oa2"],"application/vnd.fujitsu.oasys3":["oa3"],"application/vnd.fujitsu.oasysgp":["fg5"],"application/vnd.fujitsu.oasysprs":["bh2"],"application/vnd.fujixerox.ddd":["ddd"],"application/vnd.fujixerox.docuworks":["xdw"],"application/vnd.fujixerox.docuworks.binder":["xbd"],"application/vnd.fuzzysheet":["fzs"],"application/vnd.genomatix.tuxedo":["txd"],"application/vnd.geogebra.file":["ggb"],"application/vnd.geogebra.tool":["ggt"],"application/vnd.geometry-explorer":["gex","gre"],"application/vnd.geonext":["gxt"],"application/vnd.geoplan":["g2w"],"application/vnd.geospace":["g3w"],"application/vnd.gmx":["gmx"],"application/vnd.google-apps.document":["gdoc"],"application/vnd.google-apps.presentation":["gslides"],"application/vnd.google-apps.spreadsheet":["gsheet"],"application/vnd.google-earth.kml+xml":["kml"],"application/vnd.google-earth.kmz":["kmz"],"application/vnd.grafeq":["gqf","gqs"],"application/vnd.groove-account":["gac"],"application/vnd.groove-help":["ghf"],"application/vnd.groove-identity-message":["gim"],"application/vnd.groove-injector":["grv"],"application/vnd.groove-tool-message":["gtm"],"application/vnd.groove-tool-template":["tpl"],"application/vnd.groove-vcard":["vcg"],"application/vnd.hal+xml":["hal"],"application/vnd.handheld-entertainment+xml":["zmm"],"application/vnd.hbci":["hbci"],"application/vnd.hhe.lesson-player":["les"],"application/vnd.hp-hpgl":["hpgl"],"application/vnd.hp-hpid":["hpid"],"application/vnd.hp-hps":["hps"],"application/vnd.hp-jlyt":["jlt"],"application/vnd.hp-pcl":["pcl"],"application/vnd.hp-pclxl":["pclxl"],"application/vnd.hydrostatix.sof-data":["sfd-hdstx"],"application/vnd.ibm.minipay":["mpy"],"application/vnd.ibm.modcap":["afp","listafp","list3820"],"application/vnd.ibm.rights-management":["irm"],"application/vnd.ibm.secure-container":["sc"],"application/vnd.iccprofile":["icc","icm"],"application/vnd.igloader":["igl"],"application/vnd.immervision-ivp":["ivp"],"application/vnd.immervision-ivu":["ivu"],"application/vnd.insors.igm":["igm"],"application/vnd.intercon.formnet":["xpw","xpx"],"application/vnd.intergeo":["i2g"],"application/vnd.intu.qbo":["qbo"],"application/vnd.intu.qfx":["qfx"],"application/vnd.ipunplugged.rcprofile":["rcprofile"],"application/vnd.irepository.package+xml":["irp"],"application/vnd.is-xpr":["xpr"],"application/vnd.isac.fcs":["fcs"],"application/vnd.jam":["jam"],"application/vnd.jcp.javame.midlet-rms":["rms"],"application/vnd.jisp":["jisp"],"application/vnd.joost.joda-archive":["joda"],"application/vnd.kahootz":["ktz","ktr"],"application/vnd.kde.karbon":["karbon"],"application/vnd.kde.kchart":["chrt"],"application/vnd.kde.kformula":["kfo"],"application/vnd.kde.kivio":["flw"],"application/vnd.kde.kontour":["kon"],"application/vnd.kde.kpresenter":["kpr","kpt"],"application/vnd.kde.kspread":["ksp"],"application/vnd.kde.kword":["kwd","kwt"],"application/vnd.kenameaapp":["htke"],"application/vnd.kidspiration":["kia"],"application/vnd.kinar":["kne","knp"],"application/vnd.koan":["skp","skd","skt","skm"],"application/vnd.kodak-descriptor":["sse"],"application/vnd.las.las+xml":["lasxml"],"application/vnd.llamagraphics.life-balance.desktop":["lbd"],"application/vnd.llamagraphics.life-balance.exchange+xml":["lbe"],"application/vnd.lotus-1-2-3":["123"],"application/vnd.lotus-approach":["apr"],"application/vnd.lotus-freelance":["pre"],"application/vnd.lotus-notes":["nsf"],"application/vnd.lotus-organizer":["org"],"application/vnd.lotus-screencam":["scm"],"application/vnd.lotus-wordpro":["lwp"],"application/vnd.macports.portpkg":["portpkg"],"application/vnd.mapbox-vector-tile":["mvt"],"application/vnd.mcd":["mcd"],"application/vnd.medcalcdata":["mc1"],"application/vnd.mediastation.cdkey":["cdkey"],"application/vnd.mfer":["mwf"],"application/vnd.mfmp":["mfm"],"application/vnd.micrografx.flo":["flo"],"application/vnd.micrografx.igx":["igx"],"application/vnd.mif":["mif"],"application/vnd.mobius.daf":["daf"],"application/vnd.mobius.dis":["dis"],"application/vnd.mobius.mbk":["mbk"],"application/vnd.mobius.mqy":["mqy"],"application/vnd.mobius.msl":["msl"],"application/vnd.mobius.plc":["plc"],"application/vnd.mobius.txf":["txf"],"application/vnd.mophun.application":["mpn"],"application/vnd.mophun.certificate":["mpc"],"application/vnd.mozilla.xul+xml":["xul"],"application/vnd.ms-artgalry":["cil"],"application/vnd.ms-cab-compressed":["cab"],"application/vnd.ms-excel":["xls","xlm","xla","xlc","xlt","xlw"],"application/vnd.ms-excel.addin.macroenabled.12":["xlam"],"application/vnd.ms-excel.sheet.binary.macroenabled.12":["xlsb"],"application/vnd.ms-excel.sheet.macroenabled.12":["xlsm"],"application/vnd.ms-excel.template.macroenabled.12":["xltm"],"application/vnd.ms-fontobject":["eot"],"application/vnd.ms-htmlhelp":["chm"],"application/vnd.ms-ims":["ims"],"application/vnd.ms-lrm":["lrm"],"application/vnd.ms-officetheme":["thmx"],"application/vnd.ms-outlook":["msg"],"application/vnd.ms-pki.seccat":["cat"],"application/vnd.ms-pki.stl":["*stl"],"application/vnd.ms-powerpoint":["ppt","pps","pot"],"application/vnd.ms-powerpoint.addin.macroenabled.12":["ppam"],"application/vnd.ms-powerpoint.presentation.macroenabled.12":["pptm"],"application/vnd.ms-powerpoint.slide.macroenabled.12":["sldm"],"application/vnd.ms-powerpoint.slideshow.macroenabled.12":["ppsm"],"application/vnd.ms-powerpoint.template.macroenabled.12":["potm"],"application/vnd.ms-project":["mpp","mpt"],"application/vnd.ms-word.document.macroenabled.12":["docm"],"application/vnd.ms-word.template.macroenabled.12":["dotm"],"application/vnd.ms-works":["wps","wks","wcm","wdb"],"application/vnd.ms-wpl":["wpl"],"application/vnd.ms-xpsdocument":["xps"],"application/vnd.mseq":["mseq"],"application/vnd.musician":["mus"],"application/vnd.muvee.style":["msty"],"application/vnd.mynfc":["taglet"],"application/vnd.neurolanguage.nlu":["nlu"],"application/vnd.nitf":["ntf","nitf"],"application/vnd.noblenet-directory":["nnd"],"application/vnd.noblenet-sealer":["nns"],"application/vnd.noblenet-web":["nnw"],"application/vnd.nokia.n-gage.ac+xml":["*ac"],"application/vnd.nokia.n-gage.data":["ngdat"],"application/vnd.nokia.n-gage.symbian.install":["n-gage"],"application/vnd.nokia.radio-preset":["rpst"],"application/vnd.nokia.radio-presets":["rpss"],"application/vnd.novadigm.edm":["edm"],"application/vnd.novadigm.edx":["edx"],"application/vnd.novadigm.ext":["ext"],"application/vnd.oasis.opendocument.chart":["odc"],"application/vnd.oasis.opendocument.chart-template":["otc"],"application/vnd.oasis.opendocument.database":["odb"],"application/vnd.oasis.opendocument.formula":["odf"],"application/vnd.oasis.opendocument.formula-template":["odft"],"application/vnd.oasis.opendocument.graphics":["odg"],"application/vnd.oasis.opendocument.graphics-template":["otg"],"application/vnd.oasis.opendocument.image":["odi"],"application/vnd.oasis.opendocument.image-template":["oti"],"application/vnd.oasis.opendocument.presentation":["odp"],"application/vnd.oasis.opendocument.presentation-template":["otp"],"application/vnd.oasis.opendocument.spreadsheet":["ods"],"application/vnd.oasis.opendocument.spreadsheet-template":["ots"],"application/vnd.oasis.opendocument.text":["odt"],"application/vnd.oasis.opendocument.text-master":["odm"],"application/vnd.oasis.opendocument.text-template":["ott"],"application/vnd.oasis.opendocument.text-web":["oth"],"application/vnd.olpc-sugar":["xo"],"application/vnd.oma.dd2+xml":["dd2"],"application/vnd.openblox.game+xml":["obgx"],"application/vnd.openofficeorg.extension":["oxt"],"application/vnd.openstreetmap.data+xml":["osm"],"application/vnd.openxmlformats-officedocument.presentationml.presentation":["pptx"],"application/vnd.openxmlformats-officedocument.presentationml.slide":["sldx"],"application/vnd.openxmlformats-officedocument.presentationml.slideshow":["ppsx"],"application/vnd.openxmlformats-officedocument.presentationml.template":["potx"],"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet":["xlsx"],"application/vnd.openxmlformats-officedocument.spreadsheetml.template":["xltx"],"application/vnd.openxmlformats-officedocument.wordprocessingml.document":["docx"],"application/vnd.openxmlformats-officedocument.wordprocessingml.template":["dotx"],"application/vnd.osgeo.mapguide.package":["mgp"],"application/vnd.osgi.dp":["dp"],"application/vnd.osgi.subsystem":["esa"],"application/vnd.palm":["pdb","pqa","oprc"],"application/vnd.pawaafile":["paw"],"application/vnd.pg.format":["str"],"application/vnd.pg.osasli":["ei6"],"application/vnd.picsel":["efif"],"application/vnd.pmi.widget":["wg"],"application/vnd.pocketlearn":["plf"],"application/vnd.powerbuilder6":["pbd"],"application/vnd.previewsystems.box":["box"],"application/vnd.proteus.magazine":["mgz"],"application/vnd.publishare-delta-tree":["qps"],"application/vnd.pvi.ptid1":["ptid"],"application/vnd.quark.quarkxpress":["qxd","qxt","qwd","qwt","qxl","qxb"],"application/vnd.rar":["rar"],"application/vnd.realvnc.bed":["bed"],"application/vnd.recordare.musicxml":["mxl"],"application/vnd.recordare.musicxml+xml":["musicxml"],"application/vnd.rig.cryptonote":["cryptonote"],"application/vnd.rim.cod":["cod"],"application/vnd.rn-realmedia":["rm"],"application/vnd.rn-realmedia-vbr":["rmvb"],"application/vnd.route66.link66+xml":["link66"],"application/vnd.sailingtracker.track":["st"],"application/vnd.seemail":["see"],"application/vnd.sema":["sema"],"application/vnd.semd":["semd"],"application/vnd.semf":["semf"],"application/vnd.shana.informed.formdata":["ifm"],"application/vnd.shana.informed.formtemplate":["itp"],"application/vnd.shana.informed.interchange":["iif"],"application/vnd.shana.informed.package":["ipk"],"application/vnd.simtech-mindmapper":["twd","twds"],"application/vnd.smaf":["mmf"],"application/vnd.smart.teacher":["teacher"],"application/vnd.software602.filler.form+xml":["fo"],"application/vnd.solent.sdkm+xml":["sdkm","sdkd"],"application/vnd.spotfire.dxp":["dxp"],"application/vnd.spotfire.sfs":["sfs"],"application/vnd.stardivision.calc":["sdc"],"application/vnd.stardivision.draw":["sda"],"application/vnd.stardivision.impress":["sdd"],"application/vnd.stardivision.math":["smf"],"application/vnd.stardivision.writer":["sdw","vor"],"application/vnd.stardivision.writer-global":["sgl"],"application/vnd.stepmania.package":["smzip"],"application/vnd.stepmania.stepchart":["sm"],"application/vnd.sun.wadl+xml":["wadl"],"application/vnd.sun.xml.calc":["sxc"],"application/vnd.sun.xml.calc.template":["stc"],"application/vnd.sun.xml.draw":["sxd"],"application/vnd.sun.xml.draw.template":["std"],"application/vnd.sun.xml.impress":["sxi"],"application/vnd.sun.xml.impress.template":["sti"],"application/vnd.sun.xml.math":["sxm"],"application/vnd.sun.xml.writer":["sxw"],"application/vnd.sun.xml.writer.global":["sxg"],"application/vnd.sun.xml.writer.template":["stw"],"application/vnd.sus-calendar":["sus","susp"],"application/vnd.svd":["svd"],"application/vnd.symbian.install":["sis","sisx"],"application/vnd.syncml+xml":["xsm"],"application/vnd.syncml.dm+wbxml":["bdm"],"application/vnd.syncml.dm+xml":["xdm"],"application/vnd.syncml.dmddf+xml":["ddf"],"application/vnd.tao.intent-module-archive":["tao"],"application/vnd.tcpdump.pcap":["pcap","cap","dmp"],"application/vnd.tmobile-livetv":["tmo"],"application/vnd.trid.tpt":["tpt"],"application/vnd.triscape.mxs":["mxs"],"application/vnd.trueapp":["tra"],"application/vnd.ufdl":["ufd","ufdl"],"application/vnd.uiq.theme":["utz"],"application/vnd.umajin":["umj"],"application/vnd.unity":["unityweb"],"application/vnd.uoml+xml":["uoml"],"application/vnd.vcx":["vcx"],"application/vnd.visio":["vsd","vst","vss","vsw"],"application/vnd.visionary":["vis"],"application/vnd.vsf":["vsf"],"application/vnd.wap.wbxml":["wbxml"],"application/vnd.wap.wmlc":["wmlc"],"application/vnd.wap.wmlscriptc":["wmlsc"],"application/vnd.webturbo":["wtb"],"application/vnd.wolfram.player":["nbp"],"application/vnd.wordperfect":["wpd"],"application/vnd.wqd":["wqd"],"application/vnd.wt.stf":["stf"],"application/vnd.xara":["xar"],"application/vnd.xfdl":["xfdl"],"application/vnd.yamaha.hv-dic":["hvd"],"application/vnd.yamaha.hv-script":["hvs"],"application/vnd.yamaha.hv-voice":["hvp"],"application/vnd.yamaha.openscoreformat":["osf"],"application/vnd.yamaha.openscoreformat.osfpvg+xml":["osfpvg"],"application/vnd.yamaha.smaf-audio":["saf"],"application/vnd.yamaha.smaf-phrase":["spf"],"application/vnd.yellowriver-custom-menu":["cmp"],"application/vnd.zul":["zir","zirz"],"application/vnd.zzazz.deck+xml":["zaz"],"application/x-7z-compressed":["7z"],"application/x-abiword":["abw"],"application/x-ace-compressed":["ace"],"application/x-apple-diskimage":["*dmg"],"application/x-arj":["arj"],"application/x-authorware-bin":["aab","x32","u32","vox"],"application/x-authorware-map":["aam"],"application/x-authorware-seg":["aas"],"application/x-bcpio":["bcpio"],"application/x-bdoc":["*bdoc"],"application/x-bittorrent":["torrent"],"application/x-blorb":["blb","blorb"],"application/x-bzip":["bz"],"application/x-bzip2":["bz2","boz"],"application/x-cbr":["cbr","cba","cbt","cbz","cb7"],"application/x-cdlink":["vcd"],"application/x-cfs-compressed":["cfs"],"application/x-chat":["chat"],"application/x-chess-pgn":["pgn"],"application/x-chrome-extension":["crx"],"application/x-cocoa":["cco"],"application/x-conference":["nsc"],"application/x-cpio":["cpio"],"application/x-csh":["csh"],"application/x-debian-package":["*deb","udeb"],"application/x-dgc-compressed":["dgc"],"application/x-director":["dir","dcr","dxr","cst","cct","cxt","w3d","fgd","swa"],"application/x-doom":["wad"],"application/x-dtbncx+xml":["ncx"],"application/x-dtbook+xml":["dtb"],"application/x-dtbresource+xml":["res"],"application/x-dvi":["dvi"],"application/x-envoy":["evy"],"application/x-eva":["eva"],"application/x-font-bdf":["bdf"],"application/x-font-ghostscript":["gsf"],"application/x-font-linux-psf":["psf"],"application/x-font-pcf":["pcf"],"application/x-font-snf":["snf"],"application/x-font-type1":["pfa","pfb","pfm","afm"],"application/x-freearc":["arc"],"application/x-futuresplash":["spl"],"application/x-gca-compressed":["gca"],"application/x-glulx":["ulx"],"application/x-gnumeric":["gnumeric"],"application/x-gramps-xml":["gramps"],"application/x-gtar":["gtar"],"application/x-hdf":["hdf"],"application/x-httpd-php":["php"],"application/x-install-instructions":["install"],"application/x-iso9660-image":["*iso"],"application/x-iwork-keynote-sffkey":["*key"],"application/x-iwork-numbers-sffnumbers":["*numbers"],"application/x-iwork-pages-sffpages":["*pages"],"application/x-java-archive-diff":["jardiff"],"application/x-java-jnlp-file":["jnlp"],"application/x-keepass2":["kdbx"],"application/x-latex":["latex"],"application/x-lua-bytecode":["luac"],"application/x-lzh-compressed":["lzh","lha"],"application/x-makeself":["run"],"application/x-mie":["mie"],"application/x-mobipocket-ebook":["prc","mobi"],"application/x-ms-application":["application"],"application/x-ms-shortcut":["lnk"],"application/x-ms-wmd":["wmd"],"application/x-ms-wmz":["wmz"],"application/x-ms-xbap":["xbap"],"application/x-msaccess":["mdb"],"application/x-msbinder":["obd"],"application/x-mscardfile":["crd"],"application/x-msclip":["clp"],"application/x-msdos-program":["*exe"],"application/x-msdownload":["*exe","*dll","com","bat","*msi"],"application/x-msmediaview":["mvb","m13","m14"],"application/x-msmetafile":["*wmf","*wmz","*emf","emz"],"application/x-msmoney":["mny"],"application/x-mspublisher":["pub"],"application/x-msschedule":["scd"],"application/x-msterminal":["trm"],"application/x-mswrite":["wri"],"application/x-netcdf":["nc","cdf"],"application/x-ns-proxy-autoconfig":["pac"],"application/x-nzb":["nzb"],"application/x-perl":["pl","pm"],"application/x-pilot":["*prc","*pdb"],"application/x-pkcs12":["p12","pfx"],"application/x-pkcs7-certificates":["p7b","spc"],"application/x-pkcs7-certreqresp":["p7r"],"application/x-rar-compressed":["*rar"],"application/x-redhat-package-manager":["rpm"],"application/x-research-info-systems":["ris"],"application/x-sea":["sea"],"application/x-sh":["sh"],"application/x-shar":["shar"],"application/x-shockwave-flash":["swf"],"application/x-silverlight-app":["xap"],"application/x-sql":["sql"],"application/x-stuffit":["sit"],"application/x-stuffitx":["sitx"],"application/x-subrip":["srt"],"application/x-sv4cpio":["sv4cpio"],"application/x-sv4crc":["sv4crc"],"application/x-t3vm-image":["t3"],"application/x-tads":["gam"],"application/x-tar":["tar"],"application/x-tcl":["tcl","tk"],"application/x-tex":["tex"],"application/x-tex-tfm":["tfm"],"application/x-texinfo":["texinfo","texi"],"application/x-tgif":["*obj"],"application/x-ustar":["ustar"],"application/x-virtualbox-hdd":["hdd"],"application/x-virtualbox-ova":["ova"],"application/x-virtualbox-ovf":["ovf"],"application/x-virtualbox-vbox":["vbox"],"application/x-virtualbox-vbox-extpack":["vbox-extpack"],"application/x-virtualbox-vdi":["vdi"],"application/x-virtualbox-vhd":["vhd"],"application/x-virtualbox-vmdk":["vmdk"],"application/x-wais-source":["src"],"application/x-web-app-manifest+json":["webapp"],"application/x-x509-ca-cert":["der","crt","pem"],"application/x-xfig":["fig"],"application/x-xliff+xml":["*xlf"],"application/x-xpinstall":["xpi"],"application/x-xz":["xz"],"application/x-zmachine":["z1","z2","z3","z4","z5","z6","z7","z8"],"audio/vnd.dece.audio":["uva","uvva"],"audio/vnd.digital-winds":["eol"],"audio/vnd.dra":["dra"],"audio/vnd.dts":["dts"],"audio/vnd.dts.hd":["dtshd"],"audio/vnd.lucent.voice":["lvp"],"audio/vnd.ms-playready.media.pya":["pya"],"audio/vnd.nuera.ecelp4800":["ecelp4800"],"audio/vnd.nuera.ecelp7470":["ecelp7470"],"audio/vnd.nuera.ecelp9600":["ecelp9600"],"audio/vnd.rip":["rip"],"audio/x-aac":["aac"],"audio/x-aiff":["aif","aiff","aifc"],"audio/x-caf":["caf"],"audio/x-flac":["flac"],"audio/x-m4a":["*m4a"],"audio/x-matroska":["mka"],"audio/x-mpegurl":["m3u"],"audio/x-ms-wax":["wax"],"audio/x-ms-wma":["wma"],"audio/x-pn-realaudio":["ram","ra"],"audio/x-pn-realaudio-plugin":["rmp"],"audio/x-realaudio":["*ra"],"audio/x-wav":["*wav"],"chemical/x-cdx":["cdx"],"chemical/x-cif":["cif"],"chemical/x-cmdf":["cmdf"],"chemical/x-cml":["cml"],"chemical/x-csml":["csml"],"chemical/x-xyz":["xyz"],"image/prs.btif":["btif"],"image/prs.pti":["pti"],"image/vnd.adobe.photoshop":["psd"],"image/vnd.airzip.accelerator.azv":["azv"],"image/vnd.dece.graphic":["uvi","uvvi","uvg","uvvg"],"image/vnd.djvu":["djvu","djv"],"image/vnd.dvb.subtitle":["*sub"],"image/vnd.dwg":["dwg"],"image/vnd.dxf":["dxf"],"image/vnd.fastbidsheet":["fbs"],"image/vnd.fpx":["fpx"],"image/vnd.fst":["fst"],"image/vnd.fujixerox.edmics-mmr":["mmr"],"image/vnd.fujixerox.edmics-rlc":["rlc"],"image/vnd.microsoft.icon":["ico"],"image/vnd.ms-dds":["dds"],"image/vnd.ms-modi":["mdi"],"image/vnd.ms-photo":["wdp"],"image/vnd.net-fpx":["npx"],"image/vnd.pco.b16":["b16"],"image/vnd.tencent.tap":["tap"],"image/vnd.valve.source.texture":["vtf"],"image/vnd.wap.wbmp":["wbmp"],"image/vnd.xiff":["xif"],"image/vnd.zbrush.pcx":["pcx"],"image/x-3ds":["3ds"],"image/x-cmu-raster":["ras"],"image/x-cmx":["cmx"],"image/x-freehand":["fh","fhc","fh4","fh5","fh7"],"image/x-icon":["*ico"],"image/x-jng":["jng"],"image/x-mrsid-image":["sid"],"image/x-ms-bmp":["*bmp"],"image/x-pcx":["*pcx"],"image/x-pict":["pic","pct"],"image/x-portable-anymap":["pnm"],"image/x-portable-bitmap":["pbm"],"image/x-portable-graymap":["pgm"],"image/x-portable-pixmap":["ppm"],"image/x-rgb":["rgb"],"image/x-tga":["tga"],"image/x-xbitmap":["xbm"],"image/x-xpixmap":["xpm"],"image/x-xwindowdump":["xwd"],"message/vnd.wfa.wsc":["wsc"],"model/vnd.collada+xml":["dae"],"model/vnd.dwf":["dwf"],"model/vnd.gdl":["gdl"],"model/vnd.gtw":["gtw"],"model/vnd.mts":["mts"],"model/vnd.opengex":["ogex"],"model/vnd.parasolid.transmit.binary":["x_b"],"model/vnd.parasolid.transmit.text":["x_t"],"model/vnd.sap.vds":["vds"],"model/vnd.usdz+zip":["usdz"],"model/vnd.valve.source.compiled-map":["bsp"],"model/vnd.vtu":["vtu"],"text/prs.lines.tag":["dsc"],"text/vnd.curl":["curl"],"text/vnd.curl.dcurl":["dcurl"],"text/vnd.curl.mcurl":["mcurl"],"text/vnd.curl.scurl":["scurl"],"text/vnd.dvb.subtitle":["sub"],"text/vnd.fly":["fly"],"text/vnd.fmi.flexstor":["flx"],"text/vnd.graphviz":["gv"],"text/vnd.in3d.3dml":["3dml"],"text/vnd.in3d.spot":["spot"],"text/vnd.sun.j2me.app-descriptor":["jad"],"text/vnd.wap.wml":["wml"],"text/vnd.wap.wmlscript":["wmls"],"text/x-asm":["s","asm"],"text/x-c":["c","cc","cxx","cpp","h","hh","dic"],"text/x-component":["htc"],"text/x-fortran":["f","for","f77","f90"],"text/x-handlebars-template":["hbs"],"text/x-java-source":["java"],"text/x-lua":["lua"],"text/x-markdown":["mkd"],"text/x-nfo":["nfo"],"text/x-opml":["opml"],"text/x-org":["*org"],"text/x-pascal":["p","pas"],"text/x-processing":["pde"],"text/x-sass":["sass"],"text/x-scss":["scss"],"text/x-setext":["etx"],"text/x-sfv":["sfv"],"text/x-suse-ymp":["ymp"],"text/x-uuencode":["uu"],"text/x-vcalendar":["vcs"],"text/x-vcard":["vcf"],"video/vnd.dece.hd":["uvh","uvvh"],"video/vnd.dece.mobile":["uvm","uvvm"],"video/vnd.dece.pd":["uvp","uvvp"],"video/vnd.dece.sd":["uvs","uvvs"],"video/vnd.dece.video":["uvv","uvvv"],"video/vnd.dvb.file":["dvb"],"video/vnd.fvt":["fvt"],"video/vnd.mpegurl":["mxu","m4u"],"video/vnd.ms-playready.media.pyv":["pyv"],"video/vnd.uvvu.mp4":["uvu","uvvu"],"video/vnd.vivo":["viv"],"video/x-f4v":["f4v"],"video/x-fli":["fli"],"video/x-flv":["flv"],"video/x-m4v":["m4v"],"video/x-matroska":["mkv","mk3d","mks"],"video/x-mng":["mng"],"video/x-ms-asf":["asf","asx"],"video/x-ms-vob":["vob"],"video/x-ms-wm":["wm"],"video/x-ms-wmv":["wmv"],"video/x-ms-wmx":["wmx"],"video/x-ms-wvx":["wvx"],"video/x-msvideo":["avi"],"video/x-sgi-movie":["movie"],"video/x-smv":["smv"],"x-conference/x-cooltalk":["ice"]};
|
|
237
|
+
/** @type {import('vite').Manifest} */
|
|
238
|
+
const vite_manifest = JSON.parse(fs__default.readFileSync(`${client_out_dir}/manifest.json`, 'utf-8'));
|
|
374
239
|
|
|
375
|
-
|
|
376
|
-
|
|
240
|
+
const entry = posixify(client_entry_file);
|
|
241
|
+
const entry_js = new Set();
|
|
242
|
+
const entry_css = new Set();
|
|
243
|
+
find_deps(entry, vite_manifest, entry_js, entry_css);
|
|
377
244
|
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
* content: string;
|
|
383
|
-
* dynamic: boolean;
|
|
384
|
-
* rest: boolean;
|
|
385
|
-
* }} Part
|
|
386
|
-
* @typedef {{
|
|
387
|
-
* basename: string;
|
|
388
|
-
* name: string;
|
|
389
|
-
* ext: string;
|
|
390
|
-
* parts: Part[],
|
|
391
|
-
* file: string;
|
|
392
|
-
* is_dir: boolean;
|
|
393
|
-
* is_index: boolean;
|
|
394
|
-
* is_page: boolean;
|
|
395
|
-
* route_suffix: string
|
|
396
|
-
* }} Item
|
|
397
|
-
*/
|
|
245
|
+
fs__default.writeFileSync(
|
|
246
|
+
`${client_out_dir}/version.json`,
|
|
247
|
+
JSON.stringify({ version: process.env.VITE_SVELTEKIT_APP_VERSION })
|
|
248
|
+
);
|
|
398
249
|
|
|
399
|
-
|
|
250
|
+
return {
|
|
251
|
+
assets,
|
|
252
|
+
chunks,
|
|
253
|
+
entry: {
|
|
254
|
+
file: vite_manifest[entry].file,
|
|
255
|
+
js: Array.from(entry_js),
|
|
256
|
+
css: Array.from(entry_css)
|
|
257
|
+
},
|
|
258
|
+
vite_manifest
|
|
259
|
+
};
|
|
260
|
+
}
|
|
400
261
|
|
|
401
262
|
/**
|
|
402
263
|
* @param {{
|
|
264
|
+
* hooks: string;
|
|
403
265
|
* config: import('types').ValidatedConfig;
|
|
404
|
-
*
|
|
405
|
-
*
|
|
266
|
+
* has_service_worker: boolean;
|
|
267
|
+
* template: string;
|
|
406
268
|
* }} opts
|
|
407
|
-
* @returns
|
|
269
|
+
* @returns
|
|
408
270
|
*/
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
}
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
271
|
+
const server_template = ({ config, hooks, has_service_worker, template }) => `
|
|
272
|
+
import root from '__GENERATED__/root.svelte';
|
|
273
|
+
import { respond } from '${runtime}/server/index.js';
|
|
274
|
+
import { set_paths, assets, base } from '${runtime}/paths.js';
|
|
275
|
+
import { set_prerendering } from '${runtime}/env.js';
|
|
276
|
+
import * as user_hooks from ${s(hooks)};
|
|
277
|
+
|
|
278
|
+
const template = ({ head, body, assets, nonce }) => ${s(template)
|
|
279
|
+
.replace('%svelte.head%', '" + head + "')
|
|
280
|
+
.replace('%svelte.body%', '" + body + "')
|
|
281
|
+
.replace(/%svelte\.assets%/g, '" + assets + "')
|
|
282
|
+
.replace(/%svelte\.nonce%/g, '" + nonce + "')};
|
|
283
|
+
|
|
284
|
+
let read = null;
|
|
285
|
+
|
|
286
|
+
set_paths(${s(config.kit.paths)});
|
|
287
|
+
|
|
288
|
+
// this looks redundant, but the indirection allows us to access
|
|
289
|
+
// named imports without triggering Rollup's missing import detection
|
|
290
|
+
const get_hooks = hooks => ({
|
|
291
|
+
getSession: hooks.getSession || (() => ({})),
|
|
292
|
+
handle: hooks.handle || (({ event, resolve }) => resolve(event)),
|
|
293
|
+
handleError: hooks.handleError || (({ error }) => console.error(error.stack)),
|
|
294
|
+
externalFetch: hooks.externalFetch || fetch
|
|
295
|
+
});
|
|
296
|
+
|
|
297
|
+
let default_protocol = 'https';
|
|
298
|
+
|
|
299
|
+
// allow paths to be globally overridden
|
|
300
|
+
// in svelte-kit preview and in prerendering
|
|
301
|
+
export function override(settings) {
|
|
302
|
+
default_protocol = settings.protocol || default_protocol;
|
|
303
|
+
set_paths(settings.paths);
|
|
304
|
+
set_prerendering(settings.prerendering);
|
|
305
|
+
read = settings.read;
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
export class Server {
|
|
309
|
+
constructor(manifest) {
|
|
310
|
+
const hooks = get_hooks(user_hooks);
|
|
311
|
+
|
|
312
|
+
this.options = {
|
|
313
|
+
amp: ${config.kit.amp},
|
|
314
|
+
csp: ${s(config.kit.csp)},
|
|
315
|
+
dev: false,
|
|
316
|
+
floc: ${config.kit.floc},
|
|
317
|
+
get_stack: error => String(error), // for security
|
|
318
|
+
handle_error: (error, event) => {
|
|
319
|
+
hooks.handleError({
|
|
320
|
+
error,
|
|
321
|
+
event,
|
|
322
|
+
|
|
323
|
+
// TODO remove for 1.0
|
|
324
|
+
// @ts-expect-error
|
|
325
|
+
get request() {
|
|
326
|
+
throw new Error('request in handleError has been replaced with event. See https://github.com/sveltejs/kit/pull/3384 for details');
|
|
327
|
+
}
|
|
328
|
+
});
|
|
329
|
+
error.stack = this.options.get_stack(error);
|
|
330
|
+
},
|
|
331
|
+
hooks,
|
|
332
|
+
hydrate: ${s(config.kit.browser.hydrate)},
|
|
333
|
+
manifest,
|
|
334
|
+
method_override: ${s(config.kit.methodOverride)},
|
|
335
|
+
paths: { base, assets },
|
|
336
|
+
prefix: assets + '/${config.kit.appDir}/',
|
|
337
|
+
prerender: ${config.kit.prerender.enabled},
|
|
338
|
+
read,
|
|
339
|
+
root,
|
|
340
|
+
service_worker: ${has_service_worker ? "base + '/service-worker.js'" : 'null'},
|
|
341
|
+
router: ${s(config.kit.browser.router)},
|
|
342
|
+
template,
|
|
343
|
+
template_contains_nonce: ${template.includes('%svelte.nonce%')},
|
|
344
|
+
trailing_slash: ${s(config.kit.trailingSlash)}
|
|
345
|
+
};
|
|
421
346
|
}
|
|
422
347
|
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
const routes = [];
|
|
428
|
-
|
|
429
|
-
const default_layout = posixify(path__default.relative(cwd, `${fallback}/layout.svelte`));
|
|
430
|
-
const default_error = posixify(path__default.relative(cwd, `${fallback}/error.svelte`));
|
|
431
|
-
|
|
432
|
-
/**
|
|
433
|
-
* @param {string} dir
|
|
434
|
-
* @param {string[]} parent_key
|
|
435
|
-
* @param {Part[][]} parent_segments
|
|
436
|
-
* @param {string[]} parent_params
|
|
437
|
-
* @param {Array<string|undefined>} layout_stack // accumulated __layout.svelte components
|
|
438
|
-
* @param {Array<string|undefined>} error_stack // accumulated __error.svelte components
|
|
439
|
-
*/
|
|
440
|
-
function walk(dir, parent_key, parent_segments, parent_params, layout_stack, error_stack) {
|
|
441
|
-
/** @type {Item[]} */
|
|
442
|
-
let items = [];
|
|
443
|
-
fs__default.readdirSync(dir).forEach((basename) => {
|
|
444
|
-
const resolved = path__default.join(dir, basename);
|
|
445
|
-
const file = posixify(path__default.relative(cwd, resolved));
|
|
446
|
-
const is_dir = fs__default.statSync(resolved).isDirectory();
|
|
447
|
-
|
|
448
|
-
const ext = config.extensions.find((ext) => basename.endsWith(ext)) || path__default.extname(basename);
|
|
449
|
-
|
|
450
|
-
const name = ext ? basename.slice(0, -ext.length) : basename;
|
|
451
|
-
|
|
452
|
-
// TODO remove this after a while
|
|
453
|
-
['layout', 'layout.reset', 'error'].forEach((reserved) => {
|
|
454
|
-
if (name === `$${reserved}`) {
|
|
455
|
-
const prefix = posixify(path__default.relative(cwd, dir));
|
|
456
|
-
const bad = `${prefix}/$${reserved}${ext}`;
|
|
457
|
-
const good = `${prefix}/__${reserved}${ext}`;
|
|
458
|
-
|
|
459
|
-
throw new Error(`${bad} should be renamed ${good}`);
|
|
460
|
-
}
|
|
461
|
-
});
|
|
348
|
+
respond(request, options = {}) {
|
|
349
|
+
if (!(request instanceof Request)) {
|
|
350
|
+
throw new Error('The first argument to app.render must be a Request object. See https://github.com/sveltejs/kit/pull/3384 for details');
|
|
351
|
+
}
|
|
462
352
|
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
353
|
+
return respond(request, this.options, options);
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
`;
|
|
466
357
|
|
|
467
|
-
|
|
358
|
+
/**
|
|
359
|
+
* @param {{
|
|
360
|
+
* cwd: string;
|
|
361
|
+
* assets_base: string;
|
|
362
|
+
* config: import('types').ValidatedConfig
|
|
363
|
+
* manifest_data: import('types').ManifestData
|
|
364
|
+
* build_dir: string;
|
|
365
|
+
* output_dir: string;
|
|
366
|
+
* service_worker_entry_file: string | null;
|
|
367
|
+
* service_worker_register: boolean;
|
|
368
|
+
* }} options
|
|
369
|
+
* @param {{ vite_manifest: import('vite').Manifest, assets: import('rollup').OutputAsset[] }} client
|
|
370
|
+
*/
|
|
371
|
+
async function build_server(
|
|
372
|
+
{
|
|
373
|
+
cwd,
|
|
374
|
+
assets_base,
|
|
375
|
+
config,
|
|
376
|
+
manifest_data,
|
|
377
|
+
build_dir,
|
|
378
|
+
output_dir,
|
|
379
|
+
service_worker_entry_file,
|
|
380
|
+
service_worker_register
|
|
381
|
+
},
|
|
382
|
+
client
|
|
383
|
+
) {
|
|
384
|
+
let hooks_file = resolve_entry(config.kit.files.hooks);
|
|
385
|
+
if (!hooks_file || !fs__default.existsSync(hooks_file)) {
|
|
386
|
+
hooks_file = path__default.resolve(cwd, `${SVELTE_KIT}/build/hooks.js`);
|
|
387
|
+
fs__default.writeFileSync(hooks_file, '');
|
|
388
|
+
}
|
|
468
389
|
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
390
|
+
/** @type {Record<string, string>} */
|
|
391
|
+
const input = {
|
|
392
|
+
index: `${build_dir}/index.js`
|
|
393
|
+
};
|
|
472
394
|
|
|
473
|
-
|
|
395
|
+
// add entry points for every endpoint...
|
|
396
|
+
manifest_data.routes.forEach((route) => {
|
|
397
|
+
const file = route.type === 'endpoint' ? route.file : route.shadow;
|
|
474
398
|
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
399
|
+
if (file) {
|
|
400
|
+
const resolved = path__default.resolve(cwd, file);
|
|
401
|
+
const relative = path__default.relative(config.kit.files.routes, resolved);
|
|
402
|
+
const name = posixify(path__default.join('entries/endpoints', relative.replace(/\.js$/, '')));
|
|
403
|
+
input[name] = resolved;
|
|
404
|
+
}
|
|
405
|
+
});
|
|
478
406
|
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
407
|
+
// ...and every component used by pages
|
|
408
|
+
manifest_data.components.forEach((file) => {
|
|
409
|
+
const resolved = path__default.resolve(cwd, file);
|
|
410
|
+
const relative = path__default.relative(config.kit.files.routes, resolved);
|
|
482
411
|
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
items.push({
|
|
489
|
-
basename,
|
|
490
|
-
name,
|
|
491
|
-
ext,
|
|
492
|
-
parts,
|
|
493
|
-
file,
|
|
494
|
-
is_dir,
|
|
495
|
-
is_index,
|
|
496
|
-
is_page,
|
|
497
|
-
route_suffix
|
|
498
|
-
});
|
|
499
|
-
});
|
|
500
|
-
items = items.sort(comparator);
|
|
501
|
-
|
|
502
|
-
items.forEach((item) => {
|
|
503
|
-
const key = parent_key.slice();
|
|
504
|
-
const segments = parent_segments.slice();
|
|
505
|
-
|
|
506
|
-
if (item.is_index) {
|
|
507
|
-
if (item.route_suffix) {
|
|
508
|
-
if (segments.length > 0) {
|
|
509
|
-
const last_segment = segments[segments.length - 1].slice();
|
|
510
|
-
const last_part = last_segment[last_segment.length - 1];
|
|
511
|
-
|
|
512
|
-
if (last_part.dynamic) {
|
|
513
|
-
last_segment.push({
|
|
514
|
-
dynamic: false,
|
|
515
|
-
rest: false,
|
|
516
|
-
content: item.route_suffix
|
|
517
|
-
});
|
|
518
|
-
} else {
|
|
519
|
-
last_segment[last_segment.length - 1] = {
|
|
520
|
-
dynamic: false,
|
|
521
|
-
rest: false,
|
|
522
|
-
content: `${last_part.content}${item.route_suffix}`
|
|
523
|
-
};
|
|
524
|
-
}
|
|
525
|
-
|
|
526
|
-
segments[segments.length - 1] = last_segment;
|
|
527
|
-
key[key.length - 1] += item.route_suffix;
|
|
528
|
-
} else {
|
|
529
|
-
segments.push(item.parts);
|
|
530
|
-
}
|
|
531
|
-
}
|
|
532
|
-
} else {
|
|
533
|
-
key.push(item.name);
|
|
534
|
-
segments.push(item.parts);
|
|
535
|
-
}
|
|
412
|
+
const name = relative.startsWith('..')
|
|
413
|
+
? posixify(path__default.join('entries/pages', path__default.basename(file)))
|
|
414
|
+
: posixify(path__default.join('entries/pages', relative));
|
|
415
|
+
input[name] = resolved;
|
|
416
|
+
});
|
|
536
417
|
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
const simple_segments = segments.map((segment) => {
|
|
543
|
-
return {
|
|
544
|
-
dynamic: segment.some((part) => part.dynamic),
|
|
545
|
-
rest: segment.some((part) => part.rest),
|
|
546
|
-
content: segment
|
|
547
|
-
.map((part) => (part.dynamic ? `[${part.content}]` : part.content))
|
|
548
|
-
.join('')
|
|
549
|
-
};
|
|
550
|
-
});
|
|
418
|
+
/** @type {(file: string) => string} */
|
|
419
|
+
const app_relative = (file) => {
|
|
420
|
+
const relative_file = path__default.relative(build_dir, path__default.resolve(cwd, file));
|
|
421
|
+
return relative_file[0] === '.' ? relative_file : `./${relative_file}`;
|
|
422
|
+
};
|
|
551
423
|
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
424
|
+
fs__default.writeFileSync(
|
|
425
|
+
input.index,
|
|
426
|
+
server_template({
|
|
427
|
+
config,
|
|
428
|
+
hooks: app_relative(hooks_file),
|
|
429
|
+
has_service_worker: service_worker_register && !!service_worker_entry_file,
|
|
430
|
+
template: load_template(cwd, config)
|
|
431
|
+
})
|
|
432
|
+
);
|
|
556
433
|
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
}
|
|
434
|
+
/** @type {import('vite').UserConfig} */
|
|
435
|
+
const vite_config = await config.kit.vite();
|
|
560
436
|
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
path__default.join(dir, item.basename),
|
|
567
|
-
key,
|
|
568
|
-
segments,
|
|
569
|
-
params,
|
|
570
|
-
layout_reset ? [layout_reset] : layout_stack.concat(layout),
|
|
571
|
-
layout_reset ? [error] : error_stack.concat(error)
|
|
572
|
-
);
|
|
573
|
-
} else if (item.is_page) {
|
|
574
|
-
components.push(item.file);
|
|
575
|
-
|
|
576
|
-
const concatenated = layout_stack.concat(item.file);
|
|
577
|
-
const errors = error_stack.slice();
|
|
578
|
-
|
|
579
|
-
const pattern = get_pattern(segments, true);
|
|
580
|
-
|
|
581
|
-
let i = concatenated.length;
|
|
582
|
-
while (i--) {
|
|
583
|
-
if (!errors[i] && !concatenated[i]) {
|
|
584
|
-
errors.splice(i, 1);
|
|
585
|
-
concatenated.splice(i, 1);
|
|
586
|
-
}
|
|
587
|
-
}
|
|
437
|
+
const default_config = {
|
|
438
|
+
build: {
|
|
439
|
+
target: 'es2020'
|
|
440
|
+
}
|
|
441
|
+
};
|
|
588
442
|
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
443
|
+
// don't warn on overriding defaults
|
|
444
|
+
const [modified_vite_config] = deep_merge(default_config, vite_config);
|
|
445
|
+
|
|
446
|
+
/** @type {[any, string[]]} */
|
|
447
|
+
const [merged_config, conflicts] = deep_merge(modified_vite_config, {
|
|
448
|
+
configFile: false,
|
|
449
|
+
root: cwd,
|
|
450
|
+
base: assets_base,
|
|
451
|
+
build: {
|
|
452
|
+
ssr: true,
|
|
453
|
+
outDir: `${output_dir}/server`,
|
|
454
|
+
manifest: true,
|
|
455
|
+
polyfillDynamicImport: false,
|
|
456
|
+
rollupOptions: {
|
|
457
|
+
input,
|
|
458
|
+
output: {
|
|
459
|
+
format: 'esm',
|
|
460
|
+
entryFileNames: '[name].js',
|
|
461
|
+
chunkFileNames: 'chunks/[name]-[hash].js',
|
|
462
|
+
assetFileNames: 'assets/[name]-[hash][extname]'
|
|
463
|
+
},
|
|
464
|
+
preserveEntrySignatures: 'strict'
|
|
465
|
+
}
|
|
466
|
+
},
|
|
467
|
+
plugins: [
|
|
468
|
+
svelte({
|
|
469
|
+
extensions: config.extensions,
|
|
470
|
+
compilerOptions: {
|
|
471
|
+
hydratable: !!config.kit.browser.hydrate
|
|
592
472
|
}
|
|
473
|
+
})
|
|
474
|
+
],
|
|
475
|
+
resolve: {
|
|
476
|
+
alias: get_aliases(config)
|
|
477
|
+
}
|
|
478
|
+
});
|
|
593
479
|
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
const path = segments.every((segment) => segment.length === 1 && !segment[0].dynamic)
|
|
597
|
-
? `/${segments.map((segment) => segment[0].content).join('/')}`
|
|
598
|
-
: '';
|
|
599
|
-
|
|
600
|
-
routes.push({
|
|
601
|
-
type: 'page',
|
|
602
|
-
key: key.join('/'),
|
|
603
|
-
segments: simple_segments,
|
|
604
|
-
pattern,
|
|
605
|
-
params,
|
|
606
|
-
path,
|
|
607
|
-
shadow: null,
|
|
608
|
-
a: /** @type {string[]} */ (concatenated),
|
|
609
|
-
b: /** @type {string[]} */ (errors)
|
|
610
|
-
});
|
|
611
|
-
} else {
|
|
612
|
-
const pattern = get_pattern(segments, !item.route_suffix);
|
|
613
|
-
|
|
614
|
-
routes.push({
|
|
615
|
-
type: 'endpoint',
|
|
616
|
-
key: key.join('/'),
|
|
617
|
-
segments: simple_segments,
|
|
618
|
-
pattern,
|
|
619
|
-
file: item.file,
|
|
620
|
-
params
|
|
621
|
-
});
|
|
622
|
-
}
|
|
623
|
-
});
|
|
624
|
-
}
|
|
480
|
+
print_config_conflicts(conflicts, 'kit.vite.', 'build_server');
|
|
625
481
|
|
|
626
|
-
const
|
|
482
|
+
const { chunks } = await create_build(merged_config);
|
|
627
483
|
|
|
628
|
-
|
|
629
|
-
const
|
|
484
|
+
/** @type {import('vite').Manifest} */
|
|
485
|
+
const vite_manifest = JSON.parse(fs__default.readFileSync(`${output_dir}/server/manifest.json`, 'utf-8'));
|
|
630
486
|
|
|
631
|
-
|
|
487
|
+
mkdirp(`${output_dir}/server/nodes`);
|
|
488
|
+
mkdirp(`${output_dir}/server/stylesheets`);
|
|
632
489
|
|
|
633
|
-
|
|
490
|
+
const stylesheet_lookup = new Map();
|
|
634
491
|
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
492
|
+
client.assets.forEach((asset) => {
|
|
493
|
+
if (asset.fileName.endsWith('.css')) {
|
|
494
|
+
if (config.kit.amp || asset.source.length < config.kit.inlineStyleThreshold) {
|
|
495
|
+
const index = stylesheet_lookup.size;
|
|
496
|
+
const file = `${output_dir}/server/stylesheets/${index}.js`;
|
|
640
497
|
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
const relative = path__default.relative(cwd, path__default.resolve(config.kit.files.routes, prev.key));
|
|
644
|
-
throw new Error(`Duplicate route files: ${relative}`);
|
|
498
|
+
fs__default.writeFileSync(file, `// ${asset.fileName}\nexport default ${s(asset.source)};`);
|
|
499
|
+
stylesheet_lookup.set(asset.fileName, index);
|
|
645
500
|
}
|
|
646
|
-
|
|
647
|
-
route.shadow = prev.file;
|
|
648
|
-
routes.splice(--i, 1);
|
|
649
501
|
}
|
|
650
|
-
}
|
|
651
|
-
|
|
652
|
-
const assets = fs__default.existsSync(config.kit.files.assets)
|
|
653
|
-
? list_files({ config, dir: config.kit.files.assets, path: '' })
|
|
654
|
-
: [];
|
|
655
|
-
|
|
656
|
-
return {
|
|
657
|
-
assets,
|
|
658
|
-
layout,
|
|
659
|
-
error,
|
|
660
|
-
components,
|
|
661
|
-
routes
|
|
662
|
-
};
|
|
663
|
-
}
|
|
664
|
-
|
|
665
|
-
/**
|
|
666
|
-
* @param {string} needle
|
|
667
|
-
* @param {string} haystack
|
|
668
|
-
*/
|
|
669
|
-
function count_occurrences(needle, haystack) {
|
|
670
|
-
let count = 0;
|
|
671
|
-
for (let i = 0; i < haystack.length; i += 1) {
|
|
672
|
-
if (haystack[i] === needle) count += 1;
|
|
673
|
-
}
|
|
674
|
-
return count;
|
|
675
|
-
}
|
|
676
|
-
|
|
677
|
-
/** @param {string} path */
|
|
678
|
-
function is_spread(path) {
|
|
679
|
-
const spread_pattern = /\[\.{3}/g;
|
|
680
|
-
return spread_pattern.test(path);
|
|
681
|
-
}
|
|
502
|
+
});
|
|
682
503
|
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
* @param {Item} b
|
|
686
|
-
*/
|
|
687
|
-
function comparator(a, b) {
|
|
688
|
-
if (a.is_index !== b.is_index) {
|
|
689
|
-
if (a.is_index) return is_spread(a.file) ? 1 : -1;
|
|
504
|
+
manifest_data.components.forEach((component, i) => {
|
|
505
|
+
const file = `${output_dir}/server/nodes/${i}.js`;
|
|
690
506
|
|
|
691
|
-
|
|
692
|
-
|
|
507
|
+
const js = new Set();
|
|
508
|
+
const css = new Set();
|
|
509
|
+
find_deps(component, client.vite_manifest, js, css);
|
|
693
510
|
|
|
694
|
-
|
|
511
|
+
const imports = [`import * as module from '../${vite_manifest[component].file}';`];
|
|
695
512
|
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
513
|
+
const exports = [
|
|
514
|
+
'export { module };',
|
|
515
|
+
`export const entry = '${client.vite_manifest[component].file}';`,
|
|
516
|
+
`export const js = ${s(Array.from(js))};`,
|
|
517
|
+
`export const css = ${s(Array.from(css))};`
|
|
518
|
+
];
|
|
699
519
|
|
|
700
|
-
|
|
701
|
-
|
|
520
|
+
/** @type {string[]} */
|
|
521
|
+
const styles = [];
|
|
702
522
|
|
|
703
|
-
|
|
704
|
-
if (
|
|
705
|
-
|
|
523
|
+
css.forEach((file) => {
|
|
524
|
+
if (stylesheet_lookup.has(file)) {
|
|
525
|
+
const index = stylesheet_lookup.get(file);
|
|
526
|
+
const name = `stylesheet_${index}`;
|
|
527
|
+
imports.push(`import ${name} from '../stylesheets/${index}.js';`);
|
|
528
|
+
styles.push(`\t${s(file)}: ${name}`);
|
|
706
529
|
}
|
|
707
|
-
|
|
708
|
-
return a_sub_part.content < b_sub_part.content ? -1 : 1;
|
|
709
|
-
}
|
|
710
|
-
|
|
711
|
-
// If one is ...rest order it later
|
|
712
|
-
if (a_sub_part.rest !== b_sub_part.rest) return a_sub_part.rest ? 1 : -1;
|
|
713
|
-
|
|
714
|
-
if (a_sub_part.dynamic !== b_sub_part.dynamic) {
|
|
715
|
-
return a_sub_part.dynamic ? 1 : -1;
|
|
716
|
-
}
|
|
530
|
+
});
|
|
717
531
|
|
|
718
|
-
if (
|
|
719
|
-
|
|
720
|
-
b_sub_part.content.length - a_sub_part.content.length ||
|
|
721
|
-
(a_sub_part.content < b_sub_part.content ? -1 : 1)
|
|
722
|
-
);
|
|
532
|
+
if (styles.length > 0) {
|
|
533
|
+
exports.push(`export const styles = {\n${styles.join(',\n')}\n};`);
|
|
723
534
|
}
|
|
724
|
-
}
|
|
725
535
|
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
}
|
|
536
|
+
fs__default.writeFileSync(file, `${imports.join('\n')}\n\n${exports.join('\n')}\n`);
|
|
537
|
+
});
|
|
729
538
|
|
|
730
|
-
|
|
731
|
-
|
|
539
|
+
return {
|
|
540
|
+
chunks,
|
|
541
|
+
vite_manifest,
|
|
542
|
+
methods: get_methods(cwd, chunks, manifest_data)
|
|
543
|
+
};
|
|
732
544
|
}
|
|
733
545
|
|
|
546
|
+
/** @type {Record<string, string>} */
|
|
547
|
+
const method_names = {
|
|
548
|
+
get: 'get',
|
|
549
|
+
head: 'head',
|
|
550
|
+
post: 'post',
|
|
551
|
+
put: 'put',
|
|
552
|
+
del: 'delete',
|
|
553
|
+
patch: 'patch'
|
|
554
|
+
};
|
|
555
|
+
|
|
734
556
|
/**
|
|
735
|
-
*
|
|
736
|
-
* @param {string}
|
|
557
|
+
*
|
|
558
|
+
* @param {string} cwd
|
|
559
|
+
* @param {import('rollup').OutputChunk[]} output
|
|
560
|
+
* @param {import('types').ManifestData} manifest_data
|
|
737
561
|
*/
|
|
738
|
-
function
|
|
739
|
-
/** @type {
|
|
740
|
-
const
|
|
741
|
-
|
|
742
|
-
if (!
|
|
743
|
-
const
|
|
562
|
+
function get_methods(cwd, output, manifest_data) {
|
|
563
|
+
/** @type {Record<string, string[]>} */
|
|
564
|
+
const lookup = {};
|
|
565
|
+
output.forEach((chunk) => {
|
|
566
|
+
if (!chunk.facadeModuleId) return;
|
|
567
|
+
const id = chunk.facadeModuleId.slice(cwd.length + 1);
|
|
568
|
+
lookup[id] = chunk.exports;
|
|
569
|
+
});
|
|
744
570
|
|
|
745
|
-
|
|
571
|
+
/** @type {Record<string, import('types').HttpMethod[]>} */
|
|
572
|
+
const methods = {};
|
|
573
|
+
manifest_data.routes.forEach((route) => {
|
|
574
|
+
const file = route.type === 'endpoint' ? route.file : route.shadow;
|
|
746
575
|
|
|
747
|
-
if (
|
|
748
|
-
|
|
576
|
+
if (file && lookup[file]) {
|
|
577
|
+
methods[file] = lookup[file]
|
|
578
|
+
.map((x) => /** @type {import('types').HttpMethod} */ (method_names[x]))
|
|
579
|
+
.filter(Boolean);
|
|
749
580
|
}
|
|
750
|
-
|
|
751
|
-
result.push({
|
|
752
|
-
content,
|
|
753
|
-
dynamic,
|
|
754
|
-
rest: dynamic && /^\.{3}.+$/.test(content)
|
|
755
|
-
});
|
|
756
581
|
});
|
|
757
582
|
|
|
758
|
-
return
|
|
583
|
+
return methods;
|
|
759
584
|
}
|
|
760
585
|
|
|
761
586
|
/**
|
|
762
|
-
* @param {
|
|
763
|
-
* @
|
|
587
|
+
* @param {import('types').ValidatedConfig} config
|
|
588
|
+
* @returns {Promise<import('types').BuildData>}
|
|
764
589
|
*/
|
|
765
|
-
function
|
|
766
|
-
const
|
|
767
|
-
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
|
|
771
|
-
|
|
772
|
-
|
|
590
|
+
async function build(config) {
|
|
591
|
+
const cwd = process.cwd(); // TODO is this necessary?
|
|
592
|
+
|
|
593
|
+
const build_dir = path__default.resolve(`${SVELTE_KIT}/build`);
|
|
594
|
+
rimraf(build_dir);
|
|
595
|
+
mkdirp(build_dir);
|
|
596
|
+
|
|
597
|
+
const output_dir = path__default.resolve(`${SVELTE_KIT}/output`);
|
|
598
|
+
rimraf(output_dir);
|
|
599
|
+
mkdirp(output_dir);
|
|
600
|
+
|
|
601
|
+
generate_tsconfig(config);
|
|
602
|
+
|
|
603
|
+
const options = {
|
|
604
|
+
cwd,
|
|
605
|
+
config,
|
|
606
|
+
build_dir,
|
|
607
|
+
// TODO this is so that Vite's preloading works. Unfortunately, it fails
|
|
608
|
+
// during `svelte-kit preview`, because we use a local asset path. If Vite
|
|
609
|
+
// used relative paths, I _think_ this could get fixed. Issue here:
|
|
610
|
+
// https://github.com/vitejs/vite/issues/2009
|
|
611
|
+
assets_base: `${config.kit.paths.assets || config.kit.paths.base}/${config.kit.appDir}/`,
|
|
612
|
+
manifest_data: create_manifest_data({
|
|
613
|
+
config,
|
|
614
|
+
cwd
|
|
615
|
+
}),
|
|
616
|
+
output_dir,
|
|
617
|
+
client_entry_file: path__default.relative(cwd, `${runtime}/client/start.js`),
|
|
618
|
+
service_worker_entry_file: resolve_entry(config.kit.files.serviceWorker),
|
|
619
|
+
service_worker_register: config.kit.serviceWorker.register
|
|
620
|
+
};
|
|
773
621
|
|
|
774
|
-
|
|
775
|
-
|
|
776
|
-
if (part.dynamic) return '([^/]+?)';
|
|
777
|
-
|
|
778
|
-
return (
|
|
779
|
-
part.content
|
|
780
|
-
// allow users to specify characters on the file system in an encoded manner
|
|
781
|
-
.normalize()
|
|
782
|
-
// We use [ and ] to denote parameters, so users must encode these on the file
|
|
783
|
-
// system to match against them. We don't decode all characters since others
|
|
784
|
-
// can already be epressed and so that '%' can be easily used directly in filenames
|
|
785
|
-
.replace(/%5[Bb]/g, '[')
|
|
786
|
-
.replace(/%5[Dd]/g, ']')
|
|
787
|
-
// '#', '/', and '?' can only appear in URL path segments in an encoded manner.
|
|
788
|
-
// They will not be touched by decodeURI so need to be encoded here, so
|
|
789
|
-
// that we can match against them.
|
|
790
|
-
// We skip '/' since you can't create a file with it on any OS
|
|
791
|
-
.replace(/#/g, '%23')
|
|
792
|
-
.replace(/\?/g, '%3F')
|
|
793
|
-
// escape characters that have special meaning in regex
|
|
794
|
-
.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')
|
|
795
|
-
);
|
|
796
|
-
});
|
|
622
|
+
const client = await build_client(options);
|
|
623
|
+
const server = await build_server(options, client);
|
|
797
624
|
|
|
798
|
-
|
|
799
|
-
|
|
800
|
-
|
|
625
|
+
if (options.service_worker_entry_file) {
|
|
626
|
+
if (config.kit.paths.assets) {
|
|
627
|
+
throw new Error('Cannot use service worker alongside config.kit.paths.assets');
|
|
628
|
+
}
|
|
801
629
|
|
|
802
|
-
|
|
630
|
+
await build_service_worker(options, client.vite_manifest);
|
|
631
|
+
}
|
|
803
632
|
|
|
804
|
-
|
|
805
|
-
|
|
633
|
+
const build_data = {
|
|
634
|
+
app_dir: config.kit.appDir,
|
|
635
|
+
manifest_data: options.manifest_data,
|
|
636
|
+
service_worker: options.service_worker_entry_file ? 'service-worker.js' : null, // TODO make file configurable?
|
|
637
|
+
client,
|
|
638
|
+
server,
|
|
639
|
+
static: options.manifest_data.assets.map((asset) => posixify(asset.file)),
|
|
640
|
+
entries: options.manifest_data.routes
|
|
641
|
+
.map((route) => (route.type === 'page' ? route.path : ''))
|
|
642
|
+
.filter(Boolean)
|
|
643
|
+
};
|
|
806
644
|
|
|
807
|
-
|
|
808
|
-
|
|
809
|
-
* config: import('types').ValidatedConfig;
|
|
810
|
-
* dir: string;
|
|
811
|
-
* path: string;
|
|
812
|
-
* files?: import('types').Asset[]
|
|
813
|
-
* }} args
|
|
814
|
-
*/
|
|
815
|
-
function list_files({ config, dir, path, files = [] }) {
|
|
816
|
-
fs__default.readdirSync(dir).forEach((file) => {
|
|
817
|
-
const full = `${dir}/${file}`;
|
|
818
|
-
|
|
819
|
-
const stats = fs__default.statSync(full);
|
|
820
|
-
const joined = path ? `${path}/${file}` : file;
|
|
821
|
-
|
|
822
|
-
if (stats.isDirectory()) {
|
|
823
|
-
list_files({ config, dir: full, path: joined, files });
|
|
824
|
-
} else if (config.kit.serviceWorker.files(joined)) {
|
|
825
|
-
files.push({
|
|
826
|
-
file: joined,
|
|
827
|
-
size: stats.size,
|
|
828
|
-
type: mime.getType(joined)
|
|
829
|
-
});
|
|
830
|
-
}
|
|
831
|
-
});
|
|
645
|
+
const manifest = `export const manifest = ${generate_manifest(build_data, '.')};\n`;
|
|
646
|
+
fs__default.writeFileSync(`${output_dir}/server/manifest.js`, manifest);
|
|
832
647
|
|
|
833
|
-
return
|
|
648
|
+
return build_data;
|
|
834
649
|
}
|
|
835
650
|
|
|
836
|
-
export {
|
|
651
|
+
export { build };
|