@qwik.dev/core 2.0.0-beta.5 → 2.0.0-beta.6

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 (49) hide show
  1. package/dist/build/package.json +1 -1
  2. package/dist/cli.cjs +2 -2
  3. package/dist/core-internal.d.ts +49 -11
  4. package/dist/core.cjs +239 -105
  5. package/dist/core.cjs.map +1 -1
  6. package/dist/core.min.mjs +1 -1
  7. package/dist/core.mjs +224 -105
  8. package/dist/core.mjs.map +1 -1
  9. package/dist/core.prod.cjs +117 -63
  10. package/dist/core.prod.mjs +113 -58
  11. package/dist/loader/package.json +1 -1
  12. package/dist/optimizer.cjs +138 -202
  13. package/dist/optimizer.d.ts +9 -15
  14. package/dist/optimizer.mjs +129 -195
  15. package/dist/server.cjs +33 -16
  16. package/dist/server.mjs +32 -16
  17. package/dist/starters/adapters/aws-lambda/adapters/aws-lambda/vite.config.mts +1 -1
  18. package/dist/starters/adapters/aws-lambda/src/entry_aws-lambda.tsx +1 -5
  19. package/dist/starters/adapters/azure-swa/adapters/azure-swa/vite.config.mts +1 -1
  20. package/dist/starters/adapters/azure-swa/src/entry.azure-swa.tsx +1 -2
  21. package/dist/starters/adapters/bun/adapters/bun/vite.config.mts +1 -1
  22. package/dist/starters/adapters/bun/src/entry.bun.ts +0 -2
  23. package/dist/starters/adapters/cloud-run/adapters/cloud-run/vite.config.mts +1 -1
  24. package/dist/starters/adapters/cloud-run/src/entry.cloud-run.tsx +0 -2
  25. package/dist/starters/adapters/cloudflare-pages/adapters/cloudflare-pages/vite.config.mts +1 -1
  26. package/dist/starters/adapters/cloudflare-pages/src/entry.cloudflare-pages.tsx +1 -2
  27. package/dist/starters/adapters/deno/adapters/deno/vite.config.mts +1 -1
  28. package/dist/starters/adapters/deno/src/entry.deno.ts +0 -2
  29. package/dist/starters/adapters/express/adapters/express/vite.config.mts +1 -1
  30. package/dist/starters/adapters/express/src/entry.express.tsx +0 -2
  31. package/dist/starters/adapters/fastify/adapters/fastify/vite.config.mts +1 -1
  32. package/dist/starters/adapters/fastify/src/plugins/fastify-qwik.ts +1 -2
  33. package/dist/starters/adapters/firebase/adapters/firebase/vite.config.mts +1 -1
  34. package/dist/starters/adapters/firebase/src/entry-firebase.tsx +1 -2
  35. package/dist/starters/adapters/netlify-edge/adapters/netlify-edge/vite.config.mts +1 -1
  36. package/dist/starters/adapters/netlify-edge/src/entry.netlify-edge.tsx +1 -2
  37. package/dist/starters/adapters/node-server/adapters/node-server/vite.config.mts +1 -1
  38. package/dist/starters/adapters/node-server/src/entry.node-server.tsx +0 -2
  39. package/dist/starters/adapters/{static/adapters/static → ssg/adapters/ssg}/vite.config.mts +2 -2
  40. package/dist/starters/adapters/ssg/package.json +19 -0
  41. package/dist/starters/adapters/vercel-edge/adapters/vercel-edge/vite.config.mts +1 -1
  42. package/dist/starters/adapters/vercel-edge/src/entry.vercel-edge.tsx +1 -2
  43. package/dist/starters/adapters/vercel-edge/vercel.json +1 -1
  44. package/dist/testing/index.cjs +183 -121
  45. package/dist/testing/index.mjs +176 -115
  46. package/dist/testing/package.json +1 -1
  47. package/package.json +2 -2
  48. package/dist/starters/adapters/static/package.json +0 -19
  49. /package/dist/starters/adapters/{static → ssg}/README.md +0 -0
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * @license
3
- * @qwik.dev/core/optimizer 2.0.0-beta.5-dev+8887f7e
3
+ * @qwik.dev/core/optimizer 2.0.0-beta.6-dev+c42693f
4
4
  * Copyright QwikDev. All Rights Reserved.
5
5
  * Use of this source code is governed by an MIT-style license that can be
6
6
  * found in the LICENSE file at https://github.com/QwikDev/qwik/blob/main/LICENSE
@@ -1257,7 +1257,7 @@ globalThis.qwikOptimizer = function(module) {
1257
1257
  }
1258
1258
  };
1259
1259
  var versions = {
1260
- qwik: "2.0.0-beta.5-dev+8887f7e"
1260
+ qwik: "2.0.0-beta.6-dev+c42693f"
1261
1261
  };
1262
1262
  async function getSystem() {
1263
1263
  const sysEnv = getEnv();
@@ -1300,6 +1300,10 @@ globalThis.qwikOptimizer = function(module) {
1300
1300
  sys.path = await sys.dynamicImport("node:path");
1301
1301
  sys.cwd = () => process.cwd();
1302
1302
  sys.os = process.platform;
1303
+ } else if ("deno" === sysEnv) {
1304
+ sys.path = await sys.dynamicImport("node:path");
1305
+ sys.cwd = () => Deno.cwd();
1306
+ sys.os = Deno.platform();
1303
1307
  }
1304
1308
  return sys;
1305
1309
  }
