@sveltejs/kit 1.0.0-next.28 → 1.0.0-next.280

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.
Files changed (79) hide show
  1. package/README.md +12 -9
  2. package/assets/app/env.js +20 -0
  3. package/assets/app/navigation.js +79 -0
  4. package/assets/app/paths.js +1 -0
  5. package/assets/app/stores.js +97 -0
  6. package/assets/chunks/utils.js +13 -0
  7. package/assets/client/singletons.js +21 -0
  8. package/assets/client/start.js +1560 -0
  9. package/assets/components/error.svelte +18 -2
  10. package/assets/env.js +8 -0
  11. package/assets/paths.js +13 -0
  12. package/assets/server/index.js +2759 -0
  13. package/dist/chunks/amp_hook.js +56 -0
  14. package/dist/chunks/build.js +658 -0
  15. package/dist/chunks/cert.js +28154 -0
  16. package/dist/chunks/index.js +473 -0
  17. package/dist/chunks/index2.js +836 -0
  18. package/dist/chunks/index3.js +643 -0
  19. package/dist/chunks/index4.js +120 -0
  20. package/dist/chunks/index5.js +881 -0
  21. package/dist/chunks/index6.js +170 -0
  22. package/dist/chunks/index7.js +15584 -0
  23. package/dist/chunks/index8.js +4207 -0
  24. package/dist/chunks/misc.js +3 -0
  25. package/dist/chunks/multipart-parser.js +449 -0
  26. package/dist/cli.js +1132 -86
  27. package/dist/hooks.js +28 -0
  28. package/dist/install-fetch.js +6518 -0
  29. package/dist/node.js +95 -0
  30. package/package.json +97 -54
  31. package/svelte-kit.js +2 -0
  32. package/types/ambient.d.ts +208 -0
  33. package/types/index.d.ts +391 -0
  34. package/types/internal.d.ts +372 -0
  35. package/CHANGELOG.md +0 -326
  36. package/assets/runtime/app/navigation.js +0 -23
  37. package/assets/runtime/app/navigation.js.map +0 -1
  38. package/assets/runtime/app/paths.js +0 -2
  39. package/assets/runtime/app/paths.js.map +0 -1
  40. package/assets/runtime/app/stores.js +0 -78
  41. package/assets/runtime/app/stores.js.map +0 -1
  42. package/assets/runtime/internal/singletons.js +0 -15
  43. package/assets/runtime/internal/singletons.js.map +0 -1
  44. package/assets/runtime/internal/start.js +0 -591
  45. package/assets/runtime/internal/start.js.map +0 -1
  46. package/assets/runtime/utils-85ebcc60.js +0 -18
  47. package/assets/runtime/utils-85ebcc60.js.map +0 -1
  48. package/dist/api.js +0 -44
  49. package/dist/api.js.map +0 -1
  50. package/dist/build.js +0 -246
  51. package/dist/build.js.map +0 -1
  52. package/dist/cli.js.map +0 -1
  53. package/dist/colors.js +0 -37
  54. package/dist/colors.js.map +0 -1
  55. package/dist/create_app.js +0 -580
  56. package/dist/create_app.js.map +0 -1
  57. package/dist/index.js +0 -368
  58. package/dist/index.js.map +0 -1
  59. package/dist/index2.js +0 -12035
  60. package/dist/index2.js.map +0 -1
  61. package/dist/index3.js +0 -549
  62. package/dist/index3.js.map +0 -1
  63. package/dist/index4.js +0 -74
  64. package/dist/index4.js.map +0 -1
  65. package/dist/index5.js +0 -464
  66. package/dist/index5.js.map +0 -1
  67. package/dist/index6.js +0 -735
  68. package/dist/index6.js.map +0 -1
  69. package/dist/logging.js +0 -43
  70. package/dist/logging.js.map +0 -1
  71. package/dist/package.js +0 -432
  72. package/dist/package.js.map +0 -1
  73. package/dist/renderer.js +0 -2425
  74. package/dist/renderer.js.map +0 -1
  75. package/dist/standard.js +0 -101
  76. package/dist/standard.js.map +0 -1
  77. package/dist/utils.js +0 -58
  78. package/dist/utils.js.map +0 -1
  79. package/svelte-kit +0 -3
