diff --git a/.changeset/ninety-planets-search.md b/.changeset/ninety-planets-search.md
new file mode 100644
index 00000000000..77a35dd0e1a
--- /dev/null
+++ b/.changeset/ninety-planets-search.md
@@ -0,0 +1,6 @@
+---
+'@builder.io/qwik-city': patch
+'@builder.io/qwik': patch
+---
+
+FIX: `vite` is now a peer dependency of `qwik` and `qwik-city`, so that there can be no duplicate imports. This should not have consequences, since all apps also directly depend on `vite`.
diff --git a/flake.lock b/flake.lock
index a1e73124bbe..0594f4d0447 100644
--- a/flake.lock
+++ b/flake.lock
@@ -2,11 +2,11 @@
"nodes": {
"nixpkgs": {
"locked": {
- "lastModified": 1721138476,
- "narHash": "sha256-+W5eZOhhemLQxelojLxETfbFbc19NWawsXBlapYpqIA=",
+ "lastModified": 1728888510,
+ "narHash": "sha256-nsNdSldaAyu6PE3YUA+YQLqUDJh+gRbBooMMekZJwvI=",
"owner": "NixOS",
"repo": "nixpkgs",
- "rev": "ad0b5eed1b6031efaed382844806550c3dcb4206",
+ "rev": "a3c0b3b21515f74fd2665903d4ce6bc4dc81c77c",
"type": "github"
},
"original": {
@@ -43,11 +43,11 @@
"nixpkgs": "nixpkgs_2"
},
"locked": {
- "lastModified": 1721355572,
- "narHash": "sha256-I4TQ2guV9jTmZsXeWt5HMojcaqNZHII4zu0xIKZEovM=",
+ "lastModified": 1728959392,
+ "narHash": "sha256-fp4he1QQjE+vasDMspZYeXrwTm9otwEqLwEN6FKZ5v0=",
"owner": "oxalica",
"repo": "rust-overlay",
- "rev": "d5bc7b1b21cf937fb8ff108ae006f6776bdb163d",
+ "rev": "4c6e317300f05b8871f585b826b6f583e7dc4a9b",
"type": "github"
},
"original": {
diff --git a/package.json b/package.json
index ab488d85ac9..e424719a072 100644
--- a/package.json
+++ b/package.json
@@ -54,7 +54,7 @@
"dependencies": [
"@playwright/test"
],
- "pinVersion": "1.40.0"
+ "pinVersion": "1.47.0"
},
{
"label": "Undici should always be * until we remove it",
@@ -109,7 +109,7 @@
"@napi-rs/triples": "1.2.0",
"@node-rs/helper": "1.6.0",
"@octokit/action": "6.1.0",
- "@playwright/test": "1.40.0",
+ "@playwright/test": "1.47.0",
"@types/brotli": "1.3.4",
"@types/bun": "1.1.6",
"@types/cross-spawn": "6.0.6",
diff --git a/packages/docs/src/repl/repl-console.tsx b/packages/docs/src/repl/repl-console.tsx
index a733cf791b9..a61d5e44ac4 100644
--- a/packages/docs/src/repl/repl-console.tsx
+++ b/packages/docs/src/repl/repl-console.tsx
@@ -7,7 +7,7 @@ export interface ReplConsoleProps {
export const ReplConsole = component$(({ store }: ReplConsoleProps) => {
return (
- {store.events.map((ev) => (
+ {store.events.filter(Boolean).map((ev) => (
))}
diff --git a/packages/docs/src/repl/repl-output-modules.tsx b/packages/docs/src/repl/repl-output-modules.tsx
index 7c1468358fc..4cdf156fba0 100644
--- a/packages/docs/src/repl/repl-output-modules.tsx
+++ b/packages/docs/src/repl/repl-output-modules.tsx
@@ -26,6 +26,7 @@ export const ReplOutputModules = component$(({ outputs, headerText }: ReplOutput
class={{ 'in-view': selectedPath.value === o.path }}
preventdefault:click
key={o.path}
+ title={o.path}
>
{o.path}
diff --git a/packages/docs/src/repl/repl-output-panel.tsx b/packages/docs/src/repl/repl-output-panel.tsx
index 06385eb677f..5c2ba35c156 100644
--- a/packages/docs/src/repl/repl-output-panel.tsx
+++ b/packages/docs/src/repl/repl-output-panel.tsx
@@ -1,4 +1,4 @@
-import { component$ } from '@builder.io/qwik';
+import { component$, useComputed$ } from '@builder.io/qwik';
import { CodeBlock } from '../components/code-block/code-block';
import { ReplOutputModules } from './repl-output-modules';
import { ReplOutputSymbols } from './repl-output-symbols';
@@ -8,6 +8,10 @@ import type { ReplAppInput, ReplStore } from './types';
export const ReplOutputPanel = component$(({ input, store }: ReplOutputPanelProps) => {
const diagnosticsLen = store.diagnostics.length + store.monacoDiagnostics.length;
+ const clientBundlesNoCore = useComputed$(() =>
+ // Qwik Core is not interesting and is large, slowing down the UI
+ store.clientBundles.filter((b) => !b.path.endsWith('qwikCore.js'))
+ );
return (
@@ -111,7 +115,7 @@ export const ReplOutputPanel = component$(({ input, store }: ReplOutputPanelProp
) : null}
{store.selectedOutputPanel === 'clientBundles' ? (
-
+
) : null}
{store.selectedOutputPanel === 'serverModules' ? (
diff --git a/packages/docs/src/repl/repl-output-symbols.tsx b/packages/docs/src/repl/repl-output-symbols.tsx
index 0457c21a2a7..47846d85e6e 100644
--- a/packages/docs/src/repl/repl-output-symbols.tsx
+++ b/packages/docs/src/repl/repl-output-symbols.tsx
@@ -27,6 +27,7 @@ export const ReplOutputSymbols = component$(({ outputs }: ReplOutputSymbolsProps
}}
class={{ 'in-view': selectedPath.value === o.path }}
preventdefault:click
+ title={o.segment?.canonicalFilename}
>
{o.segment?.canonicalFilename}
diff --git a/packages/docs/src/repl/repl-output-update.ts b/packages/docs/src/repl/repl-output-update.ts
index 4cc4f38039c..1fe666a0dc6 100644
--- a/packages/docs/src/repl/repl-output-update.ts
+++ b/packages/docs/src/repl/repl-output-update.ts
@@ -24,7 +24,12 @@ export const updateReplOutput = async (store: ReplStore, result: ReplResult) =>
deepUpdate(store.transformedModules, result.transformedModules);
deepUpdate(store.clientBundles, result.clientBundles);
deepUpdate(store.ssrModules, result.ssrModules);
- deepUpdate(store.events, result.events);
+ if (
+ result.events.length !== store.events.length ||
+ result.events.some((ev, i) => ev?.start !== store.events[i]?.start)
+ ) {
+ store.events = result.events;
+ }
if (store.selectedOutputPanel === 'diagnostics' && store.monacoDiagnostics.length === 0) {
store.selectedOutputPanel = 'app';
diff --git a/packages/docs/src/repl/worker/app-bundle-client.ts b/packages/docs/src/repl/worker/app-bundle-client.ts
index 7c8cbf4befd..6bc1dcbd5a1 100644
--- a/packages/docs/src/repl/worker/app-bundle-client.ts
+++ b/packages/docs/src/repl/worker/app-bundle-client.ts
@@ -36,7 +36,6 @@ export const appBundleClient = async (
const rollupInputOpts: InputOptions = {
input: entry.path,
- cache: self.rollupCache,
plugins: [
replCss(options),
self.qwikOptimizer?.qwikRollup(qwikRollupClientOpts),
@@ -71,8 +70,6 @@ export const appBundleClient = async (
const bundle = await self.rollup?.rollup(rollupInputOpts);
if (bundle) {
- self.rollupCache = bundle.cache;
-
const generated = await bundle.generate({
sourcemap: false,
});
@@ -96,7 +93,7 @@ export const appBundleClient = async (
})
);
- // clear out old cache
+ // clear out old results cache
// no need to wait
cache.keys().then((keys) => {
if (keys.length > 500) {
diff --git a/packages/docs/src/repl/worker/repl-plugins.ts b/packages/docs/src/repl/worker/repl-plugins.ts
index a4e8a8fa9f6..2e9cd574f9a 100644
--- a/packages/docs/src/repl/worker/repl-plugins.ts
+++ b/packages/docs/src/repl/worker/repl-plugins.ts
@@ -15,6 +15,7 @@ export const replResolver = (options: ReplInputOptions, buildMode: 'client' | 's
name: 'repl-resolver',
resolveId(id, importer) {
+ // Entry point
if (!importer) {
return id;
}
@@ -25,12 +26,10 @@ export const replResolver = (options: ReplInputOptions, buildMode: 'client' | 's
) {
return '\0qwikCore';
}
- if (id === '@builder.io/qwik/build') {
- return '\0qwikBuild';
- }
if (id === '@builder.io/qwik/server') {
return '\0qwikServer';
}
+ // Simple relative file resolution
if (id.startsWith('./')) {
const extensions = ['', '.tsx', '.ts'];
id = id.slice(1);
@@ -41,10 +40,6 @@ export const replResolver = (options: ReplInputOptions, buildMode: 'client' | 's
}
}
}
- return {
- id,
- external: true,
- };
},
async load(id) {
@@ -59,20 +54,6 @@ export const replResolver = (options: ReplInputOptions, buildMode: 'client' | 's
if (id === '\0qwikServer') {
return getRuntimeBundle('qwikServer');
}
- if (id === '\0qwikBuild') {
- return `
- export const isServer = true;
- export const isBrowser = false;
- export const isDev = false;
- `;
- }
- }
- if (id === '\0qwikBuild') {
- return `
- export const isServer = false;
- export const isBrowser = true;
- export const isDev = false;
- `;
}
if (id === '\0qwikCore') {
if (options.buildMode === 'production') {
@@ -88,7 +69,11 @@ export const replResolver = (options: ReplInputOptions, buildMode: 'client' | 's
}
throw new Error(`Unable to load Qwik core`);
}
- return null;
+
+ // We're the fallback, we know all the files
+ if (/\.[jt]sx?$/.test(id)) {
+ throw new Error(`load: unknown module ${id}`);
+ }
},
};
};
diff --git a/packages/qwik-city/package.json b/packages/qwik-city/package.json
index 2c487321dde..c176ca6d5bf 100644
--- a/packages/qwik-city/package.json
+++ b/packages/qwik-city/package.json
@@ -11,7 +11,6 @@
"undici": "*",
"valibot": ">=0.36.0 <2",
"vfile": "6.0.1",
- "vite": "^5",
"vite-imagetools": "^7",
"zod": "3.22.4"
},
@@ -174,6 +173,9 @@
"homepage": "https://qwik.dev/",
"license": "MIT",
"main": "./lib/index.qwik.mjs",
+ "peerDependencies": {
+ "vite": "^5"
+ },
"publishConfig": {
"access": "public"
},
diff --git a/packages/qwik/package.json b/packages/qwik/package.json
index f913a5b3139..5df5d129eb6 100644
--- a/packages/qwik/package.json
+++ b/packages/qwik/package.json
@@ -25,8 +25,7 @@
}
],
"dependencies": {
- "csstype": "^3.1",
- "vite": "^5"
+ "csstype": "^3.1"
},
"devDependencies": {
"@builder.io/qwik": "workspace:^",
@@ -156,6 +155,14 @@
],
"license": "MIT",
"main": "./dist/core.mjs",
+ "peerDependencies": {
+ "vite": "^5"
+ },
+ "peerDependenciesMeta": {
+ "vite": {
+ "optional": true
+ }
+ },
"repository": {
"type": "git",
"url": "https://github.com/QwikDev/qwik.git",
diff --git a/packages/qwik/src/core/qrl/qrl-class.ts b/packages/qwik/src/core/qrl/qrl-class.ts
index 870cfa12a70..228226dd8d8 100644
--- a/packages/qwik/src/core/qrl/qrl-class.ts
+++ b/packages/qwik/src/core/qrl/qrl-class.ts
@@ -12,7 +12,7 @@ import {
type InvokeTuple,
} from '../use/use-core';
import { getQFuncs, QInstance } from '../util/markers';
-import { maybeThen } from '../util/promises';
+import { isPromise, maybeThen } from '../util/promises';
import { qDev, qSerialize, qTest, seal } from '../util/qdev';
import { isArray, isFunction, type ValueOrPromise } from '../util/types';
import type { QRLDev } from './qrl';
@@ -106,7 +106,6 @@ export const createQRL = (
if (context.$event$ === undefined) {
context.$event$ = this as Event;
}
- // const result = invoke.call(this, context, f, ...(args as Parameters));
try {
return fn.apply(this, args);
} finally {
@@ -147,7 +146,17 @@ export const createQRL = (
const imported = getPlatform().importSymbol(_containerEl, chunk, symbol);
symbolRef = maybeThen(imported, (ref) => (qrl.resolved = symbolRef = wrapFn(ref)));
}
- (symbolRef as Promise).finally(() => emitUsedSymbol(symbol, ctx?.$element$, start));
+ if (typeof symbolRef === 'object' && isPromise(symbolRef)) {
+ symbolRef.then(
+ () => emitUsedSymbol(symbol, ctx?.$element$, start),
+ (err) => {
+ console.error(`qrl ${symbol} failed to load`, err);
+ // We shouldn't cache rejections, we can try again later
+ symbolRef = null;
+ throw err;
+ }
+ );
+ }
return symbolRef;
};
diff --git a/packages/qwik/src/optimizer/src/plugins/plugin.ts b/packages/qwik/src/optimizer/src/plugins/plugin.ts
index 9f4bda68335..5a89109b640 100644
--- a/packages/qwik/src/optimizer/src/plugins/plugin.ts
+++ b/packages/qwik/src/optimizer/src/plugins/plugin.ts
@@ -18,7 +18,7 @@ import type {
TransformOutput,
} from '../types';
import { createLinter, type QwikLinter } from './eslint-plugin';
-import type { LoadResult, OutputBundle, TransformResult } from 'rollup';
+import type { LoadResult, OutputBundle, ResolveIdResult, TransformResult } from 'rollup';
import { isWin } from './vite-utils';
const REG_CTX_NAME = ['server'];
@@ -84,7 +84,7 @@ export function createPlugin(optimizerOptions: OptimizerOptions = {}) {
const serverResults = new Map();
const serverTransformedOutputs = new Map();
- const foundQrls = new Map();
+ const parentIds = new Map();
let internalOptimizer: Optimizer | null = null;
let linter: QwikLinter | undefined = undefined;
@@ -369,13 +369,14 @@ export function createPlugin(optimizerOptions: OptimizerOptions = {}) {
}
};
- const buildStart = async (ctx: Rollup.PluginContext) => {
- debug(`buildStart()`, opts.buildMode, opts.scope, opts.target);
- const optimizer = getOptimizer();
+ let optimizer: Optimizer;
+ const buildStart = async (_ctx: Rollup.PluginContext) => {
+ debug(`buildStart()`, opts.buildMode, opts.scope, opts.target, opts.rootDir, opts.srcDir);
+ optimizer = getOptimizer();
if (optimizer.sys.env === 'node' && opts.target === 'ssr' && opts.lint) {
try {
linter = await createLinter(optimizer.sys, opts.rootDir, opts.tsconfigFileNames);
- } catch (err) {
+ } catch {
// Nothing
}
}
@@ -391,7 +392,7 @@ export function createPlugin(optimizerOptions: OptimizerOptions = {}) {
};
return relInput;
});
- debug(`buildStart() opts.srcInputs (${opts.srcInputs.length})`);
+ debug(`buildStart() opts.srcInputs (${opts.srcInputs.length} files)`);
}
debug(`transformedOutputs.clear()`);
@@ -403,159 +404,144 @@ export function createPlugin(optimizerOptions: OptimizerOptions = {}) {
return devServer ? !!viteOpts?.ssr : opts.target === 'ssr' || opts.target === 'test';
};
- const getParentId = (id: string, isServer: boolean) => {
- const transformedOutputs = isServer ? serverTransformedOutputs : clientTransformedOutputs;
- const segment = transformedOutputs.get(id);
- if (segment) {
- return segment[1];
- }
- const hash = getSymbolHash(id);
- return foundQrls.get(hash);
- };
-
let resolveIdCount = 0;
- /** This resolves special names and QRL segments/entries. All the rest falls through */
- const resolveId = async (
+ /**
+ * This resolves virtual names and QRL segments/entries. All the rest falls through. We must
+ * always return a value for QRL segments because they don't exist on disk.
+ */
+ const resolveId = (
ctx: Rollup.PluginContext,
id: string,
importerId: string | undefined,
resolveOpts?: Parameters>[2]
) => {
- const count = resolveIdCount++;
- const isServer = getIsServer(resolveOpts);
- debug(`resolveId(${count})`, 'Start', id, {
- from: importerId,
- for: isServer ? 'server' : 'client',
- });
if (id.startsWith('\0')) {
return;
}
+ const count = resolveIdCount++;
+ const isServer = getIsServer(resolveOpts);
+ debug(`resolveId(${count})`, `begin ${id} | ${isServer ? 'server' : 'client'} | ${importerId}`);
+
+ /**
+ * During development, the QRL filenames will be of the form `${parentId}_${name}_${hash}.js`,
+ * and we might get requests for QRLs from the client before the parent was built.
+ *
+ * Furthermore, the client requests come in via HTTP and they are encoded in a lossy way.
+ *
+ * So, first we need to recover the real requested id, then we need to make it an absolute path,
+ * and then we can start matching.
+ */
+ const parsedImporterId = importerId && parseId(importerId);
+ importerId = parsedImporterId && normalizePath(parsedImporterId.pathId);
+ const path = getPath();
+ const importerDir = parsedImporterId && path.dirname(parsedImporterId.pathId);
+
+ /**
+ * A request possibly from the browser. It could be our own QRLs requests, which we uri encode,
+ * or an import generated by vite. So we have to be careful.
+ */
+ if (devServer && id.startsWith('/') && importerId?.endsWith('.html')) {
+ const maybeQrl = decodeURIComponent(id);
+ // We encode absolute paths like this, due to e.g. pnpm linking
+ if (maybeQrl.startsWith('/@fs/')) {
+ id = maybeQrl.slice(5);
+ } else {
+ /**
+ * This path could still be absolute, when encoded by Vite. If the first path segment is the
+ * same as that of the importer dir, we assume it's absolute.
+ */
+ if (!maybeQrl.startsWith(importerDir!.slice(0, importerDir!.indexOf('/', 1)))) {
+ id = path.join(importerDir!, maybeQrl);
+ }
+ }
+ // Now we hopefully removed the influence of the http encoding
+ }
- if (opts.target === 'lib' && id.startsWith(QWIK_CORE_ID)) {
- // For library code, we must retain the qwik imports as-is. They all start with /qwik.
- return {
- external: true,
- id,
- };
+ // Relative paths must be resolved vs the importer
+ if (id.startsWith('.') && importerDir) {
+ id = path.resolve(importerDir, id);
}
- if (opts.resolveQwikBuild && id.endsWith(QWIK_BUILD_ID)) {
- debug(`resolveId(${count})`, 'Resolved', QWIK_BUILD_ID);
- return {
- id: normalizePath(getPath().resolve(opts.rootDir, QWIK_BUILD_ID)),
+ // Split query, remove windows path encoding etc
+ const parsedId = parseId(id);
+ const pathId = normalizePath(parsedId.pathId);
+
+ let result: ResolveIdResult;
+
+ // During regular builds, we'll encounter parents before QRLs, so this will match
+ if (parentIds.get(pathId)) {
+ debug(`resolveId(${count}) Resolved already known ${pathId}`);
+ result = {
+ id: pathId + parsedId.query,
moduleSideEffects: false,
};
- }
-
- if (id.endsWith(QWIK_CLIENT_MANIFEST_ID)) {
- debug(`resolveId(${count})`, 'Resolved', QWIK_CLIENT_MANIFEST_ID);
- if (opts.target === 'lib') {
- return {
- id: id,
- external: true,
+ } else if (
+ // We test with endsWith because the dev server might add a /
+ pathId.endsWith(QWIK_BUILD_ID)
+ ) {
+ /**
+ * Now we're in the case where we have a QRL segment that hasn't been transformed yet or one
+ * of the virtual modules.
+ */
+ if (opts.resolveQwikBuild) {
+ debug(`resolveId(${count})`, 'Resolved', QWIK_BUILD_ID);
+ result = {
+ // We use / because \0 gives errors
+ id: `/${QWIK_BUILD_ID}`,
moduleSideEffects: false,
};
}
-
- const firstInput = opts.input && Object.values(opts.input)[0];
- return {
- id: normalizePath(getPath().resolve(firstInput, QWIK_CLIENT_MANIFEST_ID)),
+ } else if (pathId.endsWith(QWIK_CLIENT_MANIFEST_ID)) {
+ debug(`resolveId(${count})`, 'Resolved', QWIK_CLIENT_MANIFEST_ID);
+ result = {
+ id: `/${QWIK_CLIENT_MANIFEST_ID}`,
moduleSideEffects: false,
};
- }
- const optimizer = getOptimizer();
- const path = getPath();
-
- // Requests originating from another file, or the browser
- if (importerId) {
- const looksLikePath = id.startsWith('.') || id.startsWith('/');
- if (!looksLikePath) {
- // Rollup can ask us to resolve imports from QRL segments
- // It seems like importers need to exist on disk for this to work automatically,
- // so for segments we resolve via the parent instead
- debug(`resolveId(${count})`, 'falling back to default resolver');
- const parentId = getParentId(importerId, isServer);
- if (parentId) {
- return ctx.resolve(id, parentId, { skipSelf: true });
- }
- return;
- }
- importerId = normalizePath(importerId);
- const parsedImporterId = parseId(importerId);
- const dir = path.dirname(parsedImporterId.pathId);
- const outputs = isServer ? serverTransformedOutputs : clientTransformedOutputs;
- if (
- // vite dev mode
- devServer &&
- // client code
- !isServer &&
- // browser requests
- importerId.endsWith('.html') &&
- // looks like a url pathname
- id.startsWith('/') &&
- // not a known output
- !outputs.has(id)
- ) {
- // This is a request from a dev-mode browser
- // we uri-encode chunk paths in dev mode, and other imported files don't have % in their paths (hopefully)
- // These will be individual source files and their QRL segments
- id = decodeURIComponent(id);
- // Support absolute paths for qrl segments, due to e.g. pnpm linking
- if (id.startsWith('/@fs/')) {
- // remove `/@fs/` prefix for Windows
- // remove `/@fs` prefix for Unix
- id = id.slice(isWin(optimizer.sys.os) ? 5 : 4);
- } else {
- // Now paths could be either relative or absolute, we're not sure.
- // If the first path segment is the same as that of the importer dir, we assume it's absolute
- if (!id.startsWith(dir.slice(0, dir.indexOf('/', 1)))) {
- id = path.join(dir, id);
+ } else {
+ /**
+ * If this looks like a dev qrl filename, it doesn't matter who imports, we have the parentId
+ * embedded.
+ */
+ const match = /^(.*\.[mc]?[jt]sx?)_([^/]+)\.js($|\?)/.exec(pathId);
+ if (match) {
+ const [, parentId, name] = match;
+ return ctx.resolve(parentId, importerId, { skipSelf: true }).then((resolved) => {
+ if (resolved) {
+ debug(`resolveId(${count})`, `resolved to QRL ${name} of ${parentId}`);
+ // Save for quick lookup
+ parentIds.set(pathId, resolved.id);
+ return {
+ id: pathId + parsedId.query,
+ // QRL segments can't have side effects. Probably never useful, but it's here for consistency
+ moduleSideEffects: false,
+ };
+ } else {
+ debug(`resolveId(${count})`, `${parentId} does not exist`);
}
- }
- id = normalizePath(id);
- // Check for parent passed via QRL
- const match = /^([^?]*)\?_qrl_parent=(.*)/.exec(id);
- if (match) {
- id = match[1];
- // The parent is in the same directory as the requested segment
- const parentId = id.slice(0, id.lastIndexOf('/') + 1) + match[2];
- const hash = getSymbolHash(id);
- // Register the parent in case we don't have it (restart etc)
- foundQrls.set(hash, parentId);
- }
- }
- const parsedId = parseId(id);
- let importeePathId = normalizePath(parsedId.pathId);
- const ext = path.extname(importeePathId).toLowerCase();
- if (ext in RESOLVE_EXTS) {
- // resolve relative paths
- importeePathId = normalizePath(path.resolve(dir, importeePathId));
- const parentId = getParentId(importeePathId, isServer);
- if (parentId) {
- debug(`resolveId(${count}) Resolved ${importeePathId} from transformedOutputs`);
- return {
- id: importeePathId + parsedId.query,
- };
+ });
+ } else if (importerId) {
+ /**
+ * When we get here it's neither a virtual module nor a QRL segment. However, Rollup can ask
+ * us to resolve imports from QRL segments. It seems like importers need to exist on disk
+ * for this to work automatically, so for segments we resolve via the parent instead.
+ *
+ * Note that when a this happens, the segment was already resolved and transformed, so we
+ * know about it.
+ */
+ const importerParentId = parentIds.get(importerId);
+ if (importerParentId) {
+ debug(`resolveId(${count})`, `resolving via ${importerParentId}`);
+ // This returns a promise that we can't await because of deadlocking
+ return ctx.resolve(id, importerParentId, { skipSelf: true });
}
}
- } else if (path.isAbsolute(id)) {
- const parsedId = parseId(id);
- const importeePathId = normalizePath(parsedId.pathId);
- const ext = path.extname(importeePathId).toLowerCase();
- if (ext in RESOLVE_EXTS && getParentId(importeePathId, isServer)) {
- debug(
- `resolveId(${count}) Resolved ${importeePathId} from transformedOutputs (no importer)`
- );
- return {
- id: importeePathId + parsedId.query,
- };
- }
}
- // We don't (yet) know this id
- debug(`resolveId(${count})`, 'Not resolved', id, importerId);
- return null;
+
+ debug(`resolveId(${count}) end`, (result as any)?.id || result);
+ return result;
};
+ let loadCount = 0;
const load = async (
ctx: Rollup.PluginContext,
id: string,
@@ -564,62 +550,58 @@ export function createPlugin(optimizerOptions: OptimizerOptions = {}) {
if (id.startsWith('\0') || id.startsWith('/@fs/')) {
return;
}
+ const count = loadCount++;
const isServer = getIsServer(loadOpts);
- if (opts.resolveQwikBuild && id.endsWith(QWIK_BUILD_ID)) {
- debug(`load()`, QWIK_BUILD_ID, opts.buildMode);
+
+ // Virtual modules
+ if (opts.resolveQwikBuild && id === `/${QWIK_BUILD_ID}`) {
+ debug(`load(${count})`, QWIK_BUILD_ID, opts.buildMode);
return {
moduleSideEffects: false,
code: getQwikBuildModule(isServer, opts.target),
};
}
-
- if (id.endsWith(QWIK_CLIENT_MANIFEST_ID)) {
- debug(`load()`, QWIK_CLIENT_MANIFEST_ID, opts.buildMode);
+ if (id === `/${QWIK_CLIENT_MANIFEST_ID}`) {
+ debug(`load(${count})`, QWIK_CLIENT_MANIFEST_ID, opts.buildMode);
return {
moduleSideEffects: false,
code: await getQwikServerManifestModule(isServer),
};
}
+
+ // QRL segments
const parsedId = parseId(id);
- const path = getPath();
id = normalizePath(parsedId.pathId);
-
const outputs = isServer ? serverTransformedOutputs : clientTransformedOutputs;
if (devServer && !outputs.has(id)) {
// in dev mode, it could be that the id is a QRL segment that wasn't transformed yet
- const parentId = getParentId(id, isServer);
+ const parentId = parentIds.get(id);
if (parentId) {
// building here via ctx.load doesn't seem to work (no transform), instead we use the devserver directly
- debug(`load()`, 'transforming QRL parent', parentId);
+ debug(`load(${count})`, 'transforming QRL parent', parentId);
// We need to encode it as an absolute path
- await devServer.transformRequest(`/@fs${parentId.startsWith('/') ? '' : '/'}${parentId}`);
+ await devServer.transformRequest(`/@fs${parentId}`);
// The QRL segment should exist now
+ if (!outputs.has(id)) {
+ debug(`load(${count})`, `QRL segment ${id} not found in ${parentId}`);
+ return null;
+ }
}
}
const transformedModule = outputs.get(id);
if (transformedModule) {
- debug(`load()`, 'Found', id);
- let { code } = transformedModule[0];
- const { map, segment } = transformedModule[0];
- const firstInput = opts.input && Object.values(opts.input)[0];
-
- if (devServer && firstInput) {
- // doing this because vite will not use resolveId() when "noExternal" is false
- // so we need to turn the @qwik-client-manifest import into a relative import
- code = code.replace(
- /@qwik-client-manifest/g,
- normalizePath(path.resolve(firstInput, QWIK_CLIENT_MANIFEST_ID))
- );
- }
+ debug(`load(${count})`, 'Found', id);
+ const { code, map, segment } = transformedModule[0];
return { code, map, meta: { segment } };
}
- debug('load()', 'Not found', id);
+ debug(`load(${count})`, 'Not a QRL or virtual module', id);
return null;
};
+ let transformCount = 0;
const transform = async function (
ctx: Rollup.PluginContext,
code: string,
@@ -629,6 +611,7 @@ export function createPlugin(optimizerOptions: OptimizerOptions = {}) {
if (id.startsWith('\0')) {
return;
}
+ const count = transformCount++;
const isServer = getIsServer(transformOpts);
const currentOutputs = isServer ? serverTransformedOutputs : clientTransformedOutputs;
if (currentOutputs.has(id)) {
@@ -649,7 +632,7 @@ export function createPlugin(optimizerOptions: OptimizerOptions = {}) {
const strip = opts.target === 'client' || opts.target === 'ssr';
const normalizedID = normalizePath(pathId);
debug(
- `transform()`,
+ `transform(${count})`,
`Transforming ${id} (for: ${isServer ? 'server' : 'client'}${strip ? ', strip' : ''})`
);
@@ -703,14 +686,6 @@ export function createPlugin(optimizerOptions: OptimizerOptions = {}) {
const newOutput = optimizer.transformModulesSync(transformOpts);
const module = newOutput.modules.find((mod) => !isAdditionalFile(mod))!;
- if (devServer && isServer) {
- // we're in dev mode. All QRLs that might be emitted in SSR HTML are defined here.
- // register them so that they can be resolved by the dev server
- const matches = module.code.matchAll(/_([a-zA-Z0-9]{11,11})['"][,)]/g);
- for (const [, symbol] of matches) {
- foundQrls.set(symbol, id);
- }
- }
// uncomment to show transform results
// debug({ isServer, strip }, transformOpts, newOutput);
@@ -728,7 +703,8 @@ export function createPlugin(optimizerOptions: OptimizerOptions = {}) {
for (const mod of newOutput.modules) {
if (mod !== module) {
const key = normalizePath(path.join(srcDir, mod.path));
- debug(`transform()`, `segment ${key}`, mod.segment?.displayName);
+ debug(`transform(${count})`, `segment ${key}`, mod.segment!.displayName);
+ parentIds.set(key, id);
currentOutputs.set(key, [mod, id]);
deps.add(key);
if (opts.target === 'client') {
@@ -770,7 +746,7 @@ export function createPlugin(optimizerOptions: OptimizerOptions = {}) {
};
}
- debug(`transform()`, 'Not transforming', id);
+ debug(`transform(${count})`, 'Not transforming', id);
return null;
};
@@ -848,7 +824,7 @@ export function createPlugin(optimizerOptions: OptimizerOptions = {}) {
const normalizePath = (id: string) => lazyNormalizePath(id);
- function getQwikBuildModule(isServer: boolean, target: QwikBuildTarget) {
+ function getQwikBuildModule(isServer: boolean, _target: QwikBuildTarget) {
const isDev = opts.buildMode === 'development';
return `// @builder.io/qwik/build
export const isServer = ${JSON.stringify(isServer)};
@@ -877,14 +853,17 @@ export const manifest = ${JSON.stringify(manifest)};\n`;
debug('handleHotUpdate()', `invalidate ${id}`);
serverResults.delete(id);
clientResults.delete(id);
- }
- for (const dep of mod.info?.meta?.qwikdeps || []) {
- debug('handleHotUpdate()', `invalidate segment ${dep}`);
- serverTransformedOutputs.delete(dep);
- clientTransformedOutputs.delete(dep);
- const mod = ctx.server.moduleGraph.getModuleById(dep);
- if (mod) {
- ctx.server.moduleGraph.invalidateModule(mod);
+ for (const outputs of [clientTransformedOutputs, serverTransformedOutputs]) {
+ for (const [key, [_, parentId]] of outputs) {
+ if (parentId === id) {
+ debug('handleHotUpdate()', `invalidate ${id} segment ${key}`);
+ outputs.delete(key);
+ const mod = ctx.server.moduleGraph.getModuleById(key);
+ if (mod) {
+ ctx.server.moduleGraph.invalidateModule(mod);
+ }
+ }
+ }
}
}
}
@@ -919,7 +898,6 @@ export const manifest = ${JSON.stringify(manifest)};\n`;
transform,
validateSource,
setSourceMapSupport,
- foundQrls,
configureServer,
handleHotUpdate,
manualChunks,
@@ -963,13 +941,8 @@ export function parseId(originalId: string) {
};
}
-export function getSymbolHash(symbolName: string) {
- const index = symbolName.lastIndexOf('_');
- if (index > -1) {
- return symbolName.slice(index + 1);
- }
- return symbolName;
-}
+export const getSymbolHash = (symbolName: string) =>
+ /_([a-z0-9]+)($|\.js($|\?))/.exec(symbolName)?.[1];
const TRANSFORM_EXTS = {
'.jsx': true,
@@ -977,15 +950,6 @@ const TRANSFORM_EXTS = {
'.tsx': true,
} as const;
-const RESOLVE_EXTS = {
- '.tsx': true,
- '.ts': true,
- '.jsx': true,
- '.js': true,
- '.mjs': true,
- '.cjs': true,
-} as const;
-
/**
* Any file that matches this needs to be processed by Qwik to extract QRL segments etc. Used in
* libraries.
diff --git a/packages/qwik/src/optimizer/src/plugins/plugin.unit.ts b/packages/qwik/src/optimizer/src/plugins/plugin.unit.ts
index 360e41fe5ad..1547bbb06fe 100644
--- a/packages/qwik/src/optimizer/src/plugins/plugin.unit.ts
+++ b/packages/qwik/src/optimizer/src/plugins/plugin.unit.ts
@@ -1,5 +1,5 @@
import path, { resolve } from 'node:path';
-import { assert, test } from 'vitest';
+import { assert, describe, expect, test } from 'vitest';
import type { QwikManifest } from '../types';
import { ExperimentalFeatures, createPlugin } from './plugin';
import { normalizePath } from '../../../testing/util';
@@ -218,12 +218,80 @@ test('experimental[]', async () => {
assert.deepEqual(opts.experimental, { [flag]: true } as any);
});
-async function mockPlugin() {
+describe('resolveId', () => {
+ test('qrls', async () => {
+ const plugin = await mockPlugin();
+ expect(plugin.resolveId(null!, 'foo', undefined)).toBeFalsy();
+ const ctx = { resolve: async () => ({ id: 'Yey' }) } as any;
+ await expect(
+ plugin.resolveId(
+ ctx,
+ '/root/src/routes/layout.tsx_layout_component_usetask_1_7xk04rim0vu.js',
+ undefined
+ )
+ ).resolves.toHaveProperty(
+ 'id',
+ '/root/src/routes/layout.tsx_layout_component_usetask_1_7xk04rim0vu.js'
+ );
+ expect(
+ await plugin.resolveId(ctx, '/root/src/routes/layout.tsx_s_7xk04rim0vu.js', undefined)
+ ).toHaveProperty('id', '/root/src/routes/layout.tsx_s_7xk04rim0vu.js');
+ expect(plugin.resolveId(null!, './foo', '/root/src/routes/layout.tsx')).toBeFalsy();
+ expect(
+ await plugin.resolveId(
+ ctx,
+ './layout.tsx_layout_component_usetask_1_7xk04rim0vu.js',
+ '/root/src/routes/layout.tsx'
+ )
+ ).toHaveProperty('id', '/root/src/routes/layout.tsx_layout_component_usetask_1_7xk04rim0vu.js');
+ // this uses the already populated id we created above
+ expect(
+ await plugin.resolveId(
+ {
+ resolve: (id: string, importer: string) => {
+ expect(id).toBe('/root/src/routes/foo');
+ expect(importer).toBe('Yey');
+ return { id: 'hi' };
+ },
+ } as any,
+ './foo',
+ '/root/src/routes/layout.tsx_layout_component_usetask_1_7xk04rim0vu.js'
+ )
+ ).toEqual({ id: 'hi' });
+ });
+ test('win32', async () => {
+ const plugin = await mockPlugin('win32');
+ expect(
+ await plugin.resolveId(
+ { resolve: async () => 'Yey' } as any,
+ 'C:\\src\\routes\\layout.tsx_s_7xk04rim0vu.js',
+ undefined
+ )
+ ).toHaveProperty('id', 'C:/src/routes/layout.tsx_s_7xk04rim0vu.js');
+ });
+ test('libs', async () => {
+ const plugin = await mockPlugin();
+ expect(plugin.resolveId(null!, '@builder.io/qwik/build', undefined)).toHaveProperty(
+ 'id',
+ '/@builder.io/qwik/build'
+ );
+ expect(plugin.resolveId(null!, '/@builder.io/qwik/build', undefined)).toHaveProperty(
+ 'id',
+ '/@builder.io/qwik/build'
+ );
+ expect(plugin.resolveId(null!, '@qwik-client-manifest', '/foo/bar')).toHaveProperty(
+ 'id',
+ '/@qwik-client-manifest'
+ );
+ });
+});
+
+async function mockPlugin(os = process.platform) {
const plugin = createPlugin({
sys: {
cwd: () => process.cwd(),
env: 'node',
- os: process.platform,
+ os,
dynamicImport: async (path) => import(path),
strictDynamicImport: async (path) => import(path),
path: path as any,
diff --git a/packages/qwik/src/optimizer/src/plugins/vite-dev-server.ts b/packages/qwik/src/optimizer/src/plugins/vite-dev-server.ts
index 04cafa4b542..fc2dcfafa58 100644
--- a/packages/qwik/src/optimizer/src/plugins/vite-dev-server.ts
+++ b/packages/qwik/src/optimizer/src/plugins/vite-dev-server.ts
@@ -5,14 +5,9 @@ import type { IncomingMessage, ServerResponse } from 'http';
import type { Connect, ViteDevServer } from 'vite';
import type { OptimizerSystem, Path, QwikManifest, SymbolMapper, SymbolMapperFn } from '../types';
-import {
- type NormalizedQwikPluginOptions,
- parseId,
- getSymbolHash,
- makeNormalizePath,
-} from './plugin';
+import { type NormalizedQwikPluginOptions, parseId, makeNormalizePath } from './plugin';
import type { QwikViteDevResponse } from './vite';
-import { formatError, isWin } from './vite-utils';
+import { formatError } from './vite-utils';
import { VITE_ERROR_OVERLAY_STYLES } from './vite-error';
import imageDevTools from './image-size-runtime.html?raw';
import clickToComponent from './click-to-component.html?raw';
@@ -34,8 +29,13 @@ function getOrigin(req: IncomingMessage) {
// We must encode the chunk so that e.g. + doesn't get converted to space etc
const encode = (url: string) =>
- encodeURIComponent(url).replaceAll('%2F', '/').replaceAll('%40', '@').replaceAll('%3A', ':');
-
+ encodeURIComponent(url)
+ .replaceAll('%2F', '/')
+ .replaceAll('%40', '@')
+ .replaceAll('%3A', ':')
+ .replaceAll('%5B', '[')
+ .replaceAll('%5D', ']')
+ .replaceAll('%2C', ',');
function createSymbolMapper(
base: string,
opts: NormalizedQwikPluginOptions,
@@ -45,21 +45,13 @@ function createSymbolMapper(
const normalizePath = makeNormalizePath(sys);
return (
symbolName: string,
- mapper: SymbolMapper | undefined,
+ _mapper: SymbolMapper | undefined,
parent: string | undefined
): [string, string] => {
if (symbolName === SYNC_QRL) {
return [symbolName, ''];
}
- const hash = getSymbolHash(symbolName);
if (!parent) {
- console.warn(
- `qwik vite-dev-server symbolMapper: parent not provided for ${symbolName}, falling back to mapper.`
- );
- const chunk = mapper && mapper[hash];
- if (chunk) {
- return [chunk[0], chunk[1]];
- }
console.error(
'qwik vite-dev-server symbolMapper: unknown qrl requested without parent:',
symbolName
@@ -67,13 +59,12 @@ function createSymbolMapper(
return [symbolName, `${base}${symbolName.toLowerCase()}.js`];
}
// on windows, absolute paths don't start with a slash
- const maybeSlash = isWin(sys.os) ? '/' : '';
const parentPath = normalizePath(path.dirname(parent));
const parentFile = path.basename(parent);
const qrlPath = parentPath.startsWith(opts.rootDir)
? normalizePath(path.relative(opts.rootDir, parentPath))
- : `@fs${maybeSlash}${parentPath}`;
- const qrlFile = `${encode(qrlPath)}/${parentFile.toLowerCase()}_${symbolName.toLowerCase()}.js?_qrl_parent=${encode(parentFile)}`;
+ : `@fs/${parentPath}`;
+ const qrlFile = encode(`${qrlPath}/${parentFile.toLowerCase()}_${symbolName.toLowerCase()}.js`);
return [symbolName, `${base}${qrlFile}`];
};
}
diff --git a/packages/qwik/src/optimizer/src/plugins/vite.ts b/packages/qwik/src/optimizer/src/plugins/vite.ts
index d5c809b42cd..158188f6836 100644
--- a/packages/qwik/src/optimizer/src/plugins/vite.ts
+++ b/packages/qwik/src/optimizer/src/plugins/vite.ts
@@ -392,6 +392,14 @@ export function qwikVite(qwikViteOpts: QwikVitePluginOptions = {}): any {
} else if (opts.target === 'lib') {
// Library Build
updatedViteConfig.build!.minify = false;
+ updatedViteConfig.build!.rollupOptions.external = [
+ QWIK_CORE_ID,
+ QWIK_CORE_SERVER,
+ QWIK_JSX_RUNTIME_ID,
+ QWIK_JSX_DEV_RUNTIME_ID,
+ QWIK_BUILD_ID,
+ QWIK_CLIENT_MANIFEST_ID,
+ ];
} else {
// Test Build
updatedViteConfig.define = {
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index cf3e9732ad4..08dce889bdd 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -68,8 +68,8 @@ importers:
specifier: 6.1.0
version: 6.1.0
'@playwright/test':
- specifier: 1.40.0
- version: 1.40.0
+ specifier: 1.47.0
+ version: 1.47.0
'@types/brotli':
specifier: 1.3.4
version: 1.3.4
@@ -558,9 +558,6 @@ importers:
csstype:
specifier: ^3.1
version: 3.1.3
- vite:
- specifier: ^5
- version: 5.3.5(@types/node@20.14.11)(terser@5.31.3)
devDependencies:
'@builder.io/qwik':
specifier: workspace:^
@@ -613,13 +610,10 @@ importers:
version: 6.6.2
valibot:
specifier: '>=0.36.0 <2'
- version: 0.39.0(typescript@5.4.5)
+ version: 0.42.1(typescript@5.4.5)
vfile:
specifier: 6.0.1
version: 6.0.1
- vite:
- specifier: ^5
- version: 5.3.5(@types/node@20.14.11)(terser@5.31.3)
vite-imagetools:
specifier: ^7
version: 7.0.4(rollup@4.19.0)
@@ -1168,9 +1162,11 @@ packages:
'@esbuild-kit/core-utils@3.3.2':
resolution: {integrity: sha512-sPRAnw9CdSsRmEtnsl2WXWdyquogVpB3yZ3dgwJfe8zrOzTsV7cJvmwrKVa+0ma5BoiGJ+BoqkMvawbayKUsqQ==}
+ deprecated: 'Merged into tsx: https://tsx.is'
'@esbuild-kit/esm-loader@2.6.5':
resolution: {integrity: sha512-FxEMIkJKnodyA1OaCUoEvbYRkoZlLZ4d/eXFu9Fh8CbBBgP5EmZxrfTRyN0qpXZ4vOvqnE5YdRdcrmUUXuU+dA==}
+ deprecated: 'Merged into tsx: https://tsx.is'
'@esbuild-plugins/node-globals-polyfill@0.2.3':
resolution: {integrity: sha512-r3MIryXDeXDOZh7ih1l/yE9ZLORCd5e8vWg02azWRGj5SPTuoh69A2AIyn0Z31V/kHBfZ4HgWJ+OK3GTTwLmnw==}
@@ -2154,8 +2150,8 @@ packages:
peerDependencies:
eslint: ^6.0.0 || ^7.0.0 || >=8.0.0
- '@eslint-community/regexpp@4.11.0':
- resolution: {integrity: sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==}
+ '@eslint-community/regexpp@4.11.1':
+ resolution: {integrity: sha512-m4DVN9ZqskZoLU5GlWZadwDnYo3vAEydiUayB9widCl9ffWx2IvPnp6n3on5rJmziJSw9Bv+Z3ChDVdMwXCY8Q==}
engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
'@eslint/eslintrc@2.1.4':
@@ -2930,9 +2926,9 @@ packages:
resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==}
engines: {node: '>=14'}
- '@playwright/test@1.40.0':
- resolution: {integrity: sha512-PdW+kn4eV99iP5gxWNSDQCbhMaDVej+RXL5xr6t04nbKLCBwYtA046t7ofoczHOm8u6c+45hpDKQVZqtqwkeQg==}
- engines: {node: '>=16'}
+ '@playwright/test@1.47.0':
+ resolution: {integrity: sha512-SgAdlSwYVpToI4e/IH19IHHWvoijAYH5hu2MWSXptRypLSnzj51PcGD+rsOXFayde4P9ZLi+loXVwArg6IUkCA==}
+ engines: {node: '>=18'}
hasBin: true
'@pnpm/config.env-replace@1.1.0':
@@ -3266,9 +3262,6 @@ packages:
'@types/mime@1.3.5':
resolution: {integrity: sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==}
- '@types/mime@3.0.4':
- resolution: {integrity: sha512-iJt33IQnVRkqeqC7PzBHPTC6fDlRNRW8vjrgqtScAhrmMwe8c4Eo7+fUGTa+XdWrpEgpyKWMYmi2dIwMAYRzPw==}
-
'@types/ms@0.7.34':
resolution: {integrity: sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==}
@@ -3305,11 +3298,11 @@ packages:
'@types/prompts@2.4.9':
resolution: {integrity: sha512-qTxFi6Buiu8+50/+3DGIWLHM6QuWsEKugJnnP6iv2Mc4ncxE4A/OJkjuVOA+5X0X1S/nq5VJRa8Lu+nwcvbrKA==}
- '@types/prop-types@15.7.12':
- resolution: {integrity: sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==}
+ '@types/prop-types@15.7.13':
+ resolution: {integrity: sha512-hCZTSvwbzWGvhqxp/RqVqwU999pBf2vp7hzIjiYOsl8wqOmUxkQ6ddw1cV3l8811+kdUFus/q4d1Y3E3SyEifA==}
- '@types/qs@6.9.11':
- resolution: {integrity: sha512-oGk0gmhnEJK4Yyk+oI7EfXsLayXatCWPHary1MtcmbAifkobT9cM9yutG/hZKIseOU0MqbIwQ/u2nn/Gb+ltuQ==}
+ '@types/qs@6.9.16':
+ resolution: {integrity: sha512-7i+zxXdPD0T4cKDuxCUXJ4wHcsJLwENa6Z3dCu8cfCK743OGy5Nu1RmAGqDPsoTDINVEcdXKRvR/zre+P2Ku1A==}
'@types/range-parser@1.2.7':
resolution: {integrity: sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==}
@@ -3335,8 +3328,8 @@ packages:
'@types/send@0.17.4':
resolution: {integrity: sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==}
- '@types/serve-static@1.15.5':
- resolution: {integrity: sha512-PDRk21MnK70hja/YF8AHfC7yIsiQHn1rcXx7ijCFBX/k+XQJhQT/gw3xekXKJvx+5SXaMMS8oqQy09Mzvz2TuQ==}
+ '@types/serve-static@1.15.7':
+ resolution: {integrity: sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==}
'@types/set-cookie-parser@2.4.10':
resolution: {integrity: sha512-GGmQVGpQWUe5qglJozEjZV/5dyxbOOZ0LHe/lqyWssB88Y4svNfst0uqBVscdDeIKl5Jy5+aPSvy7mI9tYRguw==}
@@ -4522,8 +4515,8 @@ packages:
supports-color:
optional: true
- debug@4.3.6:
- resolution: {integrity: sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==}
+ debug@4.3.7:
+ resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==}
engines: {node: '>=6.0'}
peerDependencies:
supports-color: '*'
@@ -5161,21 +5154,22 @@ packages:
resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
- eslint-visitor-keys@4.0.0:
- resolution: {integrity: sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==}
+ eslint-visitor-keys@4.1.0:
+ resolution: {integrity: sha512-Q7lok0mqMUSf5a/AdAZkA5a/gHcO6snwQClVNNvFKCAVlxXucdU8pKydU5ZVZjBx5xr37vGbFFWtLQYreLzrZg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
eslint@8.57.0:
resolution: {integrity: sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ deprecated: This version is no longer supported. Please see https://eslint.org/version-support for other options.
hasBin: true
esniff@2.0.1:
resolution: {integrity: sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg==}
engines: {node: '>=0.10'}
- espree@10.1.0:
- resolution: {integrity: sha512-M1M6CpiE6ffoigIOWYO9UDP8TMUw9kqb21tf+08IgDYjCsOvCuDt4jQcZmoYxx+w7zlKw9/N0KXfto+I8/FrXA==}
+ espree@10.2.0:
+ resolution: {integrity: sha512-upbkBJbckcCNBDBDXEbuhjbP68n+scUd3k/U2EkyM9nw+I/jPiL4cLF/Al06CF96wRltFda16sxDFrxsI1v0/g==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
espree@9.6.1:
@@ -5984,8 +5978,8 @@ packages:
resolution: {integrity: sha512-t7sv42WkwFkyKbivUCglsQW5YWMskWtbEf4MNKX5u/CCWHKSPzN4FtBQGsQZgCLbxOzpVlcbWVK5KB3auIOjSw==}
engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
- ignore@5.3.1:
- resolution: {integrity: sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==}
+ ignore@5.3.2:
+ resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==}
engines: {node: '>= 4'}
image-meta@0.2.0:
@@ -6574,6 +6568,7 @@ packages:
libsql@0.3.18:
resolution: {integrity: sha512-lvhKr7WV3NLWRbXkjn/MeKqXOAqWKU0PX9QYrvDh7fneukapj+iUQ4qgJASrQyxcCrEsClXCQiiK5W6OoYPAlA==}
+ cpu: [x64, arm64, wasm32]
os: [darwin, linux, win32]
light-my-request@5.11.1:
@@ -7266,8 +7261,8 @@ packages:
resolution: {integrity: sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==}
engines: {node: '>= 6.13.0'}
- node-gyp-build@4.8.1:
- resolution: {integrity: sha512-OSs33Z9yWr148JZcbZd5WiAXhh/n9z8TxQcdMhIOlpN9AhWpLfvVFO73+m77bBABQMaY9XSvIa+qk0jlI7Gcaw==}
+ node-gyp-build@4.8.2:
+ resolution: {integrity: sha512-IRUxE4BVsHWXkV/SFOut4qTlagw2aM8T5/vnTsmrHJvVoKueJHRc/JaFND7QDDc61kLYUJ6qlZM3sqTSyx2dTw==}
hasBin: true
node-releases@2.0.14:
@@ -7742,14 +7737,14 @@ packages:
pkg-types@1.0.3:
resolution: {integrity: sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==}
- playwright-core@1.40.0:
- resolution: {integrity: sha512-fvKewVJpGeca8t0ipM56jkVSU6Eo0RmFvQ/MaCQNDYm+sdvKkMBBWTE1FdeMqIdumRaXXjZChWHvIzCGM/tA/Q==}
- engines: {node: '>=16'}
+ playwright-core@1.47.0:
+ resolution: {integrity: sha512-1DyHT8OqkcfCkYUD9zzUTfg7EfTd+6a8MkD/NWOvjo0u/SCNd5YmY/lJwFvUZOxJbWNds+ei7ic2+R/cRz/PDg==}
+ engines: {node: '>=18'}
hasBin: true
- playwright@1.40.0:
- resolution: {integrity: sha512-gyHAgQjiDf1m34Xpwzaqb76KgfzYrhK7iih+2IzcOCoZWr/8ZqmdBw+t0RU85ZmfJMgtgAiNtBQ/KS2325INXw==}
- engines: {node: '>=16'}
+ playwright@1.47.0:
+ resolution: {integrity: sha512-jOWiRq2pdNAX/mwLiwFYnPHpEZ4rM+fRSQpRHwEwZlP2PUANvL3+aJOF/bvISMhFD30rqMxUB4RJx9aQbfh4Ww==}
+ engines: {node: '>=18'}
hasBin: true
possible-typed-array-names@1.0.0:
@@ -8018,10 +8013,6 @@ packages:
resolution: {integrity: sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==}
engines: {node: '>=0.6'}
- qs@6.11.2:
- resolution: {integrity: sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==}
- engines: {node: '>=0.6'}
-
qs@6.13.0:
resolution: {integrity: sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==}
engines: {node: '>=0.6'}
@@ -8488,16 +8479,11 @@ packages:
shikiji-core@0.9.19:
resolution: {integrity: sha512-AFJu/vcNT21t0e6YrfadZ+9q86gvPum6iywRyt1OtIPjPFe25RQnYJyxHQPMLKCCWA992TPxmEmbNcOZCAJclw==}
- deprecated: Shikiji is merged back to Shiki v1.0, please migrate over to get the latest updates
shikiji@0.9.19:
resolution: {integrity: sha512-Kw2NHWktdcdypCj1GkKpXH4o6Vxz8B8TykPlPuLHOGSV8VkhoCLcFOH4k19K4LXAQYRQmxg+0X/eM+m2sLhAkg==}
deprecated: Shikiji is merged back to Shiki v1.0, please migrate over to get the latest updates
- side-channel@1.0.5:
- resolution: {integrity: sha512-QcgiIWV4WV7qWExbN5llt6frQB/lBven9pqliLXfGPB+K9ZYXxDozp0wLkHS24kWCm+6YXH/f0HhnObZnZOBnQ==}
- engines: {node: '>= 0.4'}
-
side-channel@1.0.6:
resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==}
engines: {node: '>= 0.4'}
@@ -9196,8 +9182,8 @@ packages:
unenv-nightly@1.10.0-1717606461.a117952:
resolution: {integrity: sha512-u3TfBX02WzbHTpaEfWEKwDijDSFAHcgXkayUZ+MVDrjhLFvgAJzFGTSTmwlEhwWi2exyRQey23ah9wELMM6etg==}
- unenv@1.9.0:
- resolution: {integrity: sha512-QKnFNznRxmbOF1hDgzpqrlIf6NC5sbZ2OJ+5Wl3OX8uM+LUJXbj4TXvLJCtwbPTmbMHCLIz6JLKNinNsMShK9g==}
+ unenv@1.10.0:
+ resolution: {integrity: sha512-wY5bskBQFL9n3Eca5XnhH6KbUo/tfvkwm9OpcdCvLaeA7piBNbavbOKJySEwQ1V0RH6HvNlSAFRTpvTqgKRQXQ==}
unicorn-magic@0.1.0:
resolution: {integrity: sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==}
@@ -9358,8 +9344,8 @@ packages:
valibot@0.33.3:
resolution: {integrity: sha512-/fuY1DlX8uiQ7aphlzrrI2DbG0YJk84JMgvz2qKpUIdXRNsS53varfo4voPjSrjUr5BSV2K0miSEJUOlA5fQFg==}
- valibot@0.39.0:
- resolution: {integrity: sha512-d+vE8SDRNy9zKg6No5MHz2tdz8H6CW8X3OdqYdmlhnoqQmEoM6Hu0hJUrZv3tPSVrzZkIIMCtdCQtMzcM6NCWw==}
+ valibot@0.42.1:
+ resolution: {integrity: sha512-3keXV29Ar5b//Hqi4MbSdV7lfVp6zuYLZuA9V1PvQUsXqogr+u5lvLPLk3A4f74VUXDnf/JfWMN6sB+koJ/FFw==}
peerDependencies:
typescript: 5.4.5
peerDependenciesMeta:
@@ -10841,15 +10827,15 @@ snapshots:
eslint: 8.57.0
eslint-visitor-keys: 3.4.3
- '@eslint-community/regexpp@4.11.0': {}
+ '@eslint-community/regexpp@4.11.1': {}
'@eslint/eslintrc@2.1.4':
dependencies:
ajv: 6.12.6
- debug: 4.3.6(supports-color@9.4.0)
+ debug: 4.3.7(supports-color@9.4.0)
espree: 9.6.1
globals: 13.24.0
- ignore: 5.3.1
+ ignore: 5.3.2
import-fresh: 3.3.0
js-yaml: 4.1.0
minimatch: 3.1.2
@@ -10860,10 +10846,10 @@ snapshots:
'@eslint/eslintrc@3.1.0':
dependencies:
ajv: 6.12.6
- debug: 4.3.6(supports-color@9.4.0)
- espree: 10.1.0
+ debug: 4.3.7(supports-color@9.4.0)
+ espree: 10.2.0
globals: 14.0.0
- ignore: 5.3.1
+ ignore: 5.3.2
import-fresh: 3.3.0
js-yaml: 4.1.0
minimatch: 3.1.2
@@ -10931,7 +10917,7 @@ snapshots:
'@humanwhocodes/config-array@0.11.14':
dependencies:
'@humanwhocodes/object-schema': 2.0.2
- debug: 4.3.6(supports-color@9.4.0)
+ debug: 4.3.7(supports-color@9.4.0)
minimatch: 3.1.2
transitivePeerDependencies:
- supports-color
@@ -11153,7 +11139,7 @@ snapshots:
'@mapbox/node-pre-gyp@1.0.11(supports-color@9.4.0)':
dependencies:
- detect-libc: 2.0.2
+ detect-libc: 2.0.3
https-proxy-agent: 5.0.1(supports-color@9.4.0)
make-dir: 3.1.0
node-fetch: 2.7.0
@@ -11339,7 +11325,7 @@ snapshots:
dependencies:
'@babel/runtime': 7.23.9
'@mui/types': 7.2.15(@types/react@18.3.3)
- '@types/prop-types': 15.7.12
+ '@types/prop-types': 15.7.13
clsx: 2.1.1
prop-types: 15.8.1
react: 18.3.1
@@ -11881,9 +11867,9 @@ snapshots:
'@pkgjs/parseargs@0.11.0':
optional: true
- '@playwright/test@1.40.0':
+ '@playwright/test@1.47.0':
dependencies:
- playwright: 1.40.0
+ playwright: 1.47.0
'@pnpm/config.env-replace@1.1.0': {}
@@ -11903,7 +11889,7 @@ snapshots:
'@puppeteer/browsers@2.2.4':
dependencies:
- debug: 4.3.6(supports-color@9.4.0)
+ debug: 4.3.7(supports-color@9.4.0)
extract-zip: 2.0.1
progress: 2.0.3
proxy-agent: 6.4.0
@@ -12176,7 +12162,7 @@ snapshots:
'@types/express-serve-static-core@4.17.43':
dependencies:
'@types/node': 20.14.11
- '@types/qs': 6.9.11
+ '@types/qs': 6.9.16
'@types/range-parser': 1.2.7
'@types/send': 0.17.4
@@ -12184,8 +12170,8 @@ snapshots:
dependencies:
'@types/body-parser': 1.19.5
'@types/express-serve-static-core': 4.17.43
- '@types/qs': 6.9.11
- '@types/serve-static': 1.15.5
+ '@types/qs': 6.9.16
+ '@types/serve-static': 1.15.7
'@types/geojson@7946.0.14': {}
@@ -12229,8 +12215,6 @@ snapshots:
'@types/mime@1.3.5': {}
- '@types/mime@3.0.4': {}
-
'@types/ms@0.7.34': {}
'@types/node-fetch@2.6.11':
@@ -12267,9 +12251,9 @@ snapshots:
'@types/node': 20.14.11
kleur: 3.0.3
- '@types/prop-types@15.7.12': {}
+ '@types/prop-types@15.7.13': {}
- '@types/qs@6.9.11': {}
+ '@types/qs@6.9.16': {}
'@types/range-parser@1.2.7': {}
@@ -12283,7 +12267,7 @@ snapshots:
'@types/react@18.3.3':
dependencies:
- '@types/prop-types': 15.7.12
+ '@types/prop-types': 15.7.13
csstype: 3.1.3
'@types/refractor@3.4.1':
@@ -12299,11 +12283,11 @@ snapshots:
'@types/mime': 1.3.5
'@types/node': 20.14.11
- '@types/serve-static@1.15.5':
+ '@types/serve-static@1.15.7':
dependencies:
'@types/http-errors': 2.0.4
- '@types/mime': 3.0.4
'@types/node': 20.14.11
+ '@types/send': 0.17.4
'@types/set-cookie-parser@2.4.10':
dependencies:
@@ -12344,7 +12328,7 @@ snapshots:
'@typescript-eslint/eslint-plugin@7.16.1(@typescript-eslint/parser@7.16.1(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5)':
dependencies:
- '@eslint-community/regexpp': 4.11.0
+ '@eslint-community/regexpp': 4.11.1
'@typescript-eslint/parser': 7.16.1(eslint@8.57.0)(typescript@5.4.5)
'@typescript-eslint/scope-manager': 7.16.1
'@typescript-eslint/type-utils': 7.16.1(eslint@8.57.0)(typescript@5.4.5)
@@ -12352,7 +12336,7 @@ snapshots:
'@typescript-eslint/visitor-keys': 7.16.1
eslint: 8.57.0
graphemer: 1.4.0
- ignore: 5.3.1
+ ignore: 5.3.2
natural-compare: 1.4.0
ts-api-utils: 1.3.0(typescript@5.4.5)
optionalDependencies:
@@ -12366,7 +12350,7 @@ snapshots:
'@typescript-eslint/types': 7.16.1
'@typescript-eslint/typescript-estree': 7.16.1(typescript@5.4.5)
'@typescript-eslint/visitor-keys': 7.16.1
- debug: 4.3.6(supports-color@9.4.0)
+ debug: 4.3.7(supports-color@9.4.0)
eslint: 8.57.0
optionalDependencies:
typescript: 5.4.5
@@ -12400,7 +12384,7 @@ snapshots:
dependencies:
'@typescript-eslint/typescript-estree': 7.16.1(typescript@5.4.5)
'@typescript-eslint/utils': 7.16.1(eslint@8.57.0)(typescript@5.4.5)
- debug: 4.3.6(supports-color@9.4.0)
+ debug: 4.3.7(supports-color@9.4.0)
eslint: 8.57.0
ts-api-utils: 1.3.0(typescript@5.4.5)
optionalDependencies:
@@ -12418,7 +12402,7 @@ snapshots:
dependencies:
'@typescript-eslint/types': 5.62.0
'@typescript-eslint/visitor-keys': 5.62.0
- debug: 4.3.6(supports-color@9.4.0)
+ debug: 4.3.7(supports-color@9.4.0)
globby: 11.1.0
is-glob: 4.0.3
semver: 7.6.3
@@ -12432,7 +12416,7 @@ snapshots:
dependencies:
'@typescript-eslint/types': 7.16.1
'@typescript-eslint/visitor-keys': 7.16.1
- debug: 4.3.6(supports-color@9.4.0)
+ debug: 4.3.7(supports-color@9.4.0)
globby: 11.1.0
is-glob: 4.0.3
minimatch: 9.0.4
@@ -12447,7 +12431,7 @@ snapshots:
dependencies:
'@typescript-eslint/types': 7.8.0
'@typescript-eslint/visitor-keys': 7.8.0
- debug: 4.3.6(supports-color@9.4.0)
+ debug: 4.3.7(supports-color@9.4.0)
globby: 11.1.0
is-glob: 4.0.3
minimatch: 9.0.4
@@ -12531,7 +12515,7 @@ snapshots:
glob: 7.2.3
graceful-fs: 4.2.11
micromatch: 4.0.5
- node-gyp-build: 4.8.1
+ node-gyp-build: 4.8.2
resolve-from: 5.0.0
transitivePeerDependencies:
- encoding
@@ -12692,13 +12676,13 @@ snapshots:
agent-base@6.0.2(supports-color@9.4.0):
dependencies:
- debug: 4.3.6(supports-color@9.4.0)
+ debug: 4.3.7(supports-color@9.4.0)
transitivePeerDependencies:
- supports-color
agent-base@7.1.0:
dependencies:
- debug: 4.3.6(supports-color@9.4.0)
+ debug: 4.3.7(supports-color@9.4.0)
transitivePeerDependencies:
- supports-color
@@ -12959,7 +12943,7 @@ snapshots:
dependencies:
'@fastify/error': 3.4.1
archy: 1.0.0
- debug: 4.3.6(supports-color@9.4.0)
+ debug: 4.3.7(supports-color@9.4.0)
fastq: 1.17.1
transitivePeerDependencies:
- supports-color
@@ -13144,7 +13128,7 @@ snapshots:
bufferutil@4.0.8:
dependencies:
- node-gyp-build: 4.8.1
+ node-gyp-build: 4.8.2
builtin-modules@3.3.0: {}
@@ -13205,7 +13189,7 @@ snapshots:
capnp-ts@0.7.0:
dependencies:
- debug: 4.3.6(supports-color@9.4.0)
+ debug: 4.3.7(supports-color@9.4.0)
tslib: 2.6.2
transitivePeerDependencies:
- supports-color
@@ -13678,9 +13662,9 @@ snapshots:
dependencies:
ms: 2.1.2
- debug@4.3.6(supports-color@9.4.0):
+ debug@4.3.7(supports-color@9.4.0):
dependencies:
- ms: 2.1.2
+ ms: 2.1.3
optionalDependencies:
supports-color: 9.4.0
@@ -14129,7 +14113,7 @@ snapshots:
esbuild-register@3.5.0(esbuild@0.19.12):
dependencies:
- debug: 4.3.6(supports-color@9.4.0)
+ debug: 4.3.7(supports-color@9.4.0)
esbuild: 0.19.12
transitivePeerDependencies:
- supports-color
@@ -14380,12 +14364,12 @@ snapshots:
eslint-visitor-keys@3.4.3: {}
- eslint-visitor-keys@4.0.0: {}
+ eslint-visitor-keys@4.1.0: {}
eslint@8.57.0:
dependencies:
'@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0)
- '@eslint-community/regexpp': 4.11.0
+ '@eslint-community/regexpp': 4.11.1
'@eslint/eslintrc': 2.1.4
'@eslint/js': 8.57.0
'@humanwhocodes/config-array': 0.11.14
@@ -14395,7 +14379,7 @@ snapshots:
ajv: 6.12.6
chalk: 4.1.2
cross-spawn: 7.0.3
- debug: 4.3.6(supports-color@9.4.0)
+ debug: 4.3.7(supports-color@9.4.0)
doctrine: 3.0.0
escape-string-regexp: 4.0.0
eslint-scope: 7.2.2
@@ -14409,7 +14393,7 @@ snapshots:
glob-parent: 6.0.2
globals: 13.24.0
graphemer: 1.4.0
- ignore: 5.3.1
+ ignore: 5.3.2
imurmurhash: 0.1.4
is-glob: 4.0.3
is-path-inside: 3.0.3
@@ -14432,11 +14416,11 @@ snapshots:
event-emitter: 0.3.5
type: 2.7.2
- espree@10.1.0:
+ espree@10.2.0:
dependencies:
acorn: 8.12.1
acorn-jsx: 5.3.2(acorn@8.12.1)
- eslint-visitor-keys: 4.0.0
+ eslint-visitor-keys: 4.1.0
espree@9.6.1:
dependencies:
@@ -14658,7 +14642,7 @@ snapshots:
extract-zip@2.0.1:
dependencies:
- debug: 4.3.6(supports-color@9.4.0)
+ debug: 4.3.7(supports-color@9.4.0)
get-stream: 5.2.0
yauzl: 2.10.0
optionalDependencies:
@@ -15047,7 +15031,7 @@ snapshots:
dependencies:
basic-ftp: 5.0.4
data-uri-to-buffer: 6.0.2
- debug: 4.3.6(supports-color@9.4.0)
+ debug: 4.3.7(supports-color@9.4.0)
fs-extra: 11.2.0
transitivePeerDependencies:
- supports-color
@@ -15133,7 +15117,7 @@ snapshots:
array-union: 2.1.0
dir-glob: 3.0.1
fast-glob: 3.3.2
- ignore: 5.3.1
+ ignore: 5.3.2
merge2: 1.4.1
slash: 3.0.0
@@ -15141,7 +15125,7 @@ snapshots:
dependencies:
dir-glob: 3.0.1
fast-glob: 3.3.2
- ignore: 5.3.1
+ ignore: 5.3.2
merge2: 1.4.1
slash: 4.0.0
@@ -15149,7 +15133,7 @@ snapshots:
dependencies:
'@sindresorhus/merge-streams': 2.3.0
fast-glob: 3.3.2
- ignore: 5.3.1
+ ignore: 5.3.2
path-type: 5.0.0
slash: 5.1.0
unicorn-magic: 0.1.0
@@ -15201,7 +15185,7 @@ snapshots:
radix3: 1.1.0
ufo: 1.5.4
uncrypto: 0.1.3
- unenv: 1.9.0
+ unenv: 1.10.0
hanji@0.0.5:
dependencies:
@@ -15405,7 +15389,7 @@ snapshots:
http-proxy-agent@7.0.2:
dependencies:
agent-base: 7.1.0
- debug: 4.3.6(supports-color@9.4.0)
+ debug: 4.3.7(supports-color@9.4.0)
transitivePeerDependencies:
- supports-color
@@ -15439,14 +15423,14 @@ snapshots:
https-proxy-agent@5.0.1(supports-color@9.4.0):
dependencies:
agent-base: 6.0.2(supports-color@9.4.0)
- debug: 4.3.6(supports-color@9.4.0)
+ debug: 4.3.7(supports-color@9.4.0)
transitivePeerDependencies:
- supports-color
https-proxy-agent@7.0.5:
dependencies:
agent-base: 7.1.0
- debug: 4.3.6(supports-color@9.4.0)
+ debug: 4.3.7(supports-color@9.4.0)
transitivePeerDependencies:
- supports-color
@@ -15472,7 +15456,7 @@ snapshots:
dependencies:
minimatch: 9.0.4
- ignore@5.3.1: {}
+ ignore@5.3.2: {}
image-meta@0.2.0: {}
@@ -15594,13 +15578,13 @@ snapshots:
dependencies:
es-errors: 1.3.0
hasown: 2.0.1
- side-channel: 1.0.5
+ side-channel: 1.0.6
ioredis@5.3.2:
dependencies:
'@ioredis/commands': 1.2.0
cluster-key-slot: 1.1.2
- debug: 4.3.6(supports-color@9.4.0)
+ debug: 4.3.7(supports-color@9.4.0)
denque: 2.1.0
lodash.defaults: 4.2.0
lodash.isarguments: 3.1.0
@@ -16783,7 +16767,7 @@ snapshots:
micromark@4.0.0:
dependencies:
'@types/debug': 4.1.12
- debug: 4.3.6(supports-color@9.4.0)
+ debug: 4.3.7(supports-color@9.4.0)
decode-named-character-reference: 1.0.2
devlop: 1.1.0
micromark-core-commonmark: 2.0.0
@@ -17128,7 +17112,7 @@ snapshots:
node-fetch: 3.3.2
omit.js: 2.0.2
p-wait-for: 4.1.0
- qs: 6.11.2
+ qs: 6.13.0
netmask@2.0.2: {}
@@ -17162,7 +17146,7 @@ snapshots:
node-forge@1.3.1: {}
- node-gyp-build@4.8.1: {}
+ node-gyp-build@4.8.2: {}
node-releases@2.0.14: {}
@@ -17523,7 +17507,7 @@ snapshots:
dependencies:
'@tootallnate/quickjs-emscripten': 0.23.0
agent-base: 7.1.0
- debug: 4.3.6(supports-color@9.4.0)
+ debug: 4.3.7(supports-color@9.4.0)
get-uri: 6.0.3
http-proxy-agent: 7.0.2
https-proxy-agent: 7.0.5
@@ -17692,11 +17676,11 @@ snapshots:
mlly: 1.6.1
pathe: 1.1.2
- playwright-core@1.40.0: {}
+ playwright-core@1.47.0: {}
- playwright@1.40.0:
+ playwright@1.47.0:
dependencies:
- playwright-core: 1.40.0
+ playwright-core: 1.47.0
optionalDependencies:
fsevents: 2.3.2
@@ -17756,7 +17740,7 @@ snapshots:
prebuild-install@7.1.1:
dependencies:
- detect-libc: 2.0.2
+ detect-libc: 2.0.3
expand-template: 2.0.3
github-from-package: 0.0.0
minimist: 1.2.8
@@ -17832,7 +17816,7 @@ snapshots:
dependencies:
execa: 5.1.1
find-up: 5.0.0
- ignore: 5.3.1
+ ignore: 5.3.2
mri: 1.2.0
picocolors: 1.0.1
picomatch: 3.0.1
@@ -17887,7 +17871,7 @@ snapshots:
proxy-agent@6.4.0:
dependencies:
agent-base: 7.1.0
- debug: 4.3.6(supports-color@9.4.0)
+ debug: 4.3.7(supports-color@9.4.0)
http-proxy-agent: 7.0.2
https-proxy-agent: 7.0.5
lru-cache: 7.18.3
@@ -17923,7 +17907,7 @@ snapshots:
dependencies:
'@puppeteer/browsers': 2.2.4
chromium-bidi: 0.6.1(devtools-protocol@0.0.1299070)
- debug: 4.3.6(supports-color@9.4.0)
+ debug: 4.3.7(supports-color@9.4.0)
devtools-protocol: 0.0.1299070
ws: 8.18.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
transitivePeerDependencies:
@@ -17947,11 +17931,7 @@ snapshots:
qs@6.11.0:
dependencies:
- side-channel: 1.0.5
-
- qs@6.11.2:
- dependencies:
- side-channel: 1.0.5
+ side-channel: 1.0.6
qs@6.13.0:
dependencies:
@@ -18496,7 +18476,7 @@ snapshots:
sharp@0.32.6:
dependencies:
color: 4.2.3
- detect-libc: 2.0.2
+ detect-libc: 2.0.3
node-addon-api: 6.1.0
prebuild-install: 7.1.1
semver: 7.6.3
@@ -18557,13 +18537,6 @@ snapshots:
dependencies:
shikiji-core: 0.9.19
- side-channel@1.0.5:
- dependencies:
- call-bind: 1.0.7
- es-errors: 1.3.0
- get-intrinsic: 1.2.4
- object-inspect: 1.13.1
-
side-channel@1.0.6:
dependencies:
call-bind: 1.0.7
@@ -18626,7 +18599,7 @@ snapshots:
socks-proxy-agent@8.0.2:
dependencies:
agent-base: 7.1.0
- debug: 4.3.6(supports-color@9.4.0)
+ debug: 4.3.7(supports-color@9.4.0)
socks: 2.8.1
transitivePeerDependencies:
- supports-color
@@ -18941,7 +18914,7 @@ snapshots:
tabtab@3.0.2:
dependencies:
- debug: 4.3.6(supports-color@9.4.0)
+ debug: 4.3.7(supports-color@9.4.0)
es6-promisify: 6.1.1
inquirer: 6.5.2
minimist: 1.2.8
@@ -19290,7 +19263,7 @@ snapshots:
pathe: 1.1.2
ufo: 1.5.4
- unenv@1.9.0:
+ unenv@1.10.0:
dependencies:
consola: 3.2.3
defu: 6.1.4
@@ -19425,7 +19398,7 @@ snapshots:
utf-8-validate@5.0.10:
dependencies:
- node-gyp-build: 4.8.1
+ node-gyp-build: 4.8.2
util-deprecate@1.0.2: {}
@@ -19446,7 +19419,7 @@ snapshots:
valibot@0.33.3: {}
- valibot@0.39.0(typescript@5.4.5):
+ valibot@0.42.1(typescript@5.4.5):
optionalDependencies:
typescript: 5.4.5
@@ -19494,7 +19467,7 @@ snapshots:
vite-node@0.32.4(@types/node@20.14.11)(terser@5.31.3):
dependencies:
cac: 6.7.14
- debug: 4.3.6(supports-color@9.4.0)
+ debug: 4.3.7(supports-color@9.4.0)
mlly: 1.6.1
pathe: 1.1.2
picocolors: 1.0.1
@@ -19512,7 +19485,7 @@ snapshots:
vite-node@2.0.5(@types/node@20.14.11)(terser@5.31.3):
dependencies:
cac: 6.7.14
- debug: 4.3.6(supports-color@9.4.0)
+ debug: 4.3.7(supports-color@9.4.0)
pathe: 1.1.2
tinyrainbow: 1.2.0
vite: 5.3.5(@types/node@20.14.11)(terser@5.31.3)
@@ -19531,7 +19504,7 @@ snapshots:
'@microsoft/api-extractor': 7.43.0(@types/node@20.14.11)
'@rollup/pluginutils': 5.1.0(rollup@4.19.0)
'@vue/language-core': 1.8.27(typescript@5.4.5)
- debug: 4.3.6(supports-color@9.4.0)
+ debug: 4.3.7(supports-color@9.4.0)
kolorist: 1.8.0
magic-string: 0.30.11
typescript: 5.4.5
@@ -19547,7 +19520,7 @@ snapshots:
dependencies:
'@antfu/utils': 0.7.10
'@rollup/pluginutils': 5.1.0(rollup@4.19.0)
- debug: 4.3.6(supports-color@9.4.0)
+ debug: 4.3.7(supports-color@9.4.0)
error-stack-parser-es: 0.1.5
fs-extra: 11.2.0
open: 10.1.0
@@ -19569,7 +19542,7 @@ snapshots:
vite-tsconfig-paths@4.3.2(typescript@5.4.5)(vite@5.3.5(@types/node@20.14.11)(terser@5.31.3)):
dependencies:
- debug: 4.3.6(supports-color@9.4.0)
+ debug: 4.3.7(supports-color@9.4.0)
globrex: 0.1.2
tsconfck: 3.0.3(typescript@5.4.5)
optionalDependencies:
@@ -19608,7 +19581,7 @@ snapshots:
'@vitest/spy': 2.0.5
'@vitest/utils': 2.0.5
chai: 5.1.1
- debug: 4.3.6(supports-color@9.4.0)
+ debug: 4.3.7(supports-color@9.4.0)
execa: 8.0.1
magic-string: 0.30.11
pathe: 1.1.2
@@ -19650,7 +19623,7 @@ snapshots:
dependencies:
chalk: 4.1.2
commander: 9.5.0
- debug: 4.3.6(supports-color@9.4.0)
+ debug: 4.3.7(supports-color@9.4.0)
transitivePeerDependencies:
- supports-color