@@ -2122,15 +2126,16 @@ globalThis.qwikOptimizer = function(module) {
2122
2126
  target: "client",
2123
2127
  buildMode: "development",
2124
2128
  debug: false,
2125
- rootDir: null,
2129
+ rootDir: void 0,
2126
2130
  tsconfigFileNames: [ "./tsconfig.json" ],
2127
- input: null,
2128
- outDir: "",
2129
- assetsDir: null,
2131
+ input: void 0,
2132
+ outDir: void 0,
2133
+ assetsDir: void 0,
2130
2134
  resolveQwikBuild: true,
2131
- entryStrategy: null,
2132
- srcDir: null,
2133
- srcInputs: null,
2135
+ entryStrategy: void 0,
2136
+ srcDir: void 0,
2137
+ ssrOutDir: void 0,
2138
+ clientOutDir: void 0,
2134
2139
  sourcemap: !!optimizerOptions.sourcemap,
2135
2140
  manifestInput: null,
2136
2141
  manifestOutput: null,
@@ -2145,10 +2150,14 @@ globalThis.qwikOptimizer = function(module) {
2145
2150
  experimental: void 0
2146
2151
  };
2147
2152
  let lazyNormalizePath;
2153
+ let maybeFs;
2148
2154
  const init2 = async () => {
2149
2155
  if (!internalOptimizer) {
2150
2156
  internalOptimizer = await createOptimizer(optimizerOptions);
2151
2157
  lazyNormalizePath = makeNormalizePath(internalOptimizer.sys);
2158
+ try {
2159
+ maybeFs = await internalOptimizer.sys.dynamicImport("node:fs");
2160
+ } catch {}
2152
2161
  }
2153
2162
  };
2154
2163
  const getOptimizer = () => {
@@ -2169,7 +2178,7 @@ globalThis.qwikOptimizer = function(module) {
2169
2178
  const configureServer = server => {
2170
2179
  devServer = server;
2171
2180
  };
2172
- const normalizeOptions = inputOpts => {
2181
+ const normalizeOptions = async inputOpts => {
2173
2182
  const updatedOpts = Object.assign({}, inputOpts);
2174
2183
  const optimizer2 = getOptimizer();
2175
2184
  const path = optimizer2.sys.path;
@@ -2196,59 +2205,59 @@ globalThis.qwikOptimizer = function(module) {
2196
2205
  if ("string" === typeof updatedOpts.srcDir) {
2197
2206
  opts.srcDir = normalizePath(path.resolve(opts.rootDir, updatedOpts.srcDir));
2198
2207
  srcDir = opts.srcDir;
2199
- opts.srcInputs = null;
2200
- } else if (Array.isArray(updatedOpts.srcInputs)) {
2201
- opts.srcInputs = [ ...updatedOpts.srcInputs ];
2202
- opts.srcDir = null;
2203
2208
  } else {
2204
2209
  opts.srcDir ||= srcDir;
2205
2210
  }
2211
+ opts.srcDir = normalizePath(path.resolve(opts.rootDir, normalizePath(opts.srcDir)));
2206
2212
  Array.isArray(updatedOpts.tsconfigFileNames) && updatedOpts.tsconfigFileNames.length > 0 && (opts.tsconfigFileNames = updatedOpts.tsconfigFileNames);
2207
- Array.isArray(opts.srcInputs) ? opts.srcInputs.forEach(i => {
2208
- i.path = normalizePath(path.resolve(opts.rootDir, i.path));
2209
- }) : "string" === typeof opts.srcDir && (opts.srcDir = normalizePath(path.resolve(opts.rootDir, normalizePath(opts.srcDir))));
2213
+ updatedOpts.input || opts.input || ("ssr" === opts.target ? opts.input = [ path.resolve(srcDir, "entry.ssr") ] : "client" === opts.target ? opts.input = [ path.resolve(srcDir, "root") ] : opts.input = void 0);
2210
2214
  if (!updatedOpts.csr) {
2211
- if (Array.isArray(updatedOpts.input)) {
2212
- opts.input = [ ...updatedOpts.input ];
2213
- } else if ("string" === typeof updatedOpts.input) {
2214
- opts.input = [ updatedOpts.input ];
2215
- } else if ("ssr" === opts.target) {
2216
- opts.input ||= [ path.resolve(srcDir, "entry.ssr") ];
2217
- } else if ("client" === opts.target) {
2218
- opts.input ||= [ path.resolve(srcDir, "root") ];
2219
- } else if ("lib" === opts.target) {
2220
- if ("object" === typeof updatedOpts.input) {
2221
- for (const key in updatedOpts.input) {
2222
- const resolvedPaths = {};
2223
- if (Object.hasOwnProperty.call(updatedOpts.input, key)) {
2224
- const relativePath = updatedOpts.input[key];
2225
- const absolutePath = path.resolve(opts.rootDir, relativePath);
2226
- resolvedPaths[key] = absolutePath;
2227
- }
2228
- opts.input = {
2229
- ...opts.input,
2230
- ...resolvedPaths
2231
- };
2215
+ updatedOpts.outDir && (opts.outDir = normalizePath(path.resolve(opts.rootDir, normalizePath(updatedOpts.outDir))));
2216
+ opts.clientOutDir = normalizePath(path.resolve(opts.rootDir, updatedOpts.clientOutDir || CLIENT_OUT_DIR));
2217
+ opts.ssrOutDir = normalizePath(path.resolve(opts.rootDir, updatedOpts.ssrOutDir || SSR_OUT_DIR));
2218
+ "ssr" === opts.target ? opts.outDir ||= opts.ssrOutDir : "lib" === opts.target ? opts.outDir ||= normalizePath(path.resolve(opts.rootDir, LIB_OUT_DIR)) : opts.outDir ||= opts.clientOutDir;
2219
+ }
2220
+ "function" === typeof updatedOpts.manifestOutput && (opts.manifestOutput = updatedOpts.manifestOutput);
2221
+ updatedOpts.manifestInput && (opts.manifestInput = getValidManifest(updatedOpts.manifestInput) || null);
2222
+ if (!opts.manifestInput && "ssr" === opts.target && "production" === opts.buildMode && maybeFs) {
2223
+ let clientManifestPath = normalizePath(path.resolve(opts.clientOutDir, Q_MANIFEST_FILENAME));
2224
+ await maybeFs.promises.stat(clientManifestPath).catch(() => false) || (clientManifestPath = normalizePath(path.resolve(opts.rootDir, CLIENT_OUT_DIR, Q_MANIFEST_FILENAME)));
2225
+ try {
2226
+ const clientManifestStr = await maybeFs.promises.readFile(clientManifestPath, "utf-8");
2227
+ opts.manifestInput = getValidManifest(JSON.parse(clientManifestStr)) || null;
2228
+ console.info("Read client manifest from", clientManifestPath);
2229
+ } catch (e) {
2230
+ console.warn(`could not read Qwik client manifest ${clientManifestPath}, ignoring. Make sure you provide it to the SSR renderer. (${e})`);
2231
+ }
2232
+ }
2233
+ "function" === typeof updatedOpts.transformedModuleOutput && (opts.transformedModuleOutput = updatedOpts.transformedModuleOutput);
2234
+ if (void 0 !== updatedOpts.scope) {
2235
+ opts.scope = updatedOpts.scope;
2236
+ } else if (!opts.scope && maybeFs) {
2237
+ let pkgPath = "";
2238
+ try {
2239
+ let pkgDir = opts.rootDir;
2240
+ while (true) {
2241
+ pkgPath = path.resolve(pkgDir, "package.json");
2242
+ if (await maybeFs.promises.stat(pkgPath).catch(() => false)) {
2243
+ break;
2232
2244
  }
2233
- } else {
2234
- opts.input ||= [ path.resolve(srcDir, "index.ts") ];
2245
+ const parent = path.resolve(pkgDir, "..");
2246
+ if (parent === pkgDir) {
2247
+ break;
2248
+ }
2249
+ pkgDir = parent;
2250
+ pkgPath = "";
2235
2251
  }
2236
- } else {
2237
- opts.input ||= [];
2252
+ if (pkgPath) {
2253
+ const pkgString = await maybeFs.promises.readFile(pkgPath, "utf-8");
2254
+ const pkg = JSON.parse(pkgString);
2255
+ "string" === typeof pkg.name && (opts.scope = pkg.name);
2256
+ }
2257
+ } catch (e) {
2258
+ console.warn(`could not read ${pkgPath || "package.json"} to determine package name, ignoring. (${e})`);
2238
2259
  }
2239
- Array.isArray(opts.input) && (opts.input = opts.input.reduce((inputs, i) => {
2240
- let input = i;
2241
- i.startsWith("@") || i.startsWith("~") || i.startsWith("#") || (input = normalizePath(path.resolve(opts.rootDir, i)));
2242
- inputs.includes(input) || inputs.push(input);
2243
- return inputs;
2244
- }, []));
2245
- "string" === typeof updatedOpts.outDir ? opts.outDir = normalizePath(path.resolve(opts.rootDir, normalizePath(updatedOpts.outDir))) : opts.outDir || ("ssr" === opts.target ? opts.outDir = normalizePath(path.resolve(opts.rootDir, SSR_OUT_DIR)) : "lib" === opts.target ? opts.outDir = normalizePath(path.resolve(opts.rootDir, LIB_OUT_DIR)) : opts.outDir = normalizePath(path.resolve(opts.rootDir, CLIENT_OUT_DIR)));
2246
2260
  }
2247
- "function" === typeof updatedOpts.manifestOutput && (opts.manifestOutput = updatedOpts.manifestOutput);
2248
- const clientManifest = getValidManifest(updatedOpts.manifestInput);
2249
- clientManifest && (opts.manifestInput = clientManifest);
2250
- "function" === typeof updatedOpts.transformedModuleOutput && (opts.transformedModuleOutput = updatedOpts.transformedModuleOutput);
2251
- void 0 !== updatedOpts.scope && (opts.scope = updatedOpts.scope);
2252
2261
  "boolean" === typeof updatedOpts.resolveQwikBuild && (opts.resolveQwikBuild = updatedOpts.resolveQwikBuild);
2253
2262
  if ("object" === typeof updatedOpts.devTools) {
2254
2263
  "imageDevTools" in updatedOpts.devTools && (opts.devTools.imageDevTools = updatedOpts.devTools.imageDevTools);
@@ -2263,9 +2272,12 @@ globalThis.qwikOptimizer = function(module) {
2263
2272
  ExperimentalFeatures[feature] ? (opts.experimental ||= {})[feature] = true : console.error(`Qwik plugin: Unknown experimental feature: ${feature}`);
2264
2273
  }
2265
2274
  }
2266
- return {
2275
+ const out = {
2267
2276
  ...opts
2268
2277
  };
2278
+ opts.input ||= updatedOpts.input;
2279
+ opts.input && "string" === typeof opts.input && (opts.input = [ opts.input ]);
2280
+ return out;
2269
2281
  };
2270
2282
  let hasValidatedSource = false;
2271
2283
  const validateSource = async resolver => {
@@ -2300,17 +2312,6 @@ globalThis.qwikOptimizer = function(module) {
2300
2312
  linter = await createLinter(optimizer.sys, opts.rootDir, opts.tsconfigFileNames);
2301
2313
  } catch {}
2302
2314
  }
2303
- const path = getPath();
2304
- if (Array.isArray(opts.srcInputs)) {
2305
- optimizer.sys.getInputFiles = async rootDir => opts.srcInputs.map(i => {
2306
- const relInput = {
2307
- path: normalizePath(path.relative(rootDir, i.path)),
2308
- code: i.code
2309
- };
2310
- return relInput;
2311
- });
2312
- debug(`buildStart() opts.srcInputs (${opts.srcInputs.length} files)`);
2313
- }
2314
2315
  debug("transformedOutputs.clear()");
2315
2316
  clientTransformedOutputs.clear();
2316
2317
  serverTransformedOutputs.clear();
@@ -2577,18 +2578,11 @@ globalThis.qwikOptimizer = function(module) {
2577
2578
  parentIds.set(key, id2);
2578
2579
  currentOutputs.set(key, [ mod, id2 ]);
2579
2580
  deps.add(key);
2580
- if ("client" === opts.target) {
2581
- if (devServer) {
2582
- const rollupModule = devServer.moduleGraph.getModuleById(key);
2583
- rollupModule && devServer.moduleGraph.invalidateModule(rollupModule);
2584
- } else {
2585
- ctx.emitFile({
2586
- id: key,
2587
- type: "chunk",
2588
- preserveSignature: "allow-extension"
2589
- });
2590
- }
2591
- }
2581
+ "client" !== opts.target || devServer || ctx.emitFile({
2582
+ id: key,
2583
+ type: "chunk",
2584
+ preserveSignature: "allow-extension"
2585
+ });
2592
2586
  }
2593
2587
  }
2594
2588
  for (const id3 of deps.values()) {
@@ -2650,8 +2644,8 @@ globalThis.qwikOptimizer = function(module) {
2650
2644
  };
2651
2645
  const normalizePath = id2 => lazyNormalizePath(id2);
2652
2646
  function getQwikBuildModule(isServer, _target) {
2653
- const isDev2 = "development" === opts.buildMode;
2654
- return `// @qwik.dev/core/build\nexport const isServer = ${JSON.stringify(isServer)};\nexport const isBrowser = ${JSON.stringify(!isServer)};\nexport const isDev = ${JSON.stringify(isDev2)};\n`;
2647
+ const isDev = "development" === opts.buildMode;
2648
+ return `// @qwik.dev/core/build\nexport const isServer = ${JSON.stringify(isServer)};\nexport const isBrowser = ${JSON.stringify(!isServer)};\nexport const isDev = ${JSON.stringify(isDev)};\n`;
2655
2649
  }
2656
2650
  async function getQwikServerManifestModule(isServer) {
2657
2651
  const manifest = isServer ? opts.manifestInput : null;
@@ -2746,7 +2740,6 @@ globalThis.qwikOptimizer = function(module) {
2746
2740
  });
2747
2741
  "function" === typeof opts.manifestOutput && await opts.manifestOutput(manifest);
2748
2742
  "function" === typeof opts.transformedModuleOutput && await opts.transformedModuleOutput(getTransformedOutputs());
2749
- return manifestStr;
2750
2743
  }
2751
2744
  return {
2752
2745
  buildStart: buildStart,
@@ -2847,8 +2840,9 @@ globalThis.qwikOptimizer = function(module) {
2847
2840
  lint: qwikRollupOpts.lint,
2848
2841
  experimental: qwikRollupOpts.experimental
2849
2842
  };
2850
- const opts = qwikPlugin.normalizeOptions(pluginOpts);
2851
- inputOpts.input || (inputOpts.input = opts.input);
2843
+ await qwikPlugin.normalizeOptions(pluginOpts);
2844
+ const {input: input} = qwikPlugin.getOptions();
2845
+ inputOpts.input = input;
2852
2846
  return inputOpts;
2853
2847
  },
2854
2848
  outputOptions: rollupOutputOpts => normalizeRollupOutputOptionsObject(qwikPlugin, rollupOutputOpts, false),
@@ -2899,6 +2893,18 @@ globalThis.qwikOptimizer = function(module) {
2899
2893
  dir: outDir || (null == rollupOutputOpts ? void 0 : rollupOutputOpts.dir)
2900
2894
  };
2901
2895
  }
2896
+ var getChunkFileName = (prefix, opts, optimizer) => "production" !== opts.buildMode || opts.debug ? chunkInfo => {
2897
+ var _a, _b;
2898
+ if (null == (_a = chunkInfo.moduleIds) ? void 0 : _a.some(id => id.endsWith("core.prod.mjs"))) {
2899
+ return `${prefix}build/core.js`;
2900
+ }
2901
+ if (null == (_b = chunkInfo.moduleIds) ? void 0 : _b.some(id => id.endsWith("qwik-router/lib/index.qwik.mjs"))) {
2902
+ return `${prefix}build/qwik-router.js`;
2903
+ }
2904
+ const relativePath = optimizer.sys.path.relative(optimizer.sys.cwd(), chunkInfo.name);
2905
+ const sanitized = relativePath.replace(/^(\.\.\/)+/, "").replace(/^\/+/, "").replace(/\//g, "-");
2906
+ return `${prefix}build/${sanitized}.js`;
2907
+ } : `${prefix}build/q-[hash].js`;
2902
2908
  function normalizeRollupOutputOptionsObject(qwikPlugin, rollupOutputOptsObj, useAssetsDir) {
2903
2909
  const outputOpts = {
2904
2910
  ...rollupOutputOptsObj
@@ -2906,39 +2912,19 @@ globalThis.qwikOptimizer = function(module) {
2906
2912
  const opts = qwikPlugin.getOptions();
2907
2913
  const optimizer = qwikPlugin.getOptimizer();
2908
2914
  const manualChunks = qwikPlugin.manualChunks;
2915
+ outputOpts.assetFileNames || (outputOpts.assetFileNames = (useAssetsDir ? `${opts.assetsDir}/` : "") + "assets/[hash]-[name].[ext]");
2916
+ const chunkFileName = getChunkFileName(useAssetsDir ? `${opts.assetsDir}` : "", opts, optimizer);
2909
2917
  if ("client" === opts.target) {
2910
- if (!outputOpts.assetFileNames) {
2911
- const assetFileNames = "assets/[hash]-[name].[ext]";
2912
- outputOpts.assetFileNames = useAssetsDir ? `${opts.assetsDir}/${assetFileNames}` : assetFileNames;
2913
- }
2914
- let fileName;
2915
- fileName = "production" !== opts.buildMode || opts.debug ? chunkInfo => {
2916
- var _a, _b;
2917
- if (null == (_a = chunkInfo.moduleIds) ? void 0 : _a.some(id => id.endsWith("core.prod.mjs"))) {
2918
- return "build/core.js";
2919
- }
2920
- if (null == (_b = chunkInfo.moduleIds) ? void 0 : _b.some(id => id.endsWith("qwik-router/lib/index.qwik.mjs"))) {
2921
- return "build/qwik-router.js";
2922
- }
2923
- const path = optimizer.sys.path;
2924
- const relativePath = path.relative(optimizer.sys.cwd(), chunkInfo.name);
2925
- const sanitized = relativePath.replace(/^(\.\.\/)+/, "").replace(/^\/+/, "").replace(/\//g, "-");
2926
- return `build/${sanitized}.js`;
2927
- } : "build/q-[hash].js";
2928
- const getFilePath = fileNamePattern => "string" === typeof fileNamePattern ? useAssetsDir ? `${opts.assetsDir}/${fileNamePattern}` : fileNamePattern : useAssetsDir ? chunkInfo => `${opts.assetsDir}/${fileNamePattern(chunkInfo)}` : chunkInfo => fileNamePattern(chunkInfo);
2929
- outputOpts.entryFileNames || (outputOpts.entryFileNames = getFilePath(fileName));
2930
- outputOpts.chunkFileNames || (outputOpts.chunkFileNames = getFilePath(fileName));
2931
- } else {
2932
- "production" === opts.buildMode && (outputOpts.chunkFileNames || (outputOpts.chunkFileNames = "q-[hash].js"));
2933
- }
2934
- outputOpts.assetFileNames || (outputOpts.assetFileNames = "assets/[hash]-[name].[ext]");
2935
- if ("client" === opts.target) {
2918
+ outputOpts.entryFileNames || (outputOpts.entryFileNames = chunkFileName);
2919
+ outputOpts.chunkFileNames || (outputOpts.chunkFileNames = chunkFileName);
2936
2920
  outputOpts.format = "es";
2937
2921
  const prevManualChunks = outputOpts.manualChunks;
2938
2922
  if (prevManualChunks && "function" !== typeof prevManualChunks) {
2939
2923
  throw new Error("manualChunks must be a function");
2940
2924
  }
2941
2925
  outputOpts.manualChunks = prevManualChunks ? (id, meta) => prevManualChunks(id, meta) || manualChunks(id, meta) : manualChunks;
2926
+ } else {
2927
+ outputOpts.chunkFileNames || (outputOpts.chunkFileNames = chunkFileName);
2942
2928
  }
2943
2929
  outputOpts.dir || (outputOpts.dir = opts.outDir);
2944
2930
  "cjs" === outputOpts.format && "string" !== typeof outputOpts.exports && (outputOpts.exports = "auto");
@@ -3228,7 +3214,6 @@ globalThis.qwikOptimizer = function(module) {
3228
3214
  var image_size_runtime_default = "<style>\n [data-qwik-cls] {\n outline: 2px solid red;\n }\n [data-qwik-cls]::after {\n position: absolute;\n font-size: 12px;\n content: 'CLS ' attr(data-qwik-cls);\n font-family: monospace;\n font-weight: bold;\n background: red;\n color: white;\n margin: -2px;\n padding: 1px;\n line-height: 1;\n pointer-events: none;\n }\n #qwik-image-warning-container {\n position: absolute !important;\n top: 0 !important;\n left: 0 !important;\n width: 0 !important;\n overflow: visible !important;\n height: 0 !important;\n pointer-events: none !important;\n contain: size layout style content;\n z-index: 1;\n }\n</style>\n<template id=\"qwik-image-warning-template\">\n <style>\n :host {\n position: absolute;\n border: 1px solid red;\n pointer-events: none;\n z-index: 1;\n contain: layout size;\n }\n\n #icon {\n border: 0;\n margin: 5px;\n color: black;\n max-width: 100%;\n width: 20px;\n background: yellow;\n border-radius: 100%;\n height: 20px;\n padding: 3px;\n pointer-events: all;\n cursor: pointer;\n }\n\n #icon svg {\n width: 100%;\n height: auto;\n pointer-events: none;\n }\n\n dialog {\n padding: 0;\n border: 0;\n margin: 0 5px;\n background: #ffffe8;\n color: black;\n width: 250px;\n font-size: 11px;\n position: absolute;\n inset-inline-start: unset;\n inset-inline-end: unset;\n border-radius: 5px;\n pointer-events: all;\n overflow: hidden;\n box-shadow: 0px -2px 20px 0px #0000002e;\n z-index: 10000;\n }\n\n .top {\n bottom: calc(100% + 5px);\n }\n .bottom {\n top: 40px;\n }\n .right {\n inset-inline-start: 0;\n inset-inline-end: unset;\n }\n .left {\n inset-inline-start: unset;\n inset-inline-end: calc(100% - 40px);\n }\n\n .content {\n padding: 5px;\n }\n\n #loc {\n background: #2e3801;\n color: #d2d2d2;\n font-family: monospace;\n padding: 3px 5px;\n pointer-events: all;\n margin: 0;\n border: 0;\n cursor: pointer;\n font-size: 11px;\n width: calc(100% - 24px);\n text-overflow: ellipsis;\n overflow: hidden;\n display: block;\n direction: rtl;\n text-align: right;\n }\n #loc:hover {\n background: #3a4a01;\n }\n\n pre {\n background: #f1fb8e;\n padding: 5px;\n margin: 5px 0;\n border-radius: 3px;\n user-select: none;\n }\n\n pre span {\n user-select: all;\n }\n\n a {\n text-decoration: underline;\n }\n\n #close {\n border: 0;\n width: 25px;\n height: 25px;\n position: absolute;\n right: 0;\n top: 0;\n background: #ffe14f;\n color: black;\n font-weight: 900;\n padding: 0;\n margin: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n line-height: 1;\n cursor: pointer;\n }\n #close:hover {\n background: #ffeb6f;\n }\n\n #action-btn {\n border: 2px solid #18ae00;\n padding: 2px 4px;\n background: #50ff50;\n border-radius: 5px;\n color: #0c5500;\n font-weight: 800;\n font-size: 10px;\n cursor: pointer;\n }\n\n p {\n margin: 5px 0;\n }\n\n h2 {\n font-weight: 900;\n margin: 10px 0;\n }\n </style>\n <button id=\"icon\" type=\"button\" aria-label=\"Open image dev dialog\">\n <svg width=\"32\" height=\"32\" viewBox=\"0 0 24 24\">\n <path\n fill=\"currentColor\"\n d=\"M2.725 21q-.275 0-.5-.138t-.35-.362q-.125-.225-.138-.488t.138-.512l9.25-16q.15-.25.388-.375T12 3q.25 0 .488.125t.387.375l9.25 16q.15.25.138.513t-.138.487q-.125.225-.35.363t-.5.137H2.725ZM12 18q.425 0 .713-.288T13 17q0-.425-.288-.713T12 16q-.425 0-.713.288T11 17q0 .425.288.713T12 18Zm0-3q.425 0 .713-.288T13 14v-3q0-.425-.288-.713T12 10q-.425 0-.713.288T11 11v3q0 .425.288.713T12 15Z\"\n />\n </svg>\n </button>\n <dialog>\n <form method=\"dialog\">\n <button id=\"close\" type=\"submit\" aria-label=\"Close\">X</button>\n </form>\n <button id=\"loc\"></button>\n <div class=\"content\">\n <h2 id=\"title\"></h2>\n <p id=\"message\"></p>\n <p class=\"action-container\"></p>\n </div>\n </dialog>\n</template>\n<div id=\"qwik-image-warning-container\"></div>\n<script>\n (function () {\n function getPositionClasses(target) {\n const { x, y } = target.getBoundingClientRect();\n const windowWidth = window.innerWidth;\n let horizontal = 'right';\n let vertical = 'bottom';\n if (x > windowWidth - 260) {\n horizontal = 'left';\n }\n return `${vertical} ${horizontal}`;\n }\n class ImageWarning extends HTMLElement {\n #actionFn = null;\n constructor() {\n super();\n this.attachShadow({ mode: 'open' });\n this.shadowRoot.appendChild(\n document.importNode(document.getElementById('qwik-image-warning-template').content, true)\n );\n const dialog = this.shadowRoot.querySelector('dialog');\n\n this.shadowRoot.addEventListener('click', async (ev) => {\n const target = ev.target;\n if (target.nodeName === 'BUTTON') {\n if (target.id === 'action-btn') {\n if (this.#actionFn) {\n this.#actionFn();\n dialog.close();\n }\n } else if (target.id === 'icon') {\n if (dialog.open) {\n dialog.close();\n } else {\n dialog.className = getPositionClasses(target);\n dialog.show();\n }\n } else if (target.id === 'loc' && target.dataset.url) {\n globalThis.qwikOpenInEditor(target.dataset.url);\n }\n }\n });\n }\n\n set loc(value) {\n const anchor = this.shadowRoot.querySelector('#loc');\n anchor.textContent = value;\n if (globalThis.qwikOpenInEditor) {\n anchor.dataset.url = value;\n }\n }\n\n set header(value) {\n this.shadowRoot.querySelector('#title').textContent = value;\n }\n\n set message(value) {\n this.shadowRoot.querySelector('#message').innerHTML = value;\n }\n\n set actionFn(value) {\n this.#actionFn = value;\n }\n set actionName(value) {\n if (value) {\n this.shadowRoot.querySelector('.action-container').innerHTML =\n `<button id=\"action-btn\" type=\"button\">${value}</button>`;\n }\n }\n }\n customElements.define('image-warning', ImageWarning);\n\n const shiftsMap = new Map();\n const visibleNodes = new Map();\n const imageContainer = document.querySelector('#qwik-image-warning-container');\n let skip = false;\n\n async function _getInfo(originalSrc) {\n // Put all supported protocols here, see also packages/qwik/src/optimizer/src/plugins/image-size-server.ts\n if (!/^(https?|file|capacitor):/.test(originalSrc)) {\n return undefined;\n }\n const url = new URL('/__image_info', location.href);\n url.searchParams.set('url', originalSrc);\n const res = await fetch(url);\n if (res.ok) {\n return await res.json();\n } else {\n return null;\n }\n }\n\n const map = new Map();\n function getInfo(originalSrc) {\n let p = map.get(originalSrc);\n if (typeof p === 'undefined') {\n p = _getInfo(originalSrc);\n map.set(originalSrc, p);\n }\n return p;\n }\n function isDefinedUnit(value) {\n return value.endsWith('px');\n }\n async function doImg(node) {\n const scrollX = window.scrollX;\n const scrollY = window.scrollY;\n const rect = node.getBoundingClientRect();\n const originalSrc = node.currentSrc;\n const info = await getInfo(originalSrc);\n let overlay = visibleNodes.get(node);\n const wideScreen = window.innerWidth > 500;\n if (info && wideScreen) {\n let layoutInvalidation = false;\n const loc = node.getAttribute('data-qwik-inspector');\n const browserArea = rect.width * rect.height;\n if (!node.hasAttribute('width') || !node.hasAttribute('height')) {\n skip = true;\n const computedStyles = getComputedStyle(node);\n const hasAspect = computedStyles.getPropertyValue('aspect-ratio').toString() !== 'auto';\n const hasWidth = isDefinedUnit(computedStyles.getPropertyValue('width').toString());\n const hasHeight = isDefinedUnit(computedStyles.getPropertyValue('height').toString());\n const isAbsolute = computedStyles.getPropertyValue('position').toString() === 'absolute';\n layoutInvalidation =\n browserArea > 1000 && !isAbsolute && !hasAspect && (!hasWidth || !hasHeight);\n }\n const realArea = info.width && info.height;\n const threshholdArea = realArea * 0.5;\n const tooBig = browserArea < threshholdArea && info.type !== 'svg';\n skip = false;\n if (layoutInvalidation || tooBig) {\n if (!overlay) {\n overlay = document.createElement('image-warning');\n imageContainer.appendChild(overlay);\n visibleNodes.set(node, overlay);\n }\n overlay.style.top = rect.top + scrollY + 'px';\n overlay.style.left = rect.left + scrollX + 'px';\n overlay.style.width = rect.width + 'px';\n overlay.style.height = rect.height + 'px';\n overlay.info = info;\n overlay.loc = loc;\n if (layoutInvalidation) {\n const clipBoard = `width=\"${info.width}\" height=\"${info.height}\"`;\n overlay.header = 'Perf: layout shift';\n overlay.message = `Image\\'s size is unknown until it\\'s loaded, <a href=\"https://web.dev/cls/\" target=\"_blank\" rel=\"noopener noreferrer\">causing layout shift</a>.</p><p>To solve this problem set the width/height in the img tag:</p><pre>&lt;img <span>${clipBoard}</span></pre>`;\n const uniqueLoc =\n document.querySelectorAll('[data-qwik-inspector=\"' + loc + '\"]').length === 1;\n if (loc) {\n if (uniqueLoc) {\n overlay.actionName = 'Auto fix';\n overlay.actionFn = async () => {\n const url = new URL('/__image_fix', location.href);\n url.searchParams.set('loc', loc);\n url.searchParams.set('width', info.width);\n url.searchParams.set('height', info.height);\n if (!node.srcset) {\n url.searchParams.set('src', node.currentSrc);\n url.searchParams.set('currentHref', location.href);\n }\n await fetch(url, {\n method: 'POST',\n });\n };\n } else {\n overlay.actionName = 'Open in editor';\n overlay.actionFn = async () => {\n await navigator.clipboard.writeText(clipBoard);\n globalThis.qwikOpenInEditor(loc);\n };\n }\n }\n } else if (tooBig) {\n overlay.header = 'Perf: properly size image';\n overlay.message = `The image is too big, <a href=\"https://developer.chrome.com/en/docs/lighthouse/performance/uses-responsive-images/\" target=\"_blank\" rel=\"noopener noreferrer\">hurting performance</a>, it should be resized to the size it\\'s displayed at. The image dimensions are ${info.width} x ${info.height} but it\\'s displayed at ${rect.width}x${rect.height}.</p>`;\n }\n return;\n }\n }\n\n if (overlay) {\n overlay.remove();\n visibleNodes.delete(node);\n }\n }\n\n async function updateImg(node) {\n const overlay = visibleNodes.get(node);\n if (!node.isConnected) {\n if (overlay) {\n overlay.remove();\n visibleNodes.delete(node);\n }\n } else if (node.complete) {\n doImg(node);\n }\n }\n\n const resizeObserver = new ResizeObserver((entries) => {\n if (!skip) {\n for (const entry of entries) {\n updateImg(entry.target);\n }\n }\n });\n\n const observer = new MutationObserver((entry) => {\n for (const mutation of entry) {\n for (const node of mutation.addedNodes) {\n if (node.nodeName === 'IMG') {\n resizeObserver.observe(node);\n } else if (node.nodeType === 1) {\n node.querySelectorAll('img').forEach((img) => {\n resizeObserver.observe(img);\n });\n }\n }\n for (const node of mutation.removedNodes) {\n if (node.nodeName === 'IMG') {\n updateImg(node);\n resizeObserver.unobserve(node);\n } else if (node.nodeType === 1) {\n node.querySelectorAll('img').forEach((img) => {\n updateImg(img);\n resizeObserver.unobserve(img);\n });\n }\n }\n }\n });\n let perfObserver;\n let DCLS = 0;\n const activate = () => {\n setTimeout(() => {\n if (perfObserver) {\n perfObserver.disconnect();\n if (DCLS > 0.005) {\n console.error('Detected Layout Shift during page load', DCLS);\n }\n }\n observer.observe(document.body, {\n childList: true,\n subtree: true,\n });\n document.body.querySelectorAll('img').forEach((node) => {\n resizeObserver.observe(node);\n });\n }, 100);\n };\n if (document.readyState === 'complete') {\n activate();\n } else {\n window.addEventListener('load', activate);\n }\n const pageAccessedByReload =\n performance?.navigation.type === 1 ||\n performance\n .getEntriesByType('navigation')\n .map((nav) => nav.type)\n .includes('reload');\n if (typeof PerformanceObserver !== 'undefined' && !pageAccessedByReload) {\n const shiftsMap = new Map();\n perfObserver = new PerformanceObserver((list) => {\n list.getEntries().forEach((entry) => {\n if (entry.hadRecentInput) {\n return; // Ignore shifts after recent input.\n }\n if (entry.value > 0.006) {\n for (const source of entry.sources) {\n if (\n source.node &&\n source.node.nodeType === 1 &&\n source.node.nodeName !== 'IMAGE-WARNING'\n ) {\n source.node.setAttribute('data-qwik-cls', Number(entry.value).toFixed(3));\n }\n }\n }\n DCLS += entry.value;\n });\n });\n perfObserver.observe({ type: 'layout-shift', buffered: true });\n }\n })();\n<\/script>\n";
3229
3215
  var perf_warning_default = "<script>\n if (!window.__qwikViteLog) {\n window.__qwikViteLog = true;\n console.debug(\n '%c⭐️ Qwik Dev SSR Mode',\n 'background: #0c75d2; color: white; padding: 2px 3px; border-radius: 2px; font-size: 0.8em;',\n \"App is running in SSR development mode!\\n - Additional JS is loaded by Vite for debugging and live reloading\\n - Rendering performance might not be optimal\\n - Delayed interactivity because prefetching is disabled\\n - Vite dev bundles do not represent production output\\n\\nProduction build can be tested running 'npm run preview'\"\n );\n }\n<\/script>\n";
3230
3216
  var VITE_ERROR_OVERLAY_STYLES = "\nvite-error-overlay {\n --color-bright: rgba(255, 255, 255, 0.8);\n --color-yellow: rgba(255,246,85,0.8);\n --qwik-dark-blue: #006ce9;\n --qwik-light-blue: #3ec2f7;\n --qwik-light-purple: #ac7ff4;\n --qwik-dark-purple: #713fc2;\n --yellow: #fff; /* override vite yellow */\n --purple: var(--color-bright); /* override vite purple */\n --red: var(--qwik-light-blue); /* override vite red */\n\n --vertical-box-spacing: 15px;\n --box-padding: 20px;\n --box-margin: 0 0 var(--vertical-box-spacing) 0;\n --box-background: rgba(0, 0, 0, 0.5);\n --box-border-radius: 8px;\n}\n\nvite-error-overlay::part(backdrop) {\n background: rgb(2 11 17 / 60%);\n}\n\nvite-error-overlay::part(window) {\n background: transparent;\n border: none;\n box-shadow: none;\n box-sizing: border-box;\n margin: 50px auto;\n max-width: 1200px;\n padding: var(--box-padding);\n width: 90%;\n}\n\nvite-error-overlay::part(message) {\n display: flex;\n flex-direction: column;\n font-size: 1.6rem;\n line-height: 1.7;\n margin-bottom: 30px;\n}\n\nvite-error-overlay::part(plugin) {\n font-size: 0.8rem;\n font-weight: 100;\n}\n\nvite-error-overlay::part(file),\nvite-error-overlay::part(frame),\nvite-error-overlay::part(stack),\nvite-error-overlay::part(tip) {\n background: var(--box-background);\n border-left: 5px solid transparent;\n border-radius: var(--box-border-radius);\n margin: var(--box-margin);\n min-height: 50px;\n padding: var(--box-padding);\n position: relative;\n}\n\nvite-error-overlay::part(file) {\n border-left-color: rgb(25 182 246);\n color: var(--color-bright);\n}\n\nvite-error-overlay::part(frame) {\n border-left-color: var(--color-yellow);\n color: var(--color-yellow);\n}\n\nvite-error-overlay::part(stack) {\n border-left-color: #FF5722;\n}\n\n\nvite-error-overlay::part(tip) {\n border-top: none;\n border-left-color: rgb(172, 127, 244);\n}\n\nvite-error-overlay::part(file):before,\nvite-error-overlay::part(frame):before,\nvite-error-overlay::part(stack):before {\n border-bottom: 1px solid #222;\n color: var(--color-bright);\n display: block;\n margin-bottom: 15px;\n padding-bottom: 5px;\n padding-left: 30px; /* space for icon */\n font-size: .8rem;\n}\n\nvite-error-overlay::part(file):before {\n content: 'File';\n}\n\nvite-error-overlay::part(frame):before {\n content: 'Frame';\n}\n\nvite-error-overlay::part(stack):before {\n content: 'Stack Trace';\n}\n\nvite-error-overlay::part(file):after,\nvite-error-overlay::part(frame):after,\nvite-error-overlay::part(stack):after {\n content: '';\n display: block;\n height: 20px;\n position: absolute;\n left: var(--box-padding);\n top: var(--box-padding);\n width: 20px;\n}\n\nvite-error-overlay::part(file):after {\n background-image: url(\"data:image/svg+xml,%3Csvg width='20px' height='20px' viewBox='0 0 24 24' version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'%3E%3Ctitle%3EFile-Generic%3C/title%3E%3Cg id='Page-1' stroke='none' stroke-width='1' fill='none' fill-rule='evenodd'%3E%3Cg id='File-Generic'%3E%3Crect id='Rectangle' fill-rule='nonzero' x='0' y='0' width='24' height='24'%3E%3C/rect%3E%3Cpath d='M4 5 C4 3.89543 4.89543 3 6 3 L15.1716 3 C15.702 3 16.2107 3.21071 16.5858 3.58579 L19.4142 6.41421 C19.7893 6.78929 20 7.29799 20 7.82843 L20 19 C20 20.1046 19.1046 21 18 21 L6 21 C4.89543 21 4 20.1046 4 19 L4 5 Z' id='Path' stroke='rgba(255,255,255,0.7)' stroke-width='1' stroke-linecap='round'%3E%3C/path%3E%3Cpath d='M15 4 L15 6 C15 7.10457 15.8954 8 17 8 L19 8' id='Path' stroke='rgba(255,255,255,0.7)' stroke-width='1' stroke-linecap='round'%3E%3C/path%3E%3C/g%3E%3C/g%3E%3C/svg%3E\");\n}\n\nvite-error-overlay::part(frame):after {\n background-image: url(\"data:image/svg+xml,%3Csvg width='20px' height='20px' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M15.6602 2.84952H19.1516C20.2555 2.84952 21.1504 3.74444 21.1504 4.84839V8.3398' stroke='rgba(255,255,255,0.7)' stroke-width='1.69904' stroke-linecap='round'/%3E%3Cpath d='M2.84949 8.33981L2.84949 4.8484C2.84949 3.74446 3.74441 2.84953 4.84836 2.84953L8.33977 2.84953' stroke='rgba(255,255,255,0.7)' stroke-width='1.69904' stroke-linecap='round'/%3E%3Cpath d='M21.1505 15.6602L21.1505 19.1516C21.1505 20.2555 20.2556 21.1505 19.1516 21.1505L15.6602 21.1505' stroke='rgba(255,255,255,0.7)' stroke-width='1.69904' stroke-linecap='round'/%3E%3Cpath d='M8.33984 21.1505L4.84843 21.1505C3.74449 21.1505 2.84956 20.2555 2.84956 19.1516L2.84956 15.6602' stroke='rgba(255,255,255,0.7)' stroke-width='1.69904' stroke-linecap='round'/%3E%3C/svg%3E\");\n}\n\nvite-error-overlay::part(stack):after {\n background-image: url(\"data:image/svg+xml,%3Csvg width='20px' height='20px' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M14.78 20H9.78C7.98 20 4.58 19.09 4.58 15.64C4.58 12.19 7.98 11.28 9.78 11.28H14.22C14.37 11.28 17.92 11.23 17.92 8.42C17.92 5.61 14.37 5.56 14.22 5.56H9.22C9.02109 5.56 8.83032 5.48098 8.68967 5.34033C8.54902 5.19968 8.47 5.00891 8.47 4.81C8.47 4.61109 8.54902 4.42032 8.68967 4.27967C8.83032 4.13902 9.02109 4.06 9.22 4.06H14.22C16.02 4.06 19.42 4.97 19.42 8.42C19.42 11.87 16.02 12.78 14.22 12.78H9.78C9.63 12.78 6.08 12.83 6.08 15.64C6.08 18.45 9.63 18.5 9.78 18.5H14.78C14.9789 18.5 15.1697 18.579 15.3103 18.7197C15.451 18.8603 15.53 19.0511 15.53 19.25C15.53 19.4489 15.451 19.6397 15.3103 19.7803C15.1697 19.921 14.9789 20 14.78 20Z' fill='rgba(255,255,255,0.7)'/%3E%3Cpath d='M6.44 8.31C5.74314 8.30407 5.06363 8.09202 4.48708 7.70056C3.91054 7.30909 3.46276 6.75573 3.20018 6.11021C2.93759 5.46469 2.87195 4.75589 3.01153 4.07312C3.1511 3.39036 3.48965 2.76418 3.9845 2.2735C4.47935 1.78281 5.10837 1.44958 5.79229 1.31579C6.47622 1.182 7.18444 1.25363 7.82771 1.52167C8.47099 1.78971 9.02054 2.24215 9.40711 2.82199C9.79368 3.40182 9.99998 4.08311 10 4.78C10 5.2461 9.90773 5.70759 9.72846 6.13783C9.54919 6.56808 9.28648 6.95856 8.95551 7.28675C8.62453 7.61494 8.23184 7.87433 7.80009 8.04995C7.36834 8.22558 6.90609 8.31396 6.44 8.31ZM6.44 2.75C6.04444 2.75 5.65776 2.86729 5.32886 3.08706C4.99996 3.30682 4.74362 3.61918 4.59224 3.98463C4.44087 4.35008 4.40126 4.75221 4.47843 5.14018C4.5556 5.52814 4.74609 5.8845 5.02579 6.16421C5.3055 6.44391 5.66186 6.6344 6.04982 6.71157C6.43779 6.78874 6.83992 6.74913 7.20537 6.59776C7.57082 6.44638 7.88318 6.19003 8.10294 5.86114C8.32271 5.53224 8.44 5.14556 8.44 4.75C8.44 4.48735 8.38827 4.22728 8.28776 3.98463C8.18725 3.74198 8.03993 3.5215 7.85422 3.33578C7.6685 3.15007 7.44802 3.00275 7.20537 2.90224C6.96272 2.80173 6.70265 2.75 6.44 2.75Z' fill='rgba(255,255,255,0.7)'/%3E%3Cpath d='M17.56 22.75C16.8614 22.752 16.1779 22.5466 15.5961 22.1599C15.0143 21.7733 14.5603 21.2227 14.2916 20.5778C14.0229 19.933 13.9515 19.2229 14.0866 18.5375C14.2217 17.8521 14.5571 17.2221 15.0504 16.7275C15.5437 16.2328 16.1726 15.8956 16.8577 15.7586C17.5427 15.6215 18.253 15.6909 18.8986 15.9577C19.5442 16.2246 20.0961 16.6771 20.4844 17.2578C20.8727 17.8385 21.08 18.5214 21.08 19.22C21.08 20.1545 20.7095 21.0508 20.0496 21.7125C19.3898 22.3743 18.4945 22.7473 17.56 22.75ZM17.56 17.19C17.1644 17.19 16.7778 17.3073 16.4489 17.5271C16.12 17.7468 15.8636 18.0592 15.7122 18.4246C15.5609 18.7901 15.5213 19.1922 15.5984 19.5802C15.6756 19.9681 15.8661 20.3245 16.1458 20.6042C16.4255 20.8839 16.7819 21.0744 17.1698 21.1516C17.5578 21.2287 17.9599 21.1891 18.3254 21.0377C18.6908 20.8864 19.0032 20.63 19.2229 20.3011C19.4427 19.9722 19.56 19.5856 19.56 19.19C19.56 18.6596 19.3493 18.1508 18.9742 17.7758C18.5991 17.4007 18.0904 17.19 17.56 17.19Z' fill='rgba(255,255,255,0.7)'/%3E%3C/svg%3E\");\n}\n\nvite-error-overlay::part(tip):before {\n content: \"Not sure how to solve this? Visit https://qwik.dev or connect with the community on Discord.\";\n display: block;\n margin-bottom: 1em;\n}\n";
3231
- var SYNC_QRL = "<sync>";
3232
3217
  function getOrigin(req) {
3233
3218
  const {PROTOCOL_HEADER: PROTOCOL_HEADER, HOST_HEADER: HOST_HEADER} = process.env;
3234
3219
  const headers = req.headers;
@@ -3236,35 +3221,8 @@ globalThis.qwikOptimizer = function(module) {
3236
3221
  const host = HOST_HEADER && headers[HOST_HEADER.toLowerCase()] || headers[":authority"] || headers.host;
3237
3222
  return `${protocol}://${host}`;
3238
3223
  }
3239
- function createSymbolMapper(base) {
3240
- return (symbolName, _mapper, parent) => {
3241
- if (symbolName === SYNC_QRL) {
3242
- return [ symbolName, "" ];
3243
- }
3244
- if (!parent) {
3245
- if (symbolName.startsWith("_")) {
3246
- return [ symbolName, `${base}${QWIK_HANDLERS_ID}` ];
3247
- }
3248
- console.error("qwik vite-dev-server symbolMapper: unknown qrl requested without parent:", symbolName);
3249
- return [ symbolName, `${base}${symbolName}.js` ];
3250
- }
3251
- const qrlFile = `${base}${parent.startsWith("/") ? parent.slice(1) : parent}_${symbolName}.js`;
3252
- return [ symbolName, qrlFile ];
3253
- };
3254
- }
3255
- var lazySymbolMapper = null;
3256
- var symbolMapper = (symbolName, mapper, parent) => {
3257
- if (lazySymbolMapper) {
3258
- return lazySymbolMapper(symbolName, mapper, parent);
3259
- }
3260
- throw new Error("symbolMapper not initialized");
3261
- };
3262
- async function configureDevServer(base, server, opts, sys, path, isClientDevOnly, clientDevInput, devSsrServer) {
3224
+ async function configureDevServer(base, server, opts, sys, path, isClientDevOnly, clientDevInput) {
3263
3225
  var _a;
3264
- symbolMapper = lazySymbolMapper = createSymbolMapper(base);
3265
- if (!devSsrServer) {
3266
- return;
3267
- }
3268
3226
  const hasQwikRouter = null == (_a = server.config.plugins) ? void 0 : _a.some(plugin => "vite-plugin-qwik-router" === plugin.name);
3269
3227
  const cssImportedByCSS = new Set;
3270
3228
  server.middlewares.use(async (req, res, next) => {
@@ -3301,6 +3259,14 @@ globalThis.qwikOptimizer = function(module) {
3301
3259
  return;
3302
3260
  }
3303
3261
  const firstInput = opts.input && Object.values(opts.input)[0];
3262
+ if (!firstInput) {
3263
+ console.error("no entry found for dev server");
3264
+ res.statusCode ||= 404;
3265
+ res.setHeader("Content-Type", "text/plain");
3266
+ res.writeHead(res.statusCode);
3267
+ res.end("No entry found for dev server");
3268
+ return;
3269
+ }
3304
3270
  const ssrModule = await server.ssrLoadModule(firstInput);
3305
3271
  const render = ssrModule.default ?? ssrModule.render;
3306
3272
  if ("function" === typeof render) {
@@ -3352,7 +3318,6 @@ globalThis.qwikOptimizer = function(module) {
3352
3318
  stream: res,
3353
3319
  snapshot: !isClientDevOnly,
3354
3320
  manifest: isClientDevOnly ? void 0 : manifest,
3355
- symbolMapper: isClientDevOnly ? void 0 : symbolMapper,
3356
3321
  serverData: serverData,
3357
3322
  containerAttributes: {
3358
3323
  ...serverData.containerAttributes
@@ -3516,7 +3481,6 @@ globalThis.qwikOptimizer = function(module) {
3516
3481
  function qwikVite(qwikViteOpts = {}) {
3517
3482
  let isClientDevOnly = false;
3518
3483
  let clientDevInput;
3519
- let tmpClientManifestPath;
3520
3484
  let viteCommand = "serve";
3521
3485
  let manifestInput = null;
3522
3486
  let clientOutDir = null;
@@ -3546,7 +3510,7 @@ globalThis.qwikOptimizer = function(module) {
3546
3510
  enforce: "pre",
3547
3511
  api: api,
3548
3512
  async config(viteConfig, viteEnv) {
3549
- var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r, _s, _t, _u, _v, _w;
3513
+ var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x;
3550
3514
  await qwikPlugin.init();
3551
3515
  const sys = qwikPlugin.getSys();
3552
3516
  const path = qwikPlugin.getPath();
@@ -3564,8 +3528,12 @@ globalThis.qwikOptimizer = function(module) {
3564
3528
  } : "lib" === target && (qwikViteOpts.entryStrategy = {
3565
3529
  type: "inline"
3566
3530
  });
3531
+ const ssrInput = "ssr" === target ? "string" === typeof (null == (_b = viteConfig.build) ? void 0 : _b.ssr) ? viteConfig.build.ssr : null == (_c = qwikViteOpts.ssr) ? void 0 : _c.input : void 0;
3532
+ const clientInput = "client" === target ? null == (_d = qwikViteOpts.client) ? void 0 : _d.input : void 0;
3533
+ let input = (null == (_f = null == (_e = viteConfig.build) ? void 0 : _e.rollupOptions) ? void 0 : _f.input) || clientInput || ssrInput;
3534
+ input && "string" === typeof input && (input = [ input ]);
3567
3535
  const shouldFindVendors = !qwikViteOpts.disableVendorScan && ("lib" !== target || "serve" === viteCommand);
3568
- viteAssetsDir = null == (_b = viteConfig.build) ? void 0 : _b.assetsDir;
3536
+ viteAssetsDir = null == (_g = viteConfig.build) ? void 0 : _g.assetsDir;
3569
3537
  const useAssetsDir = "client" === target && !!viteAssetsDir && "_astro" !== viteAssetsDir;
3570
3538
  const pluginOpts = {
3571
3539
  target: target,
@@ -3578,58 +3546,28 @@ globalThis.qwikOptimizer = function(module) {
3578
3546
  tsconfigFileNames: qwikViteOpts.tsconfigFileNames,
3579
3547
  resolveQwikBuild: true,
3580
3548
  transformedModuleOutput: qwikViteOpts.transformedModuleOutput,
3581
- outDir: null == (_c = viteConfig.build) ? void 0 : _c.outDir,
3549
+ outDir: null == (_h = viteConfig.build) ? void 0 : _h.outDir,
3550
+ ssrOutDir: (null == (_i = qwikViteOpts.ssr) ? void 0 : _i.outDir) || (null == (_j = viteConfig.build) ? void 0 : _j.outDir),
3551
+ clientOutDir: (null == (_k = qwikViteOpts.client) ? void 0 : _k.outDir) || ((null == (_l = viteConfig.build) ? void 0 : _l.ssr) || null == (_m = viteConfig.build) ? void 0 : _m.outDir),
3582
3552
  assetsDir: useAssetsDir ? viteAssetsDir : void 0,
3583
3553
  devTools: qwikViteOpts.devTools,
3584
- sourcemap: !!(null == (_d = viteConfig.build) ? void 0 : _d.sourcemap),
3554
+ sourcemap: !!(null == (_n = viteConfig.build) ? void 0 : _n.sourcemap),
3585
3555
  lint: qwikViteOpts.lint,
3586
- experimental: qwikViteOpts.experimental
3556
+ experimental: qwikViteOpts.experimental,
3557
+ input: input,
3558
+ manifestInput: null == (_o = qwikViteOpts.ssr) ? void 0 : _o.manifestInput,
3559
+ manifestOutput: null == (_p = qwikViteOpts.client) ? void 0 : _p.manifestOutput
3587
3560
  };
3588
- if (!qwikViteOpts.csr) {
3589
- if ("ssr" === target) {
3590
- "string" === typeof (null == (_e = viteConfig.build) ? void 0 : _e.ssr) ? pluginOpts.input = viteConfig.build.ssr : "string" === typeof (null == (_f = qwikViteOpts.ssr) ? void 0 : _f.input) && (pluginOpts.input = qwikViteOpts.ssr.input);
3591
- (null == (_g = qwikViteOpts.ssr) ? void 0 : _g.outDir) && (pluginOpts.outDir = qwikViteOpts.ssr.outDir);
3592
- pluginOpts.manifestInput = null == (_h = qwikViteOpts.ssr) ? void 0 : _h.manifestInput;
3593
- } else if ("client" === target) {
3594
- pluginOpts.input = null == (_i = qwikViteOpts.client) ? void 0 : _i.input;
3595
- (null == (_j = qwikViteOpts.client) ? void 0 : _j.outDir) && (pluginOpts.outDir = qwikViteOpts.client.outDir);
3596
- pluginOpts.manifestOutput = null == (_k = qwikViteOpts.client) ? void 0 : _k.manifestOutput;
3597
- } else {
3598
- "object" === typeof (null == (_l = viteConfig.build) ? void 0 : _l.lib) && (pluginOpts.input = null == (_m = viteConfig.build) ? void 0 : _m.lib.entry);
3599
- }
3600
- if ("node" === sys.env || "bun" === sys.env) {
3601
- const fs = await sys.dynamicImport("node:fs");
3602
- try {
3603
- const rootDir2 = pluginOpts.rootDir ?? sys.cwd();
3604
- const packageJsonPath = sys.path.join(rootDir2, "package.json");
3605
- const pkgString = await fs.promises.readFile(packageJsonPath, "utf-8");
3606
- try {
3607
- const data = JSON.parse(pkgString);
3608
- "string" === typeof data.name && (pluginOpts.scope = data.name);
3609
- } catch (e) {
3610
- console.error(e);
3611
- }
3612
- } catch {}
3613
- const nodeOs = await sys.dynamicImport("node:os");
3614
- const scopeSuffix = pluginOpts.scope ? `-${pluginOpts.scope.replace(/\//g, "--")}` : "";
3615
- tmpClientManifestPath = path.join(nodeOs.tmpdir(), `vite-plugin-qwik-q-manifest${scopeSuffix}.json`);
3616
- if ("ssr" === target && !pluginOpts.manifestInput) {
3617
- try {
3618
- const clientManifestStr = await fs.promises.readFile(tmpClientManifestPath, "utf-8");
3619
- pluginOpts.manifestInput = JSON.parse(clientManifestStr);
3620
- } catch {}
3621
- }
3622
- }
3623
- }
3624
- const opts = qwikPlugin.normalizeOptions(pluginOpts);
3625
- manifestInput = pluginOpts.manifestInput || null;
3561
+ const opts = await qwikPlugin.normalizeOptions(pluginOpts);
3562
+ input ||= opts.input;
3563
+ manifestInput = opts.manifestInput;
3626
3564
  srcDir = opts.srcDir;
3627
3565
  rootDir = opts.rootDir;
3628
3566
  if (!qwikViteOpts.csr) {
3629
- clientOutDir = qwikPlugin.normalizePath(sys.path.resolve(opts.rootDir, (null == (_n = qwikViteOpts.client) ? void 0 : _n.outDir) || CLIENT_OUT_DIR));
3567
+ clientOutDir = opts.clientOutDir;
3630
3568
  clientPublicOutDir = viteConfig.base ? path.join(clientOutDir, viteConfig.base) : clientOutDir;
3631
- ssrOutDir = qwikPlugin.normalizePath(sys.path.resolve(opts.rootDir, (null == (_o = qwikViteOpts.ssr) ? void 0 : _o.outDir) || SSR_OUT_DIR));
3632
- clientDevInput = "string" === typeof (null == (_p = qwikViteOpts.client) ? void 0 : _p.devInput) ? path.resolve(opts.rootDir, qwikViteOpts.client.devInput) : opts.srcDir ? path.resolve(opts.srcDir, CLIENT_DEV_INPUT) : path.resolve(opts.rootDir, "src", CLIENT_DEV_INPUT);
3569
+ ssrOutDir = opts.ssrOutDir;
3570
+ clientDevInput = "string" === typeof (null == (_q = qwikViteOpts.client) ? void 0 : _q.devInput) ? path.resolve(opts.rootDir, qwikViteOpts.client.devInput) : opts.srcDir ? path.resolve(opts.srcDir, CLIENT_DEV_INPUT) : path.resolve(opts.rootDir, "src", CLIENT_DEV_INPUT);
3633
3571
  clientDevInput = qwikPlugin.normalizePath(clientDevInput);
3634
3572
  }
3635
3573
  const vendorRoots = shouldFindVendors ? await findQwikRoots(sys, sys.cwd()) : [];
@@ -3639,9 +3577,9 @@ globalThis.qwikOptimizer = function(module) {
3639
3577
  const qTestKey = "globalThis.qTest";
3640
3578
  const qInspectorKey = "globalThis.qInspector";
3641
3579
  const qSerializeKey = "globalThis.qSerialize";
3642
- const qDev = (null == (_q = null == viteConfig ? void 0 : viteConfig.define) ? void 0 : _q[qDevKey]) ?? isDevelopment;
3643
- const qInspector = (null == (_r = null == viteConfig ? void 0 : viteConfig.define) ? void 0 : _r[qInspectorKey]) ?? isDevelopment;
3644
- const qSerialize = (null == (_s = null == viteConfig ? void 0 : viteConfig.define) ? void 0 : _s[qSerializeKey]) ?? isDevelopment;
3580
+ const qDev = (null == (_r = null == viteConfig ? void 0 : viteConfig.define) ? void 0 : _r[qDevKey]) ?? isDevelopment;
3581
+ const qInspector = (null == (_s = null == viteConfig ? void 0 : viteConfig.define) ? void 0 : _s[qInspectorKey]) ?? isDevelopment;
3582
+ const qSerialize = (null == (_t = null == viteConfig ? void 0 : viteConfig.define) ? void 0 : _t[qSerializeKey]) ?? isDevelopment;
3645
3583
  const updatedViteConfig = {
3646
3584
  ssr: {
3647
3585
  noExternal: [ QWIK_CORE_ID, QWIK_CORE_INTERNAL_ID, QWIK_CORE_SERVER, QWIK_BUILD_ID, ...vendorIds ]
@@ -3677,6 +3615,7 @@ globalThis.qwikOptimizer = function(module) {
3677
3615
  },
3678
3616
  rollupOptions: {
3679
3617
  maxParallelFileOps: 1,
3618
+ input: input,
3680
3619
  output: {
3681
3620
  manualChunks: qwikPlugin.manualChunks
3682
3621
  }
@@ -3693,10 +3632,10 @@ globalThis.qwikOptimizer = function(module) {
3693
3632
  const buildOutputDir = "client" === target && viteConfig.base ? path.join(opts.outDir, viteConfig.base) : opts.outDir;
3694
3633
  updatedViteConfig.build.cssCodeSplit = false;
3695
3634
  updatedViteConfig.build.outDir = buildOutputDir;
3696
- const origOnwarn = null == (_t = updatedViteConfig.build.rollupOptions) ? void 0 : _t.onwarn;
3635
+ const origOnwarn = null == (_u = updatedViteConfig.build.rollupOptions) ? void 0 : _u.onwarn;
3697
3636
  updatedViteConfig.build.rollupOptions = {
3698
- input: opts.input,
3699
- output: normalizeRollupOutputOptions(qwikPlugin, null == (_v = null == (_u = viteConfig.build) ? void 0 : _u.rollupOptions) ? void 0 : _v.output, useAssetsDir, buildOutputDir),
3637
+ ...updatedViteConfig.build.rollupOptions,
3638
+ output: normalizeRollupOutputOptions(qwikPlugin, null == (_w = null == (_v = viteConfig.build) ? void 0 : _v.rollupOptions) ? void 0 : _w.output, useAssetsDir, buildOutputDir),
3700
3639
  preserveEntrySignatures: "exports-only",
3701
3640
  onwarn: (warning, warn) => {
3702
3641
  if ("typescript" === warning.plugin && warning.message.includes("outputToFilesystem")) {
@@ -3709,7 +3648,7 @@ globalThis.qwikOptimizer = function(module) {
3709
3648
  if ("build" === viteCommand) {
3710
3649
  updatedViteConfig.publicDir = false;
3711
3650
  updatedViteConfig.build.ssr = true;
3712
- null == (null == (_w = viteConfig.build) ? void 0 : _w.minify) && "production" === buildMode && (updatedViteConfig.build.minify = "esbuild");
3651
+ null == (null == (_x = viteConfig.build) ? void 0 : _x.minify) && "production" === buildMode && (updatedViteConfig.build.minify = true);
3713
3652
  }
3714
3653
  } else if ("client" === opts.target) {
3715
3654
  isClientDevOnly && !opts.csr && (updatedViteConfig.build.rollupOptions.input = clientDevInput);
@@ -3741,6 +3680,7 @@ globalThis.qwikOptimizer = function(module) {
3741
3680
  qwikPlugin.normalizeOptions(qwikViteOpts);
3742
3681
  },
3743
3682
  async buildStart() {
3683
+ injections.length = 0;
3744
3684
  const resolver = this.resolve.bind(this);
3745
3685
  await qwikPlugin.validateSource(resolver);
3746
3686
  qwikPlugin.onDiagnostics((diagnostics, optimizer, srcDir2) => {
@@ -3830,17 +3770,12 @@ globalThis.qwikOptimizer = function(module) {
3830
3770
  }
3831
3771
  }
3832
3772
  }
3833
- const clientManifestStr = await qwikPlugin.generateManifest(this, rollupBundle, bundleGraphAdders, {
3773
+ await qwikPlugin.generateManifest(this, rollupBundle, bundleGraphAdders, {
3834
3774
  injections: injections,
3835
3775
  platform: {
3836
3776
  vite: ""
3837
3777
  }
3838
3778
  });
3839
- const sys = qwikPlugin.getSys();
3840
- if (tmpClientManifestPath && ("node" === sys.env || "bun" === sys.env)) {
3841
- const fs = await sys.dynamicImport("node:fs");
3842
- await fs.promises.writeFile(tmpClientManifestPath, clientManifestStr);
3843
- }
3844
3779
  }
3845
3780
  }
3846
3781
  },
@@ -3880,15 +3815,15 @@ globalThis.qwikOptimizer = function(module) {
3880
3815
  },
3881
3816
  configureServer(server) {
3882
3817
  qwikPlugin.configureServer(server);
3883
- const devSsrServer = !("devSsrServer" in qwikViteOpts) || !!qwikViteOpts.devSsrServer;
3818
+ const devSsrServer = !qwikViteOpts.csr && (!("devSsrServer" in qwikViteOpts) || !!qwikViteOpts.devSsrServer);
3884
3819
  const imageDevTools = !qwikViteOpts.devTools || !("imageDevTools" in qwikViteOpts.devTools) || qwikViteOpts.devTools.imageDevTools;
3885
3820
  imageDevTools && server.middlewares.use(getImageSizeServer(qwikPlugin.getSys(), rootDir, srcDir));
3886
- if (!qwikViteOpts.csr) {
3821
+ if (devSsrServer) {
3887
3822
  const plugin = async () => {
3888
3823
  const opts = qwikPlugin.getOptions();
3889
3824
  const sys = qwikPlugin.getSys();
3890
3825
  const path = qwikPlugin.getPath();
3891
- await configureDevServer(basePathname, server, opts, sys, path, isClientDevOnly, clientDevInput, devSsrServer);
3826
+ await configureDevServer(basePathname, server, opts, sys, path, isClientDevOnly, clientDevInput);
3892
3827
  };
3893
3828
  const isNEW = true === globalThis.__qwikRouterNew || true === globalThis.__qwikCityNew || server.config.build.lib;
3894
3829
  return isNEW ? plugin : plugin();
@@ -4014,6 +3949,7 @@ globalThis.qwikOptimizer = function(module) {
4014
3949
  };
4015
3950
  var VITE_CLIENT_MODULE = "@qwik.dev/core/vite-client";
4016
3951
  var CLIENT_DEV_INPUT = "entry.dev";
3952
+ var symbolMapper = void 0;
4017
3953
  return module.exports;
4018
3954
  }("object" === typeof module && module.exports ? module : {
4019
3955
  exports: {}