@@ -0,0 +1,836 @@
1
+ import fs__default from 'fs';
2
+ import path__default from 'path';
3
+ import { s } from './misc.js';
4
+ import { m as mkdirp, r as runtime, f as posixify } from '../cli.js';
5
+
6
+ /**
7
+ * Takes zero or more objects and returns a new object that has all the values
8
+ * deeply merged together. None of the original objects will be mutated at any
9
+ * level, and the returned object will have no references to the original
10
+ * objects at any depth. If there's a conflict the last one wins, except for
11
+ * arrays which will be combined.
12
+ * @param {...Object} objects
13
+ * @returns {[Record<string, any>, string[]]} a 2-tuple with the merged object,
14
+ * and a list of merge conflicts if there were any, in dotted notation
15
+ */
16
+ function deep_merge(...objects) {
17
+ const result = {};
18
+ /** @type {string[]} */
19
+ const conflicts = [];
20
+ objects.forEach((o) => merge_into(result, o, conflicts));
21
+ return [result, conflicts];
22
+ }
23
+
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
+ }
33
+
34
+ /**
35
+ * Merges b into a, recursively, mutating a.
36
+ * @param {Record<string, any>} a
37
+ * @param {Record<string, any>} b
38
+ * @param {string[]} conflicts array to accumulate conflicts in
39
+ * @param {string[]} path array of property names representing the current
40
+ * location in the tree
41
+ */
42
+ function merge_into(a, b, conflicts = [], path = []) {
43
+ /**
44
+ * Checks for "plain old Javascript object", typically made as an object
45
+ * literal. Excludes Arrays and built-in types like Buffer.
46
+ * @param {any} x
47
+ */
48
+ const is_plain_object = (x) => typeof x === 'object' && x.constructor === Object;
49
+
50
+ for (const prop in b) {
51
+ // normalize alias objects to array
52
+ if (prop === 'alias' && path[path.length - 1] === 'resolve') {
53
+ if (a[prop]) a[prop] = normalize_alias(a[prop]);
54
+ if (b[prop]) b[prop] = normalize_alias(b[prop]);
55
+ }
56
+
57
+ if (is_plain_object(b[prop])) {
58
+ if (!is_plain_object(a[prop])) {
59
+ if (a[prop] !== undefined) {
60
+ conflicts.push([...path, prop].join('.'));
61
+ }
62
+ a[prop] = {};
63
+ }
64
+ merge_into(a[prop], b[prop], conflicts, [...path, prop]);
65
+ } else if (Array.isArray(b[prop])) {
66
+ if (!Array.isArray(a[prop])) {
67
+ if (a[prop] !== undefined) {
68
+ conflicts.push([...path, prop].join('.'));
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('.'));
82
+ }
83
+ a[prop] = b[prop];
84
+ }
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
+ }
102
+
103
+ /** @typedef {import('types').ManifestData} ManifestData */
104
+
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));
117
+ }
118
+
119
+ /**
120
+ * @param {string} str
121
+ */
122
+ function trim(str) {
123
+ return str.replace(/^\t\t/gm, '').trim();
124
+ }
125
+
126
+ /**
127
+ * @param {ManifestData} manifest_data
128
+ * @param {string} base
129
+ */
130
+ function generate_client_manifest(manifest_data, base) {
131
+ /** @type {Record<string, number>} */
132
+ const component_indexes = {};
133
+
134
+ /** @param {string} c */
135
+ const get_path = (c) => path__default.relative(base, c);
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;
184
+
185
+ export const routes = ${routes};
186
+
187
+ // we import the root layout/error components eagerly, so that
188
+ // connectivity errors after initialisation don't nuke the app
189
+ export const fallback = [c[0](), c[1]()];
190
+ `);
191
+ }
192
+
193
+ /**
194
+ * @param {ManifestData} manifest_data
195
+ */
196
+ function generate_app(manifest_data) {
197
+ // TODO remove default layout altogether
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
+ );
205
+
206
+ const levels = [];
207
+ for (let i = 0; i <= max_depth; i += 1) {
208
+ levels.push(i);
209
+ }
210
+
211
+ let l = max_depth;
212
+
213
+ let pyramid = `<svelte:component this={components[${l}]} {...(props_${l} || {})}/>`;
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();
227
+ }
228
+
229
+ return trim(`
230
+ <!-- This file is generated by @sveltejs/kit — do not edit it! -->
231
+ <script>
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
+ `);
273
+ }
274
+
275
+ /**
276
+ * @param typeMap [Object] Map of MIME type -> Array[extensions]
277
+ * @param ...
278
+ */
279
+ function Mime$1() {
280
+ this._types = Object.create(null);
281
+ this._extensions = Object.create(null);
282
+
283
+ for (let i = 0; i < arguments.length; i++) {
284
+ this.define(arguments[i]);
285
+ }
286
+
287
+ this.define = this.define.bind(this);
288
+ this.getType = this.getType.bind(this);
289
+ this.getExtension = this.getExtension.bind(this);
290
+ }
291
+
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
+ };
346
+
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();
354
+
355
+ let hasPath = last.length < path.length;
356
+ let hasDot = ext.length < last.length - 1;
357
+
358
+ return (hasDot || !hasPath) && this._types[ext] || null;
359
+ };
360
+
361
+ /**
362
+ * Return file extension associated with a mime type
363
+ */
364
+ Mime$1.prototype.getExtension = function(type) {
365
+ type = /^\s*([^;\s]*)/.test(type) && RegExp.$1;
366
+ return type && this._extensions[type.toLowerCase()] || null;
367
+ };
368
+
369
+ var Mime_1 = Mime$1;
370
+
371
+ var standard = {"application/andrew-inset":["ez"],"application/applixware":["aw"],"application/atom+xml":["atom"],"application/atomcat+xml":["atomcat"],"application/atomdeleted+xml":["atomdeleted"],"application/atomsvc+xml":["atomsvc"],"application/atsc-dwd+xml":["dwd"],"application/atsc-held+xml":["held"],"application/atsc-rsat+xml":["rsat"],"application/bdoc":["bdoc"],"application/calendar+xml":["xcs"],"application/ccxml+xml":["ccxml"],"application/cdfx+xml":["cdfx"],"application/cdmi-capability":["cdmia"],"application/cdmi-container":["cdmic"],"application/cdmi-domain":["cdmid"],"application/cdmi-object":["cdmio"],"application/cdmi-queue":["cdmiq"],"application/cu-seeme":["cu"],"application/dash+xml":["mpd"],"application/davmount+xml":["davmount"],"application/docbook+xml":["dbk"],"application/dssc+der":["dssc"],"application/dssc+xml":["xdssc"],"application/ecmascript":["es","ecma"],"application/emma+xml":["emma"],"application/emotionml+xml":["emotionml"],"application/epub+zip":["epub"],"application/exi":["exi"],"application/express":["exp"],"application/fdt+xml":["fdt"],"application/font-tdpfr":["pfr"],"application/geo+json":["geojson"],"application/gml+xml":["gml"],"application/gpx+xml":["gpx"],"application/gxf":["gxf"],"application/gzip":["gz"],"application/hjson":["hjson"],"application/hyperstudio":["stk"],"application/inkml+xml":["ink","inkml"],"application/ipfix":["ipfix"],"application/its+xml":["its"],"application/java-archive":["jar","war","ear"],"application/java-serialized-object":["ser"],"application/java-vm":["class"],"application/javascript":["js","mjs"],"application/json":["json","map"],"application/json5":["json5"],"application/jsonml+json":["jsonml"],"application/ld+json":["jsonld"],"application/lgr+xml":["lgr"],"application/lost+xml":["lostxml"],"application/mac-binhex40":["hqx"],"application/mac-compactpro":["cpt"],"application/mads+xml":["mads"],"application/manifest+json":["webmanifest"],"application/marc":["mrc"],"application/marcxml+xml":["mrcx"],"application/mathematica":["ma","nb","mb"],"application/mathml+xml":["mathml"],"application/mbox":["mbox"],"application/mediaservercontrol+xml":["mscml"],"application/metalink+xml":["metalink"],"application/metalink4+xml":["meta4"],"application/mets+xml":["mets"],"application/mmt-aei+xml":["maei"],"application/mmt-usd+xml":["musd"],"application/mods+xml":["mods"],"application/mp21":["m21","mp21"],"application/mp4":["mp4s","m4p"],"application/msword":["doc","dot"],"application/mxf":["mxf"],"application/n-quads":["nq"],"application/n-triples":["nt"],"application/node":["cjs"],"application/octet-stream":["bin","dms","lrf","mar","so","dist","distz","pkg","bpk","dump","elc","deploy","exe","dll","deb","dmg","iso","img","msi","msp","msm","buffer"],"application/oda":["oda"],"application/oebps-package+xml":["opf"],"application/ogg":["ogx"],"application/omdoc+xml":["omdoc"],"application/onenote":["onetoc","onetoc2","onetmp","onepkg"],"application/oxps":["oxps"],"application/p2p-overlay+xml":["relo"],"application/patch-ops-error+xml":["xer"],"application/pdf":["pdf"],"application/pgp-encrypted":["pgp"],"application/pgp-signature":["asc","sig"],"application/pics-rules":["prf"],"application/pkcs10":["p10"],"application/pkcs7-mime":["p7m","p7c"],"application/pkcs7-signature":["p7s"],"application/pkcs8":["p8"],"application/pkix-attr-cert":["ac"],"application/pkix-cert":["cer"],"application/pkix-crl":["crl"],"application/pkix-pkipath":["pkipath"],"application/pkixcmp":["pki"],"application/pls+xml":["pls"],"application/postscript":["ai","eps","ps"],"application/provenance+xml":["provx"],"application/pskc+xml":["pskcxml"],"application/raml+yaml":["raml"],"application/rdf+xml":["rdf","owl"],"application/reginfo+xml":["rif"],"application/relax-ng-compact-syntax":["rnc"],"application/resource-lists+xml":["rl"],"application/resource-lists-diff+xml":["rld"],"application/rls-services+xml":["rs"],"application/route-apd+xml":["rapd"],"application/route-s-tsid+xml":["sls"],"application/route-usd+xml":["rusd"],"application/rpki-ghostbusters":["gbr"],"application/rpki-manifest":["mft"],"application/rpki-roa":["roa"],"application/rsd+xml":["rsd"],"application/rss+xml":["rss"],"application/rtf":["rtf"],"application/sbml+xml":["sbml"],"application/scvp-cv-request":["scq"],"application/scvp-cv-response":["scs"],"application/scvp-vp-request":["spq"],"application/scvp-vp-response":["spp"],"application/sdp":["sdp"],"application/senml+xml":["senmlx"],"application/sensml+xml":["sensmlx"],"application/set-payment-initiation":["setpay"],"application/set-registration-initiation":["setreg"],"application/shf+xml":["shf"],"application/sieve":["siv","sieve"],"application/smil+xml":["smi","smil"],"application/sparql-query":["rq"],"application/sparql-results+xml":["srx"],"application/srgs":["gram"],"application/srgs+xml":["grxml"],"application/sru+xml":["sru"],"application/ssdl+xml":["ssdl"],"application/ssml+xml":["ssml"],"application/swid+xml":["swidtag"],"application/tei+xml":["tei","teicorpus"],"application/thraud+xml":["tfi"],"application/timestamped-data":["tsd"],"application/toml":["toml"],"application/trig":["trig"],"application/ttml+xml":["ttml"],"application/ubjson":["ubj"],"application/urc-ressheet+xml":["rsheet"],"application/urc-targetdesc+xml":["td"],"application/voicexml+xml":["vxml"],"application/wasm":["wasm"],"application/widget":["wgt"],"application/winhlp":["hlp"],"application/wsdl+xml":["wsdl"],"application/wspolicy+xml":["wspolicy"],"application/xaml+xml":["xaml"],"application/xcap-att+xml":["xav"],"application/xcap-caps+xml":["xca"],"application/xcap-diff+xml":["xdf"],"application/xcap-el+xml":["xel"],"application/xcap-ns+xml":["xns"],"application/xenc+xml":["xenc"],"application/xhtml+xml":["xhtml","xht"],"application/xliff+xml":["xlf"],"application/xml":["xml","xsl","xsd","rng"],"application/xml-dtd":["dtd"],"application/xop+xml":["xop"],"application/xproc+xml":["xpl"],"application/xslt+xml":["*xsl","xslt"],"application/xspf+xml":["xspf"],"application/xv+xml":["mxml","xhvml","xvml","xvm"],"application/yang":["yang"],"application/yin+xml":["yin"],"application/zip":["zip"],"audio/3gpp":["*3gpp"],"audio/adpcm":["adp"],"audio/amr":["amr"],"audio/basic":["au","snd"],"audio/midi":["mid","midi","kar","rmi"],"audio/mobile-xmf":["mxmf"],"audio/mp3":["*mp3"],"audio/mp4":["m4a","mp4a"],"audio/mpeg":["mpga","mp2","mp2a","mp3","m2a","m3a"],"audio/ogg":["oga","ogg","spx","opus"],"audio/s3m":["s3m"],"audio/silk":["sil"],"audio/wav":["wav"],"audio/wave":["*wav"],"audio/webm":["weba"],"audio/xm":["xm"],"font/collection":["ttc"],"font/otf":["otf"],"font/ttf":["ttf"],"font/woff":["woff"],"font/woff2":["woff2"],"image/aces":["exr"],"image/apng":["apng"],"image/avif":["avif"],"image/bmp":["bmp"],"image/cgm":["cgm"],"image/dicom-rle":["drle"],"image/emf":["emf"],"image/fits":["fits"],"image/g3fax":["g3"],"image/gif":["gif"],"image/heic":["heic"],"image/heic-sequence":["heics"],"image/heif":["heif"],"image/heif-sequence":["heifs"],"image/hej2k":["hej2"],"image/hsj2":["hsj2"],"image/ief":["ief"],"image/jls":["jls"],"image/jp2":["jp2","jpg2"],"image/jpeg":["jpeg","jpg","jpe"],"image/jph":["jph"],"image/jphc":["jhc"],"image/jpm":["jpm"],"image/jpx":["jpx","jpf"],"image/jxr":["jxr"],"image/jxra":["jxra"],"image/jxrs":["jxrs"],"image/jxs":["jxs"],"image/jxsc":["jxsc"],"image/jxsi":["jxsi"],"image/jxss":["jxss"],"image/ktx":["ktx"],"image/ktx2":["ktx2"],"image/png":["png"],"image/sgi":["sgi"],"image/svg+xml":["svg","svgz"],"image/t38":["t38"],"image/tiff":["tif","tiff"],"image/tiff-fx":["tfx"],"image/webp":["webp"],"image/wmf":["wmf"],"message/disposition-notification":["disposition-notification"],"message/global":["u8msg"],"message/global-delivery-status":["u8dsn"],"message/global-disposition-notification":["u8mdn"],"message/global-headers":["u8hdr"],"message/rfc822":["eml","mime"],"model/3mf":["3mf"],"model/gltf+json":["gltf"],"model/gltf-binary":["glb"],"model/iges":["igs","iges"],"model/mesh":["msh","mesh","silo"],"model/mtl":["mtl"],"model/obj":["obj"],"model/step+xml":["stpx"],"model/step+zip":["stpz"],"model/step-xml+zip":["stpxz"],"model/stl":["stl"],"model/vrml":["wrl","vrml"],"model/x3d+binary":["*x3db","x3dbz"],"model/x3d+fastinfoset":["x3db"],"model/x3d+vrml":["*x3dv","x3dvz"],"model/x3d+xml":["x3d","x3dz"],"model/x3d-vrml":["x3dv"],"text/cache-manifest":["appcache","manifest"],"text/calendar":["ics","ifb"],"text/coffeescript":["coffee","litcoffee"],"text/css":["css"],"text/csv":["csv"],"text/html":["html","htm","shtml"],"text/jade":["jade"],"text/jsx":["jsx"],"text/less":["less"],"text/markdown":["markdown","md"],"text/mathml":["mml"],"text/mdx":["mdx"],"text/n3":["n3"],"text/plain":["txt","text","conf","def","list","log","in","ini"],"text/richtext":["rtx"],"text/rtf":["*rtf"],"text/sgml":["sgml","sgm"],"text/shex":["shex"],"text/slim":["slim","slm"],"text/spdx":["spdx"],"text/stylus":["stylus","styl"],"text/tab-separated-values":["tsv"],"text/troff":["t","tr","roff","man","me","ms"],"text/turtle":["ttl"],"text/uri-list":["uri","uris","urls"],"text/vcard":["vcard"],"text/vtt":["vtt"],"text/xml":["*xml"],"text/yaml":["yaml","yml"],"video/3gpp":["3gp","3gpp"],"video/3gpp2":["3g2"],"video/h261":["h261"],"video/h263":["h263"],"video/h264":["h264"],"video/iso.segment":["m4s"],"video/jpeg":["jpgv"],"video/jpm":["*jpm","jpgm"],"video/mj2":["mj2","mjp2"],"video/mp2t":["ts"],"video/mp4":["mp4","mp4v","mpg4"],"video/mpeg":["mpeg","mpg","mpe","m1v","m2v"],"video/ogg":["ogv"],"video/quicktime":["qt","mov"],"video/webm":["webm"]};
372
+
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"]};
374
+
375
+ let Mime = Mime_1;
376
+ var mime = new Mime(standard, other);
377
+
378
+ /**
379
+ * A portion of a file or directory name where the name has been split into
380
+ * static and dynamic parts
381
+ * @typedef {{
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
+ */
398
+
399
+ const specials = new Set(['__layout', '__layout.reset', '__error']);
400
+
401
+ /**
402
+ * @param {{
403
+ * config: import('types').ValidatedConfig;
404
+ * fallback?: string;
405
+ * cwd?: string;
406
+ * }} opts
407
+ * @returns {import('types').ManifestData}
408
+ */
409
+ function create_manifest_data({
410
+ config,
411
+ fallback = `${runtime}/components`,
412
+ cwd = process.cwd()
413
+ }) {
414
+ /**
415
+ * @param {string} file_name
416
+ * @param {string} dir
417
+ */
418
+ function find_layout(file_name, dir) {
419
+ const files = config.extensions.map((ext) => posixify(path__default.join(dir, `${file_name}${ext}`)));
420
+ return files.find((file) => fs__default.existsSync(path__default.resolve(cwd, file)));
421
+ }
422
+
423
+ /** @type {string[]} */
424
+ const components = [];
425
+
426
+ /** @type {import('types').RouteData[]} */
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
+ });
462
+
463
+ if (basename.startsWith('__') && !specials.has(name)) {
464
+ throw new Error(`Files and directories prefixed with __ are reserved (saw ${file})`);
465
+ }
466
+
467
+ if (!is_dir && !/^(\.[a-z0-9]+)+$/i.test(ext)) return null; // filter out tmp files etc
468
+
469
+ if (!config.kit.routes(file)) {
470
+ return;
471
+ }
472
+
473
+ const segment = is_dir ? basename : name;
474
+
475
+ if (/\]\[/.test(segment)) {
476
+ throw new Error(`Invalid route ${file} — parameters must be separated`);
477
+ }
478
+
479
+ if (count_occurrences('[', segment) !== count_occurrences(']', segment)) {
480
+ throw new Error(`Invalid route ${file} — brackets are unbalanced`);
481
+ }
482
+
483
+ const parts = get_parts(segment, file);
484
+ const is_index = is_dir ? false : basename.startsWith('index.');
485
+ const is_page = config.extensions.indexOf(ext) !== -1;
486
+ const route_suffix = basename.slice(basename.indexOf('.'), -ext.length);
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
+ }
536
+
537
+ const params = parent_params.slice();
538
+ params.push(...item.parts.filter((p) => p.dynamic).map((p) => p.content));
539
+
540
+ // TODO seems slightly backwards to derive the simple segment representation
541
+ // from the more complex form, rather than vice versa — maybe swap it round
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
+ });
551
+
552
+ if (item.is_dir) {
553
+ const layout_reset = find_layout('__layout.reset', item.file);
554
+ const layout = find_layout('__layout', item.file);
555
+ const error = find_layout('__error', item.file);
556
+
557
+ if (layout_reset && layout) {
558
+ throw new Error(`Cannot have __layout next to __layout.reset: ${layout_reset}`);
559
+ }
560
+
561
+ if (layout_reset) components.push(layout_reset);
562
+ if (layout) components.push(layout);
563
+ if (error) components.push(error);
564
+
565
+ walk(
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
+ }
588
+
589
+ i = errors.length;
590
+ while (i--) {
591
+ if (errors[i]) break;
592
+ }
593
+
594
+ errors.splice(i + 1);
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
+ }
625
+
626
+ const base = path__default.relative(cwd, config.kit.files.routes);
627
+
628
+ const layout = find_layout('__layout', base) || default_layout;
629
+ const error = find_layout('__error', base) || default_error;
630
+
631
+ components.push(layout, error);
632
+
633
+ walk(config.kit.files.routes, [], [], [], [layout], [error]);
634
+
635
+ // merge matching page/endpoint pairs into shadowed pages
636
+ let i = routes.length;
637
+ while (i--) {
638
+ const route = routes[i];
639
+ const prev = routes[i - 1];
640
+
641
+ if (prev && prev.key === route.key) {
642
+ if (prev.type !== 'endpoint' || route.type !== 'page') {
643
+ const relative = path__default.relative(cwd, path__default.resolve(config.kit.files.routes, prev.key));
644
+ throw new Error(`Duplicate route files: ${relative}`);
645
+ }
646
+
647
+ route.shadow = prev.file;
648
+ routes.splice(--i, 1);
649
+ }
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
+ }
682
+
683
+ /**
684
+ * @param {Item} a
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;
690
+
691
+ return is_spread(b.file) ? -1 : 1;
692
+ }
693
+
694
+ const max = Math.max(a.parts.length, b.parts.length);
695
+
696
+ for (let i = 0; i < max; i += 1) {
697
+ const a_sub_part = a.parts[i];
698
+ const b_sub_part = b.parts[i];
699
+
700
+ if (!a_sub_part) return 1; // b is more specific, so goes first
701
+ if (!b_sub_part) return -1;
702
+
703
+ if (a_sub_part.rest && b_sub_part.rest) {
704
+ if (a.is_page !== b.is_page) {
705
+ return a.is_page ? 1 : -1;
706
+ }
707
+ // sort alphabetically
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
+ }
717
+
718
+ if (!a_sub_part.dynamic && a_sub_part.content !== b_sub_part.content) {
719
+ return (
720
+ b_sub_part.content.length - a_sub_part.content.length ||
721
+ (a_sub_part.content < b_sub_part.content ? -1 : 1)
722
+ );
723
+ }
724
+ }
725
+
726
+ if (a.is_page !== b.is_page) {
727
+ return a.is_page ? 1 : -1;
728
+ }
729
+
730
+ // otherwise sort alphabetically
731
+ return a.file < b.file ? -1 : 1;
732
+ }
733
+
734
+ /**
735
+ * @param {string} part
736
+ * @param {string} file
737
+ */
738
+ function get_parts(part, file) {
739
+ /** @type {Part[]} */
740
+ const result = [];
741
+ part.split(/\[(.+?\(.+?\)|.+?)\]/).map((str, i) => {
742
+ if (!str) return;
743
+ const dynamic = i % 2 === 1;
744
+
745
+ const [, content] = dynamic ? /([^(]+)$/.exec(str) || [null, null] : [null, str];
746
+
747
+ if (!content || (dynamic && !/^(\.\.\.)?[a-zA-Z0-9_$]+$/.test(content))) {
748
+ throw new Error(`Invalid route ${file} — parameter name must match /^[a-zA-Z0-9_$]+$/`);
749
+ }
750
+
751
+ result.push({
752
+ content,
753
+ dynamic,
754
+ rest: dynamic && /^\.{3}.+$/.test(content)
755
+ });
756
+ });
757
+
758
+ return result;
759
+ }
760
+
761
+ /**
762
+ * @param {Part[][]} segments
763
+ * @param {boolean} add_trailing_slash
764
+ */
765
+ function get_pattern(segments, add_trailing_slash) {
766
+ const path = segments
767
+ .map((segment) => {
768
+ if (segment.length === 1 && segment[0].rest) {
769
+ // special case — `src/routes/foo/[...bar]/baz` matches `/foo/baz`
770
+ // so we need to make the leading slash optional
771
+ return '(?:\\/(.*))?';
772
+ }
773
+
774
+ const parts = segment.map((part) => {
775
+ if (part.rest) return '(.*?)';
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
+ });
797
+
798
+ return '\\/' + parts.join('');
799
+ })
800
+ .join('');
801
+
802
+ const trailing = add_trailing_slash && segments.length ? '\\/?$' : '$';
803
+
804
+ return new RegExp(`^${path || '\\/'}${trailing}`);
805
+ }
806
+
807
+ /**
808
+ * @param {{
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
+ });
832
+
833
+ return files;
834
+ }
835
+
836
+ export { create_app as a, create_manifest_data as c, deep_merge as d };