diff --git a/.changeset/curly-weeks-deliver.md b/.changeset/curly-weeks-deliver.md deleted file mode 100644 index a845151c..00000000 --- a/.changeset/curly-weeks-deliver.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/curvy-ties-sing.md b/.changeset/curvy-ties-sing.md deleted file mode 100644 index 449fd32f..00000000 --- a/.changeset/curvy-ties-sing.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -"@matthiesenxyz/create-astro-ghostcms": patch ---- - -Bump dependencies: - -- astro from to -- vite from to -- astro-seo from to -- sass from to diff --git a/.changeset/orange-singers-mix.md b/.changeset/orange-singers-mix.md deleted file mode 100644 index 69624abb..00000000 --- a/.changeset/orange-singers-mix.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -"@matthiesenxyz/astro-ghostcms-catppuccin": patch ---- - -Bump dependencies: - -- astro from to -- vite from to -- astro-seo from to -- sass from to diff --git a/.changeset/rare-experts-shake.md b/.changeset/rare-experts-shake.md deleted file mode 100644 index be3f484b..00000000 --- a/.changeset/rare-experts-shake.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -"@matthiesenxyz/astro-ghostcms": patch ---- - -Bump dependencies: - -- astro from to -- vite from to -- astro-seo from to -- sass from to diff --git a/.changeset/strange-singers-wink.md b/.changeset/strange-singers-wink.md deleted file mode 100644 index 157c1aa9..00000000 --- a/.changeset/strange-singers-wink.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -"@matthiesenxyz/astro-ghostcms-theme-default": patch ---- - -Bump dependencies: - -- astro from to -- vite from to -- astro-seo from to -- sass from to diff --git a/.changeset/three-hotels-boil.md b/.changeset/three-hotels-boil.md deleted file mode 100644 index b7c8c4f1..00000000 --- a/.changeset/three-hotels-boil.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -"@matthiesenxyz/astro-ghostcms-rendercontent": patch ---- - -Bump dependencies: - -- astro from to -- vite from to -- astro-seo from to -- sass from to diff --git a/.pnpm-store/v3/files/00/49b747cbd561ea1ea344e30317af8d33e6bb375e48bb4aae3fb1e43196d2ec067cb92dfb5493b11b6f20e44a70ce8686bacc572827a2c73a669513075ec5d9 b/.pnpm-store/v3/files/00/49b747cbd561ea1ea344e30317af8d33e6bb375e48bb4aae3fb1e43196d2ec067cb92dfb5493b11b6f20e44a70ce8686bacc572827a2c73a669513075ec5d9 new file mode 100644 index 00000000..df62bea3 --- /dev/null +++ b/.pnpm-store/v3/files/00/49b747cbd561ea1ea344e30317af8d33e6bb375e48bb4aae3fb1e43196d2ec067cb92dfb5493b11b6f20e44a70ce8686bacc572827a2c73a669513075ec5d9 @@ -0,0 +1,943 @@ +import limit from 'p-limit'; +import { getSafeTimers, isObject, createDefer, format, objDisplay, objectAttr, toArray, shuffle } from '@vitest/utils'; +import { processError } from '@vitest/utils/error'; +export { processError } from '@vitest/utils/error'; +import { j as createChainable, g as generateHash, c as calculateSuiteHash, s as someTasksAreOnly, i as interpretTaskModes, p as partitionSuiteChildren, h as hasTests, e as hasFailed } from './chunk-tasks.js'; +import { relative } from 'pathe'; + +const fnMap = /* @__PURE__ */ new WeakMap(); +const fixtureMap = /* @__PURE__ */ new WeakMap(); +const hooksMap = /* @__PURE__ */ new WeakMap(); +function setFn(key, fn) { + fnMap.set(key, fn); +} +function getFn(key) { + return fnMap.get(key); +} +function setFixture(key, fixture) { + fixtureMap.set(key, fixture); +} +function getFixture(key) { + return fixtureMap.get(key); +} +function setHooks(key, hooks) { + hooksMap.set(key, hooks); +} +function getHooks(key) { + return hooksMap.get(key); +} + +class PendingError extends Error { + constructor(message, task) { + super(message); + this.message = message; + this.taskId = task.id; + } + code = "VITEST_PENDING"; + taskId; +} + +const collectorContext = { + tasks: [], + currentSuite: null +}; +function collectTask(task) { + var _a; + (_a = collectorContext.currentSuite) == null ? void 0 : _a.tasks.push(task); +} +async function runWithSuite(suite, fn) { + const prev = collectorContext.currentSuite; + collectorContext.currentSuite = suite; + await fn(); + collectorContext.currentSuite = prev; +} +function withTimeout(fn, timeout, isHook = false) { + if (timeout <= 0 || timeout === Number.POSITIVE_INFINITY) + return fn; + const { setTimeout, clearTimeout } = getSafeTimers(); + return (...args) => { + return Promise.race([fn(...args), new Promise((resolve, reject) => { + var _a; + const timer = setTimeout(() => { + clearTimeout(timer); + reject(new Error(makeTimeoutMsg(isHook, timeout))); + }, timeout); + (_a = timer.unref) == null ? void 0 : _a.call(timer); + })]); + }; +} +function createTestContext(test, runner) { + var _a; + const context = function() { + throw new Error("done() callback is deprecated, use promise instead"); + }; + context.task = test; + context.skip = () => { + test.pending = true; + throw new PendingError("test is skipped; abort execution", test); + }; + context.onTestFailed = (fn) => { + test.onFailed || (test.onFailed = []); + test.onFailed.push(fn); + }; + context.onTestFinished = (fn) => { + test.onFinished || (test.onFinished = []); + test.onFinished.push(fn); + }; + return ((_a = runner.extendTaskContext) == null ? void 0 : _a.call(runner, context)) || context; +} +function makeTimeoutMsg(isHook, timeout) { + return `${isHook ? "Hook" : "Test"} timed out in ${timeout}ms. +If this is a long-running ${isHook ? "hook" : "test"}, pass a timeout value as the last argument or configure it globally with "${isHook ? "hookTimeout" : "testTimeout"}".`; +} + +function mergeContextFixtures(fixtures, context = {}) { + const fixtureOptionKeys = ["auto"]; + const fixtureArray = Object.entries(fixtures).map(([prop, value]) => { + const fixtureItem = { value }; + if (Array.isArray(value) && value.length >= 2 && isObject(value[1]) && Object.keys(value[1]).some((key) => fixtureOptionKeys.includes(key))) { + Object.assign(fixtureItem, value[1]); + fixtureItem.value = value[0]; + } + fixtureItem.prop = prop; + fixtureItem.isFn = typeof fixtureItem.value === "function"; + return fixtureItem; + }); + if (Array.isArray(context.fixtures)) + context.fixtures = context.fixtures.concat(fixtureArray); + else + context.fixtures = fixtureArray; + fixtureArray.forEach((fixture) => { + if (fixture.isFn) { + const usedProps = getUsedProps(fixture.value); + if (usedProps.length) + fixture.deps = context.fixtures.filter(({ prop }) => prop !== fixture.prop && usedProps.includes(prop)); + } + }); + return context; +} +const fixtureValueMaps = /* @__PURE__ */ new Map(); +const cleanupFnArrayMap = /* @__PURE__ */ new Map(); +async function callFixtureCleanup(context) { + const cleanupFnArray = cleanupFnArrayMap.get(context) ?? []; + for (const cleanup of cleanupFnArray.reverse()) + await cleanup(); + cleanupFnArrayMap.delete(context); +} +function withFixtures(fn, testContext) { + return (hookContext) => { + const context = hookContext || testContext; + if (!context) + return fn({}); + const fixtures = getFixture(context); + if (!(fixtures == null ? void 0 : fixtures.length)) + return fn(context); + const usedProps = getUsedProps(fn); + const hasAutoFixture = fixtures.some(({ auto }) => auto); + if (!usedProps.length && !hasAutoFixture) + return fn(context); + if (!fixtureValueMaps.get(context)) + fixtureValueMaps.set(context, /* @__PURE__ */ new Map()); + const fixtureValueMap = fixtureValueMaps.get(context); + if (!cleanupFnArrayMap.has(context)) + cleanupFnArrayMap.set(context, []); + const cleanupFnArray = cleanupFnArrayMap.get(context); + const usedFixtures = fixtures.filter(({ prop, auto }) => auto || usedProps.includes(prop)); + const pendingFixtures = resolveDeps(usedFixtures); + if (!pendingFixtures.length) + return fn(context); + async function resolveFixtures() { + for (const fixture of pendingFixtures) { + if (fixtureValueMap.has(fixture)) + continue; + const resolvedValue = fixture.isFn ? await resolveFixtureFunction(fixture.value, context, cleanupFnArray) : fixture.value; + context[fixture.prop] = resolvedValue; + fixtureValueMap.set(fixture, resolvedValue); + cleanupFnArray.unshift(() => { + fixtureValueMap.delete(fixture); + }); + } + } + return resolveFixtures().then(() => fn(context)); + }; +} +async function resolveFixtureFunction(fixtureFn, context, cleanupFnArray) { + const useFnArgPromise = createDefer(); + let isUseFnArgResolved = false; + const fixtureReturn = fixtureFn(context, async (useFnArg) => { + isUseFnArgResolved = true; + useFnArgPromise.resolve(useFnArg); + const useReturnPromise = createDefer(); + cleanupFnArray.push(async () => { + useReturnPromise.resolve(); + await fixtureReturn; + }); + await useReturnPromise; + }).catch((e) => { + if (!isUseFnArgResolved) { + useFnArgPromise.reject(e); + return; + } + throw e; + }); + return useFnArgPromise; +} +function resolveDeps(fixtures, depSet = /* @__PURE__ */ new Set(), pendingFixtures = []) { + fixtures.forEach((fixture) => { + if (pendingFixtures.includes(fixture)) + return; + if (!fixture.isFn || !fixture.deps) { + pendingFixtures.push(fixture); + return; + } + if (depSet.has(fixture)) + throw new Error(`Circular fixture dependency detected: ${fixture.prop} <- ${[...depSet].reverse().map((d) => d.prop).join(" <- ")}`); + depSet.add(fixture); + resolveDeps(fixture.deps, depSet, pendingFixtures); + pendingFixtures.push(fixture); + depSet.clear(); + }); + return pendingFixtures; +} +function getUsedProps(fn) { + const match = fn.toString().match(/[^(]*\(([^)]*)/); + if (!match) + return []; + const args = splitByComma(match[1]); + if (!args.length) + return []; + const first = args[0]; + if (!(first.startsWith("{") && first.endsWith("}"))) + throw new Error(`The first argument inside a fixture must use object destructuring pattern, e.g. ({ test } => {}). Instead, received "${first}".`); + const _first = first.slice(1, -1).replace(/\s/g, ""); + const props = splitByComma(_first).map((prop) => { + return prop.replace(/\:.*|\=.*/g, ""); + }); + const last = props.at(-1); + if (last && last.startsWith("...")) + throw new Error(`Rest parameters are not supported in fixtures, received "${last}".`); + return props; +} +function splitByComma(s) { + const result = []; + const stack = []; + let start = 0; + for (let i = 0; i < s.length; i++) { + if (s[i] === "{" || s[i] === "[") { + stack.push(s[i] === "{" ? "}" : "]"); + } else if (s[i] === stack[stack.length - 1]) { + stack.pop(); + } else if (!stack.length && s[i] === ",") { + const token = s.substring(start, i).trim(); + if (token) + result.push(token); + start = i + 1; + } + } + const lastToken = s.substring(start).trim(); + if (lastToken) + result.push(lastToken); + return result; +} + +let _test; +function setCurrentTest(test) { + _test = test; +} +function getCurrentTest() { + return _test; +} + +const suite = createSuite(); +const test = createTest( + function(name, optionsOrFn, optionsOrTest) { + if (getCurrentTest()) + throw new Error('Calling the test function inside another test function is not allowed. Please put it inside "describe" or "suite" so it can be properly collected.'); + getCurrentSuite().test.fn.call(this, formatName(name), optionsOrFn, optionsOrTest); + } +); +const describe = suite; +const it = test; +let runner; +let defaultSuite; +function getDefaultSuite() { + return defaultSuite; +} +function getRunner() { + return runner; +} +function clearCollectorContext(currentRunner) { + if (!defaultSuite) + defaultSuite = currentRunner.config.sequence.shuffle ? suite.shuffle("") : currentRunner.config.sequence.concurrent ? suite.concurrent("") : suite(""); + runner = currentRunner; + collectorContext.tasks.length = 0; + defaultSuite.clear(); + collectorContext.currentSuite = defaultSuite; +} +function getCurrentSuite() { + return collectorContext.currentSuite || defaultSuite; +} +function createSuiteHooks() { + return { + beforeAll: [], + afterAll: [], + beforeEach: [], + afterEach: [] + }; +} +function parseArguments(optionsOrFn, optionsOrTest) { + let options = {}; + let fn = () => { + }; + if (typeof optionsOrTest === "object") { + if (typeof optionsOrFn === "object") + throw new TypeError("Cannot use two objects as arguments. Please provide options and a function callback in that order."); + options = optionsOrTest; + } else if (typeof optionsOrTest === "number") { + options = { timeout: optionsOrTest }; + } else if (typeof optionsOrFn === "object") { + options = optionsOrFn; + } + if (typeof optionsOrFn === "function") { + if (typeof optionsOrTest === "function") + throw new TypeError("Cannot use two functions as arguments. Please use the second argument for options."); + fn = optionsOrFn; + } else if (typeof optionsOrTest === "function") { + fn = optionsOrTest; + } + return { + options, + handler: fn + }; +} +function createSuiteCollector(name, factory = () => { +}, mode, shuffle, each, suiteOptions) { + const tasks = []; + const factoryQueue = []; + let suite2; + initSuite(); + const task = function(name2 = "", options = {}) { + const task2 = { + id: "", + name: name2, + suite: void 0, + each: options.each, + fails: options.fails, + context: void 0, + type: "custom", + retry: options.retry ?? runner.config.retry, + repeats: options.repeats, + mode: options.only ? "only" : options.skip ? "skip" : options.todo ? "todo" : "run", + meta: options.meta ?? /* @__PURE__ */ Object.create(null) + }; + const handler = options.handler; + if (options.concurrent || !options.sequential && runner.config.sequence.concurrent) + task2.concurrent = true; + if (shuffle) + task2.shuffle = true; + const context = createTestContext(task2, runner); + Object.defineProperty(task2, "context", { + value: context, + enumerable: false + }); + setFixture(context, options.fixtures); + if (handler) { + setFn(task2, withTimeout( + withFixtures(handler, context), + (options == null ? void 0 : options.timeout) ?? runner.config.testTimeout + )); + } + tasks.push(task2); + return task2; + }; + const test2 = createTest(function(name2, optionsOrFn, optionsOrTest) { + let { options, handler } = parseArguments( + optionsOrFn, + optionsOrTest + ); + if (typeof suiteOptions === "object") + options = Object.assign({}, suiteOptions, options); + options.concurrent = this.concurrent || !this.sequential && (options == null ? void 0 : options.concurrent); + options.sequential = this.sequential || !this.concurrent && (options == null ? void 0 : options.sequential); + const test3 = task( + formatName(name2), + { ...this, ...options, handler } + ); + test3.type = "test"; + }); + const collector = { + type: "collector", + name, + mode, + options: suiteOptions, + test: test2, + tasks, + collect, + task, + clear, + on: addHook + }; + function addHook(name2, ...fn) { + getHooks(suite2)[name2].push(...fn); + } + function initSuite() { + if (typeof suiteOptions === "number") + suiteOptions = { timeout: suiteOptions }; + suite2 = { + id: "", + type: "suite", + name, + mode, + each, + shuffle, + tasks: [], + meta: /* @__PURE__ */ Object.create(null), + projectName: "" + }; + setHooks(suite2, createSuiteHooks()); + } + function clear() { + tasks.length = 0; + factoryQueue.length = 0; + initSuite(); + } + async function collect(file) { + factoryQueue.length = 0; + if (factory) + await runWithSuite(collector, () => factory(test2)); + const allChildren = []; + for (const i of [...factoryQueue, ...tasks]) + allChildren.push(i.type === "collector" ? await i.collect(file) : i); + suite2.file = file; + suite2.tasks = allChildren; + allChildren.forEach((task2) => { + task2.suite = suite2; + if (file) + task2.file = file; + }); + return suite2; + } + collectTask(collector); + return collector; +} +function createSuite() { + function suiteFn(name, factoryOrOptions, optionsOrFactory = {}) { + const mode = this.only ? "only" : this.skip ? "skip" : this.todo ? "todo" : "run"; + const currentSuite = getCurrentSuite(); + let { options, handler: factory } = parseArguments( + factoryOrOptions, + optionsOrFactory + ); + if (currentSuite == null ? void 0 : currentSuite.options) + options = { ...currentSuite.options, ...options }; + options.concurrent = this.concurrent || !this.sequential && (options == null ? void 0 : options.concurrent); + options.sequential = this.sequential || !this.concurrent && (options == null ? void 0 : options.sequential); + return createSuiteCollector(formatName(name), factory, mode, this.shuffle, this.each, options); + } + suiteFn.each = function(cases, ...args) { + const suite2 = this.withContext(); + this.setContext("each", true); + if (Array.isArray(cases) && args.length) + cases = formatTemplateString(cases, args); + return (name, optionsOrFn, fnOrOptions) => { + const _name = formatName(name); + const arrayOnlyCases = cases.every(Array.isArray); + const { options, handler } = parseArguments( + optionsOrFn, + fnOrOptions + ); + cases.forEach((i, idx) => { + const items = Array.isArray(i) ? i : [i]; + arrayOnlyCases ? suite2(formatTitle(_name, items, idx), options, () => handler(...items)) : suite2(formatTitle(_name, items, idx), options, () => handler(i)); + }); + this.setContext("each", void 0); + }; + }; + suiteFn.skipIf = (condition) => condition ? suite.skip : suite; + suiteFn.runIf = (condition) => condition ? suite : suite.skip; + return createChainable( + ["concurrent", "sequential", "shuffle", "skip", "only", "todo"], + suiteFn + ); +} +function createTaskCollector(fn, context) { + const taskFn = fn; + taskFn.each = function(cases, ...args) { + const test2 = this.withContext(); + this.setContext("each", true); + if (Array.isArray(cases) && args.length) + cases = formatTemplateString(cases, args); + return (name, optionsOrFn, fnOrOptions) => { + const _name = formatName(name); + const arrayOnlyCases = cases.every(Array.isArray); + const { options, handler } = parseArguments( + optionsOrFn, + fnOrOptions + ); + cases.forEach((i, idx) => { + const items = Array.isArray(i) ? i : [i]; + arrayOnlyCases ? test2(formatTitle(_name, items, idx), options, () => handler(...items)) : test2(formatTitle(_name, items, idx), options, () => handler(i)); + }); + this.setContext("each", void 0); + }; + }; + taskFn.skipIf = function(condition) { + return condition ? this.skip : this; + }; + taskFn.runIf = function(condition) { + return condition ? this : this.skip; + }; + taskFn.extend = function(fixtures) { + const _context = mergeContextFixtures(fixtures, context); + return createTest(function fn2(name, optionsOrFn, optionsOrTest) { + getCurrentSuite().test.fn.call(this, formatName(name), optionsOrFn, optionsOrTest); + }, _context); + }; + const _test = createChainable( + ["concurrent", "sequential", "skip", "only", "todo", "fails"], + taskFn + ); + if (context) + _test.mergeContext(context); + return _test; +} +function createTest(fn, context) { + return createTaskCollector(fn, context); +} +function formatName(name) { + return typeof name === "string" ? name : name instanceof Function ? name.name || "" : String(name); +} +function formatTitle(template, items, idx) { + if (template.includes("%#")) { + template = template.replace(/%%/g, "__vitest_escaped_%__").replace(/%#/g, `${idx}`).replace(/__vitest_escaped_%__/g, "%%"); + } + const count = template.split("%").length - 1; + let formatted = format(template, ...items.slice(0, count)); + if (isObject(items[0])) { + formatted = formatted.replace( + /\$([$\w_.]+)/g, + // https://github.com/chaijs/chai/pull/1490 + (_, key) => { + var _a, _b; + return objDisplay(objectAttr(items[0], key), { truncate: (_b = (_a = runner == null ? void 0 : runner.config) == null ? void 0 : _a.chaiConfig) == null ? void 0 : _b.truncateThreshold }); + } + ); + } + return formatted; +} +function formatTemplateString(cases, args) { + const header = cases.join("").trim().replace(/ /g, "").split("\n").map((i) => i.split("|"))[0]; + const res = []; + for (let i = 0; i < Math.floor(args.length / header.length); i++) { + const oneCase = {}; + for (let j = 0; j < header.length; j++) + oneCase[header[j]] = args[i * header.length + j]; + res.push(oneCase); + } + return res; +} + +async function runSetupFiles(config, runner) { + const files = toArray(config.setupFiles); + if (config.sequence.setupFiles === "parallel") { + await Promise.all( + files.map(async (fsPath) => { + await runner.importFile(fsPath, "setup"); + }) + ); + } else { + for (const fsPath of files) + await runner.importFile(fsPath, "setup"); + } +} + +const now$1 = Date.now; +async function collectTests(paths, runner) { + const files = []; + const config = runner.config; + for (const filepath of paths) { + const path = relative(config.root, filepath); + const file = { + id: generateHash(`${path}${config.name || ""}`), + name: path, + type: "suite", + mode: "run", + filepath, + tasks: [], + meta: /* @__PURE__ */ Object.create(null), + projectName: config.name + }; + clearCollectorContext(runner); + try { + const setupStart = now$1(); + await runSetupFiles(config, runner); + const collectStart = now$1(); + file.setupDuration = collectStart - setupStart; + await runner.importFile(filepath, "collect"); + const defaultTasks = await getDefaultSuite().collect(file); + setHooks(file, getHooks(defaultTasks)); + for (const c of [...defaultTasks.tasks, ...collectorContext.tasks]) { + if (c.type === "test") { + file.tasks.push(c); + } else if (c.type === "custom") { + file.tasks.push(c); + } else if (c.type === "suite") { + file.tasks.push(c); + } else if (c.type === "collector") { + const suite = await c.collect(file); + if (suite.name || suite.tasks.length) + file.tasks.push(suite); + } + } + file.collectDuration = now$1() - collectStart; + } catch (e) { + const error = processError(e); + file.result = { + state: "fail", + errors: [error] + }; + } + calculateSuiteHash(file); + const hasOnlyTasks = someTasksAreOnly(file); + interpretTaskModes(file, config.testNamePattern, hasOnlyTasks, false, config.allowOnly); + files.push(file); + } + return files; +} + +const now = Date.now; +function updateSuiteHookState(suite, name, state, runner) { + var _a; + if (!suite.result) + suite.result = { state: "run" }; + if (!((_a = suite.result) == null ? void 0 : _a.hooks)) + suite.result.hooks = {}; + const suiteHooks = suite.result.hooks; + if (suiteHooks) { + suiteHooks[name] = state; + updateTask(suite, runner); + } +} +function getSuiteHooks(suite, name, sequence) { + const hooks = getHooks(suite)[name]; + if (sequence === "stack" && (name === "afterAll" || name === "afterEach")) + return hooks.slice().reverse(); + return hooks; +} +async function callSuiteHook(suite, currentTask, name, runner, args) { + const sequence = runner.config.sequence.hooks; + const callbacks = []; + if (name === "beforeEach" && suite.suite) { + callbacks.push( + ...await callSuiteHook(suite.suite, currentTask, name, runner, args) + ); + } + updateSuiteHookState(currentTask, name, "run", runner); + const hooks = getSuiteHooks(suite, name, sequence); + if (sequence === "parallel") { + callbacks.push(...await Promise.all(hooks.map((fn) => fn(...args)))); + } else { + for (const hook of hooks) + callbacks.push(await hook(...args)); + } + updateSuiteHookState(currentTask, name, "pass", runner); + if (name === "afterEach" && suite.suite) { + callbacks.push( + ...await callSuiteHook(suite.suite, currentTask, name, runner, args) + ); + } + return callbacks; +} +const packs = /* @__PURE__ */ new Map(); +let updateTimer; +let previousUpdate; +function updateTask(task, runner) { + packs.set(task.id, [task.result, task.meta]); + const { clearTimeout, setTimeout } = getSafeTimers(); + clearTimeout(updateTimer); + updateTimer = setTimeout(() => { + previousUpdate = sendTasksUpdate(runner); + }, 10); +} +async function sendTasksUpdate(runner) { + var _a; + const { clearTimeout } = getSafeTimers(); + clearTimeout(updateTimer); + await previousUpdate; + if (packs.size) { + const taskPacks = Array.from(packs).map(([id, task]) => { + return [ + id, + task[0], + task[1] + ]; + }); + const p = (_a = runner.onTaskUpdate) == null ? void 0 : _a.call(runner, taskPacks); + packs.clear(); + return p; + } +} +async function callCleanupHooks(cleanups) { + await Promise.all(cleanups.map(async (fn) => { + if (typeof fn !== "function") + return; + await fn(); + })); +} +async function runTest(test, runner) { + var _a, _b, _c, _d, _e, _f, _g, _h; + await ((_a = runner.onBeforeRunTask) == null ? void 0 : _a.call(runner, test)); + if (test.mode !== "run") + return; + if (((_b = test.result) == null ? void 0 : _b.state) === "fail") { + updateTask(test, runner); + return; + } + const start = now(); + test.result = { + state: "run", + startTime: start, + retryCount: 0 + }; + updateTask(test, runner); + setCurrentTest(test); + const repeats = test.repeats ?? 0; + for (let repeatCount = 0; repeatCount <= repeats; repeatCount++) { + const retry = test.retry ?? 0; + for (let retryCount = 0; retryCount <= retry; retryCount++) { + let beforeEachCleanups = []; + try { + await ((_c = runner.onBeforeTryTask) == null ? void 0 : _c.call(runner, test, { retry: retryCount, repeats: repeatCount })); + test.result.repeatCount = repeatCount; + beforeEachCleanups = await callSuiteHook(test.suite, test, "beforeEach", runner, [test.context, test.suite]); + if (runner.runTask) { + await runner.runTask(test); + } else { + const fn = getFn(test); + if (!fn) + throw new Error("Test function is not found. Did you add it using `setFn`?"); + await fn(); + } + if (test.promises) { + const result = await Promise.allSettled(test.promises); + const errors = result.map((r) => r.status === "rejected" ? r.reason : void 0).filter(Boolean); + if (errors.length) + throw errors; + } + await ((_d = runner.onAfterTryTask) == null ? void 0 : _d.call(runner, test, { retry: retryCount, repeats: repeatCount })); + if (test.result.state !== "fail") { + if (!test.repeats) + test.result.state = "pass"; + else if (test.repeats && retry === retryCount) + test.result.state = "pass"; + } + } catch (e) { + failTask(test.result, e, runner.config.diffOptions); + } + if (test.pending || ((_e = test.result) == null ? void 0 : _e.state) === "skip") { + test.mode = "skip"; + test.result = { state: "skip" }; + updateTask(test, runner); + setCurrentTest(void 0); + return; + } + try { + await callSuiteHook(test.suite, test, "afterEach", runner, [test.context, test.suite]); + await callCleanupHooks(beforeEachCleanups); + await callFixtureCleanup(test.context); + } catch (e) { + failTask(test.result, e, runner.config.diffOptions); + } + if (test.result.state === "pass") + break; + if (retryCount < retry) { + test.result.state = "run"; + test.result.retryCount = (test.result.retryCount ?? 0) + 1; + } + updateTask(test, runner); + } + } + try { + await Promise.all(((_f = test.onFinished) == null ? void 0 : _f.map((fn) => fn(test.result))) || []); + } catch (e) { + failTask(test.result, e, runner.config.diffOptions); + } + if (test.result.state === "fail") { + try { + await Promise.all(((_g = test.onFailed) == null ? void 0 : _g.map((fn) => fn(test.result))) || []); + } catch (e) { + failTask(test.result, e, runner.config.diffOptions); + } + } + if (test.fails) { + if (test.result.state === "pass") { + const error = processError(new Error("Expect test to fail")); + test.result.state = "fail"; + test.result.errors = [error]; + } else { + test.result.state = "pass"; + test.result.errors = void 0; + } + } + setCurrentTest(void 0); + test.result.duration = now() - start; + await ((_h = runner.onAfterRunTask) == null ? void 0 : _h.call(runner, test)); + updateTask(test, runner); +} +function failTask(result, err, diffOptions) { + if (err instanceof PendingError) { + result.state = "skip"; + return; + } + result.state = "fail"; + const errors = Array.isArray(err) ? err : [err]; + for (const e of errors) { + const error = processError(e, diffOptions); + result.errors ?? (result.errors = []); + result.errors.push(error); + } +} +function markTasksAsSkipped(suite, runner) { + suite.tasks.forEach((t) => { + t.mode = "skip"; + t.result = { ...t.result, state: "skip" }; + updateTask(t, runner); + if (t.type === "suite") + markTasksAsSkipped(t, runner); + }); +} +async function runSuite(suite, runner) { + var _a, _b, _c, _d; + await ((_a = runner.onBeforeRunSuite) == null ? void 0 : _a.call(runner, suite)); + if (((_b = suite.result) == null ? void 0 : _b.state) === "fail") { + markTasksAsSkipped(suite, runner); + updateTask(suite, runner); + return; + } + const start = now(); + suite.result = { + state: "run", + startTime: start + }; + updateTask(suite, runner); + let beforeAllCleanups = []; + if (suite.mode === "skip") { + suite.result.state = "skip"; + } else if (suite.mode === "todo") { + suite.result.state = "todo"; + } else { + try { + beforeAllCleanups = await callSuiteHook(suite, suite, "beforeAll", runner, [suite]); + if (runner.runSuite) { + await runner.runSuite(suite); + } else { + for (let tasksGroup of partitionSuiteChildren(suite)) { + if (tasksGroup[0].concurrent === true) { + const mutex = limit(runner.config.maxConcurrency); + await Promise.all(tasksGroup.map((c) => mutex(() => runSuiteChild(c, runner)))); + } else { + const { sequence } = runner.config; + if (sequence.shuffle || suite.shuffle) { + const suites = tasksGroup.filter((group) => group.type === "suite"); + const tests = tasksGroup.filter((group) => group.type === "test"); + const groups = shuffle([suites, tests], sequence.seed); + tasksGroup = groups.flatMap((group) => shuffle(group, sequence.seed)); + } + for (const c of tasksGroup) + await runSuiteChild(c, runner); + } + } + } + } catch (e) { + failTask(suite.result, e, runner.config.diffOptions); + } + try { + await callSuiteHook(suite, suite, "afterAll", runner, [suite]); + await callCleanupHooks(beforeAllCleanups); + } catch (e) { + failTask(suite.result, e, runner.config.diffOptions); + } + if (suite.mode === "run") { + if (!runner.config.passWithNoTests && !hasTests(suite)) { + suite.result.state = "fail"; + if (!((_c = suite.result.errors) == null ? void 0 : _c.length)) { + const error = processError(new Error(`No test found in suite ${suite.name}`)); + suite.result.errors = [error]; + } + } else if (hasFailed(suite)) { + suite.result.state = "fail"; + } else { + suite.result.state = "pass"; + } + } + updateTask(suite, runner); + suite.result.duration = now() - start; + await ((_d = runner.onAfterRunSuite) == null ? void 0 : _d.call(runner, suite)); + } +} +async function runSuiteChild(c, runner) { + if (c.type === "test" || c.type === "custom") + return runTest(c, runner); + else if (c.type === "suite") + return runSuite(c, runner); +} +async function runFiles(files, runner) { + var _a, _b; + for (const file of files) { + if (!file.tasks.length && !runner.config.passWithNoTests) { + if (!((_b = (_a = file.result) == null ? void 0 : _a.errors) == null ? void 0 : _b.length)) { + const error = processError(new Error(`No test suite found in file ${file.filepath}`)); + file.result = { + state: "fail", + errors: [error] + }; + } + } + await runSuite(file, runner); + } +} +async function startTests(paths, runner) { + var _a, _b, _c, _d; + await ((_a = runner.onBeforeCollect) == null ? void 0 : _a.call(runner, paths)); + const files = await collectTests(paths, runner); + (_b = runner.onCollected) == null ? void 0 : _b.call(runner, files); + await ((_c = runner.onBeforeRunFiles) == null ? void 0 : _c.call(runner, files)); + await runFiles(files, runner); + await ((_d = runner.onAfterRunFiles) == null ? void 0 : _d.call(runner, files)); + await sendTasksUpdate(runner); + return files; +} + +function getDefaultHookTimeout() { + return getRunner().config.hookTimeout; +} +function beforeAll(fn, timeout) { + return getCurrentSuite().on("beforeAll", withTimeout(fn, timeout ?? getDefaultHookTimeout(), true)); +} +function afterAll(fn, timeout) { + return getCurrentSuite().on("afterAll", withTimeout(fn, timeout ?? getDefaultHookTimeout(), true)); +} +function beforeEach(fn, timeout) { + return getCurrentSuite().on("beforeEach", withTimeout(withFixtures(fn), timeout ?? getDefaultHookTimeout(), true)); +} +function afterEach(fn, timeout) { + return getCurrentSuite().on("afterEach", withTimeout(withFixtures(fn), timeout ?? getDefaultHookTimeout(), true)); +} +const onTestFailed = createTestHook("onTestFailed", (test, handler) => { + test.onFailed || (test.onFailed = []); + test.onFailed.push(handler); +}); +const onTestFinished = createTestHook("onTestFinished", (test, handler) => { + test.onFinished || (test.onFinished = []); + test.onFinished.push(handler); +}); +function createTestHook(name, handler) { + return (fn) => { + const current = getCurrentTest(); + if (!current) + throw new Error(`Hook ${name}() can only be called inside a test`); + return handler(current, fn); + }; +} + +export { afterAll, afterEach, beforeAll, beforeEach, createTaskCollector, describe, getCurrentSuite, getCurrentTest, getFn, getHooks, it, onTestFailed, onTestFinished, setFn, setHooks, startTests, suite, test, updateTask }; diff --git a/.pnpm-store/v3/files/01/7872a06cf8c816a7597dc04c632d33e0f7abd980d148881fe4950f1a0885af1ec2d963a1208851f1b3481a955e337d8c7e1e996811976c01bf09777565faa6 b/.pnpm-store/v3/files/01/7872a06cf8c816a7597dc04c632d33e0f7abd980d148881fe4950f1a0885af1ec2d963a1208851f1b3481a955e337d8c7e1e996811976c01bf09777565faa6 new file mode 100644 index 00000000..5f8d891e --- /dev/null +++ b/.pnpm-store/v3/files/01/7872a06cf8c816a7597dc04c632d33e0f7abd980d148881fe4950f1a0885af1ec2d963a1208851f1b3481a955e337d8c7e1e996811976c01bf09777565faa6 @@ -0,0 +1,22 @@ +{ + "name": "@rollup/rollup-linux-x64-gnu", + "version": "4.12.0", + "os": [ + "linux" + ], + "cpu": [ + "x64" + ], + "files": [ + "rollup.linux-x64-gnu.node" + ], + "description": "Native bindings for Rollup", + "author": "Lukas Taegert-Atkinson", + "homepage": "https://rollupjs.org/", + "license": "MIT", + "repository": "rollup/rollup", + "libc": [ + "glibc" + ], + "main": "./rollup.linux-x64-gnu.node" +} \ No newline at end of file diff --git a/.pnpm-store/v3/files/01/bb938b55acb0779f0fa49545abc946fe900cc7be9d3591974290f52cdb5d76aed3ee5f12c795924b899943f39a49a2c709cc52d6e94ddc2011f87f83576da0 b/.pnpm-store/v3/files/01/bb938b55acb0779f0fa49545abc946fe900cc7be9d3591974290f52cdb5d76aed3ee5f12c795924b899943f39a49a2c709cc52d6e94ddc2011f87f83576da0 new file mode 100644 index 00000000..e6393190 --- /dev/null +++ b/.pnpm-store/v3/files/01/bb938b55acb0779f0fa49545abc946fe900cc7be9d3591974290f52cdb5d76aed3ee5f12c795924b899943f39a49a2c709cc52d6e94ddc2011f87f83576da0 @@ -0,0 +1,33 @@ +import { VitestRunner } from './types.js'; +export { CancelReason, VitestRunnerConfig, VitestRunnerConstructor, VitestRunnerImportSource } from './types.js'; +import { T as Task, F as File, d as SuiteAPI, e as TestAPI, f as SuiteCollector, g as CustomAPI, h as SuiteHooks, O as OnTestFailedHandler, i as OnTestFinishedHandler, a as Test, C as Custom, S as Suite } from './tasks-_kyNRBhz.js'; +export { D as DoneCallback, E as ExtendedContext, t as Fixture, s as FixtureFn, r as FixtureOptions, u as Fixtures, v as HookCleanupCallback, H as HookListener, I as InferFixturesTypes, R as RunMode, y as RuntimeContext, B as SequenceHooks, G as SequenceSetupFiles, x as SuiteFactory, k as TaskBase, A as TaskContext, w as TaskCustomOptions, m as TaskMeta, l as TaskPopulated, n as TaskResult, o as TaskResultPack, j as TaskState, z as TestContext, p as TestFunction, q as TestOptions, U as Use } from './tasks-_kyNRBhz.js'; +import { Awaitable } from '@vitest/utils'; +export { processError } from '@vitest/utils/error'; +import '@vitest/utils/diff'; + +declare function updateTask(task: Task, runner: VitestRunner): void; +declare function startTests(paths: string[], runner: VitestRunner): Promise; + +declare const suite: SuiteAPI; +declare const test: TestAPI; +declare const describe: SuiteAPI; +declare const it: TestAPI; +declare function getCurrentSuite(): SuiteCollector; +declare function createTaskCollector(fn: (...args: any[]) => any, context?: Record): CustomAPI; + +declare function beforeAll(fn: SuiteHooks['beforeAll'][0], timeout?: number): void; +declare function afterAll(fn: SuiteHooks['afterAll'][0], timeout?: number): void; +declare function beforeEach(fn: SuiteHooks['beforeEach'][0], timeout?: number): void; +declare function afterEach(fn: SuiteHooks['afterEach'][0], timeout?: number): void; +declare const onTestFailed: (fn: OnTestFailedHandler) => void; +declare const onTestFinished: (fn: OnTestFinishedHandler) => void; + +declare function setFn(key: Test | Custom, fn: (() => Awaitable)): void; +declare function getFn(key: Task): (() => Awaitable); +declare function setHooks(key: Suite, hooks: SuiteHooks): void; +declare function getHooks(key: Suite): SuiteHooks; + +declare function getCurrentTest(): T; + +export { Custom, CustomAPI, File, OnTestFailedHandler, OnTestFinishedHandler, Suite, SuiteAPI, SuiteCollector, SuiteHooks, Task, Test, TestAPI, VitestRunner, afterAll, afterEach, beforeAll, beforeEach, createTaskCollector, describe, getCurrentSuite, getCurrentTest, getFn, getHooks, it, onTestFailed, onTestFinished, setFn, setHooks, startTests, suite, test, updateTask }; diff --git a/.pnpm-store/v3/files/02/4094d13859ba732f6e50e93ca823222d36e54c51f15ecc67f83f1309801a98c8ba32d55765faac66069b11360f81496c0cb4fe28dd44e1cc59ad8cffa25533-index.json b/.pnpm-store/v3/files/02/4094d13859ba732f6e50e93ca823222d36e54c51f15ecc67f83f1309801a98c8ba32d55765faac66069b11360f81496c0cb4fe28dd44e1cc59ad8cffa25533-index.json new file mode 100644 index 00000000..48411a57 --- /dev/null +++ b/.pnpm-store/v3/files/02/4094d13859ba732f6e50e93ca823222d36e54c51f15ecc67f83f1309801a98c8ba32d55765faac66069b11360f81496c0cb4fe28dd44e1cc59ad8cffa25533-index.json @@ -0,0 +1 @@ +{"files":{"dist/index.js":{"checkedAt":1708389320583,"integrity":"sha512-0kfv/XwgTPS6RyTL5LIFATgQuRD5jYMCdTx7E8nZXsVKlDXgjxXiVp+GGLNrSv7vYnplmk9k50iJzI4avpZ8kQ==","mode":420,"size":3831},"README.md":{"checkedAt":1708389320583,"integrity":"sha512-YgFkqdxPqbLCzh8GS6hPgLDlcZeiqSNZJZdjRo6aUxmM1uuqzOEPC/KDWSVXjvnKbnab3ZQqQqLh7h6MAW2xcg==","mode":420,"size":63},"dist/index.d.ts":{"checkedAt":1708389320584,"integrity":"sha512-ipbREd2PW+AxybhnhFXhjmAZPHKt+uwEIUa4W5ZW82fGWmyxgIbtQ5/an5YTisOCtnoBX3YFi6+4LM67dSP81Q==","mode":420,"size":12089},"LICENSE":{"checkedAt":1708389320584,"integrity":"sha512-UVFpfPJvKX+pFZi9kICLGeKXa7aMp5oeTmTQJBxCYHGrecls8D80KYY+DoSbK71Xw3IjeSGb/B31WXPYaplODw==","mode":420,"size":1177},"package.json":{"checkedAt":1708389320584,"integrity":"sha512-g08RLzXH6/OD46xcTcFsCjtVvg8qj/77USRH+M/C534iJ02tc0ZJt52k166NxGxKNmhbG5t327DsX/7u3bshhQ==","mode":420,"size":909}}} \ No newline at end of file diff --git a/.pnpm-store/v3/files/08/39e77ef8a237912d04ea59b3733c22a0f19b49c6e9915b1e348576ab7a1b38f4cf5f9d2ca4f31f468c447723f0034fea600943fa7e5d4e73224ac1fc4262e8 b/.pnpm-store/v3/files/08/39e77ef8a237912d04ea59b3733c22a0f19b49c6e9915b1e348576ab7a1b38f4cf5f9d2ca4f31f468c447723f0034fea600943fa7e5d4e73224ac1fc4262e8 new file mode 100644 index 00000000..8a630b8b --- /dev/null +++ b/.pnpm-store/v3/files/08/39e77ef8a237912d04ea59b3733c22a0f19b49c6e9915b1e348576ab7a1b38f4cf5f9d2ca4f31f468c447723f0034fea600943fa7e5d4e73224ac1fc4262e8 @@ -0,0 +1,30 @@ +export { c as createForksRpcOptions, a as createThreadsRpcOptions, u as unwrapForksConfig } from './vendor/utils.GbToHGHI.js'; +export { p as provideWorkerState } from './vendor/global.CkGT_TMy.js'; +export { run as runVitestWorker } from './worker.js'; +export { r as runVmTests } from './vendor/vm.UmCkcXp-.js'; +export { r as runBaseTests } from './vendor/base.RpormaJz.js'; +import '@vitest/utils'; +import 'node:url'; +import 'tinypool'; +import 'vite-node/client'; +import 'pathe'; +import './vendor/index.GVFv9dZ0.js'; +import 'node:console'; +import './vendor/base.knFzp7G3.js'; +import 'node:module'; +import './vendor/rpc.joBhAkyK.js'; +import './vendor/index.8bPxjt7g.js'; +import 'node:vm'; +import './chunks/runtime-console.Iloo9fIt.js'; +import 'node:stream'; +import 'node:path'; +import './vendor/date.Ns1pGd_X.js'; +import './vendor/execute.aFSzc0Da.js'; +import 'vite-node/utils'; +import '@vitest/utils/error'; +import './path.js'; +import 'node:fs'; +import 'vite-node/constants'; +import './vendor/index.ir9i0ywP.js'; +import 'std-env'; +import '@vitest/runner/utils'; diff --git a/.pnpm-store/v3/files/08/c88a7aa9128e6e5a964956f516fb6c5ce5e15f82eefeb0e05c214e746651cbbdcf571485a70d95d0ed81ab408a20fcb6b6fdde25691cd16dfbd7d919b9708f b/.pnpm-store/v3/files/08/c88a7aa9128e6e5a964956f516fb6c5ce5e15f82eefeb0e05c214e746651cbbdcf571485a70d95d0ed81ab408a20fcb6b6fdde25691cd16dfbd7d919b9708f new file mode 100644 index 00000000..bbf8518f --- /dev/null +++ b/.pnpm-store/v3/files/08/c88a7aa9128e6e5a964956f516fb6c5ce5e15f82eefeb0e05c214e746651cbbdcf571485a70d95d0ed81ab408a20fcb6b6fdde25691cd16dfbd7d919b9708f @@ -0,0 +1,16 @@ +export { createTaskCollector, getCurrentSuite, getFn, getHooks, setFn, setHooks } from '@vitest/runner'; +export { createChainable } from '@vitest/runner/utils'; +export { g as getBenchFn, a as getBenchOptions } from './suite-xGC-mxBC.js'; +import './reporters-QGe8gs4b.js'; +import 'vite'; +import 'vite-node'; +import '@vitest/snapshot'; +import '@vitest/expect'; +import '@vitest/utils'; +import 'tinybench'; +import 'vite-node/client'; +import '@vitest/snapshot/manager'; +import 'vite-node/server'; +import 'node:worker_threads'; +import 'node:fs'; +import 'chai'; diff --git a/.pnpm-store/v3/files/08/dc5aa928f4150a620e44ea131da297bc2ce39d78494438771444fc1b52c95eb149cf6e7da1195ea491e3d0d30926c5e1f3938ba3942a21bdcb20292dcc6f2b b/.pnpm-store/v3/files/08/dc5aa928f4150a620e44ea131da297bc2ce39d78494438771444fc1b52c95eb149cf6e7da1195ea491e3d0d30926c5e1f3938ba3942a21bdcb20292dcc6f2b new file mode 100644 index 00000000..3cdacc3a --- /dev/null +++ b/.pnpm-store/v3/files/08/dc5aa928f4150a620e44ea131da297bc2ce39d78494438771444fc1b52c95eb149cf6e7da1195ea491e3d0d30926c5e1f3938ba3942a21bdcb20292dcc6f2b @@ -0,0 +1,43 @@ +import { readUInt16LE } from "./utils.js"; +const TYPE_ICON = 1; +const SIZE_HEADER = 2 + 2 + 2; +const SIZE_IMAGE_ENTRY = 1 + 1 + 1 + 1 + 2 + 2 + 4 + 4; +function getSizeFromOffset(input, offset) { + const value = input[offset]; + return value === 0 ? 256 : value; +} +function getImageSize(input, imageIndex) { + const offset = SIZE_HEADER + imageIndex * SIZE_IMAGE_ENTRY; + return { + height: getSizeFromOffset(input, offset + 1), + width: getSizeFromOffset(input, offset) + }; +} +const ICO = { + validate(input) { + const reserved = readUInt16LE(input, 0); + const imageCount = readUInt16LE(input, 4); + if (reserved !== 0 || imageCount === 0) + return false; + const imageType = readUInt16LE(input, 2); + return imageType === TYPE_ICON; + }, + calculate(input) { + const nbImages = readUInt16LE(input, 4); + const imageSize = getImageSize(input, 0); + if (nbImages === 1) + return imageSize; + const imgs = [imageSize]; + for (let imageIndex = 1; imageIndex < nbImages; imageIndex += 1) { + imgs.push(getImageSize(input, imageIndex)); + } + return { + height: imageSize.height, + images: imgs, + width: imageSize.width + }; + } +}; +export { + ICO +}; diff --git a/.pnpm-store/v3/files/0f/09181d1bee2002b6a933b8aac37a6e4895ab1e63d72bc8b0f296d0252fcfa691354b85f8613694fea32b60ce1467d0db928e3b186e19c666f0a302e21848bb b/.pnpm-store/v3/files/0f/09181d1bee2002b6a933b8aac37a6e4895ab1e63d72bc8b0f296d0252fcfa691354b85f8613694fea32b60ce1467d0db928e3b186e19c666f0a302e21848bb new file mode 100644 index 00000000..3cef924e --- /dev/null +++ b/.pnpm-store/v3/files/0f/09181d1bee2002b6a933b8aac37a6e4895ab1e63d72bc8b0f296d0252fcfa691354b85f8613694fea32b60ce1467d0db928e3b186e19c666f0a302e21848bb @@ -0,0 +1,56 @@ +import { extname } from "node:path"; +function extendManualChunks(outputOptions, hooks) { + const manualChunks = outputOptions.manualChunks; + outputOptions.manualChunks = function(id, meta) { + if (hooks.before) { + let value = hooks.before(id, meta); + if (value) { + return value; + } + } + if (typeof manualChunks == "object") { + if (id in manualChunks) { + let value = manualChunks[id]; + return value[0]; + } + } else if (typeof manualChunks === "function") { + const outid = manualChunks.call(this, id, meta); + if (outid) { + return outid; + } + } + if (hooks.after) { + return hooks.after(id, meta) || null; + } + return null; + }; +} +const ASTRO_PAGE_EXTENSION_POST_PATTERN = "@_@"; +function getVirtualModulePageNameFromPath(virtualModulePrefix, path) { + const extension = extname(path); + return `${virtualModulePrefix}${path.replace( + extension, + extension.replace(".", ASTRO_PAGE_EXTENSION_POST_PATTERN) + )}`; +} +function getPathFromVirtualModulePageName(virtualModulePrefix, id) { + const pageName = id.slice(virtualModulePrefix.length); + return pageName.replace(ASTRO_PAGE_EXTENSION_POST_PATTERN, "."); +} +function shouldInlineAsset(assetContent, assetPath, assetsInlineLimit) { + if (typeof assetsInlineLimit === "number") { + return Buffer.byteLength(assetContent) < assetsInlineLimit; + } + const result = assetsInlineLimit(assetPath, Buffer.from(assetContent)); + if (result != null) { + return result; + } + return Buffer.byteLength(assetContent) < 4096; +} +export { + ASTRO_PAGE_EXTENSION_POST_PATTERN, + extendManualChunks, + getPathFromVirtualModulePageName, + getVirtualModulePageNameFromPath, + shouldInlineAsset +}; diff --git a/.pnpm-store/v3/files/0f/fa220d5070ef95cc9e30179deff87de0a4084c1c6ebd925356e302109c7c8e41ab75683878e2f3fc023c07d490321ea212799d2677f5f37133774d67a38138-index.json b/.pnpm-store/v3/files/0f/fa220d5070ef95cc9e30179deff87de0a4084c1c6ebd925356e302109c7c8e41ab75683878e2f3fc023c07d490321ea212799d2677f5f37133774d67a38138-index.json new file mode 100644 index 00000000..caec699a --- /dev/null +++ b/.pnpm-store/v3/files/0f/fa220d5070ef95cc9e30179deff87de0a4084c1c6ebd925356e302109c7c8e41ab75683878e2f3fc023c07d490321ea212799d2677f5f37133774d67a38138-index.json @@ -0,0 +1 @@ +{"files":{"dist/chunk-hmr.cjs":{"checkedAt":1708389320846,"integrity":"sha512-4YGXYHkz2mErO5YrMA9/d7vx+M+QGww5PGoUshRY6qhSrfhXxz0vTBqtQuVPLwgYnN0iFWr1/hzRylEuDYt+3g==","mode":420,"size":8015},"dist/cli.cjs":{"checkedAt":1708389320847,"integrity":"sha512-U+o0uaKpqaZxIYC8nyELBBeNi1b8jDDAFJMUrJCom4V3awFtYgZbM5xow4iZXMvV8Kpdz0TNwsOSuNgg7h10IA==","mode":420,"size":4724},"dist/client.cjs":{"checkedAt":1708389320847,"integrity":"sha512-10YrbuYgrq3bpxphpgUxxQe1tftp4j8SzqRLEB604+aOG4wgaAvA8h37XfaxYSZ5HqxBTKOF1ioMJTyVdHNZwg==","mode":420,"size":14640},"dist/constants.cjs":{"checkedAt":1708389320847,"integrity":"sha512-SheXa/EbBZkGj04GYNLDyphYnIhOqZZSHVblgRyqrDBpJvtIYp/LKpocB0rsSGpfc8Kif80c7lp+mtHr0k2wpg==","mode":420,"size":621},"dist/hmr.cjs":{"checkedAt":1708389320847,"integrity":"sha512-7zq67d3N5rK/jlqDtI+rasw+q8WhFUVNDQL7FGTk4Wz+qMZY4eKWeYv+djHde/cOSd5Q1Enm+f/N7jcokV+www==","mode":420,"size":533},"dist/index.cjs":{"checkedAt":1708389320847,"integrity":"sha512-deBZmuLJzOYKea4VWud3vCmIPjtw1tR58QIgPRyZb6ByoMfi8zKY6CXn6h0EFSMVMnsk2/P3IvSvydjYPyHAbA==","mode":420,"size":15},"dist/server.cjs":{"checkedAt":1708389320847,"integrity":"sha512-P+hKrKb5bh6ZdK+p6K1m4c6nWbkxDbt2HSPSx9Y82i7NrUqx95YqAfHkt9tg5f0+R7kZ/qpCNvWlsk6WtyJmTg==","mode":420,"size":15870},"dist/source-map.cjs":{"checkedAt":1708389320848,"integrity":"sha512-P882rJ5shCEVUKNwm3K2Ga7/DDxffWKxSOUjmdULPR/HEY1zisJM/sAD9OvOBe+psfBz95kQYiIX2yaxR7St6w==","mode":420,"size":30807},"dist/types.cjs":{"checkedAt":1708389320848,"integrity":"sha512-deBZmuLJzOYKea4VWud3vCmIPjtw1tR58QIgPRyZb6ByoMfi8zKY6CXn6h0EFSMVMnsk2/P3IvSvydjYPyHAbA==","mode":420,"size":15},"dist/utils.cjs":{"checkedAt":1708389320848,"integrity":"sha512-/1I7694ajp7A6ozBvvlqX6Hkb3fkhw/eIBH1uiBVWcQvQVFZRzp8j7b0nbkYmI4kzYYxon2WIdTcY5PqWUqozg==","mode":420,"size":6388},"README.md":{"checkedAt":1708389320848,"integrity":"sha512-k5of8kdzbpq9PLLvTV7kcJN7VIdqeXUELi4GNWk85G9v7ww8aJ3Gmjp4/GLKZIvAz2yA51N4EURfbJigbrn+CA==","mode":420,"size":5218},"dist/chunk-hmr.mjs":{"checkedAt":1708389320848,"integrity":"sha512-SQutOP7J65ir/gLz1RT61PENiCpLXQvsRkhjXvmDOVHU757CCTgl9SpaP7f9pP8iJ+Gxv/ZtGshgCoFRcH9t0A==","mode":420,"size":7862},"dist/cli.mjs":{"checkedAt":1708389320848,"integrity":"sha512-0Mv0PJnCe2X/dTe9r4kvf2XSlfoy/RBexv3PvVqh9oG2q0r97eborm6zrOtNzLYzAd61qkFhA6FgvIie99DyrQ==","mode":420,"size":4702},"dist/client.mjs":{"checkedAt":1708389320849,"integrity":"sha512-BcLj+S4G1I+EPWO7nAnlte6gBolXbK/jR2thhNcRiy49aVcYZN0v9mcbptwedpIzVvZtf5CunEKW/kw+UCXdUA==","mode":420,"size":14579},"dist/constants.mjs":{"checkedAt":1708389320849,"integrity":"sha512-EkhUIh6RESNj+juioKuJiPhOUqoTL7B7p62g7z+lvgacDs1FLY1D8+zpqinFGpWqd0vP11bvfVONcSQ3xbWiig==","mode":420,"size":541},"dist/hmr.mjs":{"checkedAt":1708389320849,"integrity":"sha512-+CXRNbktbqRPw1pchofJFM5aa0rdB3IXtzDrFo2rgkPMNovEPlSnpzb1ZN5jPjDUFruw0McTkdIZUTZX8UmFcg==","mode":420,"size":332},"dist/index.mjs":{"checkedAt":1708389320849,"integrity":"sha512-vmiIOMqGhuXJBom/KrWFzvETfJmbSMcLkvZ6XDTcFWl7XRHJgu1tcb4eHn97TgcziEqpfD96M5qO0DV3z3S+CQ==","mode":420,"size":1},"dist/server.mjs":{"checkedAt":1708389320849,"integrity":"sha512-S1SA7qt9dDSIPmZe7+XDjc62IyqJJKf/YtsItHQluLmE7LItILQJLVllbo51nJhnYTp0kSeMdISBn8lMJ+/9zQ==","mode":420,"size":15750},"dist/source-map.mjs":{"checkedAt":1708389320849,"integrity":"sha512-rBJd+JCkwETyOoTrXZfPB9rAle0QR94x9sVBYJej6uRFrlBLNs+W9frG51iVoAO2UaYd2LRL8fbRW62LnSp0Sg==","mode":420,"size":30733},"dist/types.mjs":{"checkedAt":1708389320849,"integrity":"sha512-vmiIOMqGhuXJBom/KrWFzvETfJmbSMcLkvZ6XDTcFWl7XRHJgu1tcb4eHn97TgcziEqpfD96M5qO0DV3z3S+CQ==","mode":420,"size":1},"dist/utils.mjs":{"checkedAt":1708389320850,"integrity":"sha512-uY4X6J8DYEEIRAbfUup8j5cmi9cMcBHV4FJaeRkp6f2rcG5ilH/CkRAsSDMPWzptAR8rVNSUOvHTaP2Neiq44w==","mode":420,"size":5951},"vite-node.mjs":{"checkedAt":1708389320850,"integrity":"sha512-2NAKfBynW5zMwc4j8alXIBMIiMalMjpJdrajbOi9CU92P9ClYCYqAn/J+LQvWG4IYiRx73+12lEcwsdO2ZOfJQ==","mode":493,"size":45},"dist/cli.d.ts":{"checkedAt":1708389320850,"integrity":"sha512-FYRaWLl0qQFgDzD+qM9zQNoyIydpzGswa6H1nF2aZfztTLd4Ys5cT3YHSYEqA3rMMgFid2QQX1cOyWhD6IobCg==","mode":420,"size":915},"dist/client.d.ts":{"checkedAt":1708389320850,"integrity":"sha512-ZoGAxamSdskBjsPSNUers5mSlSsU6m3ms+gvklfKVnE2Xv6soDfceBlx4lTv3vwtW3C/6zxNh35Z35v3TgvWUg==","mode":420,"size":148},"dist/constants.d.ts":{"checkedAt":1708389320850,"integrity":"sha512-PqFy90Ji6IlFsateP0ZmBOLAUIae1wbwQ6LaW811jXHC5u4WIEnbQ3T/azk7iT7mAO+0qZKccnnN8Tu1pl561A==","mode":420,"size":178},"dist/hmr.d.ts":{"checkedAt":1708389320850,"integrity":"sha512-a3czgM9Dj0zPb0KlOcJ62rVMvG3SVkbbYodasSjzSkXTKD9nifIHtMhTtyhI71bBRI6AUUyj8NXpatg6DgP47w==","mode":420,"size":2611},"dist/index-WT31LSgS.d.ts":{"checkedAt":1708389320850,"integrity":"sha512-JfkAjZRgqsnVryYGkEpKmDs2R5XXcamTTKiqdEdR0p3NQ0drWndyIQ2c1xspcxMJQAiUABje2wHJ5xFbieVRDg==","mode":420,"size":9235},"dist/index.d.ts":{"checkedAt":1708389320850,"integrity":"sha512-ptiLBavrZEocVxGoYWY6ntUz8YCluXqokl1D88+ty0FNXzBaDkHDx+EH+1XI4UJngPcI8hyY2lojmeDjSXf11g==","mode":420,"size":519},"dist/server.d.ts":{"checkedAt":1708389320850,"integrity":"sha512-WIvXz3ndm1rfvzz5sH6YeCNhzfuM3I5DsyFyCeBWZ74/o7hZFef3KXkth/3ylj2ZF9Mrizp1CjaOvOdL23MPfA==","mode":420,"size":2532},"dist/source-map.d.ts":{"checkedAt":1708389320850,"integrity":"sha512-RwrrkAyIvNJhpO+rgN4xpWpE3t6u+6YjuPYOI9AR/vg9xAbihDfBMawyoMiZkXUTz48FZc2tk0TBuloMYeW8+w==","mode":420,"size":607},"dist/trace-mapping.d-xyIfZtPm.d.ts":{"checkedAt":1708389320851,"integrity":"sha512-YkebWD8kFsU05PzeNOiWPn8ZXxAs49J6bC06ptl7KPv9JYR0bXXDzj36sdnuXcmCfguMrZf9heaD1mYTWX+lPw==","mode":420,"size":1906},"dist/types.d.ts":{"checkedAt":1708389320851,"integrity":"sha512-ptiLBavrZEocVxGoYWY6ntUz8YCluXqokl1D88+ty0FNXzBaDkHDx+EH+1XI4UJngPcI8hyY2lojmeDjSXf11g==","mode":420,"size":519},"dist/utils.d.ts":{"checkedAt":1708389320851,"integrity":"sha512-0IgMheo6cdGro0e2g0qSkbRAt9d2hLqbBTEQm34iW7L1ZXb1Jau8nklWLr7QpThYmlpVb1WAemK/tUv6iAnb+Q==","mode":420,"size":1613},"LICENSE":{"checkedAt":1708389320851,"integrity":"sha512-UVFpfPJvKX+pFZi9kICLGeKXa7aMp5oeTmTQJBxCYHGrecls8D80KYY+DoSbK71Xw3IjeSGb/B31WXPYaplODw==","mode":420,"size":1177},"package.json":{"checkedAt":1708389320851,"integrity":"sha512-smIhi3i8wtLgeTxpHxTOa9pghD+uVav+cjzpMfCFkmSGw1/NSaS9SfdwISWE1v+Jp0qEdn10ztHiPBOWAJsUjg==","mode":420,"size":2323}}} \ No newline at end of file diff --git a/.pnpm-store/v3/files/10/14f86d5b849fbcca013f5e0bfbf28c13d8a006af93f5ce6a8c5b4350441e135b78a53c0b79264795d98c81bcebcf1ecbd4258f7ed549259751493370896510 b/.pnpm-store/v3/files/10/14f86d5b849fbcca013f5e0bfbf28c13d8a006af93f5ce6a8c5b4350441e135b78a53c0b79264795d98c81bcebcf1ecbd4258f7ed549259751493370896510 new file mode 100644 index 00000000..d04cc8e2 --- /dev/null +++ b/.pnpm-store/v3/files/10/14f86d5b849fbcca013f5e0bfbf28c13d8a006af93f5ce6a8c5b4350441e135b78a53c0b79264795d98c81bcebcf1ecbd4258f7ed549259751493370896510 @@ -0,0 +1,64 @@ +/* + @license + Rollup.js v4.12.0 + Fri, 16 Feb 2024 13:31:42 GMT - commit 0146b84be33a8416b4df4b9382549a7ca19dd64a + + https://github.com/rollup/rollup + + Released under the MIT License. +*/ +const getLogFilter = filters => { + if (filters.length === 0) + return () => true; + const normalizedFilters = filters.map(filter => filter.split('&').map(subFilter => { + const inverted = subFilter.startsWith('!'); + if (inverted) + subFilter = subFilter.slice(1); + const [key, ...value] = subFilter.split(':'); + return { inverted, key: key.split('.'), parts: value.join(':').split('*') }; + })); + return (log) => { + nextIntersectedFilter: for (const intersectedFilters of normalizedFilters) { + for (const { inverted, key, parts } of intersectedFilters) { + const isFilterSatisfied = testFilter(log, key, parts); + if (inverted ? isFilterSatisfied : !isFilterSatisfied) { + continue nextIntersectedFilter; + } + } + return true; + } + return false; + }; +}; +const testFilter = (log, key, parts) => { + let rawValue = log; + for (let index = 0; index < key.length; index++) { + if (!rawValue) { + return false; + } + const part = key[index]; + if (!(part in rawValue)) { + return false; + } + rawValue = rawValue[part]; + } + let value = typeof rawValue === 'object' ? JSON.stringify(rawValue) : String(rawValue); + if (parts.length === 1) { + return value === parts[0]; + } + if (!value.startsWith(parts[0])) { + return false; + } + const lastPartIndex = parts.length - 1; + for (let index = 1; index < lastPartIndex; index++) { + const part = parts[index]; + const position = value.indexOf(part); + if (position === -1) { + return false; + } + value = value.slice(position + part.length); + } + return value.endsWith(parts[lastPartIndex]); +}; + +export { getLogFilter }; diff --git a/.pnpm-store/v3/files/11/9fbbf6f0b7cf12442679b6fecb52b1bc168a70cbfec060cea39afc704ea17e8263623afb216c6482a0f326c4d8ff758975ad189471a127d49f3e327e205faf b/.pnpm-store/v3/files/11/9fbbf6f0b7cf12442679b6fecb52b1bc168a70cbfec060cea39afc704ea17e8263623afb216c6482a0f326c4d8ff758975ad189471a127d49f3e327e205faf new file mode 100644 index 00000000..d003a3f6 --- /dev/null +++ b/.pnpm-store/v3/files/11/9fbbf6f0b7cf12442679b6fecb52b1bc168a70cbfec060cea39afc704ea17e8263623afb216c6482a0f326c4d8ff758975ad189471a127d49f3e327e205faf @@ -0,0 +1,62 @@ +{ + "name": "strip-literal", + "version": "2.0.0", + "packageManager": "pnpm@8.13.1", + "description": "Strip comments and string literals from JavaScript code", + "author": "Anthony Fu ", + "license": "MIT", + "funding": "https://github.com/sponsors/antfu", + "homepage": "https://github.com/antfu/strip-literal#readme", + "repository": { + "type": "git", + "url": "git+https://github.com/antfu/strip-literal.git" + }, + "bugs": { + "url": "https://github.com/antfu/strip-literal/issues" + }, + "keywords": [], + "sideEffects": false, + "exports": { + ".": { + "types": "./dist/index.d.ts", + "import": "./dist/index.mjs", + "require": "./dist/index.cjs" + } + }, + "main": "./dist/index.cjs", + "module": "./dist/index.mjs", + "types": "./dist/index.d.ts", + "files": [ + "dist" + ], + "scripts": { + "build": "unbuild", + "dev": "unbuild --stub", + "lint": "eslint .", + "prepublishOnly": "nr build", + "release": "bumpp --commit --push --tag && npm publish", + "start": "esmo src/index.ts", + "test": "vitest", + "bench": "vitest bench", + "typecheck": "tsc --noEmit" + }, + "dependencies": { + "js-tokens": "^8.0.2" + }, + "devDependencies": { + "@antfu/eslint-config": "^2.6.1", + "@antfu/ni": "^0.21.12", + "@types/node": "^20.10.5", + "bumpp": "^9.2.1", + "eslint": "^8.56.0", + "esmo": "^4.0.0", + "pnpm": "^8.13.1", + "rimraf": "^5.0.5", + "three": "^0.160.0", + "typescript": "^5.3.3", + "unbuild": "^2.0.0", + "vite": "^5.0.10", + "vitest": "^1.1.0", + "vue": "^3.4.0" + } +} diff --git a/.pnpm-store/v3/files/11/f2383eb0a9675b1231c8fdfe45d7564789468d2f038ca714969928746706fa1f3c14b5bb50b0fc17616ea0afcf4d608d5346a3642800c26ea913337a97445c b/.pnpm-store/v3/files/11/f2383eb0a9675b1231c8fdfe45d7564789468d2f038ca714969928746706fa1f3c14b5bb50b0fc17616ea0afcf4d608d5346a3642800c26ea913337a97445c new file mode 100644 index 00000000..0e65c232 --- /dev/null +++ b/.pnpm-store/v3/files/11/f2383eb0a9675b1231c8fdfe45d7564789468d2f038ca714969928746706fa1f3c14b5bb50b0fc17616ea0afcf4d608d5346a3642800c26ea913337a97445c @@ -0,0 +1,276 @@ +import { ErrorWithDiff, Awaitable } from '@vitest/utils'; + +type ChainableFunction any, C = {}> = F & { + [x in T]: ChainableFunction; +} & { + fn: (this: Record, ...args: Parameters) => ReturnType; +} & C; +declare function createChainable(keys: T[], fn: (this: Record, ...args: Args) => R): ChainableFunction R>; + +interface FixtureItem extends FixtureOptions { + prop: string; + value: any; + /** + * Indicates whether the fixture is a function + */ + isFn: boolean; + /** + * The dependencies(fixtures) of current fixture function. + */ + deps?: FixtureItem[]; +} + +type RunMode = 'run' | 'skip' | 'only' | 'todo'; +type TaskState = RunMode | 'pass' | 'fail'; +interface TaskBase { + id: string; + name: string; + mode: RunMode; + meta: TaskMeta; + each?: boolean; + concurrent?: boolean; + shuffle?: boolean; + suite?: Suite; + file?: File; + result?: TaskResult; + retry?: number; + repeats?: number; +} +interface TaskPopulated extends TaskBase { + suite: Suite; + pending?: boolean; + result?: TaskResult; + fails?: boolean; + onFailed?: OnTestFailedHandler[]; + onFinished?: OnTestFinishedHandler[]; + /** + * Store promises (from async expects) to wait for them before finishing the test + */ + promises?: Promise[]; +} +interface TaskMeta { +} +interface TaskResult { + state: TaskState; + duration?: number; + startTime?: number; + heap?: number; + errors?: ErrorWithDiff[]; + htmlError?: string; + hooks?: Partial>; + retryCount?: number; + repeatCount?: number; +} +type TaskResultPack = [id: string, result: TaskResult | undefined, meta: TaskMeta]; +interface Suite extends TaskBase { + type: 'suite'; + tasks: Task[]; + filepath?: string; + projectName: string; +} +interface File extends Suite { + filepath: string; + collectDuration?: number; + setupDuration?: number; +} +interface Test extends TaskPopulated { + type: 'test'; + context: TaskContext & ExtraContext & TestContext; +} +interface Custom extends TaskPopulated { + type: 'custom'; + context: TaskContext & ExtraContext & TestContext; +} +type Task = Test | Suite | Custom | File; +type DoneCallback = (error?: any) => void; +type TestFunction = (context: ExtendedContext & ExtraContext) => Awaitable | void; +type ExtractEachCallbackArgs> = { + 1: [T[0]]; + 2: [T[0], T[1]]; + 3: [T[0], T[1], T[2]]; + 4: [T[0], T[1], T[2], T[3]]; + 5: [T[0], T[1], T[2], T[3], T[4]]; + 6: [T[0], T[1], T[2], T[3], T[4], T[5]]; + 7: [T[0], T[1], T[2], T[3], T[4], T[5], T[6]]; + 8: [T[0], T[1], T[2], T[3], T[4], T[5], T[6], T[7]]; + 9: [T[0], T[1], T[2], T[3], T[4], T[5], T[6], T[7], T[8]]; + 10: [T[0], T[1], T[2], T[3], T[4], T[5], T[6], T[7], T[8], T[9]]; + fallback: Array ? U : any>; +}[T extends Readonly<[any]> ? 1 : T extends Readonly<[any, any]> ? 2 : T extends Readonly<[any, any, any]> ? 3 : T extends Readonly<[any, any, any, any]> ? 4 : T extends Readonly<[any, any, any, any, any]> ? 5 : T extends Readonly<[any, any, any, any, any, any]> ? 6 : T extends Readonly<[any, any, any, any, any, any, any]> ? 7 : T extends Readonly<[any, any, any, any, any, any, any, any]> ? 8 : T extends Readonly<[any, any, any, any, any, any, any, any, any]> ? 9 : T extends Readonly<[any, any, any, any, any, any, any, any, any, any]> ? 10 : 'fallback']; +interface EachFunctionReturn { + /** + * @deprecated Use options as the second argument instead + */ + (name: string | Function, fn: (...args: T) => Awaitable, options: TestOptions): void; + (name: string | Function, fn: (...args: T) => Awaitable, options?: number | TestOptions): void; + (name: string | Function, options: TestOptions, fn: (...args: T) => Awaitable): void; +} +interface TestEachFunction { + (cases: ReadonlyArray): EachFunctionReturn; + >(cases: ReadonlyArray): EachFunctionReturn>; + (cases: ReadonlyArray): EachFunctionReturn; + (...args: [TemplateStringsArray, ...any]): EachFunctionReturn; +} +interface TestCollectorCallable { + /** + * @deprecated Use options as the second argument instead + */ + (name: string | Function, fn: TestFunction, options: TestOptions): void; + (name: string | Function, fn?: TestFunction, options?: number | TestOptions): void; + (name: string | Function, options?: TestOptions, fn?: TestFunction): void; +} +type ChainableTestAPI = ChainableFunction<'concurrent' | 'sequential' | 'only' | 'skip' | 'todo' | 'fails', TestCollectorCallable, { + each: TestEachFunction; +}>; +interface TestOptions { + /** + * Test timeout. + */ + timeout?: number; + /** + * Times to retry the test if fails. Useful for making flaky tests more stable. + * When retries is up, the last test error will be thrown. + * + * @default 0 + */ + retry?: number; + /** + * How many times the test will run. + * Only inner tests will repeat if set on `describe()`, nested `describe()` will inherit parent's repeat by default. + * + * @default 0 + */ + repeats?: number; + /** + * Whether tests run concurrently. + * Tests inherit `concurrent` from `describe()` and nested `describe()` will inherit from parent's `concurrent`. + */ + concurrent?: boolean; + /** + * Whether tests run sequentially. + * Tests inherit `sequential` from `describe()` and nested `describe()` will inherit from parent's `sequential`. + */ + sequential?: boolean; + /** + * Whether the test should be skipped. + */ + skip?: boolean; + /** + * Should this test be the only one running in a suite. + */ + only?: boolean; + /** + * Whether the test should be skipped and marked as a todo. + */ + todo?: boolean; + /** + * Whether the test is expected to fail. If it does, the test will pass, otherwise it will fail. + */ + fails?: boolean; +} +interface ExtendedAPI { + skipIf: (condition: any) => ChainableTestAPI; + runIf: (condition: any) => ChainableTestAPI; +} +type CustomAPI = ChainableTestAPI & ExtendedAPI & { + extend: = {}>(fixtures: Fixtures) => CustomAPI<{ + [K in keyof T | keyof ExtraContext]: K extends keyof T ? T[K] : K extends keyof ExtraContext ? ExtraContext[K] : never; + }>; +}; +type TestAPI = ChainableTestAPI & ExtendedAPI & { + extend: = {}>(fixtures: Fixtures) => TestAPI<{ + [K in keyof T | keyof ExtraContext]: K extends keyof T ? T[K] : K extends keyof ExtraContext ? ExtraContext[K] : never; + }>; +}; +interface FixtureOptions { + /** + * Whether to automatically set up current fixture, even though it's not being used in tests. + */ + auto?: boolean; +} +type Use = (value: T) => Promise; +type FixtureFn = (context: Omit & ExtraContext, use: Use) => Promise; +type Fixture = ((...args: any) => any) extends T[K] ? (T[K] extends any ? FixtureFn>> : never) : T[K] | (T[K] extends any ? FixtureFn>> : never); +type Fixtures, ExtraContext = {}> = { + [K in keyof T]: Fixture> | [Fixture>, FixtureOptions?]; +}; +type InferFixturesTypes = T extends TestAPI ? C : T; +interface SuiteCollectorCallable { + /** + * @deprecated Use options as the second argument instead + */ + (name: string | Function, fn: SuiteFactory, options: TestOptions): SuiteCollector; + (name: string | Function, fn?: SuiteFactory, options?: number | TestOptions): SuiteCollector; + (name: string | Function, options: TestOptions, fn?: SuiteFactory): SuiteCollector; +} +type ChainableSuiteAPI = ChainableFunction<'concurrent' | 'sequential' | 'only' | 'skip' | 'todo' | 'shuffle', SuiteCollectorCallable, { + each: TestEachFunction; +}>; +type SuiteAPI = ChainableSuiteAPI & { + skipIf: (condition: any) => ChainableSuiteAPI; + runIf: (condition: any) => ChainableSuiteAPI; +}; +type HookListener = (...args: T) => Awaitable; +type HookCleanupCallback = (() => Awaitable) | void; +interface SuiteHooks { + beforeAll: HookListener<[Readonly], HookCleanupCallback>[]; + afterAll: HookListener<[Readonly]>[]; + beforeEach: HookListener<[ExtendedContext & ExtraContext, Readonly], HookCleanupCallback>[]; + afterEach: HookListener<[ExtendedContext & ExtraContext, Readonly]>[]; +} +interface TaskCustomOptions extends TestOptions { + concurrent?: boolean; + sequential?: boolean; + skip?: boolean; + only?: boolean; + todo?: boolean; + fails?: boolean; + each?: boolean; + meta?: Record; + fixtures?: FixtureItem[]; + handler?: (context: TaskContext) => Awaitable; +} +interface SuiteCollector { + readonly name: string; + readonly mode: RunMode; + options?: TestOptions; + type: 'collector'; + test: TestAPI; + tasks: (Suite | Custom | Test | SuiteCollector)[]; + task: (name: string, options?: TaskCustomOptions) => Custom; + collect: (file?: File) => Promise; + clear: () => void; + on: >(name: T, ...fn: SuiteHooks[T]) => void; +} +type SuiteFactory = (test: (name: string | Function, fn: TestFunction) => void) => Awaitable; +interface RuntimeContext { + tasks: (SuiteCollector | Test)[]; + currentSuite: SuiteCollector | null; +} +interface TestContext { +} +interface TaskContext { + /** + * Metadata of the current test + */ + task: Readonly; + /** + * Extract hooks on test failed + */ + onTestFailed: (fn: OnTestFailedHandler) => void; + /** + * Extract hooks on test failed + */ + onTestFinished: (fn: OnTestFinishedHandler) => void; + /** + * Mark tests as skipped. All execution after this call will be skipped. + */ + skip: () => void; +} +type ExtendedContext = TaskContext & TestContext; +type OnTestFailedHandler = (result: TaskResult) => Awaitable; +type OnTestFinishedHandler = (result: TaskResult) => Awaitable; +type SequenceHooks = 'stack' | 'list' | 'parallel'; +type SequenceSetupFiles = 'list' | 'parallel'; + +export { type TaskContext as A, type SequenceHooks as B, type Custom as C, type DoneCallback as D, type ExtendedContext as E, type File as F, type SequenceSetupFiles as G, type HookListener as H, type InferFixturesTypes as I, type OnTestFailedHandler as O, type RunMode as R, type Suite as S, type Task as T, type Use as U, type Test as a, type ChainableFunction as b, createChainable as c, type SuiteAPI as d, type TestAPI as e, type SuiteCollector as f, type CustomAPI as g, type SuiteHooks as h, type OnTestFinishedHandler as i, type TaskState as j, type TaskBase as k, type TaskPopulated as l, type TaskMeta as m, type TaskResult as n, type TaskResultPack as o, type TestFunction as p, type TestOptions as q, type FixtureOptions as r, type FixtureFn as s, type Fixture as t, type Fixtures as u, type HookCleanupCallback as v, type TaskCustomOptions as w, type SuiteFactory as x, type RuntimeContext as y, type TestContext as z }; diff --git a/.pnpm-store/v3/files/12/ebb2009d4aafdb46dba0c7714896bc75fc071e328b3038cb5812b3fc05964211829407f5d6b0f87356470e31919c3a59452c233e98194d0842740cde252d2d b/.pnpm-store/v3/files/12/ebb2009d4aafdb46dba0c7714896bc75fc071e328b3038cb5812b3fc05964211829407f5d6b0f87356470e31919c3a59452c233e98194d0842740cde252d2d new file mode 100644 index 00000000..228e7fad --- /dev/null +++ b/.pnpm-store/v3/files/12/ebb2009d4aafdb46dba0c7714896bc75fc071e328b3038cb5812b3fc05964211829407f5d6b0f87356470e31919c3a59452c233e98194d0842740cde252d2d @@ -0,0 +1,37 @@ +/* + @license + Rollup.js v4.12.0 + Fri, 16 Feb 2024 13:31:42 GMT - commit 0146b84be33a8416b4df4b9382549a7ca19dd64a + + https://github.com/rollup/rollup + + Released under the MIT License. +*/ +'use strict'; + +let fsEvents; +let fsEventsImportError; +async function loadFsEvents() { + try { + ({ default: fsEvents } = await import('fsevents')); + } + catch (error) { + fsEventsImportError = error; + } +} +// A call to this function will be injected into the chokidar code +function getFsEvents() { + if (fsEventsImportError) + throw fsEventsImportError; + return fsEvents; +} + +const fseventsImporter = /*#__PURE__*/Object.defineProperty({ + __proto__: null, + getFsEvents, + loadFsEvents +}, Symbol.toStringTag, { value: 'Module' }); + +exports.fseventsImporter = fseventsImporter; +exports.loadFsEvents = loadFsEvents; +//# sourceMappingURL=fsevents-importer.js.map diff --git a/.pnpm-store/v3/files/13/252681fde62dc3af36b542b481c49b731abb6ec7b711f1817d234e4953114a70b0f6c909ef75d3937d3d4d402413052c1d30cea4e64409a54e9199d579b300 b/.pnpm-store/v3/files/13/252681fde62dc3af36b542b481c49b731abb6ec7b711f1817d234e4953114a70b0f6c909ef75d3937d3d4d402413052c1d30cea4e64409a54e9199d579b300 new file mode 100644 index 00000000..55cdcdc3 --- /dev/null +++ b/.pnpm-store/v3/files/13/252681fde62dc3af36b542b481c49b731abb6ec7b711f1817d234e4953114a70b0f6c909ef75d3937d3d4d402413052c1d30cea4e64409a54e9199d579b300 @@ -0,0 +1,2 @@ +import type { IImage } from './interface.ts'; +export declare const GIF: IImage; diff --git a/.pnpm-store/v3/files/13/d2ec98c28d1a065043a688d490f63f390ea5b54296751f029ffee5e686d84c76a432f4556ffc97d6090efaad807f769c22fd1cc20464f3438b20cb91720578 b/.pnpm-store/v3/files/13/d2ec98c28d1a065043a688d490f63f390ea5b54296751f029ffee5e686d84c76a432f4556ffc97d6090efaad807f769c22fd1cc20464f3438b20cb91720578 new file mode 100644 index 00000000..fed59672 --- /dev/null +++ b/.pnpm-store/v3/files/13/d2ec98c28d1a065043a688d490f63f390ea5b54296751f029ffee5e686d84c76a432f4556ffc97d6090efaad807f769c22fd1cc20464f3438b20cb91720578 @@ -0,0 +1,46 @@ +import { VitestRunner, VitestRunnerImportSource, Suite, Task, CancelReason, Test, Custom, TaskContext, ExtendedContext } from '@vitest/runner'; +import { R as ResolvedConfig } from './reporters-QGe8gs4b.js'; +import * as tinybench from 'tinybench'; +import 'vite'; +import 'vite-node'; +import '@vitest/snapshot'; +import '@vitest/expect'; +import '@vitest/runner/utils'; +import '@vitest/utils'; +import 'vite-node/client'; +import '@vitest/snapshot/manager'; +import 'vite-node/server'; +import 'node:worker_threads'; +import 'node:fs'; +import 'chai'; + +declare class VitestTestRunner implements VitestRunner { + config: ResolvedConfig; + private snapshotClient; + private workerState; + private __vitest_executor; + private cancelRun; + constructor(config: ResolvedConfig); + importFile(filepath: string, source: VitestRunnerImportSource): unknown; + onBeforeRunFiles(): void; + onAfterRunSuite(suite: Suite): Promise; + onAfterRunTask(test: Task): void; + onCancel(_reason: CancelReason): void; + onBeforeRunTask(test: Task): Promise; + onBeforeRunSuite(suite: Suite): Promise; + onBeforeTryTask(test: Task): void; + onAfterTryTask(test: Task): void; + extendTaskContext(context: TaskContext): ExtendedContext; +} + +declare class NodeBenchmarkRunner implements VitestRunner { + config: ResolvedConfig; + private __vitest_executor; + constructor(config: ResolvedConfig); + importTinybench(): Promise; + importFile(filepath: string, source: VitestRunnerImportSource): unknown; + runSuite(suite: Suite): Promise; + runTask(): Promise; +} + +export { NodeBenchmarkRunner, VitestTestRunner }; diff --git a/.pnpm-store/v3/files/14/fb21b80bbb96904ea3eaeeccef485c2012eea43af240155dd14cd99c6022f4cf98b0fc39a90ea3995476e94f647f4797c436a6f1e81d9b887848f518557cf9 b/.pnpm-store/v3/files/14/fb21b80bbb96904ea3eaeeccef485c2012eea43af240155dd14cd99c6022f4cf98b0fc39a90ea3995476e94f647f4797c436a6f1e81d9b887848f518557cf9 new file mode 100644 index 00000000..d18b61c4 --- /dev/null +++ b/.pnpm-store/v3/files/14/fb21b80bbb96904ea3eaeeccef485c2012eea43af240155dd14cd99c6022f4cf98b0fc39a90ea3995476e94f647f4797c436a6f1e81d9b887848f518557cf9 @@ -0,0 +1,253 @@ +import * as _vitest_utils from '@vitest/utils'; +import { stringify, Constructable } from '@vitest/utils'; +export { setupColors } from '@vitest/utils'; +import { diff } from '@vitest/utils/diff'; +export { DiffOptions } from '@vitest/utils/diff'; + +type Formatter = (input: string | number | null | undefined) => string; + +declare function getMatcherUtils(): { + EXPECTED_COLOR: _vitest_utils.ColorMethod; + RECEIVED_COLOR: _vitest_utils.ColorMethod; + INVERTED_COLOR: _vitest_utils.ColorMethod; + BOLD_WEIGHT: _vitest_utils.ColorMethod; + DIM_COLOR: _vitest_utils.ColorMethod; + matcherHint: (matcherName: string, received?: string, expected?: string, options?: MatcherHintOptions) => string; + printReceived: (object: unknown) => string; + printExpected: (value: unknown) => string; +}; +declare function addCustomEqualityTesters(newTesters: Array): void; + +/** + * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + */ + +type ChaiPlugin = Chai.ChaiPlugin; +type Tester = (this: TesterContext, a: any, b: any, customTesters: Array) => boolean | undefined; +interface TesterContext { + equals: (a: unknown, b: unknown, customTesters?: Array, strictCheck?: boolean) => boolean; +} + +interface MatcherHintOptions { + comment?: string; + expectedColor?: Formatter; + isDirectExpectCall?: boolean; + isNot?: boolean; + promise?: string; + receivedColor?: Formatter; + secondArgument?: string; + secondArgumentColor?: Formatter; +} +interface MatcherState { + customTesters: Array; + assertionCalls: number; + currentTestName?: string; + dontThrow?: () => void; + error?: Error; + equals: (a: unknown, b: unknown, customTesters?: Array, strictCheck?: boolean) => boolean; + expand?: boolean; + expectedAssertionsNumber?: number | null; + expectedAssertionsNumberErrorGen?: (() => Error) | null; + isExpectingAssertions?: boolean; + isExpectingAssertionsError?: Error | null; + isNot: boolean; + promise: string; + suppressedErrors: Array; + testPath?: string; + utils: ReturnType & { + diff: typeof diff; + stringify: typeof stringify; + iterableEquality: Tester; + subsetEquality: Tester; + }; + soft?: boolean; +} +interface SyncExpectationResult { + pass: boolean; + message: () => string; + actual?: any; + expected?: any; +} +type AsyncExpectationResult = Promise; +type ExpectationResult = SyncExpectationResult | AsyncExpectationResult; +interface RawMatcherFn { + (this: T, received: any, expected: any, options?: any): ExpectationResult; +} +type MatchersObject = Record>; +interface ExpectStatic extends Chai.ExpectStatic, AsymmetricMatchersContaining { + (actual: T, message?: string): Assertion; + unreachable: (message?: string) => never; + soft: (actual: T, message?: string) => Assertion; + extend: (expects: MatchersObject) => void; + addEqualityTesters: (testers: Array) => void; + assertions: (expected: number) => void; + hasAssertions: () => void; + anything: () => any; + any: (constructor: unknown) => any; + getState: () => MatcherState; + setState: (state: Partial) => void; + not: AsymmetricMatchersContaining; +} +interface AsymmetricMatchersContaining { + stringContaining: (expected: string) => any; + objectContaining: (expected: T) => any; + arrayContaining: (expected: Array) => any; + stringMatching: (expected: string | RegExp) => any; + closeTo: (expected: number, precision?: number) => any; +} +interface JestAssertion extends jest.Matchers { + toEqual: (expected: E) => void; + toStrictEqual: (expected: E) => void; + toBe: (expected: E) => void; + toMatch: (expected: string | RegExp) => void; + toMatchObject: (expected: E) => void; + toContain: (item: E) => void; + toContainEqual: (item: E) => void; + toBeTruthy: () => void; + toBeFalsy: () => void; + toBeGreaterThan: (num: number | bigint) => void; + toBeGreaterThanOrEqual: (num: number | bigint) => void; + toBeLessThan: (num: number | bigint) => void; + toBeLessThanOrEqual: (num: number | bigint) => void; + toBeNaN: () => void; + toBeUndefined: () => void; + toBeNull: () => void; + toBeDefined: () => void; + toBeInstanceOf: (expected: E) => void; + toBeCalledTimes: (times: number) => void; + toHaveLength: (length: number) => void; + toHaveProperty: (property: string | (string | number)[], value?: E) => void; + toBeCloseTo: (number: number, numDigits?: number) => void; + toHaveBeenCalledTimes: (times: number) => void; + toHaveBeenCalled: () => void; + toBeCalled: () => void; + toHaveBeenCalledWith: (...args: E) => void; + toBeCalledWith: (...args: E) => void; + toHaveBeenNthCalledWith: (n: number, ...args: E) => void; + nthCalledWith: (nthCall: number, ...args: E) => void; + toHaveBeenLastCalledWith: (...args: E) => void; + lastCalledWith: (...args: E) => void; + toThrow: (expected?: string | Constructable | RegExp | Error) => void; + toThrowError: (expected?: string | Constructable | RegExp | Error) => void; + toReturn: () => void; + toHaveReturned: () => void; + toReturnTimes: (times: number) => void; + toHaveReturnedTimes: (times: number) => void; + toReturnWith: (value: E) => void; + toHaveReturnedWith: (value: E) => void; + toHaveLastReturnedWith: (value: E) => void; + lastReturnedWith: (value: E) => void; + toHaveNthReturnedWith: (nthCall: number, value: E) => void; + nthReturnedWith: (nthCall: number, value: E) => void; +} +type VitestAssertion = { + [K in keyof A]: A[K] extends Chai.Assertion ? Assertion : A[K] extends (...args: any[]) => any ? A[K] : VitestAssertion; +} & ((type: string, message?: string) => Assertion); +type Promisify = { + [K in keyof O]: O[K] extends (...args: infer A) => infer R ? O extends R ? Promisify : (...args: A) => Promise : O[K]; +}; +interface Assertion extends VitestAssertion, JestAssertion { + toBeTypeOf: (expected: 'bigint' | 'boolean' | 'function' | 'number' | 'object' | 'string' | 'symbol' | 'undefined') => void; + toHaveBeenCalledOnce: () => void; + toSatisfy: (matcher: (value: E) => boolean, message?: string) => void; + resolves: Promisify>; + rejects: Promisify>; +} +declare global { + namespace jest { + interface Matchers { + } + } +} + +interface AsymmetricMatcherInterface { + asymmetricMatch: (other: unknown) => boolean; + toString: () => string; + getExpectedType?: () => string; + toAsymmetricMatcher?: () => string; +} +declare abstract class AsymmetricMatcher implements AsymmetricMatcherInterface { + protected sample: T; + protected inverse: boolean; + $$typeof: symbol; + constructor(sample: T, inverse?: boolean); + protected getMatcherContext(expect?: Chai.ExpectStatic): State; + abstract asymmetricMatch(other: unknown): boolean; + abstract toString(): string; + getExpectedType?(): string; + toAsymmetricMatcher?(): string; +} +declare class StringContaining extends AsymmetricMatcher { + constructor(sample: string, inverse?: boolean); + asymmetricMatch(other: string): boolean; + toString(): string; + getExpectedType(): string; +} +declare class Anything extends AsymmetricMatcher { + asymmetricMatch(other: unknown): boolean; + toString(): string; + toAsymmetricMatcher(): string; +} +declare class ObjectContaining extends AsymmetricMatcher> { + constructor(sample: Record, inverse?: boolean); + getPrototype(obj: object): any; + hasProperty(obj: object | null, property: string): boolean; + asymmetricMatch(other: any): boolean; + toString(): string; + getExpectedType(): string; +} +declare class ArrayContaining extends AsymmetricMatcher> { + constructor(sample: Array, inverse?: boolean); + asymmetricMatch(other: Array): boolean; + toString(): string; + getExpectedType(): string; +} +declare class Any extends AsymmetricMatcher { + constructor(sample: unknown); + fnNameFor(func: Function): string; + asymmetricMatch(other: unknown): boolean; + toString(): string; + getExpectedType(): string; + toAsymmetricMatcher(): string; +} +declare class StringMatching extends AsymmetricMatcher { + constructor(sample: string | RegExp, inverse?: boolean); + asymmetricMatch(other: string): boolean; + toString(): string; + getExpectedType(): string; +} +declare const JestAsymmetricMatchers: ChaiPlugin; + +declare function equals(a: unknown, b: unknown, customTesters?: Array, strictCheck?: boolean): boolean; +declare function isAsymmetric(obj: any): boolean; +declare function hasAsymmetric(obj: any, seen?: Set): boolean; +declare function isA(typeName: string, value: unknown): boolean; +declare function fnNameFor(func: Function): string; +declare function hasProperty(obj: object | null, property: string): boolean; +declare function isImmutableUnorderedKeyed(maybeKeyed: any): boolean; +declare function isImmutableUnorderedSet(maybeSet: any): boolean; +declare function iterableEquality(a: any, b: any, customTesters?: Array, aStack?: Array, bStack?: Array): boolean | undefined; +declare function subsetEquality(object: unknown, subset: unknown, customTesters?: Array): boolean | undefined; +declare function typeEquality(a: any, b: any): boolean | undefined; +declare function arrayBufferEquality(a: unknown, b: unknown): boolean | undefined; +declare function sparseArrayEquality(a: unknown, b: unknown, customTesters?: Array): boolean | undefined; +declare function generateToBeMessage(deepEqualityName: string, expected?: string, actual?: string): string; +declare function pluralize(word: string, count: number): string; + +declare const MATCHERS_OBJECT: unique symbol; +declare const JEST_MATCHERS_OBJECT: unique symbol; +declare const GLOBAL_EXPECT: unique symbol; +declare const ASYMMETRIC_MATCHERS_OBJECT: unique symbol; + +declare function getState(expect: ExpectStatic): State; +declare function setState(state: Partial, expect: ExpectStatic): void; + +declare const JestChaiExpect: ChaiPlugin; + +declare const JestExtend: ChaiPlugin; + +export { ASYMMETRIC_MATCHERS_OBJECT, Any, Anything, ArrayContaining, type Assertion, AsymmetricMatcher, type AsymmetricMatcherInterface, type AsymmetricMatchersContaining, type AsyncExpectationResult, type ChaiPlugin, type ExpectStatic, type ExpectationResult, GLOBAL_EXPECT, JEST_MATCHERS_OBJECT, type JestAssertion, JestAsymmetricMatchers, JestChaiExpect, JestExtend, MATCHERS_OBJECT, type MatcherHintOptions, type MatcherState, type MatchersObject, ObjectContaining, type RawMatcherFn, StringContaining, StringMatching, type SyncExpectationResult, type Tester, type TesterContext, addCustomEqualityTesters, arrayBufferEquality, equals, fnNameFor, generateToBeMessage, getState, hasAsymmetric, hasProperty, isA, isAsymmetric, isImmutableUnorderedKeyed, isImmutableUnorderedSet, iterableEquality, pluralize, setState, sparseArrayEquality, subsetEquality, typeEquality }; diff --git a/.pnpm-store/v3/files/15/845a58b974a901600f30fea8cf7340da32232769cc6b306ba1f59c5d9a65fced4cb77862ce5c4f760749812a037acc3201627764105f570ec96843e88a1b0a b/.pnpm-store/v3/files/15/845a58b974a901600f30fea8cf7340da32232769cc6b306ba1f59c5d9a65fced4cb77862ce5c4f760749812a037acc3201627764105f570ec96843e88a1b0a new file mode 100644 index 00000000..6deb371d --- /dev/null +++ b/.pnpm-store/v3/files/15/845a58b974a901600f30fea8cf7340da32232769cc6b306ba1f59c5d9a65fced4cb77862ce5c4f760749812a037acc3201627764105f570ec96843e88a1b0a @@ -0,0 +1,21 @@ +import { V as ViteNodeServerOptions } from './index-WT31LSgS.js'; +import './trace-mapping.d-xyIfZtPm.js'; + +interface CliOptions { + 'root'?: string; + 'script'?: boolean; + 'config'?: string; + 'mode'?: string; + 'watch'?: boolean; + 'options'?: ViteNodeServerOptionsCLI; + 'version'?: boolean; + 'help'?: boolean; + '--'?: string[]; +} +type Optional = T | undefined; +type ComputeViteNodeServerOptionsCLI> = { + [K in keyof T]: T[K] extends Optional ? string | string[] : T[K] extends Optional<(string | RegExp)[]> ? string | string[] : T[K] extends Optional<(string | RegExp)[] | true> ? string | string[] | true : T[K] extends Optional> ? ComputeViteNodeServerOptionsCLI : T[K]; +}; +type ViteNodeServerOptionsCLI = ComputeViteNodeServerOptionsCLI; + +export type { CliOptions, ViteNodeServerOptionsCLI }; diff --git a/.pnpm-store/v3/files/17/219f0bf01c3561d0b3d7b93101439f17439c5fb172322a79585bc3d958ac793514a437a13647972dc1f420c08d8887bcff5b3be0817bb2f4285d6de2d48be7 b/.pnpm-store/v3/files/17/219f0bf01c3561d0b3d7b93101439f17439c5fb172322a79585bc3d958ac793514a437a13647972dc1f420c08d8887bcff5b3be0817bb2f4285d6de2d48be7 new file mode 100644 index 00000000..2661f6f1 --- /dev/null +++ b/.pnpm-store/v3/files/17/219f0bf01c3561d0b3d7b93101439f17439c5fb172322a79585bc3d958ac793514a437a13647972dc1f420c08d8887bcff5b3be0817bb2f4285d6de2d48be7 @@ -0,0 +1,2 @@ +import type { ISize } from './vendor/image-size/types/interface.ts'; +export declare function probe(url: string): Promise; diff --git a/.pnpm-store/v3/files/1a/27604bfde8fbf0824c0553bdb9528590fd3a75b042724a8a04b15632e80309d22ca1d79e3e332ee0a29d8e360fd09d6e4714617041e10fc7134e89d44ed851 b/.pnpm-store/v3/files/1a/27604bfde8fbf0824c0553bdb9528590fd3a75b042724a8a04b15632e80309d22ca1d79e3e332ee0a29d8e360fd09d6e4714617041e10fc7134e89d44ed851 new file mode 100644 index 00000000..6f56a62c --- /dev/null +++ b/.pnpm-store/v3/files/1a/27604bfde8fbf0824c0553bdb9528590fd3a75b042724a8a04b15632e80309d22ca1d79e3e332ee0a29d8e360fd09d6e4714617041e10fc7134e89d44ed851 @@ -0,0 +1,47 @@ +{ + "name": "@vitest/expect", + "type": "module", + "version": "1.3.0", + "description": "Jest's expect matchers as a Chai plugin", + "license": "MIT", + "funding": "https://opencollective.com/vitest", + "homepage": "https://github.com/vitest-dev/vitest/tree/main/packages/expect#readme", + "repository": { + "type": "git", + "url": "git+https://github.com/vitest-dev/vitest.git", + "directory": "packages/expect" + }, + "bugs": { + "url": "https://github.com/vitest-dev/vitest/issues" + }, + "sideEffects": false, + "exports": { + ".": { + "types": "./index.d.ts", + "default": "./dist/index.js" + }, + "./*": "./*" + }, + "main": "./dist/index.js", + "module": "./dist/index.js", + "types": "./index.d.ts", + "files": [ + "*.d.ts", + "dist" + ], + "dependencies": { + "chai": "^4.3.10", + "@vitest/spy": "1.3.0", + "@vitest/utils": "1.3.0" + }, + "devDependencies": { + "@types/chai": "4.3.6", + "picocolors": "^1.0.0", + "rollup-plugin-copy": "^3.5.0", + "@vitest/runner": "1.3.0" + }, + "scripts": { + "build": "rimraf dist && rollup -c", + "dev": "rollup -c --watch" + } +} \ No newline at end of file diff --git a/.pnpm-store/v3/files/1a/b6ed2a1a87b2d45fc48f6786d6fc4478906e3a4a9be5044d07426185a02791a8c4a8dd26680962df3a435957b81e3efba5d3e399416b0670ee66e2697fa2d9 b/.pnpm-store/v3/files/1a/b6ed2a1a87b2d45fc48f6786d6fc4478906e3a4a9be5044d07426185a02791a8c4a8dd26680962df3a435957b81e3efba5d3e399416b0670ee66e2697fa2d9 new file mode 100644 index 00000000..30cc57bd --- /dev/null +++ b/.pnpm-store/v3/files/1a/b6ed2a1a87b2d45fc48f6786d6fc4478906e3a4a9be5044d07426185a02791a8c4a8dd26680962df3a435957b81e3efba5d3e399416b0670ee66e2697fa2d9 @@ -0,0 +1,133 @@ +'use strict'; + +var os = require('node:os'); +var stdEnv = require('std-env'); +var vite = require('vite'); + +var _a$1; +typeof process < "u" && typeof process.stdout < "u" && !((_a$1 = process.versions) == null ? void 0 : _a$1.deno) && !globalThis.window; + +var _a, _b; +const defaultInclude = ["**/*.{test,spec}.?(c|m)[jt]s?(x)"]; +const defaultExclude = ["**/node_modules/**", "**/dist/**", "**/cypress/**", "**/.{idea,git,cache,output,temp}/**", "**/{karma,rollup,webpack,vite,vitest,jest,ava,babel,nyc,cypress,tsup,build,eslint,prettier}.config.*"]; +const defaultCoverageExcludes = [ + "coverage/**", + "dist/**", + "**/[.]**", + "packages/*/test?(s)/**", + "**/*.d.ts", + "**/virtual:*", + "**/__x00__*", + "**/\0*", + "cypress/**", + "test?(s)/**", + "test?(-*).?(c|m)[jt]s?(x)", + "**/*{.,-}{test,spec}.?(c|m)[jt]s?(x)", + "**/__tests__/**", + "**/{karma,rollup,webpack,vite,vitest,jest,ava,babel,nyc,cypress,tsup,build}.config.*", + "**/vitest.{workspace,projects}.[jt]s?(on)", + "**/.{eslint,mocha,prettier}rc.{?(c|m)js,yml}" +]; +const coverageConfigDefaults = { + provider: "v8", + enabled: false, + all: true, + clean: true, + cleanOnRerun: true, + reportsDirectory: "./coverage", + exclude: defaultCoverageExcludes, + reportOnFailure: false, + reporter: [["text", {}], ["html", {}], ["clover", {}], ["json", {}]], + extension: [".js", ".cjs", ".mjs", ".ts", ".mts", ".cts", ".tsx", ".jsx", ".vue", ".svelte", ".marko"], + allowExternal: false, + processingConcurrency: Math.min(20, ((_b = (_a = os).availableParallelism) == null ? void 0 : _b.call(_a)) ?? os.cpus().length) +}; +const fakeTimersDefaults = { + loopLimit: 1e4, + shouldClearNativeTimers: true, + toFake: [ + "setTimeout", + "clearTimeout", + "setInterval", + "clearInterval", + "setImmediate", + "clearImmediate", + "Date" + ] +}; +const config = { + allowOnly: !stdEnv.isCI, + isolate: true, + watch: !stdEnv.isCI, + globals: false, + environment: "node", + pool: "threads", + clearMocks: false, + restoreMocks: false, + mockReset: false, + include: defaultInclude, + exclude: defaultExclude, + testTimeout: 5e3, + hookTimeout: 1e4, + teardownTimeout: 1e4, + watchExclude: ["**/node_modules/**", "**/dist/**"], + forceRerunTriggers: [ + "**/package.json/**", + "**/{vitest,vite}.config.*/**" + ], + update: false, + reporters: [], + silent: false, + hideSkippedTests: false, + api: false, + ui: false, + uiBase: "/__vitest__/", + open: !stdEnv.isCI, + css: { + include: [] + }, + coverage: coverageConfigDefaults, + fakeTimers: fakeTimersDefaults, + maxConcurrency: 5, + dangerouslyIgnoreUnhandledErrors: false, + typecheck: { + checker: "tsc", + include: ["**/*.{test,spec}-d.?(c|m)[jt]s?(x)"], + exclude: defaultExclude + }, + slowTestThreshold: 300, + disableConsoleIntercept: false +}; +const configDefaults = Object.freeze(config); + +const extraInlineDeps = [ + /^(?!.*(?:node_modules)).*\.mjs$/, + /^(?!.*(?:node_modules)).*\.cjs\.js$/, + // Vite client + /vite\w*\/dist\/client\/env.mjs/, + // Nuxt + "@nuxt/test-utils" +]; + +function defineConfig(config) { + return config; +} +function defineProject(config) { + return config; +} +function defineWorkspace(config) { + return config; +} + +Object.defineProperty(exports, "mergeConfig", { + enumerable: true, + get: function () { return vite.mergeConfig; } +}); +exports.configDefaults = configDefaults; +exports.coverageConfigDefaults = coverageConfigDefaults; +exports.defaultExclude = defaultExclude; +exports.defaultInclude = defaultInclude; +exports.defineConfig = defineConfig; +exports.defineProject = defineProject; +exports.defineWorkspace = defineWorkspace; +exports.extraInlineDeps = extraInlineDeps; diff --git a/.pnpm-store/v3/files/1a/c65dcabde2b9bd269366cacdb1e17574e33a7fe2b1fe840152ab1eb814dc3e9de7d60b2083931fe56f92b58691210a528f5124f66d8bcfe8226e0e96519920 b/.pnpm-store/v3/files/1a/c65dcabde2b9bd269366cacdb1e17574e33a7fe2b1fe840152ab1eb814dc3e9de7d60b2083931fe56f92b58691210a528f5124f66d8bcfe8226e0e96519920 new file mode 100644 index 00000000..26401a47 --- /dev/null +++ b/.pnpm-store/v3/files/1a/c65dcabde2b9bd269366cacdb1e17574e33a7fe2b1fe840152ab1eb814dc3e9de7d60b2083931fe56f92b58691210a528f5124f66d8bcfe8226e0e96519920 @@ -0,0 +1,2 @@ +import type { IImage } from './interface.ts'; +export declare const BMP: IImage; diff --git a/.pnpm-store/v3/files/1b/843dc4eac7162eb10903a6bac267939613703b9112c47ea6f81b528782bc6ad5e7399199ae701939ac5de2b50ee53ab5f1f275c41adc108554d8753e09d4a2 b/.pnpm-store/v3/files/1b/843dc4eac7162eb10903a6bac267939613703b9112c47ea6f81b528782bc6ad5e7399199ae701939ac5de2b50ee53ab5f1f275c41adc108554d8753e09d4a2 new file mode 100644 index 00000000..b842ed04 --- /dev/null +++ b/.pnpm-store/v3/files/1b/843dc4eac7162eb10903a6bac267939613703b9112c47ea6f81b528782bc6ad5e7399199ae701939ac5de2b50ee53ab5f1f275c41adc108554d8753e09d4a2 @@ -0,0 +1,25 @@ +import type { BuildOptions, Rollup, Plugin as VitePlugin } from 'vite'; +type OutputOptionsHook = Extract; +type OutputOptions = Parameters[0]; +type ExtendManualChunksHooks = { + before?: Rollup.GetManualChunk; + after?: Rollup.GetManualChunk; +}; +export declare function extendManualChunks(outputOptions: OutputOptions, hooks: ExtendManualChunksHooks): void; +export declare const ASTRO_PAGE_EXTENSION_POST_PATTERN = "@_@"; +/** + * 1. We add a fixed prefix, which is used as virtual module naming convention; + * 2. We replace the dot that belongs extension with an arbitrary string. + * + * @param virtualModulePrefix + * @param path + */ +export declare function getVirtualModulePageNameFromPath(virtualModulePrefix: string, path: string): string; +/** + * + * @param virtualModulePrefix + * @param id + */ +export declare function getPathFromVirtualModulePageName(virtualModulePrefix: string, id: string): string; +export declare function shouldInlineAsset(assetContent: string, assetPath: string, assetsInlineLimit: NonNullable): boolean; +export {}; diff --git a/.pnpm-store/v3/files/1c/a28829fe3d564c65adabf717fc3aa91b8f7262261956c85c9d88dca83454c03edc16affbcc84f46e5798fe65323ea79783a5a9b3dfb4602c70d68dbb6f1bf3-index.json b/.pnpm-store/v3/files/1c/a28829fe3d564c65adabf717fc3aa91b8f7262261956c85c9d88dca83454c03edc16affbcc84f46e5798fe65323ea79783a5a9b3dfb4602c70d68dbb6f1bf3-index.json new file mode 100644 index 00000000..1c0bb33d --- /dev/null +++ b/.pnpm-store/v3/files/1c/a28829fe3d564c65adabf717fc3aa91b8f7262261956c85c9d88dca83454c03edc16affbcc84f46e5798fe65323ea79783a5a9b3dfb4602c70d68dbb6f1bf3-index.json @@ -0,0 +1 @@ +{"files":{"LICENSE":{"checkedAt":1708389320834,"integrity":"sha512-j96te4KX4HnWrAScBfRJ/kJ4JCHtSCjtJmdlgBQeJv15OAX3WOUZFJsOLLtPurAFUXT9V1CrHKZeTCK4+5FoZw==","mode":420,"size":84951},"sass.default.cjs":{"checkedAt":1708389320834,"integrity":"sha512-cjTefWyVUZRmwjRH2z6pAE8ChxtJCU2ea28vz9rcY350JJU0dhgb+NeEJ6hNP/Oa+1lkAhNTWpZ42YNufIwa1A==","mode":420,"size":235},"sass.dart.js":{"checkedAt":1708389320845,"integrity":"sha512-uZ6XBcDUhAIqx8xHOYomD90m8sybqA/8atCi7/Jas0FcMPh1BNEFFi9qpFMAapt4auncd26dvgBSQB95NX1aRA==","mode":420,"size":4916759},"sass.default.js":{"checkedAt":1708389320845,"integrity":"sha512-VtuSYSWAZMK0f4OEsqNqrVJh2eSqbtfZ4F32q2QUQwNj7o4CRZz5t1EVMBUrL4STGQf7zrMMAB2BQCFEBjjscA==","mode":420,"size":2205},"sass.js":{"checkedAt":1708389320845,"integrity":"sha512-QBYhE/GeVCdBUcQ2phWPWDFdcXNuBA0gqg3fsotL5Ol3YLviJpVJmk0AB4SSw/MU/lV1aGJlydviN6HjQwTA7Q==","mode":493,"size":418},"sass.node.js":{"checkedAt":1708389320845,"integrity":"sha512-czfHidKjz1QzGFPROR4QYH86fdjxyjUIRqwLiXCw86NnwYzoKYW3pA+fFDREb5XAbxmXuyrYoyrPEVht/NR7Hg==","mode":420,"size":310},"package.json":{"checkedAt":1708389320845,"integrity":"sha512-/E2X7slG6cLEsa/6ljGKCpx4XZhmaXU7I0WFcwvRowv3NEKaOCnD3KxSfcfX5+CF4s7OkPgfV7ssMzozxverYw==","mode":420,"size":810},"README.md":{"checkedAt":1708389320846,"integrity":"sha512-jY2W2Qy9nWbHl0gYo4PoGSpK5hyXvAFKqKle5vfE/+UznUaKFlqmVvwyBlt7KnPOYInDr8pRE92wfLAMkNxL6w==","mode":420,"size":7403},"sass.node.mjs":{"checkedAt":1708389320846,"integrity":"sha512-nCQjE4K/KHNZHAVtshs7c/IWnltSPcx60B7I8kp6ieGH5jfU2eXuUpdCYXtlNdyATWXjU4n3OyUL6m6WeiwWtw==","mode":420,"size":4974},"types/value/argument_list.d.ts":{"checkedAt":1708389320846,"integrity":"sha512-1NPjCLrWb8pnITIY273jvdfZz0eBL5HkOpKrn+/7IvNZsEbDBYHf3lJdzp1J/px4BX85QwB+UZg+Vg9iBWIO0Q==","mode":420,"size":1592},"types/value/boolean.d.ts":{"checkedAt":1708389320846,"integrity":"sha512-BT08sMqjuezFyjgoTo1CuK1DltBCNacNxGMwdMtjdlO2MpR9e+vVV2tA2Mn+uM6vK61ADzyQBCYitFajdGil0g==","mode":420,"size":616},"types/value/calculation.d.ts":{"checkedAt":1708389320846,"integrity":"sha512-6SyRE4uDkBtkqYftkyfefDLMHROLex5iavx/eh/bKbCNqjKUSLm61vDz0fABjtydbwoW8sOHsfV7GborsYJgBw==","mode":420,"size":4000},"types/value/color.d.ts":{"checkedAt":1708389320846,"integrity":"sha512-6myGIXDWKF9drvKKzmaAp4I80Ko/3xL52u1HrL9KvsjEJvnU6QfAFbnQDCw9tHtz/zEtuPVB8DtlCVTZdObRCA==","mode":420,"size":3775},"types/compile.d.ts":{"checkedAt":1708389320846,"integrity":"sha512-hhmkh+6M/51hsgu0GLnfREjfM9qKFjhPCFPM9y7BJEMjaEmuS+RIN4s/dP24KCmn7yCiWtCfo0eVplLz6VU/tQ==","mode":420,"size":11071},"types/exception.d.ts":{"checkedAt":1708389320846,"integrity":"sha512-M5DnucxERBRFZPehxuIe21npvhXE36DOglszNzVeWN0SmuoF6fO85m30AKkBV5DL9djt6Yr5qHdlr/ahECSsiw==","mode":420,"size":1148},"types/legacy/exception.d.ts":{"checkedAt":1708389320846,"integrity":"sha512-K/TUwlAlgSgm5VRWTjGUbRMcu2nL1sqNhTLLMc2e9ZQZFXk/eKs5qF//ngaKK2GfJfrdLjnQgposrCqPpc4qPg==","mode":420,"size":1862},"types/legacy/function.d.ts":{"checkedAt":1708389320846,"integrity":"sha512-yOMv090w2WWzE2OcKO6XPD1TzqefJlYXrYf2x88Vw6abyzJqmCSPHlCagknENSJP5SRWXPGQPFCLnDW6AKBXkg==","mode":420,"size":22983},"types/value/function.d.ts":{"checkedAt":1708389320846,"integrity":"sha512-mwy4Y3ZaW5QZuD6udyAadJTWvOan3/CUORh3jQ0UuKdRqewk0gaDGSFqFM7B0aGwGmaIV9OhXGKEYQN98Vnv4g==","mode":420,"size":863},"types/importer.d.ts":{"checkedAt":1708389320846,"integrity":"sha512-QhPNofLIpc0XhbW3sgFSyiNTHyGSfy1LpfzaZIFOv212ifQxKe6I5SK5JVzM3BMYBiOOLgJ9SJn6GOHUasQIdw==","mode":420,"size":18734},"types/legacy/importer.d.ts":{"checkedAt":1708389320847,"integrity":"sha512-GBjjh5gslwuv7t8TKZzE0Lx8hfqOXdBGZmz6kXYLYPOb1Ydi9/RXw7vRwFG+r9lI72TxtGJuqkzv+ITCy5RIvA==","mode":420,"size":6358},"types/index.d.ts":{"checkedAt":1708389320847,"integrity":"sha512-kcjZj4pSsbKElJPtiMiPaIjJM7o7LwX/aJMofJlKKcv3IWTrzw78RciLtGbNHkG8nN96G31batqWgVTDtDpGvA==","mode":420,"size":2273},"types/logger/index.d.ts":{"checkedAt":1708389320847,"integrity":"sha512-OVwoXFV8NRcl68mis4anq8fJRkk2mwp7kr8bV2fmOZhpxeSycnjr8jG2/2NphIi9Y6l/D5rI2u+FTnfzS5U4Qw==","mode":420,"size":2437},"types/value/index.d.ts":{"checkedAt":1708389320847,"integrity":"sha512-Q1+fntd5B5I2RsvPaLmKUOfvvHCtWy0a4b/6Eg2/pxx3acHj+l0U7RMsKokrRAHKje/7d9jPeeJnFkNkvWJpfA==","mode":420,"size":6391},"types/value/list.d.ts":{"checkedAt":1708389320847,"integrity":"sha512-0kuWRJnnO/SKv2SHOoZlE9lnnjoYD+3rPZulY1jR5EykoTaOriOwdZTahS5TqJHS/HUKvU3jcJW/OQf3bP9aIQ==","mode":420,"size":1479},"types/value/map.d.ts":{"checkedAt":1708389320847,"integrity":"sha512-izPPRsNF08+20xemaDWWJ79ORRcKHpTsuWm52R2VtT7gT+HBGJ7+nsGKZYSTi1kxSz/nWDRY7cnVjXQKfB4UDg==","mode":420,"size":1115},"types/value/mixin.d.ts":{"checkedAt":1708389320847,"integrity":"sha512-PPIFGcD6yVP4Z9EsOrda2ZXfY75+HqOMYgqbj7v9frpYvLx2m/k0yPH/D5x8SD5lC4S9KUe2YXnJpiY9mIi9NA==","mode":420,"size":342},"types/value/number.d.ts":{"checkedAt":1708389320847,"integrity":"sha512-+KQJo0mdkRoPRJ1nfccCf1a6HXtrYax8eHisq9JNO3cteNgj4XFp3ydDdTsOSYiwk8G8BnByTyv1MHKC6cdVKQ==","mode":420,"size":11699},"types/legacy/options.d.ts":{"checkedAt":1708389320847,"integrity":"sha512-V9B8uL9a/u7DWe7rRh25yDdmCt+Rz0DKQhnKCO/lFR5YexTavbtvv8ln9FGZZz6n5+pq1BiVFTzCgDxcZZF3Ow==","mode":420,"size":20877},"types/options.d.ts":{"checkedAt":1708389320847,"integrity":"sha512-f5bKlZ4Y/IgUapS/JVP13sPCVxp3/l2sJyC4znoDXv8JI8j70PcgqI9eeWYnLL5eSpGXYPcbrfSQi2UfS7Ej9g==","mode":420,"size":15562},"types/legacy/plugin_this.d.ts":{"checkedAt":1708389320847,"integrity":"sha512-MlTYIBXThoQirEFx/fP0Iu8BwiyHyhpIND4thco1wTiwRAGrY2hA3z5hQe2TYv/VM5KwrHdRKhTCjjKTh+OlnA==","mode":420,"size":2107},"types/util/promise_or.d.ts":{"checkedAt":1708389320848,"integrity":"sha512-+txmFrLv8clSVVY02vSW20FaotfCWrAW23xM79JZ1+L8tTdD4JZKfa88r9yVFeiB5ksjyAWMJzdfu4ja8TXdaw==","mode":420,"size":660},"types/legacy/render.d.ts":{"checkedAt":1708389320848,"integrity":"sha512-DyDT4n0fTpiL0bkIK1y+ySInPm8jAzRsfl/EM27Z/bEMjNrcwEuibbIQXEqG72uTnKyre1Pc0buIl0YHZesbXQ==","mode":420,"size":4443},"types/logger/source_location.d.ts":{"checkedAt":1708389320848,"integrity":"sha512-SAdXAj5F+VBQne8wHiXaV2oQNsbNlH2V0BuspfDNVnK/RVd6S66IhbUTJscR0uEq2Tvqc8w42z9fEDlYgz1QkA==","mode":420,"size":486},"types/logger/source_span.d.ts":{"checkedAt":1708389320848,"integrity":"sha512-KFN3fL+PNM+3bDEkXv1vtg90YDgDG3aFNDJKOg2TrZPXLAI+4zJX2t3IrSw0wZP2UUPCT2GKoLhPR6RnRuVsyg==","mode":420,"size":837},"types/value/string.d.ts":{"checkedAt":1708389320848,"integrity":"sha512-L9nE9vUOI2u/Qk6mNygUptZjiMOJg+38eAQbJB6pykcEzy3hnsRU9m4S62DallpYpgDukGEPla8b0Vo2cAYQ+g==","mode":420,"size":3189}}} \ No newline at end of file diff --git a/.pnpm-store/v3/files/1d/5446c76b7b462b4028e893f684372e3f72959f53cd0ed934e624f6aef0068f1c5ef92d46fd4158d79ff87acc9caa35b0a10e2fb7c84c0fcd06dd64ff1ff213 b/.pnpm-store/v3/files/1d/5446c76b7b462b4028e893f684372e3f72959f53cd0ed934e624f6aef0068f1c5ef92d46fd4158d79ff87acc9caa35b0a10e2fb7c84c0fcd06dd64ff1ff213 new file mode 100644 index 00000000..b93fd505 --- /dev/null +++ b/.pnpm-store/v3/files/1d/5446c76b7b462b4028e893f684372e3f72959f53cd0ed934e624f6aef0068f1c5ef92d46fd4158d79ff87acc9caa35b0a10e2fb7c84c0fcd06dd64ff1ff213 @@ -0,0 +1,2 @@ +import type { imageType } from './types/index.js'; +export declare function detector(input: Uint8Array): imageType | undefined; diff --git a/.pnpm-store/v3/files/1e/d4fef3cbde885a17f9ff9575629b16fc11f000daf800d2c91f5df51d48aff95af34822b1e6160a5924ac4be4e5535513a3de7090f859e4ff62246d85336096 b/.pnpm-store/v3/files/1e/d4fef3cbde885a17f9ff9575629b16fc11f000daf800d2c91f5df51d48aff95af34822b1e6160a5924ac4be4e5535513a3de7090f859e4ff62246d85336096 new file mode 100644 index 00000000..ca679696 --- /dev/null +++ b/.pnpm-store/v3/files/1e/d4fef3cbde885a17f9ff9575629b16fc11f000daf800d2c91f5df51d48aff95af34822b1e6160a5924ac4be4e5535513a3de7090f859e4ff62246d85336096 @@ -0,0 +1,179 @@ +import { fade, slide } from "../../transitions/index.js"; +import { markHTMLString } from "./escape.js"; +import cssesc from "cssesc"; +const transitionNameMap = /* @__PURE__ */ new WeakMap(); +function incrementTransitionNumber(result) { + let num = 1; + if (transitionNameMap.has(result)) { + num = transitionNameMap.get(result) + 1; + } + transitionNameMap.set(result, num); + return num; +} +function createTransitionScope(result, hash) { + const num = incrementTransitionNumber(result); + return `astro-${hash}-${num}`; +} +const getAnimations = (name) => { + if (name === "fade") + return fade(); + if (name === "slide") + return slide(); + if (typeof name === "object") + return name; +}; +const addPairs = (animations, stylesheet) => { + for (const [direction, images] of Object.entries(animations)) { + for (const [image, rules] of Object.entries(images)) { + stylesheet.addAnimationPair(direction, image, rules); + } + } +}; +const reEncodeValidChars = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-_".split("").reduce((v, c) => (v[c.charCodeAt(0)] = c, v), []); +const reEncodeInValidStart = "-0123456789_".split("").reduce((v, c) => (v[c.charCodeAt(0)] = c, v), []); +function reEncode(s) { + let result = ""; + let codepoint; + for (let i = 0; i < s.length; i += (codepoint ?? 0) > 65535 ? 2 : 1) { + codepoint = s.codePointAt(i); + if (codepoint !== void 0) { + result += codepoint < 128 ? codepoint === 95 ? "__" : reEncodeValidChars[codepoint] ?? "_" + codepoint.toString(16).padStart(2, "0") : String.fromCodePoint(codepoint); + } + } + return reEncodeInValidStart[result.codePointAt(0) ?? 0] ? "_" + result : result; +} +function renderTransition(result, hash, animationName, transitionName) { + if (!animationName) + animationName = "fade"; + const scope = createTransitionScope(result, hash); + const name = transitionName ? cssesc(reEncode(transitionName), { isIdentifier: true }) : scope; + const sheet = new ViewTransitionStyleSheet(scope, name); + const animations = getAnimations(animationName); + if (animations) { + addPairs(animations, sheet); + } else if (animationName === "none") { + sheet.addFallback("old", "animation: none; mix-blend-mode: normal;"); + sheet.addModern("old", "animation: none; opacity: 0; mix-blend-mode: normal;"); + sheet.addAnimationRaw("new", "animation: none; mix-blend-mode: normal;"); + } + result._metadata.extraHead.push(markHTMLString(``)); + return scope; +} +function createAnimationScope(transitionName, animations) { + const hash = Math.random().toString(36).slice(2, 8); + const scope = `astro-${hash}`; + const sheet = new ViewTransitionStyleSheet(scope, transitionName); + addPairs(animations, sheet); + return { scope, styles: sheet.toString().replaceAll('"', "") }; +} +class ViewTransitionStyleSheet { + constructor(scope, name) { + this.scope = scope; + this.name = name; + } + modern = []; + fallback = []; + toString() { + const { scope, name } = this; + const [modern, fallback] = [this.modern, this.fallback].map((rules) => rules.join("")); + return [ + `[data-astro-transition-scope="${scope}"] { view-transition-name: ${name}; }`, + this.layer(modern), + fallback + ].join(""); + } + layer(cssText) { + return cssText ? `@layer astro { ${cssText} }` : ""; + } + addRule(target, cssText) { + this[target].push(cssText); + } + addAnimationRaw(image, animation) { + this.addModern(image, animation); + this.addFallback(image, animation); + } + addModern(image, animation) { + const { name } = this; + this.addRule("modern", `::view-transition-${image}(${name}) { ${animation} }`); + } + addFallback(image, animation) { + const { scope } = this; + this.addRule( + "fallback", + // Two selectors here, the second in case there is an animation on the root. + `[data-astro-transition-fallback="${image}"] [data-astro-transition-scope="${scope}"], + [data-astro-transition-fallback="${image}"][data-astro-transition-scope="${scope}"] { ${animation} }` + ); + } + addAnimationPair(direction, image, rules) { + const { scope, name } = this; + const animation = stringifyAnimation(rules); + const prefix = direction === "backwards" ? `[data-astro-transition=back]` : direction === "forwards" ? "" : `[data-astro-transition=${direction}]`; + this.addRule("modern", `${prefix}::view-transition-${image}(${name}) { ${animation} }`); + this.addRule( + "fallback", + `${prefix}[data-astro-transition-fallback="${image}"] [data-astro-transition-scope="${scope}"], + ${prefix}[data-astro-transition-fallback="${image}"][data-astro-transition-scope="${scope}"] { ${animation} }` + ); + } +} +function addAnimationProperty(builder, prop, value) { + let arr = builder[prop]; + if (Array.isArray(arr)) { + arr.push(value.toString()); + } else { + builder[prop] = [value.toString()]; + } +} +function animationBuilder() { + return { + toString() { + let out = ""; + for (let k in this) { + let value = this[k]; + if (Array.isArray(value)) { + out += ` + ${k}: ${value.join(", ")};`; + } + } + return out; + } + }; +} +function stringifyAnimation(anim) { + if (Array.isArray(anim)) { + return stringifyAnimations(anim); + } else { + return stringifyAnimations([anim]); + } +} +function stringifyAnimations(anims) { + const builder = animationBuilder(); + for (const anim of anims) { + if (anim.duration) { + addAnimationProperty(builder, "animation-duration", toTimeValue(anim.duration)); + } + if (anim.easing) { + addAnimationProperty(builder, "animation-timing-function", anim.easing); + } + if (anim.direction) { + addAnimationProperty(builder, "animation-direction", anim.direction); + } + if (anim.delay) { + addAnimationProperty(builder, "animation-delay", anim.delay); + } + if (anim.fillMode) { + addAnimationProperty(builder, "animation-fill-mode", anim.fillMode); + } + addAnimationProperty(builder, "animation-name", anim.name); + } + return builder.toString(); +} +function toTimeValue(num) { + return typeof num === "number" ? num + "ms" : num; +} +export { + createAnimationScope, + createTransitionScope, + renderTransition +}; diff --git a/.pnpm-store/v3/files/1f/20a1a6a4510059a7ba3dfbc1af277bb5d58cde35ab1ec36e8e86eac9a72dc4f7da06642b154c6c193acbb03a4ac021e3d775923456dfd82d442af10cbd165f b/.pnpm-store/v3/files/1f/20a1a6a4510059a7ba3dfbc1af277bb5d58cde35ab1ec36e8e86eac9a72dc4f7da06642b154c6c193acbb03a4ac021e3d775923456dfd82d442af10cbd165f new file mode 100644 index 00000000..afb8aa15 --- /dev/null +++ b/.pnpm-store/v3/files/1f/20a1a6a4510059a7ba3dfbc1af277bb5d58cde35ab1ec36e8e86eac9a72dc4f7da06642b154c6c193acbb03a4ac021e3d775923456dfd82d442af10cbd165f @@ -0,0 +1,5 @@ +// @ts-ignore +export { default as SEO } from "./SEO.astro"; + +// @ts-ignore +export * from "./SEO.astro"; diff --git a/.pnpm-store/v3/files/22/86654a9b5916384bf0841c2331e8d684946b751841083901db018cc613913f450d72847203a5d7e6af75c2b114d2462ab9c0c8c71222027189104556205be5 b/.pnpm-store/v3/files/22/86654a9b5916384bf0841c2331e8d684946b751841083901db018cc613913f450d72847203a5d7e6af75c2b114d2462ab9c0c8c71222027189104556205be5 new file mode 100644 index 00000000..00a446c7 --- /dev/null +++ b/.pnpm-store/v3/files/22/86654a9b5916384bf0841c2331e8d684946b751841083901db018cc613913f450d72847203a5d7e6af75c2b114d2462ab9c0c8c71222027189104556205be5 @@ -0,0 +1,7 @@ +/** + * This file is prebuilt from packages/astro/src/runtime/server/astro-island.ts + * Do not edit this directly, but instead edit that file and rerun the prebuild + * to generate this file. + */ +declare const _default: "(()=>{var v=Object.defineProperty;var A=(c,s,a)=>s in c?v(c,s,{enumerable:!0,configurable:!0,writable:!0,value:a}):c[s]=a;var l=(c,s,a)=>(A(c,typeof s!=\"symbol\"?s+\"\":s,a),a);var m;{let c={0:t=>y(t),1:t=>a(t),2:t=>new RegExp(t),3:t=>new Date(t),4:t=>new Map(a(t)),5:t=>new Set(a(t)),6:t=>BigInt(t),7:t=>new URL(t),8:t=>new Uint8Array(t),9:t=>new Uint16Array(t),10:t=>new Uint32Array(t)},s=t=>{let[e,n]=t;return e in c?c[e](n):void 0},a=t=>t.map(s),y=t=>typeof t!=\"object\"||t===null?t:Object.fromEntries(Object.entries(t).map(([e,n])=>[e,s(n)]));customElements.get(\"astro-island\")||customElements.define(\"astro-island\",(m=class extends HTMLElement{constructor(){super(...arguments);l(this,\"Component\");l(this,\"hydrator\");l(this,\"hydrate\",async()=>{var f;if(!this.hydrator||!this.isConnected)return;let e=(f=this.parentElement)==null?void 0:f.closest(\"astro-island[ssr]\");if(e){e.addEventListener(\"astro:hydrate\",this.hydrate,{once:!0});return}let n=this.querySelectorAll(\"astro-slot\"),r={},h=this.querySelectorAll(\"template[data-astro-template]\");for(let o of h){let i=o.closest(this.tagName);i!=null&&i.isSameNode(this)&&(r[o.getAttribute(\"data-astro-template\")||\"default\"]=o.innerHTML,o.remove())}for(let o of n){let i=o.closest(this.tagName);i!=null&&i.isSameNode(this)&&(r[o.getAttribute(\"name\")||\"default\"]=o.innerHTML)}let p;try{p=this.hasAttribute(\"props\")?y(JSON.parse(this.getAttribute(\"props\"))):{}}catch(o){let i=this.getAttribute(\"component-url\")||\"\",b=this.getAttribute(\"component-export\");throw b&&(i+=` (export ${b})`),console.error(`[hydrate] Error parsing props for component ${i}`,this.getAttribute(\"props\"),o),o}let d,u=this.hydrator(this);d=performance.now(),await u(this.Component,p,r,{client:this.getAttribute(\"client\")}),d&&this.setAttribute(\"client-render-time\",(performance.now()-d).toString()),this.removeAttribute(\"ssr\"),this.dispatchEvent(new CustomEvent(\"astro:hydrate\"))});l(this,\"unmount\",()=>{this.isConnected||this.dispatchEvent(new CustomEvent(\"astro:unmount\"))})}disconnectedCallback(){document.removeEventListener(\"astro:after-swap\",this.unmount),document.addEventListener(\"astro:after-swap\",this.unmount,{once:!0})}connectedCallback(){if(!this.hasAttribute(\"await-children\")||document.readyState===\"interactive\"||document.readyState===\"complete\")this.childrenConnectedCallback();else{let e=()=>{document.removeEventListener(\"DOMContentLoaded\",e),n.disconnect(),this.childrenConnectedCallback()},n=new MutationObserver(()=>{var r;((r=this.lastChild)==null?void 0:r.nodeType)===Node.COMMENT_NODE&&this.lastChild.nodeValue===\"astro:end\"&&(this.lastChild.remove(),e())});n.observe(this,{childList:!0}),document.addEventListener(\"DOMContentLoaded\",e)}}async childrenConnectedCallback(){let e=this.getAttribute(\"before-hydration-url\");e&&await import(e),this.start()}async start(){let e=JSON.parse(this.getAttribute(\"opts\")),n=this.getAttribute(\"client\");if(Astro[n]===void 0){window.addEventListener(`astro:${n}`,()=>this.start(),{once:!0});return}try{await Astro[n](async()=>{let r=this.getAttribute(\"renderer-url\"),[h,{default:p}]=await Promise.all([import(this.getAttribute(\"component-url\")),r?import(r):()=>()=>{}]),d=this.getAttribute(\"component-export\")||\"default\";if(!d.includes(\".\"))this.Component=h[d];else{this.Component=h;for(let u of d.split(\".\"))this.Component=this.Component[u]}return this.hydrator=p,this.hydrate},e,this)}catch(r){console.error(`[astro-island] Error hydrating ${this.getAttribute(\"component-url\")}`,r)}}attributeChangedCallback(){this.hydrate()}},l(m,\"observedAttributes\",[\"props\"]),m))}})();"; +export default _default; diff --git a/.pnpm-store/v3/files/22/89489137211a617f656d144bdc13f35a6edda8f1d54bed85ec4abfb0c7a23f5e5ec6467a6cc5362692b06e69a98c4d241f14717eeb87f08fe6097da49ab327 b/.pnpm-store/v3/files/22/89489137211a617f656d144bdc13f35a6edda8f1d54bed85ec4abfb0c7a23f5e5ec6467a6cc5362692b06e69a98c4d241f14717eeb87f08fe6097da49ab327 new file mode 100644 index 00000000..371be699 --- /dev/null +++ b/.pnpm-store/v3/files/22/89489137211a617f656d144bdc13f35a6edda8f1d54bed85ec4abfb0c7a23f5e5ec6467a6cc5362692b06e69a98c4d241f14717eeb87f08fe6097da49ab327 @@ -0,0 +1,33 @@ +{ + "name": "@medv/finder", + "version": "3.1.0", + "description": "CSS Selector Generator", + "type": "module", + "main": "finder.js", + "types": "finder.d.ts", + "files": [ + "*.ts", + "*.js" + ], + "scripts": { + "build": "tsc", + "test": "tsc && uvu", + "release": "release-it --access public" + }, + "devDependencies": { + "css.escape": "^1.5.1", + "jsdom": "^21.1.0", + "release-it": "^15.7.0", + "typescript": "4.9.5", + "uvu": "^0.5.6" + }, + "author": "Anton Medvedev ", + "license": "MIT", + "homepage": "https://github.com/antonmedv/finder", + "repository": "antonmedv/finder", + "keywords": [ + "css", + "selector", + "generator" + ] +} diff --git a/.pnpm-store/v3/files/23/6425533b425764e1abdc30d7b8645b64d189000a64334c30253c2fefb4fc3bad34fef1354eed8324556af5bcb23e43a08a43b305dcba2957f75407fa7e2bb0 b/.pnpm-store/v3/files/23/6425533b425764e1abdc30d7b8645b64d189000a64334c30253c2fefb4fc3bad34fef1354eed8324556af5bcb23e43a08a43b305dcba2957f75407fa7e2bb0 new file mode 100644 index 00000000..5a0e581a --- /dev/null +++ b/.pnpm-store/v3/files/23/6425533b425764e1abdc30d7b8645b64d189000a64334c30253c2fefb4fc3bad34fef1354eed8324556af5bcb23e43a08a43b305dcba2957f75407fa7e2bb0 @@ -0,0 +1,308 @@ +import { + attachTooltipToHighlight, + createHighlight, + getElementsPositionInDocument, + positionHighlight +} from "../utils/highlight.js"; +import { createWindowElement } from "../utils/window.js"; +import { a11y } from "./a11y.js"; +import { finder } from "@medv/finder"; +import { perf } from "./perf.js"; +const icon = ''; +const rules = [...a11y, ...perf]; +const dynamicAuditRuleKeys = ["title", "message"]; +function resolveAuditRule(rule, element) { + let resolved = { ...rule }; + for (const key of dynamicAuditRuleKeys) { + const value = rule[key]; + if (typeof value === "string") + continue; + resolved[key] = value(element); + } + return resolved; +} +var audit_default = { + id: "astro:audit", + name: "Audit", + icon, + async init(canvas, eventTarget) { + let audits = []; + await lint(); + document.addEventListener("astro:after-swap", async () => lint()); + document.addEventListener("astro:page-load", async () => refreshLintPositions); + function onPageClick(event) { + const target = event.target; + if (!target) + return; + if (!target.closest) + return; + if (target.closest("astro-dev-toolbar")) + return; + eventTarget.dispatchEvent( + new CustomEvent("toggle-app", { + detail: { + state: false + } + }) + ); + } + eventTarget.addEventListener("app-toggled", (event) => { + if (event.detail.state === true) { + document.addEventListener("click", onPageClick, true); + } else { + document.removeEventListener("click", onPageClick, true); + } + }); + async function lint() { + audits.forEach(({ highlightElement }) => { + highlightElement.remove(); + }); + audits = []; + canvas.getElementById("no-audit")?.remove(); + const selectorCache = /* @__PURE__ */ new Map(); + for (const rule of rules) { + const elements = selectorCache.get(rule.selector) ?? document.querySelectorAll(rule.selector); + let matches = []; + if (typeof rule.match === "undefined") { + matches = Array.from(elements); + } else { + for (const element of elements) { + if (await rule.match(element)) { + matches.push(element); + } + } + } + for (const element of matches) { + if (audits.some((audit) => audit.auditedElement === element)) + continue; + await createAuditProblem(rule, element); + } + } + if (audits.length > 0) { + eventTarget.dispatchEvent( + new CustomEvent("toggle-notification", { + detail: { + state: true + } + }) + ); + const auditListWindow = createWindowElement( + ` + + +
+

Audits

+ ${audits.length} problem${audits.length > 1 ? "s" : ""} found +
+
` + ); + const auditListUl = document.createElement("ul"); + auditListUl.id = "audit-list"; + audits.forEach((audit, index) => { + const resolvedRule = resolveAuditRule(audit.rule, audit.auditedElement); + const card = document.createElement("astro-dev-toolbar-card"); + card.shadowRoot.innerHTML = ` + `; + card.clickAction = () => { + audit.highlightElement.scrollIntoView(); + audit.highlightElement.focus(); + }; + const h3 = document.createElement("h3"); + h3.innerText = finder(audit.auditedElement); + card.appendChild(h3); + const div = document.createElement("div"); + const title = document.createElement("span"); + title.classList.add("audit-title"); + title.innerHTML = resolvedRule.title; + div.appendChild(title); + card.appendChild(div); + auditListUl.appendChild(card); + }); + auditListWindow.appendChild(auditListUl); + canvas.append(auditListWindow); + } else { + eventTarget.dispatchEvent( + new CustomEvent("toggle-notification", { + detail: { + state: false + } + }) + ); + const window2 = createWindowElement( + ` +
+

No accessibility or performance issues detected.

+
+

+ Nice work! This app scans the page and highlights common accessibility and performance issues for you, like a missing "alt" attribute on an image, or a image not using performant attributes. +

+ ` + ); + canvas.append(window2); + } + ["scroll", "resize"].forEach((event) => { + window.addEventListener(event, refreshLintPositions); + }); + } + function refreshLintPositions() { + const noAuditBlock = canvas.getElementById("no-audit"); + if (noAuditBlock) { + const devOverlayRect = document.querySelector("astro-dev-toolbar")?.shadowRoot.querySelector("#dev-toolbar-root")?.getBoundingClientRect(); + noAuditBlock.style.top = `${(devOverlayRect?.top ?? 0) - (devOverlayRect?.height ?? 0) - 16}px`; + } + audits.forEach(({ highlightElement, auditedElement }) => { + const rect = auditedElement.getBoundingClientRect(); + positionHighlight(highlightElement, rect); + }); + } + async function createAuditProblem(rule, originalElement) { + const computedStyle = window.getComputedStyle(originalElement); + const targetedElement = originalElement.children[0] || originalElement; + if (targetedElement.offsetParent === null || computedStyle.display === "none") { + return; + } + if (originalElement.nodeName === "IMG" && !originalElement.complete) { + return; + } + const rect = originalElement.getBoundingClientRect(); + const highlight = createHighlight(rect, "warning", { "data-audit-code": rule.code }); + const tooltip = buildAuditTooltip(rule, originalElement); + const { isFixed } = getElementsPositionInDocument(originalElement); + if (isFixed) { + tooltip.style.position = highlight.style.position = "fixed"; + } + attachTooltipToHighlight(highlight, tooltip, originalElement); + canvas.append(highlight); + audits.push({ + highlightElement: highlight, + auditedElement: originalElement, + rule + }); + } + function buildAuditTooltip(rule, element) { + const tooltip = document.createElement("astro-dev-toolbar-tooltip"); + const { title, message } = resolveAuditRule(rule, element); + tooltip.sections = [ + { + icon: "warning", + title: escapeHtml(title) + }, + { + content: escapeHtml(message) + } + ]; + const elementFile = element.getAttribute("data-astro-source-file"); + const elementPosition = element.getAttribute("data-astro-source-loc"); + if (elementFile) { + const elementFileWithPosition = elementFile + (elementPosition ? ":" + elementPosition : ""); + tooltip.sections.push({ + content: elementFileWithPosition.slice( + window.__astro_dev_toolbar__.root.length - 1 + // We want to keep the final slash, so minus one. + ), + clickDescription: "Click to go to file", + async clickAction() { + await fetch("/__open-in-editor?file=" + encodeURIComponent(elementFileWithPosition)); + } + }); + } + return tooltip; + } + function escapeHtml(unsafe) { + return unsafe.replace(/&/g, "&").replace(//g, ">").replace(/"/g, """).replace(/'/g, "'"); + } + } +}; +export { + audit_default as default +}; diff --git a/.pnpm-store/v3/files/23/c6cd34f4fa6ed216625dafefd26603b7d550a9b5efb6b4f639011d442119be5b023d2119c7a2153c2a6439523fce639d508c0cf90dbd4978e6d484152e0050 b/.pnpm-store/v3/files/23/c6cd34f4fa6ed216625dafefd26603b7d550a9b5efb6b4f639011d442119be5b023d2119c7a2153c2a6439523fce639d508c0cf90dbd4978e6d484152e0050 new file mode 100644 index 00000000..cca1ebb0 --- /dev/null +++ b/.pnpm-store/v3/files/23/c6cd34f4fa6ed216625dafefd26603b7d550a9b5efb6b4f639011d442119be5b023d2119c7a2153c2a6439523fce639d508c0cf90dbd4978e6d484152e0050 @@ -0,0 +1,4574 @@ +/* + @license + Rollup.js v4.12.0 + Fri, 16 Feb 2024 13:31:42 GMT - commit 0146b84be33a8416b4df4b9382549a7ca19dd64a + + https://github.com/rollup/rollup + + Released under the MIT License. +*/ +'use strict'; + +const rollup = require('./rollup.js'); +const require$$0$1 = require('fs'); +const require$$2 = require('util'); +const require$$1 = require('stream'); +const require$$0$2 = require('path'); +const require$$2$1 = require('os'); +const fseventsImporter = require('./fsevents-importer.js'); +const require$$0$3 = require('events'); + +var chokidar = {}; + +const fs$3 = require$$0$1; +const { Readable } = require$$1; +const sysPath$3 = require$$0$2; +const { promisify: promisify$3 } = require$$2; +const picomatch$1 = rollup.picomatch; + +const readdir$1 = promisify$3(fs$3.readdir); +const stat$3 = promisify$3(fs$3.stat); +const lstat$2 = promisify$3(fs$3.lstat); +const realpath$1 = promisify$3(fs$3.realpath); + +/** + * @typedef {Object} EntryInfo + * @property {String} path + * @property {String} fullPath + * @property {fs.Stats=} stats + * @property {fs.Dirent=} dirent + * @property {String} basename + */ + +const BANG$2 = '!'; +const RECURSIVE_ERROR_CODE = 'READDIRP_RECURSIVE_ERROR'; +const NORMAL_FLOW_ERRORS = new Set(['ENOENT', 'EPERM', 'EACCES', 'ELOOP', RECURSIVE_ERROR_CODE]); +const FILE_TYPE = 'files'; +const DIR_TYPE = 'directories'; +const FILE_DIR_TYPE = 'files_directories'; +const EVERYTHING_TYPE = 'all'; +const ALL_TYPES = [FILE_TYPE, DIR_TYPE, FILE_DIR_TYPE, EVERYTHING_TYPE]; + +const isNormalFlowError = error => NORMAL_FLOW_ERRORS.has(error.code); +const [maj, min] = process.versions.node.split('.').slice(0, 2).map(n => Number.parseInt(n, 10)); +const wantBigintFsStats = process.platform === 'win32' && (maj > 10 || (maj === 10 && min >= 5)); + +const normalizeFilter = filter => { + if (filter === undefined) return; + if (typeof filter === 'function') return filter; + + if (typeof filter === 'string') { + const glob = picomatch$1(filter.trim()); + return entry => glob(entry.basename); + } + + if (Array.isArray(filter)) { + const positive = []; + const negative = []; + for (const item of filter) { + const trimmed = item.trim(); + if (trimmed.charAt(0) === BANG$2) { + negative.push(picomatch$1(trimmed.slice(1))); + } else { + positive.push(picomatch$1(trimmed)); + } + } + + if (negative.length > 0) { + if (positive.length > 0) { + return entry => + positive.some(f => f(entry.basename)) && !negative.some(f => f(entry.basename)); + } + return entry => !negative.some(f => f(entry.basename)); + } + return entry => positive.some(f => f(entry.basename)); + } +}; + +class ReaddirpStream extends Readable { + static get defaultOptions() { + return { + root: '.', + /* eslint-disable no-unused-vars */ + fileFilter: (path) => true, + directoryFilter: (path) => true, + /* eslint-enable no-unused-vars */ + type: FILE_TYPE, + lstat: false, + depth: 2147483648, + alwaysStat: false + }; + } + + constructor(options = {}) { + super({ + objectMode: true, + autoDestroy: true, + highWaterMark: options.highWaterMark || 4096 + }); + const opts = { ...ReaddirpStream.defaultOptions, ...options }; + const { root, type } = opts; + + this._fileFilter = normalizeFilter(opts.fileFilter); + this._directoryFilter = normalizeFilter(opts.directoryFilter); + + const statMethod = opts.lstat ? lstat$2 : stat$3; + // Use bigint stats if it's windows and stat() supports options (node 10+). + if (wantBigintFsStats) { + this._stat = path => statMethod(path, { bigint: true }); + } else { + this._stat = statMethod; + } + + this._maxDepth = opts.depth; + this._wantsDir = [DIR_TYPE, FILE_DIR_TYPE, EVERYTHING_TYPE].includes(type); + this._wantsFile = [FILE_TYPE, FILE_DIR_TYPE, EVERYTHING_TYPE].includes(type); + this._wantsEverything = type === EVERYTHING_TYPE; + this._root = sysPath$3.resolve(root); + this._isDirent = ('Dirent' in fs$3) && !opts.alwaysStat; + this._statsProp = this._isDirent ? 'dirent' : 'stats'; + this._rdOptions = { encoding: 'utf8', withFileTypes: this._isDirent }; + + // Launch stream with one parent, the root dir. + this.parents = [this._exploreDir(root, 1)]; + this.reading = false; + this.parent = undefined; + } + + async _read(batch) { + if (this.reading) return; + this.reading = true; + + try { + while (!this.destroyed && batch > 0) { + const { path, depth, files = [] } = this.parent || {}; + + if (files.length > 0) { + const slice = files.splice(0, batch).map(dirent => this._formatEntry(dirent, path)); + for (const entry of await Promise.all(slice)) { + if (this.destroyed) return; + + const entryType = await this._getEntryType(entry); + if (entryType === 'directory' && this._directoryFilter(entry)) { + if (depth <= this._maxDepth) { + this.parents.push(this._exploreDir(entry.fullPath, depth + 1)); + } + + if (this._wantsDir) { + this.push(entry); + batch--; + } + } else if ((entryType === 'file' || this._includeAsFile(entry)) && this._fileFilter(entry)) { + if (this._wantsFile) { + this.push(entry); + batch--; + } + } + } + } else { + const parent = this.parents.pop(); + if (!parent) { + this.push(null); + break; + } + this.parent = await parent; + if (this.destroyed) return; + } + } + } catch (error) { + this.destroy(error); + } finally { + this.reading = false; + } + } + + async _exploreDir(path, depth) { + let files; + try { + files = await readdir$1(path, this._rdOptions); + } catch (error) { + this._onError(error); + } + return { files, depth, path }; + } + + async _formatEntry(dirent, path) { + let entry; + try { + const basename = this._isDirent ? dirent.name : dirent; + const fullPath = sysPath$3.resolve(sysPath$3.join(path, basename)); + entry = { path: sysPath$3.relative(this._root, fullPath), fullPath, basename }; + entry[this._statsProp] = this._isDirent ? dirent : await this._stat(fullPath); + } catch (err) { + this._onError(err); + } + return entry; + } + + _onError(err) { + if (isNormalFlowError(err) && !this.destroyed) { + this.emit('warn', err); + } else { + this.destroy(err); + } + } + + async _getEntryType(entry) { + // entry may be undefined, because a warning or an error were emitted + // and the statsProp is undefined + const stats = entry && entry[this._statsProp]; + if (!stats) { + return; + } + if (stats.isFile()) { + return 'file'; + } + if (stats.isDirectory()) { + return 'directory'; + } + if (stats && stats.isSymbolicLink()) { + const full = entry.fullPath; + try { + const entryRealPath = await realpath$1(full); + const entryRealPathStats = await lstat$2(entryRealPath); + if (entryRealPathStats.isFile()) { + return 'file'; + } + if (entryRealPathStats.isDirectory()) { + const len = entryRealPath.length; + if (full.startsWith(entryRealPath) && full.substr(len, 1) === sysPath$3.sep) { + const recursiveError = new Error( + `Circular symlink detected: "${full}" points to "${entryRealPath}"` + ); + recursiveError.code = RECURSIVE_ERROR_CODE; + return this._onError(recursiveError); + } + return 'directory'; + } + } catch (error) { + this._onError(error); + } + } + } + + _includeAsFile(entry) { + const stats = entry && entry[this._statsProp]; + + return stats && this._wantsEverything && !stats.isDirectory(); + } +} + +/** + * @typedef {Object} ReaddirpArguments + * @property {Function=} fileFilter + * @property {Function=} directoryFilter + * @property {String=} type + * @property {Number=} depth + * @property {String=} root + * @property {Boolean=} lstat + * @property {Boolean=} bigint + */ + +/** + * Main function which ends up calling readdirRec and reads all files and directories in given root recursively. + * @param {String} root Root directory + * @param {ReaddirpArguments=} options Options to specify root (start directory), filters and recursion depth + */ +const readdirp$1 = (root, options = {}) => { + let type = options.entryType || options.type; + if (type === 'both') type = FILE_DIR_TYPE; // backwards-compatibility + if (type) options.type = type; + if (!root) { + throw new Error('readdirp: root argument is required. Usage: readdirp(root, options)'); + } else if (typeof root !== 'string') { + throw new TypeError('readdirp: root argument must be a string. Usage: readdirp(root, options)'); + } else if (type && !ALL_TYPES.includes(type)) { + throw new Error(`readdirp: Invalid type passed. Use one of ${ALL_TYPES.join(', ')}`); + } + + options.root = root; + return new ReaddirpStream(options); +}; + +const readdirpPromise = (root, options = {}) => { + return new Promise((resolve, reject) => { + const files = []; + readdirp$1(root, options) + .on('data', entry => files.push(entry)) + .on('end', () => resolve(files)) + .on('error', error => reject(error)); + }); +}; + +readdirp$1.promise = readdirpPromise; +readdirp$1.ReaddirpStream = ReaddirpStream; +readdirp$1.default = readdirp$1; + +var readdirp_1 = readdirp$1; + +var anymatch$2 = {exports: {}}; + +/*! + * normalize-path + * + * Copyright (c) 2014-2018, Jon Schlinkert. + * Released under the MIT License. + */ + +var normalizePath$2 = function(path, stripTrailing) { + if (typeof path !== 'string') { + throw new TypeError('expected path to be a string'); + } + + if (path === '\\' || path === '/') return '/'; + + var len = path.length; + if (len <= 1) return path; + + // ensure that win32 namespaces has two leading slashes, so that the path is + // handled properly by the win32 version of path.parse() after being normalized + // https://msdn.microsoft.com/library/windows/desktop/aa365247(v=vs.85).aspx#namespaces + var prefix = ''; + if (len > 4 && path[3] === '\\') { + var ch = path[2]; + if ((ch === '?' || ch === '.') && path.slice(0, 2) === '\\\\') { + path = path.slice(2); + prefix = '//'; + } + } + + var segs = path.split(/[/\\]+/); + if (stripTrailing !== false && segs[segs.length - 1] === '') { + segs.pop(); + } + return prefix + segs.join('/'); +}; + +var anymatch_1 = anymatch$2.exports; + +Object.defineProperty(anymatch_1, "__esModule", { value: true }); + +const picomatch = rollup.picomatch; +const normalizePath$1 = normalizePath$2; + +/** + * @typedef {(testString: string) => boolean} AnymatchFn + * @typedef {string|RegExp|AnymatchFn} AnymatchPattern + * @typedef {AnymatchPattern|AnymatchPattern[]} AnymatchMatcher + */ +const BANG$1 = '!'; +const DEFAULT_OPTIONS = {returnIndex: false}; +const arrify$1 = (item) => Array.isArray(item) ? item : [item]; + +/** + * @param {AnymatchPattern} matcher + * @param {object} options + * @returns {AnymatchFn} + */ +const createPattern = (matcher, options) => { + if (typeof matcher === 'function') { + return matcher; + } + if (typeof matcher === 'string') { + const glob = picomatch(matcher, options); + return (string) => matcher === string || glob(string); + } + if (matcher instanceof RegExp) { + return (string) => matcher.test(string); + } + return (string) => false; +}; + +/** + * @param {Array} patterns + * @param {Array} negPatterns + * @param {String|Array} args + * @param {Boolean} returnIndex + * @returns {boolean|number} + */ +const matchPatterns = (patterns, negPatterns, args, returnIndex) => { + const isList = Array.isArray(args); + const _path = isList ? args[0] : args; + if (!isList && typeof _path !== 'string') { + throw new TypeError('anymatch: second argument must be a string: got ' + + Object.prototype.toString.call(_path)) + } + const path = normalizePath$1(_path, false); + + for (let index = 0; index < negPatterns.length; index++) { + const nglob = negPatterns[index]; + if (nglob(path)) { + return returnIndex ? -1 : false; + } + } + + const applied = isList && [path].concat(args.slice(1)); + for (let index = 0; index < patterns.length; index++) { + const pattern = patterns[index]; + if (isList ? pattern(...applied) : pattern(path)) { + return returnIndex ? index : true; + } + } + + return returnIndex ? -1 : false; +}; + +/** + * @param {AnymatchMatcher} matchers + * @param {Array|string} testString + * @param {object} options + * @returns {boolean|number|Function} + */ +const anymatch$1 = (matchers, testString, options = DEFAULT_OPTIONS) => { + if (matchers == null) { + throw new TypeError('anymatch: specify first argument'); + } + const opts = typeof options === 'boolean' ? {returnIndex: options} : options; + const returnIndex = opts.returnIndex || false; + + // Early cache for matchers. + const mtchers = arrify$1(matchers); + const negatedGlobs = mtchers + .filter(item => typeof item === 'string' && item.charAt(0) === BANG$1) + .map(item => item.slice(1)) + .map(item => picomatch(item, opts)); + const patterns = mtchers + .filter(item => typeof item !== 'string' || (typeof item === 'string' && item.charAt(0) !== BANG$1)) + .map(matcher => createPattern(matcher, opts)); + + if (testString == null) { + return (testString, ri = false) => { + const returnIndex = typeof ri === 'boolean' ? ri : false; + return matchPatterns(patterns, negatedGlobs, testString, returnIndex); + } + } + + return matchPatterns(patterns, negatedGlobs, testString, returnIndex); +}; + +anymatch$1.default = anymatch$1; +anymatch$2.exports = anymatch$1; + +var anymatchExports = anymatch$2.exports; + +/*! + * is-extglob + * + * Copyright (c) 2014-2016, Jon Schlinkert. + * Licensed under the MIT License. + */ + +var isExtglob$1 = function isExtglob(str) { + if (typeof str !== 'string' || str === '') { + return false; + } + + var match; + while ((match = /(\\).|([@?!+*]\(.*\))/g.exec(str))) { + if (match[2]) return true; + str = str.slice(match.index + match[0].length); + } + + return false; +}; + +/*! + * is-glob + * + * Copyright (c) 2014-2017, Jon Schlinkert. + * Released under the MIT License. + */ + +var isExtglob = isExtglob$1; +var chars = { '{': '}', '(': ')', '[': ']'}; +var strictCheck = function(str) { + if (str[0] === '!') { + return true; + } + var index = 0; + var pipeIndex = -2; + var closeSquareIndex = -2; + var closeCurlyIndex = -2; + var closeParenIndex = -2; + var backSlashIndex = -2; + while (index < str.length) { + if (str[index] === '*') { + return true; + } + + if (str[index + 1] === '?' && /[\].+)]/.test(str[index])) { + return true; + } + + if (closeSquareIndex !== -1 && str[index] === '[' && str[index + 1] !== ']') { + if (closeSquareIndex < index) { + closeSquareIndex = str.indexOf(']', index); + } + if (closeSquareIndex > index) { + if (backSlashIndex === -1 || backSlashIndex > closeSquareIndex) { + return true; + } + backSlashIndex = str.indexOf('\\', index); + if (backSlashIndex === -1 || backSlashIndex > closeSquareIndex) { + return true; + } + } + } + + if (closeCurlyIndex !== -1 && str[index] === '{' && str[index + 1] !== '}') { + closeCurlyIndex = str.indexOf('}', index); + if (closeCurlyIndex > index) { + backSlashIndex = str.indexOf('\\', index); + if (backSlashIndex === -1 || backSlashIndex > closeCurlyIndex) { + return true; + } + } + } + + if (closeParenIndex !== -1 && str[index] === '(' && str[index + 1] === '?' && /[:!=]/.test(str[index + 2]) && str[index + 3] !== ')') { + closeParenIndex = str.indexOf(')', index); + if (closeParenIndex > index) { + backSlashIndex = str.indexOf('\\', index); + if (backSlashIndex === -1 || backSlashIndex > closeParenIndex) { + return true; + } + } + } + + if (pipeIndex !== -1 && str[index] === '(' && str[index + 1] !== '|') { + if (pipeIndex < index) { + pipeIndex = str.indexOf('|', index); + } + if (pipeIndex !== -1 && str[pipeIndex + 1] !== ')') { + closeParenIndex = str.indexOf(')', pipeIndex); + if (closeParenIndex > pipeIndex) { + backSlashIndex = str.indexOf('\\', pipeIndex); + if (backSlashIndex === -1 || backSlashIndex > closeParenIndex) { + return true; + } + } + } + } + + if (str[index] === '\\') { + var open = str[index + 1]; + index += 2; + var close = chars[open]; + + if (close) { + var n = str.indexOf(close, index); + if (n !== -1) { + index = n + 1; + } + } + + if (str[index] === '!') { + return true; + } + } else { + index++; + } + } + return false; +}; + +var relaxedCheck = function(str) { + if (str[0] === '!') { + return true; + } + var index = 0; + while (index < str.length) { + if (/[*?{}()[\]]/.test(str[index])) { + return true; + } + + if (str[index] === '\\') { + var open = str[index + 1]; + index += 2; + var close = chars[open]; + + if (close) { + var n = str.indexOf(close, index); + if (n !== -1) { + index = n + 1; + } + } + + if (str[index] === '!') { + return true; + } + } else { + index++; + } + } + return false; +}; + +var isGlob$2 = function isGlob(str, options) { + if (typeof str !== 'string' || str === '') { + return false; + } + + if (isExtglob(str)) { + return true; + } + + var check = strictCheck; + + // optionally relax check + if (options && options.strict === false) { + check = relaxedCheck; + } + + return check(str); +}; + +var isGlob$1 = isGlob$2; +var pathPosixDirname = require$$0$2.posix.dirname; +var isWin32 = require$$2$1.platform() === 'win32'; + +var slash = '/'; +var backslash = /\\/g; +var enclosure = /[\{\[].*[\}\]]$/; +var globby = /(^|[^\\])([\{\[]|\([^\)]+$)/; +var escaped = /\\([\!\*\?\|\[\]\(\)\{\}])/g; + +/** + * @param {string} str + * @param {Object} opts + * @param {boolean} [opts.flipBackslashes=true] + * @returns {string} + */ +var globParent$1 = function globParent(str, opts) { + var options = Object.assign({ flipBackslashes: true }, opts); + + // flip windows path separators + if (options.flipBackslashes && isWin32 && str.indexOf(slash) < 0) { + str = str.replace(backslash, slash); + } + + // special case for strings ending in enclosure containing path separator + if (enclosure.test(str)) { + str += slash; + } + + // preserves full path in case of trailing path separator + str += 'a'; + + // remove path parts that are globby + do { + str = pathPosixDirname(str); + } while (isGlob$1(str) || globby.test(str)); + + // remove escape chars and return result + return str.replace(escaped, '$1'); +}; + +var utils$3 = {}; + +(function (exports) { + + exports.isInteger = num => { + if (typeof num === 'number') { + return Number.isInteger(num); + } + if (typeof num === 'string' && num.trim() !== '') { + return Number.isInteger(Number(num)); + } + return false; + }; + + /** + * Find a node of the given type + */ + + exports.find = (node, type) => node.nodes.find(node => node.type === type); + + /** + * Find a node of the given type + */ + + exports.exceedsLimit = (min, max, step = 1, limit) => { + if (limit === false) return false; + if (!exports.isInteger(min) || !exports.isInteger(max)) return false; + return ((Number(max) - Number(min)) / Number(step)) >= limit; + }; + + /** + * Escape the given node with '\\' before node.value + */ + + exports.escapeNode = (block, n = 0, type) => { + let node = block.nodes[n]; + if (!node) return; + + if ((type && node.type === type) || node.type === 'open' || node.type === 'close') { + if (node.escaped !== true) { + node.value = '\\' + node.value; + node.escaped = true; + } + } + }; + + /** + * Returns true if the given brace node should be enclosed in literal braces + */ + + exports.encloseBrace = node => { + if (node.type !== 'brace') return false; + if ((node.commas >> 0 + node.ranges >> 0) === 0) { + node.invalid = true; + return true; + } + return false; + }; + + /** + * Returns true if a brace node is invalid. + */ + + exports.isInvalidBrace = block => { + if (block.type !== 'brace') return false; + if (block.invalid === true || block.dollar) return true; + if ((block.commas >> 0 + block.ranges >> 0) === 0) { + block.invalid = true; + return true; + } + if (block.open !== true || block.close !== true) { + block.invalid = true; + return true; + } + return false; + }; + + /** + * Returns true if a node is an open or close node + */ + + exports.isOpenOrClose = node => { + if (node.type === 'open' || node.type === 'close') { + return true; + } + return node.open === true || node.close === true; + }; + + /** + * Reduce an array of text nodes. + */ + + exports.reduce = nodes => nodes.reduce((acc, node) => { + if (node.type === 'text') acc.push(node.value); + if (node.type === 'range') node.type = 'text'; + return acc; + }, []); + + /** + * Flatten an array + */ + + exports.flatten = (...args) => { + const result = []; + const flat = arr => { + for (let i = 0; i < arr.length; i++) { + let ele = arr[i]; + Array.isArray(ele) ? flat(ele) : ele !== void 0 && result.push(ele); + } + return result; + }; + flat(args); + return result; + }; +} (utils$3)); + +const utils$2 = utils$3; + +var stringify$4 = (ast, options = {}) => { + let stringify = (node, parent = {}) => { + let invalidBlock = options.escapeInvalid && utils$2.isInvalidBrace(parent); + let invalidNode = node.invalid === true && options.escapeInvalid === true; + let output = ''; + + if (node.value) { + if ((invalidBlock || invalidNode) && utils$2.isOpenOrClose(node)) { + return '\\' + node.value; + } + return node.value; + } + + if (node.value) { + return node.value; + } + + if (node.nodes) { + for (let child of node.nodes) { + output += stringify(child); + } + } + return output; + }; + + return stringify(ast); +}; + +/*! + * is-number + * + * Copyright (c) 2014-present, Jon Schlinkert. + * Released under the MIT License. + */ + +var isNumber$2 = function(num) { + if (typeof num === 'number') { + return num - num === 0; + } + if (typeof num === 'string' && num.trim() !== '') { + return Number.isFinite ? Number.isFinite(+num) : isFinite(+num); + } + return false; +}; + +/*! + * to-regex-range + * + * Copyright (c) 2015-present, Jon Schlinkert. + * Released under the MIT License. + */ + +const isNumber$1 = isNumber$2; + +const toRegexRange$1 = (min, max, options) => { + if (isNumber$1(min) === false) { + throw new TypeError('toRegexRange: expected the first argument to be a number'); + } + + if (max === void 0 || min === max) { + return String(min); + } + + if (isNumber$1(max) === false) { + throw new TypeError('toRegexRange: expected the second argument to be a number.'); + } + + let opts = { relaxZeros: true, ...options }; + if (typeof opts.strictZeros === 'boolean') { + opts.relaxZeros = opts.strictZeros === false; + } + + let relax = String(opts.relaxZeros); + let shorthand = String(opts.shorthand); + let capture = String(opts.capture); + let wrap = String(opts.wrap); + let cacheKey = min + ':' + max + '=' + relax + shorthand + capture + wrap; + + if (toRegexRange$1.cache.hasOwnProperty(cacheKey)) { + return toRegexRange$1.cache[cacheKey].result; + } + + let a = Math.min(min, max); + let b = Math.max(min, max); + + if (Math.abs(a - b) === 1) { + let result = min + '|' + max; + if (opts.capture) { + return `(${result})`; + } + if (opts.wrap === false) { + return result; + } + return `(?:${result})`; + } + + let isPadded = hasPadding(min) || hasPadding(max); + let state = { min, max, a, b }; + let positives = []; + let negatives = []; + + if (isPadded) { + state.isPadded = isPadded; + state.maxLen = String(state.max).length; + } + + if (a < 0) { + let newMin = b < 0 ? Math.abs(b) : 1; + negatives = splitToPatterns(newMin, Math.abs(a), state, opts); + a = state.a = 0; + } + + if (b >= 0) { + positives = splitToPatterns(a, b, state, opts); + } + + state.negatives = negatives; + state.positives = positives; + state.result = collatePatterns(negatives, positives); + + if (opts.capture === true) { + state.result = `(${state.result})`; + } else if (opts.wrap !== false && (positives.length + negatives.length) > 1) { + state.result = `(?:${state.result})`; + } + + toRegexRange$1.cache[cacheKey] = state; + return state.result; +}; + +function collatePatterns(neg, pos, options) { + let onlyNegative = filterPatterns(neg, pos, '-', false) || []; + let onlyPositive = filterPatterns(pos, neg, '', false) || []; + let intersected = filterPatterns(neg, pos, '-?', true) || []; + let subpatterns = onlyNegative.concat(intersected).concat(onlyPositive); + return subpatterns.join('|'); +} + +function splitToRanges(min, max) { + let nines = 1; + let zeros = 1; + + let stop = countNines(min, nines); + let stops = new Set([max]); + + while (min <= stop && stop <= max) { + stops.add(stop); + nines += 1; + stop = countNines(min, nines); + } + + stop = countZeros(max + 1, zeros) - 1; + + while (min < stop && stop <= max) { + stops.add(stop); + zeros += 1; + stop = countZeros(max + 1, zeros) - 1; + } + + stops = [...stops]; + stops.sort(compare); + return stops; +} + +/** + * Convert a range to a regex pattern + * @param {Number} `start` + * @param {Number} `stop` + * @return {String} + */ + +function rangeToPattern(start, stop, options) { + if (start === stop) { + return { pattern: start, count: [], digits: 0 }; + } + + let zipped = zip(start, stop); + let digits = zipped.length; + let pattern = ''; + let count = 0; + + for (let i = 0; i < digits; i++) { + let [startDigit, stopDigit] = zipped[i]; + + if (startDigit === stopDigit) { + pattern += startDigit; + + } else if (startDigit !== '0' || stopDigit !== '9') { + pattern += toCharacterClass(startDigit, stopDigit); + + } else { + count++; + } + } + + if (count) { + pattern += options.shorthand === true ? '\\d' : '[0-9]'; + } + + return { pattern, count: [count], digits }; +} + +function splitToPatterns(min, max, tok, options) { + let ranges = splitToRanges(min, max); + let tokens = []; + let start = min; + let prev; + + for (let i = 0; i < ranges.length; i++) { + let max = ranges[i]; + let obj = rangeToPattern(String(start), String(max), options); + let zeros = ''; + + if (!tok.isPadded && prev && prev.pattern === obj.pattern) { + if (prev.count.length > 1) { + prev.count.pop(); + } + + prev.count.push(obj.count[0]); + prev.string = prev.pattern + toQuantifier(prev.count); + start = max + 1; + continue; + } + + if (tok.isPadded) { + zeros = padZeros(max, tok, options); + } + + obj.string = zeros + obj.pattern + toQuantifier(obj.count); + tokens.push(obj); + start = max + 1; + prev = obj; + } + + return tokens; +} + +function filterPatterns(arr, comparison, prefix, intersection, options) { + let result = []; + + for (let ele of arr) { + let { string } = ele; + + // only push if _both_ are negative... + if (!intersection && !contains(comparison, 'string', string)) { + result.push(prefix + string); + } + + // or _both_ are positive + if (intersection && contains(comparison, 'string', string)) { + result.push(prefix + string); + } + } + return result; +} + +/** + * Zip strings + */ + +function zip(a, b) { + let arr = []; + for (let i = 0; i < a.length; i++) arr.push([a[i], b[i]]); + return arr; +} + +function compare(a, b) { + return a > b ? 1 : b > a ? -1 : 0; +} + +function contains(arr, key, val) { + return arr.some(ele => ele[key] === val); +} + +function countNines(min, len) { + return Number(String(min).slice(0, -len) + '9'.repeat(len)); +} + +function countZeros(integer, zeros) { + return integer - (integer % Math.pow(10, zeros)); +} + +function toQuantifier(digits) { + let [start = 0, stop = ''] = digits; + if (stop || start > 1) { + return `{${start + (stop ? ',' + stop : '')}}`; + } + return ''; +} + +function toCharacterClass(a, b, options) { + return `[${a}${(b - a === 1) ? '' : '-'}${b}]`; +} + +function hasPadding(str) { + return /^-?(0+)\d/.test(str); +} + +function padZeros(value, tok, options) { + if (!tok.isPadded) { + return value; + } + + let diff = Math.abs(tok.maxLen - String(value).length); + let relax = options.relaxZeros !== false; + + switch (diff) { + case 0: + return ''; + case 1: + return relax ? '0?' : '0'; + case 2: + return relax ? '0{0,2}' : '00'; + default: { + return relax ? `0{0,${diff}}` : `0{${diff}}`; + } + } +} + +/** + * Cache + */ + +toRegexRange$1.cache = {}; +toRegexRange$1.clearCache = () => (toRegexRange$1.cache = {}); + +/** + * Expose `toRegexRange` + */ + +var toRegexRange_1 = toRegexRange$1; + +/*! + * fill-range + * + * Copyright (c) 2014-present, Jon Schlinkert. + * Licensed under the MIT License. + */ + +const util = require$$2; +const toRegexRange = toRegexRange_1; + +const isObject = val => val !== null && typeof val === 'object' && !Array.isArray(val); + +const transform = toNumber => { + return value => toNumber === true ? Number(value) : String(value); +}; + +const isValidValue = value => { + return typeof value === 'number' || (typeof value === 'string' && value !== ''); +}; + +const isNumber = num => Number.isInteger(+num); + +const zeros = input => { + let value = `${input}`; + let index = -1; + if (value[0] === '-') value = value.slice(1); + if (value === '0') return false; + while (value[++index] === '0'); + return index > 0; +}; + +const stringify$3 = (start, end, options) => { + if (typeof start === 'string' || typeof end === 'string') { + return true; + } + return options.stringify === true; +}; + +const pad = (input, maxLength, toNumber) => { + if (maxLength > 0) { + let dash = input[0] === '-' ? '-' : ''; + if (dash) input = input.slice(1); + input = (dash + input.padStart(dash ? maxLength - 1 : maxLength, '0')); + } + if (toNumber === false) { + return String(input); + } + return input; +}; + +const toMaxLen = (input, maxLength) => { + let negative = input[0] === '-' ? '-' : ''; + if (negative) { + input = input.slice(1); + maxLength--; + } + while (input.length < maxLength) input = '0' + input; + return negative ? ('-' + input) : input; +}; + +const toSequence = (parts, options) => { + parts.negatives.sort((a, b) => a < b ? -1 : a > b ? 1 : 0); + parts.positives.sort((a, b) => a < b ? -1 : a > b ? 1 : 0); + + let prefix = options.capture ? '' : '?:'; + let positives = ''; + let negatives = ''; + let result; + + if (parts.positives.length) { + positives = parts.positives.join('|'); + } + + if (parts.negatives.length) { + negatives = `-(${prefix}${parts.negatives.join('|')})`; + } + + if (positives && negatives) { + result = `${positives}|${negatives}`; + } else { + result = positives || negatives; + } + + if (options.wrap) { + return `(${prefix}${result})`; + } + + return result; +}; + +const toRange = (a, b, isNumbers, options) => { + if (isNumbers) { + return toRegexRange(a, b, { wrap: false, ...options }); + } + + let start = String.fromCharCode(a); + if (a === b) return start; + + let stop = String.fromCharCode(b); + return `[${start}-${stop}]`; +}; + +const toRegex = (start, end, options) => { + if (Array.isArray(start)) { + let wrap = options.wrap === true; + let prefix = options.capture ? '' : '?:'; + return wrap ? `(${prefix}${start.join('|')})` : start.join('|'); + } + return toRegexRange(start, end, options); +}; + +const rangeError = (...args) => { + return new RangeError('Invalid range arguments: ' + util.inspect(...args)); +}; + +const invalidRange = (start, end, options) => { + if (options.strictRanges === true) throw rangeError([start, end]); + return []; +}; + +const invalidStep = (step, options) => { + if (options.strictRanges === true) { + throw new TypeError(`Expected step "${step}" to be a number`); + } + return []; +}; + +const fillNumbers = (start, end, step = 1, options = {}) => { + let a = Number(start); + let b = Number(end); + + if (!Number.isInteger(a) || !Number.isInteger(b)) { + if (options.strictRanges === true) throw rangeError([start, end]); + return []; + } + + // fix negative zero + if (a === 0) a = 0; + if (b === 0) b = 0; + + let descending = a > b; + let startString = String(start); + let endString = String(end); + let stepString = String(step); + step = Math.max(Math.abs(step), 1); + + let padded = zeros(startString) || zeros(endString) || zeros(stepString); + let maxLen = padded ? Math.max(startString.length, endString.length, stepString.length) : 0; + let toNumber = padded === false && stringify$3(start, end, options) === false; + let format = options.transform || transform(toNumber); + + if (options.toRegex && step === 1) { + return toRange(toMaxLen(start, maxLen), toMaxLen(end, maxLen), true, options); + } + + let parts = { negatives: [], positives: [] }; + let push = num => parts[num < 0 ? 'negatives' : 'positives'].push(Math.abs(num)); + let range = []; + let index = 0; + + while (descending ? a >= b : a <= b) { + if (options.toRegex === true && step > 1) { + push(a); + } else { + range.push(pad(format(a, index), maxLen, toNumber)); + } + a = descending ? a - step : a + step; + index++; + } + + if (options.toRegex === true) { + return step > 1 + ? toSequence(parts, options) + : toRegex(range, null, { wrap: false, ...options }); + } + + return range; +}; + +const fillLetters = (start, end, step = 1, options = {}) => { + if ((!isNumber(start) && start.length > 1) || (!isNumber(end) && end.length > 1)) { + return invalidRange(start, end, options); + } + + + let format = options.transform || (val => String.fromCharCode(val)); + let a = `${start}`.charCodeAt(0); + let b = `${end}`.charCodeAt(0); + + let descending = a > b; + let min = Math.min(a, b); + let max = Math.max(a, b); + + if (options.toRegex && step === 1) { + return toRange(min, max, false, options); + } + + let range = []; + let index = 0; + + while (descending ? a >= b : a <= b) { + range.push(format(a, index)); + a = descending ? a - step : a + step; + index++; + } + + if (options.toRegex === true) { + return toRegex(range, null, { wrap: false, options }); + } + + return range; +}; + +const fill$2 = (start, end, step, options = {}) => { + if (end == null && isValidValue(start)) { + return [start]; + } + + if (!isValidValue(start) || !isValidValue(end)) { + return invalidRange(start, end, options); + } + + if (typeof step === 'function') { + return fill$2(start, end, 1, { transform: step }); + } + + if (isObject(step)) { + return fill$2(start, end, 0, step); + } + + let opts = { ...options }; + if (opts.capture === true) opts.wrap = true; + step = step || opts.step || 1; + + if (!isNumber(step)) { + if (step != null && !isObject(step)) return invalidStep(step, opts); + return fill$2(start, end, 1, step); + } + + if (isNumber(start) && isNumber(end)) { + return fillNumbers(start, end, step, opts); + } + + return fillLetters(start, end, Math.max(Math.abs(step), 1), opts); +}; + +var fillRange = fill$2; + +const fill$1 = fillRange; +const utils$1 = utils$3; + +const compile$1 = (ast, options = {}) => { + let walk = (node, parent = {}) => { + let invalidBlock = utils$1.isInvalidBrace(parent); + let invalidNode = node.invalid === true && options.escapeInvalid === true; + let invalid = invalidBlock === true || invalidNode === true; + let prefix = options.escapeInvalid === true ? '\\' : ''; + let output = ''; + + if (node.isOpen === true) { + return prefix + node.value; + } + if (node.isClose === true) { + return prefix + node.value; + } + + if (node.type === 'open') { + return invalid ? (prefix + node.value) : '('; + } + + if (node.type === 'close') { + return invalid ? (prefix + node.value) : ')'; + } + + if (node.type === 'comma') { + return node.prev.type === 'comma' ? '' : (invalid ? node.value : '|'); + } + + if (node.value) { + return node.value; + } + + if (node.nodes && node.ranges > 0) { + let args = utils$1.reduce(node.nodes); + let range = fill$1(...args, { ...options, wrap: false, toRegex: true }); + + if (range.length !== 0) { + return args.length > 1 && range.length > 1 ? `(${range})` : range; + } + } + + if (node.nodes) { + for (let child of node.nodes) { + output += walk(child, node); + } + } + return output; + }; + + return walk(ast); +}; + +var compile_1 = compile$1; + +const fill = fillRange; +const stringify$2 = stringify$4; +const utils = utils$3; + +const append = (queue = '', stash = '', enclose = false) => { + let result = []; + + queue = [].concat(queue); + stash = [].concat(stash); + + if (!stash.length) return queue; + if (!queue.length) { + return enclose ? utils.flatten(stash).map(ele => `{${ele}}`) : stash; + } + + for (let item of queue) { + if (Array.isArray(item)) { + for (let value of item) { + result.push(append(value, stash, enclose)); + } + } else { + for (let ele of stash) { + if (enclose === true && typeof ele === 'string') ele = `{${ele}}`; + result.push(Array.isArray(ele) ? append(item, ele, enclose) : (item + ele)); + } + } + } + return utils.flatten(result); +}; + +const expand$1 = (ast, options = {}) => { + let rangeLimit = options.rangeLimit === void 0 ? 1000 : options.rangeLimit; + + let walk = (node, parent = {}) => { + node.queue = []; + + let p = parent; + let q = parent.queue; + + while (p.type !== 'brace' && p.type !== 'root' && p.parent) { + p = p.parent; + q = p.queue; + } + + if (node.invalid || node.dollar) { + q.push(append(q.pop(), stringify$2(node, options))); + return; + } + + if (node.type === 'brace' && node.invalid !== true && node.nodes.length === 2) { + q.push(append(q.pop(), ['{}'])); + return; + } + + if (node.nodes && node.ranges > 0) { + let args = utils.reduce(node.nodes); + + if (utils.exceedsLimit(...args, options.step, rangeLimit)) { + throw new RangeError('expanded array length exceeds range limit. Use options.rangeLimit to increase or disable the limit.'); + } + + let range = fill(...args, options); + if (range.length === 0) { + range = stringify$2(node, options); + } + + q.push(append(q.pop(), range)); + node.nodes = []; + return; + } + + let enclose = utils.encloseBrace(node); + let queue = node.queue; + let block = node; + + while (block.type !== 'brace' && block.type !== 'root' && block.parent) { + block = block.parent; + queue = block.queue; + } + + for (let i = 0; i < node.nodes.length; i++) { + let child = node.nodes[i]; + + if (child.type === 'comma' && node.type === 'brace') { + if (i === 1) queue.push(''); + queue.push(''); + continue; + } + + if (child.type === 'close') { + q.push(append(q.pop(), queue, enclose)); + continue; + } + + if (child.value && child.type !== 'open') { + queue.push(append(queue.pop(), child.value)); + continue; + } + + if (child.nodes) { + walk(child, node); + } + } + + return queue; + }; + + return utils.flatten(walk(ast)); +}; + +var expand_1 = expand$1; + +var constants$1 = { + MAX_LENGTH: 1024 * 64, + + // Digits + CHAR_0: '0', /* 0 */ + CHAR_9: '9', /* 9 */ + + // Alphabet chars. + CHAR_UPPERCASE_A: 'A', /* A */ + CHAR_LOWERCASE_A: 'a', /* a */ + CHAR_UPPERCASE_Z: 'Z', /* Z */ + CHAR_LOWERCASE_Z: 'z', /* z */ + + CHAR_LEFT_PARENTHESES: '(', /* ( */ + CHAR_RIGHT_PARENTHESES: ')', /* ) */ + + CHAR_ASTERISK: '*', /* * */ + + // Non-alphabetic chars. + CHAR_AMPERSAND: '&', /* & */ + CHAR_AT: '@', /* @ */ + CHAR_BACKSLASH: '\\', /* \ */ + CHAR_BACKTICK: '`', /* ` */ + CHAR_CARRIAGE_RETURN: '\r', /* \r */ + CHAR_CIRCUMFLEX_ACCENT: '^', /* ^ */ + CHAR_COLON: ':', /* : */ + CHAR_COMMA: ',', /* , */ + CHAR_DOLLAR: '$', /* . */ + CHAR_DOT: '.', /* . */ + CHAR_DOUBLE_QUOTE: '"', /* " */ + CHAR_EQUAL: '=', /* = */ + CHAR_EXCLAMATION_MARK: '!', /* ! */ + CHAR_FORM_FEED: '\f', /* \f */ + CHAR_FORWARD_SLASH: '/', /* / */ + CHAR_HASH: '#', /* # */ + CHAR_HYPHEN_MINUS: '-', /* - */ + CHAR_LEFT_ANGLE_BRACKET: '<', /* < */ + CHAR_LEFT_CURLY_BRACE: '{', /* { */ + CHAR_LEFT_SQUARE_BRACKET: '[', /* [ */ + CHAR_LINE_FEED: '\n', /* \n */ + CHAR_NO_BREAK_SPACE: '\u00A0', /* \u00A0 */ + CHAR_PERCENT: '%', /* % */ + CHAR_PLUS: '+', /* + */ + CHAR_QUESTION_MARK: '?', /* ? */ + CHAR_RIGHT_ANGLE_BRACKET: '>', /* > */ + CHAR_RIGHT_CURLY_BRACE: '}', /* } */ + CHAR_RIGHT_SQUARE_BRACKET: ']', /* ] */ + CHAR_SEMICOLON: ';', /* ; */ + CHAR_SINGLE_QUOTE: '\'', /* ' */ + CHAR_SPACE: ' ', /* */ + CHAR_TAB: '\t', /* \t */ + CHAR_UNDERSCORE: '_', /* _ */ + CHAR_VERTICAL_LINE: '|', /* | */ + CHAR_ZERO_WIDTH_NOBREAK_SPACE: '\uFEFF' /* \uFEFF */ +}; + +const stringify$1 = stringify$4; + +/** + * Constants + */ + +const { + MAX_LENGTH, + CHAR_BACKSLASH, /* \ */ + CHAR_BACKTICK, /* ` */ + CHAR_COMMA, /* , */ + CHAR_DOT, /* . */ + CHAR_LEFT_PARENTHESES, /* ( */ + CHAR_RIGHT_PARENTHESES, /* ) */ + CHAR_LEFT_CURLY_BRACE, /* { */ + CHAR_RIGHT_CURLY_BRACE, /* } */ + CHAR_LEFT_SQUARE_BRACKET, /* [ */ + CHAR_RIGHT_SQUARE_BRACKET, /* ] */ + CHAR_DOUBLE_QUOTE, /* " */ + CHAR_SINGLE_QUOTE, /* ' */ + CHAR_NO_BREAK_SPACE, + CHAR_ZERO_WIDTH_NOBREAK_SPACE +} = constants$1; + +/** + * parse + */ + +const parse$1 = (input, options = {}) => { + if (typeof input !== 'string') { + throw new TypeError('Expected a string'); + } + + let opts = options || {}; + let max = typeof opts.maxLength === 'number' ? Math.min(MAX_LENGTH, opts.maxLength) : MAX_LENGTH; + if (input.length > max) { + throw new SyntaxError(`Input length (${input.length}), exceeds max characters (${max})`); + } + + let ast = { type: 'root', input, nodes: [] }; + let stack = [ast]; + let block = ast; + let prev = ast; + let brackets = 0; + let length = input.length; + let index = 0; + let depth = 0; + let value; + + /** + * Helpers + */ + + const advance = () => input[index++]; + const push = node => { + if (node.type === 'text' && prev.type === 'dot') { + prev.type = 'text'; + } + + if (prev && prev.type === 'text' && node.type === 'text') { + prev.value += node.value; + return; + } + + block.nodes.push(node); + node.parent = block; + node.prev = prev; + prev = node; + return node; + }; + + push({ type: 'bos' }); + + while (index < length) { + block = stack[stack.length - 1]; + value = advance(); + + /** + * Invalid chars + */ + + if (value === CHAR_ZERO_WIDTH_NOBREAK_SPACE || value === CHAR_NO_BREAK_SPACE) { + continue; + } + + /** + * Escaped chars + */ + + if (value === CHAR_BACKSLASH) { + push({ type: 'text', value: (options.keepEscaping ? value : '') + advance() }); + continue; + } + + /** + * Right square bracket (literal): ']' + */ + + if (value === CHAR_RIGHT_SQUARE_BRACKET) { + push({ type: 'text', value: '\\' + value }); + continue; + } + + /** + * Left square bracket: '[' + */ + + if (value === CHAR_LEFT_SQUARE_BRACKET) { + brackets++; + let next; + + while (index < length && (next = advance())) { + value += next; + + if (next === CHAR_LEFT_SQUARE_BRACKET) { + brackets++; + continue; + } + + if (next === CHAR_BACKSLASH) { + value += advance(); + continue; + } + + if (next === CHAR_RIGHT_SQUARE_BRACKET) { + brackets--; + + if (brackets === 0) { + break; + } + } + } + + push({ type: 'text', value }); + continue; + } + + /** + * Parentheses + */ + + if (value === CHAR_LEFT_PARENTHESES) { + block = push({ type: 'paren', nodes: [] }); + stack.push(block); + push({ type: 'text', value }); + continue; + } + + if (value === CHAR_RIGHT_PARENTHESES) { + if (block.type !== 'paren') { + push({ type: 'text', value }); + continue; + } + block = stack.pop(); + push({ type: 'text', value }); + block = stack[stack.length - 1]; + continue; + } + + /** + * Quotes: '|"|` + */ + + if (value === CHAR_DOUBLE_QUOTE || value === CHAR_SINGLE_QUOTE || value === CHAR_BACKTICK) { + let open = value; + let next; + + if (options.keepQuotes !== true) { + value = ''; + } + + while (index < length && (next = advance())) { + if (next === CHAR_BACKSLASH) { + value += next + advance(); + continue; + } + + if (next === open) { + if (options.keepQuotes === true) value += next; + break; + } + + value += next; + } + + push({ type: 'text', value }); + continue; + } + + /** + * Left curly brace: '{' + */ + + if (value === CHAR_LEFT_CURLY_BRACE) { + depth++; + + let dollar = prev.value && prev.value.slice(-1) === '$' || block.dollar === true; + let brace = { + type: 'brace', + open: true, + close: false, + dollar, + depth, + commas: 0, + ranges: 0, + nodes: [] + }; + + block = push(brace); + stack.push(block); + push({ type: 'open', value }); + continue; + } + + /** + * Right curly brace: '}' + */ + + if (value === CHAR_RIGHT_CURLY_BRACE) { + if (block.type !== 'brace') { + push({ type: 'text', value }); + continue; + } + + let type = 'close'; + block = stack.pop(); + block.close = true; + + push({ type, value }); + depth--; + + block = stack[stack.length - 1]; + continue; + } + + /** + * Comma: ',' + */ + + if (value === CHAR_COMMA && depth > 0) { + if (block.ranges > 0) { + block.ranges = 0; + let open = block.nodes.shift(); + block.nodes = [open, { type: 'text', value: stringify$1(block) }]; + } + + push({ type: 'comma', value }); + block.commas++; + continue; + } + + /** + * Dot: '.' + */ + + if (value === CHAR_DOT && depth > 0 && block.commas === 0) { + let siblings = block.nodes; + + if (depth === 0 || siblings.length === 0) { + push({ type: 'text', value }); + continue; + } + + if (prev.type === 'dot') { + block.range = []; + prev.value += value; + prev.type = 'range'; + + if (block.nodes.length !== 3 && block.nodes.length !== 5) { + block.invalid = true; + block.ranges = 0; + prev.type = 'text'; + continue; + } + + block.ranges++; + block.args = []; + continue; + } + + if (prev.type === 'range') { + siblings.pop(); + + let before = siblings[siblings.length - 1]; + before.value += prev.value + value; + prev = before; + block.ranges--; + continue; + } + + push({ type: 'dot', value }); + continue; + } + + /** + * Text + */ + + push({ type: 'text', value }); + } + + // Mark imbalanced braces and brackets as invalid + do { + block = stack.pop(); + + if (block.type !== 'root') { + block.nodes.forEach(node => { + if (!node.nodes) { + if (node.type === 'open') node.isOpen = true; + if (node.type === 'close') node.isClose = true; + if (!node.nodes) node.type = 'text'; + node.invalid = true; + } + }); + + // get the location of the block on parent.nodes (block's siblings) + let parent = stack[stack.length - 1]; + let index = parent.nodes.indexOf(block); + // replace the (invalid) block with it's nodes + parent.nodes.splice(index, 1, ...block.nodes); + } + } while (stack.length > 0); + + push({ type: 'eos' }); + return ast; +}; + +var parse_1 = parse$1; + +const stringify = stringify$4; +const compile = compile_1; +const expand = expand_1; +const parse = parse_1; + +/** + * Expand the given pattern or create a regex-compatible string. + * + * ```js + * const braces = require('braces'); + * console.log(braces('{a,b,c}', { compile: true })); //=> ['(a|b|c)'] + * console.log(braces('{a,b,c}')); //=> ['a', 'b', 'c'] + * ``` + * @param {String} `str` + * @param {Object} `options` + * @return {String} + * @api public + */ + +const braces$1 = (input, options = {}) => { + let output = []; + + if (Array.isArray(input)) { + for (let pattern of input) { + let result = braces$1.create(pattern, options); + if (Array.isArray(result)) { + output.push(...result); + } else { + output.push(result); + } + } + } else { + output = [].concat(braces$1.create(input, options)); + } + + if (options && options.expand === true && options.nodupes === true) { + output = [...new Set(output)]; + } + return output; +}; + +/** + * Parse the given `str` with the given `options`. + * + * ```js + * // braces.parse(pattern, [, options]); + * const ast = braces.parse('a/{b,c}/d'); + * console.log(ast); + * ``` + * @param {String} pattern Brace pattern to parse + * @param {Object} options + * @return {Object} Returns an AST + * @api public + */ + +braces$1.parse = (input, options = {}) => parse(input, options); + +/** + * Creates a braces string from an AST, or an AST node. + * + * ```js + * const braces = require('braces'); + * let ast = braces.parse('foo/{a,b}/bar'); + * console.log(stringify(ast.nodes[2])); //=> '{a,b}' + * ``` + * @param {String} `input` Brace pattern or AST. + * @param {Object} `options` + * @return {Array} Returns an array of expanded values. + * @api public + */ + +braces$1.stringify = (input, options = {}) => { + if (typeof input === 'string') { + return stringify(braces$1.parse(input, options), options); + } + return stringify(input, options); +}; + +/** + * Compiles a brace pattern into a regex-compatible, optimized string. + * This method is called by the main [braces](#braces) function by default. + * + * ```js + * const braces = require('braces'); + * console.log(braces.compile('a/{b,c}/d')); + * //=> ['a/(b|c)/d'] + * ``` + * @param {String} `input` Brace pattern or AST. + * @param {Object} `options` + * @return {Array} Returns an array of expanded values. + * @api public + */ + +braces$1.compile = (input, options = {}) => { + if (typeof input === 'string') { + input = braces$1.parse(input, options); + } + return compile(input, options); +}; + +/** + * Expands a brace pattern into an array. This method is called by the + * main [braces](#braces) function when `options.expand` is true. Before + * using this method it's recommended that you read the [performance notes](#performance)) + * and advantages of using [.compile](#compile) instead. + * + * ```js + * const braces = require('braces'); + * console.log(braces.expand('a/{b,c}/d')); + * //=> ['a/b/d', 'a/c/d']; + * ``` + * @param {String} `pattern` Brace pattern + * @param {Object} `options` + * @return {Array} Returns an array of expanded values. + * @api public + */ + +braces$1.expand = (input, options = {}) => { + if (typeof input === 'string') { + input = braces$1.parse(input, options); + } + + let result = expand(input, options); + + // filter out empty strings if specified + if (options.noempty === true) { + result = result.filter(Boolean); + } + + // filter out duplicates if specified + if (options.nodupes === true) { + result = [...new Set(result)]; + } + + return result; +}; + +/** + * Processes a brace pattern and returns either an expanded array + * (if `options.expand` is true), a highly optimized regex-compatible string. + * This method is called by the main [braces](#braces) function. + * + * ```js + * const braces = require('braces'); + * console.log(braces.create('user-{200..300}/project-{a,b,c}-{1..10}')) + * //=> 'user-(20[0-9]|2[1-9][0-9]|300)/project-(a|b|c)-([1-9]|10)' + * ``` + * @param {String} `pattern` Brace pattern + * @param {Object} `options` + * @return {Array} Returns an array of expanded values. + * @api public + */ + +braces$1.create = (input, options = {}) => { + if (input === '' || input.length < 3) { + return [input]; + } + + return options.expand !== true + ? braces$1.compile(input, options) + : braces$1.expand(input, options); +}; + +/** + * Expose "braces" + */ + +var braces_1 = braces$1; + +const require$$0 = [ + "3dm", + "3ds", + "3g2", + "3gp", + "7z", + "a", + "aac", + "adp", + "ai", + "aif", + "aiff", + "alz", + "ape", + "apk", + "appimage", + "ar", + "arj", + "asf", + "au", + "avi", + "bak", + "baml", + "bh", + "bin", + "bk", + "bmp", + "btif", + "bz2", + "bzip2", + "cab", + "caf", + "cgm", + "class", + "cmx", + "cpio", + "cr2", + "cur", + "dat", + "dcm", + "deb", + "dex", + "djvu", + "dll", + "dmg", + "dng", + "doc", + "docm", + "docx", + "dot", + "dotm", + "dra", + "DS_Store", + "dsk", + "dts", + "dtshd", + "dvb", + "dwg", + "dxf", + "ecelp4800", + "ecelp7470", + "ecelp9600", + "egg", + "eol", + "eot", + "epub", + "exe", + "f4v", + "fbs", + "fh", + "fla", + "flac", + "flatpak", + "fli", + "flv", + "fpx", + "fst", + "fvt", + "g3", + "gh", + "gif", + "graffle", + "gz", + "gzip", + "h261", + "h263", + "h264", + "icns", + "ico", + "ief", + "img", + "ipa", + "iso", + "jar", + "jpeg", + "jpg", + "jpgv", + "jpm", + "jxr", + "key", + "ktx", + "lha", + "lib", + "lvp", + "lz", + "lzh", + "lzma", + "lzo", + "m3u", + "m4a", + "m4v", + "mar", + "mdi", + "mht", + "mid", + "midi", + "mj2", + "mka", + "mkv", + "mmr", + "mng", + "mobi", + "mov", + "movie", + "mp3", + "mp4", + "mp4a", + "mpeg", + "mpg", + "mpga", + "mxu", + "nef", + "npx", + "numbers", + "nupkg", + "o", + "odp", + "ods", + "odt", + "oga", + "ogg", + "ogv", + "otf", + "ott", + "pages", + "pbm", + "pcx", + "pdb", + "pdf", + "pea", + "pgm", + "pic", + "png", + "pnm", + "pot", + "potm", + "potx", + "ppa", + "ppam", + "ppm", + "pps", + "ppsm", + "ppsx", + "ppt", + "pptm", + "pptx", + "psd", + "pya", + "pyc", + "pyo", + "pyv", + "qt", + "rar", + "ras", + "raw", + "resources", + "rgb", + "rip", + "rlc", + "rmf", + "rmvb", + "rpm", + "rtf", + "rz", + "s3m", + "s7z", + "scpt", + "sgi", + "shar", + "snap", + "sil", + "sketch", + "slk", + "smv", + "snk", + "so", + "stl", + "suo", + "sub", + "swf", + "tar", + "tbz", + "tbz2", + "tga", + "tgz", + "thmx", + "tif", + "tiff", + "tlz", + "ttc", + "ttf", + "txz", + "udf", + "uvh", + "uvi", + "uvm", + "uvp", + "uvs", + "uvu", + "viv", + "vob", + "war", + "wav", + "wax", + "wbmp", + "wdp", + "weba", + "webm", + "webp", + "whl", + "wim", + "wm", + "wma", + "wmv", + "wmx", + "woff", + "woff2", + "wrm", + "wvx", + "xbm", + "xif", + "xla", + "xlam", + "xls", + "xlsb", + "xlsm", + "xlsx", + "xlt", + "xltm", + "xltx", + "xm", + "xmind", + "xpi", + "xpm", + "xwd", + "xz", + "z", + "zip", + "zipx" +]; + +var binaryExtensions$1 = require$$0; + +const path = require$$0$2; +const binaryExtensions = binaryExtensions$1; + +const extensions = new Set(binaryExtensions); + +var isBinaryPath$1 = filePath => extensions.has(path.extname(filePath).slice(1).toLowerCase()); + +var constants = {}; + +(function (exports) { + + const {sep} = require$$0$2; + const {platform} = process; + const os = require$$2$1; + + exports.EV_ALL = 'all'; + exports.EV_READY = 'ready'; + exports.EV_ADD = 'add'; + exports.EV_CHANGE = 'change'; + exports.EV_ADD_DIR = 'addDir'; + exports.EV_UNLINK = 'unlink'; + exports.EV_UNLINK_DIR = 'unlinkDir'; + exports.EV_RAW = 'raw'; + exports.EV_ERROR = 'error'; + + exports.STR_DATA = 'data'; + exports.STR_END = 'end'; + exports.STR_CLOSE = 'close'; + + exports.FSEVENT_CREATED = 'created'; + exports.FSEVENT_MODIFIED = 'modified'; + exports.FSEVENT_DELETED = 'deleted'; + exports.FSEVENT_MOVED = 'moved'; + exports.FSEVENT_CLONED = 'cloned'; + exports.FSEVENT_UNKNOWN = 'unknown'; + exports.FSEVENT_FLAG_MUST_SCAN_SUBDIRS = 1; + exports.FSEVENT_TYPE_FILE = 'file'; + exports.FSEVENT_TYPE_DIRECTORY = 'directory'; + exports.FSEVENT_TYPE_SYMLINK = 'symlink'; + + exports.KEY_LISTENERS = 'listeners'; + exports.KEY_ERR = 'errHandlers'; + exports.KEY_RAW = 'rawEmitters'; + exports.HANDLER_KEYS = [exports.KEY_LISTENERS, exports.KEY_ERR, exports.KEY_RAW]; + + exports.DOT_SLASH = `.${sep}`; + + exports.BACK_SLASH_RE = /\\/g; + exports.DOUBLE_SLASH_RE = /\/\//; + exports.SLASH_OR_BACK_SLASH_RE = /[/\\]/; + exports.DOT_RE = /\..*\.(sw[px])$|~$|\.subl.*\.tmp/; + exports.REPLACER_RE = /^\.[/\\]/; + + exports.SLASH = '/'; + exports.SLASH_SLASH = '//'; + exports.BRACE_START = '{'; + exports.BANG = '!'; + exports.ONE_DOT = '.'; + exports.TWO_DOTS = '..'; + exports.STAR = '*'; + exports.GLOBSTAR = '**'; + exports.ROOT_GLOBSTAR = '/**/*'; + exports.SLASH_GLOBSTAR = '/**'; + exports.DIR_SUFFIX = 'Dir'; + exports.ANYMATCH_OPTS = {dot: true}; + exports.STRING_TYPE = 'string'; + exports.FUNCTION_TYPE = 'function'; + exports.EMPTY_STR = ''; + exports.EMPTY_FN = () => {}; + exports.IDENTITY_FN = val => val; + + exports.isWindows = platform === 'win32'; + exports.isMacos = platform === 'darwin'; + exports.isLinux = platform === 'linux'; + exports.isIBMi = os.type() === 'OS400'; +} (constants)); + +const fs$2 = require$$0$1; +const sysPath$2 = require$$0$2; +const { promisify: promisify$2 } = require$$2; +const isBinaryPath = isBinaryPath$1; +const { + isWindows: isWindows$1, + isLinux, + EMPTY_FN: EMPTY_FN$2, + EMPTY_STR: EMPTY_STR$1, + KEY_LISTENERS, + KEY_ERR, + KEY_RAW, + HANDLER_KEYS, + EV_CHANGE: EV_CHANGE$2, + EV_ADD: EV_ADD$2, + EV_ADD_DIR: EV_ADD_DIR$2, + EV_ERROR: EV_ERROR$2, + STR_DATA: STR_DATA$1, + STR_END: STR_END$2, + BRACE_START: BRACE_START$1, + STAR +} = constants; + +const THROTTLE_MODE_WATCH = 'watch'; + +const open = promisify$2(fs$2.open); +const stat$2 = promisify$2(fs$2.stat); +const lstat$1 = promisify$2(fs$2.lstat); +const close = promisify$2(fs$2.close); +const fsrealpath = promisify$2(fs$2.realpath); + +const statMethods$1 = { lstat: lstat$1, stat: stat$2 }; + +// TODO: emit errors properly. Example: EMFILE on Macos. +const foreach = (val, fn) => { + if (val instanceof Set) { + val.forEach(fn); + } else { + fn(val); + } +}; + +const addAndConvert = (main, prop, item) => { + let container = main[prop]; + if (!(container instanceof Set)) { + main[prop] = container = new Set([container]); + } + container.add(item); +}; + +const clearItem = cont => key => { + const set = cont[key]; + if (set instanceof Set) { + set.clear(); + } else { + delete cont[key]; + } +}; + +const delFromSet = (main, prop, item) => { + const container = main[prop]; + if (container instanceof Set) { + container.delete(item); + } else if (container === item) { + delete main[prop]; + } +}; + +const isEmptySet = (val) => val instanceof Set ? val.size === 0 : !val; + +/** + * @typedef {String} Path + */ + +// fs_watch helpers + +// object to hold per-process fs_watch instances +// (may be shared across chokidar FSWatcher instances) + +/** + * @typedef {Object} FsWatchContainer + * @property {Set} listeners + * @property {Set} errHandlers + * @property {Set} rawEmitters + * @property {fs.FSWatcher=} watcher + * @property {Boolean=} watcherUnusable + */ + +/** + * @type {Map} + */ +const FsWatchInstances = new Map(); + +/** + * Instantiates the fs_watch interface + * @param {String} path to be watched + * @param {Object} options to be passed to fs_watch + * @param {Function} listener main event handler + * @param {Function} errHandler emits info about errors + * @param {Function} emitRaw emits raw event data + * @returns {fs.FSWatcher} new fsevents instance + */ +function createFsWatchInstance(path, options, listener, errHandler, emitRaw) { + const handleEvent = (rawEvent, evPath) => { + listener(path); + emitRaw(rawEvent, evPath, {watchedPath: path}); + + // emit based on events occurring for files from a directory's watcher in + // case the file's watcher misses it (and rely on throttling to de-dupe) + if (evPath && path !== evPath) { + fsWatchBroadcast( + sysPath$2.resolve(path, evPath), KEY_LISTENERS, sysPath$2.join(path, evPath) + ); + } + }; + try { + return fs$2.watch(path, options, handleEvent); + } catch (error) { + errHandler(error); + } +} + +/** + * Helper for passing fs_watch event data to a collection of listeners + * @param {Path} fullPath absolute path bound to fs_watch instance + * @param {String} type listener type + * @param {*=} val1 arguments to be passed to listeners + * @param {*=} val2 + * @param {*=} val3 + */ +const fsWatchBroadcast = (fullPath, type, val1, val2, val3) => { + const cont = FsWatchInstances.get(fullPath); + if (!cont) return; + foreach(cont[type], (listener) => { + listener(val1, val2, val3); + }); +}; + +/** + * Instantiates the fs_watch interface or binds listeners + * to an existing one covering the same file system entry + * @param {String} path + * @param {String} fullPath absolute path + * @param {Object} options to be passed to fs_watch + * @param {Object} handlers container for event listener functions + */ +const setFsWatchListener = (path, fullPath, options, handlers) => { + const {listener, errHandler, rawEmitter} = handlers; + let cont = FsWatchInstances.get(fullPath); + + /** @type {fs.FSWatcher=} */ + let watcher; + if (!options.persistent) { + watcher = createFsWatchInstance( + path, options, listener, errHandler, rawEmitter + ); + return watcher.close.bind(watcher); + } + if (cont) { + addAndConvert(cont, KEY_LISTENERS, listener); + addAndConvert(cont, KEY_ERR, errHandler); + addAndConvert(cont, KEY_RAW, rawEmitter); + } else { + watcher = createFsWatchInstance( + path, + options, + fsWatchBroadcast.bind(null, fullPath, KEY_LISTENERS), + errHandler, // no need to use broadcast here + fsWatchBroadcast.bind(null, fullPath, KEY_RAW) + ); + if (!watcher) return; + watcher.on(EV_ERROR$2, async (error) => { + const broadcastErr = fsWatchBroadcast.bind(null, fullPath, KEY_ERR); + cont.watcherUnusable = true; // documented since Node 10.4.1 + // Workaround for https://github.com/joyent/node/issues/4337 + if (isWindows$1 && error.code === 'EPERM') { + try { + const fd = await open(path, 'r'); + await close(fd); + broadcastErr(error); + } catch (err) {} + } else { + broadcastErr(error); + } + }); + cont = { + listeners: listener, + errHandlers: errHandler, + rawEmitters: rawEmitter, + watcher + }; + FsWatchInstances.set(fullPath, cont); + } + // const index = cont.listeners.indexOf(listener); + + // removes this instance's listeners and closes the underlying fs_watch + // instance if there are no more listeners left + return () => { + delFromSet(cont, KEY_LISTENERS, listener); + delFromSet(cont, KEY_ERR, errHandler); + delFromSet(cont, KEY_RAW, rawEmitter); + if (isEmptySet(cont.listeners)) { + // Check to protect against issue gh-730. + // if (cont.watcherUnusable) { + cont.watcher.close(); + // } + FsWatchInstances.delete(fullPath); + HANDLER_KEYS.forEach(clearItem(cont)); + cont.watcher = undefined; + Object.freeze(cont); + } + }; +}; + +// fs_watchFile helpers + +// object to hold per-process fs_watchFile instances +// (may be shared across chokidar FSWatcher instances) +const FsWatchFileInstances = new Map(); + +/** + * Instantiates the fs_watchFile interface or binds listeners + * to an existing one covering the same file system entry + * @param {String} path to be watched + * @param {String} fullPath absolute path + * @param {Object} options options to be passed to fs_watchFile + * @param {Object} handlers container for event listener functions + * @returns {Function} closer + */ +const setFsWatchFileListener = (path, fullPath, options, handlers) => { + const {listener, rawEmitter} = handlers; + let cont = FsWatchFileInstances.get(fullPath); + + const copts = cont && cont.options; + if (copts && (copts.persistent < options.persistent || copts.interval > options.interval)) { + fs$2.unwatchFile(fullPath); + cont = undefined; + } + + /* eslint-enable no-unused-vars, prefer-destructuring */ + + if (cont) { + addAndConvert(cont, KEY_LISTENERS, listener); + addAndConvert(cont, KEY_RAW, rawEmitter); + } else { + // TODO + // listeners.add(listener); + // rawEmitters.add(rawEmitter); + cont = { + listeners: listener, + rawEmitters: rawEmitter, + options, + watcher: fs$2.watchFile(fullPath, options, (curr, prev) => { + foreach(cont.rawEmitters, (rawEmitter) => { + rawEmitter(EV_CHANGE$2, fullPath, {curr, prev}); + }); + const currmtime = curr.mtimeMs; + if (curr.size !== prev.size || currmtime > prev.mtimeMs || currmtime === 0) { + foreach(cont.listeners, (listener) => listener(path, curr)); + } + }) + }; + FsWatchFileInstances.set(fullPath, cont); + } + // const index = cont.listeners.indexOf(listener); + + // Removes this instance's listeners and closes the underlying fs_watchFile + // instance if there are no more listeners left. + return () => { + delFromSet(cont, KEY_LISTENERS, listener); + delFromSet(cont, KEY_RAW, rawEmitter); + if (isEmptySet(cont.listeners)) { + FsWatchFileInstances.delete(fullPath); + fs$2.unwatchFile(fullPath); + cont.options = cont.watcher = undefined; + Object.freeze(cont); + } + }; +}; + +/** + * @mixin + */ +let NodeFsHandler$1 = class NodeFsHandler { + +/** + * @param {import("../index").FSWatcher} fsW + */ +constructor(fsW) { + this.fsw = fsW; + this._boundHandleError = (error) => fsW._handleError(error); +} + +/** + * Watch file for changes with fs_watchFile or fs_watch. + * @param {String} path to file or dir + * @param {Function} listener on fs change + * @returns {Function} closer for the watcher instance + */ +_watchWithNodeFs(path, listener) { + const opts = this.fsw.options; + const directory = sysPath$2.dirname(path); + const basename = sysPath$2.basename(path); + const parent = this.fsw._getWatchedDir(directory); + parent.add(basename); + const absolutePath = sysPath$2.resolve(path); + const options = {persistent: opts.persistent}; + if (!listener) listener = EMPTY_FN$2; + + let closer; + if (opts.usePolling) { + options.interval = opts.enableBinaryInterval && isBinaryPath(basename) ? + opts.binaryInterval : opts.interval; + closer = setFsWatchFileListener(path, absolutePath, options, { + listener, + rawEmitter: this.fsw._emitRaw + }); + } else { + closer = setFsWatchListener(path, absolutePath, options, { + listener, + errHandler: this._boundHandleError, + rawEmitter: this.fsw._emitRaw + }); + } + return closer; +} + +/** + * Watch a file and emit add event if warranted. + * @param {Path} file Path + * @param {fs.Stats} stats result of fs_stat + * @param {Boolean} initialAdd was the file added at watch instantiation? + * @returns {Function} closer for the watcher instance + */ +_handleFile(file, stats, initialAdd) { + if (this.fsw.closed) { + return; + } + const dirname = sysPath$2.dirname(file); + const basename = sysPath$2.basename(file); + const parent = this.fsw._getWatchedDir(dirname); + // stats is always present + let prevStats = stats; + + // if the file is already being watched, do nothing + if (parent.has(basename)) return; + + const listener = async (path, newStats) => { + if (!this.fsw._throttle(THROTTLE_MODE_WATCH, file, 5)) return; + if (!newStats || newStats.mtimeMs === 0) { + try { + const newStats = await stat$2(file); + if (this.fsw.closed) return; + // Check that change event was not fired because of changed only accessTime. + const at = newStats.atimeMs; + const mt = newStats.mtimeMs; + if (!at || at <= mt || mt !== prevStats.mtimeMs) { + this.fsw._emit(EV_CHANGE$2, file, newStats); + } + if (isLinux && prevStats.ino !== newStats.ino) { + this.fsw._closeFile(path); + prevStats = newStats; + this.fsw._addPathCloser(path, this._watchWithNodeFs(file, listener)); + } else { + prevStats = newStats; + } + } catch (error) { + // Fix issues where mtime is null but file is still present + this.fsw._remove(dirname, basename); + } + // add is about to be emitted if file not already tracked in parent + } else if (parent.has(basename)) { + // Check that change event was not fired because of changed only accessTime. + const at = newStats.atimeMs; + const mt = newStats.mtimeMs; + if (!at || at <= mt || mt !== prevStats.mtimeMs) { + this.fsw._emit(EV_CHANGE$2, file, newStats); + } + prevStats = newStats; + } + }; + // kick off the watcher + const closer = this._watchWithNodeFs(file, listener); + + // emit an add event if we're supposed to + if (!(initialAdd && this.fsw.options.ignoreInitial) && this.fsw._isntIgnored(file)) { + if (!this.fsw._throttle(EV_ADD$2, file, 0)) return; + this.fsw._emit(EV_ADD$2, file, stats); + } + + return closer; +} + +/** + * Handle symlinks encountered while reading a dir. + * @param {Object} entry returned by readdirp + * @param {String} directory path of dir being read + * @param {String} path of this item + * @param {String} item basename of this item + * @returns {Promise} true if no more processing is needed for this entry. + */ +async _handleSymlink(entry, directory, path, item) { + if (this.fsw.closed) { + return; + } + const full = entry.fullPath; + const dir = this.fsw._getWatchedDir(directory); + + if (!this.fsw.options.followSymlinks) { + // watch symlink directly (don't follow) and detect changes + this.fsw._incrReadyCount(); + + let linkPath; + try { + linkPath = await fsrealpath(path); + } catch (e) { + this.fsw._emitReady(); + return true; + } + + if (this.fsw.closed) return; + if (dir.has(item)) { + if (this.fsw._symlinkPaths.get(full) !== linkPath) { + this.fsw._symlinkPaths.set(full, linkPath); + this.fsw._emit(EV_CHANGE$2, path, entry.stats); + } + } else { + dir.add(item); + this.fsw._symlinkPaths.set(full, linkPath); + this.fsw._emit(EV_ADD$2, path, entry.stats); + } + this.fsw._emitReady(); + return true; + } + + // don't follow the same symlink more than once + if (this.fsw._symlinkPaths.has(full)) { + return true; + } + + this.fsw._symlinkPaths.set(full, true); +} + +_handleRead(directory, initialAdd, wh, target, dir, depth, throttler) { + // Normalize the directory name on Windows + directory = sysPath$2.join(directory, EMPTY_STR$1); + + if (!wh.hasGlob) { + throttler = this.fsw._throttle('readdir', directory, 1000); + if (!throttler) return; + } + + const previous = this.fsw._getWatchedDir(wh.path); + const current = new Set(); + + let stream = this.fsw._readdirp(directory, { + fileFilter: entry => wh.filterPath(entry), + directoryFilter: entry => wh.filterDir(entry), + depth: 0 + }).on(STR_DATA$1, async (entry) => { + if (this.fsw.closed) { + stream = undefined; + return; + } + const item = entry.path; + let path = sysPath$2.join(directory, item); + current.add(item); + + if (entry.stats.isSymbolicLink() && await this._handleSymlink(entry, directory, path, item)) { + return; + } + + if (this.fsw.closed) { + stream = undefined; + return; + } + // Files that present in current directory snapshot + // but absent in previous are added to watch list and + // emit `add` event. + if (item === target || !target && !previous.has(item)) { + this.fsw._incrReadyCount(); + + // ensure relativeness of path is preserved in case of watcher reuse + path = sysPath$2.join(dir, sysPath$2.relative(dir, path)); + + this._addToNodeFs(path, initialAdd, wh, depth + 1); + } + }).on(EV_ERROR$2, this._boundHandleError); + + return new Promise(resolve => + stream.once(STR_END$2, () => { + if (this.fsw.closed) { + stream = undefined; + return; + } + const wasThrottled = throttler ? throttler.clear() : false; + + resolve(); + + // Files that absent in current directory snapshot + // but present in previous emit `remove` event + // and are removed from @watched[directory]. + previous.getChildren().filter((item) => { + return item !== directory && + !current.has(item) && + // in case of intersecting globs; + // a path may have been filtered out of this readdir, but + // shouldn't be removed because it matches a different glob + (!wh.hasGlob || wh.filterPath({ + fullPath: sysPath$2.resolve(directory, item) + })); + }).forEach((item) => { + this.fsw._remove(directory, item); + }); + + stream = undefined; + + // one more time for any missed in case changes came in extremely quickly + if (wasThrottled) this._handleRead(directory, false, wh, target, dir, depth, throttler); + }) + ); +} + +/** + * Read directory to add / remove files from `@watched` list and re-read it on change. + * @param {String} dir fs path + * @param {fs.Stats} stats + * @param {Boolean} initialAdd + * @param {Number} depth relative to user-supplied path + * @param {String} target child path targeted for watch + * @param {Object} wh Common watch helpers for this path + * @param {String} realpath + * @returns {Promise} closer for the watcher instance. + */ +async _handleDir(dir, stats, initialAdd, depth, target, wh, realpath) { + const parentDir = this.fsw._getWatchedDir(sysPath$2.dirname(dir)); + const tracked = parentDir.has(sysPath$2.basename(dir)); + if (!(initialAdd && this.fsw.options.ignoreInitial) && !target && !tracked) { + if (!wh.hasGlob || wh.globFilter(dir)) this.fsw._emit(EV_ADD_DIR$2, dir, stats); + } + + // ensure dir is tracked (harmless if redundant) + parentDir.add(sysPath$2.basename(dir)); + this.fsw._getWatchedDir(dir); + let throttler; + let closer; + + const oDepth = this.fsw.options.depth; + if ((oDepth == null || depth <= oDepth) && !this.fsw._symlinkPaths.has(realpath)) { + if (!target) { + await this._handleRead(dir, initialAdd, wh, target, dir, depth, throttler); + if (this.fsw.closed) return; + } + + closer = this._watchWithNodeFs(dir, (dirPath, stats) => { + // if current directory is removed, do nothing + if (stats && stats.mtimeMs === 0) return; + + this._handleRead(dirPath, false, wh, target, dir, depth, throttler); + }); + } + return closer; +} + +/** + * Handle added file, directory, or glob pattern. + * Delegates call to _handleFile / _handleDir after checks. + * @param {String} path to file or ir + * @param {Boolean} initialAdd was the file added at watch instantiation? + * @param {Object} priorWh depth relative to user-supplied path + * @param {Number} depth Child path actually targeted for watch + * @param {String=} target Child path actually targeted for watch + * @returns {Promise} + */ +async _addToNodeFs(path, initialAdd, priorWh, depth, target) { + const ready = this.fsw._emitReady; + if (this.fsw._isIgnored(path) || this.fsw.closed) { + ready(); + return false; + } + + const wh = this.fsw._getWatchHelpers(path, depth); + if (!wh.hasGlob && priorWh) { + wh.hasGlob = priorWh.hasGlob; + wh.globFilter = priorWh.globFilter; + wh.filterPath = entry => priorWh.filterPath(entry); + wh.filterDir = entry => priorWh.filterDir(entry); + } + + // evaluate what is at the path we're being asked to watch + try { + const stats = await statMethods$1[wh.statMethod](wh.watchPath); + if (this.fsw.closed) return; + if (this.fsw._isIgnored(wh.watchPath, stats)) { + ready(); + return false; + } + + const follow = this.fsw.options.followSymlinks && !path.includes(STAR) && !path.includes(BRACE_START$1); + let closer; + if (stats.isDirectory()) { + const absPath = sysPath$2.resolve(path); + const targetPath = follow ? await fsrealpath(path) : path; + if (this.fsw.closed) return; + closer = await this._handleDir(wh.watchPath, stats, initialAdd, depth, target, wh, targetPath); + if (this.fsw.closed) return; + // preserve this symlink's target path + if (absPath !== targetPath && targetPath !== undefined) { + this.fsw._symlinkPaths.set(absPath, targetPath); + } + } else if (stats.isSymbolicLink()) { + const targetPath = follow ? await fsrealpath(path) : path; + if (this.fsw.closed) return; + const parent = sysPath$2.dirname(wh.watchPath); + this.fsw._getWatchedDir(parent).add(wh.watchPath); + this.fsw._emit(EV_ADD$2, wh.watchPath, stats); + closer = await this._handleDir(parent, stats, initialAdd, depth, path, wh, targetPath); + if (this.fsw.closed) return; + + // preserve this symlink's target path + if (targetPath !== undefined) { + this.fsw._symlinkPaths.set(sysPath$2.resolve(path), targetPath); + } + } else { + closer = this._handleFile(wh.watchPath, stats, initialAdd); + } + ready(); + + this.fsw._addPathCloser(path, closer); + return false; + + } catch (error) { + if (this.fsw._handleError(error)) { + ready(); + return path; + } + } +} + +}; + +var nodefsHandler = NodeFsHandler$1; + +var fseventsHandler = {exports: {}}; + +const require$$3 = /*@__PURE__*/rollup.getAugmentedNamespace(fseventsImporter.fseventsImporter); + +const fs$1 = require$$0$1; +const sysPath$1 = require$$0$2; +const { promisify: promisify$1 } = require$$2; + +let fsevents; +try { + fsevents = require$$3.getFsEvents(); +} catch (error) { + if (process.env.CHOKIDAR_PRINT_FSEVENTS_REQUIRE_ERROR) console.error(error); +} + +if (fsevents) { + // TODO: real check + const mtch = process.version.match(/v(\d+)\.(\d+)/); + if (mtch && mtch[1] && mtch[2]) { + const maj = Number.parseInt(mtch[1], 10); + const min = Number.parseInt(mtch[2], 10); + if (maj === 8 && min < 16) { + fsevents = undefined; + } + } +} + +const { + EV_ADD: EV_ADD$1, + EV_CHANGE: EV_CHANGE$1, + EV_ADD_DIR: EV_ADD_DIR$1, + EV_UNLINK: EV_UNLINK$1, + EV_ERROR: EV_ERROR$1, + STR_DATA, + STR_END: STR_END$1, + FSEVENT_CREATED, + FSEVENT_MODIFIED, + FSEVENT_DELETED, + FSEVENT_MOVED, + // FSEVENT_CLONED, + FSEVENT_UNKNOWN, + FSEVENT_FLAG_MUST_SCAN_SUBDIRS, + FSEVENT_TYPE_FILE, + FSEVENT_TYPE_DIRECTORY, + FSEVENT_TYPE_SYMLINK, + + ROOT_GLOBSTAR, + DIR_SUFFIX, + DOT_SLASH, + FUNCTION_TYPE: FUNCTION_TYPE$1, + EMPTY_FN: EMPTY_FN$1, + IDENTITY_FN +} = constants; + +const Depth = (value) => isNaN(value) ? {} : {depth: value}; + +const stat$1 = promisify$1(fs$1.stat); +const lstat = promisify$1(fs$1.lstat); +const realpath = promisify$1(fs$1.realpath); + +const statMethods = { stat: stat$1, lstat }; + +/** + * @typedef {String} Path + */ + +/** + * @typedef {Object} FsEventsWatchContainer + * @property {Set} listeners + * @property {Function} rawEmitter + * @property {{stop: Function}} watcher + */ + +// fsevents instance helper functions +/** + * Object to hold per-process fsevents instances (may be shared across chokidar FSWatcher instances) + * @type {Map} + */ +const FSEventsWatchers = new Map(); + +// Threshold of duplicate path prefixes at which to start +// consolidating going forward +const consolidateThreshhold = 10; + +const wrongEventFlags = new Set([ + 69888, 70400, 71424, 72704, 73472, 131328, 131840, 262912 +]); + +/** + * Instantiates the fsevents interface + * @param {Path} path path to be watched + * @param {Function} callback called when fsevents is bound and ready + * @returns {{stop: Function}} new fsevents instance + */ +const createFSEventsInstance = (path, callback) => { + const stop = fsevents.watch(path, callback); + return {stop}; +}; + +/** + * Instantiates the fsevents interface or binds listeners to an existing one covering + * the same file tree. + * @param {Path} path - to be watched + * @param {Path} realPath - real path for symlinks + * @param {Function} listener - called when fsevents emits events + * @param {Function} rawEmitter - passes data to listeners of the 'raw' event + * @returns {Function} closer + */ +function setFSEventsListener(path, realPath, listener, rawEmitter) { + let watchPath = sysPath$1.extname(realPath) ? sysPath$1.dirname(realPath) : realPath; + + const parentPath = sysPath$1.dirname(watchPath); + let cont = FSEventsWatchers.get(watchPath); + + // If we've accumulated a substantial number of paths that + // could have been consolidated by watching one directory + // above the current one, create a watcher on the parent + // path instead, so that we do consolidate going forward. + if (couldConsolidate(parentPath)) { + watchPath = parentPath; + } + + const resolvedPath = sysPath$1.resolve(path); + const hasSymlink = resolvedPath !== realPath; + + const filteredListener = (fullPath, flags, info) => { + if (hasSymlink) fullPath = fullPath.replace(realPath, resolvedPath); + if ( + fullPath === resolvedPath || + !fullPath.indexOf(resolvedPath + sysPath$1.sep) + ) listener(fullPath, flags, info); + }; + + // check if there is already a watcher on a parent path + // modifies `watchPath` to the parent path when it finds a match + let watchedParent = false; + for (const watchedPath of FSEventsWatchers.keys()) { + if (realPath.indexOf(sysPath$1.resolve(watchedPath) + sysPath$1.sep) === 0) { + watchPath = watchedPath; + cont = FSEventsWatchers.get(watchPath); + watchedParent = true; + break; + } + } + + if (cont || watchedParent) { + cont.listeners.add(filteredListener); + } else { + cont = { + listeners: new Set([filteredListener]), + rawEmitter, + watcher: createFSEventsInstance(watchPath, (fullPath, flags) => { + if (!cont.listeners.size) return; + if (flags & FSEVENT_FLAG_MUST_SCAN_SUBDIRS) return; + const info = fsevents.getInfo(fullPath, flags); + cont.listeners.forEach(list => { + list(fullPath, flags, info); + }); + + cont.rawEmitter(info.event, fullPath, info); + }) + }; + FSEventsWatchers.set(watchPath, cont); + } + + // removes this instance's listeners and closes the underlying fsevents + // instance if there are no more listeners left + return () => { + const lst = cont.listeners; + + lst.delete(filteredListener); + if (!lst.size) { + FSEventsWatchers.delete(watchPath); + if (cont.watcher) return cont.watcher.stop().then(() => { + cont.rawEmitter = cont.watcher = undefined; + Object.freeze(cont); + }); + } + }; +} + +// Decide whether or not we should start a new higher-level +// parent watcher +const couldConsolidate = (path) => { + let count = 0; + for (const watchPath of FSEventsWatchers.keys()) { + if (watchPath.indexOf(path) === 0) { + count++; + if (count >= consolidateThreshhold) { + return true; + } + } + } + + return false; +}; + +// returns boolean indicating whether fsevents can be used +const canUse = () => fsevents && FSEventsWatchers.size < 128; + +// determines subdirectory traversal levels from root to path +const calcDepth = (path, root) => { + let i = 0; + while (!path.indexOf(root) && (path = sysPath$1.dirname(path)) !== root) i++; + return i; +}; + +// returns boolean indicating whether the fsevents' event info has the same type +// as the one returned by fs.stat +const sameTypes = (info, stats) => ( + info.type === FSEVENT_TYPE_DIRECTORY && stats.isDirectory() || + info.type === FSEVENT_TYPE_SYMLINK && stats.isSymbolicLink() || + info.type === FSEVENT_TYPE_FILE && stats.isFile() +); + +/** + * @mixin + */ +let FsEventsHandler$1 = class FsEventsHandler { + +/** + * @param {import('../index').FSWatcher} fsw + */ +constructor(fsw) { + this.fsw = fsw; +} +checkIgnored(path, stats) { + const ipaths = this.fsw._ignoredPaths; + if (this.fsw._isIgnored(path, stats)) { + ipaths.add(path); + if (stats && stats.isDirectory()) { + ipaths.add(path + ROOT_GLOBSTAR); + } + return true; + } + + ipaths.delete(path); + ipaths.delete(path + ROOT_GLOBSTAR); +} + +addOrChange(path, fullPath, realPath, parent, watchedDir, item, info, opts) { + const event = watchedDir.has(item) ? EV_CHANGE$1 : EV_ADD$1; + this.handleEvent(event, path, fullPath, realPath, parent, watchedDir, item, info, opts); +} + +async checkExists(path, fullPath, realPath, parent, watchedDir, item, info, opts) { + try { + const stats = await stat$1(path); + if (this.fsw.closed) return; + if (sameTypes(info, stats)) { + this.addOrChange(path, fullPath, realPath, parent, watchedDir, item, info, opts); + } else { + this.handleEvent(EV_UNLINK$1, path, fullPath, realPath, parent, watchedDir, item, info, opts); + } + } catch (error) { + if (error.code === 'EACCES') { + this.addOrChange(path, fullPath, realPath, parent, watchedDir, item, info, opts); + } else { + this.handleEvent(EV_UNLINK$1, path, fullPath, realPath, parent, watchedDir, item, info, opts); + } + } +} + +handleEvent(event, path, fullPath, realPath, parent, watchedDir, item, info, opts) { + if (this.fsw.closed || this.checkIgnored(path)) return; + + if (event === EV_UNLINK$1) { + const isDirectory = info.type === FSEVENT_TYPE_DIRECTORY; + // suppress unlink events on never before seen files + if (isDirectory || watchedDir.has(item)) { + this.fsw._remove(parent, item, isDirectory); + } + } else { + if (event === EV_ADD$1) { + // track new directories + if (info.type === FSEVENT_TYPE_DIRECTORY) this.fsw._getWatchedDir(path); + + if (info.type === FSEVENT_TYPE_SYMLINK && opts.followSymlinks) { + // push symlinks back to the top of the stack to get handled + const curDepth = opts.depth === undefined ? + undefined : calcDepth(fullPath, realPath) + 1; + return this._addToFsEvents(path, false, true, curDepth); + } + + // track new paths + // (other than symlinks being followed, which will be tracked soon) + this.fsw._getWatchedDir(parent).add(item); + } + /** + * @type {'add'|'addDir'|'unlink'|'unlinkDir'} + */ + const eventName = info.type === FSEVENT_TYPE_DIRECTORY ? event + DIR_SUFFIX : event; + this.fsw._emit(eventName, path); + if (eventName === EV_ADD_DIR$1) this._addToFsEvents(path, false, true); + } +} + +/** + * Handle symlinks encountered during directory scan + * @param {String} watchPath - file/dir path to be watched with fsevents + * @param {String} realPath - real path (in case of symlinks) + * @param {Function} transform - path transformer + * @param {Function} globFilter - path filter in case a glob pattern was provided + * @returns {Function} closer for the watcher instance +*/ +_watchWithFsEvents(watchPath, realPath, transform, globFilter) { + if (this.fsw.closed || this.fsw._isIgnored(watchPath)) return; + const opts = this.fsw.options; + const watchCallback = async (fullPath, flags, info) => { + if (this.fsw.closed) return; + if ( + opts.depth !== undefined && + calcDepth(fullPath, realPath) > opts.depth + ) return; + const path = transform(sysPath$1.join( + watchPath, sysPath$1.relative(watchPath, fullPath) + )); + if (globFilter && !globFilter(path)) return; + // ensure directories are tracked + const parent = sysPath$1.dirname(path); + const item = sysPath$1.basename(path); + const watchedDir = this.fsw._getWatchedDir( + info.type === FSEVENT_TYPE_DIRECTORY ? path : parent + ); + + // correct for wrong events emitted + if (wrongEventFlags.has(flags) || info.event === FSEVENT_UNKNOWN) { + if (typeof opts.ignored === FUNCTION_TYPE$1) { + let stats; + try { + stats = await stat$1(path); + } catch (error) {} + if (this.fsw.closed) return; + if (this.checkIgnored(path, stats)) return; + if (sameTypes(info, stats)) { + this.addOrChange(path, fullPath, realPath, parent, watchedDir, item, info, opts); + } else { + this.handleEvent(EV_UNLINK$1, path, fullPath, realPath, parent, watchedDir, item, info, opts); + } + } else { + this.checkExists(path, fullPath, realPath, parent, watchedDir, item, info, opts); + } + } else { + switch (info.event) { + case FSEVENT_CREATED: + case FSEVENT_MODIFIED: + return this.addOrChange(path, fullPath, realPath, parent, watchedDir, item, info, opts); + case FSEVENT_DELETED: + case FSEVENT_MOVED: + return this.checkExists(path, fullPath, realPath, parent, watchedDir, item, info, opts); + } + } + }; + + const closer = setFSEventsListener( + watchPath, + realPath, + watchCallback, + this.fsw._emitRaw + ); + + this.fsw._emitReady(); + return closer; +} + +/** + * Handle symlinks encountered during directory scan + * @param {String} linkPath path to symlink + * @param {String} fullPath absolute path to the symlink + * @param {Function} transform pre-existing path transformer + * @param {Number} curDepth level of subdirectories traversed to where symlink is + * @returns {Promise} + */ +async _handleFsEventsSymlink(linkPath, fullPath, transform, curDepth) { + // don't follow the same symlink more than once + if (this.fsw.closed || this.fsw._symlinkPaths.has(fullPath)) return; + + this.fsw._symlinkPaths.set(fullPath, true); + this.fsw._incrReadyCount(); + + try { + const linkTarget = await realpath(linkPath); + if (this.fsw.closed) return; + if (this.fsw._isIgnored(linkTarget)) { + return this.fsw._emitReady(); + } + + this.fsw._incrReadyCount(); + + // add the linkTarget for watching with a wrapper for transform + // that causes emitted paths to incorporate the link's path + this._addToFsEvents(linkTarget || linkPath, (path) => { + let aliasedPath = linkPath; + if (linkTarget && linkTarget !== DOT_SLASH) { + aliasedPath = path.replace(linkTarget, linkPath); + } else if (path !== DOT_SLASH) { + aliasedPath = sysPath$1.join(linkPath, path); + } + return transform(aliasedPath); + }, false, curDepth); + } catch(error) { + if (this.fsw._handleError(error)) { + return this.fsw._emitReady(); + } + } +} + +/** + * + * @param {Path} newPath + * @param {fs.Stats} stats + */ +emitAdd(newPath, stats, processPath, opts, forceAdd) { + const pp = processPath(newPath); + const isDir = stats.isDirectory(); + const dirObj = this.fsw._getWatchedDir(sysPath$1.dirname(pp)); + const base = sysPath$1.basename(pp); + + // ensure empty dirs get tracked + if (isDir) this.fsw._getWatchedDir(pp); + if (dirObj.has(base)) return; + dirObj.add(base); + + if (!opts.ignoreInitial || forceAdd === true) { + this.fsw._emit(isDir ? EV_ADD_DIR$1 : EV_ADD$1, pp, stats); + } +} + +initWatch(realPath, path, wh, processPath) { + if (this.fsw.closed) return; + const closer = this._watchWithFsEvents( + wh.watchPath, + sysPath$1.resolve(realPath || wh.watchPath), + processPath, + wh.globFilter + ); + this.fsw._addPathCloser(path, closer); +} + +/** + * Handle added path with fsevents + * @param {String} path file/dir path or glob pattern + * @param {Function|Boolean=} transform converts working path to what the user expects + * @param {Boolean=} forceAdd ensure add is emitted + * @param {Number=} priorDepth Level of subdirectories already traversed. + * @returns {Promise} + */ +async _addToFsEvents(path, transform, forceAdd, priorDepth) { + if (this.fsw.closed) { + return; + } + const opts = this.fsw.options; + const processPath = typeof transform === FUNCTION_TYPE$1 ? transform : IDENTITY_FN; + + const wh = this.fsw._getWatchHelpers(path); + + // evaluate what is at the path we're being asked to watch + try { + const stats = await statMethods[wh.statMethod](wh.watchPath); + if (this.fsw.closed) return; + if (this.fsw._isIgnored(wh.watchPath, stats)) { + throw null; + } + if (stats.isDirectory()) { + // emit addDir unless this is a glob parent + if (!wh.globFilter) this.emitAdd(processPath(path), stats, processPath, opts, forceAdd); + + // don't recurse further if it would exceed depth setting + if (priorDepth && priorDepth > opts.depth) return; + + // scan the contents of the dir + this.fsw._readdirp(wh.watchPath, { + fileFilter: entry => wh.filterPath(entry), + directoryFilter: entry => wh.filterDir(entry), + ...Depth(opts.depth - (priorDepth || 0)) + }).on(STR_DATA, (entry) => { + // need to check filterPath on dirs b/c filterDir is less restrictive + if (this.fsw.closed) { + return; + } + if (entry.stats.isDirectory() && !wh.filterPath(entry)) return; + + const joinedPath = sysPath$1.join(wh.watchPath, entry.path); + const {fullPath} = entry; + + if (wh.followSymlinks && entry.stats.isSymbolicLink()) { + // preserve the current depth here since it can't be derived from + // real paths past the symlink + const curDepth = opts.depth === undefined ? + undefined : calcDepth(joinedPath, sysPath$1.resolve(wh.watchPath)) + 1; + + this._handleFsEventsSymlink(joinedPath, fullPath, processPath, curDepth); + } else { + this.emitAdd(joinedPath, entry.stats, processPath, opts, forceAdd); + } + }).on(EV_ERROR$1, EMPTY_FN$1).on(STR_END$1, () => { + this.fsw._emitReady(); + }); + } else { + this.emitAdd(wh.watchPath, stats, processPath, opts, forceAdd); + this.fsw._emitReady(); + } + } catch (error) { + if (!error || this.fsw._handleError(error)) { + // TODO: Strange thing: "should not choke on an ignored watch path" will be failed without 2 ready calls -__- + this.fsw._emitReady(); + this.fsw._emitReady(); + } + } + + if (opts.persistent && forceAdd !== true) { + if (typeof transform === FUNCTION_TYPE$1) { + // realpath has already been resolved + this.initWatch(undefined, path, wh, processPath); + } else { + let realPath; + try { + realPath = await realpath(wh.watchPath); + } catch (e) {} + this.initWatch(realPath, path, wh, processPath); + } + } +} + +}; + +fseventsHandler.exports = FsEventsHandler$1; +fseventsHandler.exports.canUse = canUse; + +var fseventsHandlerExports = fseventsHandler.exports; + +const { EventEmitter } = require$$0$3; +const fs = require$$0$1; +const sysPath = require$$0$2; +const { promisify } = require$$2; +const readdirp = readdirp_1; +const anymatch = anymatchExports.default; +const globParent = globParent$1; +const isGlob = isGlob$2; +const braces = braces_1; +const normalizePath = normalizePath$2; + +const NodeFsHandler = nodefsHandler; +const FsEventsHandler = fseventsHandlerExports; +const { + EV_ALL, + EV_READY, + EV_ADD, + EV_CHANGE, + EV_UNLINK, + EV_ADD_DIR, + EV_UNLINK_DIR, + EV_RAW, + EV_ERROR, + + STR_CLOSE, + STR_END, + + BACK_SLASH_RE, + DOUBLE_SLASH_RE, + SLASH_OR_BACK_SLASH_RE, + DOT_RE, + REPLACER_RE, + + SLASH, + SLASH_SLASH, + BRACE_START, + BANG, + ONE_DOT, + TWO_DOTS, + GLOBSTAR, + SLASH_GLOBSTAR, + ANYMATCH_OPTS, + STRING_TYPE, + FUNCTION_TYPE, + EMPTY_STR, + EMPTY_FN, + + isWindows, + isMacos, + isIBMi +} = constants; + +const stat = promisify(fs.stat); +const readdir = promisify(fs.readdir); + +/** + * @typedef {String} Path + * @typedef {'all'|'add'|'addDir'|'change'|'unlink'|'unlinkDir'|'raw'|'error'|'ready'} EventName + * @typedef {'readdir'|'watch'|'add'|'remove'|'change'} ThrottleType + */ + +/** + * + * @typedef {Object} WatchHelpers + * @property {Boolean} followSymlinks + * @property {'stat'|'lstat'} statMethod + * @property {Path} path + * @property {Path} watchPath + * @property {Function} entryPath + * @property {Boolean} hasGlob + * @property {Object} globFilter + * @property {Function} filterPath + * @property {Function} filterDir + */ + +const arrify = (value = []) => Array.isArray(value) ? value : [value]; +const flatten = (list, result = []) => { + list.forEach(item => { + if (Array.isArray(item)) { + flatten(item, result); + } else { + result.push(item); + } + }); + return result; +}; + +const unifyPaths = (paths_) => { + /** + * @type {Array} + */ + const paths = flatten(arrify(paths_)); + if (!paths.every(p => typeof p === STRING_TYPE)) { + throw new TypeError(`Non-string provided as watch path: ${paths}`); + } + return paths.map(normalizePathToUnix); +}; + +// If SLASH_SLASH occurs at the beginning of path, it is not replaced +// because "//StoragePC/DrivePool/Movies" is a valid network path +const toUnix = (string) => { + let str = string.replace(BACK_SLASH_RE, SLASH); + let prepend = false; + if (str.startsWith(SLASH_SLASH)) { + prepend = true; + } + while (str.match(DOUBLE_SLASH_RE)) { + str = str.replace(DOUBLE_SLASH_RE, SLASH); + } + if (prepend) { + str = SLASH + str; + } + return str; +}; + +// Our version of upath.normalize +// TODO: this is not equal to path-normalize module - investigate why +const normalizePathToUnix = (path) => toUnix(sysPath.normalize(toUnix(path))); + +const normalizeIgnored = (cwd = EMPTY_STR) => (path) => { + if (typeof path !== STRING_TYPE) return path; + return normalizePathToUnix(sysPath.isAbsolute(path) ? path : sysPath.join(cwd, path)); +}; + +const getAbsolutePath = (path, cwd) => { + if (sysPath.isAbsolute(path)) { + return path; + } + if (path.startsWith(BANG)) { + return BANG + sysPath.join(cwd, path.slice(1)); + } + return sysPath.join(cwd, path); +}; + +const undef = (opts, key) => opts[key] === undefined; + +/** + * Directory entry. + * @property {Path} path + * @property {Set} items + */ +class DirEntry { + /** + * @param {Path} dir + * @param {Function} removeWatcher + */ + constructor(dir, removeWatcher) { + this.path = dir; + this._removeWatcher = removeWatcher; + /** @type {Set} */ + this.items = new Set(); + } + + add(item) { + const {items} = this; + if (!items) return; + if (item !== ONE_DOT && item !== TWO_DOTS) items.add(item); + } + + async remove(item) { + const {items} = this; + if (!items) return; + items.delete(item); + if (items.size > 0) return; + + const dir = this.path; + try { + await readdir(dir); + } catch (err) { + if (this._removeWatcher) { + this._removeWatcher(sysPath.dirname(dir), sysPath.basename(dir)); + } + } + } + + has(item) { + const {items} = this; + if (!items) return; + return items.has(item); + } + + /** + * @returns {Array} + */ + getChildren() { + const {items} = this; + if (!items) return; + return [...items.values()]; + } + + dispose() { + this.items.clear(); + delete this.path; + delete this._removeWatcher; + delete this.items; + Object.freeze(this); + } +} + +const STAT_METHOD_F = 'stat'; +const STAT_METHOD_L = 'lstat'; +class WatchHelper { + constructor(path, watchPath, follow, fsw) { + this.fsw = fsw; + this.path = path = path.replace(REPLACER_RE, EMPTY_STR); + this.watchPath = watchPath; + this.fullWatchPath = sysPath.resolve(watchPath); + this.hasGlob = watchPath !== path; + /** @type {object|boolean} */ + if (path === EMPTY_STR) this.hasGlob = false; + this.globSymlink = this.hasGlob && follow ? undefined : false; + this.globFilter = this.hasGlob ? anymatch(path, undefined, ANYMATCH_OPTS) : false; + this.dirParts = this.getDirParts(path); + this.dirParts.forEach((parts) => { + if (parts.length > 1) parts.pop(); + }); + this.followSymlinks = follow; + this.statMethod = follow ? STAT_METHOD_F : STAT_METHOD_L; + } + + checkGlobSymlink(entry) { + // only need to resolve once + // first entry should always have entry.parentDir === EMPTY_STR + if (this.globSymlink === undefined) { + this.globSymlink = entry.fullParentDir === this.fullWatchPath ? + false : {realPath: entry.fullParentDir, linkPath: this.fullWatchPath}; + } + + if (this.globSymlink) { + return entry.fullPath.replace(this.globSymlink.realPath, this.globSymlink.linkPath); + } + + return entry.fullPath; + } + + entryPath(entry) { + return sysPath.join(this.watchPath, + sysPath.relative(this.watchPath, this.checkGlobSymlink(entry)) + ); + } + + filterPath(entry) { + const {stats} = entry; + if (stats && stats.isSymbolicLink()) return this.filterDir(entry); + const resolvedPath = this.entryPath(entry); + const matchesGlob = this.hasGlob && typeof this.globFilter === FUNCTION_TYPE ? + this.globFilter(resolvedPath) : true; + return matchesGlob && + this.fsw._isntIgnored(resolvedPath, stats) && + this.fsw._hasReadPermissions(stats); + } + + getDirParts(path) { + if (!this.hasGlob) return []; + const parts = []; + const expandedPath = path.includes(BRACE_START) ? braces.expand(path) : [path]; + expandedPath.forEach((path) => { + parts.push(sysPath.relative(this.watchPath, path).split(SLASH_OR_BACK_SLASH_RE)); + }); + return parts; + } + + filterDir(entry) { + if (this.hasGlob) { + const entryParts = this.getDirParts(this.checkGlobSymlink(entry)); + let globstar = false; + this.unmatchedGlob = !this.dirParts.some((parts) => { + return parts.every((part, i) => { + if (part === GLOBSTAR) globstar = true; + return globstar || !entryParts[0][i] || anymatch(part, entryParts[0][i], ANYMATCH_OPTS); + }); + }); + } + return !this.unmatchedGlob && this.fsw._isntIgnored(this.entryPath(entry), entry.stats); + } +} + +/** + * Watches files & directories for changes. Emitted events: + * `add`, `addDir`, `change`, `unlink`, `unlinkDir`, `all`, `error` + * + * new FSWatcher() + * .add(directories) + * .on('add', path => log('File', path, 'was added')) + */ +class FSWatcher extends EventEmitter { +// Not indenting methods for history sake; for now. +constructor(_opts) { + super(); + + const opts = {}; + if (_opts) Object.assign(opts, _opts); // for frozen objects + + /** @type {Map} */ + this._watched = new Map(); + /** @type {Map} */ + this._closers = new Map(); + /** @type {Set} */ + this._ignoredPaths = new Set(); + + /** @type {Map} */ + this._throttled = new Map(); + + /** @type {Map} */ + this._symlinkPaths = new Map(); + + this._streams = new Set(); + this.closed = false; + + // Set up default options. + if (undef(opts, 'persistent')) opts.persistent = true; + if (undef(opts, 'ignoreInitial')) opts.ignoreInitial = false; + if (undef(opts, 'ignorePermissionErrors')) opts.ignorePermissionErrors = false; + if (undef(opts, 'interval')) opts.interval = 100; + if (undef(opts, 'binaryInterval')) opts.binaryInterval = 300; + if (undef(opts, 'disableGlobbing')) opts.disableGlobbing = false; + opts.enableBinaryInterval = opts.binaryInterval !== opts.interval; + + // Enable fsevents on OS X when polling isn't explicitly enabled. + if (undef(opts, 'useFsEvents')) opts.useFsEvents = !opts.usePolling; + + // If we can't use fsevents, ensure the options reflect it's disabled. + const canUseFsEvents = FsEventsHandler.canUse(); + if (!canUseFsEvents) opts.useFsEvents = false; + + // Use polling on Mac if not using fsevents. + // Other platforms use non-polling fs_watch. + if (undef(opts, 'usePolling') && !opts.useFsEvents) { + opts.usePolling = isMacos; + } + + // Always default to polling on IBM i because fs.watch() is not available on IBM i. + if(isIBMi) { + opts.usePolling = true; + } + + // Global override (useful for end-developers that need to force polling for all + // instances of chokidar, regardless of usage/dependency depth) + const envPoll = process.env.CHOKIDAR_USEPOLLING; + if (envPoll !== undefined) { + const envLower = envPoll.toLowerCase(); + + if (envLower === 'false' || envLower === '0') { + opts.usePolling = false; + } else if (envLower === 'true' || envLower === '1') { + opts.usePolling = true; + } else { + opts.usePolling = !!envLower; + } + } + const envInterval = process.env.CHOKIDAR_INTERVAL; + if (envInterval) { + opts.interval = Number.parseInt(envInterval, 10); + } + + // Editor atomic write normalization enabled by default with fs.watch + if (undef(opts, 'atomic')) opts.atomic = !opts.usePolling && !opts.useFsEvents; + if (opts.atomic) this._pendingUnlinks = new Map(); + + if (undef(opts, 'followSymlinks')) opts.followSymlinks = true; + + if (undef(opts, 'awaitWriteFinish')) opts.awaitWriteFinish = false; + if (opts.awaitWriteFinish === true) opts.awaitWriteFinish = {}; + const awf = opts.awaitWriteFinish; + if (awf) { + if (!awf.stabilityThreshold) awf.stabilityThreshold = 2000; + if (!awf.pollInterval) awf.pollInterval = 100; + this._pendingWrites = new Map(); + } + if (opts.ignored) opts.ignored = arrify(opts.ignored); + + let readyCalls = 0; + this._emitReady = () => { + readyCalls++; + if (readyCalls >= this._readyCount) { + this._emitReady = EMPTY_FN; + this._readyEmitted = true; + // use process.nextTick to allow time for listener to be bound + process.nextTick(() => this.emit(EV_READY)); + } + }; + this._emitRaw = (...args) => this.emit(EV_RAW, ...args); + this._readyEmitted = false; + this.options = opts; + + // Initialize with proper watcher. + if (opts.useFsEvents) { + this._fsEventsHandler = new FsEventsHandler(this); + } else { + this._nodeFsHandler = new NodeFsHandler(this); + } + + // You’re frozen when your heart’s not open. + Object.freeze(opts); +} + +// Public methods + +/** + * Adds paths to be watched on an existing FSWatcher instance + * @param {Path|Array} paths_ + * @param {String=} _origAdd private; for handling non-existent paths to be watched + * @param {Boolean=} _internal private; indicates a non-user add + * @returns {FSWatcher} for chaining + */ +add(paths_, _origAdd, _internal) { + const {cwd, disableGlobbing} = this.options; + this.closed = false; + let paths = unifyPaths(paths_); + if (cwd) { + paths = paths.map((path) => { + const absPath = getAbsolutePath(path, cwd); + + // Check `path` instead of `absPath` because the cwd portion can't be a glob + if (disableGlobbing || !isGlob(path)) { + return absPath; + } + return normalizePath(absPath); + }); + } + + // set aside negated glob strings + paths = paths.filter((path) => { + if (path.startsWith(BANG)) { + this._ignoredPaths.add(path.slice(1)); + return false; + } + + // if a path is being added that was previously ignored, stop ignoring it + this._ignoredPaths.delete(path); + this._ignoredPaths.delete(path + SLASH_GLOBSTAR); + + // reset the cached userIgnored anymatch fn + // to make ignoredPaths changes effective + this._userIgnored = undefined; + + return true; + }); + + if (this.options.useFsEvents && this._fsEventsHandler) { + if (!this._readyCount) this._readyCount = paths.length; + if (this.options.persistent) this._readyCount += paths.length; + paths.forEach((path) => this._fsEventsHandler._addToFsEvents(path)); + } else { + if (!this._readyCount) this._readyCount = 0; + this._readyCount += paths.length; + Promise.all( + paths.map(async path => { + const res = await this._nodeFsHandler._addToNodeFs(path, !_internal, 0, 0, _origAdd); + if (res) this._emitReady(); + return res; + }) + ).then(results => { + if (this.closed) return; + results.filter(item => item).forEach(item => { + this.add(sysPath.dirname(item), sysPath.basename(_origAdd || item)); + }); + }); + } + + return this; +} + +/** + * Close watchers or start ignoring events from specified paths. + * @param {Path|Array} paths_ - string or array of strings, file/directory paths and/or globs + * @returns {FSWatcher} for chaining +*/ +unwatch(paths_) { + if (this.closed) return this; + const paths = unifyPaths(paths_); + const {cwd} = this.options; + + paths.forEach((path) => { + // convert to absolute path unless relative path already matches + if (!sysPath.isAbsolute(path) && !this._closers.has(path)) { + if (cwd) path = sysPath.join(cwd, path); + path = sysPath.resolve(path); + } + + this._closePath(path); + + this._ignoredPaths.add(path); + if (this._watched.has(path)) { + this._ignoredPaths.add(path + SLASH_GLOBSTAR); + } + + // reset the cached userIgnored anymatch fn + // to make ignoredPaths changes effective + this._userIgnored = undefined; + }); + + return this; +} + +/** + * Close watchers and remove all listeners from watched paths. + * @returns {Promise}. +*/ +close() { + if (this.closed) return this._closePromise; + this.closed = true; + + // Memory management. + this.removeAllListeners(); + const closers = []; + this._closers.forEach(closerList => closerList.forEach(closer => { + const promise = closer(); + if (promise instanceof Promise) closers.push(promise); + })); + this._streams.forEach(stream => stream.destroy()); + this._userIgnored = undefined; + this._readyCount = 0; + this._readyEmitted = false; + this._watched.forEach(dirent => dirent.dispose()); + ['closers', 'watched', 'streams', 'symlinkPaths', 'throttled'].forEach(key => { + this[`_${key}`].clear(); + }); + + this._closePromise = closers.length ? Promise.all(closers).then(() => undefined) : Promise.resolve(); + return this._closePromise; +} + +/** + * Expose list of watched paths + * @returns {Object} for chaining +*/ +getWatched() { + const watchList = {}; + this._watched.forEach((entry, dir) => { + const key = this.options.cwd ? sysPath.relative(this.options.cwd, dir) : dir; + watchList[key || ONE_DOT] = entry.getChildren().sort(); + }); + return watchList; +} + +emitWithAll(event, args) { + this.emit(...args); + if (event !== EV_ERROR) this.emit(EV_ALL, ...args); +} + +// Common helpers +// -------------- + +/** + * Normalize and emit events. + * Calling _emit DOES NOT MEAN emit() would be called! + * @param {EventName} event Type of event + * @param {Path} path File or directory path + * @param {*=} val1 arguments to be passed with event + * @param {*=} val2 + * @param {*=} val3 + * @returns the error if defined, otherwise the value of the FSWatcher instance's `closed` flag + */ +async _emit(event, path, val1, val2, val3) { + if (this.closed) return; + + const opts = this.options; + if (isWindows) path = sysPath.normalize(path); + if (opts.cwd) path = sysPath.relative(opts.cwd, path); + /** @type Array */ + const args = [event, path]; + if (val3 !== undefined) args.push(val1, val2, val3); + else if (val2 !== undefined) args.push(val1, val2); + else if (val1 !== undefined) args.push(val1); + + const awf = opts.awaitWriteFinish; + let pw; + if (awf && (pw = this._pendingWrites.get(path))) { + pw.lastChange = new Date(); + return this; + } + + if (opts.atomic) { + if (event === EV_UNLINK) { + this._pendingUnlinks.set(path, args); + setTimeout(() => { + this._pendingUnlinks.forEach((entry, path) => { + this.emit(...entry); + this.emit(EV_ALL, ...entry); + this._pendingUnlinks.delete(path); + }); + }, typeof opts.atomic === 'number' ? opts.atomic : 100); + return this; + } + if (event === EV_ADD && this._pendingUnlinks.has(path)) { + event = args[0] = EV_CHANGE; + this._pendingUnlinks.delete(path); + } + } + + if (awf && (event === EV_ADD || event === EV_CHANGE) && this._readyEmitted) { + const awfEmit = (err, stats) => { + if (err) { + event = args[0] = EV_ERROR; + args[1] = err; + this.emitWithAll(event, args); + } else if (stats) { + // if stats doesn't exist the file must have been deleted + if (args.length > 2) { + args[2] = stats; + } else { + args.push(stats); + } + this.emitWithAll(event, args); + } + }; + + this._awaitWriteFinish(path, awf.stabilityThreshold, event, awfEmit); + return this; + } + + if (event === EV_CHANGE) { + const isThrottled = !this._throttle(EV_CHANGE, path, 50); + if (isThrottled) return this; + } + + if (opts.alwaysStat && val1 === undefined && + (event === EV_ADD || event === EV_ADD_DIR || event === EV_CHANGE) + ) { + const fullPath = opts.cwd ? sysPath.join(opts.cwd, path) : path; + let stats; + try { + stats = await stat(fullPath); + } catch (err) {} + // Suppress event when fs_stat fails, to avoid sending undefined 'stat' + if (!stats || this.closed) return; + args.push(stats); + } + this.emitWithAll(event, args); + + return this; +} + +/** + * Common handler for errors + * @param {Error} error + * @returns {Error|Boolean} The error if defined, otherwise the value of the FSWatcher instance's `closed` flag + */ +_handleError(error) { + const code = error && error.code; + if (error && code !== 'ENOENT' && code !== 'ENOTDIR' && + (!this.options.ignorePermissionErrors || (code !== 'EPERM' && code !== 'EACCES')) + ) { + this.emit(EV_ERROR, error); + } + return error || this.closed; +} + +/** + * Helper utility for throttling + * @param {ThrottleType} actionType type being throttled + * @param {Path} path being acted upon + * @param {Number} timeout duration of time to suppress duplicate actions + * @returns {Object|false} tracking object or false if action should be suppressed + */ +_throttle(actionType, path, timeout) { + if (!this._throttled.has(actionType)) { + this._throttled.set(actionType, new Map()); + } + + /** @type {Map} */ + const action = this._throttled.get(actionType); + /** @type {Object} */ + const actionPath = action.get(path); + + if (actionPath) { + actionPath.count++; + return false; + } + + let timeoutObject; + const clear = () => { + const item = action.get(path); + const count = item ? item.count : 0; + action.delete(path); + clearTimeout(timeoutObject); + if (item) clearTimeout(item.timeoutObject); + return count; + }; + timeoutObject = setTimeout(clear, timeout); + const thr = {timeoutObject, clear, count: 0}; + action.set(path, thr); + return thr; +} + +_incrReadyCount() { + return this._readyCount++; +} + +/** + * Awaits write operation to finish. + * Polls a newly created file for size variations. When files size does not change for 'threshold' milliseconds calls callback. + * @param {Path} path being acted upon + * @param {Number} threshold Time in milliseconds a file size must be fixed before acknowledging write OP is finished + * @param {EventName} event + * @param {Function} awfEmit Callback to be called when ready for event to be emitted. + */ +_awaitWriteFinish(path, threshold, event, awfEmit) { + let timeoutHandler; + + let fullPath = path; + if (this.options.cwd && !sysPath.isAbsolute(path)) { + fullPath = sysPath.join(this.options.cwd, path); + } + + const now = new Date(); + + const awaitWriteFinish = (prevStat) => { + fs.stat(fullPath, (err, curStat) => { + if (err || !this._pendingWrites.has(path)) { + if (err && err.code !== 'ENOENT') awfEmit(err); + return; + } + + const now = Number(new Date()); + + if (prevStat && curStat.size !== prevStat.size) { + this._pendingWrites.get(path).lastChange = now; + } + const pw = this._pendingWrites.get(path); + const df = now - pw.lastChange; + + if (df >= threshold) { + this._pendingWrites.delete(path); + awfEmit(undefined, curStat); + } else { + timeoutHandler = setTimeout( + awaitWriteFinish, + this.options.awaitWriteFinish.pollInterval, + curStat + ); + } + }); + }; + + if (!this._pendingWrites.has(path)) { + this._pendingWrites.set(path, { + lastChange: now, + cancelWait: () => { + this._pendingWrites.delete(path); + clearTimeout(timeoutHandler); + return event; + } + }); + timeoutHandler = setTimeout( + awaitWriteFinish, + this.options.awaitWriteFinish.pollInterval + ); + } +} + +_getGlobIgnored() { + return [...this._ignoredPaths.values()]; +} + +/** + * Determines whether user has asked to ignore this path. + * @param {Path} path filepath or dir + * @param {fs.Stats=} stats result of fs.stat + * @returns {Boolean} + */ +_isIgnored(path, stats) { + if (this.options.atomic && DOT_RE.test(path)) return true; + if (!this._userIgnored) { + const {cwd} = this.options; + const ign = this.options.ignored; + + const ignored = ign && ign.map(normalizeIgnored(cwd)); + const paths = arrify(ignored) + .filter((path) => typeof path === STRING_TYPE && !isGlob(path)) + .map((path) => path + SLASH_GLOBSTAR); + const list = this._getGlobIgnored().map(normalizeIgnored(cwd)).concat(ignored, paths); + this._userIgnored = anymatch(list, undefined, ANYMATCH_OPTS); + } + + return this._userIgnored([path, stats]); +} + +_isntIgnored(path, stat) { + return !this._isIgnored(path, stat); +} + +/** + * Provides a set of common helpers and properties relating to symlink and glob handling. + * @param {Path} path file, directory, or glob pattern being watched + * @param {Number=} depth at any depth > 0, this isn't a glob + * @returns {WatchHelper} object containing helpers for this path + */ +_getWatchHelpers(path, depth) { + const watchPath = depth || this.options.disableGlobbing || !isGlob(path) ? path : globParent(path); + const follow = this.options.followSymlinks; + + return new WatchHelper(path, watchPath, follow, this); +} + +// Directory helpers +// ----------------- + +/** + * Provides directory tracking objects + * @param {String} directory path of the directory + * @returns {DirEntry} the directory's tracking object + */ +_getWatchedDir(directory) { + if (!this._boundRemove) this._boundRemove = this._remove.bind(this); + const dir = sysPath.resolve(directory); + if (!this._watched.has(dir)) this._watched.set(dir, new DirEntry(dir, this._boundRemove)); + return this._watched.get(dir); +} + +// File helpers +// ------------ + +/** + * Check for read permissions. + * Based on this answer on SO: https://stackoverflow.com/a/11781404/1358405 + * @param {fs.Stats} stats - object, result of fs_stat + * @returns {Boolean} indicates whether the file can be read +*/ +_hasReadPermissions(stats) { + if (this.options.ignorePermissionErrors) return true; + + // stats.mode may be bigint + const md = stats && Number.parseInt(stats.mode, 10); + const st = md & 0o777; + const it = Number.parseInt(st.toString(8)[0], 10); + return Boolean(4 & it); +} + +/** + * Handles emitting unlink events for + * files and directories, and via recursion, for + * files and directories within directories that are unlinked + * @param {String} directory within which the following item is located + * @param {String} item base path of item/directory + * @returns {void} +*/ +_remove(directory, item, isDirectory) { + // if what is being deleted is a directory, get that directory's paths + // for recursive deleting and cleaning of watched object + // if it is not a directory, nestedDirectoryChildren will be empty array + const path = sysPath.join(directory, item); + const fullPath = sysPath.resolve(path); + isDirectory = isDirectory != null + ? isDirectory + : this._watched.has(path) || this._watched.has(fullPath); + + // prevent duplicate handling in case of arriving here nearly simultaneously + // via multiple paths (such as _handleFile and _handleDir) + if (!this._throttle('remove', path, 100)) return; + + // if the only watched file is removed, watch for its return + if (!isDirectory && !this.options.useFsEvents && this._watched.size === 1) { + this.add(directory, item, true); + } + + // This will create a new entry in the watched object in either case + // so we got to do the directory check beforehand + const wp = this._getWatchedDir(path); + const nestedDirectoryChildren = wp.getChildren(); + + // Recursively remove children directories / files. + nestedDirectoryChildren.forEach(nested => this._remove(path, nested)); + + // Check if item was on the watched list and remove it + const parent = this._getWatchedDir(directory); + const wasTracked = parent.has(item); + parent.remove(item); + + // Fixes issue #1042 -> Relative paths were detected and added as symlinks + // (https://github.com/paulmillr/chokidar/blob/e1753ddbc9571bdc33b4a4af172d52cb6e611c10/lib/nodefs-handler.js#L612), + // but never removed from the map in case the path was deleted. + // This leads to an incorrect state if the path was recreated: + // https://github.com/paulmillr/chokidar/blob/e1753ddbc9571bdc33b4a4af172d52cb6e611c10/lib/nodefs-handler.js#L553 + if (this._symlinkPaths.has(fullPath)) { + this._symlinkPaths.delete(fullPath); + } + + // If we wait for this file to be fully written, cancel the wait. + let relPath = path; + if (this.options.cwd) relPath = sysPath.relative(this.options.cwd, path); + if (this.options.awaitWriteFinish && this._pendingWrites.has(relPath)) { + const event = this._pendingWrites.get(relPath).cancelWait(); + if (event === EV_ADD) return; + } + + // The Entry will either be a directory that just got removed + // or a bogus entry to a file, in either case we have to remove it + this._watched.delete(path); + this._watched.delete(fullPath); + const eventName = isDirectory ? EV_UNLINK_DIR : EV_UNLINK; + if (wasTracked && !this._isIgnored(path)) this._emit(eventName, path); + + // Avoid conflicts if we later create another file with the same name + if (!this.options.useFsEvents) { + this._closePath(path); + } +} + +/** + * Closes all watchers for a path + * @param {Path} path + */ +_closePath(path) { + this._closeFile(path); + const dir = sysPath.dirname(path); + this._getWatchedDir(dir).remove(sysPath.basename(path)); +} + +/** + * Closes only file-specific watchers + * @param {Path} path + */ +_closeFile(path) { + const closers = this._closers.get(path); + if (!closers) return; + closers.forEach(closer => closer()); + this._closers.delete(path); +} + +/** + * + * @param {Path} path + * @param {Function} closer + */ +_addPathCloser(path, closer) { + if (!closer) return; + let list = this._closers.get(path); + if (!list) { + list = []; + this._closers.set(path, list); + } + list.push(closer); +} + +_readdirp(root, opts) { + if (this.closed) return; + const options = {type: EV_ALL, alwaysStat: true, lstat: true, ...opts}; + let stream = readdirp(root, options); + this._streams.add(stream); + stream.once(STR_CLOSE, () => { + stream = undefined; + }); + stream.once(STR_END, () => { + if (stream) { + this._streams.delete(stream); + stream = undefined; + } + }); + return stream; +} + +} + +// Export FSWatcher class +chokidar.FSWatcher = FSWatcher; + +/** + * Instantiates watcher with paths to be tracked. + * @param {String|Array} paths file/directory paths and/or globs + * @param {Object=} options chokidar opts + * @returns an instance of FSWatcher for chaining. + */ +const watch = (paths, options) => { + const watcher = new FSWatcher(options); + watcher.add(paths); + return watcher; +}; + +chokidar.watch = watch; + +exports.chokidar = chokidar; +//# sourceMappingURL=index.js.map diff --git a/.pnpm-store/v3/files/24/0b0cae6d59e96e08aa0f50ecb5bfea5097aea6b88e77443a547fcaeecd18d3f406b3f048cf22e3ecb3c9aea1c60b0dbf2c952bccb0b6168d8459aa77c67e72-index.json b/.pnpm-store/v3/files/24/0b0cae6d59e96e08aa0f50ecb5bfea5097aea6b88e77443a547fcaeecd18d3f406b3f048cf22e3ecb3c9aea1c60b0dbf2c952bccb0b6168d8459aa77c67e72-index.json new file mode 100644 index 00000000..0308010e --- /dev/null +++ b/.pnpm-store/v3/files/24/0b0cae6d59e96e08aa0f50ecb5bfea5097aea6b88e77443a547fcaeecd18d3f406b3f048cf22e3ecb3c9aea1c60b0dbf2c952bccb0b6168d8459aa77c67e72-index.json @@ -0,0 +1 @@ +{"files":{"components/Code.astro":{"checkedAt":1708389320223,"integrity":"sha512-7pD8v4/NI/l+H95kn7+G+SR1i/Tj4+x4CJFXNe8z8OUxiMfbjsDF4wJQRORVj7RYXKifCovhs6LE2e3Dz1lyuQ==","mode":420,"size":2504},"components/Debug.astro":{"checkedAt":1708389320223,"integrity":"sha512-idkgSWCx+HMSCHMnu3kqieWPqV6H8HUThhNBrGptvytMeIBmAV5EpyalkhSpiBqX+0bD7NjjssdZgGD0GjQd8g==","mode":420,"size":1223},"components/Image.astro":{"checkedAt":1708389320224,"integrity":"sha512-rpfyy8rThWx3mhQIT1cStEBt/H9ojf77WjPqZCROJ4Vx3WjGlov3GdCkWNOr9NM1PKYnaUeWgr49ZSPk9Cgozg==","mode":420,"size":1354},"components/Picture.astro":{"checkedAt":1708389320224,"integrity":"sha512-iHKyxBSJvreAYtnSjo8nMPqPxDQDoe/znPEjjQEB/r4vAI3BQYGrf0OM/tXBnC4H+77gVzqW/WQ2svgudg+f7A==","mode":420,"size":2860},"components/ViewTransitions.astro":{"checkedAt":1708389320224,"integrity":"sha512-zWNqE9wVHmfxoWP64Y7sEJfMLvZXR89INb2ix7ewqR6aOTQ/0Jh3H2gpnrIEBAP4rG40BVr1Jyk+uEc1/jOSBg==","mode":420,"size":4343},"components/viewtransitions.css":{"checkedAt":1708389320226,"integrity":"sha512-yEG8ABs6wyDd30N4jyuqQPyAW9VxS/4vpG+msuDO6xbjyu2msVbUDBrf5F7qSt+ezbrgoc/yVpMvMa9VIxGyAw==","mode":420,"size":708},"dist/template/4xx.js":{"checkedAt":1708389320226,"integrity":"sha512-0AK1caaJRZ5mt6arq/kEAdeS4d2yJ8+pPHzLkh04yfT3Sd/XrunCAEtDrcDebbKPgtPwRVZVvIXZB+Th4tg++g==","mode":420,"size":5142},"dist/runtime/client/dev-toolbar/apps/audit/a11y.js":{"checkedAt":1708389320226,"integrity":"sha512-IDPoo3BA/hw6WkHmCjk9Q8lDk/gOXhK+V2/dWgD8ekTJT3FG56HtuP+FbecZfzoMVVlrCNsWTRnsabLwc+R4KQ==","mode":420,"size":21966},"dist/core/build/add-rollup-input.js":{"checkedAt":1708389320226,"integrity":"sha512-xmoybo1JcI4GiNKGvgRaXKvcyTVRLy0gwu+TLLt+gYdNxbgTe5AcL3paWF7CppZ2sv5pZtiJpfcoiUCYdesnsg==","mode":420,"size":905},"dist/runtime/server/render/any.js":{"checkedAt":1708389320226,"integrity":"sha512-wHpHIo8B7lP0WL9+LDh9A7s9vNmmffHtJMs1XuTxaF8l9N1mvnKQjuOjnmravs6ivGlzlPN3Pmk0+ESdrFlG6g==","mode":420,"size":1688},"dist/@types/app.d.js":{"checkedAt":1708389320226,"integrity":"sha512-z4PhNX7vuL3xVChQ1m2AB9Yg5AULVxXcg/SpIdNs6c5H0NE8XYXysP+DGNKHfuwvY7kxvUdBeoGlODJ6+SfaPg==","mode":420,"size":0},"dist/runtime/server/astro-component.js":{"checkedAt":1708389320227,"integrity":"sha512-4qsJLsrzG3Q1aN3l8D7jx5HloGDQ/jSpFfzh4E2ppUCN6FelEdk9tjM/zMeA5oLCbxrOwlsx3Da0fzX3C6k0DQ==","mode":420,"size":1172},"dist/runtime/server/astro-global.js":{"checkedAt":1708389320227,"integrity":"sha512-crPNGFmhjlBK4YUSEc/CLWAhAEGfkNI3zk6KH+eL/nsV1IfYivqZed/6t8fTh2AgClNYsUbd5lqF3PzMeNFELA==","mode":420,"size":1006},"dist/runtime/server/astro-island.js":{"checkedAt":1708389320227,"integrity":"sha512-UuE42GLk2LZBrU2/F5zHEm9bJ/+munBzce1cV2hcTyRd3DmNPO5JpVVWh4aSBOm/kZ9fCZhxgIjgZGW3dXXrfA==","mode":420,"size":6537},"dist/runtime/server/astro-island.prebuilt-dev.js":{"checkedAt":1708389320227,"integrity":"sha512-2o3pR03VNeq5xDeNBEYLCfjRzfUCY+WTl7ksSSKaiDy8LKit7dGkEUCW4p2fasJF2tnfovpEhr+vyYZgqtOPzA==","mode":420,"size":3678},"dist/runtime/server/astro-island.prebuilt.js":{"checkedAt":1708389320227,"integrity":"sha512-M2T9HnXCvpHzhi/ZD5UgR0eI5czAXql2t1jLP+K74/mPbGO18qFP93UJ4e/iR2EcFhYcCHwQOOvxNxbmKboSlA==","mode":420,"size":3570},"astro.js":{"checkedAt":1708389320228,"integrity":"sha512-qcbaODqx3hs92zICxc8sAx7HD3iyyTrBkEzI0c98VqKC55hFxqtNAW/jjGs4LabdIYSedBr36l0rWZRPgTVZ2A==","mode":493,"size":2478},"dist/@types/astro.js":{"checkedAt":1708389320228,"integrity":"sha512-z4PhNX7vuL3xVChQ1m2AB9Yg5AULVxXcg/SpIdNs6c5H0NE8XYXysP+DGNKHfuwvY7kxvUdBeoGlODJ6+SfaPg==","mode":420,"size":0},"dist/runtime/client/dev-toolbar/apps/astro.js":{"checkedAt":1708389320228,"integrity":"sha512-WDQv10Nf1NFFySMWwqS3KIEF/1dcD5Zf8s2i6G23qyPWs3d0XIgsx+JZa/Jh+JnTtiYSnVgsIpmXifeGZu2NLQ==","mode":420,"size":18793},"dist/integrations/astroFeaturesValidation.js":{"checkedAt":1708389320228,"integrity":"sha512-ER2RqMLEtk0HWqMZAxJ7yFwXGV8T9aTbefyweipCDYF+AoMHxXgCnmhpUmyzngjFE0vmdLHJWE/paJqb6ZLjFA==","mode":420,"size":3744},"dist/assets/services/vendor/squoosh/avif/avif_enc.d.js":{"checkedAt":1708389320228,"integrity":"sha512-tCXrlpIm3CNsJHfNYSvczTAUobT6W9Wm+xtcE2s4UXUF/xfg6xVKYhb6yIKMB+YjnpEHY7gwqaLO4iqiBjtp9A==","mode":420,"size":320},"dist/assets/services/vendor/squoosh/avif/avif_node_dec.js":{"checkedAt":1708389320229,"integrity":"sha512-m+ZEepdqob02UEQutRzq2A4D4sto182KeoixsOSFUANiVYE7B9qiLSNKDTFQiJYNpuwOn3AjS7C4EiZNZOqATg==","mode":420,"size":52725},"dist/assets/services/vendor/squoosh/avif/avif_node_dec.wasm.js":{"checkedAt":1708389320236,"integrity":"sha512-Z2iiBhkfaRvdfQwzs6qMLjmlhq+5x5s8wxuvLyn8b/6xiWq9pGxGlEsZ9n2LnAyfrSmum7A5Eybus/BHd8hOiA==","mode":420,"size":1818860},"dist/assets/services/vendor/squoosh/avif/avif_node_enc.js":{"checkedAt":1708389320237,"integrity":"sha512-0d86AfPjkISAiU4ls2x2T29i7hCC99NLoRZMmKcSlrwQSwD/ocpbdumO295S5m56Ur++NWX/foO/1EV0RL8y9A==","mode":420,"size":60125},"dist/assets/services/vendor/squoosh/avif/avif_node_enc.wasm.js":{"checkedAt":1708389320252,"integrity":"sha512-vdkECsefhG4CPHXgl9P8aCi9NBrRl7XAamnUH+bG4zgt0mCcCp/hmtm6TpsOoHhBG0x8wEwKeyFHcuJX4H2exQ==","mode":420,"size":3523040},"dist/cli/add/babel.js":{"checkedAt":1708389320253,"integrity":"sha512-29whWLcqYbVQdyHnOO941RHoiAtVBzQGSr5OI1cu0gQBCuFXeafT5ar+rIATd0FzEUbYEX+mTxHkaAWPt1gBrg==","mode":420,"size":453},"dist/jsx/babel.js":{"checkedAt":1708389320253,"integrity":"sha512-fhZjLsjcbzo2yRjQEl1zsQGWDprHAhn4nraKr0EreaEXrreFxtIC25vzsUOIVMN0Jesy3v8xtZPueQul+AfafA==","mode":420,"size":11372},"dist/runtime/client/dev-toolbar/ui-library/badge.js":{"checkedAt":1708389320253,"integrity":"sha512-n94LHQfiCw8+qDg2aZMq7R6CluZbPvLOI7FY+wwJ/NqBp5s4eQbVqtznCFdNoiIEI2VwEr01acjux3OPN9ScZQ==","mode":420,"size":1568},"dist/vite-plugin-astro-server/base.js":{"checkedAt":1708389320253,"integrity":"sha512-v7ChA3UwqC1Xg/gDriGrMo0EkG5aybtqWH2wR5WIY1AITE0jy5HmdWJOOqcksXvxe9664QjVhp2vO+lqQjvL8w==","mode":420,"size":2183},"dist/assets/utils/vendor/image-size/types/bmp.js":{"checkedAt":1708389320253,"integrity":"sha512-obkquWHdLDMl/sNAgqsjTcyxXGFAnLeJ4H+yr0LgtRYNX3FCah3ZEpwQUKtbWlGcf2yOkrt6XIdBSryyWhAwgg==","mode":420,"size":277},"dist/core/client-directive/build.js":{"checkedAt":1708389320253,"integrity":"sha512-U7ArBX7xr8zrKp9Dt7y4gXHGZIFAW1V7zU29H7rKca8VDdHkmTk2VfMrFbWOMPXugprsY0YKpKYeqQNEcluhig==","mode":420,"size":816},"dist/core/build/buildPipeline.js":{"checkedAt":1708389320253,"integrity":"sha512-G6UXJYJtowRcAn6xSkUKylvpCTzZeZ38lzSTJMtJiVvk6yD6o/U2ELK2QRpCHpIvFvGk6PumGSQiyqye5kdGng==","mode":420,"size":5502},"dist/runtime/client/dev-toolbar/ui-library/button.js":{"checkedAt":1708389320253,"integrity":"sha512-EWNj8uAUTfwm2wL7BUjT/3e908dupBokjpmz4b4OdT37pmYWfJYq8NNylmGgPPNgJMuOMjmo9grDeIItf744UA==","mode":420,"size":1780},"dist/core/middleware/callMiddleware.js":{"checkedAt":1708389320254,"integrity":"sha512-t6gJjvUbTF4c2R44cOmTACh0KOisEZT/EzZlhAe8T4t8FHZeq5PrvQhLx7HdgpE97z3ZKofOuY9WcQevqYxsLQ==","mode":420,"size":1577},"dist/runtime/client/dev-toolbar/ui-library/card.js":{"checkedAt":1708389320254,"integrity":"sha512-ZdFMyC8LBBeFUMRFjOFjmNUl4ADJJo4V9j7Zm3SX33u4U+nUXWZE/Bq64BdFgOxF2YwEK+50E9Vb8T4N9j1LNQ==","mode":420,"size":1588},"dist/assets/services/vendor/squoosh/codecs.js":{"checkedAt":1708389320254,"integrity":"sha512-oHMQ5r3ajwTfZLm0JNuO+OEtLtJU6VPZ7H222BfNvyk++hNa9zkiOTyTb/iL5t6Ipb990S/BzTQbLnnbfrKCCQ==","mode":420,"size":7814},"dist/core/app/common.js":{"checkedAt":1708389320254,"integrity":"sha512-XhXH6xt7hBrKeJUIuJTla/s92YvXc2Pg1OwDjWi1nf9O7Uao3r7EIZQnZA+rIST1+iCeYgfXDMbGHqODAQhYpA==","mode":420,"size":939},"dist/core/build/common.js":{"checkedAt":1708389320254,"integrity":"sha512-PzXITFZx6rCR91WaS3MVdcKTBCu1RPd2NutN774UeIV2MNPJvF7S5HERfxDJNhiXfsVgYISjbMK92mkuP2S7Hw==","mode":420,"size":2821},"dist/runtime/server/render/common.js":{"checkedAt":1708389320254,"integrity":"sha512-K7tn/HYjupLjkmaM0ym8Of4VSwueO0oEM3xpKxi53ObDgFDTNK81hBtLH7bPS1/B4CNjXg7KagDV43HmhhT3ZQ==","mode":420,"size":3017},"dist/core/compile/compile.js":{"checkedAt":1708389320254,"integrity":"sha512-bAJcCEOpWU6xikYXg2+QezsTi+OaJeueBA0HAqn7lmk1IvXLTG91RhFnAgHX1LDJ0eIRbpQv27nUwokaeSrJzw==","mode":420,"size":2861},"dist/vite-plugin-astro/compile.js":{"checkedAt":1708389320254,"integrity":"sha512-h15lo5VFN3rwDZ/MOOKXRkTNTYbYBRnvFqo0SY7SOICZkkgTOFRdRPXbgsuaLbm7ZfcRO8Dk2KK+OqcSDeRY2g==","mode":420,"size":2529},"dist/core/redirects/component.js":{"checkedAt":1708389320254,"integrity":"sha512-mYKJ6pQO1oBfKXJu++FlxCFWysQGuaRbGCAZ/Tjy2KSgFvbUNvrhIwd4odPCTRyDRdvvIrKr38rN+74LYlE8fg==","mode":420,"size":339},"dist/jsx/component.js":{"checkedAt":1708389320255,"integrity":"sha512-bo6fCfS5aX+LDI7Iq9d241Fsg5aYy8luMqfLcetBnDQp8kNhfwMi0Wmx5e6IJaFNcpffkEnpvZC4wVx/3oAufg==","mode":420,"size":318},"dist/runtime/server/render/component.js":{"checkedAt":1708389320255,"integrity":"sha512-2aW1Iuv8E5bsM+NuPYY/ov9wWOlAiDhVMvJKDlyfr/dK4q9Vygu7w5mTLdrOfkE5xJdp9C9UEHmIaN9hgbxUOA==","mode":420,"size":14116},"dist/assets/endpoint/config.js":{"checkedAt":1708389320255,"integrity":"sha512-hp8H6UkGJjJfKqVL5X+zFH5oQVI5JBJtGiYYPpI/6T2k/dygntmGAIKRio/ZuNG/HO46V3N8wuoAgSY0Rol+/g==","mode":420,"size":368},"dist/core/config/config.js":{"checkedAt":1708389320255,"integrity":"sha512-GPwY1tvCSRUm52HWMFVOKEHtSTgGf99zTTTJ2+RDySFLkmslqUlFIxjmXiOUxjihO2Xcix0l6LfVR6DXpbxtLw==","mode":420,"size":4115},"dist/core/logger/console.js":{"checkedAt":1708389320255,"integrity":"sha512-1jULLaCEAg/XJao43yNNFh1QdZhVLd/AxKBSNPaeLlBVsizv4BeAlQZZbwbnt8Y0gU3zSBx8nkpihXqjTyeh/w==","mode":420,"size":416},"dist/core/constants.js":{"checkedAt":1708389320255,"integrity":"sha512-NZINE4YYvZ9YBKVzgj2oCDqx7G19vfCwJI7mJGD6IwgaAxenJz5oJE1dmYIucVIInFEgfpVDAciZNRp/2ulXVA==","mode":420,"size":361},"dist/assets/consts.js":{"checkedAt":1708389320255,"integrity":"sha512-FL0a0GZ0ZajHIwYo4OHaMAK50U+k8ZTSm4po5UtRi3aKnLtdNzVGqtLujJqN3RSaUBjDWQFjT5sjbgkxfiwZ6w==","mode":420,"size":679},"dist/content/consts.js":{"checkedAt":1708389320255,"integrity":"sha512-sk1/jv1Jc8Yu0084MXy5ZNAfnDQmKDNlHG+kyxT7kZIqas2qzvtlnvrxPCqbq4HNe1jb6ljlm66A+5e3Xy13ag==","mode":420,"size":836},"dist/runtime/server/consts.js":{"checkedAt":1708389320256,"integrity":"sha512-SKUoYet3TkWr5IMxL5sf5BZF4cYfsbmYpiEV065Lxjz7fC2VCPwYe5G2OPN9yt97Xg0NRg6i8uLsTAMzv6qekA==","mode":420,"size":91},"dist/core/dev/container.js":{"checkedAt":1708389320256,"integrity":"sha512-yWDkUJRRxG+wqIwQZnRPMPZUW4Hc/PftgJE2bZcMwNSH4vWBbxPoECWpVZ99rUzZFwfr+HhFublZLVztyLnZUQ==","mode":420,"size":2217},"dist/vite-plugin-markdown/content-entry-type.js":{"checkedAt":1708389320256,"integrity":"sha512-QYAMURKOgkZZEQBPOKfAbqdcmeXqZqYfnnJeIeTA4obx1/3v0SJ2KhazjfyQQa3OZjnmxRWIfg6FpjsBy8NFBg==","mode":420,"size":591},"dist/core/render/context.js":{"checkedAt":1708389320256,"integrity":"sha512-TQt6xEqu2kQixiudjcyDSv3EE7DAEkv12zCb/xJGLxKMnMBpCNReukQmvfEU0lwrgQgm0AtQDrMSsac1bXCBvQ==","mode":420,"size":5983},"dist/vite-plugin-astro-server/controller.js":{"checkedAt":1708389320256,"integrity":"sha512-vAWjoVY3tgyWQl+h5Mtto6AhK7BJFkHO0E9dgYxpe4kB0eZXNGsdT0EOSiIJHPDnct2FYVfQc4owTkmL2mEpTQ==","mode":420,"size":1791},"dist/core/cookies/cookies.js":{"checkedAt":1708389320256,"integrity":"sha512-Ku4VZzNfLZQxe+iX6cZVMCbs2OJ7cg0pwf3QXyBPMNN46ccWVAuLyETXbdqSSpErz9SpIIU0WQvW6jgmFJDwjg==","mode":420,"size":5763},"dist/core/logger/core.js":{"checkedAt":1708389320256,"integrity":"sha512-kQbVz+s2HQKuVIB04g8K0a6wjBOzq1XHAqF0UcRsfgcPT5iydP8TvSF+K/Up+ecBemk3INuSd6GKM+TRkwrzTw==","mode":420,"size":4230},"dist/core/render/core.js":{"checkedAt":1708389320256,"integrity":"sha512-bjJpnHizPTtXNmIGIhtk+FMz9RkYHfSYVO3tU6ffb26WGYSm2OJkViGZ1ClhFarMmFOPjFeAW4rmviUaPogNDA==","mode":420,"size":2198},"dist/core/create-vite.js":{"checkedAt":1708389320256,"integrity":"sha512-VpGYoOcPcH6bTOKeW3/1zpHEbd6Kt8LNuYq8urgG4qQNwciEcY4kiIAZSbFw95EiTy6XQPGFTYp1CfXFY6ebFQ==","mode":420,"size":9706},"dist/core/routing/manifest/create.js":{"checkedAt":1708389320257,"integrity":"sha512-QsYi97/dY1b8mV6gIdBmiDgbGl7SQDpYflJKZEhAL1KVKQPIy22GMxxLD/5FfWg4VynYAUys/L2n6vA/TlEItA==","mode":420,"size":21368},"dist/core/app/createOutgoingHttpHeaders.js":{"checkedAt":1708389320257,"integrity":"sha512-6HRGOJu1Vn3XApu1ubgPTTxcr7qhkp9Nr1M1qcJg6NbMVMEGuW7buYWcLyjryw44q/CSi+WUAwKQ1ks0T1d8Gg==","mode":420,"size":466},"dist/core/build/css-asset-name.js":{"checkedAt":1708389320257,"integrity":"sha512-3H3tscQwI2X0cbh3yONMct+N0R3pdf7COv7n0Nw0d1rsYbYQpVvGPL6XwPF5Px38EX4ABpT7gkihu0SRKJAgig==","mode":420,"size":2475},"dist/vite-plugin-astro-server/css.js":{"checkedAt":1708389320257,"integrity":"sha512-NpwIX81tzMu6F8xGq9TmaLtiJHio0HOBtS73uDadLvxavVZ3JUDGPtd7c0lYMk2DQJzCKoh3OiMgxQGBmcSf5w==","mode":420,"size":1472},"dist/assets/utils/vendor/image-size/types/cur.js":{"checkedAt":1708389320257,"integrity":"sha512-3vaReg88cAqFJN7rM9IdjDG2PNExHM8bgXS9w8MJGumZJ8rqyDTUVzxmtGgLMxpdRUEPlQGFHIc6sLRZ67i0XQ==","mode":420,"size":443},"dist/assets/utils/vendor/image-size/types/dds.js":{"checkedAt":1708389320257,"integrity":"sha512-d7X7pN5rD0iX7DemzrwYc60IqPlj66CP8k9QKyfrnmuvuOnsrTddMr3us9C1Dz+kEIKTK1gEx1Um/BwC/u0b9Q==","mode":420,"size":243},"dist/core/client-directive/default.js":{"checkedAt":1708389320258,"integrity":"sha512-/9Leio/5whR+MZIG7jk+5bRgH0xITL2e1KdEwvAdahzsTYu7uAaaG6QbLy6H9FHqbN/IMRkaN7cgVt0yRkoMGQ==","mode":420,"size":609},"dist/preferences/defaults.js":{"checkedAt":1708389320258,"integrity":"sha512-jP7jNH0CCZMbuZD4jMVw3Mc6Ls15FLRj4Ntn7EspGHLYEZmwwLrAK2FjmgpwiYVCfYQ8Yn0GuCiEdMziT7Z7DQ==","mode":420,"size":171},"dist/assets/utils/vendor/image-size/detector.js":{"checkedAt":1708389320258,"integrity":"sha512-NO3n7n9Fid/aB6wkMjGE/MajPePiaaMZnmNIYkz/3PBmAKGHCPw7256pYthJ5Tufr1GwxszJazjz9+IWlur12A==","mode":420,"size":531},"dist/core/dev/dev.js":{"checkedAt":1708389320258,"integrity":"sha512-+jW2hi8F5KTdRYoEPEfbb8ZwMTX8/zpCilmMF6f/u2Zh0+wZe3ppAcGoDUc+yy+F7T46/3RPun91dxVC3hmVXw==","mode":420,"size":1792},"dist/vite-plugin-astro-server/devPipeline.js":{"checkedAt":1708389320258,"integrity":"sha512-czx15cSpCaD6cFcTv9X/Vgiq1HRRAeupwOBGAPIdk66//xDms5HN8ldwdG+sxzIq7O74KYTLaoH7b+X+xLFPSA==","mode":420,"size":1767},"dist/runtime/server/render/dom.js":{"checkedAt":1708389320258,"integrity":"sha512-7mFrXqK8ikkr58iQ4fC/93BgODF2mVkJH6yoLAHZCO/O8DxP4tfULuT+bsT3k9E75ORReGQnX+fLNmx5hy5ogw==","mode":420,"size":999},"dist/assets/utils/emitAsset.js":{"checkedAt":1708389320258,"integrity":"sha512-McxXt26WWoeE95fyJFvnCl3fqppaf94vU4ibN4e9ygTzs57J8UkTO0V5c5f0EzxUTimB5UwbpX9K67fMoJJTmQ==","mode":420,"size":1532},"dist/assets/services/vendor/squoosh/emscripten-types.d.js":{"checkedAt":1708389320258,"integrity":"sha512-z4PhNX7vuL3xVChQ1m2AB9Yg5AULVxXcg/SpIdNs6c5H0NE8XYXysP+DGNKHfuwvY7kxvUdBeoGlODJ6+SfaPg==","mode":420,"size":0},"dist/assets/services/vendor/squoosh/emscripten-utils.js":{"checkedAt":1708389320258,"integrity":"sha512-KaHUIcl2AEcZUj82LUm1gVcDlzv6T6YFtwCffTeMeS1lwrGkaHbKdUsZwAH5SzG4iS8tWH5j/SU8BvRAmw2m3Q==","mode":420,"size":691},"dist/runtime/server/endpoint.js":{"checkedAt":1708389320258,"integrity":"sha512-8vZkDTb8CT8jqJNtwrZA1925sh5uOp6tSf+5l3/1ZcEu7SdStMZhW8hu4G8W2R9H7iYUTEZLPo4mIIYi450Pug==","mode":420,"size":1461},"dist/runtime/client/dev-toolbar/entrypoint.js":{"checkedAt":1708389320259,"integrity":"sha512-/r7SAqwyyD3cEWPG5hY6SVASkfSXB52AmHooA64TCWHcpm3CeKcQRNWjTVDckTKsrGjhxDe9xOU7RtzB8iXjIw==","mode":420,"size":7888},"dist/core/render/environment.js":{"checkedAt":1708389320259,"integrity":"sha512-VUuotmbJpNkWuBwuygMou1X3brtUhMfp9ELCNhJwi5qKIE2BvtwYuc8VH6izPZZIwqmzSNiAx3w3xNIQIuOOWQ==","mode":420,"size":90},"dist/content/error-map.js":{"checkedAt":1708389320259,"integrity":"sha512-TuvSDZRKURJRqMMk1ybgab0jj2RacmDRe8uwN74QXEiJrtIociqsdypIXpC6MkY2YugDQkuV/BK1H94et7NOHA==","mode":420,"size":2806},"dist/events/error.js":{"checkedAt":1708389320259,"integrity":"sha512-yqN+batVymo7HwWwjRCGa3NNfeFtVlldO13EbdINRlw3PsTZGwO0gM6yH8Sr5gGYA+ahRJFJuykJ790UAwW3oQ==","mode":420,"size":1596},"dist/vite-plugin-astro-server/error.js":{"checkedAt":1708389320259,"integrity":"sha512-7ciNi0KIPIfqTwbBsj0qLFqaFYoDLT/DtiQQ2fo0FH2Hs47npCzapIh3KLcIKEUNUXY6lHksG2/7G2ngj3LgzQ==","mode":420,"size":858},"dist/core/errors/errors-data.js":{"checkedAt":1708389320259,"integrity":"sha512-d6jNmXD8bVhz15UhlupG2CdGbhDec4T7BWZY9Hc10oxbisTGDLvOQYvmm5GDvNi1rJoRJfQggMCbk70n07tXsw==","mode":420,"size":29407},"dist/core/errors/errors.js":{"checkedAt":1708389320259,"integrity":"sha512-w3HF5jfmIExl/AO6Atkn+0SUPoDxi2c0YoQ/Jg68MObvpS1kbGlxIWXgeuNtdxuAnIHvt0ctHpAC8tII6/AwUA==","mode":420,"size":2685},"dist/runtime/server/escape.js":{"checkedAt":1708389320259,"integrity":"sha512-I0VPWeu9oCnStM0QLkzqLS37gaLHO5FceJfraHNNai+3Omslt0BwbTXThJr4LIx9Bzsb8yIpdkYuleQ+xyjbwQ==","mode":420,"size":2037},"dist/vite-plugin-html/transform/escape.js":{"checkedAt":1708389320259,"integrity":"sha512-REWJt50gFKisI2p5ME31KwarXnlleyBlLS7CkCGHBcZUowkUUnf+aeyZroOiSJyBLmyxSmzE0ChUWR41F4Gwlw==","mode":420,"size":1180},"dist/assets/utils/etag.js":{"checkedAt":1708389320259,"integrity":"sha512-6/fLDSrCWoXFaa+qpMu44dP5Vr3awyHDiG3jSN6vPx+rUo6/pUyLupVTYT9L4YMDl/Hvr2JZqh226llmNiNWTA==","mode":420,"size":740},"dist/transitions/events.js":{"checkedAt":1708389320260,"integrity":"sha512-8DIX66GEEqnJQlYCJQ09Nzwr4z7OBorvsdNBnpnpYU6R8PjBI0NduSFGU1f8dzzN2tvfILftrHJIlOrYRfXDOQ==","mode":420,"size":4004},"dist/assets/services/vendor/squoosh/utils/execOnce.js":{"checkedAt":1708389320260,"integrity":"sha512-vBpnIud1fZeX0+erolEjhFH5CLEv5PvAI2svKhDwdordjKg+ENruF4SYKO2oG3swXtXbNo+l1TWgCqXzSYDF/g==","mode":420,"size":212},"dist/runtime/server/render/astro/factory.js":{"checkedAt":1708389320260,"integrity":"sha512-17LCkYXCGHkwRtFHsJddtSu/SN5ewJmiTqghKee0qMbiiES/S7sMuyXXB65JpFOhtHYGv1/QLGQBuyMkblXbzg==","mode":420,"size":492},"dist/cli/flags.js":{"checkedAt":1708389320260,"integrity":"sha512-GPMfbHVcbsJlBIHrweyhT5PiZ7Tc8YFPJGWm36FWwgsaExP7/N+s3Hgm6rd5k+pfqf+Rb0ghFSlGx9GMTEgOcw==","mode":420,"size":1309},"dist/assets/build/generate.js":{"checkedAt":1708389320260,"integrity":"sha512-FGMro+GjTvgRb1aOoI1xthpuyBBp0ZZBFgCfu87a7CIi7rRClnxfMOKc1EpjcgheralXeHkMIhqBoFRTkdyUhA==","mode":420,"size":6779},"dist/core/build/generate.js":{"checkedAt":1708389320260,"integrity":"sha512-VRTv34VbiWhzPSliHgwyljkiehnzKmgtjeMFaYYYc1qkUGOJ+prkU2SHnlzhUExRzW4LN8v3LUcVmPk5PSkuTA==","mode":420,"size":19263},"dist/core/routing/manifest/generator.js":{"checkedAt":1708389320260,"integrity":"sha512-+6sZ+4XAx0TJMVMACuqkBPcysLLd1Xzz5qvJyeLcxFabaLJzIlPMiZ0M2r32Ag3nGbyaJFdZvPPExOShD7swXg==","mode":420,"size":750},"dist/assets/endpoint/generic.js":{"checkedAt":1708389320260,"integrity":"sha512-q3pvuhJ/NSQJS95oVX9G+qYy18Bdu3gSFeiN8eDgK03fbecBCH9xN7/FZk2NkSRWyRI63phwp3rAhNIYrgl+Pw==","mode":420,"size":1987},"dist/assets/utils/vendor/image-size/types/gif.js":{"checkedAt":1708389320260,"integrity":"sha512-PaaPIOU8eD30k1UftOmjpQ1z44TfVSLU9wQG4RagNmA5jIPqRF53wUKwlAtXMaNXQyv6I3uWa6F0LmCIJSphTA==","mode":420,"size":292},"dist/core/build/graph.js":{"checkedAt":1708389320261,"integrity":"sha512-cWsXPk+ygTYLr8dRruXR5kz5MlYDjE9GriysUn+/0X5wCuH8waoEJ8q+G51PJ6LwIQz1uZo0TwL5xQU39FHP9g==","mode":420,"size":1224},"dist/runtime/server/render/astro/head-and-content.js":{"checkedAt":1708389320261,"integrity":"sha512-x52EV9ksbpCGhY3FFKFOTsf81+ehS1KRG4vRaoN1RCITSHOuJaDyK2CgW/4o3bkzd7BDkNN0CnUgcbQM4cRDkw==","mode":420,"size":332},"dist/runtime/server/render/head.js":{"checkedAt":1708389320261,"integrity":"sha512-uH/gJ/p57YV0aQLC0vVUlgqDfYcvBjcqc1sNFhiNOB3ckecLN2nsOK6cH8hmR3R5q9IKb9jbobg0arAjoeR4Ow==","mode":420,"size":1412},"dist/assets/utils/vendor/image-size/types/heif.js":{"checkedAt":1708389320261,"integrity":"sha512-eNjy7AgUj31xQiFAcmlO5NYP+0LHSis4YUmROysmIVD1/KG2IE6e3POC1v5Z4fho7JsIfey8uUCTxSardSCgkw==","mode":420,"size":1567},"dist/core/redirects/helpers.js":{"checkedAt":1708389320261,"integrity":"sha512-9Wk5Z8g+KWm/M7Vqk013fa+XbtwsBlRDM9xFhplSDuSYZ61XbjerpLkB1idyu4me7SNEyx/V3dOROmU8jxEA4Q==","mode":420,"size":1169},"dist/runtime/client/dev-toolbar/apps/utils/highlight.js":{"checkedAt":1708389320261,"integrity":"sha512-0B2DTdvUUD1TNsFa5q15g7VTH69D/WOn6gEF/3W6jdHMHv0o2Y9ZQBbW7DtY0RFjJ0RYGqFxAPcbYWGwzbgTbA==","mode":420,"size":2175},"dist/runtime/client/dev-toolbar/ui-library/highlight.js":{"checkedAt":1708389320261,"integrity":"sha512-PncYmIRIGigVvDcy2UZ6IqP01hWuQ0MeUXsKrYEOxUT9m4CrGnLVzZsm3oaI3sM6KpWGOES3sk66HT+eCLtwVA==","mode":420,"size":1801},"dist/runtime/client/hmr.js":{"checkedAt":1708389320261,"integrity":"sha512-ArJdOAndGMksUhXRpKRPB2RlYdQCC3pwh8fEtuNlk2KXgnr20mNmJ9ACibQgbilRYIqUuJK1zRYjvFsTKH+7XA==","mode":420,"size":25},"dist/vite-plugin-astro/hmr.js":{"checkedAt":1708389320261,"integrity":"sha512-see/3fp5enarUPdyCGsaaOWDYfMECpAxctOT7s9ACc6ixb+Pj3BeCXSee4+nWM/TR5yLOGptKHFbr33ijq7B8A==","mode":420,"size":2407},"dist/runtime/server/hydration.js":{"checkedAt":1708389320262,"integrity":"sha512-im3ytsYjuMfpeq/btuunUeHOmBUyYKXB4zMqt7MEhMXroK4Ulv2J/N/dC0hcq9e5nl9pmNQmemo/ga57cPTPMw==","mode":420,"size":4002},"dist/virtual-modules/i18n.js":{"checkedAt":1708389320262,"integrity":"sha512-nK1Ob72MF71ve80zUogmRKrzcCdap3Ru33AlHcO5Tan+enx5vHXMk5MTHKe0tzZmOlbtZelKIMysn6ffidXmqA==","mode":420,"size":1568},"dist/assets/utils/vendor/image-size/types/icns.js":{"checkedAt":1708389320262,"integrity":"sha512-33+iQ+s6AU90zNgu3cVXX5IhjfGRRqE4uoNjxKmjZxAMpHuZWgFDcqQNVDiiiV/q7je7cz9siF7deXmB20MsaA==","mode":420,"size":1926},"dist/assets/utils/vendor/image-size/types/ico.js":{"checkedAt":1708389320262,"integrity":"sha512-CNxaqSj0FQpiDkTqEx2il7ws4514SUQ4dxRE/BtSyV6xSc9ufaEZXqSR49DTCSbF4fOTi6OUKiG9yyApLcxvKw==","mode":420,"size":1201},"dist/runtime/client/dev-toolbar/ui-library/icon.js":{"checkedAt":1708389320262,"integrity":"sha512-4DXrgPNlakVtQq419N9pwY2O8H8ECXfCtS2u/gP8YOTZNwBvjg4IdubVuBBGPfdMcnEd7hc3m5BSTzin0LvqZA==","mode":420,"size":916},"dist/runtime/client/dev-toolbar/apps/utils/icons.js":{"checkedAt":1708389320262,"integrity":"sha512-U05aczSLMjJjaItrxAsKFW6cF38Z0IuYCjCCVorX7GmSJVBnotOC0rRE4zcnlQ70CQRHGIfA0660cQL3E5AHDA==","mode":420,"size":1071},"dist/runtime/client/dev-toolbar/ui-library/icons.js":{"checkedAt":1708389320262,"integrity":"sha512-zJAYTXUO4LdGf7SioXWwwg/m+/iM3RDsoualfqNIpH1WFf4uaKz0sAyAiMxytur3k6Cr4CkWvEkhIKkdqhEErA==","mode":420,"size":30249},"dist/runtime/client/idle.js":{"checkedAt":1708389320262,"integrity":"sha512-H85DFEjshCLlhvl2SH+2FtsZieF8OfpCL+MHFDe3V475YCHlYb2LnXY0p3XOMID7dwBRLEJLsG+brMfmehsVdw==","mode":420,"size":313},"dist/runtime/client/idle.prebuilt.js":{"checkedAt":1708389320262,"integrity":"sha512-sSbtAC7dnSHauhERF+nC96sMxqbZcLq8LQ23LK5ePNa+3JB8aTJUCC5C2y4o5EnMR8NTCeID7P8WnkTaZHcu+g==","mode":420,"size":299},"dist/assets/services/vendor/squoosh/image_data.js":{"checkedAt":1708389320263,"integrity":"sha512-Iem/2bOX8vBIchlmlo3o+PhaHdcegLJI7EUclWzJkb4x4ekRJ1tK+k4a2Y8aX5aeDEqhD/b901cyQjlTrnDgJg==","mode":420,"size":655},"dist/assets/services/vendor/squoosh/image-pool.js":{"checkedAt":1708389320263,"integrity":"sha512-QllGyqq0ZM1dJ3IqpjBWdPgYrSxp+pgSi2wOIUXMU6o/0fLPUv4f/XT5q7a3WsQ/Wj500lj72fBLifc0ivgglg==","mode":420,"size":2753},"dist/assets/services/vendor/squoosh/image.js":{"checkedAt":1708389320263,"integrity":"sha512-KO+zr9Gi+gGfMbrKN8NPe6fiR2NyTsRJJZXsrhgT0VTpHKSwRMImOXJ1unKHX/aTJZwEjMdTIq7KwHsmbhmHBQ==","mode":420,"size":900},"dist/assets/utils/imageKind.js":{"checkedAt":1708389320263,"integrity":"sha512-9ZgbGDmNu32xqW7ACtbjxjaMf3eUEpT3mL91wQhJErqVvuTsNy4fmfe6f3K8ubNcNNa68CtkjGKIdKALzIm9qg==","mode":420,"size":187},"dist/vite-plugin-markdown/images.js":{"checkedAt":1708389320263,"integrity":"sha512-jlkerjCjsv+IrnCuukRUSGKPdRmSKOTAW8KCIF6wGSTEiwJVc8FpIFz+Vz8IXSfX9AWLrrM2pzcfPZ+n8QwN3g==","mode":420,"size":2357},"dist/assets/services/vendor/squoosh/impl.js":{"checkedAt":1708389320263,"integrity":"sha512-2fpASHTohuFX4Te1qxdb36PSgGfooUa36mBJadw5ABhYaOUVOpqpWhg6gZdPYZyj0ijusgJzXDpjR18X4nA6ng==","mode":420,"size":3355},"dist/cli/add/imports.js":{"checkedAt":1708389320263,"integrity":"sha512-1mD442y8kFC187MuSLQ5NStP1MRK6uETAuDiueEAe1o8guqUk8vTK1Y9SkfuWTTKB9YtvlDV0vUTlit7n+FIaQ==","mode":420,"size":1089},"dist/assets/index.js":{"checkedAt":1708389320263,"integrity":"sha512-RRQhmsMl/z9+oKG9/Xzc/5qsIioPfLUrHv94IfCRxx7z9eTY+Z/m88/3Kfs/F3kz2P7yjzYwadRN5RLRlHR0CA==","mode":420,"size":252},"dist/assets/utils/index.js":{"checkedAt":1708389320263,"integrity":"sha512-RM4a08OcZpIaehJhK1wCTUcblLyiWEq501i+081EHevN+jMDT4j8oLme3YbuF9E8LJcboFWm8j4ciUuyvWNmuQ==","mode":420,"size":664},"dist/assets/utils/vendor/image-size/types/index.js":{"checkedAt":1708389320263,"integrity":"sha512-mlzw94Us9kc0UHy78OuI7gDYXWsf07PGyPO4dEmhk9so9USQeWg/EWXiNdlbJJ6FdKWHql7mQReVxs/HnR5bYQ==","mode":420,"size":1013},"dist/cli/add/index.js":{"checkedAt":1708389320264,"integrity":"sha512-cMIpsR/98vvEiA5P09BYWrlNkxC/XtfwDZ79ygWOmHxfw7jDTY2JPG5DNsw+JQjNnhlwp5OgmhNKs7y0Hr+mWg==","mode":420,"size":30000},"dist/cli/build/index.js":{"checkedAt":1708389320264,"integrity":"sha512-FECzhuEFoRPThjWiBMnfF1dXRpL7qy3e/1W5s2Xmf7CB1DPub1c6qV6VD+K0jIiY7Yw4JVbLXVfXLBoEUoEcHg==","mode":420,"size":708},"dist/cli/check/index.js":{"checkedAt":1708389320264,"integrity":"sha512-bfiL3KfS1/eUm828dkC4FX4him0LF6AyBTdhzw9S++is8tyHVzQsL026ytj0lzpWsBU6in9dZMP4Dour80kcXQ==","mode":420,"size":1359},"dist/cli/db/index.js":{"checkedAt":1708389320264,"integrity":"sha512-RYFPFZmTPyrNDLYi0miYFu7aqDTygvM/4q1XJoWwAJlNQ59im69J/EOTy+IyIxij3bxFQRlASDuoJSFBPYjkxw==","mode":420,"size":853},"dist/cli/dev/index.js":{"checkedAt":1708389320264,"integrity":"sha512-yexaeLdtb03IZVPsV92t8R7iXVvvsFAkHQp8yr7yC/YANdZQCDruG3XqLtQA4c5Q5B8PchGHymKjHcX6uSNyQQ==","mode":420,"size":1052},"dist/cli/docs/index.js":{"checkedAt":1708389320264,"integrity":"sha512-7fa8XA8mXLjymkwR4NGaK3ckuaaHkU4DjyW3BeKUS0NvNVFyV5t9XZZ3VArU6bpqTDpGbVKz4vyyJrlrUyN6vw==","mode":420,"size":479},"dist/cli/index.js":{"checkedAt":1708389320264,"integrity":"sha512-L4MwMQ9p5y2IGiJxIE1qbzBWwC8ngWoegykb3v7tenjx+UW0WIJwmE1fS/CuDZ6KX5CqGbrFHnpYoDiLtVGaPQ==","mode":420,"size":4789},"dist/cli/info/index.js":{"checkedAt":1708389320264,"integrity":"sha512-QwXJZxpa7yJrXOLST19eEa6AxOXfBaBQMKkZb0bcjehQzRcAa7OpQtZzH3ohimiW0x+Vq67CAymr0t3IzdTjxQ==","mode":420,"size":3250},"dist/cli/preferences/index.js":{"checkedAt":1708389320264,"integrity":"sha512-ejNMuZfDK4CjFxzBWMAGjMMF2+Muvq0tNGPtQ+EIMAddAY0eOOqusfq40wB+ejrAJHjGpB5rsV092NtcghP1pg==","mode":420,"size":9734},"dist/cli/preview/index.js":{"checkedAt":1708389320264,"integrity":"sha512-OTV16W3J9AD3WULoJQmJ5DJepxZLwc6yT+7ov9lT/fJhf+DvLQoSBy40X4KqIs4i9SDxN27DcUkunToB/vP8hg==","mode":420,"size":1142},"dist/cli/sync/index.js":{"checkedAt":1708389320264,"integrity":"sha512-BHuFanfNw64Ww9Oph15GjUqwgdO2XO8bUo8cnDIQhmOhNCjR5u7+pp37Iu7dfWIKFxtqjOfI2Le+URocnZWLbg==","mode":420,"size":621},"dist/cli/telemetry/index.js":{"checkedAt":1708389320264,"integrity":"sha512-hvYxug9p1iIPqC41Tu2ZPylS1wVmirr6cJ0zcIv8kOkuQoKPdxYp+VCVYEjmXwGw2sfhgJBTqBmHweidcVYd7w==","mode":420,"size":1288},"dist/config/index.js":{"checkedAt":1708389320265,"integrity":"sha512-1r4sMPfXxFtaWjBEgDWmIszLv54gEWUQv524gUz4OZQdcNvlW6VG+JXYruq6lXe/lQ4usYO3xBmkNtkfrlXSOw==","mode":420,"size":1443},"dist/content/index.js":{"checkedAt":1708389320265,"integrity":"sha512-DMufX6dWo/Ebgukhc2Ae9yQV87nGVtyJuRMCyT3WTlFZ7EchtUs8Z2YkHKQNEVyIW7VNbGgPRkJ6pIHb7NMITw==","mode":420,"size":880},"dist/core/app/index.js":{"checkedAt":1708389320265,"integrity":"sha512-HGRLXa/6puKxDkKHqerfXY1+Z33kvt895el8jmwN++3giQZo1wvTlM72iFEo4Q3VVcUld3pJPKJNZtRU+YS3JQ==","mode":420,"size":16748},"dist/core/build/index.js":{"checkedAt":1708389320265,"integrity":"sha512-ECUjfVTGsLsW3XnYVBMZnn/BJUaDYUSi6YSZ6ABmf9ZSSKwPZAi/pAIecKIS+7GfnK01CB3m7tFQEhj8jLBJUQ==","mode":420,"size":7217},"dist/core/build/plugins/index.js":{"checkedAt":1708389320265,"integrity":"sha512-v83VExBHUVPKpG9/mzpeivAEKSqEmNsmA4Q6dQN0o4LBspGKKFW1thHYYixsWMaXq9ltiMCmcLDCPH6kFrlhRw==","mode":420,"size":1725},"dist/core/client-directive/index.js":{"checkedAt":1708389320265,"integrity":"sha512-biEkfnkWdHJXfoCbthNvYIPyYYuPhJFrUuJWAjpWzFPZzXEMVOXJ9BJHWT/xMZG/9DdKB74aLS+JjmALMvHeJA==","mode":420,"size":195},"dist/core/compile/index.js":{"checkedAt":1708389320265,"integrity":"sha512-LqXHaZc/wXTiB1kRQ9lMq40xjhYhKDpUEUHuGrw021OepZHZb65Bp+cC5pL3DcMZSeQmLyTGkY+WFa1tZNI6qA==","mode":420,"size":62},"dist/core/config/index.js":{"checkedAt":1708389320265,"integrity":"sha512-lSYNK1SZ0nI5KavukwMTpIU4ns4vefrhS+VNYAspKyb9pVXp2yk8P+Tw0rKJYJsDx5G8tucAcdV+hIXDZhKSzQ==","mode":420,"size":483},"dist/core/cookies/index.js":{"checkedAt":1708389320265,"integrity":"sha512-TjIlHcU2G2KnDlCRBsl0eEVbmp0a6xqZcj+eMnCtx4JwIbKErzxm394HpwBdab2vfLJJSBhW64C2JjUx63gpMw==","mode":420,"size":260},"dist/core/dev/index.js":{"checkedAt":1708389320265,"integrity":"sha512-HQfSqg/OtGrH1hrmEZvEukXcbxH2C6FnSSsbz9qmYnTY6EOhYb0xTwHsL+kcNldElEcWdNLePr1wjYGCtsiFbA==","mode":420,"size":292},"dist/core/endpoint/index.js":{"checkedAt":1708389320265,"integrity":"sha512-TiXJru8HBpqXgSNH4i83QEY2ppA1vGbFZLDHOVRgMxfvUIoOVIJUm0SkBjDVgYVYC4QB3ZcN356ZoLVoiA5TxA==","mode":420,"size":3794},"dist/core/errors/dev/index.js":{"checkedAt":1708389320266,"integrity":"sha512-NtS7eNGVBNGrYgntWbgWzYbJU5i+E37r7k1q2aVHAb/vxDyf/UUTqtiEbWeQ1r8VkcyMoBbtbtGJ5MRlQuiY2A==","mode":420,"size":202},"dist/core/errors/index.js":{"checkedAt":1708389320266,"integrity":"sha512-4OEiFfe2zseIk+Fqx9SstaDNJT+Fo11HJYI7WcpcT875g5uyqGFu0vSg9w433lQGKDX6AfheBUfHvMR8A7jlwg==","mode":420,"size":481},"dist/core/fs/index.js":{"checkedAt":1708389320266,"integrity":"sha512-odSNBN2tXQ8EqrOal1nw4wQh6kOmVjHpPHmSu/dh8KN8xXhsyPNrly5Bsjjxx2bLnjkAq6lPsx5443c3RWlJUg==","mode":420,"size":2677},"dist/core/index.js":{"checkedAt":1708389320266,"integrity":"sha512-qqaOVj5Aa4k4mg0R/iAV2miG/W7oJSRlqRPBWNrUmPQR2VGdOQ2l3U2PtzMUKrLAFJAKDmGh6W0lpyhCKn3P+w==","mode":420,"size":394},"dist/core/middleware/index.js":{"checkedAt":1708389320266,"integrity":"sha512-w/4Ln+0ZvP24YTC30+TYxesYAIVSTc3ilqgdkyADDzZk7m5Zi0E+Zx+Ln4NU26cm1JzO8N78m5lxd2uxyweyJw==","mode":420,"size":1532},"dist/core/module-loader/index.js":{"checkedAt":1708389320266,"integrity":"sha512-e7dOAp/DPBE1Vim78BaPO1JqvlgnbxXSbfCjyTIyTmnLqxs8NL77s/7XK4Y9czeewJldAtS2I0uv0wS6Y23R0g==","mode":420,"size":137},"dist/core/preview/index.js":{"checkedAt":1708389320266,"integrity":"sha512-3AxShJ5FopsF0c48dT/X4p7PklD6xKo+3geEJZWqNCcyxv1SmVYq6biriFIAtMOqgR2sWewIq+uM5SRVfQUZew==","mode":420,"size":2771},"dist/core/redirects/index.js":{"checkedAt":1708389320266,"integrity":"sha512-9DKP4TjBfP8QDH0nrw+m9bzcqYEaCZnw9x67NbtBmxLrAWyjER9pciyTnbMIDt22erDxE9KjdQX8EVJ/S7X9Pg==","mode":420,"size":413},"dist/core/render/index.js":{"checkedAt":1708389320266,"integrity":"sha512-WTDIgSqAh/QngHJqf2/0agF2fZwHqqDhSV2yTihkKCHqH+052QknMXCfF8BD7xEcmKwfv9NHtdXRlx76xiYwxQ==","mode":420,"size":353},"dist/core/routing/index.js":{"checkedAt":1708389320266,"integrity":"sha512-flhdEHvta29fgOCsSybvL9TXi3hrCtz61r2NW97Ra2AVBped3MiRFNI6fg6843pDHdHY+ROUrXy101H5xP82QA==","mode":420,"size":525},"dist/core/sync/index.js":{"checkedAt":1708389320266,"integrity":"sha512-fWLbykifGsDAhNFVGRBq5ZC6iEU1FS9hyS5TR3jLbjr3aatSfEGCVQ5vkL7DkPuLvFvJGQgPgj+8rc4gNn9ksg==","mode":420,"size":3732},"dist/events/index.js":{"checkedAt":1708389320266,"integrity":"sha512-cyHOM/9jxLPjs0lL5uFkZ9fEJTQFpFzg9v5YXZwsPBXiwaF5Qe/7bKvvu64nyJGkO74ouZcT8gkAeJihAMUWcA==","mode":420,"size":324},"dist/i18n/index.js":{"checkedAt":1708389320266,"integrity":"sha512-/6UnEjChH7wyBvBlYSuTpH8uH/vAD5LFgAYjhPZSvF8E+uSFpCHSdut3yjlQ/u3ki5ReLOdtc1pvGhJyfz2BpA==","mode":420,"size":4345},"dist/integrations/index.js":{"checkedAt":1708389320267,"integrity":"sha512-ev2/jeEk4p2hFm6oIlfTSXiPFaT0m4ytq3tPRB9dnS/JgsX2cm0MAdmDA8mLwfNtRMiIJfbYgK+pD+/s3AShdA==","mode":420,"size":12700},"dist/jsx-runtime/index.js":{"checkedAt":1708389320267,"integrity":"sha512-hE8HCfUulBDUyQhw6bqZ7rPbivFFyRlXhtKnb+g4T8unZIyneJ3so4Uv5uSzwNWJZgxZDwJz+7dVIDFz+sdfLg==","mode":420,"size":2330},"dist/jsx/index.js":{"checkedAt":1708389320267,"integrity":"sha512-uGM56e6ismInDkuTk7mzlEKma6VpXg9qL4vDAo3RrfOE1ZUyLPw+kfZO1lRvzA0zm5I1MQQ1IAiNB/mthD4ELA==","mode":420,"size":173},"dist/preferences/index.js":{"checkedAt":1708389320267,"integrity":"sha512-0kVd+JALJr9WDAL86SxiWdfjXqj5ux55ah/SeZRDSRG4zowx4PgMscloKKgyyqbwsAleAM3leZpj2S5t3LpgBA==","mode":420,"size":2639},"dist/prefetch/index.js":{"checkedAt":1708389320267,"integrity":"sha512-Q8P1RgUO0ePCdGia0rFpTx0SdMbZb25dRAlNXZ6Nj0wPGfsz2Irg9rUlhU+4ztQLIt/Jnyq3v42ai9Yj4c5QeQ==","mode":420,"size":5806},"dist/runtime/client/dev-toolbar/apps/audit/index.js":{"checkedAt":1708389320267,"integrity":"sha512-I2QlUztCV2Thq9ww17hkW2TRiQAKZDNMMCU8L++0/DutNP7xNU7tgyRVavW8sj5DoIpDswXcuilX91QH+n4rsA==","mode":420,"size":9934},"dist/runtime/client/dev-toolbar/ui-library/index.js":{"checkedAt":1708389320267,"integrity":"sha512-sHvLkghEE0RxRitVpTemfIDBnRusWW3MC1QcHyRoG6YMkVFUifEWyGGe73tO3Y2jPN8V++beJEGhHWwWi1pfIg==","mode":420,"size":552},"dist/runtime/compiler/index.js":{"checkedAt":1708389320267,"integrity":"sha512-Pf0yc5frnHu2yPGRbtmrHx8Urn3P1kfYSuaMmDLbWdlGkqnds7fwI9bnyK9SUiV+YRbQy/abGw8AvJYi8s3SzQ==","mode":420,"size":592},"dist/runtime/server/index.js":{"checkedAt":1708389320267,"integrity":"sha512-dEHizgu3ChUnryD+aY0uAOsnodjYK4lkwaL2zZCjsWO8TQh4dmAppO/V63oea2LG8T0Z2YS2tbnu6alJHdTP7A==","mode":420,"size":3017},"dist/runtime/server/render/astro/index.js":{"checkedAt":1708389320268,"integrity":"sha512-ID1Pcsw/IEyPQzrA1FwmZurlfY36aBIB2NyqlI0JpQv3Sv+1SUysnV0TJgrRPTMkfK3MEzceT8eJwvAtqQQPiA==","mode":420,"size":603},"dist/runtime/server/render/index.js":{"checkedAt":1708389320268,"integrity":"sha512-BehXOYryneH5KWILNw/koU2lPrDT6PlZblrqgjikRs+oRo+ad5xhVjTy8DIspVAq2CKvTw6lvJZitQINWpgJWg==","mode":420,"size":988},"dist/transitions/index.js":{"checkedAt":1708389320268,"integrity":"sha512-oYk7w5mSxojzxrwmtP+qx5QcG5q50TQMz10KadD6TpiTd6JveJbFQ4J33Y+Y/mCkWkETjGYO/2RP3yZRUucRxg==","mode":420,"size":1537},"dist/vite-plugin-astro-postprocess/index.js":{"checkedAt":1708389320268,"integrity":"sha512-bieSVAW+GvfvD5+WhLzWAfqJv3UUlaKbuJ7zuXiRdsSMXfriuqqIzPa9FfAIbb6L4l5Otc1D/vDQCsK2QYCyRw==","mode":420,"size":1527},"dist/vite-plugin-astro-server/index.js":{"checkedAt":1708389320268,"integrity":"sha512-ijflP+2Cmd8gYvoZpf2/llvV8kxrP+XPjUiS7B0k5MIz6vrj0sO9Bq5cbTgoAzm1hSCSCf6WmWJaIrAIyaLn+Q==","mode":420,"size":893},"dist/vite-plugin-astro/index.js":{"checkedAt":1708389320268,"integrity":"sha512-37TbsiH0BVIiOaf8/Pz43hvLY71OH1u9eOtGkFvuyc/easasNBx/hrSYoK/drntOiqWHa3WJAzzNg67dk8+lfg==","mode":420,"size":6762},"dist/vite-plugin-config-alias/index.js":{"checkedAt":1708389320268,"integrity":"sha512-rTYD0E3r4ch7c4FDuGpYbCzRH7uI9TNrkjeoEVOy20uVglNAL0IxFnUakoeiXFkFELckLo449509blzWEJi+bw==","mode":420,"size":3202},"dist/vite-plugin-env/index.js":{"checkedAt":1708389320268,"integrity":"sha512-wNLZ8dgwKmDABlwM3c5wbhX9cPZk7OMTztPp1wg1tPxSqk2NczRGgx1bVkAc0DwapSjOYBYK0cdcqSkHlP7D6w==","mode":420,"size":5040},"dist/vite-plugin-fileurl/index.js":{"checkedAt":1708389320268,"integrity":"sha512-GtDykbn/8XFDyAXh78YeNWlEqCdf8cerCPH717gQaMbmsRRNmccGI/SiMRfZq+OgNdhwW+v394EJVpnjdf+lXA==","mode":420,"size":307},"dist/vite-plugin-head/index.js":{"checkedAt":1708389320268,"integrity":"sha512-6ng2P6d367ZF1Mf1LGVH2B2XTVWggb66dV89Nor+Fcf39w3mtognmd3zx+7RRlCOViA6+psQtqCtMVcbevcwmQ==","mode":420,"size":4459},"dist/vite-plugin-html/index.js":{"checkedAt":1708389320268,"integrity":"sha512-31aL/170buC237IFe/blOvxVuTXrvAYLUYftFJC+hbYDS7P9DLwfObDW+s0pKZEb89KCL/h5w/Z9PyLLPstmhA==","mode":420,"size":387},"dist/vite-plugin-html/transform/index.js":{"checkedAt":1708389320268,"integrity":"sha512-HDurq3dgWeFbkU33F69vz0HmTpiYd2eLf8IFuOFxzLtjZwdChOmov+uoiulgEioRHPrfvhCQe8IoX3Z0+8R9HA==","mode":420,"size":723},"dist/vite-plugin-inject-env-ts/index.js":{"checkedAt":1708389320269,"integrity":"sha512-vvFqsjH2xDEUykZBZTYY76Oevz+ILCctb1DtskIn6YfAmJWOB+QNXZ8vM9UW9z/+QRxB9rJfwydfh6BQwuw4wA==","mode":420,"size":2092},"dist/vite-plugin-integrations-container/index.js":{"checkedAt":1708389320269,"integrity":"sha512-pBoeopAJurVibj9a+qy/7lqKiwEFC3xh/rBqA2ZE1N4KHId7M2znWRZz4S1QK2GrujeDEeC/WVztOK2YdefD9Q==","mode":420,"size":1049},"dist/vite-plugin-load-fallback/index.js":{"checkedAt":1708389320269,"integrity":"sha512-Ca2UP/1Kx/fpAHhziUAe7lU7t+H4VFTVmd6O0HBJ5FtbbCCyDAEykZbIO+om6Q/c9cQkUZQA18QI82whIej8SA==","mode":420,"size":1630},"dist/vite-plugin-markdown/index.js":{"checkedAt":1708389320269,"integrity":"sha512-d0DDhEFX0Erp8QJNw1C3gAgyX0kE5G4dl+xt+vicJbqGzrh9u+EV6z519ReeV0slEIQe/PcFsHGH2JGCx9rZOQ==","mode":420,"size":4842},"dist/vite-plugin-mdx/index.js":{"checkedAt":1708389320269,"integrity":"sha512-06WRpIaiceFPb7AFwFJtVYBlINivpoAHT1LmeVGab0U36WwURUbkJzWvxYcePuyq23qlon/NoWKMIITk8NAUaA==","mode":420,"size":2755},"dist/vite-plugin-scanner/index.js":{"checkedAt":1708389320269,"integrity":"sha512-THuP7Q66pdGqWQgs75X32buFh5CnSHYb74x8Xj2sAfNPV/79Nf8lfrvBmAUP6pWE/Ye+CP9GTKwKzGkA07CmGw==","mode":420,"size":2078},"dist/vite-plugin-scripts/index.js":{"checkedAt":1708389320269,"integrity":"sha512-ny/uvxV1rpzhi+tCMudLhazDX1gkp/sreAb29pJg9vB7FQGdtEf+tQpEYZ0cuObgx3IB1Tp63i2gSonZ5xcMZQ==","mode":420,"size":1552},"dist/vite-plugin-ssr-manifest/index.js":{"checkedAt":1708389320269,"integrity":"sha512-ZiC1yLzy6MzCRfWsgwr23VTm4593YQNi/sDvucQDxeh/rVr0UKHmiIopFoi7tfi71vU0QYy1j+Vn8atN6UgBZg==","mode":420,"size":652},"dist/vite-plugin-utils/index.js":{"checkedAt":1708389320269,"integrity":"sha512-/VuKxI45r/3QDPjrtOJ+qpawwlnIiEMQEMfAsOLqsXQm5d6fW7zh9GcHHdsO9EMWjAg3+4/9NJBttCE1f65TuQ==","mode":420,"size":1342},"dist/cli/install-package.js":{"checkedAt":1708389320269,"integrity":"sha512-0ph76B9jElhZIAgf+TgcmkR+CP/67qoJPCy5oxuI7Af7XODyBWc11eKd1l/jx9i64SgOruvSnbP9lF7nSsBWnQ==","mode":420,"size":3173},"dist/runtime/server/render/astro/instance.js":{"checkedAt":1708389320269,"integrity":"sha512-j14jbaQrISe4cwpRc/LJHRLefNfzsHuRqVa5j3PJ7/tIPw/dcxmOdVw1ndHyE0zwxgjQ2BVa8HP0VDnVZmg58Q==","mode":420,"size":2402},"dist/runtime/server/render/instruction.js":{"checkedAt":1708389320270,"integrity":"sha512-s5p24LFd536GHbGobmnWedS3ZLL2PO6UipbcPC/voSaMaE9NezTayQIwiI6psXVD6y6XBBmLJ4AV8ZOMkyuD/g==","mode":420,"size":383},"dist/assets/utils/vendor/image-size/types/interface.js":{"checkedAt":1708389320270,"integrity":"sha512-z4PhNX7vuL3xVChQ1m2AB9Yg5AULVxXcg/SpIdNs6c5H0NE8XYXysP+DGNKHfuwvY7kxvUdBeoGlODJ6+SfaPg==","mode":420,"size":0},"dist/assets/internal.js":{"checkedAt":1708389320270,"integrity":"sha512-rxkMruWnvNg4kVXRvpBcQvMv3dqIQ//GZjO1AQPAFvW/d9TVmXUNuGvBSmziz+ug3QYkD7jLthze1eDVWEiojg==","mode":420,"size":3989},"dist/core/build/internal.js":{"checkedAt":1708389320270,"integrity":"sha512-mdIDiax2uz3y4Ytnik8Gtrsp9IEokhHI0XoSDbfPHV66JDNaW6782wsZjRBkFiG2YJog3/teJJkGfuLES0zYDw==","mode":420,"size":6408},"dist/assets/utils/vendor/image-size/types/j2c.js":{"checkedAt":1708389320270,"integrity":"sha512-iNaVjj8pO39FrKH5D+t+9+99E4E6Fg4dzPTh9gSbTM6M4ie0nEaRDYbEmAXeRYunEMtvsb0bHhW5uTfUXmtfNw==","mode":420,"size":344},"dist/assets/utils/vendor/image-size/types/jp2.js":{"checkedAt":1708389320270,"integrity":"sha512-RBOWH5hjvcPzZzg/x2lXV0d81YuvCrbQi3JuZInSnWTFrSuPOlbo0dEzZzycUpXMj9ipMTcEuVI/E7bObi7Sig==","mode":420,"size":726},"dist/assets/utils/vendor/image-size/types/jpg.js":{"checkedAt":1708389320270,"integrity":"sha512-ZxaVc/4vIp8hgWP+KXyP11OEjF+RQLv0QZQzRZbnZmy7SVoJ61OlWpOr3QNc/BDp+NCnBenndgENaStISB7v0A==","mode":420,"size":2952},"dist/runtime/server/jsx.js":{"checkedAt":1708389320270,"integrity":"sha512-a6WFR6F8wsB/Np/BkXxkXlvtUH2+mOfSi0vjSvsCQ8JulGNXDkRVrrXyAh2FrfocNJZgRt3JWUDifmYWZb6rOw==","mode":420,"size":6899},"dist/assets/utils/vendor/image-size/types/ktx.js":{"checkedAt":1708389320271,"integrity":"sha512-1nQHW8IVb8Fx6oDw0zMbCLmNPRfRYpfd/f1uxdr9mwYiNoFDlre+a49p11UBwfD8LehIMSCrqYdvKvuqzQOHYA==","mode":420,"size":470},"dist/runtime/client/load.js":{"checkedAt":1708389320271,"integrity":"sha512-wB5FL+7v49m9jy963caXjlFc/q5/DA61kYkgYlaWWCUGmCQD9XaeEDT18ZwYgVkLNfSGzlXtcDcwFyp6GnH0nA==","mode":420,"size":166},"dist/runtime/client/load.prebuilt.js":{"checkedAt":1708389320271,"integrity":"sha512-8CvCrqfndcZqQpNo8B2VG2JkusBbS/PBSCWEpWy9Ef4sBE0LHs/OOrUGefYoTJixGQGqhPW5O52Vosp6NxRJhA==","mode":420,"size":209},"dist/core/module-loader/loader.js":{"checkedAt":1708389320271,"integrity":"sha512-nVwbHs9quDAJyGahxerT6ZBN1rF84TcPNpfCnYuAY2tgnz3TMh3Z1XscmK9KTSeNzZRxvg52gogM0gYyjlWiOQ==","mode":420,"size":677},"dist/core/middleware/loadMiddleware.js":{"checkedAt":1708389320271,"integrity":"sha512-/uwTh6FBP8UTHbkRCBVPHobYBfMDiqcV9Ywf4BCmKNHdOXFkG7vrL2FPQnZBMyJ8NyLw5n5hw0PVZe52DJ5lhg==","mode":420,"size":445},"dist/core/config/logging.js":{"checkedAt":1708389320271,"integrity":"sha512-MfbtcCfIyQKG7whpibjjysVoz6ICS6QOqDklOriDcZBDK+W2mkWtWak+0DIe/vai4MWWrI3Rcsz1w7xeGeif7A==","mode":420,"size":335},"dist/assets/utils/vendor/image-size/lookup.js":{"checkedAt":1708389320271,"integrity":"sha512-/ZP7VMqiXTzi1xGGaFWwrPQdmuCIsMDYDF/reDusSmUXwWHSkuTf8ZSIizoaTEri5Mf2Bk6ySPT7/lfkG9dC3g==","mode":420,"size":677},"dist/core/routing/match.js":{"checkedAt":1708389320271,"integrity":"sha512-gylnMnIwj8F0nhlHZZVO8o2YOwAw6NEAa0U25XrrL71OJDYw/y5ktQ0xcBSnf7r5LIo8zqZZCiWjdaiqXTRdbg==","mode":420,"size":457},"dist/runtime/client/media.js":{"checkedAt":1708389320271,"integrity":"sha512-wtQBMdHJ1/vvyZipxINPq9Hn65ydgBpSydGZZQ4YLYC8CHHAHh/8AMqOXfxCQHb+9JEr9xWnNr+3MYjipu8Usw==","mode":420,"size":391},"dist/runtime/client/media.prebuilt.js":{"checkedAt":1708389320271,"integrity":"sha512-Jy3o5Dddz4M7sh/27SC6C1JysAxJf5cawYV50UrzQzTmOHGVVKi24m2b//SlGfDA/NsMMMKWkMIjFjVtvI53iA==","mode":420,"size":322},"dist/core/config/merge.js":{"checkedAt":1708389320271,"integrity":"sha512-8RcSgbciIQQ8XVt/ZMZtyqlZ2lfaJXuBPLLJ/GgKN1ULNq+pCOOK/b91xfTGeO+csfnHyJUOeCUox5/+KScm3w==","mode":420,"size":1639},"dist/core/messages.js":{"checkedAt":1708389320271,"integrity":"sha512-oWBDOwFTwPOg/UF3pPYI7sC0Vy0sasXImLvilBBSqMriymCn+ra4zCYx53bj88fOXGshUDSF0He73nqzPCTm7A==","mode":420,"size":9831},"dist/assets/utils/metadata.js":{"checkedAt":1708389320271,"integrity":"sha512-snCb/DktZ8XqJ7teYUi4XkGnFAgJliC3s0V7KOHF2xlnIR9TE/yYYg9XT3nwzVtdtVg/xXx8KibvECWf8/LDkw==","mode":420,"size":675},"dist/prerender/metadata.js":{"checkedAt":1708389320271,"integrity":"sha512-eFruT/ijl6I8vcujtAnFmce0eNNWfvnS+C/AguLrZSCx4JgAIF5iuZWS2ubwOdchueqfpYq/jySeuyL0rVo0LA==","mode":420,"size":464},"dist/vite-plugin-astro-server/metadata.js":{"checkedAt":1708389320271,"integrity":"sha512-KIFWkbI0eBSN9sfhbkfRxJ8GiHC7FlKcLD3Nn6N0llB3gR+2HOzditwGuGdXQz5HkX5D8N4qSwsxno0eTqxmow==","mode":420,"size":989},"dist/vite-plugin-astro/metadata.js":{"checkedAt":1708389320272,"integrity":"sha512-PhNSLIBjGzxI7cxVipxBHztLPjznbsPwY4WhvlsUHZUBax0yuD+dMqPCpXPQPTJQeBz/3NxjdT8K/oRJqjBegg==","mode":420,"size":151},"dist/i18n/middleware.js":{"checkedAt":1708389320272,"integrity":"sha512-6QvOVYslFFWyPYhGPSlJ0GGFywW+ynj5mGN+qRYowaRZkxHTj0Hz5IB2sN0rBKOD0s8PMd5t8LKFA9nXkVbR5g==","mode":420,"size":5759},"dist/virtual-modules/middleware.js":{"checkedAt":1708389320272,"integrity":"sha512-4laa0Pt0QX29KbJZaoPGeUJZeeaBQ7KDILAugejGt3730TSOpAwhLi1a01lHp+J7HLZ7hkm2wObuFEi8XQjSKg==","mode":420,"size":117},"dist/assets/services/vendor/squoosh/mozjpeg/mozjpeg_enc.d.js":{"checkedAt":1708389320272,"integrity":"sha512-+jKcBjfs7aRFUKIInX1owl1xBn+CJkA8Qc8m8Iprdf8kLzzjjrexM9MLAJsp8GhVNTPwp7oxNOkBnGpO0J/2Mw==","mode":420,"size":435},"dist/assets/services/vendor/squoosh/mozjpeg/mozjpeg_node_dec.js":{"checkedAt":1708389320272,"integrity":"sha512-2QuDMpzONZmjxoz4r0clBOmiFKuTQ9iPWlDOFqZ/YHsEEpRx0zBxutFBvEGXiISXUUge5wCMvA0HHLfJElyQCw==","mode":420,"size":52961},"dist/assets/services/vendor/squoosh/mozjpeg/mozjpeg_node_dec.wasm.js":{"checkedAt":1708389320273,"integrity":"sha512-KRAWTs1ZA66p1CyUd4ex+XfWUXxImLQCWL17tnZYKuRdr0YU0+gRI4FWxp5GcIXik0Xh7576tMVVSNP0IZHYdQ==","mode":420,"size":218742},"dist/assets/services/vendor/squoosh/mozjpeg/mozjpeg_node_enc.js":{"checkedAt":1708389320273,"integrity":"sha512-2VQbGp39wH61o8HrDdOXzCP5AcTRuOhiWYKisHM+eBdaS0ZLKA+Qax8tHmnNmcnlP7eMud0rYo0zAu00dCJspw==","mode":420,"size":56841},"dist/assets/services/vendor/squoosh/mozjpeg/mozjpeg_node_enc.wasm.js":{"checkedAt":1708389320274,"integrity":"sha512-rpLmCy/QQymjF9KjKdlpt+J28CJ9VWTiMEv1tsgaISNdSNpn9F3uWTw4trEIQD8m7OJ5eWoT2G0PgJMX+dVQKg==","mode":420,"size":336050},"dist/assets/endpoint/node.js":{"checkedAt":1708389320274,"integrity":"sha512-UY9xMFBY+KcD8d/inZm1WlKOEQIeb35yDecvSUS52M/RoaGPub4GTElQ6/4nfCu8m2OC5/dvVKeWgZiQcPXASQ==","mode":420,"size":2566},"dist/core/app/node.js":{"checkedAt":1708389320274,"integrity":"sha512-GzT+TOAOeetUqMRBAiEc7S/cE5T+GLDLE2/mfLMt9DMk9qdivyFsDpxmNFaXVFk9v4WuAWOhkN9U7YGRS0clZw==","mode":420,"size":5034},"dist/core/logger/node.js":{"checkedAt":1708389320274,"integrity":"sha512-Gwk3BxxcJ+przpKHpje/epSkr7YRQr0bPaaxMA3tNZ3QiX35eNtNfHG0oip7Vksea7xYyBwSWnCXkk4Z0jlPBg==","mode":420,"size":1105},"dist/assets/services/noop.js":{"checkedAt":1708389320274,"integrity":"sha512-JnBCRFCEg6RcKpZZ1szdEkXI/Uw06Fl55E4nw0p7qTytKv4D1MCpU0kH9wwk0pbFYzAOs9Uew0LGweeIryKzMQ==","mode":420,"size":324},"dist/runtime/client/only.js":{"checkedAt":1708389320274,"integrity":"sha512-am3okonO4frGiZcmE3BrMNqs70r0GUFBv/cLLZuVQolUMxBp1lMtiGhUHoRy/Foo1OgB/6SlY8Pku7DRmTrUhw==","mode":420,"size":166},"dist/runtime/client/only.prebuilt.js":{"checkedAt":1708389320274,"integrity":"sha512-TSsRVjXTASrR0VLCFSTO8PEfdSoVULKr9gFw0KLEJcI/cUVeQ60y3W4M9a3XqHoOU6NZUjakV024oHBES9ftUQ==","mode":420,"size":209},"dist/cli/docs/open.js":{"checkedAt":1708389320275,"integrity":"sha512-XV25CXmCmh0yidYVNZgTZYuYKZIviryt/ngLV+kDJanAY8o6946vCxxf4drOtEhW8jwBcjkY2+xc0QWnH3B9jw==","mode":420,"size":828},"dist/core/errors/overlay.js":{"checkedAt":1708389320275,"integrity":"sha512-o2RZDKhPYNWxNgO+0BBAPK6C5QWMdPpRedSR92yii2o3Hp4Q+gms/NrMd7m7fEHAfr4f6ePz+P4UL9Ka5gC0bw==","mode":420,"size":19043},"dist/core/build/page-data.js":{"checkedAt":1708389320275,"integrity":"sha512-S2vOb3IInaVPK7LXwW/sQBdZ84Qvl3pGJcKgbf+ApM8u4jYnZU9desxqO7d263ZmsmneV+Gk6mDmrVz2crBNFA==","mode":420,"size":2159},"dist/vite-plugin-scripts/page-ssr.js":{"checkedAt":1708389320275,"integrity":"sha512-LnrHVKe4B+/6pmnOhbd6l8IAvxXP215ZjpSGyF0EIPGQ8EqG5Ff8Ja6kgSAkELHRoSFOhkvsv1d5e9cMlqjobQ==","mode":420,"size":1023},"dist/runtime/server/render/page.js":{"checkedAt":1708389320275,"integrity":"sha512-fbhM3Pn+AbLAYDmsy4yV3NYXwfUiXHCJ+cSf4C0uFZZ99Zv3UqypkwsLRecPNbGMmKi9bBR/HGKlTjAFllSzYw==","mode":420,"size":2072},"dist/core/render/paginate.js":{"checkedAt":1708389320275,"integrity":"sha512-TNiWUB9nCzgEcekrw0rx9wRVe8Uyt77xZpXjtrt3uuEDGfIrE8V6BTZ9/NHCY0tbd1qP3TXwEBjlK9Eu6Dq91A==","mode":420,"size":2224},"dist/core/render/params-and-props.js":{"checkedAt":1708389320275,"integrity":"sha512-wD8I5QJQeIBRE1iyYYSSmrd5PmtmGzms6tZqejjC5yZswFgU6S4yvJXHmoE2kT6R0a+TVePk68gYcGqiyE0/YA==","mode":420,"size":2297},"dist/core/routing/params.js":{"checkedAt":1708389320275,"integrity":"sha512-fAOEx7NWLkJ7WXw8qnSlFNlOHJnZ0IBHq7RAMXMekp1WDFmRnoantP6BeF0R1ZE1QdOuHbl8nfrSTEWIb0wPtQ==","mode":420,"size":881},"dist/core/path.js":{"checkedAt":1708389320275,"integrity":"sha512-yngkOD3clteMUwqL5CsHCnyPRG3t6XD7beR6x5TxCz/Bs84yqJ2nGcYOL4owuA//gSAS8fag77i1+4wibrLLaA==","mode":420,"size":48},"dist/runtime/client/dev-toolbar/apps/audit/perf.js":{"checkedAt":1708389320276,"integrity":"sha512-WMV5uA7njvJS4sYQbuvOkkLwIfqNoXALJAcTqpq1hx0l2+s3mQoS+TlB6Y/AbMljuKoEdKR5/2LcPhvZNtXcrw==","mode":420,"size":4004},"dist/core/pipeline.js":{"checkedAt":1708389320276,"integrity":"sha512-Kb7GkVd0EzoVN2InsqlUVkfXKdknxeF6q1HE6RMA+W642roVsPkAEhj9EWGtbC7AxpQ0pNulMzPT6/nm+4pswg==","mode":420,"size":2859},"dist/core/build/plugins/plugin-analyzer.js":{"checkedAt":1708389320276,"integrity":"sha512-7LMf96+0rJ4cNsIY3M78WkoKAyI+6LCww5dVaHsEfZGooboNauzEnOhWARUD7qozj/1DiDxyP9OVe5o4FSd0Rg==","mode":420,"size":10041},"dist/core/build/plugins/plugin-chunks.js":{"checkedAt":1708389320276,"integrity":"sha512-Bd8Y69RXAUtncHt46tHjK6j7Xb7PgNoIISQ11u5/9uWFs6qqKWg+BtLWGWbO9e44iLad+kXDKu+EHUkCckX7Fw==","mode":420,"size":593},"dist/core/build/plugins/plugin-component-entry.js":{"checkedAt":1708389320276,"integrity":"sha512-GwFqvzTpiyU6WkZxgJST69iVWvd9TCMzQx79F/ApKIgf5Pj71lP4t6+6f4Idyk22IIBcvKOC3cMK56GZGGXeew==","mode":420,"size":2256},"dist/core/build/plugins/plugin-content.js":{"checkedAt":1708389320276,"integrity":"sha512-MYHFNaKrzjopRFFrWAgDzdZI5mNi+egP4VfXithu9XT+5GskaRKmqvvEUOqunmFd77pQwpXzdlDnUwP6g/Q5TQ==","mode":420,"size":10109},"dist/core/build/plugins/plugin-css.js":{"checkedAt":1708389320276,"integrity":"sha512-2ZePbG3cZ3ZZVfXevwIU/eui0EoTYYc0oJ9zZGyQ5w6TEfxHjB94nesimRQBepHzr/rarW6S/AaICJ91BU2jqQ==","mode":420,"size":9362},"dist/core/build/plugins/plugin-hoisted-scripts.js":{"checkedAt":1708389320276,"integrity":"sha512-/nNZugI8Bx3oMNaZlq3n+72QBX1f99bGNySDJuwqZRbIS7Hp6xTLnO7483ZvqL1ANr+GsIBvlO/6LSpWm2qqpw==","mode":420,"size":2911},"dist/core/build/plugins/plugin-internals.js":{"checkedAt":1708389320277,"integrity":"sha512-UKyl4a2kF4G/mvhCFs/nb3WHxUfB1Y/mL7bTEF1pmRecYB7EBLOqD+AzIMYwIWT+NHcFko+jjvQN8n+zvNZJRA==","mode":420,"size":2320},"dist/core/build/plugins/plugin-manifest.js":{"checkedAt":1708389320277,"integrity":"sha512-U1dq6rxTGrEyvRK4H+B+/fOICXb4QMd3a9iEsjt9V7l2eW3FN2nisIb491xpeiTFEuLcqcggv14qXofuYwaegA==","mode":420,"size":8194},"dist/core/build/plugins/plugin-middleware.js":{"checkedAt":1708389320277,"integrity":"sha512-rdYxba8N8YK17MyMHcfGfSJ9udXpkHV3lv9Hqauy/Ig7cUue0RsDhSncSjRFrzLvmmVoi9iQwCPFIx2V0oQiNQ==","mode":420,"size":442},"dist/core/build/plugins/plugin-pages.js":{"checkedAt":1708389320277,"integrity":"sha512-PnqX2Hx0LFACGBz0qC6E8x6NezKYubZY0U7murif84wmgcg6ryIdYUQpn82w2B6BkM/ipAfoKSRp8W/xq58Eug==","mode":420,"size":2654},"dist/core/build/plugins/plugin-prerender.js":{"checkedAt":1708389320277,"integrity":"sha512-0sOgN2o1oZbfOT0JUsoZ9xVvRnANF1avKN8/1EDjmOlRiJVmOhEwZkBkWQ3L5pdNCkib0PE2B/QYdlh1wfmVyg==","mode":420,"size":2549},"dist/core/build/plugins/plugin-renderers.js":{"checkedAt":1708389320277,"integrity":"sha512-bKpvHXcdp5X/JDLyh7cKxBe3UvhB7h+X1H9DaOA8czM6eIIW31GIs/bq0pgRZMG+QhJqlPKjCO0DEkHbbMCR9A==","mode":420,"size":1569},"dist/core/build/plugins/plugin-ssr.js":{"checkedAt":1708389320277,"integrity":"sha512-32Lk5JFtTPaxaC95jBYml3k5GocTN1I+jpeivEqgVKuWNVUJUXb0RqWjK3EC5XYxjXGY1isEVghOSAOX1lL5Rg==","mode":420,"size":9155},"dist/core/build/plugin.js":{"checkedAt":1708389320277,"integrity":"sha512-qhimDrz8NonVhz012B6EOxcRTv5dOdW4ntVnIbNEs+sYd5HTPLDA1cDMIytHaiRcEI5Qu0qBiDHY08o7qlsLWw==","mode":420,"size":1650},"dist/vite-plugin-astro-server/plugin.js":{"checkedAt":1708389320277,"integrity":"sha512-4nTSZ6VTl4DD9rplAGEVlIXLQYqOadLxHecg3g1j7xMdde8soPR1TX8aimrTW+WW8QwW2ko1V+aTqRJg6zrjEw==","mode":420,"size":4439},"dist/assets/utils/vendor/image-size/types/png.js":{"checkedAt":1708389320277,"integrity":"sha512-e1lOwpsqAbejFsMAQibx8ZZakS4EOpMkB1irzm5b6PqZfYi436ZsPRWURan9KXXh8zBFo4j2zDtkGju9iXFV4A==","mode":420,"size":871},"dist/assets/utils/vendor/image-size/types/pnm.js":{"checkedAt":1708389320278,"integrity":"sha512-/jSkBb1OGsz09iXlBrSqilmmmDl8QLBdA9hNjqb0FYywPDIx1TXllW2/pCo1p2CPbu/ioIUZC/1uSlEdCzM5Xg==","mode":420,"size":1568},"dist/core/polyfill.js":{"checkedAt":1708389320278,"integrity":"sha512-Ar5tDRTsclcvm4hGOQULXuLf4Rigt7/u2J2ipr75PFL9JZSyPLN53beFwe0eI6smRzIugfFAUT4SL2O0cMgPsg==","mode":420,"size":340},"dist/virtual-modules/prefetch.js":{"checkedAt":1708389320278,"integrity":"sha512-Cwa91rhfzO8SwBZYXiZmxriPe1RozrZDOuAAg5rcsuwYl+Uo3sHPEjr7oHgd7X12xYuc9K6rcgjFktV6OCjd1A==","mode":420,"size":38},"dist/core/errors/printer.js":{"checkedAt":1708389320278,"integrity":"sha512-Q695o22WUep0gFpdniLsOofbwWm2UXHtcIKwAL2VmLiR4BXw6Fuu11KVfMzWGcyCb+xyYmvpJauVmkOxlTB6HQ==","mode":420,"size":933},"dist/assets/utils/proxy.js":{"checkedAt":1708389320278,"integrity":"sha512-Ge5m+IPTBwapPIPjKo4/nupXiczZa/YLREfaQG8rDB7IPpLEpZfqv2qPszL+INW8d29JRSMNL3IqwamnYBJ/Gw==","mode":420,"size":524},"dist/assets/utils/vendor/image-size/types/psd.js":{"checkedAt":1708389320278,"integrity":"sha512-YHK1lTNSZmVJ+vA4RQfImCkKiMAUCoY9hU8cr4dlFpdONqXDrsb93uUh/a/V3/iHnC8RtBVJGdTt92go7FlGxQ==","mode":420,"size":257},"dist/vite-plugin-astro/query.js":{"checkedAt":1708389320278,"integrity":"sha512-kTNIbCFWJrxFub/jmFa4Lhdm0MO9JK5HulbSG4aVFGa3TN+KbjdiQ13FAcSHWhq9nlBd5qpLyScGrhuSFVWa1g==","mode":420,"size":468},"dist/assets/utils/queryParams.js":{"checkedAt":1708389320278,"integrity":"sha512-KvEEN1GHLIKmQPBqK6s9fZOf4Sa4yrggSpdRg9Lr9xIapI6LnddWJWzfbNN9WPDu4DWRrHkrqRdsOha4YLb96g==","mode":420,"size":346},"dist/assets/build/remote.js":{"checkedAt":1708389320278,"integrity":"sha512-t+EXKouvmoe99HJ0MAy6uJtoRJNJQLUs66KZudHrDqldDPTyyjUiy9CGnWC9PcZxJho7S6OiakloWbagGO+Tgg==","mode":420,"size":1030},"dist/assets/utils/remotePattern.js":{"checkedAt":1708389320278,"integrity":"sha512-IYL4sInmDRbUKbZGhhvZGCE7Q9CXwkX2bXOWU1uNRGb6fLi/vOrc6dl9awIJfrKU7traYj1dbIdBPHGUTjzDiQ==","mode":420,"size":2123},"dist/assets/utils/remoteProbe.js":{"checkedAt":1708389320279,"integrity":"sha512-OlTL8fj+3zvb+f1H6AZ1d1MR+WD1hvhLM0B2GgktQvLFG0F0Z7nMooBV09dfBIXCW2TDyVkn/8iIIREMN5d9Gw==","mode":420,"size":959},"dist/runtime/server/render/astro/render-template.js":{"checkedAt":1708389320279,"integrity":"sha512-HT87eP8vhkPknMdaUPzSqWuo4M2m78YL1iagzKCXK7jy30cSmQjCgKj2m1lGJRyaSVs/yvdkP8MwSFMBp7kpNA==","mode":420,"size":1615},"dist/runtime/server/render/astro/render.js":{"checkedAt":1708389320279,"integrity":"sha512-1/GZMaKBVXCwCw98XOkd+HIk+NiING6ZZgOLAqcVicE6ILzjg4WV56dg7xCZD6lQrKBDkZNWhZ3GtFC4peiv+g==","mode":420,"size":5895},"dist/core/render/renderer.js":{"checkedAt":1708389320279,"integrity":"sha512-OA1vv+iwUual1fenhxUtfmXSTrrrLL42D3KvMCDZ0MvVa7bGErcEUiQ/bToA7BOtqWK4wCYa+7/3X7yZVP69lA==","mode":420,"size":278},"dist/jsx/renderer.js":{"checkedAt":1708389320279,"integrity":"sha512-ZWVmsZIT+jeseIxmikk+CNCz1SyBrEibRDlmqCkNcjfBZCj1Cbv5AJUUlBDU2P9ORsn5vuEjVB0+QPtfODzC2w==","mode":420,"size":576},"dist/core/request.js":{"checkedAt":1708389320279,"integrity":"sha512-v+EDfTvIMN+484eFxtxjqurS5thSbS7M6ZPSy5wrBNDa2o7VPIz4ZlgMZfMejFmYW/Tl5zD7+DvwumJ3jaPRfQ==","mode":420,"size":1125},"dist/vite-plugin-astro-server/request.js":{"checkedAt":1708389320279,"integrity":"sha512-Iuj0Z1+69YrGrXJm5wlgi6PAohuuvb9MCRMljRWcQDKF21+992sYUSOpSZO9CUkkrSddNRPKLjzng2vzWOvhUg==","mode":420,"size":2298},"dist/vite-plugin-astro-server/resolve.js":{"checkedAt":1708389320279,"integrity":"sha512-oZkoaCYpVhhBBbUfV9wiWAePEZzRFT7omRPfJCmaqYm6o7YF5jq/Xwk8e8AjI3fnAJQ4zu6NVbnCt07RKQp/yA==","mode":420,"size":203},"dist/core/cookies/response.js":{"checkedAt":1708389320279,"integrity":"sha512-xObxAeiMeyxwqtTgsaYniUtZCmkXuNQjUbaUeNtO0eNKUzI2x+BtmZaFT+ErWctAG57lP8mgCJwkr8dkL1pmYQ==","mode":420,"size":804},"dist/vite-plugin-astro-server/response.js":{"checkedAt":1708389320279,"integrity":"sha512-HLbJWPjwA7N4dONarQgUNvedGZ1i2u/fJ3WAtAcfpCSEAmbpQg79Kdet4va+Cg2eH6P+CJpJrEbpHvaJgzx2Bw==","mode":420,"size":2733},"dist/core/dev/restart.js":{"checkedAt":1708389320280,"integrity":"sha512-Hcag5IdyRXAyPnqW7y2uql4y5AJRl2ZMOmmg6DHgHE6XONMKUNWUz57U62af6sskDV8pudc60UTtc6N+2M4N8A==","mode":420,"size":4796},"dist/core/render/result.js":{"checkedAt":1708389320280,"integrity":"sha512-iBj0bW6SN8yycUBPcIykxjq15RdGGku169ibr3z+TLHRZ/3ui9fviAzENbUQCVJJdR9JyYcyzTfBo8bZ5qp8MA==","mode":420,"size":6628},"dist/assets/services/vendor/squoosh/rotate/rotate.wasm.js":{"checkedAt":1708389320280,"integrity":"sha512-wPy6TkbiZBAIZWhEtJThpOvoe4bbq+Gc5wFuAdaAbllHSip8p9BTmZU+FYysC4Fi0ILzbu0nwoSYkQAYZoa3Hw==","mode":420,"size":1918},"dist/core/render/route-cache.js":{"checkedAt":1708389320280,"integrity":"sha512-VbuBjPr1vx+7ZVT1SZ0d7WGDn/Imf1Nc3vrvDCdPKIMjP7h/GyCe2YX7rS8VRduTGI+NmGURFOA5v7nSiCNnzg==","mode":420,"size":2459},"dist/vite-plugin-astro-server/route.js":{"checkedAt":1708389320280,"integrity":"sha512-vhSmETZSKFN7GRpPIj37q8E/55FpGfMQHfqfUzm1uG7DuAFfTGSUhQYUTfg67Qwt0TrmVFwa0alVJUGPCRlrtQ==","mode":420,"size":11837},"dist/transitions/router.js":{"checkedAt":1708389320280,"integrity":"sha512-pGDZOhaTTIh0OuTPAiodSynOlqkazz8KnMebgKB/dd+X8ybLzz+dCyNBafmbu2tmmR7rEOv2AkhBEWScUGoQrQ==","mode":420,"size":16786},"dist/prerender/routing.js":{"checkedAt":1708389320280,"integrity":"sha512-JXbHygnnTrU1EsnAIpZoHbmm3GFnM0p4K4aEzXpBLuY2CoVUQPhdWCkHiiOh+7p7bEpsve458tk5MctsoN3BKg==","mode":420,"size":1631},"dist/content/runtime-assets.js":{"checkedAt":1708389320280,"integrity":"sha512-/WNmv2+BmQTkEan2EPyicZTkp78n+oSIrgRZUWnAsQrt046+IOxnnafIcE2N5/yOxwPYkYtaHQJByQ7vrxJyFQ==","mode":420,"size":774},"dist/content/runtime.js":{"checkedAt":1708389320281,"integrity":"sha512-32mW+8ch2R3z5p9GNdAEJB0cIPi8Odl/bTzGVV5+ezcUE/ilw8N22eIvUu7dFQJp+96LKlQ4YM1WdH4EomsnDA==","mode":420,"size":9567},"dist/vite-plugin-scanner/scan.js":{"checkedAt":1708389320281,"integrity":"sha512-v/Rdd/l27p7HevaQY3T0j7HGxWboayN5F+j/ZHX1ypCkNu2jCGwYRIrxZukuM/sIKrkJZyb9c2g90xXwptSFAA==","mode":420,"size":1778},"dist/core/config/schema.js":{"checkedAt":1708389320281,"integrity":"sha512-FMWdb52B2thjWdGDfZkqSYTl0wGBBfZIyXKU40+6C+UWaTAaf8lkyybPw3tjhXsGeJyrLiMBwZQQ/ADWccFkKg==","mode":420,"size":19115},"dist/runtime/server/scripts.js":{"checkedAt":1708389320281,"integrity":"sha512-b8nCGXpHlzGXeiqh5TTiOp0XAt5o0FwJNSaYyQRY9IetKdD5L57dYs/DtesZzJmsfpNkuqJ434aMi2hcY2msLw==","mode":420,"size":1374},"dist/vite-plugin-astro-server/scripts.js":{"checkedAt":1708389320281,"integrity":"sha512-r2H9B0H6evP/OaWkz6BXd1eU+Tkbkioo/Dr2bknyMJ60fPaXtBctvafYDelQschnc8plsFFQamgH+Fue6/rhTg==","mode":420,"size":1235},"dist/core/middleware/sequence.js":{"checkedAt":1708389320281,"integrity":"sha512-05vm1xISbMDpMDezojrzbIlBo1+qbZQYTkaRi70tWauZFxd4pf5xmDYVcuNmccwKNLdPZfQQBKwHEPhhpO499g==","mode":420,"size":711},"dist/core/routing/manifest/serialization.js":{"checkedAt":1708389320281,"integrity":"sha512-+oOsC0tPDMtm2fmppFtcKI61jgcsxorX+BhN1wV1u3ikig/TkvsFiuZME7tEu9IrglbmORlxW54keMH80tBHLA==","mode":420,"size":1301},"dist/runtime/server/serialize.js":{"checkedAt":1708389320281,"integrity":"sha512-sPC1mnm3zxu/n8EmJuXQHWp3p4cE50z3RS3LTmFJaZBEqzpBSLVqnU1kS1TGigB8vqqhYEn+IfWyBOOcRYu2lw==","mode":420,"size":2918},"dist/content/server-listeners.js":{"checkedAt":1708389320281,"integrity":"sha512-KYGSmDwI3PSQWtOStUJFQ+jhyjtNJyPQMHKajXiYK7cQEZN9EjTdlMY+JuxFM1xyjdiJSSU0I5xluQEV0LP5mg==","mode":420,"size":3534},"dist/vite-plugin-astro-server/server-state.js":{"checkedAt":1708389320282,"integrity":"sha512-XdQ55n2beLln5Uxg7o9ddYbp6waut8H6NElWlIqQa3f3x9KZsadxzZkf93Uq1PK+Uk9isvbQHivAWX/wOoZNlA==","mode":420,"size":1017},"dist/jsx/server.js":{"checkedAt":1708389320282,"integrity":"sha512-Q4bpnstUfsl4OaTJcGO/UAurqb9QjHipXyYmNq76qHa5+Wa2UriAekgHkXPCuQUXQ1+UXFfF4dh/S8nYWIOOIA==","mode":420,"size":1516},"dist/assets/services/service.js":{"checkedAt":1708389320282,"integrity":"sha512-W5fz0h6PxB6EAX1mvD+SmlAk/Hf0TrywUmn/nFkHdvHNGtR7AdBfk6dG+Pk2ATvtEjzXbtw3fGwcT954v6rb6Q==","mode":420,"size":6991},"dist/events/session.js":{"checkedAt":1708389320282,"integrity":"sha512-+nitglGbkpcx2Rc33baMJQYUq1PaJgIUKwC1X1hydkmG/fyzN0uI7BJh1SXh8/3zC4KGgBkzCuJrzybx8Wcg9Q==","mode":420,"size":2505},"dist/core/config/settings.js":{"checkedAt":1708389320282,"integrity":"sha512-13AKQZrpM7D32UHAwVy9uDEKMuxQGlZRm4sZIvDr/7RJaoIhXv+tdImrdpZmsDkRknT2XiPy9UpxU0G2+ILtUA==","mode":420,"size":4343},"dist/runtime/client/dev-toolbar/apps/settings.js":{"checkedAt":1708389320282,"integrity":"sha512-qT/QjQnz4TZU3n+MNwvUn70a6OYV4uaw1wWadNpBZ0xx9gt4QTGrrNT/1i3froBchAjrGID4LUWjP+lVFl9Dbw==","mode":420,"size":4344},"dist/runtime/client/dev-toolbar/settings.js":{"checkedAt":1708389320282,"integrity":"sha512-zkYLZCpb+bllftpSapzWrkGPK0lKfQxOEjCsSOX+EVXePKbzlNm6ZPP5ClluVlzAhzlpGNE6eoestWgpZqetXg==","mode":420,"size":1258},"dist/assets/services/sharp.js":{"checkedAt":1708389320282,"integrity":"sha512-/06g1gbAXTW8mewz2DkZLnBATfmDxUOwXQSq7vo76VSCZ17VHLb2ClYeh5BmSBjnZl/BajC9dUFI0UdNbJpEGQ==","mode":420,"size":1912},"dist/core/shiki.js":{"checkedAt":1708389320282,"integrity":"sha512-G7DCzdhG+9tvO20UyaiG2L+oXeUdfGBOIVfEC8TkhoesXK1x2oF0LGvuYqOd4jfJo9Cg4l4rwszpj5riq/sETA==","mode":420,"size":459},"dist/runtime/server/shorthash.js":{"checkedAt":1708389320282,"integrity":"sha512-pdRF8iKq/adNVnjtWgA3tekuGrnQMUb9M9+ELgKImZAQf1Xeb9UiJ8dAZIifQFPC0T7Q7u5j2UWpPlgxgiu1sw==","mode":420,"size":2008},"dist/runtime/server/render/slot.js":{"checkedAt":1708389320282,"integrity":"sha512-xeKZqQaC13zdFU1paaed5XGSoTuil1CuEe14L28rlS6ldIfoQWjL463g+2LKP9Y0CVaJ1ueq/r8rCYZE6KeMvA==","mode":420,"size":2071},"dist/vite-plugin-html/transform/slots.js":{"checkedAt":1708389320282,"integrity":"sha512-z6QhWHYMMHB7upf3BKlWCEzLTACj9HkMB7OBRGtJBYDpYPtwkW02Jd+q3QniZ0k/toKypQAP+8PBaiQa/H7PTg==","mode":420,"size":1036},"dist/assets/services/vendor/squoosh/png/squoosh_oxipng_bg.wasm.js":{"checkedAt":1708389320284,"integrity":"sha512-4W2LtqQOMbBydKcGbtJuxnoobOBeq5fdMJr7+mUKmrnZJ93nTzVAZGPFNxckU1lW5KgqVAU4+gJ/XLwu4dkPVA==","mode":420,"size":359000},"dist/assets/services/vendor/squoosh/png/squoosh_oxipng.js":{"checkedAt":1708389320284,"integrity":"sha512-dXYAsb6w5s3RO53+YMrx5F6G8QKmAztGwmYHsGEfXd6G6S2XZXdw03YDNT8e0k84w2xNGpCRYAILHVXe3lsG9g==","mode":420,"size":2884},"dist/assets/services/vendor/squoosh/png/squoosh_png_bg.wasm.js":{"checkedAt":1708389320285,"integrity":"sha512-spHhqyh+FJM0NMrUzFSdI3q7JzWgPd5ilXvxBUTBO6I5uLmEeYaUOHoZ6Ot9wo+fkt89cmyouOXQ5rk3Dj1GVw==","mode":420,"size":165046},"dist/assets/services/vendor/squoosh/png/squoosh_png.js":{"checkedAt":1708389320285,"integrity":"sha512-3rdLInve57b1OvfovfwHySdCNsQz66Y/MD46JSHOdY8JFXh7+jBOBKfxuCV0nm15ZOlPJ09dXxYMLWTJdvOu0g==","mode":420,"size":4358},"dist/assets/services/vendor/squoosh/resize/squoosh_resize_bg.wasm.js":{"checkedAt":1708389320286,"integrity":"sha512-uqQjMuaDceuo8WviRDlRuthRkpJM7c9JrAQ1C+MKMHp/edPV1oYpEYNtoHL18mFS5s67JKrNM+snBHeag6IZkQ==","mode":420,"size":49524},"dist/assets/services/vendor/squoosh/resize/squoosh_resize.js":{"checkedAt":1708389320287,"integrity":"sha512-X7t/K+xgM6U/Vt9THvTLioma+0uYXTsHNgWl2aPJlc/n+QDkQ/01NBOLk7ClyMjMa3I+JZQ9EVqQ3OA5pQF3/A==","mode":420,"size":3080},"dist/assets/services/squoosh.js":{"checkedAt":1708389320287,"integrity":"sha512-MCAXspNqRJL8gli5GzXdGSLz0zNeW7kUWMGD5VrXyAb3Cm76uuKBKaGCKS6QVrknfu0KQwjfXloYPqAbQm/jnQ==","mode":420,"size":2479},"dist/core/render/ssr-element.js":{"checkedAt":1708389320287,"integrity":"sha512-qyXSaHcW4UEk1dnhTC8kVKdStwtb3Eeih6wrKC5U8FT43QBsPYLv8yGqfOlC45DXTuHCOcNbYQDBwg0AxIqK5w==","mode":420,"size":1890},"dist/core/app/ssrPipeline.js":{"checkedAt":1708389320287,"integrity":"sha512-l7SHRYQLkrD6AOP4BX21VguuOYNlQBSseh7yA9nq3sMGCRIkfiZuoqXCKp4iIyymyjSpw27TZbb13sX1piqZzw==","mode":420,"size":118},"dist/core/build/static-build.js":{"checkedAt":1708389320287,"integrity":"sha512-bch2EELt8G0NG8CjIOoBv/sBTxmXJoaSCJvZ4hl8irZ4bLahlZNVDQIt3lTQP+8wh8OygQXpKdLxJGiuJOniwQ==","mode":420,"size":17220},"dist/core/preview/static-preview-server.js":{"checkedAt":1708389320287,"integrity":"sha512-bTl/j49u+/qslZi5HiPJzfHkEjh6d/1Jnv03TolnTTRPdaFQgEwF4OJ9Y/EP2f958mK0jgbjFZUYZKbd7dl5Ig==","mode":420,"size":1972},"dist/preferences/store.js":{"checkedAt":1708389320287,"integrity":"sha512-eVUC5HN66EFwa56QR87sjtIiIFwd3SlQGAeoNlodM0nyql2FysIl719vBcba86EsgT3HNij1G8n+W4nxy/Ss5g==","mode":420,"size":1355},"dist/core/compile/style.js":{"checkedAt":1708389320288,"integrity":"sha512-amDMaV+6j+QwkGW0tKK4k9b0a+gv85W7wxiZQ6TUZJzc7rTRZzRimA4M9JnClxutDEOXRCQ09mx5IyfrZHWbKA==","mode":420,"size":2251},"dist/assets/utils/vendor/image-size/types/svg.js":{"checkedAt":1708389320288,"integrity":"sha512-jPQ+91NsgdPRXdElxI+OhL/v1qZEi8IxUksTCoPdYUn1Sm94Esn546D4lNYs3fEsvxpZGvAAkIoW78rW/6jupA==","mode":420,"size":2386},"dist/vite-plugin-mdx/tag.js":{"checkedAt":1708389320288,"integrity":"sha512-OMXhjVGQsDhqaj3rIHTDOIIvnAnhB0tP2jxMA+Nq+icBhrib3GaVvbR26eKF8DBFIpA/kFT3evmLymYcnsTTaQ==","mode":420,"size":4023},"dist/runtime/server/render/tags.js":{"checkedAt":1708389320288,"integrity":"sha512-3IhcFO6TtZoyutuisQ4/S9xDrPf7r7Ug9iySwiTOJtlXeGsE9p2qBW/ANwSYiImvn481zU/DQ8zdM9XjIf+p5w==","mode":420,"size":715},"dist/assets/utils/vendor/image-size/types/tga.js":{"checkedAt":1708389320288,"integrity":"sha512-PrcBr67Mb7XtsBGuuwaokNRoqglGQtBMRKBvAbTHw4IDYYXUfQgMDcwC82D+5JFN5m+Fl4Y9FxNoz8YfOdCgMA==","mode":420,"size":297},"dist/cli/throw-and-exit.js":{"checkedAt":1708389320288,"integrity":"sha512-+ZP8CaQ4LEgumAP/oHwXhMUmhB2GNSUe0cOoSiSOFLrqju5PMp9azJ7tUy57dBEi7t6/IDfN4qxNtUEwGks+fA==","mode":420,"size":1010},"dist/assets/utils/vendor/image-size/types/tiff.js":{"checkedAt":1708389320288,"integrity":"sha512-Qn3yWbLTQeMafJYfoIuJKKFL05+v6jS5HrkVKaEIilGFPG8hPkbiZKBBhOjDxXHg3t7XfyYAr47gam9EmCjptQ==","mode":420,"size":1811},"dist/core/config/timer.js":{"checkedAt":1708389320288,"integrity":"sha512-GbkoLHm8Ypa6qV/UHhXGTI/SiFfWoVNTPnXTDT/Ht42M5fpkvybqKYNKDmc+9kBuyzlgfblPrxIqj+Z5IKE6ew==","mode":420,"size":1161},"dist/runtime/client/dev-toolbar/ui-library/toggle.js":{"checkedAt":1708389320289,"integrity":"sha512-kYA/cCUwrRqp3CR/1Ltc4AxtfS12p4rbn0LFHkUocOm8lHsDBcVTfqKmvVqCTh3r50x6DO9+Gx174UY+N9oCFQ==","mode":420,"size":1363},"dist/events/toolbar.js":{"checkedAt":1708389320289,"integrity":"sha512-8p0j6eDzyq9/xw6pXq7Pr81Mbd2xnvyQqomCDJdzcRGOIAdu8vrx7Py37CiiWdpXpmgLBCvmaWK/rvaIASr+bQ==","mode":420,"size":243},"dist/runtime/client/dev-toolbar/toolbar.js":{"checkedAt":1708389320289,"integrity":"sha512-qsYk+OCWB1DT1XGlyS+f+d5hic4t4L1xQOXMm4bSVoXjrSWn5onV+mjayvsqirMRUUp2qf5APAP7OIHkPTLVvA==","mode":420,"size":14737},"dist/runtime/client/dev-toolbar/ui-library/tooltip.js":{"checkedAt":1708389320289,"integrity":"sha512-y8NqJOavBptHjqp77uJTZk0n9/bqD26b61aJCEDoEavM/bJ56eKGrY/e8QzXFx7j2ubAk/3DySan1fkGakahyw==","mode":420,"size":3996},"dist/assets/utils/transformToPath.js":{"checkedAt":1708389320289,"integrity":"sha512-7BjAGackHgk3m9iqc3IcShirE9bPTHm5sbfdtJAVPFyi8u1lBJ2CXz5amYhnvZSSVcx/Bkz08/zERc3ZQ1j/OQ==","mode":420,"size":971},"dist/runtime/server/transition.js":{"checkedAt":1708389320289,"integrity":"sha512-HtT+88veiFoX+f+VdWKbFvwR8ADa+ADSyR9d9R1Ir/la80giseYWClkkrEvk5VNVE6PecJD4WeT/YiRthTNglg==","mode":420,"size":6224},"dist/virtual-modules/transitions-events.js":{"checkedAt":1708389320289,"integrity":"sha512-n1coOg6lmbFWzc+nlhxcey7SGmVAx3gr8rMWfuhuZe5H2xYH76eN8xy0tOtJ9iH9ZIkuR1PsUjh72xKLEInxww==","mode":420,"size":42},"dist/virtual-modules/transitions-router.js":{"checkedAt":1708389320289,"integrity":"sha512-UkPDrV9F4e2Pq61742FsO4SNLd0+yDdUlTotNH7M+j1avSRW4q3Rkd8TJl1Sf6qBCXIHAaCGqYlPB3IRa+Q6bA==","mode":420,"size":42},"dist/virtual-modules/transitions-types.js":{"checkedAt":1708389320289,"integrity":"sha512-SEwqCjbyYCMP9Jf/z0Y0Ifpd8tpdjVojasL5Q6nwEI3jMCebjusZ+lr1ySak15ld5PxFSQZitT4pR0LG2NobCw==","mode":420,"size":41},"dist/virtual-modules/transitions.js":{"checkedAt":1708389320289,"integrity":"sha512-JuK9/cDukYXZNZXQCqfHS+HQAOYamL0ZuCbRn6H+7sNe1nK/forBWLyVyUvbgPddPxBWdLMa3NoO9Vdygjr9JA==","mode":420,"size":41},"dist/core/config/tsconfig.js":{"checkedAt":1708389320290,"integrity":"sha512-GpWSQm0LXnHtqhgCks4kZmKun5QjNRbMi/VVgZOuFSoxyXdxvpfJ104q6vfoeqvCML77V8BqDLFUjvbsabYbag==","mode":420,"size":2990},"dist/type-utils.js":{"checkedAt":1708389320290,"integrity":"sha512-z4PhNX7vuL3xVChQ1m2AB9Yg5AULVxXcg/SpIdNs6c5H0NE8XYXysP+DGNKHfuwvY7kxvUdBeoGlODJ6+SfaPg==","mode":420,"size":0},"dist/@types/typed-emitter.js":{"checkedAt":1708389320290,"integrity":"sha512-z4PhNX7vuL3xVChQ1m2AB9Yg5AULVxXcg/SpIdNs6c5H0NE8XYXysP+DGNKHfuwvY7kxvUdBeoGlODJ6+SfaPg==","mode":420,"size":0},"dist/content/types-generator.js":{"checkedAt":1708389320290,"integrity":"sha512-0VQWJJYSu9v9uKeJ8h2s+XvsDObiWJslBJ3hYEcIjMLpLUlyP3K4DYA9xQ2osHvV5dwTSFGXrDG5qLekEEourA==","mode":420,"size":13271},"dist/assets/types.js":{"checkedAt":1708389320290,"integrity":"sha512-z4PhNX7vuL3xVChQ1m2AB9Yg5AULVxXcg/SpIdNs6c5H0NE8XYXysP+DGNKHfuwvY7kxvUdBeoGlODJ6+SfaPg==","mode":420,"size":0},"dist/core/app/types.js":{"checkedAt":1708389320292,"integrity":"sha512-z4PhNX7vuL3xVChQ1m2AB9Yg5AULVxXcg/SpIdNs6c5H0NE8XYXysP+DGNKHfuwvY7kxvUdBeoGlODJ6+SfaPg==","mode":420,"size":0},"dist/core/build/types.js":{"checkedAt":1708389320292,"integrity":"sha512-z4PhNX7vuL3xVChQ1m2AB9Yg5AULVxXcg/SpIdNs6c5H0NE8XYXysP+DGNKHfuwvY7kxvUdBeoGlODJ6+SfaPg==","mode":420,"size":0},"dist/core/compile/types.js":{"checkedAt":1708389320292,"integrity":"sha512-z4PhNX7vuL3xVChQ1m2AB9Yg5AULVxXcg/SpIdNs6c5H0NE8XYXysP+DGNKHfuwvY7kxvUdBeoGlODJ6+SfaPg==","mode":420,"size":0},"dist/transitions/types.js":{"checkedAt":1708389320292,"integrity":"sha512-z4PhNX7vuL3xVChQ1m2AB9Yg5AULVxXcg/SpIdNs6c5H0NE8XYXysP+DGNKHfuwvY7kxvUdBeoGlODJ6+SfaPg==","mode":420,"size":0},"dist/vite-plugin-astro/types.js":{"checkedAt":1708389320292,"integrity":"sha512-z4PhNX7vuL3xVChQ1m2AB9Yg5AULVxXcg/SpIdNs6c5H0NE8XYXysP+DGNKHfuwvY7kxvUdBeoGlODJ6+SfaPg==","mode":420,"size":0},"dist/core/errors/userError.js":{"checkedAt":1708389320292,"integrity":"sha512-8CT1v4kInvpKw6KnAbKH3m9ibp+8OH7sav/z4eAiP0ezQCYxmNshMwXV4MVSQVvEdj9+To3b+AFWV0v/ISYyIg==","mode":420,"size":89},"dist/core/build/plugins/util.js":{"checkedAt":1708389320292,"integrity":"sha512-DwkYHRvuIAK2qTO4qsN6bkiVqx5j1yvIsPKW0CUvz6aRNUuF+GE2lP6jK2DOFGfQ25KOOxhuGcZm8KMC4hhIuw==","mode":420,"size":1726},"dist/core/build/util.js":{"checkedAt":1708389320293,"integrity":"sha512-PcGvjOkzgIK/PAoblnJOXmjvLF9EwqAOh6am+lYh3cj6yZHN146HXQ4sQWx1ySouEstnYfsKZXFzQ5UXkX3UGA==","mode":420,"size":1359},"dist/core/preview/util.js":{"checkedAt":1708389320293,"integrity":"sha512-HXhFr2FubCpj39dQXOWsU0AJYfqUl5Uw/9+AaDFd2qVSMBTg+3wNlb+kRT0VuHtFTih7uXry5F16A13mWbB9Tg==","mode":420,"size":432},"dist/core/util.js":{"checkedAt":1708389320293,"integrity":"sha512-npg4x4DxhHiTce8dCATOkBa75HZVv97XHoEiFQMVE46XAmOIH9fLMuqyY3A9J0VP2OLUNX/8qkmBAFnrnXW9kw==","mode":420,"size":5971},"dist/runtime/server/render/util.js":{"checkedAt":1708389320293,"integrity":"sha512-ZosKcmJfPPBG7vEjE/MnCNG/dzeApFwElwrBNVTGqtF3XiCi6y0vunoXjWd+6S9wgSs3wMVohxi4qOK26+lsaA==","mode":420,"size":5341},"dist/runtime/server/util.js":{"checkedAt":1708389320293,"integrity":"sha512-QEYD6+AvX9J4QMfxWy15vc/WGsVv3YmynTNCONJ5UnZJtfyeKTGFHPBkaFnnxkLGJ6v/gQ62Q9fL3hQqBzskMA==","mode":420,"size":424},"dist/vite-plugin-astro-server/util.js":{"checkedAt":1708389320293,"integrity":"sha512-rxLu+bBV9Q39/bQWQhT4dcr7CBcUg0VISgtC8OnJkkOkZeFoLmYozSGpaE6VfV1RImEhxJjoKZE0/VzxPuYX7w==","mode":420,"size":279},"dist/assets/utils/vendor/image-size/types/utils.js":{"checkedAt":1708389320293,"integrity":"sha512-s3i5qtY8cixG2EFH/SJPg32sEXZ9jT2vMApF/w3HnGmKPxWA5HloAHKKJiQs25VzVhcwO8qDfuhVqQiap4ZbUw==","mode":420,"size":2160},"dist/content/utils.js":{"checkedAt":1708389320293,"integrity":"sha512-07TfJa/hMEZ/sb4O6/ZUF0uMs/CwcWteWpV4rO2KBi57AiJRp9m8QfwJVWkXoQX8dcTNKSlKkCTSBv23phUV4g==","mode":420,"size":11126},"dist/core/errors/dev/utils.js":{"checkedAt":1708389320294,"integrity":"sha512-zJxrlpi0Ftz3CT/Je6ZQQ9ODb2r+1YqishYkQ00EUWd9J4hQEnu5eBNgq2AwhfSHJ5w/CUiJtDDrMILODNm1WQ==","mode":420,"size":6547},"dist/core/errors/utils.js":{"checkedAt":1708389320294,"integrity":"sha512-9Qle+KYtcoUg1iZgMXCRmv6eAmG/sPpb2i6M3vua2TXGzpl5QNvsPuhjChbHBBBPVVo1ydbJ2Uixkx2W6r1grA==","mode":420,"size":2080},"dist/prerender/utils.js":{"checkedAt":1708389320294,"integrity":"sha512-Sw/L4yVZtsJvaiGh/vIvi5LpOfy2+lE1pI1LH4nwHyXofsl70lDFcHQCmW7owvfAyyVL7w1Nalr8vWCAey7oQg==","mode":420,"size":513},"dist/vite-plugin-astro/utils.js":{"checkedAt":1708389320294,"integrity":"sha512-Cb//99n0sw87xRbA7LgEYrSffQWZRSHiOXV+E7ZSZ5mHCMKcby/tY5w3uRVYVM5OO9MPxFHcZK5Xl3KagzfWEQ==","mode":420,"size":69},"dist/vite-plugin-html/transform/utils.js":{"checkedAt":1708389320294,"integrity":"sha512-sFMBr2wDZ96dAgE2M+MpwoujnxpOL4muf6BV1w0ZPJR7G3Wti9uUDOgY4lEYhWLomAf7d2BAoP3RCciJg8sxuA==","mode":420,"size":1603},"dist/core/redirects/validate.js":{"checkedAt":1708389320294,"integrity":"sha512-QZNHsNYeM6ryjHv1G7si3PFC1sgFbTyE7AxvqTccFn2ab94uBVdY4OPx5V8avzuqoWRS0C+wepu23W+geuCRpw==","mode":420,"size":321},"dist/core/routing/validation.js":{"checkedAt":1708389320294,"integrity":"sha512-TSAS+uikzdXPvFg/l4yGxCkwvAnggq4XcWPZH7k8mMhlcwftbjDYovdjROl8horPAYEpYWByY9Ccm6OJsyjLNw==","mode":420,"size":2508},"dist/runtime/client/visible.js":{"checkedAt":1708389320294,"integrity":"sha512-bu15xDz903akGkSOE3wMi0cR+WZI9J+EsYGKa1JqoSF5N+dZT19KE38Mt4+/fVI17KmOpyDgWxq/TqWZ/cwxSQ==","mode":420,"size":642},"dist/runtime/client/visible.prebuilt.js":{"checkedAt":1708389320294,"integrity":"sha512-G7/a/fFFMGwn75NH1kaOQmGSVgwUCWMzLgGR37Pzr2Qo6t+YVll8ZBcyEk2p+43dvn++4GIL87d2KEqbQxm8BA==","mode":420,"size":457},"dist/core/config/vite-load.js":{"checkedAt":1708389320294,"integrity":"sha512-t+MZP2NTYpQVWtO1CsaYmOQ9jIUztiAAKrlh3fK47f2uCQ01abs1pYG7pe1eyClCJOkBm/J3Q0GcVwUmPDDseQ==","mode":420,"size":1579},"dist/assets/vite-plugin-assets.js":{"checkedAt":1708389320294,"integrity":"sha512-g/rSkiipFeTYLEq+oA5udstLPaeHBSkzVfWMZ5EhzlmGgsZ1lKMr4YdaQa3mqV4S59HIg27l4oN90EJJM89aGQ==","mode":420,"size":6767},"dist/core/preview/vite-plugin-astro-preview.js":{"checkedAt":1708389320294,"integrity":"sha512-EbhcjhbTsh6vn57I0KvHVM3YAy8hrpuokdPAER4uAHgGfmc9NDAqhdW3ILmE93SJ3x8nfvPIC60bTUfK2NQ5gQ==","mode":420,"size":2777},"dist/content/vite-plugin-content-assets.js":{"checkedAt":1708389320294,"integrity":"sha512-ntvr9ja0GqezwJcQhKXk5C8y1YrzBz8P0794++OFoe9ScH5O4ZNF+jdvank+ChWCoSie/aRhTmS5FNBC9fknLQ==","mode":420,"size":8653},"dist/content/vite-plugin-content-imports.js":{"checkedAt":1708389320294,"integrity":"sha512-UYZVOM4DfS/vCiIk24O3BVcm9OEG5hzZXlwcN8VQlQyglBLHavnu/iVWBGymJlB5Z33TimAgMKu4p/SItIa1gw==","mode":420,"size":9814},"dist/config/vite-plugin-content-listen.js":{"checkedAt":1708389320294,"integrity":"sha512-XwvtAsA2eeu6nAC5VOa3W1FS67IB1aU/MEVfg5c+i7TKNoOX9EaFhESxLmajTFVbFs7wWAr5YNYNcuk2fRrkAw==","mode":420,"size":491},"dist/content/vite-plugin-content-virtual-mod.js":{"checkedAt":1708389320295,"integrity":"sha512-0NzL/OgP6PN8rdrIF3t0srNTMriY+xYCIPSHnjsAfcxxY3x7OUcEONpi18zSZOugHBq19MRkzLEhOZIuPu8Dpw==","mode":420,"size":9186},"dist/vite-plugin-dev-toolbar/vite-plugin-dev-toolbar.js":{"checkedAt":1708389320295,"integrity":"sha512-O70zBh0co3nI/gNO7Yl5E1rWb8UVl2sPykNlkqgULw7V2L2vBbk/jptG+8mgcYhY3Dwda114fpdTrMV0qivVIA==","mode":420,"size":2685},"dist/i18n/vite-plugin-i18n.js":{"checkedAt":1708389320295,"integrity":"sha512-Cj9+/JJ5R7JSM4+bG7+5JS+dU2J4WggQHoy/gdtQIekdmm6fOtMtG/Q83XRyqVxn7E+aLCyB7oMMBH0ZIKJ0Ug==","mode":420,"size":961},"dist/prefetch/vite-plugin-prefetch.js":{"checkedAt":1708389320295,"integrity":"sha512-Mu8ghPgIkb4cH9N4py2E+hrjpkzJO18jIVYuTekcz+opyw8gHmAPLcctcxjYK2mZu98X+66vwU1dqj1ddBeLfg==","mode":420,"size":1724},"dist/transitions/vite-plugin-transitions.js":{"checkedAt":1708389320295,"integrity":"sha512-a7HYL+TA6XIMSPv4Q9fBQzAUbXIRGgj85JRHjULGY1z45hT+LF5ps5J9iwNfnZQI24O5RNQXI27Gd/phC69vcQ==","mode":420,"size":1707},"dist/core/middleware/vite-plugin.js":{"checkedAt":1708389320295,"integrity":"sha512-Xd3PxOH4rgz/mwsq7Uxk3v4a+8lGtseMW+jyiLl6YLNNVAkBazVD8EOOod2KF7swKQEQs4Q5Ym+iQIDOIrJ+cw==","mode":420,"size":3532},"dist/core/errors/dev/vite.js":{"checkedAt":1708389320295,"integrity":"sha512-mI20BV60r7trzybPeTGNPJXcGrRxvkOC4Heqj/Q0rKfs28ijV5bXPfrQQ/F1084dQY1xOLAtIr5kYlFRcp4rjg==","mode":420,"size":3936},"dist/core/logger/vite.js":{"checkedAt":1708389320295,"integrity":"sha512-DkigfA4fmDOXFOOYhASa9mSwuiOFauNL+C+Ce+/T5O+92iwcHEMilO/zlXuU91fuEGP17qYJTfJ1ng2HKS8R6g==","mode":420,"size":2798},"dist/core/module-loader/vite.js":{"checkedAt":1708389320295,"integrity":"sha512-EaZU72sgFLaKIEIxql99VxAvbusZYeoPg4/a2+FBUdKGNB2rDvOZ+3rMwF3GWJ1HfZkpa5PYDBONUrRWQQ/3Rg==","mode":420,"size":2121},"dist/vite-plugin-astro-server/vite.js":{"checkedAt":1708389320295,"integrity":"sha512-I+Mf+JLLz24rykJmXYuXySCdxduTApS8/jsAebHHSCFw+W5YhpVL2uxTStSVROAWzTL5FvFdvzRppPfT9wPS9g==","mode":420,"size":2747},"dist/assets/services/vendor/squoosh/webp/webp_enc.d.js":{"checkedAt":1708389320295,"integrity":"sha512-eW85AH5IkUPlM1PbLhQU50OhssccaN780CSK0Of41DvrY54wqGANV+l7Xy4WhDJIrpTPanDrpXA6SFKYXxZwtw==","mode":420,"size":84},"dist/assets/services/vendor/squoosh/webp/webp_node_dec.js":{"checkedAt":1708389320295,"integrity":"sha512-ShDTeNMakJovri9cg/gBDV99aYAOfqtlZ+uIsaS8xHr5TyjrweuKXlO+cpgomKq4WQjMzD+w/wb8uoKnby4rBg==","mode":420,"size":48392},"dist/assets/services/vendor/squoosh/webp/webp_node_dec.wasm.js":{"checkedAt":1708389320296,"integrity":"sha512-loO+WgQP5lhnB5HU+lJ3Igs5FaKkDNFQYWNkTSjhWN5pFms5ontPABAjMQq7TRwiw+WD8S+ePOa5S9sOgz8MLQ==","mode":420,"size":198364},"dist/assets/services/vendor/squoosh/webp/webp_node_enc.js":{"checkedAt":1708389320296,"integrity":"sha512-Zkdqihe5rJC7TjG8R5HXr8JCfYrItJd+nCKLzsnpcw+jXMDTAcazWEPb3Bq/B7s2Y9GiPG2tzYqLfghnT+ZQ3w==","mode":420,"size":54251},"dist/assets/services/vendor/squoosh/webp/webp_node_enc.wasm.js":{"checkedAt":1708389320297,"integrity":"sha512-B1X9Iciu+eIldeY2zuXG7LBU/NaVxleI+tjq/naoErCQlzeF8mmjnyo3FXd4AUI9gFYYlOGwovbKlYkLoVMLfg==","mode":420,"size":397884},"dist/assets/utils/vendor/image-size/types/webp.js":{"checkedAt":1708389320297,"integrity":"sha512-035mc0cI9liPQd7/BZLvZmg4ck9Fos/YGUQDMSDS89qgEa8WE0YmKsUNv8L1rsNGZe14qQzbIFkvW2nU+lN+RA==","mode":420,"size":1560},"dist/runtime/client/dev-toolbar/apps/utils/window.js":{"checkedAt":1708389320298,"integrity":"sha512-Gqmq7mOvhVoOlwOEbKadVIMATybyYbhPEb4NV1l7ucxaRNKBa9GS5c9KOQV0FxFH0l6/m4mhB2hCMCByYAEzCA==","mode":420,"size":213},"dist/runtime/client/dev-toolbar/ui-library/window.js":{"checkedAt":1708389320298,"integrity":"sha512-8+ZBpYNfv8EG/2/D3nOdWFC0iAq8ChpcJOAfMAHgrGx5yVfcLuFq66o+RsPI85PCOFssVjIo3WIZ8//c6ixS+g==","mode":420,"size":1967},"dist/assets/services/vendor/squoosh/utils/workerPool.js":{"checkedAt":1708389320298,"integrity":"sha512-0CAu8IN6PK0pucNg9KBMPOQ/ZjDNaCRXTLBRr7JO7M/Vvhjc3/425Mnt1A0VMnPQFqm83BG9zwcxalX+szzLvw==","mode":420,"size":2783},"dist/cli/add/wrapper.js":{"checkedAt":1708389320298,"integrity":"sha512-sV7UY7COIvAppZ6r4QrGUqWb648aCe0cJcz5ULTritA5vwtSxnRKofOoQ7KTvgnEn5UtE6bld0o7XTJAnqtG9g==","mode":420,"size":532},"dist/runtime/client/dev-toolbar/apps/xray.js":{"checkedAt":1708389320298,"integrity":"sha512-5J5C85pJ0ZvULBByToA5K+d3E2NN2ue3kEghnFk+IMb8lFAWO4NSrI5kEV/FfE0zSY1WahusmK+Zjr82dTmNFQ==","mode":420,"size":5717},"tsconfigs/base.json":{"checkedAt":1708389320298,"integrity":"sha512-+la79Al1yhv5qq7yIHjxtgIAugeQv0qmPnTFbJUroTyTiPed5lD/62B2M9UAVE0d23GA2AN2IvP78cl9VqoYGg==","mode":420,"size":1357},"tsconfigs/strict.json":{"checkedAt":1708389320298,"integrity":"sha512-vLHmfFn+5pYWQbBRIotA/Qz/tOpZbbIbke8a/7JG46pypF4edzELKTF8oefk//68gNGDLhp9nIVQ1ArmhZ2N7g==","mode":420,"size":260},"tsconfigs/strictest.json":{"checkedAt":1708389320298,"integrity":"sha512-M8pzM6av70a0xLEh4SYw1nqg3QK5WLHuJEBfBHt0yB/kKzo8oAdrojeQlEyhH5lC12oVwqqAupH0SkTxAQuAiQ==","mode":420,"size":1276},"README.md":{"checkedAt":1708389320298,"integrity":"sha512-G9c5fZkVY/6m3DHXKUowHscKdOadGj6Kz4D2tBfa5pmPdpU51FOXL4IgAcf3W2dRLTdBAIoefX3TVd7SIs2IGg==","mode":420,"size":1394},"config.mjs":{"checkedAt":1708389320298,"integrity":"sha512-nuj+5k+1O4G5qvTMbdw0zDChTABdplR8I+JSlKk0AKhynKKiPQrIrEhQth/9RyWFichOnJEu9OdncPq2UaAcTA==","mode":420,"size":428},"content-module.template.mjs":{"checkedAt":1708389320298,"integrity":"sha512-d8nbOJzK70ErlWnUz8SLnzcGDkmZmUNFyJc6dcDWKnjRPi9at8E7yKBgvphl2p1R3PjeKp4SA98LBQw7/BJVCA==","mode":420,"size":2045},"zod.mjs":{"checkedAt":1708389320298,"integrity":"sha512-esXL8icTBdrpPJjFcWka5BpVTAIfyvD+ELcvrgprCFi67I4DKxzwEVWFlP6Zmrhl5ymgyEcwAdUVImcFG10MHw==","mode":420,"size":69},"dist/template/4xx.d.ts":{"checkedAt":1708389320298,"integrity":"sha512-gay133RtmMu/eEutJKqZufrsu8CCpLpbGi8fSgX8nsZ5bjeYye5hWaGGl6a/KKjUKAPfong2Z97waPUPsgtwCQ==","mode":420,"size":639},"dist/runtime/client/dev-toolbar/apps/audit/a11y.d.ts":{"checkedAt":1708389320298,"integrity":"sha512-KLd+7ojmqf5heZ9wg5Ei9NsdCY9miyGaZSNTmKk58Ci19YiZnmcRBki5dzRhXCV/PWyhbBOhvoZfkFfdDC8qUw==","mode":420,"size":1402},"dist/core/build/add-rollup-input.d.ts":{"checkedAt":1708389320298,"integrity":"sha512-XC1LS29gIvUB8IdmRGmgwEwGGUMxjBJonqOJqjgsZUSINtXVQrIkiVD8yhdnZr5SntwrsUW0NH/s8zBGnIhbZw==","mode":420,"size":153},"dist/runtime/server/render/any.d.ts":{"checkedAt":1708389320298,"integrity":"sha512-Om2ztwr4Mo6kBZTMZpJysBorB6DxiLEVm7NAVtjR2lNg+MhPAXm1L9QIBmtKC8BRb6vR5I8mxv44c0Zg9LyOjg==","mode":420,"size":150},"dist/runtime/server/astro-component.d.ts":{"checkedAt":1708389320298,"integrity":"sha512-re0ej4Sl1gDc82Q8xTTzMSJ4vSa9MvNGclLOwjMRimkQWHUyMHKXrmnlOFPaNyqOK7Eqfw+FT/KMiH+PGpBd+A==","mode":420,"size":436},"dist/runtime/server/astro-global.d.ts":{"checkedAt":1708389320298,"integrity":"sha512-wAgo+BX3SoWeWtguRzPUBbrGAiOpk40YBNRiOKOTorX5bVvVlvPptYRwc8uAeCNOqZ+WJtcWeeiyGHFlCEprWQ==","mode":420,"size":148},"dist/runtime/server/astro-island.d.ts":{"checkedAt":1708389320298,"integrity":"sha512-TuHIj4w/TkzTTLbAAzm/nW0Db/St469J6HHMiWa4THKdi3VJKsxkE8mmZKwApXlYIjrBPEIp2oxi6+alPk94Pw==","mode":420,"size":11},"dist/runtime/server/astro-island.prebuilt-dev.d.ts":{"checkedAt":1708389320299,"integrity":"sha512-IoZlSptZFjhL8IQcIzHo1oSUa3UYQQg5AdsBjMYTkT9FDXKEcgOl1+avdcKxFNJGKrnAyMcSIgJxiRBFViBb5Q==","mode":420,"size":3906},"dist/runtime/server/astro-island.prebuilt.d.ts":{"checkedAt":1708389320299,"integrity":"sha512-ZgfIgj65q8aT9XbmyzNqPd2YHD3Q+c0OsXQe57bPLaHf1/5msFmdxMNw4j0w9jW+iys5UkLOnAhy1lsvtzxCSA==","mode":420,"size":3804},"astro-jsx.d.ts":{"checkedAt":1708389320299,"integrity":"sha512-LyTVoz7ENgZ9aj8IXX6mfwqNhU7LLBGtpAq3GTRXxJizTR2/ovwcSa3ZEAuuEbPsIiH59Hg41OBLrTQilFk5+g==","mode":420,"size":55476},"dist/@types/astro.d.ts":{"checkedAt":1708389320299,"integrity":"sha512-A4triy7Tk4g+ffRd7LMWN84pVrTzPI7NDi+dC+uRW0KrHA5FW8QHv0PlqXD3bz331VD7tp7u734fxVtL40r60g==","mode":420,"size":94792},"dist/runtime/client/dev-toolbar/apps/astro.d.ts":{"checkedAt":1708389320299,"integrity":"sha512-7fvoKcj8U5a6InjfXbZ0dgyWou7SspT3XveTyDlFQE5xFhNrDD+4wUYKWc6/HkPouOakPJCwjAoYLu1mR/Cbyg==","mode":420,"size":458},"dist/integrations/astroFeaturesValidation.d.ts":{"checkedAt":1708389320299,"integrity":"sha512-P2kGHRsarhucyru95k2S6bWo28kTtetvcF3CP4hI+D43VwVCl1nB+vhzMTOA3c079USaDb8eiKGi34e2KgzWGA==","mode":420,"size":691},"dist/assets/services/vendor/squoosh/avif/avif_node_dec.d.ts":{"checkedAt":1708389320300,"integrity":"sha512-BdyOLkcUgoVH4w24mm0BchAsbWIv9SMbIVJ09s9ZbqFd85GbKjebommrm2/FCMMRSlSblcrKk0hC/fuMpU1WGg==","mode":420,"size":65},"dist/assets/services/vendor/squoosh/avif/avif_node_dec.wasm.d.ts":{"checkedAt":1708389320300,"integrity":"sha512-gKJ+qNgCRt/P1FNBAoRpW354FlhGmf2gDHMp9rIM5YiaQXlji6HaSvKcXWunmMQ4g+JkLq0iAKsf7hURQJVaMA==","mode":420,"size":113},"dist/assets/services/vendor/squoosh/avif/avif_node_enc.d.ts":{"checkedAt":1708389320300,"integrity":"sha512-BdyOLkcUgoVH4w24mm0BchAsbWIv9SMbIVJ09s9ZbqFd85GbKjebommrm2/FCMMRSlSblcrKk0hC/fuMpU1WGg==","mode":420,"size":65},"dist/assets/services/vendor/squoosh/avif/avif_node_enc.wasm.d.ts":{"checkedAt":1708389320300,"integrity":"sha512-gKJ+qNgCRt/P1FNBAoRpW354FlhGmf2gDHMp9rIM5YiaQXlji6HaSvKcXWunmMQ4g+JkLq0iAKsf7hURQJVaMA==","mode":420,"size":113},"dist/cli/add/babel.d.ts":{"checkedAt":1708389320300,"integrity":"sha512-5UEnSYkN6faWDRyKoC7jjPMs0z66RLmnWjpAf4ZaV21f2dGP/p2McYT9VsZLFZv4dvAV8QeKNQLM4nLwkxQgSw==","mode":420,"size":6952},"dist/jsx/babel.d.ts":{"checkedAt":1708389320300,"integrity":"sha512-eAF+ou+NOVVR3/pqGcPCzABBVBjfQc/98QwZ0qf4cJJTUx2A+8pL6NN7Kh0K9pROI1QdxNupaXDAg3iXkLt9CA==","mode":420,"size":93},"dist/runtime/client/dev-toolbar/ui-library/badge.d.ts":{"checkedAt":1708389320300,"integrity":"sha512-f+7rmAyo/VTm/bGe7LoAeQl9qyTntzgXBMhBO9jfDrzuHF01tOAdtnBnUd5xzxj8jvCyUfR5eoG+0DvvrFOsmQ==","mode":420,"size":270},"dist/vite-plugin-astro-server/base.d.ts":{"checkedAt":1708389320300,"integrity":"sha512-8wpgZAPa32VXq9Skcd9DkYnMmV2CQDVhnWDsyBl0gX2qAYq5ky8IRKyEFeh87F/5HHki1HlRl2KZwoWSeLJ3dA==","mode":420,"size":260},"dist/assets/utils/vendor/image-size/types/bmp.d.ts":{"checkedAt":1708389320300,"integrity":"sha512-GsZdyr3iub0mk2bKzbHhdXTjOn/isf6EAVKrHrgU3D6d59YLIIOTH+VvkrWGkSEKUo9RJPZti8/oIm4OllGZIA==","mode":420,"size":80},"dist/core/client-directive/build.d.ts":{"checkedAt":1708389320300,"integrity":"sha512-o1icfuweiJuwoUsrh/N2lx7NUBPq9ihtTTOZdoTzHhp0ax0qwCJ/GxrSqE76MvbJx22zaImJpkB0sdWVPS1dng==","mode":420,"size":218},"dist/core/build/buildPipeline.d.ts":{"checkedAt":1708389320300,"integrity":"sha512-D5f8MSUphu5ri5Jl804J/XksC8pequCPSoJyDSqfK2M2Lte9th9bN24wkhyJ/D+dxwFPEuvsVk9BC6yz0t3U4g==","mode":420,"size":1598},"dist/runtime/client/dev-toolbar/ui-library/button.d.ts":{"checkedAt":1708389320300,"integrity":"sha512-bPWuJzbfzFnAEN/13wJUBq9BU4ozSZdWGc1Z+BBfGiZys/5regHb45qnK6Fa2/IZyuhxvQqi5qFspngqws+69A==","mode":420,"size":288},"dist/core/middleware/callMiddleware.d.ts":{"checkedAt":1708389320301,"integrity":"sha512-yv4GXOaXv1Q/tcn03IgLOjFQsry+YMEs8b6LOyIW48XYu/wfvo3wYB8jcAABAXOtPWTgSqrhR1GS30oRg6F3wA==","mode":420,"size":1330},"dist/runtime/client/dev-toolbar/ui-library/card.d.ts":{"checkedAt":1708389320301,"integrity":"sha512-FQ2OhlxPPSf/BXuuokdGusHcfqeBER0OKGdFVBJ6uPKWPXD9pHJjunF3yCQlpy/DyVUMHPlbk2orPcihvzxESA==","mode":420,"size":230},"client.d.ts":{"checkedAt":1708389320301,"integrity":"sha512-cBkmL3jk7CSaUBeK5yKeJC8XeUzYK4olAadzGWJi10IhsbnhlKdk2gvEX48W66EQmYqsLp+JCDLf6MK9s2UXDg==","mode":420,"size":12645},"dist/assets/services/vendor/squoosh/codecs.d.ts":{"checkedAt":1708389320301,"integrity":"sha512-hYYtL0APQi4TVfzm7MyB2OAFycKf+1Rh2zi05hP07YeppI8VcjICxEnyx/lvyyq2GG8dbE1jjVzEUEACKGsS4A==","mode":420,"size":5712},"dist/core/app/common.d.ts":{"checkedAt":1708389320301,"integrity":"sha512-BDJgsNQzhgw3Q4woZDZiWIfXQhT6m4COwq159r7lPz2XtF1E+7nTwY2XlzxRYhWAd5C8TXKINLdE3PFM6Ialjw==","mode":420,"size":171},"dist/core/build/common.d.ts":{"checkedAt":1708389320301,"integrity":"sha512-S8uorsnQ2k7Pdc3qX44lCESVRgy77wQ7k2KTQTtE88sNSao2d7GXimthQMeN0aRDUrT0Pii+RBGXbAZ4eehcHw==","mode":420,"size":649},"dist/runtime/server/render/common.d.ts":{"checkedAt":1708389320301,"integrity":"sha512-ZVeMqL0AbNyFBcHYTiqGj6XVl18BI9QerVkjaxrYJq4JG37HTqNtlYMW0gnefeageAW4kw+vIbRc/ZHE33CjOw==","mode":420,"size":1491},"dist/core/compile/compile.d.ts":{"checkedAt":1708389320301,"integrity":"sha512-I/2L75CdmPlEmKZRvaI1YbU9HXXM25zcfm/nnBmtKIpueYC1dVgxLsVu9gF2UtOyVy60nS6Bj6U1TM9EWyfNxA==","mode":420,"size":638},"dist/vite-plugin-astro/compile.d.ts":{"checkedAt":1708389320301,"integrity":"sha512-LaOUGkriBl5rG3opNq2pq8+0Y4zHyWtP/Vw2qyte3iQ6YrXGyxKvmg8rovLMshL5zUav6CcaH/IDeC/A3IMFIg==","mode":420,"size":654},"dist/core/redirects/component.d.ts":{"checkedAt":1708389320301,"integrity":"sha512-wC6qTR5eT+C3J2GGXlox/ccAPw+2dhwjdc8a8sEeNXqU06GvRe13Q0BZ7OZDby7GpcdwrG8OzEg6bPTUNu4MlQ==","mode":420,"size":270},"dist/jsx/component.d.ts":{"checkedAt":1708389320301,"integrity":"sha512-bPqZit06fGg8scZfGifGK0Hh3dfW6CBV1Eu1itVd5SRQDH+O6xoRoGX9B4C+PVvwzQx51DmPEm6fpCa8CoTqdQ==","mode":420,"size":108},"dist/runtime/server/render/component.d.ts":{"checkedAt":1708389320301,"integrity":"sha512-fKF3+Pb0obWygdlhEc8gozFkUWQlgUIGA8qD8YanmcN8qaoKKQ787tQEVA+xRKvoTK1hl2VRg3/IYjUyVsBJRg==","mode":420,"size":869},"config.d.ts":{"checkedAt":1708389320301,"integrity":"sha512-tWRHbzVbIzTLEEZ5w8WS8rF3zjN+zUec3+9lo3465J1PqTiMZBxc2ifF4vi5aAdMhcY3yzhnPvH8opxJVGy8AQ==","mode":420,"size":1471},"dist/assets/endpoint/config.d.ts":{"checkedAt":1708389320302,"integrity":"sha512-pfNfqTZZeDbYdclskpOWHBqvpMfO8v1JfgDgL4A65AN9NcLvcQeEtAOst99hDXUZkEnoYapkd+bHR1By0S+bxw==","mode":420,"size":168},"dist/core/config/config.d.ts":{"checkedAt":1708389320302,"integrity":"sha512-0rzcd8nbi8clSYXFTT3h7cwRHfwUbsAx0RFQBH6ubwTcIazT/a9lg55ejuhMcOzW+g0z+aWuZVjSA2F0VMETCQ==","mode":420,"size":1426},"dist/core/logger/console.d.ts":{"checkedAt":1708389320302,"integrity":"sha512-AMn137H5KD9a4NTguNo5Wl8KRMdxdOILyW4M2AX+29pJaXE00xvEUcBvwOgHTb/Larn/3QU2tUFMxJxhSVZAaQ==","mode":420,"size":132},"dist/core/constants.d.ts":{"checkedAt":1708389320302,"integrity":"sha512-T7wq/RmHzBkpr9+S9t8SwZl/QpmYa0aEJr37MwrRBVkEAf2r0rMfcsjlZH/eXsYONcvYnyyPA/lJKVf3grZ4vA==","mode":420,"size":294},"dist/assets/consts.d.ts":{"checkedAt":1708389320302,"integrity":"sha512-YcTuOeDS4wCeANstQS4mBxXb+2zM1Dx4wcBCO4UuY52/JVPY75BeXD+DWJmBUtqRe+Vjwpr0HBeDGkMWZ7FNUA==","mode":420,"size":689},"dist/content/consts.d.ts":{"checkedAt":1708389320302,"integrity":"sha512-B8k14nOxLYOKlNBjxEcEDSEq1aDQ96wp0LnnpXD1kmUaWX+NIHcxhbB7rm1JKQVKMoGzJZtRFS3LrmJCX96YZQ==","mode":420,"size":773},"dist/runtime/server/consts.d.ts":{"checkedAt":1708389320302,"integrity":"sha512-0VKRD1Ok0yM7QgdEwrOe14TvoEOQN/pQwgX1dtcZKxbF/Rw1o3oevGCq7U3WVIf1kh56pVvDIE+HhQZJmKY7xw==","mode":420,"size":67},"dist/core/dev/container.d.ts":{"checkedAt":1708389320302,"integrity":"sha512-vEyqxwAi8H2+o34ZKLXndw6JYJsbWFa1N8SspC2DookuECGqZfl0LsNvIV37lx8aiCAL5Lh5YwhIfy5ahSjT9g==","mode":420,"size":1177},"dist/vite-plugin-markdown/content-entry-type.d.ts":{"checkedAt":1708389320302,"integrity":"sha512-/5pby9eDU6hK5SJWEAHHLvq09YnS8LGsggDwjcvlEFZR6rgEnz86dlcuCvyrQLymv6Hjr8v+3dwZHGYx0ha72w==","mode":420,"size":125},"content-types.template.d.ts":{"checkedAt":1708389320302,"integrity":"sha512-+x67tczrDubi1Izf/Qi6rqS8+D+cVGs+/yWJW7ARTaqk6PXmN3fPDT45J2ck4ZgvZ5Xb6rKZS2MK+ZOfM6mEyw==","mode":420,"size":4147},"types/content.d.ts":{"checkedAt":1708389320302,"integrity":"sha512-nbKgfDowYgKiZJXA4oTD9ne2qjtS+WOaU84Jo0PNZz/hil9cZYgQNEkKJa5JOJMXmCcs7UWy8ruNxwq+NN0q5Q==","mode":420,"size":2824},"dist/core/render/context.d.ts":{"checkedAt":1708389320302,"integrity":"sha512-tnnlSQGmuheWbxQbnzKuWw4WA/Aq1zW3MH+rzSwsNoqL7UACs99dGLi6JWECbu1943rWVRDLrMy5+AfDKrPStQ==","mode":420,"size":2116},"dist/vite-plugin-astro-server/controller.d.ts":{"checkedAt":1708389320303,"integrity":"sha512-p9712ve9WIqeNmzt3jqDsyRjPKbZPaSUWt00v48NrXrqgbEYOGPv/jhBQ7cOLskFV07qVc0eswFJBk9mKyLqdA==","mode":420,"size":1035},"dist/core/cookies/cookies.d.ts":{"checkedAt":1708389320303,"integrity":"sha512-ZM9nESubORZHvnH/nODIWovvV3+WauB5grtBzNExNrLBqJlnmXIui5B96GwPsyxLHOcmmbO8yVbrGlHp2tH4pg==","mode":420,"size":3604},"dist/core/logger/core.d.ts":{"checkedAt":1708389320303,"integrity":"sha512-KTwt3o5PpFEk5bkL6znyEuo9vIRDNdBGjIcyQTcaNSN4kKHgR6C/gof6cmCJ5ZyWvnNVAwh2Eko5Hb20iZHJOQ==","mode":420,"size":3378},"dist/core/render/core.d.ts":{"checkedAt":1708389320303,"integrity":"sha512-DDprJAU3bDmbM2rdN+lBHYvlffSGwmfXY8ad4+51q2S00uVVEYOewpez6P+3W+FgDklEZmOCwnNkkpUsi7wcyg==","mode":420,"size":440},"dist/core/create-vite.d.ts":{"checkedAt":1708389320303,"integrity":"sha512-0b74OOiQvAb9t/GM8aqvuM5UMJOv1zH/icBMgxWKbNVgMjc5rF+7X5oMvt1bWVBaKX17yL4Sa/Kqx/grL9s4Wg==","mode":420,"size":621},"dist/core/routing/manifest/create.d.ts":{"checkedAt":1708389320303,"integrity":"sha512-UHyLIPC2C4KNS1mQXASW9wnclRM+WsYbtU7IzAk9oCtSmSOKoTb/WUX0VKQDIt/SM1KnsOeHw5BRCWk2eASxzw==","mode":420,"size":594},"dist/core/app/createOutgoingHttpHeaders.d.ts":{"checkedAt":1708389320303,"integrity":"sha512-JaxxAIdk4Y18jirJl2ClaJ0A5NziTj6/VLAAJwqqowGoabqKv86dYKUSeh16EdRADnpEo7jgFEJ7ypr2kYC2dA==","mode":420,"size":532},"dist/core/build/css-asset-name.d.ts":{"checkedAt":1708389320303,"integrity":"sha512-KzbXKVyt/lmpe21mQdBR7SkWTqcsuMS20lDLDZmX2KJuL6aVn/S/Pbond4OGiXXVr/r1LFpjhYs9kLBb+8cCIg==","mode":420,"size":437},"dist/vite-plugin-astro-server/css.d.ts":{"checkedAt":1708389320303,"integrity":"sha512-hswDiLHFIyjtvnE9q32XjH4N+LL9VfRVLRQtuEyZtuUzsbR2YXBHLysphqZHwGNQ7SncddRrIVOzuzQKeUHUgg==","mode":420,"size":420},"dist/assets/utils/vendor/image-size/types/cur.d.ts":{"checkedAt":1708389320303,"integrity":"sha512-sT9aY1F+QaSYT22Dt1MIkAmFskuC5ykcJVwSlGq7ekFbPVIxN0/RsX1nkTKv3SppeSPqXo0bp977Vug0ABIApw==","mode":420,"size":80},"dist/assets/utils/vendor/image-size/types/dds.d.ts":{"checkedAt":1708389320303,"integrity":"sha512-SP8l4lzAK3N9yYdCFUm0OLazGodVQ3wGngTlPaGGsKRuvLnrJS+atgwqdHlckSCOcogJ1JRAbvVBDVMGVWm5dA==","mode":420,"size":80},"dist/core/client-directive/default.d.ts":{"checkedAt":1708389320303,"integrity":"sha512-uwQQt7b3pn+mmoVV03MpwyzXfDn3gG0Y3IuEHYv5YtMZnxyRXoGxIP+M5ddbl8xp78Kxd7CIDGUASYNhgHMQtA==","mode":420,"size":75},"dist/preferences/defaults.d.ts":{"checkedAt":1708389320304,"integrity":"sha512-81WxWK2Gg6/68kSJtyRRkqNivD7iL5lSF9kdHfmfItVEo0l71tZZtEuiBKctmaRi7z2yRnt9ELbJVvaauXvchQ==","mode":420,"size":222},"dist/assets/utils/vendor/image-size/detector.d.ts":{"checkedAt":1708389320304,"integrity":"sha512-HVRGx2t7RitAKOiT9oQ3Lj9ylZ9TzQ7ZNOYk9q7wBo8cXvktRv1BWNef+HrMnKo1sKEOL7fITA/NBt1k/x/yEw==","mode":420,"size":127},"dist/core/dev/dev.d.ts":{"checkedAt":1708389320304,"integrity":"sha512-tJaHduJacs2k1cpx7XUBe5s+4DQY2Sg61fOxuB6KDAw20wfsa/19yCTDu+weQUTXlcwLPcWRrXSKD6mvHhsNGQ==","mode":420,"size":841},"dist/vite-plugin-astro-server/devPipeline.d.ts":{"checkedAt":1708389320304,"integrity":"sha512-D2Dy0zNxqvgwR0cS0Hjs005rWwrguwD7+fqPevDDa8gc0hC7ROg459LEdpnV1OBXqNRm4N1h3Uo6/vhinGJPHQ==","mode":420,"size":975},"dist/runtime/server/render/dom.d.ts":{"checkedAt":1708389320304,"integrity":"sha512-Vyhcs8u8FkNZ4ZyZbweTeReX80dFqIarl6zePugFKbhkNUOIi04hZA/nNXlkN7GKzNNbLXnEVw55Luefa0izCQ==","mode":420,"size":272},"dist/assets/utils/emitAsset.d.ts":{"checkedAt":1708389320304,"integrity":"sha512-HNcLvLxF/SO8eUc7VLx+awWfXq8stHZ97OyLVVsycvj9Ib4PCWz6NgNNvXXwtYPV7ku6R9lKHn7rVpUzOLuHjg==","mode":420,"size":186},"dist/assets/services/vendor/squoosh/emscripten-utils.d.ts":{"checkedAt":1708389320304,"integrity":"sha512-T2B3ku1y8qDr7ZrC4xeX/LV2bsRfhdpDO738uQLzj3BCaBw9zIlFzgicnMvCgaPY9irXnRUXCah7LCN+4BLoXA==","mode":420,"size":631},"dist/runtime/server/endpoint.d.ts":{"checkedAt":1708389320304,"integrity":"sha512-+hi/7QSfFr/s/zBf3XjUtXE7Y6glvfSpTOFGZv0K8JWU4R0Z/5+UiPc3HT3PJEnmO+ejmbV0B5ADnEBAW5lTHg==","mode":420,"size":333},"dist/runtime/client/dev-toolbar/entrypoint.d.ts":{"checkedAt":1708389320304,"integrity":"sha512-TuHIj4w/TkzTTLbAAzm/nW0Db/St469J6HHMiWa4THKdi3VJKsxkE8mmZKwApXlYIjrBPEIp2oxi6+alPk94Pw==","mode":420,"size":11},"env.d.ts":{"checkedAt":1708389320304,"integrity":"sha512-QBOlQ0D0xNcPCZmcW0b0TLDoQ+DBNoDcorfherN4InthC+05zWCbuOY7Kkbg/GDBTjndtqic1hpg+IxrRlKVyw==","mode":420,"size":935},"dist/core/render/environment.d.ts":{"checkedAt":1708389320304,"integrity":"sha512-aukK1eULnVAKQ48/HUvS35vcpYvGueBvjwm+uUltyNwKCarTuzZ39zPSfM/tpZRzxf36zAM8Wn55DoplwFfr+A==","mode":420,"size":1215},"dist/content/error-map.d.ts":{"checkedAt":1708389320304,"integrity":"sha512-NjsDB4xRsr0OjrTjYh7LtCc+3G3HilEMM1fmof5vuCzKV49e8IHhI38MuQbSNpB9r4M5Yck1Guh/9mN1rkPM+w==","mode":420,"size":84},"dist/events/error.d.ts":{"checkedAt":1708389320305,"integrity":"sha512-/RuR7GqChVw94aSrZ4PCiscaxDOqcueU+BColwbO1yze5F7XCI8c0Mi3g/TUpK334wuwdsOrnJt3KnTtwEziuA==","mode":420,"size":797},"dist/vite-plugin-astro-server/error.d.ts":{"checkedAt":1708389320305,"integrity":"sha512-sVks1mCpXmzhQtA7GzBUbbEh5vvpjDEFIyoST30orE65wdjjbA1E8RxjWQqyfVmYFBdRFW8TBrMKsaTg4QKCFA==","mode":420,"size":396},"dist/core/errors/errors-data.d.ts":{"checkedAt":1708389320305,"integrity":"sha512-o0g67t9yPMl+Et06NAR2kreQI8nipcHWUtXdEVMaL7UEbjHxM5ZlXgoDh5p2KYfV7RfVwVRJZ0RtkiSn4vV/Jg==","mode":420,"size":44389},"dist/core/errors/errors.d.ts":{"checkedAt":1708389320305,"integrity":"sha512-XCoc1/uXJh+uDc2hePSZ+m4E9TcfP8ly88kCj5GZcgQ7QKHmOb3M28pkDXBFJ+WUZlU5I0eRfPJSogrzy2EC4Q==","mode":420,"size":3194},"dist/runtime/server/escape.d.ts":{"checkedAt":1708389320305,"integrity":"sha512-ReH8CUKM6Hy+GADkONUMZBwLap8RSbgd8D9iFo+mXluHZTfWTwV7m0tmR/mzzgG9OI7R5pN58+vIedm4u6jlAQ==","mode":420,"size":1002},"dist/vite-plugin-html/transform/escape.d.ts":{"checkedAt":1708389320305,"integrity":"sha512-kb0GzCu9aIZ3AspvcMGIPHFU3/fxtFCz25WVm0wkYPNIRjfITVC9inlGy5OnEudxLAE+J5n7nIiQssBvU2anfg==","mode":420,"size":216},"dist/assets/utils/etag.d.ts":{"checkedAt":1708389320305,"integrity":"sha512-RehwYuz5dwSFfXTOqLYGOxPkORL0xCMEH9WZVEcHBeH7O/jz9AAWC/ZLvL49sc7PMIGh6IIwnEEUzcSgenGQtQ==","mode":420,"size":499},"dist/transitions/events.d.ts":{"checkedAt":1708389320305,"integrity":"sha512-Xhv72ZkNptOpEmxhvm3TZXVeqkDMpTqk0IUOYw0gozU7EM/AvgDD52PtwD+VcPlaMtx5kfybsv9bkJ1oQdQrSQ==","mode":420,"size":2670},"dist/assets/services/vendor/squoosh/utils/execOnce.d.ts":{"checkedAt":1708389320305,"integrity":"sha512-RGjaSkSXPxRGlaj+itxTKs2KyZmYmyhEiSwlaOpciurcMcxFKbTgGL5g8HOEqZ5bCL54WfaR5hAiwmXsCXteuA==","mode":420,"size":89},"dist/runtime/server/render/astro/factory.d.ts":{"checkedAt":1708389320306,"integrity":"sha512-sdDvGq+sC806N0uxNLDacbW1DDQs89lsoXWatazLqW/KIF3gGMHvcAYrrHLLui7Uow7UR01ZX6JtBW9lDUTQew==","mode":420,"size":712},"dist/cli/flags.d.ts":{"checkedAt":1708389320306,"integrity":"sha512-w1abVGAVEgkVlGEz7k8tKC5HaUW6kQjRF7ezQNUZvTqs98R8lR2WMPJSpXJ6WQwdvsal18G4iEoRMM7HkLcnIw==","mode":420,"size":519},"dist/assets/build/generate.d.ts":{"checkedAt":1708389320306,"integrity":"sha512-DESOqu6qNDK+AFhPIcZB9t1eL4ZXXJRGzz2ySeIZhHUWeuJNV3nkQYkKXzxvU2TGJLJ+LTqWDjEXVztejkRWng==","mode":420,"size":1028},"dist/core/build/generate.d.ts":{"checkedAt":1708389320306,"integrity":"sha512-Ge4XakUQpnZARMACIuQnP/jbf+pIcWyPng16AEl7rMW5wZ6chHTGSGKMpb00eytR6LeYEKwZOfkLI66xjSi+Ig==","mode":420,"size":575},"dist/core/routing/manifest/generator.d.ts":{"checkedAt":1708389320306,"integrity":"sha512-C9GRQ8ZLnZPBz4+oNS0MVw6sJo9kdDZqMv3aopeSLuNmJy7QoIEj8VaeR3pIiW6IiQQLYsqKRSCR4KMPZii3JQ==","mode":420,"size":235},"dist/assets/endpoint/generic.d.ts":{"checkedAt":1708389320306,"integrity":"sha512-zPfVDR7mzo6clcr9f1CSHVTWUWGugS0qdoS/6KEgRRtcLGfZqC74fQwatKrJir59HFRMUj2vbE5++54CX3Iyqg==","mode":420,"size":184},"dist/assets/utils/vendor/image-size/types/gif.d.ts":{"checkedAt":1708389320306,"integrity":"sha512-EyUmgf3mLcOvNrVCtIHEm3Mau27HtxHxgX0jTklTEUpwsPbJCe9105N9PU1AJBMFLB0wzqTmRAmlTpGZ1XmzAA==","mode":420,"size":80},"dist/core/build/graph.d.ts":{"checkedAt":1708389320306,"integrity":"sha512-XYHXJW7Hpcddl1u9Zjf55mjQryI7Icxoj/NxQTImmv/KkM4kq/dAK+HOZBLtR5m7fGYddz+gEf6ARteRMW7J5A==","mode":420,"size":546},"dist/runtime/server/render/astro/head-and-content.d.ts":{"checkedAt":1708389320306,"integrity":"sha512-rCGrHoZCSjqwYirXOim8SYLMyRUA5isZlDwBrjhukeFMdYJSHXaEUEhkrPgmEIrUugZET5VJinrTTc7eA5tjQg==","mode":420,"size":429},"dist/runtime/server/render/head.d.ts":{"checkedAt":1708389320306,"integrity":"sha512-H5r6J/xBLauBT+ynnSdrqTucVmNE0lyC/FTrpAF36vA8LS50JHi0/xWm6byWEmCx4/laPQ5tlH7kPNNneeiYhQ==","mode":420,"size":374},"dist/assets/utils/vendor/image-size/types/heif.d.ts":{"checkedAt":1708389320307,"integrity":"sha512-M65Ea9BSawgckeHHxkpDHzEenBDa3K9PIBJpVLybyxOxKhxjOh/voB3hlNNB9+Zcq9z9T7koOHoeBXLltGyuYQ==","mode":420,"size":81},"dist/core/redirects/helpers.d.ts":{"checkedAt":1708389320307,"integrity":"sha512-NkuhKQpGmjbhLXNCqhP7doYq98rhyJKXgvJRaxhBWVjwkr8CndNLcNyjdsxE5g0lnjf5Vlu9oeUcuRjllUfrKQ==","mode":420,"size":506},"dist/runtime/client/dev-toolbar/apps/utils/highlight.d.ts":{"checkedAt":1708389320307,"integrity":"sha512-qT8Q90M4TpswGZ7rCCkkaWyjtWjfoOq4eTIIFLn93KvUtMeOncDKgo+cQ1tiK8VcGQ1P+qLVDdfXFBQaCAskDw==","mode":420,"size":593},"dist/runtime/client/dev-toolbar/ui-library/highlight.d.ts":{"checkedAt":1708389320307,"integrity":"sha512-UvHL5qImzBqszU+ViijnP3QeQ0C+8IOqTgqwc1DP9+QlNXssQIYjkz8c6hLvv9Ir4RX0xLYv4giOM8H1s39srw==","mode":420,"size":219},"dist/runtime/client/hmr.d.ts":{"checkedAt":1708389320307,"integrity":"sha512-TuHIj4w/TkzTTLbAAzm/nW0Db/St469J6HHMiWa4THKdi3VJKsxkE8mmZKwApXlYIjrBPEIp2oxi6+alPk94Pw==","mode":420,"size":11},"dist/vite-plugin-astro/hmr.d.ts":{"checkedAt":1708389320307,"integrity":"sha512-furgLgFXoF0Gj0Wpy+I1JbH6UL/Ly4GO3eHzqgjiuwyaGSr2Xo3CXHTGzUNrituNXbxj8uC/UQR2jes3HBsUug==","mode":420,"size":666},"dist/runtime/server/hydration.d.ts":{"checkedAt":1708389320307,"integrity":"sha512-Ggl23l1xD70AMBzxTRQLwfqDmV/UOJZ6hV8mN1V5z0Qb+FnqBXk0s3+HUem2Zw2P75RvbNKDiL5+Krs2/JOXBg==","mode":420,"size":1052},"dist/virtual-modules/i18n.d.ts":{"checkedAt":1708389320307,"integrity":"sha512-5rUIijXkvxIVeR9YeL0Svc8RyWrbGMP+hSwrcYAOG18IURZmH5bfA1S2B1WZ2XDNBtITdA9QpJpJ/eDFImdEAA==","mode":420,"size":4438},"dist/assets/utils/vendor/image-size/types/icns.d.ts":{"checkedAt":1708389320307,"integrity":"sha512-5CQW/ActvRWtw2KypqTKc0gfEsKyPmWAC6M3c+/0HnxtRmi1nYJHwNe+evQ6/RwNKJPKTiP/fIRhpG/wsUL5FQ==","mode":420,"size":81},"dist/assets/utils/vendor/image-size/types/ico.d.ts":{"checkedAt":1708389320308,"integrity":"sha512-/qrIpQTVHffBa9stHWEr+/bBiaU33fczS0+r2qrVscqdf6aPioirZ/PE1mmfEJ4eN2tfhZ8mNdotTICJaCaMiA==","mode":420,"size":80},"dist/runtime/client/dev-toolbar/ui-library/icon.d.ts":{"checkedAt":1708389320308,"integrity":"sha512-ExgP+o+AeXVo3Ta55oC5bg/3E2Xnn5suobF0G1h2AenlmlqwxhbNXY5prGZYdrlOv8/p4EHG+kDLfc3xcxUAug==","mode":420,"size":324},"dist/runtime/client/dev-toolbar/apps/utils/icons.d.ts":{"checkedAt":1708389320308,"integrity":"sha512-rAwItA71sb8+hbURDC3oEjqYM0F2ODB/3kyD0spFt+8KcnfH4qOHjrOq2FQliHjWPKVFOE925rKJf9vVky1qBA==","mode":420,"size":181},"dist/runtime/client/dev-toolbar/ui-library/icons.d.ts":{"checkedAt":1708389320308,"integrity":"sha512-kqu6E+AwqQjmG+rJyA5HYNelNnTZQRfo2hRoPyySslkkC/6i6Lb33SAR42Vi9Y01UIjGUlQ3c00wKBepRs4NwQ==","mode":420,"size":30752},"dist/runtime/client/idle.d.ts":{"checkedAt":1708389320308,"integrity":"sha512-EClZb8gCWlKbBI7p7x2N6Gd4iqAeS967VMtC+T6QYcLZYtOYZuBMjjklHv9f1f+jg6Vy8yZAk6nsGRZjvKcl2A==","mode":420,"size":138},"dist/runtime/client/idle.prebuilt.d.ts":{"checkedAt":1708389320308,"integrity":"sha512-OGspNZcCZzeCJV/Ape5zQW5XuWO9W3g3Df4JPH/04Z47laUmHjWqZBW5ibM8Z9NklxXT/xh8VLjMVhL/Yzd5+A==","mode":420,"size":463},"dist/assets/services/vendor/squoosh/image_data.d.ts":{"checkedAt":1708389320308,"integrity":"sha512-wcOveHjJ9gp7xPpgln/xmYxXd4AYDYamBNvTMRFNLE5f5JnfWONreH9xHYOnX1G7gND4HVIMDyj27GRuQl2+HA==","mode":420,"size":314},"dist/assets/services/vendor/squoosh/image-pool.d.ts":{"checkedAt":1708389320308,"integrity":"sha512-6TeSfACUoNqEqSoq7YJNUEIlLRgGDCMZUDPovqPBLYoxX+4meept9+WiqqxnvGOCAqRfPerfElWT3ngmP5WdGw==","mode":420,"size":257},"dist/assets/services/vendor/squoosh/image.d.ts":{"checkedAt":1708389320308,"integrity":"sha512-/3pQtAzFWXHv5rO620/qbtpTker/Rrnro/eH/ImLjFgl60E+b9vFdAY9zLqce7PjJw2q0ObykPTItSuNLY4jnw==","mode":420,"size":497},"dist/assets/utils/imageKind.d.ts":{"checkedAt":1708389320308,"integrity":"sha512-Gq+t5kZz+aW0/59XRnJU8q/FfzGXIa4JOkiY5Cyzn7W26x0mN+gEXGEoWkhL0n0oHsseHi81lKqiH2KAkBdLrg==","mode":420,"size":228},"dist/vite-plugin-markdown/images.d.ts":{"checkedAt":1708389320308,"integrity":"sha512-9Yta6N1YNxHI6+ErbNznrxbcSwLpMFehKKbAQXodSJ+eFOhac+ITtot5k5+pcX6Ii+iUWcIHCtdi7Ggs+uMuIg==","mode":420,"size":203},"dist/assets/services/vendor/squoosh/impl.d.ts":{"checkedAt":1708389320309,"integrity":"sha512-dWq/1ZlXQOQdfjqzdYe+omEHHdDg97YQpTPdAUkQNafa02gdnlPqGLFGsthhlJ7ux8jFsDuNu9wWZiSYy4W9qQ==","mode":420,"size":868},"dist/cli/add/imports.d.ts":{"checkedAt":1708389320309,"integrity":"sha512-dtE0pWRQzuNe1rMuVYmXJrOdm+glXujdkekel08QIT1TkZI0kN7ikMnKAeqJMNjiN2CoBC9dYPTVgIuZsutt3g==","mode":420,"size":130},"dist/assets/index.d.ts":{"checkedAt":1708389320309,"integrity":"sha512-/ixEf7+ZImF/UOlrqYb2JVN9ebeSnCrkfwD7xCxqgqElWwRCkhqbqe8iIb9tOW3Z4G0K9tS/MudLSiAQruQp+A==","mode":420,"size":212},"dist/assets/utils/index.d.ts":{"checkedAt":1708389320309,"integrity":"sha512-keShG76YWZ48Vv6uai/r4shgCBzaoSESpVec+5Fv2pwL3Mb9yIRJUKZDubbiCQNgEgMt+4TBiJS/Fy1yFPvevg==","mode":420,"size":433},"dist/assets/utils/vendor/image-size/types/index.d.ts":{"checkedAt":1708389320310,"integrity":"sha512-93T19UfpGV+DcVtsh14c2647w7ZFMddIvOxFW3ljqQ/j84dhhyjuQnMdgIonOY1pNaYqq26DKlpzMedTJsze9g==","mode":420,"size":445},"dist/cli/add/index.d.ts":{"checkedAt":1708389320310,"integrity":"sha512-dbcCODEO51HCy4j02hww8WxO8dbx8zHfKiOo6j0Fq4lNwACRGh4aEZT5pOamHAMDh5ChL6vfrWaF9CPgxdTeKA==","mode":420,"size":446},"dist/cli/build/index.d.ts":{"checkedAt":1708389320310,"integrity":"sha512-OFKiemjJBb01mYOuyHRr8ARJIzpGF4as1SnR63g9lphCWoarp2JoednefFnuPILl90GUaj7nfq/QuHULqzcDoQ==","mode":420,"size":176},"dist/cli/check/index.d.ts":{"checkedAt":1708389320310,"integrity":"sha512-Vso0x65TmrB89j9pZ0zp82H8VD39FMXLTz2cPxyjsJ6hmpWecT0AY4+msep3/Smlqh9seCYxfjMBxh3bqZfPrg==","mode":420,"size":121},"dist/cli/db/index.d.ts":{"checkedAt":1708389320310,"integrity":"sha512-WTG65K0EycCdWFfuyRfCOvCVXHUSAWSuhQbOYW+b8fNZpYGQjHAYgNKTWnlrqCzStMi4jpnoNVKGYNMlFpppFQ==","mode":420,"size":128},"dist/cli/dev/index.d.ts":{"checkedAt":1708389320310,"integrity":"sha512-CZBwjv+gHxqePWbaJhnJPnoUKaxv3ZOelFjI8FjvbtCDMSsnsVyxK+WdTNoEg9Jwez6sLY+d7s62LsVYR054lA==","mode":420,"size":219},"dist/cli/docs/index.d.ts":{"checkedAt":1708389320310,"integrity":"sha512-0rpgxOXG1m5d4/EDi77hTkUbjlrGmK6eOmvhuvVNcW8WCkXtlTjJ5ok9ZsvMabavpdtmrK9HmaIucABjQooGNg==","mode":420,"size":221},"dist/cli/index.d.ts":{"checkedAt":1708389320310,"integrity":"sha512-bqNF09dF6JZz/oPcVY4LZFYpbKHNL/yE/kZcdoAXjAh9MQ0SxO+EkzeFB1EZHCGEZ0KVb5X1IzezMApmp3fxpQ==","mode":420,"size":90},"dist/cli/info/index.d.ts":{"checkedAt":1708389320310,"integrity":"sha512-SxZ3oRDahebsVZUnVSJxq+Lza9cXv7B4s26GJ8RnJa1x8ExkQf06aCVCcvE5QJsOmJqwAnewrl+6ZmXN4GI9+w==","mode":420,"size":405},"dist/cli/preferences/index.d.ts":{"checkedAt":1708389320310,"integrity":"sha512-vkeD2iB41UBZ1Vhijn17x4ezwgy4IUZNF22aI7PKdRDT+WY7kOWpf1z2br0WrWAGI+3yoJD0mg01B4tTD1/sCw==","mode":420,"size":435},"dist/cli/preview/index.d.ts":{"checkedAt":1708389320310,"integrity":"sha512-WJyr0XHgwMjM92YunKrXGKr9aPbTyS5WKDdA9yMmhbZ0rFnb6kjZWNSqzsTotQsd6c2u016qUqZqeTy+S8e7Fg==","mode":420,"size":235},"dist/cli/sync/index.d.ts":{"checkedAt":1708389320310,"integrity":"sha512-193bgH1pkEyOvu8sBY9Meod6aJ/3jzIL1ZrqjXcG5MbDdSmiM6FviUyUw+nj7zsRqF3KxjqngEi42GR35utFvw==","mode":420,"size":215},"dist/cli/telemetry/index.d.ts":{"checkedAt":1708389320310,"integrity":"sha512-tSZWloqbna9FXbMi3HeYaKmknNAIWIcCo+fDlzoFYarypFvt0uddttMo/tjk1Yoyj4HteyBVTLbYOhKeaPISiw==","mode":420,"size":254},"dist/config/index.d.ts":{"checkedAt":1708389320311,"integrity":"sha512-Flc9G4fTPBf/28R2MToWAdgpn+bezbTCHlXjiADvxGfMgS/mdgKW6evldGFi+a/3x5bXmgsHooYxVjy9Mu/tHQ==","mode":420,"size":352},"dist/content/index.d.ts":{"checkedAt":1708389320311,"integrity":"sha512-76RbSNhzfo1VdyWLZdhRGKSCYFld1wf/dZZkXjWNUmZCNxGhUC4TkruOX8BRrjYXQvNhyeUeZesp7zInYGUFGw==","mode":420,"size":587},"dist/core/app/index.d.ts":{"checkedAt":1708389320311,"integrity":"sha512-QsIOk29ruP8gOUX00g9dfIaw+5+mpWzVEkj78Dr7i+4/nkDLtj3ZHebbtxLTeBCOdrac7lVQ0A0yvnDLlrNI/w==","mode":420,"size":2884},"dist/core/build/index.d.ts":{"checkedAt":1708389320311,"integrity":"sha512-n/g1bLM05P2FhWWuvr7qVWrdAPdcYOgCysNvuihdVZofSZxhQvjUgsaPfaWH+quZpuz+H6CBz5zqUxk1SOWnQA==","mode":420,"size":469},"dist/core/build/plugins/index.d.ts":{"checkedAt":1708389320311,"integrity":"sha512-tF1E9QkaKUMduasdcl8rv8X7eP7ocrKQTfzdEnKKBSSD2jQU0BtupRf7CYKE5Ym+APMNxITGLg6oCpdyepb6hg==","mode":420,"size":174},"dist/core/client-directive/index.d.ts":{"checkedAt":1708389320311,"integrity":"sha512-zS0oNzWFqDXWWBCYXVE+h0FHru/gIGqS6oSiSVic4geZAEasMlI+XGboEFdkyHstipHv5RH1wrluNjQ8OMyogA==","mode":420,"size":120},"dist/core/compile/index.d.ts":{"checkedAt":1708389320311,"integrity":"sha512-Pci5XKr3cgQq+2DNW22arPoWFfvu/LvFmdZ/6dXDbYcud07i9CjxRZbtAn4A0wTHXzlui9mugEIJ31aJpZVtqw==","mode":420,"size":155},"dist/core/config/index.d.ts":{"checkedAt":1708389320311,"integrity":"sha512-P5Gle5WjwNcDzExDEoYxNMSO/BqPbZ7+4RngcGbeNhJfaDGJF0ZrHypIzGIvWNgQmyUIQFePYok+sGWSCyuX5g==","mode":420,"size":356},"dist/core/cookies/index.d.ts":{"checkedAt":1708389320311,"integrity":"sha512-3+WFwApYAn44+ePFD85ne5Zd+wPr76tcRm3rGV6xuCiUsQdYmXACJl8v0VQRDH1b122Jnwd5lDB3rrjB28qWVQ==","mode":420,"size":232},"dist/core/dev/index.d.ts":{"checkedAt":1708389320311,"integrity":"sha512-ffDjODlg22P3Y9rGQd+/NSgMNS8fIJyfDKsH7hUQCbSc+k6sK7JxGl7GlHDGj3pcz4cacLZclBFQjILAPje8EA==","mode":420,"size":170},"dist/core/endpoint/index.d.ts":{"checkedAt":1708389320311,"integrity":"sha512-TWNLrz485Gf1LrF2ZBBIpD4AkU/JCtei5V6NtMjGBHIGg3TxBwtBM307y3W+idE9CUu3Zd18E7a6UgCGTy6sHA==","mode":420,"size":987},"dist/core/errors/dev/index.d.ts":{"checkedAt":1708389320311,"integrity":"sha512-fts7UeL2AB+rH/wWRESE1depURKSYa8ZJZsaVLjVMDk8kmECXwHK0f6AI/zikuwy39kjSnsiJeSUzSNSPYRpSQ==","mode":420,"size":121},"dist/core/errors/index.d.ts":{"checkedAt":1708389320311,"integrity":"sha512-+tyC0Iu13rL/eFGDQCPpfGeJ/QCD+SaXKwR2+1Iwy5pSFg7Tn53VPqyrWl7XWXKpPY40MvViuW29Of7K1rjugQ==","mode":420,"size":350},"dist/core/fs/index.d.ts":{"checkedAt":1708389320311,"integrity":"sha512-2KjffYCJsi9OsNV2oDMMWm/2CZ8KsUXKs6s7JkofQ6b83OTtBo3fFfZ/GzOY6aKoDVHS2Z4oljlrQqaj4hLn7w==","mode":420,"size":235},"dist/core/index.d.ts":{"checkedAt":1708389320311,"integrity":"sha512-hfyB/tC702EBraQcwCkQ0rZhckqKHaWnuTguaZs9MRVzi5C7pcuSbwizInha+zRHxRT+u0BkW7nheb+pd/mY8A==","mode":420,"size":875},"dist/core/middleware/index.d.ts":{"checkedAt":1708389320312,"integrity":"sha512-JcvgwjDUDbM9onmw1cc9nMOU/z9Bg5YAJMrygVfkp0FFHBjGyItXy4Olxh6lPJknfH6+HUupbaMWdv0qQs7ybA==","mode":420,"size":1294},"dist/core/module-loader/index.d.ts":{"checkedAt":1708389320312,"integrity":"sha512-d8zyFRXF/D1tNcFdtpbAj8QGvd+86O+0XOswbqEjwlUegY9/a2Lvc9yWCP+v5+ftzLzhIwX2wPOJP1LXCr7lgQ==","mode":420,"size":177},"dist/core/preview/index.d.ts":{"checkedAt":1708389320312,"integrity":"sha512-hw6unEjSj2s7EgI5iMwaPB8YFPaXvumSgQkIi2mW2tRD4uOirU/uopNpzLVoX1XVv9KKM7e79HnCNLC4UusSpg==","mode":420,"size":421},"dist/core/redirects/index.d.ts":{"checkedAt":1708389320312,"integrity":"sha512-IhNAjMECfA8m41BxU/vbyCQdMZ/uxRmMzkrwaYOJB3t+7isirH2k81ZjQbga6XHcC2PUpOD/26SKm3qOYzmniw==","mode":420,"size":243},"dist/core/render/index.d.ts":{"checkedAt":1708389320312,"integrity":"sha512-eflP1iyLiDM6MzgWLhx3upQajmtQc36aVOokH5w+bCyUFEvJ8Vaiqd+LIrrU/7k2RLwKmXcMn6OgIaaajgULZQ==","mode":420,"size":991},"dist/core/routing/index.d.ts":{"checkedAt":1708389320312,"integrity":"sha512-8jYiwEe8nMxOQrWywoHHxYEbGpPZvsVBAdL3g+Do+z664Y9IaNWN7xCdjz81gRO0EDdWT7Shex+y6+CQR8PDEw==","mode":420,"size":338},"dist/core/sync/index.d.ts":{"checkedAt":1708389320312,"integrity":"sha512-QPs3UG52wvGNiS10cXnzgY+QUmursrpUnKZxLU+wJUk1GQO3aP/AP3kLyt/UEcRt+jQ5aUGxp4YXjKYFxFC5oQ==","mode":420,"size":605},"dist/events/index.d.ts":{"checkedAt":1708389320312,"integrity":"sha512-T3bUWXGXAz2rVu0wSJBnsrKXZFcxiJ3flGSKwN5nfMMsfd4NyRgA1UUBLGxDRBJS/TKwNX3uq1GT7W5nFVEPnw==","mode":420,"size":159},"dist/i18n/index.d.ts":{"checkedAt":1708389320312,"integrity":"sha512-z3BrYOczEpeiucCQEOsmu3dtDitfLKtGBAAzjEgkiCFrPyuAzpxbRdlEvr3KbLfBEffedRlLRImH0CYlA8F4lw==","mode":420,"size":2771},"dist/integrations/index.d.ts":{"checkedAt":1708389320312,"integrity":"sha512-kfaNkkdczMJ76RQ7kfFAusRqltA+Cz4viEDNqw544kMoaxdfcrRB0KxcB2vQVT8ru+kUQWeYjyMMXGkM/cC1TA==","mode":420,"size":2447},"dist/jsx-runtime/index.d.ts":{"checkedAt":1708389320312,"integrity":"sha512-S5svqkz4YhkrHpghYp6mosXRfw9eHNmHmH0EIPpSIb1MDnldU7n23qtrxwqFVCBhHT+vHPSf7Ee0MoZK/5Tfbg==","mode":420,"size":594},"dist/jsx/index.d.ts":{"checkedAt":1708389320312,"integrity":"sha512-agLtM9a5B1J2AizuzjoB29MNbxWs8iGB5EOaM3T5t2j5MvhinhWp6XPH1ooOMZkJaSnChem/WLsQL0WqEofiGw==","mode":420,"size":111},"dist/preferences/index.d.ts":{"checkedAt":1708389320312,"integrity":"sha512-hjCeWV6tKOGZDwGgX3HlQB2DKx2LJw9es+j+yr95hguAIlIsyOAherBQkgxHHd/Shu6atsW8V1iFgCe8HMhgHQ==","mode":420,"size":1513},"dist/prefetch/index.d.ts":{"checkedAt":1708389320312,"integrity":"sha512-TqPYulN6w78yEZHIFxqFfj904KKMCFF4/1ktgZoCdW6ErHU8Fd2dXoP5WPOKJfuaXFE149cIhhA/FQ8V08aAqA==","mode":420,"size":1247},"dist/runtime/client/dev-toolbar/apps/audit/index.d.ts":{"checkedAt":1708389320314,"integrity":"sha512-xjGN2fj+quvHo40F++P0u3mT4Ybrc1yrzbqttaInb2Slwni91QwDhD03ztY3pIaANzyeLr/k4N8pJFusHXwSjQ==","mode":420,"size":1094},"dist/runtime/client/dev-toolbar/ui-library/index.d.ts":{"checkedAt":1708389320314,"integrity":"sha512-efIzFhYZAjaT3wkvfBoDJKdPEPrS3NRrgVit/KhaP03wmFVmBigiFBkROCrfDfnlvI3d+GtM0rXSdvcoANoP3w==","mode":420,"size":382},"dist/runtime/compiler/index.d.ts":{"checkedAt":1708389320314,"integrity":"sha512-mIeWPu8ZRRkT5brCY653ESMHE2854CTUHqoUJrLgKAha4D6wdNoNxRL/CNTLHTJLowNPYseIP2T9WpNLpinz6w==","mode":420,"size":278},"dist/runtime/server/index.d.ts":{"checkedAt":1708389320314,"integrity":"sha512-WgdIDEWQf7XyoJKSMt5rjsCnKM8iymI6SynKKhmz6J1eFlQTYQotbZ8XVZ3lBoJIdzYuSY67xj8lA7JTcrDWBA==","mode":420,"size":1174},"dist/runtime/server/render/astro/index.d.ts":{"checkedAt":1708389320314,"integrity":"sha512-YfZEEoebsNGj/zOyQ967h7M/YZ5ZJXScsC6yh3AF/SPiGmOp2nJgH9Gim0fMgksMgeFUPX8SmgBOkXu8ZL43MQ==","mode":420,"size":493},"dist/runtime/server/render/index.d.ts":{"checkedAt":1708389320314,"integrity":"sha512-OKGybqohARqE0hjItBlAvcd+Ncz7q4ksVJm8BE+yZyFcCAybombAplBLhJgFjzmujDyPVy3KgDga8YMvnSBMtQ==","mode":420,"size":768},"dist/transitions/index.d.ts":{"checkedAt":1708389320314,"integrity":"sha512-T70CBT5irVmgwZIA6H0UyYJLawwD2sUhHmjKVr7UMVXmyQkWIqa0zlnE3AlYOspwDoXJok6/XMQHGctSHqZ8QQ==","mode":420,"size":380},"dist/vite-plugin-astro-postprocess/index.d.ts":{"checkedAt":1708389320315,"integrity":"sha512-4HWamqalrNeCPpP6XOPwhxNyzjVcrLSOZe+z4zcEhw1eyF87ci/NtIXCZpBfnfApcIj3Naf5q1PxanFKpnd3Fg==","mode":420,"size":77},"dist/vite-plugin-astro-server/index.d.ts":{"checkedAt":1708389320315,"integrity":"sha512-O8Ie5xI9/KqdY8vxvz2Gnm6aKxFpXFfqyUBWFkk9kxRGfy38UnzfY3FTfSdyuwZEueWFcFw5Fup9GS1iLVlUeA==","mode":420,"size":431},"dist/vite-plugin-astro/index.d.ts":{"checkedAt":1708389320315,"integrity":"sha512-LnXRbIYrcsCWOhznvE7g2fWToZZ8SnjK1GBo/eQJySpuMj800YHSwMXa2J0OZa8NQKYWg5EzexU7UzvBZx0Dtw==","mode":420,"size":515},"dist/vite-plugin-config-alias/index.d.ts":{"checkedAt":1708389320315,"integrity":"sha512-SI7s8qq0saLD+MO8BLGxaWkZqXbOxd0kyVuTTMkcY9bDLnnF9Y742XwtdekqNkbydUQQGDgHeSBuVUW9dVaXIw==","mode":420,"size":309},"dist/vite-plugin-env/index.d.ts":{"checkedAt":1708389320315,"integrity":"sha512-AMqV3WnAFRnHZhvnrZaVBpzs8Vh1cJlhsH4B0HAoYOURqdIzWYHUIyzrg0WsGJO0ZFsx4u/xHuhH3dspzAnbNw==","mode":420,"size":247},"dist/vite-plugin-fileurl/index.d.ts":{"checkedAt":1708389320315,"integrity":"sha512-dT1Fpv57GWNSvPPafMC0RlC2r/ljMPshP22FoOnONxLJicSXo3FPDdab4tClNM17lsWZ8Z3Z00DeTfwqESn6LQ==","mode":420,"size":113},"dist/vite-plugin-head/index.d.ts":{"checkedAt":1708389320315,"integrity":"sha512-Wipp2U4Oz2QLze9AvdeimXr56RKM2s6U21JePaWAkR4ERfmy3H39pBpMmJVPDpT3XxJXTMXrEaeUtUz+Ob0EfQ==","mode":420,"size":317},"dist/vite-plugin-html/index.d.ts":{"checkedAt":1708389320315,"integrity":"sha512-6Vzr1ZVye/sL6Hbkv7inlCCFybOmhck8vo9p9Fb9/JIvn5eC+Kb/WSD9K0dNc/cdtAdR19xRhzjQ5ha0fz2J2A==","mode":420,"size":230},"dist/vite-plugin-html/transform/index.d.ts":{"checkedAt":1708389320315,"integrity":"sha512-iEYIIFKrArblyeMuo2EO33PltJmKCybudIczlHvoHi544XAT4i1WuDuEjmXOW6Cs86Smz9D14hi4Y7u3C+dyKg==","mode":420,"size":136},"dist/vite-plugin-inject-env-ts/index.d.ts":{"checkedAt":1708389320315,"integrity":"sha512-nBkSeL/GftGlbFZJynUS9dR49z6PFhz0UkzDzxKHj3+dWRkSzkmGH6iWSrtXF3HdPGbCjKwkkC1yOOtl4xxo/g==","mode":420,"size":627},"dist/vite-plugin-integrations-container/index.d.ts":{"checkedAt":1708389320315,"integrity":"sha512-O8sFza+2CAZUe3vKFBtqvH5B30eu3N17zXPRKrwIx75uIu28pA9aYi9GU+Gwb5jN1ZRTrk31rdrqhmPBWeNbOw==","mode":420,"size":364},"dist/vite-plugin-load-fallback/index.d.ts":{"checkedAt":1708389320315,"integrity":"sha512-kTk2AoOUXiY9CLHR7pMKrBUYnFCRrO0pkvwizS5I2CKAkCnmOR5F73cTFBwYdjbVrIAycCqkypR107QzrHfcyw==","mode":420,"size":375},"dist/vite-plugin-markdown/index.d.ts":{"checkedAt":1708389320315,"integrity":"sha512-g1417TDx0xIAuC+S4aA1JXjObnvffL5ZgbYeFFKFdsabbe8qhCyxSfUO5lFYxBqSH6uXACCG5OBmc49AakVQ9A==","mode":420,"size":324},"dist/vite-plugin-mdx/index.d.ts":{"checkedAt":1708389320315,"integrity":"sha512-355foSoqCi2uZBdXKy9/JpgLyQqnAREgATq+vyyCkXfiUUAeaApeCUHF/O5LJgSUYynDoh+7TtLhsIirp96JJQ==","mode":420,"size":436},"dist/vite-plugin-scanner/index.d.ts":{"checkedAt":1708389320315,"integrity":"sha512-WeNcPazio3gT+R3cs9rCHLalpInLPxNpIKK7q0ohyA9/VkUtIu+EZrM3KVXXxT4JFax6KJSYVZMSD/PMa+URhw==","mode":420,"size":363},"dist/vite-plugin-scripts/index.d.ts":{"checkedAt":1708389320316,"integrity":"sha512-HGNyNPqev5rR+XtMz4jErel3XXeWRBR4PGeWtXkHqLAGNXztoZvsgKOdF9dp9AZiM3yrFED2iTpYb1TlW1rw9w==","mode":420,"size":362},"dist/vite-plugin-ssr-manifest/index.d.ts":{"checkedAt":1708389320316,"integrity":"sha512-oonFd9i4Sb2OJqku9TM8cASfM0tQPZx5msJtQaPXZpN5zWGaYaW3aAIrjmBZKHlFA3WOEW7Z4JkLDbW8IxHqwQ==","mode":420,"size":111},"dist/vite-plugin-utils/index.d.ts":{"checkedAt":1708389320316,"integrity":"sha512-1vcKXK5Rr2/o6vP4PVKpf5fTUYwU0njSBW1UctPW7UYckU3vGy5kTsxD5NuHQiwJVqWFN4chqr0soCkl9mYGWg==","mode":420,"size":499},"index.d.ts":{"checkedAt":1708389320316,"integrity":"sha512-TYipSJguZ8Zvd3wLZARgCRuLFygkSxeIVfuAwgJXmd0fPdZ2c6lsbNLfjc6tag3DyKhXrichyPW9pxxBwZBz5g==","mode":420,"size":83},"components/index.ts":{"checkedAt":1708389320316,"integrity":"sha512-0+UfQpmCyMSxl/JiI5e0O0Uy2drxgBhrDnrl8jv8qQSzrqRomGVAzA9Zceqz8Txeh4clHBtLLY4hPvxADH67uw==","mode":420,"size":352},"dist/cli/install-package.d.ts":{"checkedAt":1708389320316,"integrity":"sha512-kBwIv0EBfAKWz4j/p6GDXGpm+YS+XJsJQyBSacqBPK8lxhRBUi0baiIEIL7E3mpM6VUCHSvgrMSayseBYu+RrQ==","mode":420,"size":286},"dist/runtime/server/render/astro/instance.d.ts":{"checkedAt":1708389320316,"integrity":"sha512-5WaCu3kFwjrVuYK8CA2f5cyf99KO+SQuPji1G/1rqa909mc7krDhjCBI9srxTnfXF69tywrMQIsgBguqDixSXA==","mode":420,"size":1122},"dist/runtime/server/render/instruction.d.ts":{"checkedAt":1708389320316,"integrity":"sha512-ye+ICWN8YCVzUXBEGFWdLaOOx66fCvOO5kQcxdTRYIMz7DNRBy7pHCnYWfFj7vBsexVf28oUHG2Y/ZQgRpAlpQ==","mode":420,"size":1251},"dist/assets/utils/vendor/image-size/types/interface.d.ts":{"checkedAt":1708389320317,"integrity":"sha512-jioGH/G+5BJXPBq2rscS4wf2Ku6gVXDR4ACKfkj4fJ3dC2Y8T4NG49EUE6oWcM4EoNMHnI7KIdkYzXbBFATXrw==","mode":420,"size":339},"dist/assets/internal.d.ts":{"checkedAt":1708389320317,"integrity":"sha512-AzY9IGg6U2h1IQxwcOwvhFe7Vhb9DgwV96v8ZqfizsxmWAgfCfqQpPqayjQj8uOwsQAi4n4tC75LOkQ5lw0mjA==","mode":420,"size":395},"dist/core/build/internal.d.ts":{"checkedAt":1708389320318,"integrity":"sha512-1c8XteqiSMdbt30mT0tRQwTBkvNPqEIbv6r12Z57467+ur+WE0fLqI4QXbPLsGG3biUQx24pAZASn8N5rqGhDA==","mode":420,"size":5528},"dist/assets/utils/vendor/image-size/types/j2c.d.ts":{"checkedAt":1708389320318,"integrity":"sha512-+DxwGqoPPTiwT2fa3Fa2sJ+E3SRYQa+aIGUTwf/J/y+TmNf5KTwrJdQCo4ptpdMHqIvZPkKbIJzoO0XUcvTnHQ==","mode":420,"size":80},"dist/assets/utils/vendor/image-size/types/jp2.d.ts":{"checkedAt":1708389320318,"integrity":"sha512-L8cyord0pyNxMapkulUd1gED7b9XM/d6194ebIDoqPcqQNZPDNfV4l7xvAnfAYWqkQeVrJSGLTGF6rTXiWtdcA==","mode":420,"size":80},"dist/assets/utils/vendor/image-size/types/jpg.d.ts":{"checkedAt":1708389320318,"integrity":"sha512-diCB4gVwCqCTFiWxGcR97Uf9vMu3PI/sazOcNdg/cNdwn9GkUHoJmq6fxMcJOIxjlKZdKOXCoqFaKOuvgalfPg==","mode":420,"size":80},"jsx-runtime.d.ts":{"checkedAt":1708389320318,"integrity":"sha512-Ypvwm2m42DlnOZUGJYyJEF6OSYtXrzvSFCs8LzISbuNCNgoh3+8ycO2gdGHrKqBa4r06sjLcJMKEE+XZy979aQ==","mode":420,"size":358},"dist/runtime/server/jsx.d.ts":{"checkedAt":1708389320318,"integrity":"sha512-fvn1y6sAXQoS+D3PucVOZ4Noaqc4XQK0KkK8nH8OsQS9LKqG3i2u4KeFMEhN9vQ32eCtcXk9302GWo9DkKS22w==","mode":420,"size":136},"dist/assets/utils/vendor/image-size/types/ktx.d.ts":{"checkedAt":1708389320318,"integrity":"sha512-hiLP9jRcJLFgrBS+PfYp+0Cinr+TwdhfJkZqZBIqumNtyWjN8XXkqTgtZBvpQjP3qoEuVKzv1Pw+myRk4YfE7w==","mode":420,"size":80},"dist/runtime/client/load.d.ts":{"checkedAt":1708389320318,"integrity":"sha512-f4ACwYcc5dTqkJEblew7F0b5rfOTkFw1AhQv7yTZdAEqavOa08Yq4BsNdh3dDjZ/4M8qvC7ZfjB2qTz3nW3RQw==","mode":420,"size":138},"dist/runtime/client/load.prebuilt.d.ts":{"checkedAt":1708389320319,"integrity":"sha512-YOEL/vtY5BQtAOfWHuOimJIzGDvyLJZwjL3P32RF/94TnQGbSIv/nsKnzKD6kSasKy8awA9qizKq3Ot3o1IMEQ==","mode":420,"size":371},"dist/core/module-loader/loader.d.ts":{"checkedAt":1708389320319,"integrity":"sha512-lSxbBCZ6qVHZYDSVuuP8HKEAGbxJOqdqOw0l4QwO7ExYmZdtcRL7ZxwYP0bbg9gnCcHTy8PUdQ/lhZD/juAgOA==","mode":420,"size":1830},"dist/core/middleware/loadMiddleware.d.ts":{"checkedAt":1708389320319,"integrity":"sha512-aPha5njTkSEFSpc29GEW6x6E+QfjOBprk1t+Cd/YDIf+OCmZVVwKyobTq735SMaWH3lO/52PrrGL1xnEjVKpFQ==","mode":420,"size":369},"dist/core/config/logging.d.ts":{"checkedAt":1708389320319,"integrity":"sha512-qNiwFSd8fY7+lWcTY8PVHpZm2Gc8MY48HwKqe7NLOqwgP16jeZ5Y2rIhY1Uf1Yd7SMfCHxBM1Vx0ph0hHGcRtg==","mode":420,"size":191},"dist/assets/utils/vendor/image-size/lookup.d.ts":{"checkedAt":1708389320319,"integrity":"sha512-V5wGo6H3yLcgNnX0qo0AMMIQGeJfOvSRGf5vc9KS6DmtCGWcM90MdvfXiW2yuR+zOXxkb2HyL4czY5OmA1/ICw==","mode":420,"size":386},"dist/core/routing/match.d.ts":{"checkedAt":1708389320319,"integrity":"sha512-FduYxVSS2Oo/7mu+pR1WnH/G3YZUotGYKApGyn+aHWgd/qnPyE4fJIwvX/298EMuc78DpHXfJBFoQcyKFkR1iA==","mode":420,"size":354},"dist/runtime/client/media.d.ts":{"checkedAt":1708389320319,"integrity":"sha512-E9z/tUAoq5pz1eVAH8dr4lYtf9KQ54o2R/YV/q4MAh/OE3PSWBIRdD1kopKsQQpurual8i9X3qfIpbc2oaBP1g==","mode":420,"size":211},"dist/runtime/client/media.prebuilt.d.ts":{"checkedAt":1708389320319,"integrity":"sha512-Pd5v9rhgmbn+ieGmBgqicLKY+3ypdN0u5L4tYqVuXbld7lGzUJ+7tYRx0ZeD70oQKV4E315fDIdG12/Gu6twMg==","mode":420,"size":485},"dist/core/config/merge.d.ts":{"checkedAt":1708389320319,"integrity":"sha512-G11jX5gVi5WrPaKVsFOE16hJJ694xGZ16nGKvLx69/SvNg4QBi6ME/ylmXpp0cyfSVtXkfWQrIoIbiQT7/huCw==","mode":420,"size":139},"dist/core/messages.d.ts":{"checkedAt":1708389320319,"integrity":"sha512-6PST2/0wkNEa8AytmfK31WLzOlp/jgWa2zMMSmY+cqO3avaU95gyByL0jMTTx9WH0t4kGiUh3zHzxYS4zdHqQA==","mode":420,"size":2325},"dist/assets/utils/metadata.d.ts":{"checkedAt":1708389320319,"integrity":"sha512-xwdAgZEUwOVL8ycq19jVe/dJTLnzGCUGmK//8lPhxXwnvtDACBOeIK8BqMLVfvcsjwYi2Ul9wa0l80M3ie+suQ==","mode":420,"size":169},"dist/prerender/metadata.d.ts":{"checkedAt":1708389320319,"integrity":"sha512-ZqkZFuuK5zBUiSHPXOQ6xrfyDfbfVsVhyow6kMIQzWPKTc7x+oL5x32HlJh2PeXHLNtyWgnu1LaExq7Ev2ZHhg==","mode":420,"size":362},"dist/vite-plugin-astro-server/metadata.d.ts":{"checkedAt":1708389320319,"integrity":"sha512-KbHrlZf01E9wpz62tirSCvr85N6AAz/XD9FYQMVB6MmIEeF+My5ICZ0wYlkgSTYkvVq5v89oclvzrZ8XUFaWEg==","mode":420,"size":245},"dist/vite-plugin-astro/metadata.d.ts":{"checkedAt":1708389320319,"integrity":"sha512-VCAOljcfXfnNUv9WGOQLnq00aVm3+D1fI4k9a5UKqme2O1WwGi4frVYYWsc9eHItuMKPnjbszBgJwRYKPAct8A==","mode":420,"size":216},"dist/i18n/middleware.d.ts":{"checkedAt":1708389320319,"integrity":"sha512-uZF4V+kVNzksZTavS1wFz32w884iuKfT6JBiE+4CcLQou0uPy1KtX7Lgl31atGJCP0fPoZ6SX5D+zWBLpf6fSQ==","mode":420,"size":482},"dist/virtual-modules/middleware.d.ts":{"checkedAt":1708389320319,"integrity":"sha512-wCGTshxELNWvwuJ8lVOB9Xkhtt4SZjODZRjjPoeNPjHo+In6TuHxPIrRDl6brJv1Ho7PcRy10IfOJYj0itiIVg==","mode":420,"size":74},"dist/assets/services/vendor/squoosh/mozjpeg/mozjpeg_node_dec.d.ts":{"checkedAt":1708389320319,"integrity":"sha512-BdyOLkcUgoVH4w24mm0BchAsbWIv9SMbIVJ09s9ZbqFd85GbKjebommrm2/FCMMRSlSblcrKk0hC/fuMpU1WGg==","mode":420,"size":65},"dist/assets/services/vendor/squoosh/mozjpeg/mozjpeg_node_dec.wasm.d.ts":{"checkedAt":1708389320320,"integrity":"sha512-gKJ+qNgCRt/P1FNBAoRpW354FlhGmf2gDHMp9rIM5YiaQXlji6HaSvKcXWunmMQ4g+JkLq0iAKsf7hURQJVaMA==","mode":420,"size":113},"dist/assets/services/vendor/squoosh/mozjpeg/mozjpeg_node_enc.d.ts":{"checkedAt":1708389320320,"integrity":"sha512-BdyOLkcUgoVH4w24mm0BchAsbWIv9SMbIVJ09s9ZbqFd85GbKjebommrm2/FCMMRSlSblcrKk0hC/fuMpU1WGg==","mode":420,"size":65},"dist/assets/services/vendor/squoosh/mozjpeg/mozjpeg_node_enc.wasm.d.ts":{"checkedAt":1708389320320,"integrity":"sha512-gKJ+qNgCRt/P1FNBAoRpW354FlhGmf2gDHMp9rIM5YiaQXlji6HaSvKcXWunmMQ4g+JkLq0iAKsf7hURQJVaMA==","mode":420,"size":113},"dist/assets/endpoint/node.d.ts":{"checkedAt":1708389320320,"integrity":"sha512-zPfVDR7mzo6clcr9f1CSHVTWUWGugS0qdoS/6KEgRRtcLGfZqC74fQwatKrJir59HFRMUj2vbE5++54CX3Iyqg==","mode":420,"size":184},"dist/core/app/node.d.ts":{"checkedAt":1708389320320,"integrity":"sha512-mOB38/9QW3ejF3Q0sFDaj1WnBRdKR8YMeayL4OzozfPMypWBTtXf0ha0NRm4cXJ8sUSS7/lD8pHl+GeereXeBQ==","mode":420,"size":2452},"dist/core/logger/node.d.ts":{"checkedAt":1708389320320,"integrity":"sha512-0fifhVLS569/RkDWXMv2ZGjVNCiq0CxKOJdDbU1GdHIz/lT1eN30yxn4NZo1S/CX1Xi79CTXOV3c8nmZ/mofGg==","mode":420,"size":183},"dist/assets/services/noop.d.ts":{"checkedAt":1708389320320,"integrity":"sha512-6ZFAm5WkTtbcfydpWu3iAFH5NHkH8FQYKVX16kXNR49ZMetG8tnXBmFtx9zD1QYsX81RmRgJLK4xj7Rm4ISD4A==","mode":420,"size":129},"dist/runtime/client/only.d.ts":{"checkedAt":1708389320320,"integrity":"sha512-9lBL4iJBVsk9D58xqycpl33yMTZMJQmlwHXkQDCu25cdcdm+bfV/VXRphMfQsEYwq3ioYFg65hG1U+GlzohHHg==","mode":420,"size":191},"dist/runtime/client/only.prebuilt.d.ts":{"checkedAt":1708389320320,"integrity":"sha512-jsU4evzC5JIGJAkSUXqHu9+IbzzpeuPCuy+16cfxsYnzKx7JXEtrQH59AL2Sqwmpx923UywVIWSzG/OIyhKPrQ==","mode":420,"size":371},"dist/cli/docs/open.d.ts":{"checkedAt":1708389320320,"integrity":"sha512-TEv/BADChvlg8XkcYPG/fjYq8n4Pi/1gTJNE+zSpABphP/yuAzZPbWKBsX+elR9HnWMzE1ZQSYIQGJ+XznaLsQ==","mode":420,"size":128},"dist/core/errors/overlay.d.ts":{"checkedAt":1708389320320,"integrity":"sha512-Mcf8RDZIp83EWZ1JerjNNmPl4pOVo+moBhv0Rdbl4oUueYIh6TkaXH0ENToDk5MFWTjvK64BphYZ38zdQFWWyA==","mode":420,"size":60},"dist/core/build/page-data.d.ts":{"checkedAt":1708389320320,"integrity":"sha512-54dW9KMkG5l4+zDMd/t/17I98kMbji8x1CLFk5borCnI6oQGH3izqKOTb63yA+Pk2kGegH8GhNgUxsW+cBhU/A==","mode":420,"size":507},"dist/vite-plugin-scripts/page-ssr.d.ts":{"checkedAt":1708389320320,"integrity":"sha512-7A5GFYdfRHCqVvSKitiSibbu5svZte3HnBxq52A6afT/c24+OlwnZdulDPZx6jqqNQja7vn+f4FdQ+PAkRHIcQ==","mode":420,"size":216},"dist/runtime/server/render/page.d.ts":{"checkedAt":1708389320320,"integrity":"sha512-KrcCzw47PkdnL94hMe5ADsAZHqetgruCoiLQ2ydXoRVzIImo/Ss/q9mJBnuEsEXmXfKvPktc9mR6Y725oTtRaw==","mode":420,"size":393},"dist/core/render/paginate.d.ts":{"checkedAt":1708389320320,"integrity":"sha512-Hut9SRDE+gVSTlVm3G2VUyTnNUE2dr/VFz9ZOZisL0dGmpEkTd3RyQh9+zqd662E9PFGE0mkQiauczN0n7U+fA==","mode":420,"size":220},"dist/core/render/params-and-props.d.ts":{"checkedAt":1708389320322,"integrity":"sha512-+v4GI4nSVT3sK2OE8nKOjLmeCAgTJe8DqSRufYEeCw7Z7bF3Xe35c8u7rfoYSHWmEyPMpgylidO1h7+XjSFLJg==","mode":420,"size":505},"dist/core/routing/params.d.ts":{"checkedAt":1708389320322,"integrity":"sha512-DSYE8wCzAoCISAAEbVoExR7HFnWu4Lb8crAuHFt09/zNB9FznCtbqmsHxSLLKYVaLu+7P7EjtYCqNJ+VUh0tyA==","mode":420,"size":601},"dist/core/path.d.ts":{"checkedAt":1708389320322,"integrity":"sha512-7/YpQ8i3Y8zYhxzQfRlXS9SoZivcEYkwwrp/OGHHAd/drdojAytK6wawz8fyNJiL9eg3cNuGekp8EXJXQPXt1Q==","mode":420,"size":48},"dist/runtime/client/dev-toolbar/apps/audit/perf.d.ts":{"checkedAt":1708389320323,"integrity":"sha512-vZ2a0cMd1lZSxPMMxH4Vl/jyqd8QGu3MkYnrZGLSnaSEPFsTs/5tl0+B04+61XoTZyRRXeOO7EirNf7sWhduJA==","mode":420,"size":109},"dist/core/pipeline.d.ts":{"checkedAt":1708389320323,"integrity":"sha512-tshT0pALHj1+Uw4O8CsOnODvOQ4DQK9QG8+4ZVh/eB9J5FvqWHEsk/odIx91T2+qIBEvSsbAGMyI1frx+8soxQ==","mode":420,"size":1475},"dist/core/build/plugins/plugin-analyzer.d.ts":{"checkedAt":1708389320323,"integrity":"sha512-Tkiws1XrbdujAvAi8vCTRwX5Aw1c67BcJIQyEYz2TKXnbotfcJYkepleJRnjV9Kz31bdgwNFiSTfzzbVBz+qxw==","mode":420,"size":439},"dist/core/build/plugins/plugin-chunks.d.ts":{"checkedAt":1708389320323,"integrity":"sha512-dbJZke5Zp0lIJ0gLOU+UlT3y6mo5TrGC9R5X1Ccnea+Ir0AetuwvfM7gjKrMWkG2Yg6Q9czkjnWJ2tCslFt9Jw==","mode":420,"size":218},"dist/core/build/plugins/plugin-component-entry.d.ts":{"checkedAt":1708389320323,"integrity":"sha512-21h4UmAn4s4PXYNPBGmen9H9fC/oOgAZBS8OXsn4oYkzvSRXpROXDIV0gXtV5MFeKvSeFLjwc3SI8Yc7VYCzuA==","mode":420,"size":721},"dist/core/build/plugins/plugin-content.d.ts":{"checkedAt":1708389320323,"integrity":"sha512-HEi3SH85Q3/17SFyZ4OLyfOstls6fd/otTo6tK2NzYkofF8ywyACHslr2LbWsyP6Rs0SPGEqvx+EChUnZlLg0A==","mode":420,"size":273},"dist/core/build/plugins/plugin-css.d.ts":{"checkedAt":1708389320323,"integrity":"sha512-RiVcykuUMTCoKcu9xlSku2WLF+YEjOR4qd+qk9QKyQT4Qf0jCX+j9EqnIE0g5dvJIGKMmydSPyVojzzLueCchg==","mode":420,"size":299},"dist/core/build/plugins/plugin-hoisted-scripts.d.ts":{"checkedAt":1708389320323,"integrity":"sha512-Hh5VTBkO+nwEUMPXup0iaq2sG9XoEV3VA/U0wX8hKBxlNYbDV9i1H4aSAVABkBRrsBtiVsxZwjGfn+04edd4wQ==","mode":420,"size":510},"dist/core/build/plugins/plugin-internals.d.ts":{"checkedAt":1708389320323,"integrity":"sha512-O3AI0ErVvkvEIrjwS8hv8KCXllA2R31JZ82ZGI9Sxg0ubd5O/yXZ1CRYfs34MUF4opaFrQew3cZizRVwjnN/xg==","mode":420,"size":348},"dist/core/build/plugins/plugin-manifest.d.ts":{"checkedAt":1708389320323,"integrity":"sha512-vBgiE0BgZJfUqyhjKO9b4vErKLILhaAwtTGSVzM3enobUVBqQHAVYZod/7gL00DGGujuCP7CYmbolgEHqDwwyQ==","mode":420,"size":928},"dist/core/build/plugins/plugin-middleware.d.ts":{"checkedAt":1708389320323,"integrity":"sha512-cL+EDJDxZ8RO26ZjldCUYPT978qWGtqlzGJZiAZzF1xUAqhXhTI143dq16U+1AW0HfgDGaIYwEBSmXoEcVwigA==","mode":420,"size":348},"dist/core/build/plugins/plugin-pages.d.ts":{"checkedAt":1708389320323,"integrity":"sha512-LgswwlHYzKb5OCaLAL+gWctqmDy6XGsvrdu7tOKxslDxpgqErcmVH4/yKf2LEe/9i6swyTlwggbRN3nlKvcNRg==","mode":420,"size":729},"dist/core/build/plugins/plugin-prerender.d.ts":{"checkedAt":1708389320323,"integrity":"sha512-B6JVkhhxyiF81l35VySK+GEWW0G2oyl6m0yKTxfoGBL+yse72IWBYI0qm98JzxK8Z2VbYMzpg9NgNiyIfRy1Ww==","mode":420,"size":275},"dist/core/build/plugins/plugin-renderers.d.ts":{"checkedAt":1708389320323,"integrity":"sha512-/wZxOSpJt80GzaMO8O189e3XWJtjmkKGjo/04c2kXzFJb5uQlktPXncP86p9v33bhDKBGES96yW68raSWaH3vQ==","mode":420,"size":464},"dist/core/build/plugins/plugin-ssr.d.ts":{"checkedAt":1708389320323,"integrity":"sha512-FdW5dIXsGVGOLPwF7Wdo2pCrP6MNlHFON4un89nXgWubzAw5pK6cjb8QJb789a+cPipfanrXBHAI904Xj29aMw==","mode":420,"size":655},"dist/core/build/plugin.d.ts":{"checkedAt":1708389320324,"integrity":"sha512-ScBxI5VSgnStu45SkMIS18I0NJsbdCvuaI3XzCNWPAvOTv6rpB/G/iw0V3YLcqNtgUYQoQ76UQ2tFpZgfkuAGQ==","mode":420,"size":1795},"dist/vite-plugin-astro-server/plugin.d.ts":{"checkedAt":1708389320324,"integrity":"sha512-3H2mbxzDiUvjSKDTRcjNE7m2YVIkmCCSzHKlh0KLgFNCKXwSsVpvo2YjD2Gcp/SMBZufD+Jlasa93UfilX7Leg==","mode":420,"size":752},"dist/assets/utils/vendor/image-size/types/png.d.ts":{"checkedAt":1708389320324,"integrity":"sha512-6rxB1dmo1vhiNNrFXN4T0H+sZf2xP2QTbaOjPfaEtzff0wZ08Lt6l/zbEibfKcBV64PQ0n6i5art1Ja7iIKSUA==","mode":420,"size":80},"dist/assets/utils/vendor/image-size/types/pnm.d.ts":{"checkedAt":1708389320324,"integrity":"sha512-XFGPXEjlhGEEz9cnmsSf9HyXUNF1TiRGyE6U75ndVQFqJtHya+p9c27lFlZ33M3TuBJ/PSGLvwgXeHfKs8PPmg==","mode":420,"size":80},"dist/core/polyfill.d.ts":{"checkedAt":1708389320324,"integrity":"sha512-zGvOCMCxTbCnqOlOt6b6InCVqTupdyhBFt2IBcLVcqeKvZjOE17fKAc0Q0dReq7SVqvlB+jk/r5+klkeMitqZA==","mode":420,"size":39},"dist/virtual-modules/prefetch.d.ts":{"checkedAt":1708389320324,"integrity":"sha512-7/lGOXOowGl/I4EuX+sNjzz0jvy+G1bBBcIyrzGvMkWIvqiKtdfxShLIuoFmF4/USr288Y6rHxyHE3iHmT1Maw==","mode":420,"size":38},"dist/core/errors/printer.d.ts":{"checkedAt":1708389320324,"integrity":"sha512-xtTad48SJZ9xSEi3dkYyHfaSWmv6I8VfrofWVR5abX2ygFnNsgPYExACk3ox2RmQZHh+CaAz2L6x18NgJqachg==","mode":420,"size":189},"dist/assets/utils/proxy.d.ts":{"checkedAt":1708389320324,"integrity":"sha512-+/wvA9spUy1OFUxFGuwuBpc+avxotbKGOuF19MSB2Qp+xrdGf1zydGlQdGpeRYhJd3CKKgQeNJmRPH8G3ysHVA==","mode":420,"size":136},"dist/assets/utils/vendor/image-size/types/psd.d.ts":{"checkedAt":1708389320324,"integrity":"sha512-NQiMYfsGDxjAfA7MrZs1j9UO39Nuy6Rnm8bB45SXLsmQdDHXUuwyfkpaAtoz5sVk1ldJKKJ30VoqR1a2dyJDVQ==","mode":420,"size":80},"dist/vite-plugin-astro/query.d.ts":{"checkedAt":1708389320324,"integrity":"sha512-7QtNmb1mJ1uLmYIUrFDtiXjH8Hw+w0lxkrPGGgf3M/ApS1dI1+UZYVEm0DIKMi73uZcDLN065ywNafxGZW5eHg==","mode":420,"size":347},"dist/assets/utils/queryParams.d.ts":{"checkedAt":1708389320324,"integrity":"sha512-zKoPhcMh098kXRd608D7MTQVvJgx0+Q85CcR0dSho4cVVt0DBJATurDapeBFlHFXVsafGjQYjQYyot1fRxlhxA==","mode":420,"size":183},"dist/assets/build/remote.d.ts":{"checkedAt":1708389320324,"integrity":"sha512-P99bLBAHRDbhcazWg6mLimgRJf3s147LC2vuLrP5sBn3rUC3dv0SvJ30nnCJ90QesJvCJt03t08ZcTSsFv7Wkw==","mode":420,"size":238},"dist/assets/utils/remotePattern.d.ts":{"checkedAt":1708389320324,"integrity":"sha512-O55is0tFvo/Jj3q6vSLiuSwRUU5A4WriJdu7oWMEkjOLMW6D6cHkS/65KYZjA1FFQbjeSiIOnlBO4wGM8lU16A==","mode":420,"size":776},"dist/assets/utils/remoteProbe.d.ts":{"checkedAt":1708389320324,"integrity":"sha512-FyGfC/AcNWHQs9e5MQFDnxdDnF+xcjIqeVhbw9lYrHk1FKQ3oTZHly3B9CDAjYiHvP9bO+CBe7L0KF1t4tSL5w==","mode":420,"size":129},"dist/runtime/server/render/astro/render-template.d.ts":{"checkedAt":1708389320324,"integrity":"sha512-VBEtireNeITtlPv2Hbc8NhIjtCIDVDXPJBvceYt02ljzne935TxsmyPh+IxjeFFv/KKo1Zu2zLXICfuQXFRNNg==","mode":420,"size":615},"dist/runtime/server/render/astro/render.d.ts":{"checkedAt":1708389320325,"integrity":"sha512-6IT4fmFNnFLQfCZOZv/ssCONKLDQ3JWQf1/qrmfrxmAlnPSVtgdlxvKOBiF0FWpNmjpquQ0r61IBmxRuqn2meg==","mode":420,"size":750},"dist/core/render/renderer.d.ts":{"checkedAt":1708389320325,"integrity":"sha512-xciHLd2I/9inWJ6BgrifuFQqFCxoK64YK10dLc47+0kYSBA8SUfZD66Fimy0uYVX1aQxiuKsuRCEkftnOtFSEg==","mode":420,"size":273},"dist/jsx/renderer.d.ts":{"checkedAt":1708389320325,"integrity":"sha512-GaShLbdJAcMBaHXLhEuboFVciToAuzIyVrgnDe3z3Pwm3/Dqf+sR88mWTx8+3oMKmVRGYlcLypjNaIy/5hyHQg==","mode":420,"size":204},"dist/core/request.d.ts":{"checkedAt":1708389320325,"integrity":"sha512-BDQQVDo7q8UQGeVgy/y9W3d1beLcXv3AlJOezb3QaoZMwEKiXLjOr+wmDSLl+pjZANizAWG8MiZqGystVhnOdg==","mode":420,"size":722},"dist/vite-plugin-astro-server/request.d.ts":{"checkedAt":1708389320325,"integrity":"sha512-7d16fu5bFdcD+liB4rImm36/V+ZWu6khuvcep8vmzuNYN+yhN6Qf6LBY3OEdc7OfLpKoJA8bGrwsNndxFQyz+A==","mode":420,"size":740},"dist/vite-plugin-astro-server/resolve.d.ts":{"checkedAt":1708389320325,"integrity":"sha512-8AD1pSU3RDUeAUf8CQexNMnw/Ayg0bXnPDwgrKsaxPiouGkIXl5f2QMij+o90y3mpee/XlFvgmTzKKm0ySGRcA==","mode":420,"size":172},"dist/core/cookies/response.d.ts":{"checkedAt":1708389320325,"integrity":"sha512-gBngHqs4tjDvTayS2Fylw6hKFBcYVq7DcDAOIlAxnyToqTfS2BtbKKqiUoPADZn0IE4hDmxASafjqJaJZcsbHg==","mode":420,"size":316},"dist/vite-plugin-astro-server/response.d.ts":{"checkedAt":1708389320325,"integrity":"sha512-z31L4qpH8e1giVQyvcK/kTtCSvt+JSYdaSxbR+Qpe4XENuSjSzBIqirZz77Zj3qWGJrGD2rnQ1BeILRzaMBeUw==","mode":420,"size":822},"dist/core/dev/restart.d.ts":{"checkedAt":1708389320325,"integrity":"sha512-s22YbsIWui2qPDhuchiugX93DL7kUBRf1Pc3KA8eEsjC7Q5KCnEOkFYxigi6x6vx6qdIJLNkxpeO8H4/TFsr/w==","mode":420,"size":790},"dist/core/render/result.d.ts":{"checkedAt":1708389320325,"integrity":"sha512-zPnzrIE9gtZlFi/Q8Mrq4PRzKHcCUTqabhD6byLVItQtEZFtEfkwAUlulYBLupXSIWQym4aPNq2rbvDS2OguCQ==","mode":420,"size":1288},"dist/assets/services/vendor/squoosh/rotate/rotate.wasm.d.ts":{"checkedAt":1708389320325,"integrity":"sha512-gKJ+qNgCRt/P1FNBAoRpW354FlhGmf2gDHMp9rIM5YiaQXlji6HaSvKcXWunmMQ4g+JkLq0iAKsf7hURQJVaMA==","mode":420,"size":113},"dist/core/render/route-cache.d.ts":{"checkedAt":1708389320325,"integrity":"sha512-9V3P9mMld75P73C2NjR9WzUNfrkpY65XTdzjn8qpWSpaX7cD3VvCwwjt2ch/TcuXu19YiSb6lo4lLB4Az4p84Q==","mode":420,"size":1302},"dist/vite-plugin-astro-server/route.d.ts":{"checkedAt":1708389320325,"integrity":"sha512-DkdKJs+Id6iF89q4oJGromBZOF8aGSU3kuYwFqcO3vcblk4UIlkN1FCZG9j5Z3064ztZPBGC5phKuhKkgs4SGA==","mode":420,"size":1242},"dist/transitions/router.d.ts":{"checkedAt":1708389320325,"integrity":"sha512-JgUkm0LfpKtNwMzKgdSoMf5lviSlNnQcernQ6MZCpj5yEX2Oip0u4nMWZ/fykm3wCe7QtCKYtG5SIIfzAgNgBA==","mode":420,"size":356},"dist/prerender/routing.d.ts":{"checkedAt":1708389320325,"integrity":"sha512-YhHBJeXIxzZHNNYI8Q4hV+cV1K7V21BpBI1hb6rn7i34rgxaeZca6aSA2VaxDJN1ieQTfV8NEwLE+wW5pTysfQ==","mode":420,"size":595},"dist/content/runtime-assets.d.ts":{"checkedAt":1708389320325,"integrity":"sha512-78aXSb9iwu16ZXLSmJphiXmw7+wRi39f1cEssvpUwc8DIftbmcw/eLbKedpNsOzRjUD00QCkcK4o+uQw+4HMsg==","mode":420,"size":437},"dist/content/runtime.d.ts":{"checkedAt":1708389320326,"integrity":"sha512-dsAJkni3i6RKga+I6l+nGXdeTkj5gyf/r9ZajUqaSgmrOHg/terXWQJaRmb6Ee8gcr2o+4b7lgwYhdTgqPiYkw==","mode":420,"size":3015},"dist/vite-plugin-scanner/scan.d.ts":{"checkedAt":1708389320326,"integrity":"sha512-tTEMZljjB3GBBHZZMWx7OmhQAIC/270DtheoXi/0Fmooo5ieeckwwXfODWbi5Ri0ziIr86HzFolGWd3+pTumbw==","mode":420,"size":227},"dist/core/config/schema.d.ts":{"checkedAt":1708389320326,"integrity":"sha512-bv9x5BlPG6UYj/ftNjRHl4kOayOd/yJRmxKyazdscvSUyGjdVn8aVFUgIB4bhbX6T9/sxFg6vuX6Wx16dRfZxw==","mode":420,"size":102582},"dist/runtime/server/scripts.d.ts":{"checkedAt":1708389320326,"integrity":"sha512-epnkESnFPhNnaFnR4ahZ4dpwwbHMmyMxNEKIJBcx3AOz/0sizpqn34JJjj4xNxZHZ26xqqyvLPyHxtVG1t3CAQ==","mode":420,"size":409},"dist/vite-plugin-astro-server/scripts.d.ts":{"checkedAt":1708389320326,"integrity":"sha512-Vd8W4mG27IrRsuz82FBRqLPSAv/lu2EFhJ/h2SKflhKhuAMKrs0zCMnCNnXmlz3ujgtcHH6k41wZcTo/y00g0g==","mode":420,"size":287},"dist/core/middleware/sequence.d.ts":{"checkedAt":1708389320326,"integrity":"sha512-xttiFntZCuFylFPzkfBb9HyjxUDZBl/0TfqziOTfu0268jDdRGbhzhJ9yXJ6GDvesz7Qm8bCu44N/30ehRk/Zw==","mode":420,"size":254},"dist/core/routing/manifest/serialization.d.ts":{"checkedAt":1708389320326,"integrity":"sha512-EfGdm77tjrPW9sLF52f402p0MGUgOvnnt/eEMDwvr1UcZTcE7mobj99PfFcvBZ8aVYbMki+tFlY0j4VIftkfpw==","mode":420,"size":317},"dist/runtime/server/serialize.d.ts":{"checkedAt":1708389320326,"integrity":"sha512-0NRk29WptlSb+sMOHSMfqSPcoZMhXY7NvJjSIm1C/ZYCj76bS1IaXsbvuQ3bs19YdANsma0PBAbMwNXga7W+Wg==","mode":420,"size":163},"dist/content/server-listeners.d.ts":{"checkedAt":1708389320327,"integrity":"sha512-ztg4yGfBoB8AiOqzwnDc64lgQgKImN4+ixF4V34X2JjQNj3NDjUYK9UK4YMwy8eCz6Rmj52aoiydKo+51NtXbg==","mode":420,"size":536},"dist/vite-plugin-astro-server/server-state.d.ts":{"checkedAt":1708389320327,"integrity":"sha512-DRsDOUbdkj6PniOxFH3Jifzt/ynnKg/+mSP45p8s+c6V5+EXz+1M0S6QYvcIADd3dlajk7S0zhq7XqGtOWBH5g==","mode":420,"size":647},"dist/jsx/server.d.ts":{"checkedAt":1708389320327,"integrity":"sha512-673AIlpwxhf8XXmBSsi/pYgBY/1vmjlTB7Vj9hXbV/CbXEtnpHsZld7Pn+XG25GiN6ze4248yRCSYOSNUv77tw==","mode":420,"size":467},"dist/assets/services/service.d.ts":{"checkedAt":1708389320327,"integrity":"sha512-5CfAt1wZI386zO+908Sq+RVp8S4pZ+CI0Ajs43MCAn2Ig7leqy9kIGyIDnSTJX8YIA0QhuGhfm1Z2nG8v1MGQg==","mode":420,"size":4820},"dist/events/session.d.ts":{"checkedAt":1708389320327,"integrity":"sha512-Wc43tdVkEb75/iR2iEVl16Sho0JOCXovcuVpycmxHszWyVs4KDic+nZLns1iKxUgyYQ2YgdNZrl5ggQaSEx5WQ==","mode":420,"size":879},"dist/core/config/settings.d.ts":{"checkedAt":1708389320327,"integrity":"sha512-su/2aAWlZKa3yA3KyRwhPyR3ai9uJk2L/Ys1qUFBDYWhmSSm+c6KBYfag5hKEzSu7E+uENpuQKTlucpksIfiuQ==","mode":420,"size":252},"dist/runtime/client/dev-toolbar/apps/settings.d.ts":{"checkedAt":1708389320327,"integrity":"sha512-+9tvYDLViXGR+axfO/1JSPUpvqBrHIC08gYAtI80cgWD8x6H8+8cqEo2sW9EjPs1nmvY26WCivpbBme+sMY9NA==","mode":420,"size":142},"dist/runtime/client/dev-toolbar/settings.d.ts":{"checkedAt":1708389320327,"integrity":"sha512-ioJoNBNVJUQcaM6Lspl3KNqQBpu/4fy+gh3NdgGgwawLrLT36jCTHEQ7v8mIqYDmtWHZSbWQsWSaSqiH1PgFXg==","mode":420,"size":428},"dist/assets/services/sharp.d.ts":{"checkedAt":1708389320327,"integrity":"sha512-xva8eYtqWJliZdXfbr9OIiPz2UdVBaOxa9do+6S2lYI7itgOeklrnMHPxL9Sk20J8PeUyp3beW7UA3GUuHJjdQ==","mode":420,"size":444},"dist/core/shiki.d.ts":{"checkedAt":1708389320327,"integrity":"sha512-QaqAkl2IX9MkrLv6DQOrgLwi7xHs1wdG24kARUPCVVVpnVaxRs+AA2ZTovri0U9Ack2/hgjBCxZvUul6Zt0PLg==","mode":420,"size":176},"dist/runtime/server/shorthash.d.ts":{"checkedAt":1708389320327,"integrity":"sha512-CGvCRdz5mjbDI9Ofbey5wPbaNd6MkiAtNwYxiyH03SGXKRp9usBENZXDH4N+m204xfXlB44KLl0Q8ou5PUnzcA==","mode":420,"size":1289},"dist/runtime/server/render/slot.d.ts":{"checkedAt":1708389320327,"integrity":"sha512-k23+5E4jyzcecd3ZOhJ3iKOOq6az6G2pTIalmpAC8yg7cNGPyeJ8b6KW9ngCvGKgKJFAfn0SY/ECdWF9CqjyIA==","mode":420,"size":1426},"dist/vite-plugin-html/transform/slots.d.ts":{"checkedAt":1708389320328,"integrity":"sha512-qrhOlpqL+2zYIad55z41XraebyJBwOoVZp87mwL8uplpbxLiRke/xD05WSwxlHKVtlatpRGDU0mavTdy7+FnBw==","mode":420,"size":264},"dist/assets/services/vendor/squoosh/png/squoosh_oxipng_bg.wasm.d.ts":{"checkedAt":1708389320328,"integrity":"sha512-gKJ+qNgCRt/P1FNBAoRpW354FlhGmf2gDHMp9rIM5YiaQXlji6HaSvKcXWunmMQ4g+JkLq0iAKsf7hURQJVaMA==","mode":420,"size":113},"dist/assets/services/vendor/squoosh/png/squoosh_oxipng.d.ts":{"checkedAt":1708389320328,"integrity":"sha512-SlA4m/DB+nJ2kze90Ek32qSFk8vbOb7N2Y0rEbQ4Y271Xe8rJimJSBNYxAl8GhNAHoeUwCHe65F+oyUoZOLckA==","mode":420,"size":321},"dist/assets/services/vendor/squoosh/png/squoosh_png_bg.wasm.d.ts":{"checkedAt":1708389320328,"integrity":"sha512-gKJ+qNgCRt/P1FNBAoRpW354FlhGmf2gDHMp9rIM5YiaQXlji6HaSvKcXWunmMQ4g+JkLq0iAKsf7hURQJVaMA==","mode":420,"size":113},"dist/assets/services/vendor/squoosh/png/squoosh_png.d.ts":{"checkedAt":1708389320328,"integrity":"sha512-5AoOZoIoNmN/i2MtFEqC8g2YUTHSssnPETfD63ZJr32aFsqKGtrJRtqSeG5p0y+HKSNWJHHJZSjqbsYHeo1ybw==","mode":420,"size":420},"dist/assets/services/vendor/squoosh/resize/squoosh_resize_bg.wasm.d.ts":{"checkedAt":1708389320328,"integrity":"sha512-gKJ+qNgCRt/P1FNBAoRpW354FlhGmf2gDHMp9rIM5YiaQXlji6HaSvKcXWunmMQ4g+JkLq0iAKsf7hURQJVaMA==","mode":420,"size":113},"dist/assets/services/vendor/squoosh/resize/squoosh_resize.d.ts":{"checkedAt":1708389320328,"integrity":"sha512-gV7DlYXaCOClavqis4Bf4mSf60LgibdJ+PvotMPuXZp9ExVEXHBR71gosnnNVgNwhJ0E6fhg/3i2tYu8PWm2mA==","mode":420,"size":624},"dist/assets/services/squoosh.d.ts":{"checkedAt":1708389320328,"integrity":"sha512-JHzymG2Gmq3iQ+wnS6pNH2Qup0el1PSM2/4tYsNBGpMfBclMHLQYGpu22tWJbL2NhypJtqVh+hH56X5CcoAkyg==","mode":420,"size":121},"dist/core/render/ssr-element.d.ts":{"checkedAt":1708389320328,"integrity":"sha512-4vPG8oiPbMHxMim16C54H53g4tFDLC19jx1aZ5YX939TEdZwrr4T/kjY4tdt+Ht8tnX+EGAODg/HsauCv5RdnA==","mode":420,"size":1072},"dist/core/app/ssrPipeline.d.ts":{"checkedAt":1708389320328,"integrity":"sha512-TPD8Cechc4pRLvnRJbMPmS1UHQUXroTNDe0y4y0xIbsg1myKaDQhM4IDm3WWS3KuP9Ge7cw+8lcjgzm+UvWL7A==","mode":420,"size":102},"dist/core/build/static-build.d.ts":{"checkedAt":1708389320328,"integrity":"sha512-NTa5x6KVo/xLiNWi29sikCH/9MjfEnWk19DadLhMdWb1dNUqkalLn2UR3Y//G/cywzKhiy+CfCKKmgmT97oE8g==","mode":420,"size":2138},"dist/core/preview/static-preview-server.d.ts":{"checkedAt":1708389320328,"integrity":"sha512-Y/QhhchppbY70r4L0eaD57KTFXxsDRPfiwTx2LyJcHIkHuTMxd5tdReoLyyQ9aKqN8QsrppQqhh+wKyn+VAQ0Q==","mode":420,"size":469},"dist/preferences/store.d.ts":{"checkedAt":1708389320328,"integrity":"sha512-37OQGQ35kEpPw8oWQHN2F+mFn2Gcvvh5JPKwdFiZE+UqF2U9M81mD2qFXcKJ5DO2hI1lpRZlyRH0qXC/dYhHnA==","mode":420,"size":406},"dist/core/compile/style.d.ts":{"checkedAt":1708389320328,"integrity":"sha512-IvDzW6VcO7NZMeoZh00pXTiIs/FSL5sCP5XQJ+ZwizYO9LRp0Ku5WgcTr96nCerKOtLaDVBpkaySmPCL4P5ClQ==","mode":420,"size":363},"dist/assets/utils/vendor/image-size/types/svg.d.ts":{"checkedAt":1708389320329,"integrity":"sha512-h41H918h/yxAlR0jZbYJXXWttkHZvOh2kvYRDqZDRJu/4MWz45VlYi5OEFtj2TQYLIeycMMC5xtUbAhWJBMpZw==","mode":420,"size":80},"dist/vite-plugin-mdx/tag.d.ts":{"checkedAt":1708389320329,"integrity":"sha512-ZgDU3DmTgAhtsopiBLrVj5+Us21W1cmu807FqM/ZAd99eanczBDdhJKWG9RVwxu2IKOSEI8EHhmE5trcAhpxvw==","mode":420,"size":616},"dist/runtime/server/render/tags.d.ts":{"checkedAt":1708389320329,"integrity":"sha512-bhfamvM/1/PnS0WtVQJkw1JD+vMHOKtS2FWMM6xMJ7T5wZBCJ0NdTyfiF5m/8Aic8G1pWcliDX2sj8g41EWmGw==","mode":420,"size":335},"dist/assets/utils/vendor/image-size/types/tga.d.ts":{"checkedAt":1708389320329,"integrity":"sha512-3Ix6sYhulfonXgnTbZni/NmemgGa0OeArb857rBmHHgcgj6JFj80YdFLl6S+ec+RZFdLBCPDgbEKzj43zFTvnQ==","mode":420,"size":80},"dist/cli/throw-and-exit.d.ts":{"checkedAt":1708389320329,"integrity":"sha512-Tl2szFiE8N0B6GWLKoaf9rKUK3ZYXoE6kj8RFafwK+eF35y7xQF5JkRtslt/GEAtaVYPhI0EXI9BYKv4sjS1fA==","mode":420,"size":110},"dist/assets/utils/vendor/image-size/types/tiff.d.ts":{"checkedAt":1708389320329,"integrity":"sha512-3vneJ/Sx8Hh9y8sjP+4Ir/R0bgN1ctS9Npx59CLmQRzvrpR056bIk/cLvmYBb8cmDgD1SX/80aexwhnVMBPGyQ==","mode":420,"size":81},"dist/core/config/timer.d.ts":{"checkedAt":1708389320329,"integrity":"sha512-TEfd21BL+g0uorN9YTzQS3yynbEnEXYpK/3It3Jesk3R/uYKWWla9NQCizMpMQpAyGBGkKPEb3vh1zZeHNTWYw==","mode":420,"size":660},"dist/runtime/client/dev-toolbar/ui-library/toggle.d.ts":{"checkedAt":1708389320329,"integrity":"sha512-7xtBwALtVC6FO67D6N9HxnjJ1haO0eobUd4bxa0KKXfMTQeDjgR8j+G2v88NRl7Fn1mAG5FhB3Jd/WmC60uX5w==","mode":420,"size":222},"dist/events/toolbar.d.ts":{"checkedAt":1708389320329,"integrity":"sha512-Fi2oH/g8x57u/pZsIlrzltr1V/UyS75QzapaANdFDYWjE0UOhkCKzvNaSBJDenfi0kCNEvwfmA19VteVXNYDVg==","mode":420,"size":225},"dist/runtime/client/dev-toolbar/toolbar.d.ts":{"checkedAt":1708389320329,"integrity":"sha512-7RBdigqHpi/mP/FVgaysdncBSFWkzfngtu4hmCVWVtvSb/JxdTjuZLFmJJFFb0e8lFVoG5NVbawZWuyhO2MYDg==","mode":420,"size":1723},"dist/runtime/client/dev-toolbar/ui-library/tooltip.d.ts":{"checkedAt":1708389320329,"integrity":"sha512-GGRjza1pusHD0kfs+8YImIpkOCZNX7N+SrxA3LtWxRh5TBxJyuK/oya9AYTuokaTruYhNk/3iFmB+2+n2qtd+Q==","mode":420,"size":508},"dist/assets/utils/transformToPath.d.ts":{"checkedAt":1708389320330,"integrity":"sha512-z6AXFkm1mOTpFwShJP4l2b4Ix/1jl5RN95f7xKMU/iKZ9LcTAUV74/Pz7vEqwj9TOmvBu1bUpR1Lhi3Qa7zWzw==","mode":420,"size":265},"dist/runtime/server/transition.d.ts":{"checkedAt":1708389320330,"integrity":"sha512-1oNSQ0U87jnDQ4wbTwg27RfGJ6YG97VJifdeg5fF/D0twMVPEcfAqan8oWj4kexY/oyH9sYLXKR0JbKwdVAmdA==","mode":420,"size":522},"dist/virtual-modules/transitions-events.d.ts":{"checkedAt":1708389320330,"integrity":"sha512-JeMVpWyhK5UYjaifP1SHX0XUrPhJDDryNulj96okeCG/DRQmZVGbZRXc7cyE2XsRH6H8BPBOCXhPm2F91uXVJA==","mode":420,"size":42},"dist/virtual-modules/transitions-router.d.ts":{"checkedAt":1708389320330,"integrity":"sha512-TLNXO22r/gRFBojNooRv7eKduMDRSEHDcBoYmlK8mVvy4MW6//SDek6Ve96zzI/ZiydVumVHXHebgnmw8WGk3A==","mode":420,"size":42},"dist/virtual-modules/transitions-types.d.ts":{"checkedAt":1708389320330,"integrity":"sha512-/CYE0efpQp0ZGSbBI+zL1Xxt+0/Rum2TzLuzMX8IeyBFiDAsF5hQH9cgOSWU3SX7Vxsu5KPvXk0aZ01rlss1Fw==","mode":420,"size":41},"dist/virtual-modules/transitions.d.ts":{"checkedAt":1708389320330,"integrity":"sha512-41GINYAEbUm7oC7397wcIB2Wo/4X1Ih6arr4MsTMoFuJujexSXeNH/LRWFQiAZeuF2+3OjgOAJZg121JK2bEsQ==","mode":420,"size":41},"dist/core/config/tsconfig.d.ts":{"checkedAt":1708389320330,"integrity":"sha512-kv5H8/KjlyBKxybjuJj409wIbmuReOaCbT7mQIR16N6rqxmJU8zrGomVGp8KPR36zGgZrLGful5cc09v3hB9aQ==","mode":420,"size":1479},"dist/type-utils.d.ts":{"checkedAt":1708389320330,"integrity":"sha512-4ABU22+D8meQzEtSYxSa6DORGe75CUjHjwFXgLLvy3nLc35GIs8OK+sukbz6DEBPJAl8xS/7I570AxNyYkmsBw==","mode":420,"size":844},"dist/@types/typed-emitter.d.ts":{"checkedAt":1708389320330,"integrity":"sha512-aML8An6LjfJBSajq+2/Oba91EuMjRh2m1pC5WTQ0RRyNdcLW3KubnPkS5pTNxrsjYDGUi+wXDcdFLsAtg+pCSA==","mode":420,"size":1655},"dist/content/types-generator.d.ts":{"checkedAt":1708389320330,"integrity":"sha512-bzgiwJtljNR0zECKCYpHVD+dXMf3kUwSBrMPpzJ6N/OmcvN0IstPpDHoAcv0Qrxh6tzDSzaV2OmISyslcqmBOA==","mode":420,"size":1054},"dist/assets/types.d.ts":{"checkedAt":1708389320330,"integrity":"sha512-3INmp2w5StL/wigw/jSMBfSgrrDpSnC02w6BTh8BXNkssUL/sb9iw8RlUASZ/bD9KzyMQJcFflUPA7njsVLdoA==","mode":420,"size":6545},"dist/core/app/types.d.ts":{"checkedAt":1708389320330,"integrity":"sha512-X9toUVvIs9ikdpySL03svkj3M80N28LS7Tm5P//AP+qRpR+KxyRfMgRtNVuE5xOc9Wmq3+Lps4WpRixxGSxryQ==","mode":420,"size":2128},"dist/core/build/types.d.ts":{"checkedAt":1708389320330,"integrity":"sha512-AKEx00qPRg4FJKQowhas0H/TzjYMvZqQgqwmY8pGhxmWE5wDBwoSmwoZ4WU4EQoAcRTFs/e3NG1A6sHahi9+9w==","mode":420,"size":2029},"dist/core/compile/types.d.ts":{"checkedAt":1708389320330,"integrity":"sha512-O/SMFI8DiLV4RmMDEOToVdo//RFSSPd1fHSf16TXVp4xoHZOXswaSUJOzsrg8tMtnJALxccBqgcoSiCtw68WGQ==","mode":420,"size":273},"dist/transitions/types.d.ts":{"checkedAt":1708389320330,"integrity":"sha512-u4x5BHnaLBvCWEULVsRmrHyz5mer6XCrjbmxeNScYIs9fRREXiEU6UXTcQA0Fl/RjpUE51MRM6yIfSYS+37hQQ==","mode":420,"size":321},"dist/vite-plugin-astro/types.d.ts":{"checkedAt":1708389320330,"integrity":"sha512-Y8EOkxnSh0feUBwSH6C3d4K/Qje5j4yxkLpXCVewOaxlr3UIXLTxPFO0qtl1Do69pqOfVJPDzn5Nxn8DgoJ6Ow==","mode":420,"size":808},"types.d.ts":{"checkedAt":1708389320330,"integrity":"sha512-BR/alT55zQJX4Olgb4INzkxVLO9eZcxuXEGjQW0eWVneP8BYT8Bx6vpuq2wPugFIE6UxuId58HFv/F+zMNXKbg==","mode":420,"size":1000},"dist/core/errors/userError.d.ts":{"checkedAt":1708389320330,"integrity":"sha512-Q+GvkfUA10trbOuq2KIapZKuJm8yPhMkl8iakypbIOZ+1edopkxG7LuWOAcd256Z5F/FmnRBneEPDiXgPyR0Xw==","mode":420,"size":60},"dist/core/build/plugins/util.d.ts":{"checkedAt":1708389320331,"integrity":"sha512-G4Q9xOrHFi6xCQOmusJnk5YTcDuREsR+pvgbUoeCvGrV5zmRma5wGTmsXeK1DuU6tfHydcQa3BCFVNh1PgnUog==","mode":420,"size":1134},"dist/core/build/util.d.ts":{"checkedAt":1708389320331,"integrity":"sha512-3QNx0PkifWwfOiH6FTsvzulGVaEf07EWaXbQpFsuhFJA4GPF8G9JLOiJEwzTY2vk/a5E2M2VukFMvh+uUA+7fg==","mode":420,"size":705},"dist/core/preview/util.d.ts":{"checkedAt":1708389320331,"integrity":"sha512-Z+qabM1cZPjVuq0BFIDnU4ge3Daw8DV8+woACzCqd8+DgfCRtgUD0xqjJFFNipGfWFpicoSPIXrycXFIi9f1xQ==","mode":420,"size":169},"dist/core/util.d.ts":{"checkedAt":1708389320331,"integrity":"sha512-PPea7qTKMC9ikFkQ9d2JCZnIDm+QOuclsdl08XfaEDUtoZnpIBi3WdiK/MXxKJ3AbstsPeKyEoqrmlg27mvIaw==","mode":420,"size":2908},"dist/runtime/server/render/util.d.ts":{"checkedAt":1708389320331,"integrity":"sha512-zrdXUdsX477vStGe+GW8lMz+y6dcxBwcIboz2uzFcf3dLAiMgEK6Wbty2FBhwo2n5QOHee9YaF2MfBQseJDtzw==","mode":420,"size":1777},"dist/runtime/server/util.d.ts":{"checkedAt":1708389320331,"integrity":"sha512-eJwiFmSq9GGWxWMMH/peARtsEDPXH9f+yGbpMsmrpECQSQYwd8WCENcnHCUYBjdEE7kslyOOXTEeR0v2TW701g==","mode":420,"size":182},"dist/vite-plugin-astro-server/util.d.ts":{"checkedAt":1708389320331,"integrity":"sha512-zgdDCtueyDfPSp2a+RxKGMtppOT309GRgYxJvscuQmPvw9FWg7toTwUbtSR69w678f6ugYZnriobseR/UFhzsg==","mode":420,"size":136},"dist/assets/utils/vendor/image-size/types/utils.d.ts":{"checkedAt":1708389320331,"integrity":"sha512-22jn2dZ32+/e8fCBsKf9MO4M6OOnay9YGf1fqi8fc9KIBiq0m2lq4W99+KyxMGPQ4YlV3BROfP+UbdZrzlKKOQ==","mode":420,"size":1043},"dist/content/utils.d.ts":{"checkedAt":1708389320331,"integrity":"sha512-2SPK4b5r2AOkz4plWB2ZGusO7aRcT3cqrBFQ3Wbo/yv3lSwQ1HKY5D6m5cMn2jGKyrcCR+zT25vj5VRvKnDxYQ==","mode":420,"size":6571},"dist/core/errors/dev/utils.d.ts":{"checkedAt":1708389320331,"integrity":"sha512-lMKsQEEQgnCgL1uFXrpCe3e5j8C5I+JbaowuM3jxhnBU1oqxmafqRkaAHw829LCRrKVxofW3EWPtCNU1d5LqdA==","mode":420,"size":572},"dist/core/errors/utils.d.ts":{"checkedAt":1708389320331,"integrity":"sha512-oZtT/pAd0NYSOiQlQsFlsFfiGmboHtyoWCDv2maHXIUNvCeDWrYX6M+jQFJ28PQtSodD3KoQ9K2F8RwfNvRCHw==","mode":420,"size":769},"dist/prerender/utils.d.ts":{"checkedAt":1708389320331,"integrity":"sha512-sAjGcYptCdhUo+AyBF5A+G+R9QrIUg0I9CtzCgHsmPiNngFa6SgHDKxh+jxkpefR7TPsiTVefFkW9mM9+qx+QA==","mode":420,"size":366},"dist/vite-plugin-astro/utils.d.ts":{"checkedAt":1708389320331,"integrity":"sha512-Sb+UHMcCrz22cZBkTeOc3tDCBHkBmteyLqsZG6O/b2TRAtfJhu3+jCP4DbtAjN4G6Mryi/9zrTP4c3W+Lhi8NA==","mode":420,"size":44},"dist/vite-plugin-html/transform/utils.d.ts":{"checkedAt":1708389320331,"integrity":"sha512-dEugOC9cVOjz/TETrC/esxfEVuXAgJBAIIhlcrJKV20vxXRiE0w57+s1JNJgpJu1KBf9X4FvgKxfI0dYdwc5+Q==","mode":420,"size":357},"dist/core/redirects/validate.d.ts":{"checkedAt":1708389320331,"integrity":"sha512-Xv+zYFiEPkptHzKwX6HIpbtRs+EGA6ACJTiGXqnH/simJCYVh5cD9ehNptVyqq3PxbgArhEc3v+NYiCd7VQzZg==","mode":420,"size":78},"dist/core/routing/validation.d.ts":{"checkedAt":1708389320331,"integrity":"sha512-ja7WXDfRAZDDAK0v+miWj9Ob8J3cs1YfBCZcJNgSLhTpCAedkkFVAXZLggaEgq2ufbgsC0IpwolE3Q0Q+H6ffQ==","mode":420,"size":726},"dist/runtime/client/visible.d.ts":{"checkedAt":1708389320331,"integrity":"sha512-BxHRpSwCxvZNwJMb5P6tEnoKtzbYpC4frBwLBcV2/v3hvaChCozmLZ2cW6Vm08ZjtcK2HS7v06ofumMmxW20zQ==","mode":420,"size":347},"dist/runtime/client/visible.prebuilt.d.ts":{"checkedAt":1708389320332,"integrity":"sha512-N3A4TwZOcslDsCy71WaYYoSVxLD+CKAqKvezIjDdaZVNX5UDCDOkG3ZL/IWEGtxEMQwzZnYlsKCnD2OKYxNG5Q==","mode":420,"size":618},"dist/core/config/vite-load.d.ts":{"checkedAt":1708389320332,"integrity":"sha512-VHLcs+QNCl0lHY55pqaBOY0FX889xH1a5OQy+An/stK3RRA5ISCVDMvjbg/8eJqEVJ2h0tRn1cO8awjVuxZWQA==","mode":420,"size":335},"dist/assets/vite-plugin-assets.d.ts":{"checkedAt":1708389320332,"integrity":"sha512-v5TdF76XmVRnqiItLROf55Olh60GLY4MPyPLKRrbGb9rQpFZuBpSAxIj/iaWSPYawWiNY0ipjmdb15jB5tJ39g==","mode":420,"size":209},"dist/core/preview/vite-plugin-astro-preview.d.ts":{"checkedAt":1708389320332,"integrity":"sha512-tAtaUy58sZ5Js9T3Zyr28G/p7WiaziXieKHr8S9IvW6FXfZg7KcyQDyyASN0LptdLDGb9YgFoW1BZTlw0J3qFA==","mode":420,"size":177},"dist/content/vite-plugin-content-assets.d.ts":{"checkedAt":1708389320332,"integrity":"sha512-spwgRGBdxQMoNkOfA+BghyKp/IBo7vusHjQV0haYI9f1tVsRUlAyNWqcAv/y8CyfmhLRSiRX1V3/zQB0CvB11Q==","mode":420,"size":552},"dist/content/vite-plugin-content-imports.d.ts":{"checkedAt":1708389320332,"integrity":"sha512-WEzlNfz2Bhd2YHJRTLW7PzT47jIHuRCMsxRhQ7NAJ3psciEJgjv/b0fo9ugMJC413DpIk6DZ2S0MdrQuzWD1Ag==","mode":420,"size":318},"dist/config/vite-plugin-content-listen.d.ts":{"checkedAt":1708389320332,"integrity":"sha512-BScnzgkbMiVZ0y42zLydT5DPHwMd1wREjbd3Efx9ExEG8c3GTejIsvCyeVT3IJp1goGCx07+AobR2Sg58zcphg==","mode":420,"size":837},"dist/content/vite-plugin-content-virtual-mod.d.ts":{"checkedAt":1708389320332,"integrity":"sha512-w5DdD+r/BYKvoWDHb4yph4oHug3J5pHzmaeZt6p3wAx+Hm87jlLcUc/vG0FfG9zlnrH/t1LABBe21V86wQzpKQ==","mode":420,"size":1043},"dist/vite-plugin-dev-toolbar/vite-plugin-dev-toolbar.d.ts":{"checkedAt":1708389320332,"integrity":"sha512-uM7ma2JzC7C/JBetdvhdKTV+xx9LPNCC9LRnm7OpUtytjX+1dM01BATVO0pIoBR/jZYB9ToTUzRAJ6QEA57F9w==","mode":420,"size":193},"dist/i18n/vite-plugin-i18n.d.ts":{"checkedAt":1708389320332,"integrity":"sha512-aGaO/9BmTeca1q8m1j5LTkESlCoq1ZYEJy+pCSlvuRVBcA23NIlGxB1HrwNDuPiZNQWEvE7jX5ezs+raMVySCg==","mode":420,"size":481},"dist/prefetch/vite-plugin-prefetch.d.ts":{"checkedAt":1708389320332,"integrity":"sha512-bqrGxarc7k/VY+FtrfW2Imh4QMyY9nJkQffJZepWwf0D/VwfjVsZlrFYxiVWsMP3Fz2dAYkBqQQyatZbImF+Lg==","mode":420,"size":192},"dist/transitions/vite-plugin-transitions.d.ts":{"checkedAt":1708389320332,"integrity":"sha512-GFDEVlstPx7J2xAE/qBDqgmOGWPq1sFBcdx8YYbuysqUYyO+1ZI+D2exMeOCBWuQ/a9d1RQoG1zNdnLedU/yTQ==","mode":420,"size":195},"dist/core/middleware/vite-plugin.d.ts":{"checkedAt":1708389320332,"integrity":"sha512-kWEzz76h3d+OC65zZqeAvj5qOGFBCUnkJpkMG3wzrYdefDKJj4pdK7h+OHitreC5/+SCDAD9B/mjUt0u2Q1IPg==","mode":420,"size":528},"dist/core/errors/dev/vite.d.ts":{"checkedAt":1708389320332,"integrity":"sha512-P+xRCQbgPxgsEzEMxqu8vb7Q29ZBSD+fV9X5OTqEWsDjP61b/ZHc8BtZbkDyUBsUfaKioxHSgBNpAyky2AakPQ==","mode":420,"size":976},"dist/core/logger/vite.d.ts":{"checkedAt":1708389320332,"integrity":"sha512-uIkvQHCpnIY8dB2eX0RSzK3WxGeMTEaofUdeTJFM0SQ583w75/LIodHlokSEq+E/XbkcusihhVBsh0jhvsdx3Q==","mode":420,"size":221},"dist/core/module-loader/vite.d.ts":{"checkedAt":1708389320332,"integrity":"sha512-rytlNnoTkN/w4+yDPuXTV7btKHHOKqrqrBTWqugtIZtmiZh00Y6yEpyV/oWhymQzce9nneY7jju2FRutqKisEg==","mode":420,"size":172},"dist/vite-plugin-astro-server/vite.d.ts":{"checkedAt":1708389320332,"integrity":"sha512-gTfYf5GqVTCKkwxyp+T5gQKLYaM+DZkvpT6rFm9T6/nH6I13kYuDH+KGy05pEiDhMhqY1WLgrcteI5NdB2mOZg==","mode":420,"size":325},"dist/assets/services/vendor/squoosh/webp/webp_node_dec.d.ts":{"checkedAt":1708389320332,"integrity":"sha512-BdyOLkcUgoVH4w24mm0BchAsbWIv9SMbIVJ09s9ZbqFd85GbKjebommrm2/FCMMRSlSblcrKk0hC/fuMpU1WGg==","mode":420,"size":65},"dist/assets/services/vendor/squoosh/webp/webp_node_dec.wasm.d.ts":{"checkedAt":1708389320332,"integrity":"sha512-gKJ+qNgCRt/P1FNBAoRpW354FlhGmf2gDHMp9rIM5YiaQXlji6HaSvKcXWunmMQ4g+JkLq0iAKsf7hURQJVaMA==","mode":420,"size":113},"dist/assets/services/vendor/squoosh/webp/webp_node_enc.d.ts":{"checkedAt":1708389320332,"integrity":"sha512-BdyOLkcUgoVH4w24mm0BchAsbWIv9SMbIVJ09s9ZbqFd85GbKjebommrm2/FCMMRSlSblcrKk0hC/fuMpU1WGg==","mode":420,"size":65},"dist/assets/services/vendor/squoosh/webp/webp_node_enc.wasm.d.ts":{"checkedAt":1708389320332,"integrity":"sha512-gKJ+qNgCRt/P1FNBAoRpW354FlhGmf2gDHMp9rIM5YiaQXlji6HaSvKcXWunmMQ4g+JkLq0iAKsf7hURQJVaMA==","mode":420,"size":113},"dist/assets/utils/vendor/image-size/types/webp.d.ts":{"checkedAt":1708389320332,"integrity":"sha512-eauEXBgWyq85cLLdYMPN/2fsl97xz6TGY1ykjFNkrtNrVD88qUTQeqnBdgFlz+dhK/X8ZffzRnYZvZJZw6IbiA==","mode":420,"size":81},"dist/runtime/client/dev-toolbar/apps/utils/window.d.ts":{"checkedAt":1708389320333,"integrity":"sha512-Fo5dtpYmpz4+4ZNpRX6BNpVLVtIijXgSgvh/LRPUU+nEzM8XIwwxetxu4wSQOhRkg6B8Pc0oWy8I8qj+gAaa6Q==","mode":420,"size":117},"dist/runtime/client/dev-toolbar/ui-library/window.d.ts":{"checkedAt":1708389320333,"integrity":"sha512-8G5QsmdztZEmVwWa1QvJFXlw+DrQReYAo4LZ5i4O0psaM9Tevjv+09qJqitxYTwmvkfT3RQD3gQcp2L5atHDXw==","mode":420,"size":149},"dist/assets/services/vendor/squoosh/utils/workerPool.d.ts":{"checkedAt":1708389320333,"integrity":"sha512-Sql3asK2AMxR++WVl/qcqI/dDcA97zPq8lYqUQKmIM6By5xndgm8byqkpok6FplB8ajvqsmtFJwgeHI99YN4lw==","mode":420,"size":714},"dist/cli/add/wrapper.d.ts":{"checkedAt":1708389320333,"integrity":"sha512-IWXq7snS/gpliF8RWdQu1a7ZHBI0Ie8e11cYLQ5O7Sjpde67S3ebmnDnPjuUr8dV4SoJODQq149WeG3bQmjSHw==","mode":420,"size":128},"dist/runtime/client/dev-toolbar/apps/xray.d.ts":{"checkedAt":1708389320333,"integrity":"sha512-ieeXsrc8cQkaNVxdpLRBR/yThdNmkEmCGTFWxezHW1DJYEHoEVZw9slYms5FCEXCjrVlRgOBOhdr0NUYJR9m9Q==","mode":420,"size":826},"zod.d.ts":{"checkedAt":1708389320333,"integrity":"sha512-gqoedOhFrNu0tP1OwgduQz5U6omFC7EkxSXywM3C3qzPQerAVEPQDwh50lXhCQN/XOb5689b6a+iI9r+MmN7YQ==","mode":420,"size":115},"dist/assets/services/vendor/squoosh/avif/avif_node_dec.wasm":{"checkedAt":1708389320337,"integrity":"sha512-KuZMeLkSa3UwZgHGp2xeYCdjrMp9pMKAj7eyCaTITYWkdwQJV1A4zW6PMp1Q7VzZkguHnUfM38ZHDhyZFo2e1A==","mode":420,"size":1364059},"dist/assets/services/vendor/squoosh/avif/avif_node_enc.wasm":{"checkedAt":1708389320347,"integrity":"sha512-F/R/HQGohc4UnIEAiYyeXsK2Olxx3EG2G15uh+cXP7BJLOE0UHaWovju/GD6SkMgRTLP3zmroPPpZbqeBpws6Q==","mode":420,"size":2642196},"dist/assets/services/vendor/squoosh/mozjpeg/mozjpeg_node_dec.wasm":{"checkedAt":1708389320348,"integrity":"sha512-z9D4PYePJrJgPzVd1QeNO3L0yuNSPlaRJRoJEqolhCaPKKnvhT8acdwq6q48O0hpVaZvQIw4wqD5bujLuGzpBA==","mode":420,"size":163966},"dist/assets/services/vendor/squoosh/mozjpeg/mozjpeg_node_enc.wasm":{"checkedAt":1708389320349,"integrity":"sha512-xctxqqVKqwzgrpQ9D1yIdJhcmg7yadN9gaEzJkGHGYLLuAI49lmm8D/hNsoDqOi56lrqQ84phP9fK6p38lYlxQ==","mode":420,"size":251948},"dist/assets/services/vendor/squoosh/rotate/rotate.wasm":{"checkedAt":1708389320349,"integrity":"sha512-nLI6y3Js2jyucpYCBDMWPOcIG2MbihDId55tOylXQUDDJXHunUByfqI1rSGyRAfehkgU1mdmOXkM2DXvotY7MQ==","mode":420,"size":1363},"dist/assets/services/vendor/squoosh/png/squoosh_oxipng_bg.wasm":{"checkedAt":1708389320350,"integrity":"sha512-Fl0c5Ve5t0HvjNvrJd0w6rDVfx0FpwmblVvalSfjRQmJ8eMTUx+OjmE/157aBSckM1a5nUCpMXP1TYam8Ix1HA==","mode":420,"size":269158},"dist/assets/services/vendor/squoosh/png/squoosh_png_bg.wasm":{"checkedAt":1708389320351,"integrity":"sha512-Qv/2n8mIX9cOXwKxE9BdoXCgtGDBRcdWBjhDXI/BZOGcowDfceWWRvIcf7udiz740yIqNBYh6JHKiH7GX20oCQ==","mode":420,"size":123698},"dist/assets/services/vendor/squoosh/resize/squoosh_resize_bg.wasm":{"checkedAt":1708389320351,"integrity":"sha512-lOQas6pdUVj77WlvkHapHe9hdjnsQAYAYN5S2n1KGhc/WV+cImn4HAFZYDIYEcSKiXn52PAbWizYzW4AfaQAwg==","mode":420,"size":37052},"dist/assets/services/vendor/squoosh/webp/webp_node_dec.wasm":{"checkedAt":1708389320352,"integrity":"sha512-UAZlXTlW3OQdSuRv5+vaH6i4i95Ip0WWWmt/H/H84aMQ+RiC60v0OXkuWvq0MoOPlhoLl/IdSMKfj24jm7uB4w==","mode":420,"size":148687},"dist/assets/services/vendor/squoosh/webp/webp_node_enc.wasm":{"checkedAt":1708389320353,"integrity":"sha512-ogBOyLX6vkvI5GSMEHAyoWfY7dvNBPNZD16hkuTszGAESADRnCNNA1npRKX0wXH6BnFdfcVZjJtg6u1Oa+GxjA==","mode":420,"size":298327},"LICENSE":{"checkedAt":1708389320353,"integrity":"sha512-9oJWFYvdJXATUD/T++KJk0xpqefZ63crlxrkEl3OgnXf+PhI9baVOL7VoQ9pVg+nyus/ZiD/uHkvsOzJ/0pjEA==","mode":420,"size":3628},"package.json":{"checkedAt":1708389320353,"integrity":"sha512-gu7AELPWSWBcffaSHPE/r2q+cjF3DQKcOZrdhQOuYWkUfC/UhHNjckciICRLMJ4FbXhkxVhqjt/HbhIJbYi4hw==","mode":420,"size":7516}}} \ No newline at end of file diff --git a/.pnpm-store/v3/files/25/76c7ca09e74eb53512c9c02296681db9a6dc6167334a782b8684cd7a412ee6360a855440f85d5829078a23a1fbba7b6c4a6cbdee39f2d93931cb6ca0ddc12a b/.pnpm-store/v3/files/25/76c7ca09e74eb53512c9c02296681db9a6dc6167334a782b8684cd7a412ee6360a855440f85d5829078a23a1fbba7b6c4a6cbdee39f2d93931cb6ca0ddc12a new file mode 100644 index 00000000..3b52e0b6 --- /dev/null +++ b/.pnpm-store/v3/files/25/76c7ca09e74eb53512c9c02296681db9a6dc6167334a782b8684cd7a412ee6360a855440f85d5829078a23a1fbba7b6c4a6cbdee39f2d93931cb6ca0ddc12a @@ -0,0 +1,57 @@ +import { RedirectComponentInstance, routeIsRedirect } from "../core/redirects/index.js"; +import { preload } from "../vite-plugin-astro-server/index.js"; +import { getPrerenderStatus } from "./metadata.js"; +async function getSortedPreloadedMatches({ + pipeline, + matches, + settings +}) { + return (await preloadAndSetPrerenderStatus({ + pipeline, + matches, + settings + })).sort((a, b) => prioritizePrerenderedMatchesComparator(a.route, b.route)); +} +async function preloadAndSetPrerenderStatus({ + pipeline, + matches, + settings +}) { + const preloaded = new Array(); + for (const route of matches) { + const filePath = new URL(`./${route.component}`, settings.config.root); + if (routeIsRedirect(route)) { + preloaded.push({ + preloadedComponent: RedirectComponentInstance, + route, + filePath + }); + continue; + } + const preloadedComponent = await preload({ pipeline, filePath }); + const prerenderStatus = getPrerenderStatus({ + filePath, + loader: pipeline.getModuleLoader() + }); + if (prerenderStatus !== void 0) { + route.prerender = prerenderStatus; + } + preloaded.push({ preloadedComponent, route, filePath }); + } + return preloaded; +} +function prioritizePrerenderedMatchesComparator(a, b) { + if (areRegexesEqual(a.pattern, b.pattern)) { + if (a.prerender !== b.prerender) { + return a.prerender ? -1 : 1; + } + return a.component < b.component ? -1 : 1; + } + return 0; +} +function areRegexesEqual(regexp1, regexp2) { + return regexp1.source === regexp2.source && regexp1.global === regexp2.global; +} +export { + getSortedPreloadedMatches +}; diff --git a/.pnpm-store/v3/files/26/2e162f6742d1416f7e38d97f9abaedf001fbd5c1e5b7aaa7ad99bc708fc881733c0d756150fb77b25a8c84f87d71d31547c82837982c73818a02caaaea914d b/.pnpm-store/v3/files/26/2e162f6742d1416f7e38d97f9abaedf001fbd5c1e5b7aaa7ad99bc708fc881733c0d756150fb77b25a8c84f87d71d31547c82837982c73818a02caaaea914d new file mode 100644 index 00000000..004820f5 --- /dev/null +++ b/.pnpm-store/v3/files/26/2e162f6742d1416f7e38d97f9abaedf001fbd5c1e5b7aaa7ad99bc708fc881733c0d756150fb77b25a8c84f87d71d31547c82837982c73818a02caaaea914d @@ -0,0 +1,26 @@ + + + + + + + Vitest + + + + + + + + + +
+ + diff --git a/.pnpm-store/v3/files/26/9d009ca03ead242699bba1b68bc199becca647c0c973f0d02341473d5a2c5144ccb32cff6ee198795c2b666859527ac2bb092af7830df2169158a09682566c b/.pnpm-store/v3/files/26/9d009ca03ead242699bba1b68bc199becca647c0c973f0d02341473d5a2c5144ccb32cff6ee198795c2b666859527ac2bb092af7830df2169158a09682566c new file mode 100644 index 00000000..dcf28ee8 --- /dev/null +++ b/.pnpm-store/v3/files/26/9d009ca03ead242699bba1b68bc199becca647c0c973f0d02341473d5a2c5144ccb32cff6ee198795c2b666859527ac2bb092af7830df2169158a09682566c @@ -0,0 +1,678 @@ +import { Console } from 'node:console'; + +const denyList = /* @__PURE__ */ new Set([ + "GLOBAL", + "root", + "global", + "Buffer", + "ArrayBuffer", + "Uint8Array" +]); +const nodeGlobals = new Map( + Object.getOwnPropertyNames(globalThis).filter((global) => !denyList.has(global)).map((nodeGlobalsKey) => { + const descriptor = Object.getOwnPropertyDescriptor( + globalThis, + nodeGlobalsKey + ); + if (!descriptor) { + throw new Error( + `No property descriptor for ${nodeGlobalsKey}, this is a bug in Vitest.` + ); + } + return [nodeGlobalsKey, descriptor]; + }) +); +var node = { + name: "node", + transformMode: "ssr", + // this is largely copied from jest's node environment + async setupVM() { + const vm = await import('node:vm'); + let context = vm.createContext(); + let global = vm.runInContext( + "this", + context + ); + const contextGlobals = new Set(Object.getOwnPropertyNames(global)); + for (const [nodeGlobalsKey, descriptor] of nodeGlobals) { + if (!contextGlobals.has(nodeGlobalsKey)) { + if (descriptor.configurable) { + Object.defineProperty(global, nodeGlobalsKey, { + configurable: true, + enumerable: descriptor.enumerable, + get() { + const val = globalThis[nodeGlobalsKey]; + Object.defineProperty(global, nodeGlobalsKey, { + configurable: true, + enumerable: descriptor.enumerable, + value: val, + writable: descriptor.writable === true || nodeGlobalsKey === "performance" + }); + return val; + }, + set(val) { + Object.defineProperty(global, nodeGlobalsKey, { + configurable: true, + enumerable: descriptor.enumerable, + value: val, + writable: true + }); + } + }); + } else if ("value" in descriptor) { + Object.defineProperty(global, nodeGlobalsKey, { + configurable: false, + enumerable: descriptor.enumerable, + value: descriptor.value, + writable: descriptor.writable + }); + } else { + Object.defineProperty(global, nodeGlobalsKey, { + configurable: false, + enumerable: descriptor.enumerable, + get: descriptor.get, + set: descriptor.set + }); + } + } + } + global.global = global; + global.Buffer = Buffer; + global.ArrayBuffer = ArrayBuffer; + global.Uint8Array = Uint8Array; + return { + getVmContext() { + return context; + }, + teardown() { + context = void 0; + global = void 0; + } + }; + }, + async setup(global) { + global.console.Console = Console; + return { + teardown(global2) { + delete global2.console.Console; + } + }; + } +}; + +const LIVING_KEYS = [ + "DOMException", + "URL", + "URLSearchParams", + "EventTarget", + "NamedNodeMap", + "Node", + "Attr", + "Element", + "DocumentFragment", + "DOMImplementation", + "Document", + "XMLDocument", + "CharacterData", + "Text", + "CDATASection", + "ProcessingInstruction", + "Comment", + "DocumentType", + "NodeList", + "RadioNodeList", + "HTMLCollection", + "HTMLOptionsCollection", + "DOMStringMap", + "DOMTokenList", + "StyleSheetList", + "HTMLElement", + "HTMLHeadElement", + "HTMLTitleElement", + "HTMLBaseElement", + "HTMLLinkElement", + "HTMLMetaElement", + "HTMLStyleElement", + "HTMLBodyElement", + "HTMLHeadingElement", + "HTMLParagraphElement", + "HTMLHRElement", + "HTMLPreElement", + "HTMLUListElement", + "HTMLOListElement", + "HTMLLIElement", + "HTMLMenuElement", + "HTMLDListElement", + "HTMLDivElement", + "HTMLAnchorElement", + "HTMLAreaElement", + "HTMLBRElement", + "HTMLButtonElement", + "HTMLCanvasElement", + "HTMLDataElement", + "HTMLDataListElement", + "HTMLDetailsElement", + "HTMLDialogElement", + "HTMLDirectoryElement", + "HTMLFieldSetElement", + "HTMLFontElement", + "HTMLFormElement", + "HTMLHtmlElement", + "HTMLImageElement", + "HTMLInputElement", + "HTMLLabelElement", + "HTMLLegendElement", + "HTMLMapElement", + "HTMLMarqueeElement", + "HTMLMediaElement", + "HTMLMeterElement", + "HTMLModElement", + "HTMLOptGroupElement", + "HTMLOptionElement", + "HTMLOutputElement", + "HTMLPictureElement", + "HTMLProgressElement", + "HTMLQuoteElement", + "HTMLScriptElement", + "HTMLSelectElement", + "HTMLSlotElement", + "HTMLSourceElement", + "HTMLSpanElement", + "HTMLTableCaptionElement", + "HTMLTableCellElement", + "HTMLTableColElement", + "HTMLTableElement", + "HTMLTimeElement", + "HTMLTableRowElement", + "HTMLTableSectionElement", + "HTMLTemplateElement", + "HTMLTextAreaElement", + "HTMLUnknownElement", + "HTMLFrameElement", + "HTMLFrameSetElement", + "HTMLIFrameElement", + "HTMLEmbedElement", + "HTMLObjectElement", + "HTMLParamElement", + "HTMLVideoElement", + "HTMLAudioElement", + "HTMLTrackElement", + "HTMLFormControlsCollection", + "SVGElement", + "SVGGraphicsElement", + "SVGSVGElement", + "SVGTitleElement", + "SVGAnimatedString", + "SVGNumber", + "SVGStringList", + "Event", + "CloseEvent", + "CustomEvent", + "MessageEvent", + "ErrorEvent", + "HashChangeEvent", + "PopStateEvent", + "StorageEvent", + "ProgressEvent", + "PageTransitionEvent", + "SubmitEvent", + "UIEvent", + "FocusEvent", + "InputEvent", + "MouseEvent", + "KeyboardEvent", + "TouchEvent", + "CompositionEvent", + "WheelEvent", + "BarProp", + "External", + "Location", + "History", + "Screen", + "Crypto", + "Performance", + "Navigator", + "PluginArray", + "MimeTypeArray", + "Plugin", + "MimeType", + "FileReader", + "Blob", + "File", + "FileList", + "ValidityState", + "DOMParser", + "XMLSerializer", + "FormData", + "XMLHttpRequestEventTarget", + "XMLHttpRequestUpload", + "XMLHttpRequest", + "WebSocket", + "NodeFilter", + "NodeIterator", + "TreeWalker", + "AbstractRange", + "Range", + "StaticRange", + "Selection", + "Storage", + "CustomElementRegistry", + "ShadowRoot", + "MutationObserver", + "MutationRecord", + "Headers", + "AbortController", + "AbortSignal", + "Uint8Array", + "Uint16Array", + "Uint32Array", + "Uint8ClampedArray", + "Int8Array", + "Int16Array", + "Int32Array", + "Float32Array", + "Float64Array", + "ArrayBuffer", + "DOMRectReadOnly", + "DOMRect", + // not specified in docs, but is available + "Image", + "Audio", + "Option", + "CSS" +]; +const OTHER_KEYS = [ + "addEventListener", + "alert", + // 'atob', + "blur", + // 'btoa', + "cancelAnimationFrame", + /* 'clearInterval', */ + /* 'clearTimeout', */ + "close", + "confirm", + /* 'console', */ + "createPopup", + "dispatchEvent", + "document", + "focus", + "frames", + "getComputedStyle", + "history", + "innerHeight", + "innerWidth", + "length", + "location", + "matchMedia", + "moveBy", + "moveTo", + "name", + "navigator", + "open", + "outerHeight", + "outerWidth", + "pageXOffset", + "pageYOffset", + "parent", + "postMessage", + "print", + "prompt", + "removeEventListener", + "requestAnimationFrame", + "resizeBy", + "resizeTo", + "screen", + "screenLeft", + "screenTop", + "screenX", + "screenY", + "scroll", + "scrollBy", + "scrollLeft", + "scrollTo", + "scrollTop", + "scrollX", + "scrollY", + "self", + /* 'setInterval', */ + /* 'setTimeout', */ + "stop", + /* 'toString', */ + "top", + "Window", + "window" +]; +const KEYS = LIVING_KEYS.concat(OTHER_KEYS); + +const skipKeys = [ + "window", + "self", + "top", + "parent" +]; +function getWindowKeys(global, win, additionalKeys = []) { + const keysArray = [...additionalKeys, ...KEYS]; + const keys = new Set(keysArray.concat(Object.getOwnPropertyNames(win)).filter((k) => { + if (skipKeys.includes(k)) + return false; + if (k in global) + return keysArray.includes(k); + return true; + })); + return keys; +} +function isClassLikeName(name) { + return name[0] === name[0].toUpperCase(); +} +function populateGlobal(global, win, options = {}) { + const { bindFunctions = false } = options; + const keys = getWindowKeys(global, win, options.additionalKeys); + const originals = /* @__PURE__ */ new Map(); + const overrideObject = /* @__PURE__ */ new Map(); + for (const key of keys) { + const boundFunction = bindFunctions && typeof win[key] === "function" && !isClassLikeName(key) && win[key].bind(win); + if (KEYS.includes(key) && key in global) + originals.set(key, global[key]); + Object.defineProperty(global, key, { + get() { + if (overrideObject.has(key)) + return overrideObject.get(key); + if (boundFunction) + return boundFunction; + return win[key]; + }, + set(v) { + overrideObject.set(key, v); + }, + configurable: true + }); + } + global.window = global; + global.self = global; + global.top = global; + global.parent = global; + if (global.global) + global.global = global; + if (global.document && global.document.defaultView) { + Object.defineProperty(global.document, "defaultView", { + get: () => global, + enumerable: true, + configurable: true + }); + } + skipKeys.forEach((k) => keys.add(k)); + return { + keys, + skipKeys, + originals + }; +} + +function catchWindowErrors(window) { + let userErrorListenerCount = 0; + function throwUnhandlerError(e) { + if (userErrorListenerCount === 0 && e.error != null) + process.emit("uncaughtException", e.error); + } + const addEventListener = window.addEventListener.bind(window); + const removeEventListener = window.removeEventListener.bind(window); + window.addEventListener("error", throwUnhandlerError); + window.addEventListener = function(...args) { + if (args[0] === "error") + userErrorListenerCount++; + return addEventListener.apply(this, args); + }; + window.removeEventListener = function(...args) { + if (args[0] === "error" && userErrorListenerCount) + userErrorListenerCount--; + return removeEventListener.apply(this, args); + }; + return function clearErrorHandlers() { + window.removeEventListener("error", throwUnhandlerError); + }; +} +var jsdom = { + name: "jsdom", + transformMode: "web", + async setupVM({ jsdom = {} }) { + const { + CookieJar, + JSDOM, + ResourceLoader, + VirtualConsole + } = await import('jsdom'); + const { + html = "", + userAgent, + url = "http://localhost:3000", + contentType = "text/html", + pretendToBeVisual = true, + includeNodeLocations = false, + runScripts = "dangerously", + resources, + console = false, + cookieJar = false, + ...restOptions + } = jsdom; + let dom = new JSDOM( + html, + { + pretendToBeVisual, + resources: resources ?? (userAgent ? new ResourceLoader({ userAgent }) : void 0), + runScripts, + url, + virtualConsole: console && globalThis.console ? new VirtualConsole().sendTo(globalThis.console) : void 0, + cookieJar: cookieJar ? new CookieJar() : void 0, + includeNodeLocations, + contentType, + userAgent, + ...restOptions + } + ); + const clearWindowErrors = catchWindowErrors(dom.window); + dom.window.Buffer = Buffer; + dom.window.jsdom = dom; + const globalNames = [ + "structuredClone", + "fetch", + "Request", + "Response", + "BroadcastChannel", + "MessageChannel", + "MessagePort", + "TextEncoder", + "TextDecoder" + ]; + for (const name of globalNames) { + const value = globalThis[name]; + if (typeof value !== "undefined" && typeof dom.window[name] === "undefined") + dom.window[name] = value; + } + return { + getVmContext() { + return dom.getInternalVMContext(); + }, + teardown() { + clearWindowErrors(); + dom.window.close(); + dom = void 0; + } + }; + }, + async setup(global, { jsdom = {} }) { + const { + CookieJar, + JSDOM, + ResourceLoader, + VirtualConsole + } = await import('jsdom'); + const { + html = "", + userAgent, + url = "http://localhost:3000", + contentType = "text/html", + pretendToBeVisual = true, + includeNodeLocations = false, + runScripts = "dangerously", + resources, + console = false, + cookieJar = false, + ...restOptions + } = jsdom; + const dom = new JSDOM( + html, + { + pretendToBeVisual, + resources: resources ?? (userAgent ? new ResourceLoader({ userAgent }) : void 0), + runScripts, + url, + virtualConsole: console && global.console ? new VirtualConsole().sendTo(global.console) : void 0, + cookieJar: cookieJar ? new CookieJar() : void 0, + includeNodeLocations, + contentType, + userAgent, + ...restOptions + } + ); + const { keys, originals } = populateGlobal(global, dom.window, { bindFunctions: true }); + const clearWindowErrors = catchWindowErrors(global); + global.jsdom = dom; + return { + teardown(global2) { + clearWindowErrors(); + dom.window.close(); + delete global2.jsdom; + keys.forEach((key) => delete global2[key]); + originals.forEach((v, k) => global2[k] = v); + } + }; + } +}; + +async function teardownWindow(win) { + if (win.close && win.happyDOM.abort) { + await win.happyDOM.abort(); + win.close(); + } else { + win.happyDOM.cancelAsync(); + } +} +var happy = { + name: "happy-dom", + transformMode: "web", + async setupVM({ happyDOM = {} }) { + const { Window } = await import('happy-dom'); + let win = new Window({ + ...happyDOM, + console: console && globalThis.console ? globalThis.console : void 0, + url: happyDOM.url || "http://localhost:3000", + settings: { + ...happyDOM.settings, + disableErrorCapturing: true + } + }); + win.Buffer = Buffer; + if (typeof structuredClone !== "undefined" && !win.structuredClone) + win.structuredClone = structuredClone; + return { + getVmContext() { + return win; + }, + async teardown() { + await teardownWindow(win); + win = void 0; + } + }; + }, + async setup(global, { happyDOM = {} }) { + const { Window, GlobalWindow } = await import('happy-dom'); + const win = new (GlobalWindow || Window)({ + ...happyDOM, + console: console && global.console ? global.console : void 0, + url: happyDOM.url || "http://localhost:3000", + settings: { + ...happyDOM.settings, + disableErrorCapturing: true + } + }); + const { keys, originals } = populateGlobal(global, win, { + bindFunctions: true, + // jsdom doesn't support Request and Response, but happy-dom does + additionalKeys: ["Request", "Response"] + }); + return { + async teardown(global2) { + await teardownWindow(win); + keys.forEach((key) => delete global2[key]); + originals.forEach((v, k) => global2[k] = v); + } + }; + } +}; + +var edge = { + name: "edge-runtime", + transformMode: "ssr", + async setupVM() { + const { EdgeVM } = await import('@edge-runtime/vm'); + const vm = new EdgeVM({ + extend: (context) => { + context.global = context; + context.Buffer = Buffer; + return context; + } + }); + return { + getVmContext() { + return vm.context; + }, + teardown() { + } + }; + }, + async setup(global) { + const { EdgeVM } = await import('@edge-runtime/vm'); + const vm = new EdgeVM({ + extend: (context) => { + context.global = context; + context.Buffer = Buffer; + KEYS.forEach((key) => { + if (key in global) + context[key] = global[key]; + }); + return context; + } + }); + const { keys, originals } = populateGlobal(global, vm.context, { bindFunctions: true }); + return { + teardown(global2) { + keys.forEach((key) => delete global2[key]); + originals.forEach((v, k) => global2[k] = v); + } + }; + } +}; + +const environments = { + node, + jsdom, + "happy-dom": happy, + "edge-runtime": edge +}; +const envPackageNames = { + "jsdom": "jsdom", + "happy-dom": "happy-dom", + "edge-runtime": "@edge-runtime/vm" +}; +function getEnvPackageName(env) { + if (env === "node") + return null; + if (env in envPackageNames) + return envPackageNames[env]; + if (env[0] === "." || env[0] === "/") + return null; + return `vitest-environment-${env}`; +} + +export { environments as e, getEnvPackageName as g, populateGlobal as p }; diff --git a/.pnpm-store/v3/files/28/db8a314c63c15433999ab36798d14b66282fb22c72a50360d9bb95c4cea0fbed9a4d12c5c6e46cd1e2b681001db6b8fcbc0e1783c9490f52f4fb5b5af93e8d b/.pnpm-store/v3/files/28/db8a314c63c15433999ab36798d14b66282fb22c72a50360d9bb95c4cea0fbed9a4d12c5c6e46cd1e2b681001db6b8fcbc0e1783c9490f52f4fb5b5af93e8d new file mode 100644 index 00000000..628106dc --- /dev/null +++ b/.pnpm-store/v3/files/28/db8a314c63c15433999ab36798d14b66282fb22c72a50360d9bb95c4cea0fbed9a4d12c5c6e46cd1e2b681001db6b8fcbc0e1783c9490f52f4fb5b5af93e8d @@ -0,0 +1,12 @@ +/* + @license + Rollup.js v4.12.0 + Fri, 16 Feb 2024 13:31:42 GMT - commit 0146b84be33a8416b4df4b9382549a7ca19dd64a + + https://github.com/rollup/rollup + + Released under the MIT License. +*/ +import '../native.js'; +export { parseAst, parseAstAsync } from './shared/parseAst.js'; +import 'node:path'; diff --git a/.pnpm-store/v3/files/29/6dd6f4a8bbfecca28fc18b4f1140f7a0c13fe786a14ec7e054b1d3b8e447623f127378fa9ec32d4de4d19f696d637fe817ab9cee624ef6cfe9125968568792 b/.pnpm-store/v3/files/29/6dd6f4a8bbfecca28fc18b4f1140f7a0c13fe786a14ec7e054b1d3b8e447623f127378fa9ec32d4de4d19f696d637fe817ab9cee624ef6cfe9125968568792 new file mode 100644 index 00000000..edba3138 --- /dev/null +++ b/.pnpm-store/v3/files/29/6dd6f4a8bbfecca28fc18b4f1140f7a0c13fe786a14ec7e054b1d3b8e447623f127378fa9ec32d4de4d19f696d637fe817ab9cee624ef6cfe9125968568792 @@ -0,0 +1,109 @@ +import { promises } from 'node:fs'; +import { fileURLToPath } from 'node:url'; +import { promisify } from 'node:util'; +import { gzip, constants } from 'node:zlib'; +import { resolve, basename, dirname, relative } from 'pathe'; +import c from 'picocolors'; +import fg from 'fast-glob'; +import { stringify } from 'flatted'; + +async function getModuleGraph(ctx, id) { + const graph = {}; + const externalized = /* @__PURE__ */ new Set(); + const inlined = /* @__PURE__ */ new Set(); + function clearId(id2) { + return id2?.replace(/\?v=\w+$/, "") || ""; + } + async function get(mod, seen = /* @__PURE__ */ new Map()) { + if (!mod || !mod.id) + return; + if (seen.has(mod)) + return seen.get(mod); + let id2 = clearId(mod.id); + seen.set(mod, id2); + const rewrote = await ctx.vitenode.shouldExternalize(id2); + if (rewrote) { + id2 = rewrote; + externalized.add(id2); + seen.set(mod, id2); + } else { + inlined.add(id2); + } + const mods = Array.from(mod.importedModules).filter((i) => i.id && !i.id.includes("/vitest/dist/")); + graph[id2] = (await Promise.all(mods.map((m) => get(m, seen)))).filter(Boolean); + return id2; + } + await get(ctx.server.moduleGraph.getModuleById(id)); + return { + graph, + externalized: Array.from(externalized), + inlined: Array.from(inlined) + }; +} + +function getOutputFile(config) { + if (!config?.outputFile) + return; + if (typeof config.outputFile === "string") + return config.outputFile; + return config.outputFile.html; +} +const distDir = resolve(fileURLToPath(import.meta.url), "../../dist"); +class HTMLReporter { + start = 0; + ctx; + reportUIPath; + options; + constructor(options) { + this.options = options; + } + async onInit(ctx) { + this.ctx = ctx; + this.start = Date.now(); + } + async onFinished() { + const result = { + paths: this.ctx.state.getPaths(), + files: this.ctx.state.getFiles(), + config: this.ctx.config, + unhandledErrors: this.ctx.state.getUnhandledErrors(), + moduleGraph: {} + }; + await Promise.all( + result.files.map(async (file) => { + result.moduleGraph[file.filepath] = await getModuleGraph(this.ctx, file.filepath); + }) + ); + await this.writeReport(stringify(result)); + } + async writeReport(report) { + const htmlFile = this.options.outputFile || getOutputFile(this.ctx.config) || "html/index.html"; + const htmlFileName = basename(htmlFile); + const htmlDir = resolve(this.ctx.config.root, dirname(htmlFile)); + const metaFile = resolve(htmlDir, "html.meta.json.gz"); + await promises.mkdir(resolve(htmlDir, "assets"), { recursive: true }); + const promiseGzip = promisify(gzip); + const data = await promiseGzip(report, { + level: constants.Z_BEST_COMPRESSION + }); + await promises.writeFile(metaFile, data, "base64"); + const ui = resolve(distDir, "client"); + const files = fg.sync("**/*", { cwd: ui }); + await Promise.all(files.map(async (f) => { + if (f === "index.html") { + const html = await promises.readFile(resolve(ui, f), "utf-8"); + const filePath = relative(htmlDir, metaFile); + await promises.writeFile( + resolve(htmlDir, htmlFileName), + html.replace("", ` + const filePath = id.replace(normalizePath$3(config.root), ''); + addToHTMLProxyCache(config, filePath, inlineModuleIndex, { + code: contents, + }); + js += `\nimport "${id}?html-proxy&index=${inlineModuleIndex}.js"`; + shouldRemove = true; + } + everyScriptIsAsync &&= isAsync; + someScriptsAreAsync ||= isAsync; + someScriptsAreDefer ||= !isAsync; + } + else if (url && !isPublicFile) { + if (!isExcludedUrl(url)) { + config.logger.warn(` asset + for (const { start, end, url } of scriptUrls) { + if (checkPublicFile(url, config)) { + s.update(start, end, toOutputPublicFilePath(url)); + } + else if (!isExcludedUrl(url)) { + s.update(start, end, await urlToBuiltUrl(url, id, config, this)); + } + } + // ignore if its url can't be resolved + const resolvedStyleUrls = await Promise.all(styleUrls.map(async (styleUrl) => ({ + ...styleUrl, + resolved: await this.resolve(styleUrl.url, id), + }))); + for (const { start, end, url, resolved } of resolvedStyleUrls) { + if (resolved == null) { + config.logger.warnOnce(`\n${url} doesn't exist at build time, it will remain unchanged to be resolved at runtime`); + const importExpression = `\nimport ${JSON.stringify(url)}`; + js = js.replace(importExpression, ''); + } + else { + s.remove(start, end); + } + } + processedHtml.set(id, s.toString()); + // inject module preload polyfill only when configured and needed + const { modulePreload } = config.build; + if (modulePreload !== false && + modulePreload.polyfill && + (someScriptsAreAsync || someScriptsAreDefer)) { + js = `import "${modulePreloadPolyfillId}";\n${js}`; + } + // Force rollup to keep this module from being shared between other entry points. + // If the resulting chunk is empty, it will be removed in generateBundle. + return { code: js, moduleSideEffects: 'no-treeshake' }; + } + }, + async generateBundle(options, bundle) { + const analyzedChunk = new Map(); + const inlineEntryChunk = new Set(); + const getImportedChunks = (chunk, seen = new Set()) => { + const chunks = []; + chunk.imports.forEach((file) => { + const importee = bundle[file]; + if (importee?.type === 'chunk' && !seen.has(file)) { + seen.add(file); + // post-order traversal + chunks.push(...getImportedChunks(importee, seen)); + chunks.push(importee); + } + }); + return chunks; + }; + const toScriptTag = (chunk, toOutputPath, isAsync) => ({ + tag: 'script', + attrs: { + ...(isAsync ? { async: true } : {}), + type: 'module', + // crossorigin must be set not only for serving assets in a different origin + // but also to make it possible to preload the script using ``. + // ``); + preTransformRequest(server, modulePath, base); + }; + await traverseHtml(html, filename, (node) => { + if (!nodeIsElement(node)) { + return; + } + // script tags + if (node.nodeName === 'script') { + const { src, sourceCodeLocation, isModule } = getScriptInfo(node); + if (src) { + const processedUrl = processNodeUrl(src.value, isSrcSet(src), config, htmlPath, originalUrl, server, !isModule); + if (processedUrl !== src.value) { + overwriteAttrValue(s, sourceCodeLocation, processedUrl); + } + } + else if (isModule && node.childNodes.length) { + addInlineModule(node, 'js'); + } + else if (node.childNodes.length) { + const scriptNode = node.childNodes[node.childNodes.length - 1]; + for (const { url, start, end, } of extractImportExpressionFromClassicScript(scriptNode)) { + const processedUrl = processNodeUrl(url, false, config, htmlPath, originalUrl); + if (processedUrl !== url) { + s.update(start, end, processedUrl); + } + } + } + } + const inlineStyle = findNeedTransformStyleAttribute(node); + if (inlineStyle) { + inlineModuleIndex++; + inlineStyles.push({ + index: inlineModuleIndex, + location: inlineStyle.location, + code: inlineStyle.attr.value, + }); + } + if (node.nodeName === 'style' && node.childNodes.length) { + const children = node.childNodes[0]; + styleUrl.push({ + start: children.sourceCodeLocation.startOffset, + end: children.sourceCodeLocation.endOffset, + code: children.value, + }); + } + // elements with [href/src] attrs + const assetAttrs = assetAttrsConfig[node.nodeName]; + if (assetAttrs) { + for (const p of node.attrs) { + const attrKey = getAttrKey(p); + if (p.value && assetAttrs.includes(attrKey)) { + const processedUrl = processNodeUrl(p.value, isSrcSet(p), config, htmlPath, originalUrl); + if (processedUrl !== p.value) { + overwriteAttrValue(s, node.sourceCodeLocation.attrs[attrKey], processedUrl); + } + } + } + } + }); + await Promise.all([ + ...styleUrl.map(async ({ start, end, code }, index) => { + const url = `${proxyModulePath}?html-proxy&direct&index=${index}.css`; + // ensure module in graph after successful load + const mod = await moduleGraph.ensureEntryFromUrl(url, false); + ensureWatchedFile(watcher, mod.file, config.root); + const result = await server.pluginContainer.transform(code, mod.id); + let content = ''; + if (result) { + if (result.map && 'version' in result.map) { + if (result.map.mappings) { + await injectSourcesContent(result.map, proxyModulePath, config.logger); + } + content = getCodeWithSourcemap('css', result.code, result.map); + } + else { + content = result.code; + } + } + s.overwrite(start, end, content); + }), + ...inlineStyles.map(async ({ index, location, code }) => { + // will transform with css plugin and cache result with css-post plugin + const url = `${proxyModulePath}?html-proxy&inline-css&style-attr&index=${index}.css`; + const mod = await moduleGraph.ensureEntryFromUrl(url, false); + ensureWatchedFile(watcher, mod.file, config.root); + await server?.pluginContainer.transform(code, mod.id); + const hash = getHash(cleanUrl(mod.id)); + const result = htmlProxyResult.get(`${hash}_${index}`); + overwriteAttrValue(s, location, result ?? ''); + }), + ]); + html = s.toString(); + return { + html, + tags: [ + { + tag: 'script', + attrs: { + type: 'module', + src: path$o.posix.join(base, CLIENT_PUBLIC_PATH), + }, + injectTo: 'head-prepend', + }, + ], + }; +}; +function indexHtmlMiddleware(root, server) { + const isDev = isDevServer(server); + const fsUtils = getFsUtils(server.config); + // Keep the named function. The name is visible in debug logs via `DEBUG=connect:dispatcher ...` + return async function viteIndexHtmlMiddleware(req, res, next) { + if (res.writableEnded) { + return next(); + } + const url = req.url && cleanUrl(req.url); + // htmlFallbackMiddleware appends '.html' to URLs + if (url?.endsWith('.html') && req.headers['sec-fetch-dest'] !== 'script') { + let filePath; + if (isDev && url.startsWith(FS_PREFIX)) { + filePath = decodeURIComponent(fsPathFromId(url)); + } + else { + filePath = path$o.join(root, decodeURIComponent(url)); + } + if (fsUtils.existsSync(filePath)) { + const headers = isDev + ? server.config.server.headers + : server.config.preview.headers; + try { + let html = await fsp.readFile(filePath, 'utf-8'); + if (isDev) { + html = await server.transformIndexHtml(url, html, req.originalUrl); + } + return send(req, res, html, 'html', { headers }); + } + catch (e) { + return next(e); + } + } + } + next(); + }; +} +function preTransformRequest(server, url, base) { + if (!server.config.server.preTransformRequests) + return; + // transform all url as non-ssr as html includes client-side assets only + try { + url = unwrapId(stripBase(decodeURI(url), base)); + } + catch { + // ignore + return; + } + server.warmupRequest(url); +} + +const logTime = createDebugger('vite:time'); +function timeMiddleware(root) { + // Keep the named function. The name is visible in debug logs via `DEBUG=connect:dispatcher ...` + return function viteTimeMiddleware(req, res, next) { + const start = performance.now(); + const end = res.end; + res.end = (...args) => { + logTime?.(`${timeFrom(start)} ${prettifyUrl(req.url, root)}`); + return end.call(res, ...args); + }; + next(); + }; +} + +class ModuleNode { + /** + * Public served url path, starts with / + */ + url; + /** + * Resolved file system path + query + */ + id = null; + file = null; + type; + info; + meta; + importers = new Set(); + clientImportedModules = new Set(); + ssrImportedModules = new Set(); + acceptedHmrDeps = new Set(); + acceptedHmrExports = null; + importedBindings = null; + isSelfAccepting; + transformResult = null; + ssrTransformResult = null; + ssrModule = null; + ssrError = null; + lastHMRTimestamp = 0; + lastInvalidationTimestamp = 0; + /** + * If the module only needs to update its imports timestamp (e.g. within an HMR chain), + * it is considered soft-invalidated. In this state, its `transformResult` should exist, + * and the next `transformRequest` for this module will replace the timestamps. + * + * By default the value is `undefined` if it's not soft/hard-invalidated. If it gets + * soft-invalidated, this will contain the previous `transformResult` value. If it gets + * hard-invalidated, this will be set to `'HARD_INVALIDATED'`. + * @internal + */ + invalidationState; + /** + * @internal + */ + ssrInvalidationState; + /** + * The module urls that are statically imported in the code. This information is separated + * out from `importedModules` as only importers that statically import the module can be + * soft invalidated. Other imports (e.g. watched files) needs the importer to be hard invalidated. + * @internal + */ + staticImportedUrls; + /** + * @param setIsSelfAccepting - set `false` to set `isSelfAccepting` later. e.g. #7870 + */ + constructor(url, setIsSelfAccepting = true) { + this.url = url; + this.type = isDirectCSSRequest(url) ? 'css' : 'js'; + if (setIsSelfAccepting) { + this.isSelfAccepting = false; + } + } + get importedModules() { + const importedModules = new Set(this.clientImportedModules); + for (const module of this.ssrImportedModules) { + importedModules.add(module); + } + return importedModules; + } +} +class ModuleGraph { + resolveId; + urlToModuleMap = new Map(); + idToModuleMap = new Map(); + etagToModuleMap = new Map(); + // a single file may corresponds to multiple modules with different queries + fileToModulesMap = new Map(); + safeModulesPath = new Set(); + /** + * @internal + */ + _unresolvedUrlToModuleMap = new Map(); + /** + * @internal + */ + _ssrUnresolvedUrlToModuleMap = new Map(); + constructor(resolveId) { + this.resolveId = resolveId; + } + async getModuleByUrl(rawUrl, ssr) { + // Quick path, if we already have a module for this rawUrl (even without extension) + rawUrl = removeImportQuery(removeTimestampQuery(rawUrl)); + const mod = this._getUnresolvedUrlToModule(rawUrl, ssr); + if (mod) { + return mod; + } + const [url] = await this._resolveUrl(rawUrl, ssr); + return this.urlToModuleMap.get(url); + } + getModuleById(id) { + return this.idToModuleMap.get(removeTimestampQuery(id)); + } + getModulesByFile(file) { + return this.fileToModulesMap.get(file); + } + onFileChange(file) { + const mods = this.getModulesByFile(file); + if (mods) { + const seen = new Set(); + mods.forEach((mod) => { + this.invalidateModule(mod, seen); + }); + } + } + invalidateModule(mod, seen = new Set(), timestamp = Date.now(), isHmr = false, + /** @internal */ + softInvalidate = false) { + const prevInvalidationState = mod.invalidationState; + const prevSsrInvalidationState = mod.ssrInvalidationState; + // Handle soft invalidation before the `seen` check, as consecutive soft/hard invalidations can + // cause the final soft invalidation state to be different. + // If soft invalidated, save the previous `transformResult` so that we can reuse and transform the + // import timestamps only in `transformRequest`. If there's no previous `transformResult`, hard invalidate it. + if (softInvalidate) { + mod.invalidationState ??= mod.transformResult ?? 'HARD_INVALIDATED'; + mod.ssrInvalidationState ??= mod.ssrTransformResult ?? 'HARD_INVALIDATED'; + } + // If hard invalidated, further soft invalidations have no effect until it's reset to `undefined` + else { + mod.invalidationState = 'HARD_INVALIDATED'; + mod.ssrInvalidationState = 'HARD_INVALIDATED'; + } + // Skip updating the module if it was already invalidated before and the invalidation state has not changed + if (seen.has(mod) && + prevInvalidationState === mod.invalidationState && + prevSsrInvalidationState === mod.ssrInvalidationState) { + return; + } + seen.add(mod); + if (isHmr) { + mod.lastHMRTimestamp = timestamp; + } + else { + // Save the timestamp for this invalidation, so we can avoid caching the result of possible already started + // processing being done for this module + mod.lastInvalidationTimestamp = timestamp; + } + // Don't invalidate mod.info and mod.meta, as they are part of the processing pipeline + // Invalidating the transform result is enough to ensure this module is re-processed next time it is requested + const etag = mod.transformResult?.etag; + if (etag) + this.etagToModuleMap.delete(etag); + mod.transformResult = null; + mod.ssrTransformResult = null; + mod.ssrModule = null; + mod.ssrError = null; + mod.importers.forEach((importer) => { + if (!importer.acceptedHmrDeps.has(mod)) { + // If the importer statically imports the current module, we can soft-invalidate the importer + // to only update the import timestamps. If it's not statically imported, e.g. watched/glob file, + // we can only soft invalidate if the current module was also soft-invalidated. A soft-invalidation + // doesn't need to trigger a re-load and re-transform of the importer. + const shouldSoftInvalidateImporter = importer.staticImportedUrls?.has(mod.url) || softInvalidate; + this.invalidateModule(importer, seen, timestamp, isHmr, shouldSoftInvalidateImporter); + } + }); + } + invalidateAll() { + const timestamp = Date.now(); + const seen = new Set(); + this.idToModuleMap.forEach((mod) => { + this.invalidateModule(mod, seen, timestamp); + }); + } + /** + * Update the module graph based on a module's updated imports information + * If there are dependencies that no longer have any importers, they are + * returned as a Set. + * + * @param staticImportedUrls Subset of `importedModules` where they're statically imported in code. + * This is only used for soft invalidations so `undefined` is fine but may cause more runtime processing. + */ + async updateModuleInfo(mod, importedModules, importedBindings, acceptedModules, acceptedExports, isSelfAccepting, ssr, + /** @internal */ + staticImportedUrls) { + mod.isSelfAccepting = isSelfAccepting; + const prevImports = ssr ? mod.ssrImportedModules : mod.clientImportedModules; + let noLongerImported; + let resolvePromises = []; + let resolveResults = new Array(importedModules.size); + let index = 0; + // update import graph + for (const imported of importedModules) { + const nextIndex = index++; + if (typeof imported === 'string') { + resolvePromises.push(this.ensureEntryFromUrl(imported, ssr).then((dep) => { + dep.importers.add(mod); + resolveResults[nextIndex] = dep; + })); + } + else { + imported.importers.add(mod); + resolveResults[nextIndex] = imported; + } + } + if (resolvePromises.length) { + await Promise.all(resolvePromises); + } + const nextImports = new Set(resolveResults); + if (ssr) { + mod.ssrImportedModules = nextImports; + } + else { + mod.clientImportedModules = nextImports; + } + // remove the importer from deps that were imported but no longer are. + prevImports.forEach((dep) => { + if (!mod.clientImportedModules.has(dep) && + !mod.ssrImportedModules.has(dep)) { + dep.importers.delete(mod); + if (!dep.importers.size) { + (noLongerImported || (noLongerImported = new Set())).add(dep); + } + } + }); + // update accepted hmr deps + resolvePromises = []; + resolveResults = new Array(acceptedModules.size); + index = 0; + for (const accepted of acceptedModules) { + const nextIndex = index++; + if (typeof accepted === 'string') { + resolvePromises.push(this.ensureEntryFromUrl(accepted, ssr).then((dep) => { + resolveResults[nextIndex] = dep; + })); + } + else { + resolveResults[nextIndex] = accepted; + } + } + if (resolvePromises.length) { + await Promise.all(resolvePromises); + } + mod.acceptedHmrDeps = new Set(resolveResults); + mod.staticImportedUrls = staticImportedUrls; + // update accepted hmr exports + mod.acceptedHmrExports = acceptedExports; + mod.importedBindings = importedBindings; + return noLongerImported; + } + async ensureEntryFromUrl(rawUrl, ssr, setIsSelfAccepting = true) { + return this._ensureEntryFromUrl(rawUrl, ssr, setIsSelfAccepting); + } + /** + * @internal + */ + async _ensureEntryFromUrl(rawUrl, ssr, setIsSelfAccepting = true, + // Optimization, avoid resolving the same url twice if the caller already did it + resolved) { + // Quick path, if we already have a module for this rawUrl (even without extension) + rawUrl = removeImportQuery(removeTimestampQuery(rawUrl)); + let mod = this._getUnresolvedUrlToModule(rawUrl, ssr); + if (mod) { + return mod; + } + const modPromise = (async () => { + const [url, resolvedId, meta] = await this._resolveUrl(rawUrl, ssr, resolved); + mod = this.idToModuleMap.get(resolvedId); + if (!mod) { + mod = new ModuleNode(url, setIsSelfAccepting); + if (meta) + mod.meta = meta; + this.urlToModuleMap.set(url, mod); + mod.id = resolvedId; + this.idToModuleMap.set(resolvedId, mod); + const file = (mod.file = cleanUrl(resolvedId)); + let fileMappedModules = this.fileToModulesMap.get(file); + if (!fileMappedModules) { + fileMappedModules = new Set(); + this.fileToModulesMap.set(file, fileMappedModules); + } + fileMappedModules.add(mod); + } + // multiple urls can map to the same module and id, make sure we register + // the url to the existing module in that case + else if (!this.urlToModuleMap.has(url)) { + this.urlToModuleMap.set(url, mod); + } + this._setUnresolvedUrlToModule(rawUrl, mod, ssr); + return mod; + })(); + // Also register the clean url to the module, so that we can short-circuit + // resolving the same url twice + this._setUnresolvedUrlToModule(rawUrl, modPromise, ssr); + return modPromise; + } + // some deps, like a css file referenced via @import, don't have its own + // url because they are inlined into the main css import. But they still + // need to be represented in the module graph so that they can trigger + // hmr in the importing css file. + createFileOnlyEntry(file) { + file = normalizePath$3(file); + let fileMappedModules = this.fileToModulesMap.get(file); + if (!fileMappedModules) { + fileMappedModules = new Set(); + this.fileToModulesMap.set(file, fileMappedModules); + } + const url = `${FS_PREFIX}${file}`; + for (const m of fileMappedModules) { + if (m.url === url || m.id === file) { + return m; + } + } + const mod = new ModuleNode(url); + mod.file = file; + fileMappedModules.add(mod); + return mod; + } + // for incoming urls, it is important to: + // 1. remove the HMR timestamp query (?t=xxxx) and the ?import query + // 2. resolve its extension so that urls with or without extension all map to + // the same module + async resolveUrl(url, ssr) { + url = removeImportQuery(removeTimestampQuery(url)); + const mod = await this._getUnresolvedUrlToModule(url, ssr); + if (mod?.id) { + return [mod.url, mod.id, mod.meta]; + } + return this._resolveUrl(url, ssr); + } + updateModuleTransformResult(mod, result, ssr) { + if (ssr) { + mod.ssrTransformResult = result; + } + else { + const prevEtag = mod.transformResult?.etag; + if (prevEtag) + this.etagToModuleMap.delete(prevEtag); + mod.transformResult = result; + if (result?.etag) + this.etagToModuleMap.set(result.etag, mod); + } + } + getModuleByEtag(etag) { + return this.etagToModuleMap.get(etag); + } + /** + * @internal + */ + _getUnresolvedUrlToModule(url, ssr) { + return (ssr ? this._ssrUnresolvedUrlToModuleMap : this._unresolvedUrlToModuleMap).get(url); + } + /** + * @internal + */ + _setUnresolvedUrlToModule(url, mod, ssr) { + (ssr + ? this._ssrUnresolvedUrlToModuleMap + : this._unresolvedUrlToModuleMap).set(url, mod); + } + /** + * @internal + */ + async _resolveUrl(url, ssr, alreadyResolved) { + const resolved = alreadyResolved ?? (await this.resolveId(url, !!ssr)); + const resolvedId = resolved?.id || url; + if (url !== resolvedId && + !url.includes('\0') && + !url.startsWith(`virtual:`)) { + const ext = extname$1(cleanUrl(resolvedId)); + if (ext) { + const pathname = cleanUrl(url); + if (!pathname.endsWith(ext)) { + url = pathname + ext + url.slice(pathname.length); + } + } + } + return [url, resolvedId, resolved?.meta]; + } +} + +function notFoundMiddleware() { + // Keep the named function. The name is visible in debug logs via `DEBUG=connect:dispatcher ...` + return function vite404Middleware(_, res) { + res.statusCode = 404; + res.end(); + }; +} + +function warmupFiles(server) { + const options = server.config.server.warmup; + const root = server.config.root; + if (options?.clientFiles?.length) { + mapFiles(options.clientFiles, root).then((files) => { + for (const file of files) { + warmupFile(server, file, false); + } + }); + } + if (options?.ssrFiles?.length) { + mapFiles(options.ssrFiles, root).then((files) => { + for (const file of files) { + warmupFile(server, file, true); + } + }); + } +} +async function warmupFile(server, file, ssr) { + // transform html with the `transformIndexHtml` hook as Vite internals would + // pre-transform the imported JS modules linked. this may cause `transformIndexHtml` + // plugins to be executed twice, but that's probably fine. + if (file.endsWith('.html')) { + const url = htmlFileToUrl(file, server.config.root); + if (url) { + try { + const html = await fsp.readFile(file, 'utf-8'); + await server.transformIndexHtml(url, html); + } + catch (e) { + // Unexpected error, log the issue but avoid an unhandled exception + server.config.logger.error(`Pre-transform error (${colors$1.cyan(file)}): ${e.message}`, { + error: e, + timestamp: true, + }); + } + } + } + // for other files, pass it through `transformRequest` with warmup + else { + const url = fileToUrl(file, server.config.root); + await server.warmupRequest(url, { ssr }); + } +} +function htmlFileToUrl(file, root) { + const url = path$o.relative(root, file); + // out of root, ignore file + if (url[0] === '.') + return; + // file within root, create root-relative url + return '/' + normalizePath$3(url); +} +function fileToUrl(file, root) { + const url = path$o.relative(root, file); + // out of root, use /@fs/ prefix + if (url[0] === '.') { + return path$o.posix.join(FS_PREFIX, normalizePath$3(file)); + } + // file within root, create root-relative url + return '/' + normalizePath$3(url); +} +function mapFiles(files, root) { + return glob(files, { + cwd: root, + absolute: true, + }); +} + +function createServer(inlineConfig = {}) { + return _createServer(inlineConfig, { hotListen: true }); +} +async function _createServer(inlineConfig = {}, options) { + const config = await resolveConfig(inlineConfig, 'serve'); + const initPublicFilesPromise = initPublicFiles(config); + const { root, server: serverConfig } = config; + const httpsOptions = await resolveHttpsConfig(config.server.https); + const { middlewareMode } = serverConfig; + const resolvedWatchOptions = resolveChokidarOptions(config, { + disableGlobbing: true, + ...serverConfig.watch, + }); + const middlewares = connect$1(); + const httpServer = middlewareMode + ? null + : await resolveHttpServer(serverConfig, middlewares, httpsOptions); + const ws = createWebSocketServer(httpServer, config, httpsOptions); + const hot = createHMRBroadcaster() + .addChannel(ws) + .addChannel(createServerHMRChannel()); + if (typeof config.server.hmr === 'object' && config.server.hmr.channels) { + config.server.hmr.channels.forEach((channel) => hot.addChannel(channel)); + } + if (httpServer) { + setClientErrorHandler(httpServer, config.logger); + } + // eslint-disable-next-line eqeqeq + const watchEnabled = serverConfig.watch !== null; + const watcher = watchEnabled + ? chokidar.watch( + // config file dependencies and env file might be outside of root + [ + root, + ...config.configFileDependencies, + ...getEnvFilesForMode(config.mode, config.envDir), + ], resolvedWatchOptions) + : createNoopWatcher(resolvedWatchOptions); + const moduleGraph = new ModuleGraph((url, ssr) => container.resolveId(url, undefined, { ssr })); + const container = await createPluginContainer(config, moduleGraph, watcher); + const closeHttpServer = createServerCloseFn(httpServer); + let exitProcess; + const devHtmlTransformFn = createDevHtmlTransformFn(config); + let server = { + config, + middlewares, + httpServer, + watcher, + pluginContainer: container, + ws, + hot, + moduleGraph, + resolvedUrls: null, + ssrTransform(code, inMap, url, originalCode = code) { + return ssrTransform(code, inMap, url, originalCode, server.config); + }, + transformRequest(url, options) { + return transformRequest(url, server, options); + }, + async warmupRequest(url, options) { + await transformRequest(url, server, options).catch((e) => { + if (e?.code === ERR_OUTDATED_OPTIMIZED_DEP || + e?.code === ERR_CLOSED_SERVER) { + // these are expected errors + return; + } + // Unexpected error, log the issue but avoid an unhandled exception + server.config.logger.error(`Pre-transform error: ${e.message}`, { + error: e, + timestamp: true, + }); + }); + }, + transformIndexHtml(url, html, originalUrl) { + return devHtmlTransformFn(server, url, html, originalUrl); + }, + async ssrLoadModule(url, opts) { + return ssrLoadModule(url, server, undefined, undefined, opts?.fixStacktrace); + }, + async ssrFetchModule(url, importer) { + return ssrFetchModule(server, url, importer); + }, + ssrFixStacktrace(e) { + ssrFixStacktrace(e, moduleGraph); + }, + ssrRewriteStacktrace(stack) { + return ssrRewriteStacktrace(stack, moduleGraph); + }, + async reloadModule(module) { + if (serverConfig.hmr !== false && module.file) { + updateModules(module.file, [module], Date.now(), server); + } + }, + async listen(port, isRestart) { + await startServer(server, port); + if (httpServer) { + server.resolvedUrls = await resolveServerUrls(httpServer, config.server, config); + if (!isRestart && config.server.open) + server.openBrowser(); + } + return server; + }, + openBrowser() { + const options = server.config.server; + const url = server.resolvedUrls?.local[0] ?? server.resolvedUrls?.network[0]; + if (url) { + const path = typeof options.open === 'string' + ? new URL(options.open, url).href + : url; + // We know the url that the browser would be opened to, so we can + // start the request while we are awaiting the browser. This will + // start the crawling of static imports ~500ms before. + // preTransformRequests needs to be enabled for this optimization. + if (server.config.server.preTransformRequests) { + setTimeout(() => { + const getMethod = path.startsWith('https:') ? get$1 : get$2; + getMethod(path, { + headers: { + // Allow the history middleware to redirect to /index.html + Accept: 'text/html', + }, + }, (res) => { + res.on('end', () => { + // Ignore response, scripts discovered while processing the entry + // will be preprocessed (server.config.server.preTransformRequests) + }); + }) + .on('error', () => { + // Ignore errors + }) + .end(); + }, 0); + } + openBrowser(path, true, server.config.logger); + } + else { + server.config.logger.warn('No URL available to open in browser'); + } + }, + async close() { + if (!middlewareMode) { + process.off('SIGTERM', exitProcess); + if (process.env.CI !== 'true') { + process.stdin.off('end', exitProcess); + } + } + await Promise.allSettled([ + watcher.close(), + hot.close(), + container.close(), + getDepsOptimizer(server.config)?.close(), + getDepsOptimizer(server.config, true)?.close(), + closeHttpServer(), + ]); + // Await pending requests. We throw early in transformRequest + // and in hooks if the server is closing for non-ssr requests, + // so the import analysis plugin stops pre-transforming static + // imports and this block is resolved sooner. + // During SSR, we let pending requests finish to avoid exposing + // the server closed error to the users. + while (server._pendingRequests.size > 0) { + await Promise.allSettled([...server._pendingRequests.values()].map((pending) => pending.request)); + } + server.resolvedUrls = null; + }, + printUrls() { + if (server.resolvedUrls) { + printServerUrls(server.resolvedUrls, serverConfig.host, config.logger.info); + } + else if (middlewareMode) { + throw new Error('cannot print server URLs in middleware mode.'); + } + else { + throw new Error('cannot print server URLs before server.listen is called.'); + } + }, + bindCLIShortcuts(options) { + bindCLIShortcuts(server, options); + }, + async restart(forceOptimize) { + if (!server._restartPromise) { + server._forceOptimizeOnRestart = !!forceOptimize; + server._restartPromise = restartServer(server).finally(() => { + server._restartPromise = null; + server._forceOptimizeOnRestart = false; + }); + } + return server._restartPromise; + }, + _setInternalServer(_server) { + // Rebind internal the server variable so functions reference the user + // server instance after a restart + server = _server; + }, + _restartPromise: null, + _importGlobMap: new Map(), + _forceOptimizeOnRestart: false, + _pendingRequests: new Map(), + _fsDenyGlob: picomatch$4(config.server.fs.deny, { + matchBase: true, + nocase: true, + }), + _shortcutsOptions: undefined, + }; + // maintain consistency with the server instance after restarting. + const reflexServer = new Proxy(server, { + get: (_, property) => { + return server[property]; + }, + set: (_, property, value) => { + server[property] = value; + return true; + }, + }); + if (!middlewareMode) { + exitProcess = async () => { + try { + await server.close(); + } + finally { + process.exit(); + } + }; + process.once('SIGTERM', exitProcess); + if (process.env.CI !== 'true') { + process.stdin.on('end', exitProcess); + } + } + const publicFiles = await initPublicFilesPromise; + const onHMRUpdate = async (file, configOnly) => { + if (serverConfig.hmr !== false) { + try { + await handleHMRUpdate(file, server, configOnly); + } + catch (err) { + hot.send({ + type: 'error', + err: prepareError(err), + }); + } + } + }; + const { publicDir } = config; + const onFileAddUnlink = async (file, isUnlink) => { + file = normalizePath$3(file); + await container.watchChange(file, { event: isUnlink ? 'delete' : 'create' }); + if (publicDir && publicFiles) { + if (file.startsWith(publicDir)) { + const path = file.slice(publicDir.length); + publicFiles[isUnlink ? 'delete' : 'add'](path); + if (!isUnlink) { + const moduleWithSamePath = await moduleGraph.getModuleByUrl(path); + const etag = moduleWithSamePath?.transformResult?.etag; + if (etag) { + // The public file should win on the next request over a module with the + // same path. Prevent the transform etag fast path from serving the module + moduleGraph.etagToModuleMap.delete(etag); + } + } + } + } + await handleFileAddUnlink(file, server, isUnlink); + await onHMRUpdate(file, true); + }; + watcher.on('change', async (file) => { + file = normalizePath$3(file); + await container.watchChange(file, { event: 'update' }); + // invalidate module graph cache on file change + moduleGraph.onFileChange(file); + await onHMRUpdate(file, false); + }); + getFsUtils(config).initWatcher?.(watcher); + watcher.on('add', (file) => { + onFileAddUnlink(file, false); + }); + watcher.on('unlink', (file) => { + onFileAddUnlink(file, true); + }); + hot.on('vite:invalidate', async ({ path, message }) => { + const mod = moduleGraph.urlToModuleMap.get(path); + if (mod && mod.isSelfAccepting && mod.lastHMRTimestamp > 0) { + config.logger.info(colors$1.yellow(`hmr invalidate `) + + colors$1.dim(path) + + (message ? ` ${message}` : ''), { timestamp: true }); + const file = getShortName(mod.file, config.root); + updateModules(file, [...mod.importers], mod.lastHMRTimestamp, server, true); + } + }); + if (!middlewareMode && httpServer) { + httpServer.once('listening', () => { + // update actual port since this may be different from initial value + serverConfig.port = httpServer.address().port; + }); + } + // apply server configuration hooks from plugins + const postHooks = []; + for (const hook of config.getSortedPluginHooks('configureServer')) { + postHooks.push(await hook(reflexServer)); + } + // Internal middlewares ------------------------------------------------------ + // request timer + if (process.env.DEBUG) { + middlewares.use(timeMiddleware(root)); + } + // cors (enabled by default) + const { cors } = serverConfig; + if (cors !== false) { + middlewares.use(corsMiddleware(typeof cors === 'boolean' ? {} : cors)); + } + middlewares.use(cachedTransformMiddleware(server)); + // proxy + const { proxy } = serverConfig; + if (proxy) { + const middlewareServer = (isObject$1(serverConfig.middlewareMode) + ? serverConfig.middlewareMode.server + : null) || httpServer; + middlewares.use(proxyMiddleware(middlewareServer, proxy, config)); + } + // base + if (config.base !== '/') { + middlewares.use(baseMiddleware(config.rawBase, middlewareMode)); + } + // open in editor support + middlewares.use('/__open-in-editor', launchEditorMiddleware$1()); + // ping request handler + // Keep the named function. The name is visible in debug logs via `DEBUG=connect:dispatcher ...` + middlewares.use(function viteHMRPingMiddleware(req, res, next) { + if (req.headers['accept'] === 'text/x-vite-ping') { + res.writeHead(204).end(); + } + else { + next(); + } + }); + // serve static files under /public + // this applies before the transform middleware so that these files are served + // as-is without transforms. + if (publicDir) { + middlewares.use(servePublicMiddleware(server, publicFiles)); + } + // main transform middleware + middlewares.use(transformMiddleware(server)); + // serve static files + middlewares.use(serveRawFsMiddleware(server)); + middlewares.use(serveStaticMiddleware(server)); + // html fallback + if (config.appType === 'spa' || config.appType === 'mpa') { + middlewares.use(htmlFallbackMiddleware(root, config.appType === 'spa', getFsUtils(config))); + } + // run post config hooks + // This is applied before the html middleware so that user middleware can + // serve custom content instead of index.html. + postHooks.forEach((fn) => fn && fn()); + if (config.appType === 'spa' || config.appType === 'mpa') { + // transform index.html + middlewares.use(indexHtmlMiddleware(root, server)); + // handle 404s + middlewares.use(notFoundMiddleware()); + } + // error handler + middlewares.use(errorMiddleware(server, middlewareMode)); + // httpServer.listen can be called multiple times + // when port when using next port number + // this code is to avoid calling buildStart multiple times + let initingServer; + let serverInited = false; + const initServer = async () => { + if (serverInited) + return; + if (initingServer) + return initingServer; + initingServer = (async function () { + await container.buildStart({}); + // start deps optimizer after all container plugins are ready + if (isDepsOptimizerEnabled(config, false)) { + await initDepsOptimizer(config, server); + } + warmupFiles(server); + initingServer = undefined; + serverInited = true; + })(); + return initingServer; + }; + if (!middlewareMode && httpServer) { + // overwrite listen to init optimizer before server start + const listen = httpServer.listen.bind(httpServer); + httpServer.listen = (async (port, ...args) => { + try { + // ensure ws server started + hot.listen(); + await initServer(); + } + catch (e) { + httpServer.emit('error', e); + return; + } + return listen(port, ...args); + }); + } + else { + if (options.hotListen) { + hot.listen(); + } + await initServer(); + } + return server; +} +async function startServer(server, inlinePort) { + const httpServer = server.httpServer; + if (!httpServer) { + throw new Error('Cannot call server.listen in middleware mode.'); + } + const options = server.config.server; + const hostname = await resolveHostname(options.host); + const configPort = inlinePort ?? options.port; + // When using non strict port for the dev server, the running port can be different from the config one. + // When restarting, the original port may be available but to avoid a switch of URL for the running + // browser tabs, we enforce the previously used port, expect if the config port changed. + const port = (!configPort || configPort === server._configServerPort + ? server._currentServerPort + : configPort) ?? DEFAULT_DEV_PORT; + server._configServerPort = configPort; + const serverPort = await httpServerStart(httpServer, { + port, + strictPort: options.strictPort, + host: hostname.host, + logger: server.config.logger, + }); + server._currentServerPort = serverPort; +} +function createServerCloseFn(server) { + if (!server) { + return () => Promise.resolve(); + } + let hasListened = false; + const openSockets = new Set(); + server.on('connection', (socket) => { + openSockets.add(socket); + socket.on('close', () => { + openSockets.delete(socket); + }); + }); + server.once('listening', () => { + hasListened = true; + }); + return () => new Promise((resolve, reject) => { + openSockets.forEach((s) => s.destroy()); + if (hasListened) { + server.close((err) => { + if (err) { + reject(err); + } + else { + resolve(); + } + }); + } + else { + resolve(); + } + }); +} +function resolvedAllowDir(root, dir) { + return normalizePath$3(path$o.resolve(root, dir)); +} +function resolveServerOptions(root, raw, logger) { + const server = { + preTransformRequests: true, + ...raw, + sourcemapIgnoreList: raw?.sourcemapIgnoreList === false + ? () => false + : raw?.sourcemapIgnoreList || isInNodeModules$1, + middlewareMode: !!raw?.middlewareMode, + }; + let allowDirs = server.fs?.allow; + const deny = server.fs?.deny || ['.env', '.env.*', '*.{crt,pem}']; + if (!allowDirs) { + allowDirs = [searchForWorkspaceRoot(root)]; + } + allowDirs = allowDirs.map((i) => resolvedAllowDir(root, i)); + // only push client dir when vite itself is outside-of-root + const resolvedClientDir = resolvedAllowDir(root, CLIENT_DIR); + if (!allowDirs.some((dir) => isParentDirectory(dir, resolvedClientDir))) { + allowDirs.push(resolvedClientDir); + } + server.fs = { + strict: server.fs?.strict ?? true, + allow: allowDirs, + deny, + cachedChecks: server.fs?.cachedChecks, + }; + if (server.origin?.endsWith('/')) { + server.origin = server.origin.slice(0, -1); + logger.warn(colors$1.yellow(`${colors$1.bold('(!)')} server.origin should not end with "/". Using "${server.origin}" instead.`)); + } + return server; +} +async function restartServer(server) { + global.__vite_start_time = performance.now(); + const shortcutsOptions = server._shortcutsOptions; + let inlineConfig = server.config.inlineConfig; + if (server._forceOptimizeOnRestart) { + inlineConfig = mergeConfig(inlineConfig, { + optimizeDeps: { + force: true, + }, + }); + } + // Reinit the server by creating a new instance using the same inlineConfig + // This will triger a reload of the config file and re-create the plugins and + // middlewares. We then assign all properties of the new server to the existing + // server instance and set the user instance to be used in the new server. + // This allows us to keep the same server instance for the user. + { + let newServer = null; + try { + // delay ws server listen + newServer = await _createServer(inlineConfig, { hotListen: false }); + } + catch (err) { + server.config.logger.error(err.message, { + timestamp: true, + }); + server.config.logger.error('server restart failed', { timestamp: true }); + return; + } + await server.close(); + // Assign new server props to existing server instance + const middlewares = server.middlewares; + newServer._configServerPort = server._configServerPort; + newServer._currentServerPort = server._currentServerPort; + Object.assign(server, newServer); + // Keep the same connect instance so app.use(vite.middlewares) works + // after a restart in middlewareMode (.route is always '/') + middlewares.stack = newServer.middlewares.stack; + server.middlewares = middlewares; + // Rebind internal server variable so functions reference the user server + newServer._setInternalServer(server); + } + const { logger, server: { port, middlewareMode }, } = server.config; + if (!middlewareMode) { + await server.listen(port, true); + } + else { + server.hot.listen(); + } + logger.info('server restarted.', { timestamp: true }); + if (shortcutsOptions) { + shortcutsOptions.print = false; + bindCLIShortcuts(server, shortcutsOptions); + } +} +/** + * Internal function to restart the Vite server and print URLs if changed + */ +async function restartServerWithUrls(server) { + if (server.config.server.middlewareMode) { + await server.restart(); + return; + } + const { port: prevPort, host: prevHost } = server.config.server; + const prevUrls = server.resolvedUrls; + await server.restart(); + const { logger, server: { port, host }, } = server.config; + if ((port ?? DEFAULT_DEV_PORT) !== (prevPort ?? DEFAULT_DEV_PORT) || + host !== prevHost || + diffDnsOrderChange(prevUrls, server.resolvedUrls)) { + logger.info(''); + server.printUrls(); + } +} + +var index = { + __proto__: null, + _createServer: _createServer, + createServer: createServer, + createServerCloseFn: createServerCloseFn, + resolveServerOptions: resolveServerOptions, + restartServerWithUrls: restartServerWithUrls +}; + +const debugHmr = createDebugger('vite:hmr'); +const whitespaceRE = /\s/; +const normalizedClientDir = normalizePath$3(CLIENT_DIR); +function getShortName(file, root) { + return file.startsWith(withTrailingSlash(root)) + ? path$o.posix.relative(root, file) + : file; +} +async function handleHMRUpdate(file, server, configOnly) { + const { hot, config, moduleGraph } = server; + const shortFile = getShortName(file, config.root); + const isConfig = file === config.configFile; + const isConfigDependency = config.configFileDependencies.some((name) => file === name); + const isEnv = config.inlineConfig.envFile !== false && + getEnvFilesForMode(config.mode, config.envDir).includes(file); + if (isConfig || isConfigDependency || isEnv) { + // auto restart server + debugHmr?.(`[config change] ${colors$1.dim(shortFile)}`); + config.logger.info(colors$1.green(`${path$o.relative(process.cwd(), file)} changed, restarting server...`), { clear: true, timestamp: true }); + try { + await restartServerWithUrls(server); + } + catch (e) { + config.logger.error(colors$1.red(e)); + } + return; + } + if (configOnly) { + return; + } + debugHmr?.(`[file change] ${colors$1.dim(shortFile)}`); + // (dev only) the client itself cannot be hot updated. + if (file.startsWith(withTrailingSlash(normalizedClientDir))) { + hot.send({ + type: 'full-reload', + path: '*', + }); + return; + } + const mods = moduleGraph.getModulesByFile(file); + // check if any plugin wants to perform custom HMR handling + const timestamp = Date.now(); + const hmrContext = { + file, + timestamp, + modules: mods ? [...mods] : [], + read: () => readModifiedFile(file), + server, + }; + for (const hook of config.getSortedPluginHooks('handleHotUpdate')) { + const filteredModules = await hook(hmrContext); + if (filteredModules) { + hmrContext.modules = filteredModules; + } + } + if (!hmrContext.modules.length) { + // html file cannot be hot updated + if (file.endsWith('.html')) { + config.logger.info(colors$1.green(`page reload `) + colors$1.dim(shortFile), { + clear: true, + timestamp: true, + }); + hot.send({ + type: 'full-reload', + path: config.server.middlewareMode + ? '*' + : '/' + normalizePath$3(path$o.relative(config.root, file)), + }); + } + else { + // loaded but not in the module graph, probably not js + debugHmr?.(`[no modules matched] ${colors$1.dim(shortFile)}`); + } + return; + } + updateModules(shortFile, hmrContext.modules, timestamp, server); +} +function updateModules(file, modules, timestamp, { config, hot, moduleGraph }, afterInvalidation) { + const updates = []; + const invalidatedModules = new Set(); + const traversedModules = new Set(); + let needFullReload = false; + for (const mod of modules) { + const boundaries = []; + const hasDeadEnd = propagateUpdate(mod, traversedModules, boundaries); + moduleGraph.invalidateModule(mod, invalidatedModules, timestamp, true); + if (needFullReload) { + continue; + } + if (hasDeadEnd) { + needFullReload = hasDeadEnd; + continue; + } + updates.push(...boundaries.map(({ boundary, acceptedVia, isWithinCircularImport }) => ({ + type: `${boundary.type}-update`, + timestamp, + path: normalizeHmrUrl(boundary.url), + acceptedPath: normalizeHmrUrl(acceptedVia.url), + explicitImportRequired: boundary.type === 'js' + ? isExplicitImportRequired(acceptedVia.url) + : false, + isWithinCircularImport, + // browser modules are invalidated by changing ?t= query, + // but in ssr we control the module system, so we can directly remove them form cache + ssrInvalidates: getSSRInvalidatedImporters(acceptedVia), + }))); + } + if (needFullReload) { + const reason = typeof needFullReload === 'string' + ? colors$1.dim(` (${needFullReload})`) + : ''; + config.logger.info(colors$1.green(`page reload `) + colors$1.dim(file) + reason, { clear: !afterInvalidation, timestamp: true }); + hot.send({ + type: 'full-reload', + }); + return; + } + if (updates.length === 0) { + debugHmr?.(colors$1.yellow(`no update happened `) + colors$1.dim(file)); + return; + } + config.logger.info(colors$1.green(`hmr update `) + + colors$1.dim([...new Set(updates.map((u) => u.path))].join(', ')), { clear: !afterInvalidation, timestamp: true }); + hot.send({ + type: 'update', + updates, + }); +} +function populateSSRImporters(module, timestamp, seen) { + module.ssrImportedModules.forEach((importer) => { + if (seen.has(importer)) { + return; + } + if (importer.lastHMRTimestamp === timestamp || + importer.lastInvalidationTimestamp === timestamp) { + seen.add(importer); + populateSSRImporters(importer, timestamp, seen); + } + }); + return seen; +} +function getSSRInvalidatedImporters(module) { + return [ + ...populateSSRImporters(module, module.lastHMRTimestamp, new Set()), + ].map((m) => m.file); +} +async function handleFileAddUnlink(file, server, isUnlink) { + const modules = [...(server.moduleGraph.getModulesByFile(file) || [])]; + if (isUnlink) { + for (const deletedMod of modules) { + deletedMod.importedModules.forEach((importedMod) => { + importedMod.importers.delete(deletedMod); + }); + } + } + modules.push(...getAffectedGlobModules(file, server)); + if (modules.length > 0) { + updateModules(getShortName(file, server.config.root), unique(modules), Date.now(), server); + } +} +function areAllImportsAccepted(importedBindings, acceptedExports) { + for (const binding of importedBindings) { + if (!acceptedExports.has(binding)) { + return false; + } + } + return true; +} +function propagateUpdate(node, traversedModules, boundaries, currentChain = [node]) { + if (traversedModules.has(node)) { + return false; + } + traversedModules.add(node); + // #7561 + // if the imports of `node` have not been analyzed, then `node` has not + // been loaded in the browser and we should stop propagation. + if (node.id && node.isSelfAccepting === undefined) { + debugHmr?.(`[propagate update] stop propagation because not analyzed: ${colors$1.dim(node.id)}`); + return false; + } + if (node.isSelfAccepting) { + boundaries.push({ + boundary: node, + acceptedVia: node, + isWithinCircularImport: isNodeWithinCircularImports(node, currentChain), + }); + // additionally check for CSS importers, since a PostCSS plugin like + // Tailwind JIT may register any file as a dependency to a CSS file. + for (const importer of node.importers) { + if (isCSSRequest(importer.url) && !currentChain.includes(importer)) { + propagateUpdate(importer, traversedModules, boundaries, currentChain.concat(importer)); + } + } + return false; + } + // A partially accepted module with no importers is considered self accepting, + // because the deal is "there are parts of myself I can't self accept if they + // are used outside of me". + // Also, the imported module (this one) must be updated before the importers, + // so that they do get the fresh imported module when/if they are reloaded. + if (node.acceptedHmrExports) { + boundaries.push({ + boundary: node, + acceptedVia: node, + isWithinCircularImport: isNodeWithinCircularImports(node, currentChain), + }); + } + else { + if (!node.importers.size) { + return true; + } + // #3716, #3913 + // For a non-CSS file, if all of its importers are CSS files (registered via + // PostCSS plugins) it should be considered a dead end and force full reload. + if (!isCSSRequest(node.url) && + [...node.importers].every((i) => isCSSRequest(i.url))) { + return true; + } + } + for (const importer of node.importers) { + const subChain = currentChain.concat(importer); + if (importer.acceptedHmrDeps.has(node)) { + boundaries.push({ + boundary: importer, + acceptedVia: node, + isWithinCircularImport: isNodeWithinCircularImports(importer, subChain), + }); + continue; + } + if (node.id && node.acceptedHmrExports && importer.importedBindings) { + const importedBindingsFromNode = importer.importedBindings.get(node.id); + if (importedBindingsFromNode && + areAllImportsAccepted(importedBindingsFromNode, node.acceptedHmrExports)) { + continue; + } + } + if (!currentChain.includes(importer) && + propagateUpdate(importer, traversedModules, boundaries, subChain)) { + return true; + } + } + return false; +} +/** + * Check importers recursively if it's an import loop. An accepted module within + * an import loop cannot recover its execution order and should be reloaded. + * + * @param node The node that accepts HMR and is a boundary + * @param nodeChain The chain of nodes/imports that lead to the node. + * (The last node in the chain imports the `node` parameter) + * @param currentChain The current chain tracked from the `node` parameter + * @param traversedModules The set of modules that have traversed + */ +function isNodeWithinCircularImports(node, nodeChain, currentChain = [node], traversedModules = new Set()) { + // To help visualize how each parameters work, imagine this import graph: + // + // A -> B -> C -> ACCEPTED -> D -> E -> NODE + // ^--------------------------| + // + // ACCEPTED: the node that accepts HMR. the `node` parameter. + // NODE : the initial node that triggered this HMR. + // + // This function will return true in the above graph, which: + // `node` : ACCEPTED + // `nodeChain` : [NODE, E, D, ACCEPTED] + // `currentChain` : [ACCEPTED, C, B] + // + // It works by checking if any `node` importers are within `nodeChain`, which + // means there's an import loop with a HMR-accepted module in it. + if (traversedModules.has(node)) { + return false; + } + traversedModules.add(node); + for (const importer of node.importers) { + // Node may import itself which is safe + if (importer === node) + continue; + // a PostCSS plugin like Tailwind JIT may register + // any file as a dependency to a CSS file. + // But in that case, the actual dependency chain is separate. + if (isCSSRequest(importer.url)) + continue; + // Check circular imports + const importerIndex = nodeChain.indexOf(importer); + if (importerIndex > -1) { + // Log extra debug information so users can fix and remove the circular imports + if (debugHmr) { + // Following explanation above: + // `importer` : E + // `currentChain` reversed : [B, C, ACCEPTED] + // `nodeChain` sliced & reversed : [D, E] + // Combined : [E, B, C, ACCEPTED, D, E] + const importChain = [ + importer, + ...[...currentChain].reverse(), + ...nodeChain.slice(importerIndex, -1).reverse(), + ]; + debugHmr(colors$1.yellow(`circular imports detected: `) + + importChain.map((m) => colors$1.dim(m.url)).join(' -> ')); + } + return true; + } + // Continue recursively + if (!currentChain.includes(importer)) { + const result = isNodeWithinCircularImports(importer, nodeChain, currentChain.concat(importer), traversedModules); + if (result) + return result; + } + } + return false; +} +function handlePrunedModules(mods, { hot }) { + // update the disposed modules' hmr timestamp + // since if it's re-imported, it should re-apply side effects + // and without the timestamp the browser will not re-import it! + const t = Date.now(); + mods.forEach((mod) => { + mod.lastHMRTimestamp = t; + debugHmr?.(`[dispose] ${colors$1.dim(mod.file)}`); + }); + hot.send({ + type: 'prune', + paths: [...mods].map((m) => m.url), + }); +} +/** + * Lex import.meta.hot.accept() for accepted deps. + * Since hot.accept() can only accept string literals or array of string + * literals, we don't really need a heavy @babel/parse call on the entire source. + * + * @returns selfAccepts + */ +function lexAcceptedHmrDeps(code, start, urls) { + let state = 0 /* LexerState.inCall */; + // the state can only be 2 levels deep so no need for a stack + let prevState = 0 /* LexerState.inCall */; + let currentDep = ''; + function addDep(index) { + urls.add({ + url: currentDep, + start: index - currentDep.length - 1, + end: index + 1, + }); + currentDep = ''; + } + for (let i = start; i < code.length; i++) { + const char = code.charAt(i); + switch (state) { + case 0 /* LexerState.inCall */: + case 4 /* LexerState.inArray */: + if (char === `'`) { + prevState = state; + state = 1 /* LexerState.inSingleQuoteString */; + } + else if (char === `"`) { + prevState = state; + state = 2 /* LexerState.inDoubleQuoteString */; + } + else if (char === '`') { + prevState = state; + state = 3 /* LexerState.inTemplateString */; + } + else if (whitespaceRE.test(char)) { + continue; + } + else { + if (state === 0 /* LexerState.inCall */) { + if (char === `[`) { + state = 4 /* LexerState.inArray */; + } + else { + // reaching here means the first arg is neither a string literal + // nor an Array literal (direct callback) or there is no arg + // in both case this indicates a self-accepting module + return true; // done + } + } + else if (state === 4 /* LexerState.inArray */) { + if (char === `]`) { + return false; // done + } + else if (char === ',') { + continue; + } + else { + error(i); + } + } + } + break; + case 1 /* LexerState.inSingleQuoteString */: + if (char === `'`) { + addDep(i); + if (prevState === 0 /* LexerState.inCall */) { + // accept('foo', ...) + return false; + } + else { + state = prevState; + } + } + else { + currentDep += char; + } + break; + case 2 /* LexerState.inDoubleQuoteString */: + if (char === `"`) { + addDep(i); + if (prevState === 0 /* LexerState.inCall */) { + // accept('foo', ...) + return false; + } + else { + state = prevState; + } + } + else { + currentDep += char; + } + break; + case 3 /* LexerState.inTemplateString */: + if (char === '`') { + addDep(i); + if (prevState === 0 /* LexerState.inCall */) { + // accept('foo', ...) + return false; + } + else { + state = prevState; + } + } + else if (char === '$' && code.charAt(i + 1) === '{') { + error(i); + } + else { + currentDep += char; + } + break; + default: + throw new Error('unknown import.meta.hot lexer state'); + } + } + return false; +} +function lexAcceptedHmrExports(code, start, exportNames) { + const urls = new Set(); + lexAcceptedHmrDeps(code, start, urls); + for (const { url } of urls) { + exportNames.add(url); + } + return urls.size > 0; +} +function normalizeHmrUrl(url) { + if (url[0] !== '.' && url[0] !== '/') { + url = wrapId(url); + } + return url; +} +function error(pos) { + const err = new Error(`import.meta.hot.accept() can only accept string literals or an ` + + `Array of string literals.`); + err.pos = pos; + throw err; +} +// vitejs/vite#610 when hot-reloading Vue files, we read immediately on file +// change event and sometimes this can be too early and get an empty buffer. +// Poll until the file's modified time has changed before reading again. +async function readModifiedFile(file) { + const content = await fsp.readFile(file, 'utf-8'); + if (!content) { + const mtime = (await fsp.stat(file)).mtimeMs; + for (let n = 0; n < 10; n++) { + await new Promise((r) => setTimeout(r, 10)); + const newMtime = (await fsp.stat(file)).mtimeMs; + if (newMtime !== mtime) { + break; + } + } + return await fsp.readFile(file, 'utf-8'); + } + else { + return content; + } +} +function createHMRBroadcaster() { + const channels = []; + const readyChannels = new WeakSet(); + const broadcaster = { + get channels() { + return [...channels]; + }, + addChannel(channel) { + if (channels.some((c) => c.name === channel.name)) { + throw new Error(`HMR channel "${channel.name}" is already defined.`); + } + channels.push(channel); + return broadcaster; + }, + on(event, listener) { + // emit connection event only when all channels are ready + if (event === 'connection') { + // make a copy so we don't wait for channels that might be added after this is triggered + const channels = this.channels; + channels.forEach((channel) => channel.on('connection', () => { + readyChannels.add(channel); + if (channels.every((c) => readyChannels.has(c))) { + listener(); + } + })); + return; + } + channels.forEach((channel) => channel.on(event, listener)); + return; + }, + off(event, listener) { + channels.forEach((channel) => channel.off(event, listener)); + return; + }, + send(...args) { + channels.forEach((channel) => channel.send(...args)); + }, + listen() { + channels.forEach((channel) => channel.listen()); + }, + close() { + return Promise.all(channels.map((channel) => channel.close())); + }, + }; + return broadcaster; +} +function createServerHMRChannel() { + const innerEmitter = new EventEmitter$4(); + const outsideEmitter = new EventEmitter$4(); + return { + name: 'ssr', + send(...args) { + let payload; + if (typeof args[0] === 'string') { + payload = { + type: 'custom', + event: args[0], + data: args[1], + }; + } + else { + payload = args[0]; + } + outsideEmitter.emit('send', payload); + }, + off(event, listener) { + innerEmitter.off(event, listener); + }, + on: ((event, listener) => { + innerEmitter.on(event, listener); + }), + close() { + innerEmitter.removeAllListeners(); + outsideEmitter.removeAllListeners(); + }, + listen() { + innerEmitter.emit('connection'); + }, + api: { + innerEmitter, + outsideEmitter, + }, + }; +} + +const debug$1 = createDebugger('vite:import-analysis'); +const clientDir = normalizePath$3(CLIENT_DIR); +const skipRE = /\.(?:map|json)(?:$|\?)/; +const canSkipImportAnalysis = (id) => skipRE.test(id) || isDirectCSSRequest(id); +const optimizedDepChunkRE = /\/chunk-[A-Z\d]{8}\.js/; +const optimizedDepDynamicRE = /-[A-Z\d]{8}\.js/; +const hasViteIgnoreRE = /\/\*\s*@vite-ignore\s*\*\//; +const urlIsStringRE = /^(?:'.*'|".*"|`.*`)$/; +const templateLiteralRE = /^\s*`(.*)`\s*$/; +function isExplicitImportRequired(url) { + return !isJSRequest(url) && !isCSSRequest(url); +} +function extractImportedBindings(id, source, importSpec, importedBindings) { + let bindings = importedBindings.get(id); + if (!bindings) { + bindings = new Set(); + importedBindings.set(id, bindings); + } + const isDynamic = importSpec.d > -1; + const isMeta = importSpec.d === -2; + if (isDynamic || isMeta) { + // this basically means the module will be impacted by any change in its dep + bindings.add('*'); + return; + } + const exp = source.slice(importSpec.ss, importSpec.se); + const [match0] = findStaticImports(exp); + if (!match0) { + return; + } + const parsed = parseStaticImport(match0); + if (!parsed) { + return; + } + if (parsed.namespacedImport) { + bindings.add('*'); + } + if (parsed.defaultImport) { + bindings.add('default'); + } + if (parsed.namedImports) { + for (const name of Object.keys(parsed.namedImports)) { + bindings.add(name); + } + } +} +/** + * Server-only plugin that lexes, resolves, rewrites and analyzes url imports. + * + * - Imports are resolved to ensure they exist on disk + * + * - Lexes HMR accept calls and updates import relationships in the module graph + * + * - Bare module imports are resolved (by @rollup-plugin/node-resolve) to + * absolute file paths, e.g. + * + * ```js + * import 'foo' + * ``` + * is rewritten to + * ```js + * import '/@fs//project/node_modules/foo/dist/foo.js' + * ``` + * + * - CSS imports are appended with `.js` since both the js module and the actual + * css (referenced via ``) may go through the transform pipeline: + * + * ```js + * import './style.css' + * ``` + * is rewritten to + * ```js + * import './style.css.js' + * ``` + */ +function importAnalysisPlugin(config) { + const { root, base } = config; + const fsUtils = getFsUtils(config); + const clientPublicPath = path$o.posix.join(base, CLIENT_PUBLIC_PATH); + const enablePartialAccept = config.experimental?.hmrPartialAccept; + let server; + let _env; + let _ssrEnv; + function getEnv(ssr) { + if (!_ssrEnv || !_env) { + const importMetaEnvKeys = {}; + const userDefineEnv = {}; + for (const key in config.env) { + importMetaEnvKeys[key] = JSON.stringify(config.env[key]); + } + for (const key in config.define) { + // non-import.meta.env.* is handled in `clientInjection` plugin + if (key.startsWith('import.meta.env.')) { + userDefineEnv[key.slice(16)] = config.define[key]; + } + } + const env = `import.meta.env = ${serializeDefine({ + ...importMetaEnvKeys, + SSR: '__vite_ssr__', + ...userDefineEnv, + })};`; + _ssrEnv = env.replace('__vite_ssr__', 'true'); + _env = env.replace('__vite_ssr__', 'false'); + } + return ssr ? _ssrEnv : _env; + } + return { + name: 'vite:import-analysis', + configureServer(_server) { + server = _server; + }, + async transform(source, importer, options) { + // In a real app `server` is always defined, but it is undefined when + // running src/node/server/__tests__/pluginContainer.spec.ts + if (!server) { + return null; + } + const ssr = options?.ssr === true; + if (canSkipImportAnalysis(importer)) { + debug$1?.(colors$1.dim(`[skipped] ${prettifyUrl(importer, root)}`)); + return null; + } + const msAtStart = debug$1 ? performance.now() : 0; + await init; + let imports; + let exports; + source = stripBomTag(source); + try { + [imports, exports] = parse$e(source); + } + catch (_e) { + const e = _e; + const { message, showCodeFrame } = createParseErrorInfo(importer, source); + this.error(message, showCodeFrame ? e.idx : undefined); + } + const depsOptimizer = getDepsOptimizer(config, ssr); + const { moduleGraph } = server; + // since we are already in the transform phase of the importer, it must + // have been loaded so its entry is guaranteed in the module graph. + const importerModule = moduleGraph.getModuleById(importer); + if (!importerModule) { + // This request is no longer valid. It could happen for optimized deps + // requests. A full reload is going to request this id again. + // Throwing an outdated error so we properly finish the request with a + // 504 sent to the browser. + throwOutdatedRequest(importer); + } + if (!imports.length && !this._addedImports) { + importerModule.isSelfAccepting = false; + debug$1?.(`${timeFrom(msAtStart)} ${colors$1.dim(`[no imports] ${prettifyUrl(importer, root)}`)}`); + return source; + } + let hasHMR = false; + let isSelfAccepting = false; + let hasEnv = false; + let needQueryInjectHelper = false; + let s; + const str = () => s || (s = new MagicString(source)); + let isPartiallySelfAccepting = false; + const importedBindings = enablePartialAccept + ? new Map() + : null; + const toAbsoluteUrl = (url) => path$o.posix.resolve(path$o.posix.dirname(importerModule.url), url); + const normalizeUrl = async (url, pos, forceSkipImportAnalysis = false) => { + url = stripBase(url, base); + let importerFile = importer; + const optimizeDeps = getDepOptimizationConfig(config, ssr); + if (moduleListContains(optimizeDeps?.exclude, url)) { + if (depsOptimizer) { + await depsOptimizer.scanProcessing; + // if the dependency encountered in the optimized file was excluded from the optimization + // the dependency needs to be resolved starting from the original source location of the optimized file + // because starting from node_modules/.vite will not find the dependency if it was not hoisted + // (that is, if it is under node_modules directory in the package source of the optimized file) + for (const optimizedModule of depsOptimizer.metadata.depInfoList) { + if (!optimizedModule.src) + continue; // Ignore chunks + if (optimizedModule.file === importerModule.file) { + importerFile = optimizedModule.src; + } + } + } + } + const resolved = await this.resolve(url, importerFile); + if (!resolved || resolved.meta?.['vite:alias']?.noResolved) { + // in ssr, we should let node handle the missing modules + if (ssr) { + return [url, url]; + } + // fix#9534, prevent the importerModuleNode being stopped from propagating updates + importerModule.isSelfAccepting = false; + return this.error(`Failed to resolve import "${url}" from "${normalizePath$3(path$o.relative(process.cwd(), importerFile))}". Does the file exist?`, pos); + } + if (isExternalUrl(resolved.id)) { + return [resolved.id, resolved.id]; + } + const isRelative = url[0] === '.'; + const isSelfImport = !isRelative && cleanUrl(url) === cleanUrl(importer); + // normalize all imports into resolved URLs + // e.g. `import 'foo'` -> `import '/@fs/.../node_modules/foo/index.js'` + if (resolved.id.startsWith(withTrailingSlash(root))) { + // in root: infer short absolute path from root + url = resolved.id.slice(root.length); + } + else if (depsOptimizer?.isOptimizedDepFile(resolved.id) || + // vite-plugin-react isn't following the leading \0 virtual module convention. + // This is a temporary hack to avoid expensive fs checks for React apps. + // We'll remove this as soon we're able to fix the react plugins. + (resolved.id !== '/@react-refresh' && + path$o.isAbsolute(resolved.id) && + fsUtils.existsSync(cleanUrl(resolved.id)))) { + // an optimized deps may not yet exists in the filesystem, or + // a regular file exists but is out of root: rewrite to absolute /@fs/ paths + url = path$o.posix.join(FS_PREFIX, resolved.id); + } + else { + url = resolved.id; + } + // if the resolved id is not a valid browser import specifier, + // prefix it to make it valid. We will strip this before feeding it + // back into the transform pipeline + if (url[0] !== '.' && url[0] !== '/') { + url = wrapId(resolved.id); + } + // make the URL browser-valid if not SSR + if (!ssr) { + // mark non-js/css imports with `?import` + if (isExplicitImportRequired(url)) { + url = injectQuery(url, 'import'); + } + else if ((isRelative || isSelfImport) && + !DEP_VERSION_RE.test(url)) { + // If the url isn't a request for a pre-bundled common chunk, + // for relative js/css imports, or self-module virtual imports + // (e.g. vue blocks), inherit importer's version query + // do not do this for unknown type imports, otherwise the appended + // query can break 3rd party plugin's extension checks. + const versionMatch = importer.match(DEP_VERSION_RE); + if (versionMatch) { + url = injectQuery(url, versionMatch[1]); + } + } + // check if the dep has been hmr updated. If yes, we need to attach + // its last updated timestamp to force the browser to fetch the most + // up-to-date version of this module. + try { + // delay setting `isSelfAccepting` until the file is actually used (#7870) + // We use an internal function to avoid resolving the url again + const depModule = await moduleGraph._ensureEntryFromUrl(unwrapId(url), ssr, canSkipImportAnalysis(url) || forceSkipImportAnalysis, resolved); + if (depModule.lastHMRTimestamp > 0) { + url = injectQuery(url, `t=${depModule.lastHMRTimestamp}`); + } + } + catch (e) { + // it's possible that the dep fails to resolve (non-existent import) + // attach location to the missing import + e.pos = pos; + throw e; + } + // prepend base + url = joinUrlSegments(base, url); + } + return [url, resolved.id]; + }; + const orderedImportedUrls = new Array(imports.length); + const orderedAcceptedUrls = new Array(imports.length); + const orderedAcceptedExports = new Array(imports.length); + await Promise.all(imports.map(async (importSpecifier, index) => { + const { s: start, e: end, ss: expStart, se: expEnd, d: dynamicIndex, a: attributeIndex, } = importSpecifier; + // #2083 User may use escape path, + // so use imports[index].n to get the unescaped string + let specifier = importSpecifier.n; + const rawUrl = source.slice(start, end); + // check import.meta usage + if (rawUrl === 'import.meta') { + const prop = source.slice(end, end + 4); + if (prop === '.hot') { + hasHMR = true; + const endHot = end + 4 + (source[end + 4] === '?' ? 1 : 0); + if (source.slice(endHot, endHot + 7) === '.accept') { + // further analyze accepted modules + if (source.slice(endHot, endHot + 14) === '.acceptExports') { + const importAcceptedExports = (orderedAcceptedExports[index] = + new Set()); + lexAcceptedHmrExports(source, source.indexOf('(', endHot + 14) + 1, importAcceptedExports); + isPartiallySelfAccepting = true; + } + else { + const importAcceptedUrls = (orderedAcceptedUrls[index] = + new Set()); + if (lexAcceptedHmrDeps(source, source.indexOf('(', endHot + 7) + 1, importAcceptedUrls)) { + isSelfAccepting = true; + } + } + } + } + else if (prop === '.env') { + hasEnv = true; + } + return; + } + else if (templateLiteralRE.test(rawUrl)) { + // If the import has backticks but isn't transformed as a glob import + // (as there's nothing to glob), check if it's simply a plain string. + // If so, we can replace the specifier as a plain string to prevent + // an incorrect "cannot be analyzed" warning. + if (!(rawUrl.includes('${') && rawUrl.includes('}'))) { + specifier = rawUrl.replace(templateLiteralRE, '$1'); + } + } + const isDynamicImport = dynamicIndex > -1; + // strip import attributes as we can process them ourselves + if (!isDynamicImport && attributeIndex > -1) { + str().remove(end + 1, expEnd); + } + // static import or valid string in dynamic import + // If resolvable, let's resolve it + if (specifier) { + // skip external / data uri + if (isExternalUrl(specifier) || isDataUrl(specifier)) { + return; + } + // skip ssr external + if (ssr) { + if (shouldExternalizeForSSR(specifier, importer, config)) { + return; + } + if (isBuiltin(specifier)) { + return; + } + } + // skip client + if (specifier === clientPublicPath) { + return; + } + // warn imports to non-asset /public files + if (specifier[0] === '/' && + !(config.assetsInclude(cleanUrl(specifier)) || + urlRE.test(specifier)) && + checkPublicFile(specifier, config)) { + throw new Error(`Cannot import non-asset file ${specifier} which is inside /public. ` + + `JS/CSS files inside /public are copied as-is on build and ` + + `can only be referenced via `; + case "directive": + return ``; + case null: + break; + } + return ""; +} +export { + determineIfNeedsHydrationScript, + determinesIfNeedsDirectiveScript, + getPrescripts +}; diff --git a/.pnpm-store/v3/files/70/c229b11ffdf2fbc4880e4fd3d0585ab94d9310bf5ed7f00d9efdca058e987c5fc3b8c34d8d893c6e4336cc3e2508cd9e1970a793a09a134ab3bcb41ebfa65a b/.pnpm-store/v3/files/70/c229b11ffdf2fbc4880e4fd3d0585ab94d9310bf5ed7f00d9efdca058e987c5fc3b8c34d8d893c6e4336cc3e2508cd9e1970a793a09a134ab3bcb41ebfa65a new file mode 100644 index 00000000..05d6f763 --- /dev/null +++ b/.pnpm-store/v3/files/70/c229b11ffdf2fbc4880e4fd3d0585ab94d9310bf5ed7f00d9efdca058e987c5fc3b8c34d8d893c6e4336cc3e2508cd9e1970a793a09a134ab3bcb41ebfa65a @@ -0,0 +1,920 @@ +import boxen from "boxen"; +import { diffWords } from "diff"; +import { execa } from "execa"; +import { bold, cyan, dim, green, magenta, red, yellow } from "kleur/colors"; +import fsMod, { existsSync, promises as fs } from "node:fs"; +import path from "node:path"; +import { fileURLToPath, pathToFileURL } from "node:url"; +import maxSatisfying from "semver/ranges/max-satisfying.js"; +import ora from "ora"; +import preferredPM from "preferred-pm"; +import prompts from "prompts"; +import { + loadTSConfig, + resolveConfig, + resolveConfigPath, + resolveRoot +} from "../../core/config/index.js"; +import { + defaultTSConfig, + presets, + updateTSConfigForFramework +} from "../../core/config/tsconfig.js"; +import * as msg from "../../core/messages.js"; +import { printHelp } from "../../core/messages.js"; +import { appendForwardSlash } from "../../core/path.js"; +import { apply as applyPolyfill } from "../../core/polyfill.js"; +import { ensureProcessNodeEnv, parseNpmName } from "../../core/util.js"; +import { eventCliSession, telemetry } from "../../events/index.js"; +import { createLoggerFromFlags, flagsToAstroInlineConfig } from "../flags.js"; +import { generate, parse, t, visit } from "./babel.js"; +import { ensureImport } from "./imports.js"; +import { wrapDefaultExport } from "./wrapper.js"; +const ALIASES = /* @__PURE__ */ new Map([ + ["solid", "solid-js"], + ["tailwindcss", "tailwind"] +]); +const ASTRO_CONFIG_STUB = `import { defineConfig } from 'astro/config'; + +export default defineConfig({});`; +const TAILWIND_CONFIG_STUB = `/** @type {import('tailwindcss').Config} */ +export default { + content: ['./src/**/*.{astro,html,js,jsx,md,mdx,svelte,ts,tsx,vue}'], + theme: { + extend: {}, + }, + plugins: [], +} +`; +const SVELTE_CONFIG_STUB = `import { vitePreprocess } from '@astrojs/svelte'; + +export default { + preprocess: vitePreprocess(), +}; +`; +const LIT_NPMRC_STUB = `# Lit libraries are required to be hoisted due to dependency issues. +public-hoist-pattern[]=*lit* +`; +const OFFICIAL_ADAPTER_TO_IMPORT_MAP = { + netlify: "@astrojs/netlify", + vercel: "@astrojs/vercel/serverless", + cloudflare: "@astrojs/cloudflare", + node: "@astrojs/node" +}; +let _registry; +async function getRegistry() { + if (_registry) + return _registry; + const fallback = "https://registry.npmjs.org"; + const packageManager = (await preferredPM(process.cwd()))?.name || "npm"; + try { + const { stdout } = await execa(packageManager, ["config", "get", "registry"]); + _registry = stdout?.trim()?.replace(/\/$/, "") || fallback; + if (!new URL(_registry).host) + _registry = fallback; + } catch (e) { + _registry = fallback; + } + return _registry; +} +async function add(names, { flags }) { + ensureProcessNodeEnv("production"); + const inlineConfig = flagsToAstroInlineConfig(flags); + const { userConfig } = await resolveConfig(inlineConfig, "add"); + telemetry.record(eventCliSession("add", userConfig)); + applyPolyfill(); + if (flags.help || names.length === 0) { + printHelp({ + commandName: "astro add", + usage: "[...integrations] [...adapters]", + tables: { + Flags: [ + ["--yes", "Accept all prompts."], + ["--help", "Show this help message."] + ], + "UI Frameworks": [ + ["react", "astro add react"], + ["preact", "astro add preact"], + ["vue", "astro add vue"], + ["svelte", "astro add svelte"], + ["solid-js", "astro add solid-js"], + ["lit", "astro add lit"], + ["alpinejs", "astro add alpinejs"] + ], + "Documentation Frameworks": [["starlight", "astro add starlight"]], + "SSR Adapters": [ + ["netlify", "astro add netlify"], + ["vercel", "astro add vercel"], + ["deno", "astro add deno"], + ["cloudflare", "astro add cloudflare"], + ["node", "astro add node"] + ], + Others: [ + ["tailwind", "astro add tailwind"], + ["image", "astro add image"], + ["mdx", "astro add mdx"], + ["partytown", "astro add partytown"], + ["sitemap", "astro add sitemap"], + ["prefetch", "astro add prefetch"] + ] + }, + description: `For more integrations, check out: ${cyan("https://astro.build/integrations")}` + }); + return; + } + const cwd = flags.root; + const logger = createLoggerFromFlags(flags); + const integrationNames = names.map((name) => ALIASES.has(name) ? ALIASES.get(name) : name); + const integrations = await validateIntegrations(integrationNames); + let installResult = await tryToInstallIntegrations({ integrations, cwd, flags, logger }); + const rootPath = resolveRoot(cwd); + const root = pathToFileURL(rootPath); + root.href = appendForwardSlash(root.href); + switch (installResult) { + case 1 /* updated */: { + if (integrations.find((integration) => integration.id === "tailwind")) { + await setupIntegrationConfig({ + root, + logger, + flags, + integrationName: "Tailwind", + possibleConfigFiles: [ + "./tailwind.config.cjs", + "./tailwind.config.mjs", + "./tailwind.config.ts", + "./tailwind.config.mts", + "./tailwind.config.cts", + "./tailwind.config.js" + ], + defaultConfigFile: "./tailwind.config.mjs", + defaultConfigContent: TAILWIND_CONFIG_STUB + }); + } + if (integrations.find((integration) => integration.id === "svelte")) { + await setupIntegrationConfig({ + root, + logger, + flags, + integrationName: "Svelte", + possibleConfigFiles: ["./svelte.config.js", "./svelte.config.cjs", "./svelte.config.mjs"], + defaultConfigFile: "./svelte.config.js", + defaultConfigContent: SVELTE_CONFIG_STUB + }); + } + if (integrations.find((integration) => integration.id === "lit") && (await preferredPM(fileURLToPath(root)))?.name === "pnpm") { + await setupIntegrationConfig({ + root, + logger, + flags, + integrationName: "Lit", + possibleConfigFiles: ["./.npmrc"], + defaultConfigFile: "./.npmrc", + defaultConfigContent: LIT_NPMRC_STUB + }); + } + break; + } + case 2 /* cancelled */: { + logger.info( + null, + msg.cancelled( + `Dependencies ${bold("NOT")} installed.`, + `Be sure to install them manually before continuing!` + ) + ); + break; + } + case 3 /* failure */: { + throw createPrettyError(new Error(`Unable to install dependencies`)); + } + case 0 /* none */: + break; + } + const rawConfigPath = await resolveConfigPath({ + root: rootPath, + configFile: flags.config, + fs: fsMod + }); + let configURL = rawConfigPath ? pathToFileURL(rawConfigPath) : void 0; + if (configURL) { + logger.debug("add", `Found config at ${configURL}`); + } else { + logger.info("add", `Unable to locate a config file, generating one for you.`); + configURL = new URL("./astro.config.mjs", root); + await fs.writeFile(fileURLToPath(configURL), ASTRO_CONFIG_STUB, { encoding: "utf-8" }); + } + let ast = null; + try { + ast = await parseAstroConfig(configURL); + logger.debug("add", "Parsed astro config"); + const defineConfig = t.identifier("defineConfig"); + ensureImport( + ast, + t.importDeclaration( + [t.importSpecifier(defineConfig, defineConfig)], + t.stringLiteral("astro/config") + ) + ); + wrapDefaultExport(ast, defineConfig); + logger.debug("add", "Astro config ensured `defineConfig`"); + for (const integration of integrations) { + if (isAdapter(integration)) { + const officialExportName = OFFICIAL_ADAPTER_TO_IMPORT_MAP[integration.id]; + if (officialExportName) { + await setAdapter(ast, integration, officialExportName); + } else { + logger.info( + null, + ` + ${magenta( + `Check our deployment docs for ${bold( + integration.packageName + )} to update your "adapter" config.` + )}` + ); + } + } else { + await addIntegration(ast, integration); + } + logger.debug("add", `Astro config added integration ${integration.id}`); + } + } catch (err) { + logger.debug("add", "Error parsing/modifying astro config: ", err); + throw createPrettyError(err); + } + let configResult; + if (ast) { + try { + configResult = await updateAstroConfig({ + configURL, + ast, + flags, + logger, + logAdapterInstructions: integrations.some(isAdapter) + }); + } catch (err) { + logger.debug("add", "Error updating astro config", err); + throw createPrettyError(err); + } + } + switch (configResult) { + case 2 /* cancelled */: { + logger.info(null, msg.cancelled(`Your configuration has ${bold("NOT")} been updated.`)); + break; + } + case 0 /* none */: { + const pkgURL = new URL("./package.json", configURL); + if (existsSync(fileURLToPath(pkgURL))) { + const { dependencies = {}, devDependencies = {} } = await fs.readFile(fileURLToPath(pkgURL)).then((res) => JSON.parse(res.toString())); + const deps = Object.keys(Object.assign(dependencies, devDependencies)); + const missingDeps = integrations.filter( + (integration) => !deps.includes(integration.packageName) + ); + if (missingDeps.length === 0) { + logger.info(null, msg.success(`Configuration up-to-date.`)); + break; + } + } + logger.info(null, msg.success(`Configuration up-to-date.`)); + break; + } + default: { + const list = integrations.map((integration) => ` - ${integration.packageName}`).join("\n"); + logger.info( + null, + msg.success( + `Added the following integration${integrations.length === 1 ? "" : "s"} to your project: +${list}` + ) + ); + } + } + const updateTSConfigResult = await updateTSConfig(cwd, logger, integrations, flags); + switch (updateTSConfigResult) { + case 0 /* none */: { + break; + } + case 2 /* cancelled */: { + logger.info( + null, + msg.cancelled(`Your TypeScript configuration has ${bold("NOT")} been updated.`) + ); + break; + } + case 3 /* failure */: { + throw new Error( + `Unknown error parsing tsconfig.json or jsconfig.json. Could not update TypeScript settings.` + ); + } + default: + logger.info(null, msg.success(`Successfully updated TypeScript settings`)); + } +} +function isAdapter(integration) { + return integration.type === "adapter"; +} +async function parseAstroConfig(configURL) { + const source = await fs.readFile(fileURLToPath(configURL), { encoding: "utf-8" }); + const result = parse(source); + if (!result) + throw new Error("Unknown error parsing astro config"); + if (result.errors.length > 0) + throw new Error("Error parsing astro config: " + JSON.stringify(result.errors)); + return result; +} +const toIdent = (name) => { + const ident = name.trim().replace(/[-_./]?astro(?:js)?[-_.]?/g, "").replace(/\.js/, "").replace(/[.\-_/]+([a-zA-Z])/g, (_, w) => w.toUpperCase()).replace(/^[^a-zA-Z$_]+/, ""); + return `${ident[0].toLowerCase()}${ident.slice(1)}`; +}; +function createPrettyError(err) { + err.message = `Astro could not update your astro.config.js file safely. +Reason: ${err.message} + +You will need to add these integration(s) manually. +Documentation: https://docs.astro.build/en/guides/integrations-guide/`; + return err; +} +async function addIntegration(ast, integration) { + const integrationId = t.identifier(toIdent(integration.id)); + ensureImport( + ast, + t.importDeclaration( + [t.importDefaultSpecifier(integrationId)], + t.stringLiteral(integration.packageName) + ) + ); + visit(ast, { + // eslint-disable-next-line @typescript-eslint/no-shadow + ExportDefaultDeclaration(path2) { + if (!t.isCallExpression(path2.node.declaration)) + return; + const configObject = path2.node.declaration.arguments[0]; + if (!t.isObjectExpression(configObject)) + return; + let integrationsProp = configObject.properties.find((prop) => { + if (prop.type !== "ObjectProperty") + return false; + if (prop.key.type === "Identifier") { + if (prop.key.name === "integrations") + return true; + } + if (prop.key.type === "StringLiteral") { + if (prop.key.value === "integrations") + return true; + } + return false; + }); + const integrationCall = t.callExpression(integrationId, []); + if (!integrationsProp) { + configObject.properties.push( + t.objectProperty(t.identifier("integrations"), t.arrayExpression([integrationCall])) + ); + return; + } + if (integrationsProp.value.type !== "ArrayExpression") + throw new Error("Unable to parse integrations"); + const existingIntegrationCall = integrationsProp.value.elements.find( + (expr) => t.isCallExpression(expr) && t.isIdentifier(expr.callee) && expr.callee.name === integrationId.name + ); + if (existingIntegrationCall) + return; + integrationsProp.value.elements.push(integrationCall); + } + }); +} +async function setAdapter(ast, adapter, exportName) { + const adapterId = t.identifier(toIdent(adapter.id)); + ensureImport( + ast, + t.importDeclaration([t.importDefaultSpecifier(adapterId)], t.stringLiteral(exportName)) + ); + visit(ast, { + // eslint-disable-next-line @typescript-eslint/no-shadow + ExportDefaultDeclaration(path2) { + if (!t.isCallExpression(path2.node.declaration)) + return; + const configObject = path2.node.declaration.arguments[0]; + if (!t.isObjectExpression(configObject)) + return; + let outputProp = configObject.properties.find((prop) => { + if (prop.type !== "ObjectProperty") + return false; + if (prop.key.type === "Identifier") { + if (prop.key.name === "output") + return true; + } + if (prop.key.type === "StringLiteral") { + if (prop.key.value === "output") + return true; + } + return false; + }); + if (!outputProp) { + configObject.properties.push( + t.objectProperty(t.identifier("output"), t.stringLiteral("server")) + ); + } + let adapterProp = configObject.properties.find((prop) => { + if (prop.type !== "ObjectProperty") + return false; + if (prop.key.type === "Identifier") { + if (prop.key.name === "adapter") + return true; + } + if (prop.key.type === "StringLiteral") { + if (prop.key.value === "adapter") + return true; + } + return false; + }); + let adapterCall; + switch (adapter.id) { + case "node": { + adapterCall = t.callExpression(adapterId, [ + t.objectExpression([ + t.objectProperty(t.identifier("mode"), t.stringLiteral("standalone")) + ]) + ]); + break; + } + default: { + adapterCall = t.callExpression(adapterId, []); + } + } + if (!adapterProp) { + configObject.properties.push(t.objectProperty(t.identifier("adapter"), adapterCall)); + return; + } + adapterProp.value = adapterCall; + } + }); +} +var UpdateResult = /* @__PURE__ */ ((UpdateResult2) => { + UpdateResult2[UpdateResult2["none"] = 0] = "none"; + UpdateResult2[UpdateResult2["updated"] = 1] = "updated"; + UpdateResult2[UpdateResult2["cancelled"] = 2] = "cancelled"; + UpdateResult2[UpdateResult2["failure"] = 3] = "failure"; + return UpdateResult2; +})(UpdateResult || {}); +async function updateAstroConfig({ + configURL, + ast, + flags, + logger, + logAdapterInstructions +}) { + const input = await fs.readFile(fileURLToPath(configURL), { encoding: "utf-8" }); + let output = await generate(ast); + const comment = "// https://astro.build/config"; + const defaultExport = "export default defineConfig"; + output = output.replace(` +${comment}`, ""); + output = output.replace(`${defaultExport}`, ` +${comment} +${defaultExport}`); + if (input === output) { + return 0 /* none */; + } + const diff = getDiffContent(input, output); + if (!diff) { + return 0 /* none */; + } + const message = ` +${boxen(diff, { + margin: 0.5, + padding: 0.5, + borderStyle: "round", + title: configURL.pathname.split("/").pop() + })} +`; + logger.info( + null, + ` + ${magenta("Astro will make the following changes to your config file:")} +${message}` + ); + if (logAdapterInstructions) { + logger.info( + null, + magenta( + ` For complete deployment options, visit + ${bold( + "https://docs.astro.build/en/guides/deploy/" + )} +` + ) + ); + } + if (await askToContinue({ flags })) { + await fs.writeFile(fileURLToPath(configURL), output, { encoding: "utf-8" }); + logger.debug("add", `Updated astro config`); + return 1 /* updated */; + } else { + return 2 /* cancelled */; + } +} +async function getInstallIntegrationsCommand({ + integrations, + logger, + cwd = process.cwd() +}) { + const pm = await preferredPM(cwd); + logger.debug("add", `package manager: ${JSON.stringify(pm)}`); + if (!pm) + return null; + const dependencies = await convertIntegrationsToInstallSpecifiers(integrations); + switch (pm.name) { + case "npm": + return { pm: "npm", command: "install", flags: [], dependencies }; + case "yarn": + return { pm: "yarn", command: "add", flags: [], dependencies }; + case "pnpm": + return { pm: "pnpm", command: "add", flags: [], dependencies }; + case "bun": + return { pm: "bun", command: "add", flags: [], dependencies }; + default: + return null; + } +} +async function convertIntegrationsToInstallSpecifiers(integrations) { + const ranges = {}; + for (let { packageName, dependencies } of integrations) { + ranges[packageName] = "*"; + for (const [name, range] of dependencies) { + ranges[name] = range; + } + } + return Promise.all( + Object.entries(ranges).map(([name, range]) => resolveRangeToInstallSpecifier(name, range)) + ); +} +async function resolveRangeToInstallSpecifier(name, range) { + const versions = await fetchPackageVersions(name); + if (versions instanceof Error) + return name; + const stableVersions = versions.filter((v) => !v.includes("-")); + const maxStable = maxSatisfying(stableVersions, range); + return `${name}@^${maxStable}`; +} +const INHERITED_FLAGS = /* @__PURE__ */ new Set([ + "P", + "save-prod", + "D", + "save-dev", + "E", + "save-exact", + "no-save" +]); +async function tryToInstallIntegrations({ + integrations, + cwd, + flags, + logger +}) { + const installCommand = await getInstallIntegrationsCommand({ integrations, cwd, logger }); + const inheritedFlags = Object.entries(flags).map(([flag]) => { + if (flag == "_") + return; + if (INHERITED_FLAGS.has(flag)) { + if (flag.length === 1) + return `-${flag}`; + return `--${flag}`; + } + }).filter(Boolean).flat(); + if (installCommand === null) { + return 0 /* none */; + } else { + const coloredOutput = `${bold(installCommand.pm)} ${installCommand.command}${[ + "", + ...installCommand.flags, + ...inheritedFlags + ].join(" ")} ${cyan(installCommand.dependencies.join(" "))}`; + const message = ` +${boxen(coloredOutput, { + margin: 0.5, + padding: 0.5, + borderStyle: "round" + })} +`; + logger.info( + null, + ` + ${magenta("Astro will run the following command:")} + ${dim( + "If you skip this step, you can always run it yourself later" + )} +${message}` + ); + if (await askToContinue({ flags })) { + const spinner = ora("Installing dependencies...").start(); + try { + await execa( + installCommand.pm, + [ + installCommand.command, + ...installCommand.flags, + ...inheritedFlags, + ...installCommand.dependencies + ], + { + cwd, + // reset NODE_ENV to ensure install command run in dev mode + env: { NODE_ENV: void 0 } + } + ); + spinner.succeed(); + return 1 /* updated */; + } catch (err) { + spinner.fail(); + logger.debug("add", "Error installing dependencies", err); + console.error("\n", err.stdout || err.message, "\n"); + return 3 /* failure */; + } + } else { + return 2 /* cancelled */; + } + } +} +async function fetchPackageJson(scope, name, tag) { + const packageName = `${scope ? `${scope}/` : ""}${name}`; + const registry = await getRegistry(); + const res = await fetch(`${registry}/${packageName}/${tag}`); + if (res.status >= 200 && res.status < 300) { + return await res.json(); + } else if (res.status === 404) { + return new Error(); + } else { + return new Error(`Failed to fetch ${registry}/${packageName}/${tag} - GET ${res.status}`); + } +} +async function fetchPackageVersions(packageName) { + const registry = await getRegistry(); + const res = await fetch(`${registry}/${packageName}`, { + headers: { accept: "application/vnd.npm.install-v1+json" } + }); + if (res.status >= 200 && res.status < 300) { + return await res.json().then((data) => Object.keys(data.versions)); + } else if (res.status === 404) { + return new Error(); + } else { + return new Error(`Failed to fetch ${registry}/${packageName} - GET ${res.status}`); + } +} +async function validateIntegrations(integrations) { + const spinner = ora("Resolving packages...").start(); + try { + const integrationEntries = await Promise.all( + integrations.map(async (integration) => { + const parsed = parseIntegrationName(integration); + if (!parsed) { + throw new Error(`${bold(integration)} does not appear to be a valid package name!`); + } + let { scope, name, tag } = parsed; + let pkgJson; + let pkgType; + if (scope && scope !== "@astrojs") { + pkgType = "third-party"; + } else { + const firstPartyPkgCheck = await fetchPackageJson("@astrojs", name, tag); + if (firstPartyPkgCheck instanceof Error) { + if (firstPartyPkgCheck.message) { + spinner.warn(yellow(firstPartyPkgCheck.message)); + } + spinner.warn( + yellow(`${bold(integration)} is not an official Astro package. Use at your own risk!`) + ); + const response = await prompts({ + type: "confirm", + name: "askToContinue", + message: "Continue?", + initial: true + }); + if (!response.askToContinue) { + throw new Error( + `No problem! Find our official integrations at ${cyan( + "https://astro.build/integrations" + )}` + ); + } + spinner.start("Resolving with third party packages..."); + pkgType = "third-party"; + } else { + pkgType = "first-party"; + pkgJson = firstPartyPkgCheck; + } + } + if (pkgType === "third-party") { + const thirdPartyPkgCheck = await fetchPackageJson(scope, name, tag); + if (thirdPartyPkgCheck instanceof Error) { + if (thirdPartyPkgCheck.message) { + spinner.warn(yellow(thirdPartyPkgCheck.message)); + } + throw new Error(`Unable to fetch ${bold(integration)}. Does the package exist?`); + } else { + pkgJson = thirdPartyPkgCheck; + } + } + const resolvedScope = pkgType === "first-party" ? "@astrojs" : scope; + const packageName = `${resolvedScope ? `${resolvedScope}/` : ""}${name}`; + let dependencies = [ + [pkgJson["name"], `^${pkgJson["version"]}`] + ]; + if (pkgJson["peerDependencies"]) { + const meta = pkgJson["peerDependenciesMeta"] || {}; + for (const peer in pkgJson["peerDependencies"]) { + const optional = meta[peer]?.optional || false; + const isAstro = peer === "astro"; + if (!optional && !isAstro) { + dependencies.push([peer, pkgJson["peerDependencies"][peer]]); + } + } + } + let integrationType; + const keywords = Array.isArray(pkgJson["keywords"]) ? pkgJson["keywords"] : []; + if (keywords.includes("astro-integration")) { + integrationType = "integration"; + } else if (keywords.includes("astro-adapter")) { + integrationType = "adapter"; + } else { + throw new Error( + `${bold( + packageName + )} doesn't appear to be an integration or an adapter. Find our official integrations at ${cyan( + "https://astro.build/integrations" + )}` + ); + } + return { id: integration, packageName, dependencies, type: integrationType }; + }) + ); + spinner.succeed(); + return integrationEntries; + } catch (e) { + if (e instanceof Error) { + spinner.fail(e.message); + process.exit(1); + } else { + throw e; + } + } +} +async function updateTSConfig(cwd = process.cwd(), logger, integrationsInfo, flags) { + const integrations = integrationsInfo.map( + (integration) => integration.id + ); + const firstIntegrationWithTSSettings = integrations.find( + (integration) => presets.has(integration) + ); + if (!firstIntegrationWithTSSettings) { + return 0 /* none */; + } + let inputConfig = await loadTSConfig(cwd); + let inputConfigText = ""; + if (inputConfig === "invalid-config" || inputConfig === "unknown-error") { + return 3 /* failure */; + } else if (inputConfig === "missing-config") { + logger.debug("add", "Couldn't find tsconfig.json or jsconfig.json, generating one"); + inputConfig = { + tsconfig: defaultTSConfig, + tsconfigFile: path.join(cwd, "tsconfig.json"), + rawConfig: { tsconfig: defaultTSConfig, tsconfigFile: path.join(cwd, "tsconfig.json") } + }; + } else { + inputConfigText = JSON.stringify(inputConfig.rawConfig.tsconfig, null, 2); + } + const configFileName = path.basename(inputConfig.tsconfigFile); + const outputConfig = updateTSConfigForFramework( + inputConfig.rawConfig.tsconfig, + firstIntegrationWithTSSettings + ); + const output = JSON.stringify(outputConfig, null, 2); + const diff = getDiffContent(inputConfigText, output); + if (!diff) { + return 0 /* none */; + } + const message = ` +${boxen(diff, { + margin: 0.5, + padding: 0.5, + borderStyle: "round", + title: configFileName + })} +`; + logger.info( + null, + ` + ${magenta(`Astro will make the following changes to your ${configFileName}:`)} +${message}` + ); + const conflictingIntegrations = [...Object.keys(presets).filter((config) => config !== "vue")]; + const hasConflictingIntegrations = integrations.filter((integration) => presets.has(integration)).length > 1 && integrations.filter((integration) => conflictingIntegrations.includes(integration)).length > 0; + if (hasConflictingIntegrations) { + logger.info( + null, + red( + ` ${bold( + "Caution:" + )} Selected UI frameworks require conflicting tsconfig.json settings, as such only settings for ${bold( + firstIntegrationWithTSSettings + )} were used. + More information: https://docs.astro.build/en/guides/typescript/#errors-typing-multiple-jsx-frameworks-at-the-same-time +` + ) + ); + } + if (await askToContinue({ flags })) { + await fs.writeFile(inputConfig.tsconfigFile, output, { + encoding: "utf-8" + }); + logger.debug("add", `Updated ${configFileName} file`); + return 1 /* updated */; + } else { + return 2 /* cancelled */; + } +} +function parseIntegrationName(spec) { + const result = parseNpmName(spec); + if (!result) + return; + let { scope, name } = result; + let tag = "latest"; + if (scope) { + name = name.replace(scope + "/", ""); + } + if (name.includes("@")) { + const tagged = name.split("@"); + name = tagged[0]; + tag = tagged[1]; + } + return { scope, name, tag }; +} +async function askToContinue({ flags }) { + if (flags.yes || flags.y) + return true; + const response = await prompts({ + type: "confirm", + name: "askToContinue", + message: "Continue?", + initial: true + }); + return Boolean(response.askToContinue); +} +function getDiffContent(input, output) { + let changes = []; + for (const change of diffWords(input, output)) { + let lines = change.value.trim().split("\n").slice(0, change.count); + if (lines.length === 0) + continue; + if (change.added) { + if (!change.value.trim()) + continue; + changes.push(change.value); + } + } + if (changes.length === 0) { + return null; + } + let diffed = output; + for (let newContent of changes) { + const coloredOutput = newContent.split("\n").map((ln) => ln ? green(ln) : "").join("\n"); + diffed = diffed.replace(newContent, coloredOutput); + } + return diffed; +} +async function setupIntegrationConfig(opts) { + const logger = opts.logger; + const possibleConfigFiles = opts.possibleConfigFiles.map( + (p) => fileURLToPath(new URL(p, opts.root)) + ); + let alreadyConfigured = false; + for (const possibleConfigPath of possibleConfigFiles) { + if (existsSync(possibleConfigPath)) { + alreadyConfigured = true; + break; + } + } + if (!alreadyConfigured) { + logger.info( + null, + ` + ${magenta(`Astro will generate a minimal ${bold(opts.defaultConfigFile)} file.`)} +` + ); + if (await askToContinue({ flags: opts.flags })) { + await fs.writeFile( + fileURLToPath(new URL(opts.defaultConfigFile, opts.root)), + opts.defaultConfigContent, + { + encoding: "utf-8" + } + ); + logger.debug("add", `Generated default ${opts.defaultConfigFile} file`); + } + } else { + logger.debug("add", `Using existing ${opts.integrationName} configuration`); + } +} +export { + add, + validateIntegrations +}; diff --git a/.pnpm-store/v3/files/70/e5d958f23658558a3809c12490614d80029b5337c23d73eddbff6b9bba11d706c7f216a229a8968e61b0d689b8c55fd28fdd25cc5b9e4ebc8414fdbea47cf1 b/.pnpm-store/v3/files/70/e5d958f23658558a3809c12490614d80029b5337c23d73eddbff6b9bba11d706c7f216a229a8968e61b0d689b8c55fd28fdd25cc5b9e4ebc8414fdbea47cf1 new file mode 100644 index 00000000..5906657b --- /dev/null +++ b/.pnpm-store/v3/files/70/e5d958f23658558a3809c12490614d80029b5337c23d73eddbff6b9bba11d706c7f216a229a8968e61b0d689b8c55fd28fdd25cc5b9e4ebc8414fdbea47cf1 @@ -0,0 +1,2690 @@ +import * as vite from 'vite'; +import { ViteDevServer, TransformResult as TransformResult$1, UserConfig as UserConfig$1, ConfigEnv, ServerOptions, DepOptimizationConfig, AliasOptions } from 'vite'; +import * as _vitest_runner from '@vitest/runner'; +import { File, Test as Test$1, Suite, TaskResultPack, Task, CancelReason, Custom, SequenceHooks, SequenceSetupFiles } from '@vitest/runner'; +import { RawSourceMap, FetchResult, ViteNodeResolveId, ModuleCacheMap, ViteNodeServerOptions } from 'vite-node'; +import { SnapshotResult, SnapshotStateOptions, SnapshotState } from '@vitest/snapshot'; +import { ExpectStatic } from '@vitest/expect'; +import { ChainableFunction } from '@vitest/runner/utils'; +import { ParsedStack, Awaitable as Awaitable$1, ErrorWithDiff, Arrayable as Arrayable$1 } from '@vitest/utils'; +import { TaskResult, Bench, Options } from 'tinybench'; +import { ViteNodeRunner } from 'vite-node/client'; +import { SnapshotManager } from '@vitest/snapshot/manager'; +import { ViteNodeServer } from 'vite-node/server'; +import { MessagePort } from 'node:worker_threads'; +import { Stats } from 'node:fs'; +import * as chai from 'chai'; + +declare const Modifier: unique symbol; +declare const Hint: unique symbol; +declare const Kind: unique symbol; +type Evaluate = T extends infer O ? { + [K in keyof O]: O[K]; +} : never; +type TReadonly = T & { + [Modifier]: 'Readonly'; +}; +type TOptional = T & { + [Modifier]: 'Optional'; +}; +type TReadonlyOptional = T & { + [Modifier]: 'ReadonlyOptional'; +}; +interface SchemaOptions { + $schema?: string; + /** Id for this schema */ + $id?: string; + /** Title of this schema */ + title?: string; + /** Description of this schema */ + description?: string; + /** Default value for this schema */ + default?: any; + /** Example values matching this schema */ + examples?: any; + [prop: string]: any; +} +interface TKind { + [Kind]: string; +} +interface TSchema extends SchemaOptions, TKind { + [Modifier]?: string; + [Hint]?: string; + params: unknown[]; + static: unknown; +} +interface NumericOptions extends SchemaOptions { + exclusiveMaximum?: N; + exclusiveMinimum?: N; + maximum?: N; + minimum?: N; + multipleOf?: N; +} +interface TBoolean extends TSchema { + [Kind]: 'Boolean'; + static: boolean; + type: 'boolean'; +} +interface TNull extends TSchema { + [Kind]: 'Null'; + static: null; + type: 'null'; +} +interface TNumber extends TSchema, NumericOptions { + [Kind]: 'Number'; + static: number; + type: 'number'; +} +type ReadonlyOptionalPropertyKeys = { + [K in keyof T]: T[K] extends TReadonlyOptional ? K : never; +}[keyof T]; +type ReadonlyPropertyKeys = { + [K in keyof T]: T[K] extends TReadonly ? K : never; +}[keyof T]; +type OptionalPropertyKeys = { + [K in keyof T]: T[K] extends TOptional ? K : never; +}[keyof T]; +type RequiredPropertyKeys = keyof Omit | ReadonlyPropertyKeys | OptionalPropertyKeys>; +type PropertiesReducer> = Evaluate<(Readonly>>> & Readonly>> & Partial>> & Required>>)>; +type PropertiesReduce = PropertiesReducer; +}>; +type TProperties = Record; +type TAdditionalProperties = undefined | TSchema | boolean; +interface ObjectOptions extends SchemaOptions { + additionalProperties?: TAdditionalProperties; + minProperties?: number; + maxProperties?: number; +} +interface TObject extends TSchema, ObjectOptions { + [Kind]: 'Object'; + static: PropertiesReduce; + additionalProperties?: TAdditionalProperties; + type: 'object'; + properties: T; + required?: string[]; +} +interface StringOptions extends SchemaOptions { + minLength?: number; + maxLength?: number; + pattern?: string; + format?: Format; + contentEncoding?: '7bit' | '8bit' | 'binary' | 'quoted-printable' | 'base64'; + contentMediaType?: string; +} +interface TString extends TSchema, StringOptions { + [Kind]: 'String'; + static: string; + type: 'string'; +} +/** Creates a TypeScript static type from a TypeBox type */ +type Static = (T & { + params: P; +})['static']; + +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + + +declare const RawSnapshotFormat: TObject<{ + callToJSON: TReadonlyOptional; + compareKeys: TReadonlyOptional; + escapeRegex: TReadonlyOptional; + escapeString: TReadonlyOptional; + highlight: TReadonlyOptional; + indent: TReadonlyOptional; + maxDepth: TReadonlyOptional; + maxWidth: TReadonlyOptional; + min: TReadonlyOptional; + printBasicPrototype: TReadonlyOptional; + printFunctionName: TReadonlyOptional; + theme: TReadonlyOptional< + TObject<{ + comment: TReadonlyOptional>; + content: TReadonlyOptional>; + prop: TReadonlyOptional>; + tag: TReadonlyOptional>; + value: TReadonlyOptional>; + }> + >; +}>; + +declare const SnapshotFormat: TObject<{ + callToJSON: TReadonlyOptional; + compareKeys: TReadonlyOptional; + escapeRegex: TReadonlyOptional; + escapeString: TReadonlyOptional; + highlight: TReadonlyOptional; + indent: TReadonlyOptional; + maxDepth: TReadonlyOptional; + maxWidth: TReadonlyOptional; + min: TReadonlyOptional; + printBasicPrototype: TReadonlyOptional; + printFunctionName: TReadonlyOptional; + theme: TReadonlyOptional< + TObject<{ + comment: TReadonlyOptional>; + content: TReadonlyOptional>; + prop: TReadonlyOptional>; + tag: TReadonlyOptional>; + value: TReadonlyOptional>; + }> + >; +}>; + +declare type SnapshotFormat = Static; + +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + + +declare type Colors = { + comment: { + close: string; + open: string; + }; + content: { + close: string; + open: string; + }; + prop: { + close: string; + open: string; + }; + tag: { + close: string; + open: string; + }; + value: { + close: string; + open: string; + }; +}; + +declare type CompareKeys = + | ((a: string, b: string) => number) + | null + | undefined; + +declare type Config = { + callToJSON: boolean; + compareKeys: CompareKeys; + colors: Colors; + escapeRegex: boolean; + escapeString: boolean; + indent: string; + maxDepth: number; + maxWidth: number; + min: boolean; + plugins: Plugins; + printBasicPrototype: boolean; + printFunctionName: boolean; + spacingInner: string; + spacingOuter: string; +}; + +declare type Indent = (arg0: string) => string; + +declare type NewPlugin = { + serialize: ( + val: any, + config: Config, + indentation: string, + depth: number, + refs: Refs, + printer: Printer, + ) => string; + test: Test; +}; + +declare type OldPlugin = { + print: ( + val: unknown, + print: Print, + indent: Indent, + options: PluginOptions, + colors: Colors, + ) => string; + test: Test; +}; + +declare type Plugin_2 = NewPlugin | OldPlugin; + + +declare type PluginOptions = { + edgeSpacing: string; + min: boolean; + spacing: string; +}; + +declare type Plugins = Array; + +declare interface PrettyFormatOptions + extends Omit { + compareKeys?: CompareKeys; + plugins?: Plugins; +} + +declare type Print = (arg0: unknown) => string; + +declare type Printer = ( + val: unknown, + config: Config, + indentation: string, + depth: number, + refs: Refs, + hasCalledToJSON?: boolean, +) => string; + +declare type Refs = Array; + +declare type Test = (arg0: any) => boolean; + +/** + * Names of clock methods that may be faked by install. + */ +type FakeMethod = + | "setTimeout" + | "clearTimeout" + | "setImmediate" + | "clearImmediate" + | "setInterval" + | "clearInterval" + | "Date" + | "nextTick" + | "hrtime" + | "requestAnimationFrame" + | "cancelAnimationFrame" + | "requestIdleCallback" + | "cancelIdleCallback" + | "performance" + | "queueMicrotask"; + +interface FakeTimerInstallOpts { + /** + * Installs fake timers with the specified unix epoch (default: 0) + */ + now?: number | Date | undefined; + + /** + * An array with names of global methods and APIs to fake. By default, `@sinonjs/fake-timers` does not replace `nextTick()` and `queueMicrotask()`. + * For instance, `FakeTimers.install({ toFake: ['setTimeout', 'nextTick'] })` will fake only `setTimeout()` and `nextTick()` + */ + toFake?: FakeMethod[] | undefined; + + /** + * The maximum number of timers that will be run when calling runAll() (default: 1000) + */ + loopLimit?: number | undefined; + + /** + * Tells @sinonjs/fake-timers to increment mocked time automatically based on the real system time shift (e.g. the mocked time will be incremented by + * 20ms for every 20ms change in the real system time) (default: false) + */ + shouldAdvanceTime?: boolean | undefined; + + /** + * Relevant only when using with shouldAdvanceTime: true. increment mocked time by advanceTimeDelta ms every advanceTimeDelta ms change + * in the real system time (default: 20) + */ + advanceTimeDelta?: number | undefined; + + /** + * Tells FakeTimers to clear 'native' (i.e. not fake) timers by delegating to their respective handlers. These are not cleared by + * default, leading to potentially unexpected behavior if timers existed prior to installing FakeTimers. (default: false) + */ + shouldClearNativeTimers?: boolean | undefined; +} + +interface ParsedFile extends File { + start: number; + end: number; +} +interface ParsedTest extends Test$1 { + start: number; + end: number; +} +interface ParsedSuite extends Suite { + start: number; + end: number; +} +interface LocalCallDefinition { + start: number; + end: number; + name: string; + type: 'suite' | 'test'; + mode: 'run' | 'skip' | 'only' | 'todo'; + task: ParsedSuite | ParsedFile | ParsedTest; +} +interface FileInformation { + file: File; + filepath: string; + parsed: string; + map: RawSourceMap | null; + definitions: LocalCallDefinition[]; +} + +declare class TypeCheckError extends Error { + message: string; + stacks: ParsedStack[]; + name: string; + constructor(message: string, stacks: ParsedStack[]); +} +interface TypecheckResults { + files: File[]; + sourceErrors: TypeCheckError[]; + time: number; +} +type Callback = []> = (...args: Args) => Awaitable; +declare class Typechecker { + protected ctx: WorkspaceProject; + private _onParseStart?; + private _onParseEnd?; + private _onWatcherRerun?; + private _result; + private _startTime; + private _output; + private _tests; + private tempConfigPath?; + private allowJs?; + private process?; + protected files: string[]; + constructor(ctx: WorkspaceProject); + setFiles(files: string[]): void; + onParseStart(fn: Callback): void; + onParseEnd(fn: Callback<[TypecheckResults]>): void; + onWatcherRerun(fn: Callback): void; + protected collectFileTests(filepath: string): Promise; + protected getFiles(): string[]; + collectTests(): Promise>; + protected markPassed(file: File): void; + protected prepareResults(output: string): Promise<{ + files: File[]; + sourceErrors: TypeCheckError[]; + time: number; + }>; + protected parseTscLikeOutput(output: string): Promise>; + clear(): Promise; + stop(): Promise; + protected ensurePackageInstalled(ctx: Vitest, checker: string): Promise; + prepare(): Promise; + getExitCode(): number | false; + getOutput(): string; + start(): Promise; + getResult(): TypecheckResults; + getTestFiles(): File[]; + getTestPacks(): TaskResultPack[]; +} + +interface ErrorOptions { + type?: string; + fullStack?: boolean; + project?: WorkspaceProject; +} +declare class Logger { + ctx: Vitest; + console: Console; + outputStream: NodeJS.WriteStream & { + fd: 1; + }; + errorStream: NodeJS.WriteStream & { + fd: 2; + }; + logUpdate: ((...text: string[]) => void) & { + clear(): void; + done(): void; + }; + private _clearScreenPending; + private _highlights; + constructor(ctx: Vitest, console?: Console); + log(...args: any[]): void; + error(...args: any[]): void; + warn(...args: any[]): void; + clearFullScreen(message: string): void; + clearScreen(message: string, force?: boolean): void; + private _clearScreen; + printError(err: unknown, options?: ErrorOptions): Promise; + clearHighlightCache(filename?: string): void; + highlight(filename: string, source: string): string; + printNoTestFound(filters?: string[]): void; + printBanner(): void; + printUnhandledErrors(errors: unknown[]): Promise; + printSourceTypeErrors(errors: TypeCheckError[]): Promise; +} + +interface InitializeProjectOptions extends UserWorkspaceConfig { + workspaceConfigPath: string; + extends?: string; +} +declare class WorkspaceProject { + path: string | number; + ctx: Vitest; + options?: InitializeProjectOptions | undefined; + configOverride: Partial | undefined; + config: ResolvedConfig; + server: ViteDevServer; + vitenode: ViteNodeServer; + runner: ViteNodeRunner; + browser?: ViteDevServer; + typechecker?: Typechecker; + closingPromise: Promise | undefined; + browserProvider: BrowserProvider | undefined; + browserState: { + files: string[]; + resolve: () => void; + reject: (v: unknown) => void; + } | undefined; + testFilesList: string[] | null; + private _globalSetups; + private _provided; + constructor(path: string | number, ctx: Vitest, options?: InitializeProjectOptions | undefined); + getName(): string; + isCore(): boolean; + provide: (key: string, value: unknown) => void; + getProvidedContext(): ProvidedContext; + initializeGlobalSetup(): Promise; + teardownGlobalSetup(): Promise; + get logger(): Logger; + getModulesByFilepath(file: string): Set; + getModuleById(id: string): vite.ModuleNode | undefined; + getSourceMapModuleById(id: string): TransformResult$1['map'] | undefined; + getBrowserSourceMapModuleById(id: string): TransformResult$1['map'] | undefined; + get reporters(): Reporter[]; + globTestFiles(filters?: string[]): Promise; + globAllTestFiles(include: string[], exclude: string[], includeSource: string[] | undefined, cwd: string): Promise; + isTestFile(id: string): boolean | null; + globFiles(include: string[], exclude: string[], cwd: string): Promise; + isTargetFile(id: string, source?: string): Promise; + isInSourceTestFile(code: string): boolean; + filterFiles(testFiles: string[], filters: string[] | undefined, dir: string): string[]; + initBrowserServer(configFile: string | undefined): Promise; + static createBasicProject(ctx: Vitest): WorkspaceProject; + static createCoreProject(ctx: Vitest): Promise; + setServer(options: UserConfig, server: ViteDevServer): Promise; + isBrowserEnabled(): boolean; + getSerializableConfig(): ResolvedConfig; + close(): Promise; + initBrowserProvider(): Promise; +} + +interface BrowserProviderInitializationOptions { + browser: string; + options?: BrowserProviderOptions; +} +interface BrowserProvider { + name: string; + getSupportedBrowsers: () => readonly string[]; + openPage: (url: string) => Awaitable$1; + close: () => Awaitable$1; + initialize(ctx: WorkspaceProject, options: BrowserProviderInitializationOptions): Awaitable$1; +} +interface BrowserProviderOptions { +} +interface BrowserConfigOptions { + /** + * if running tests in the browser should be the default + * + * @default false + */ + enabled?: boolean; + /** + * Name of the browser + */ + name: string; + /** + * Browser provider + * + * @default 'webdriverio' + */ + provider?: 'webdriverio' | 'playwright' | 'none' | (string & {}); + /** + * Options that are passed down to a browser provider. + * To support type hinting, add one of the types to your tsconfig.json "compilerOptions.types" field: + * + * - for webdriverio: `@vitest/browser/providers/webdriverio` + * - for playwright: `@vitest/browser/providers/playwright` + * + * @example + * { playwright: { launch: { devtools: true } } + */ + providerOptions?: BrowserProviderOptions; + /** + * enable headless mode + * + * @default process.env.CI + */ + headless?: boolean; + /** + * Serve API options. + * + * The default port is 63315. + */ + api?: ApiConfig | number; + /** + * Update ESM imports so they can be spied/stubbed with vi.spyOn. + * Enabled by default when running in browser. + * + * @default false + * @experimental + */ + slowHijackESM?: boolean; + /** + * Isolate test environment after each test + * + * @default true + */ + isolate?: boolean; + /** + * Run test files in parallel. Fallbacks to `test.fileParallelism`. + * + * @default test.fileParallelism + */ + fileParallelism?: boolean; +} +interface ResolvedBrowserOptions extends BrowserConfigOptions { + enabled: boolean; + headless: boolean; + isolate: boolean; + api: ApiConfig; +} + +type BuiltinPool = 'browser' | 'threads' | 'forks' | 'vmThreads' | 'vmForks' | 'typescript'; +type Pool = BuiltinPool | (string & {}); +interface PoolOptions extends Record { + /** + * Run tests in `node:worker_threads`. + * + * Test isolation (when enabled) is done by spawning a new thread for each test file. + * + * This pool is used by default. + */ + threads?: ThreadsOptions & WorkerContextOptions; + /** + * Run tests in `node:child_process` using [`fork()`](https://nodejs.org/api/child_process.html#child_processforkmodulepath-args-options) + * + * Test isolation (when enabled) is done by spawning a new child process for each test file. + */ + forks?: ForksOptions & WorkerContextOptions; + /** + * Run tests in isolated `node:vm`. + * Test files are run parallel using `node:worker_threads`. + * + * This makes tests run faster, but VM module is unstable. Your tests might leak memory. + */ + vmThreads?: ThreadsOptions & VmOptions; + /** + * Run tests in isolated `node:vm`. + * + * Test files are run parallel using `node:child_process` [`fork()`](https://nodejs.org/api/child_process.html#child_processforkmodulepath-args-options) + * + * This makes tests run faster, but VM module is unstable. Your tests might leak memory. + */ + vmForks?: ForksOptions & VmOptions; +} +interface ThreadsOptions { + /** Minimum amount of threads to use */ + minThreads?: number; + /** Maximum amount of threads to use */ + maxThreads?: number; + /** + * Run tests inside a single thread. + * + * @default false + */ + singleThread?: boolean; + /** + * Use Atomics to synchronize threads + * + * This can improve performance in some cases, but might cause segfault in older Node versions. + * + * @default false + */ + useAtomics?: boolean; +} +interface ForksOptions { + /** Minimum amount of child processes to use */ + minForks?: number; + /** Maximum amount of child processes to use */ + maxForks?: number; + /** + * Run tests inside a single fork. + * + * @default false + */ + singleFork?: boolean; +} +interface WorkerContextOptions { + /** + * Isolate test environment by recycling `worker_threads` or `child_process` after each test + * + * @default true + */ + isolate?: boolean; + /** + * Pass additional arguments to `node` process when spawning `worker_threads` or `child_process`. + * + * See [Command-line API | Node.js](https://nodejs.org/docs/latest/api/cli.html) for more information. + * + * Set to `process.execArgv` to pass all arguments of the current process. + * + * Be careful when using, it as some options may crash worker, e.g. --prof, --title. See https://github.com/nodejs/node/issues/41103 + * + * @default [] // no execution arguments are passed + */ + execArgv?: string[]; +} +interface VmOptions { + /** + * Specifies the memory limit for `worker_thread` or `child_process` before they are recycled. + * If you see memory leaks, try to tinker this value. + */ + memoryLimit?: string | number; + /** Isolation is always enabled */ + isolate?: true; + /** + * Pass additional arguments to `node` process when spawning `worker_threads` or `child_process`. + * + * See [Command-line API | Node.js](https://nodejs.org/docs/latest/api/cli.html) for more information. + * + * Set to `process.execArgv` to pass all arguments of the current process. + * + * Be careful when using, it as some options may crash worker, e.g. --prof, --title. See https://github.com/nodejs/node/issues/41103 + * + * @default [] // no execution arguments are passed + */ + execArgv?: string[]; +} + +type WorkspaceSpec = [project: WorkspaceProject, testFile: string]; +type RunWithFiles = (files: WorkspaceSpec[], invalidates?: string[]) => Awaitable$1; +interface ProcessPool { + name: string; + runTests: RunWithFiles; + close?: () => Awaitable$1; +} + +type Awaitable = T | PromiseLike; +type Nullable = T | null | undefined; +type Arrayable = T | Array; +type ArgumentsType$1 = T extends (...args: infer U) => any ? U : never; +type MutableArray = { + -readonly [k in keyof T]: T[k]; +}; +interface Constructable { + new (...args: any[]): any; +} +interface ModuleCache { + promise?: Promise; + exports?: any; + code?: string; +} +interface EnvironmentReturn { + teardown: (global: any) => Awaitable; +} +interface VmEnvironmentReturn { + getVmContext: () => { + [key: string]: any; + }; + teardown: () => Awaitable; +} +interface Environment { + name: string; + transformMode: 'web' | 'ssr'; + setupVM?: (options: Record) => Awaitable; + setup: (global: any, options: Record) => Awaitable; +} +interface UserConsoleLog { + content: string; + type: 'stdout' | 'stderr'; + taskId?: string; + time: number; + size: number; +} +interface ModuleGraphData { + graph: Record; + externalized: string[]; + inlined: string[]; +} +type OnServerRestartHandler = (reason?: string) => Promise | void; +interface ProvidedContext { +} + +declare class StateManager { + filesMap: Map; + pathsSet: Set; + idMap: Map; + taskFileMap: WeakMap; + errorsSet: Set; + processTimeoutCauses: Set; + catchError(err: unknown, type: string): void; + clearErrors(): void; + getUnhandledErrors(): unknown[]; + addProcessTimeoutCause(cause: string): void; + getProcessTimeoutCauses(): string[]; + getPaths(): string[]; + getFiles(keys?: string[]): File[]; + getFilepaths(): string[]; + getFailedFilepaths(): string[]; + collectPaths(paths?: string[]): void; + collectFiles(files?: File[]): void; + clearFiles(_project: { + config: { + name: string; + }; + }, paths?: string[]): void; + updateId(task: Task): void; + updateTasks(packs: TaskResultPack[]): void; + updateUserLog(log: UserConsoleLog): void; + getCountOfFailedTests(): number; + cancelFiles(files: string[], root: string, projectName: string): void; +} + +interface SuiteResultCache { + failed: boolean; + duration: number; +} +declare class ResultsCache { + private cache; + private workspacesKeyMap; + private cachePath; + private version; + private root; + getCachePath(): string | null; + setConfig(root: string, config: ResolvedConfig['cache']): void; + getResults(key: string): SuiteResultCache | undefined; + readFromCache(): Promise; + updateResults(files: File[]): void; + removeFromCache(filepath: string): void; + writeToCache(): Promise; +} + +interface CliOptions extends UserConfig { + /** + * Override the watch mode + */ + run?: boolean; + /** + * Retry the test suite if it crashes due to a segfault (default: true) + */ + segfaultRetry?: number; + /** + * Removes colors from the console output + */ + color?: boolean; +} +/** + * Start Vitest programmatically + * + * Returns a Vitest instance if initialized successfully. + */ +declare function startVitest(mode: VitestRunMode, cliFilters?: string[], options?: CliOptions, viteOverrides?: UserConfig$1, vitestOptions?: VitestOptions): Promise; + +type FileStatsCache = Pick; +declare class FilesStatsCache { + cache: Map; + getStats(key: string): FileStatsCache | undefined; + populateStats(root: string, specs: WorkspaceSpec[]): Promise; + updateStats(fsPath: string, key: string): Promise; + removeStats(fsPath: string): void; +} + +declare class VitestCache { + results: ResultsCache; + stats: FilesStatsCache; + getFileTestResults(key: string): SuiteResultCache | undefined; + getFileStats(key: string): { + size: number; + } | undefined; + static resolveCacheDir(root: string, dir: string | undefined, projectName: string | undefined): string; + static clearCache(options: CliOptions): Promise<{ + dir: string; + cleared: boolean; + }>; +} + +declare class VitestPackageInstaller { + ensureInstalled(dependency: string, root: string): Promise; +} + +interface VitestOptions { + packageInstaller?: VitestPackageInstaller; +} +declare class Vitest { + readonly mode: VitestRunMode; + config: ResolvedConfig; + configOverride: Partial; + server: ViteDevServer; + state: StateManager; + snapshot: SnapshotManager; + cache: VitestCache; + reporters: Reporter[]; + coverageProvider: CoverageProvider | null | undefined; + browserProvider: BrowserProvider | undefined; + logger: Logger; + pool: ProcessPool | undefined; + vitenode: ViteNodeServer; + invalidates: Set; + changedTests: Set; + filenamePattern?: string; + runningPromise?: Promise; + closingPromise?: Promise; + isCancelling: boolean; + isFirstRun: boolean; + restartsCount: number; + runner: ViteNodeRunner; + packageInstaller: VitestPackageInstaller; + private coreWorkspaceProject; + private resolvedProjects; + projects: WorkspaceProject[]; + private projectsTestFiles; + distPath: string; + constructor(mode: VitestRunMode, options?: VitestOptions); + private _onRestartListeners; + private _onClose; + private _onSetServer; + private _onCancelListeners; + setServer(options: UserConfig, server: ViteDevServer, cliOptions: UserConfig): Promise; + private createCoreProject; + getCoreWorkspaceProject(): WorkspaceProject; + getProjectByTaskId(taskId: string): WorkspaceProject; + private getWorkspaceConfigPath; + private resolveWorkspace; + private initCoverageProvider; + private initBrowserProviders; + start(filters?: string[]): Promise; + private getTestDependencies; + filterTestsBySource(specs: WorkspaceSpec[]): Promise; + getProjectsByTestFile(file: string): WorkspaceSpec[]; + initializeGlobalSetup(paths: WorkspaceSpec[]): Promise; + runFiles(paths: WorkspaceSpec[], allTestsRun: boolean): Promise; + cancelCurrentRun(reason: CancelReason): Promise; + rerunFiles(files?: string[], trigger?: string): Promise; + changeProjectName(pattern: string): Promise; + changeNamePattern(pattern: string, files?: string[], trigger?: string): Promise; + changeFilenamePattern(pattern: string): Promise; + rerunFailed(): Promise; + updateSnapshot(files?: string[]): Promise; + private _rerunTimer; + private scheduleRerun; + getModuleProjects(filepath: string): WorkspaceProject[]; + private unregisterWatcher; + private registerWatcher; + /** + * @returns A value indicating whether rerun is needed (changedTests was mutated) + */ + private handleFileChanged; + private reportCoverage; + close(): Promise; + /** + * Close the thread pool and exit the process + */ + exit(force?: boolean): Promise; + report(name: T, ...args: ArgumentsType$1): Promise; + globTestFiles(filters?: string[]): Promise; + shouldKeepServer(): boolean; + onServerRestart(fn: OnServerRestartHandler): void; + onAfterSetServer(fn: OnServerRestartHandler): void; + onCancel(fn: (reason: CancelReason) => void): void; + onClose(fn: () => void): void; +} + +interface TestSequencer { + /** + * Slicing tests into shards. Will be run before `sort`. + * Only run, if `shard` is defined. + */ + shard: (files: WorkspaceSpec[]) => Awaitable; + sort: (files: WorkspaceSpec[]) => Awaitable; +} +interface TestSequencerConstructor { + new (ctx: Vitest): TestSequencer; +} + +declare abstract class BaseReporter implements Reporter { + start: number; + end: number; + watchFilters?: string[]; + isTTY: boolean; + ctx: Vitest; + private _filesInWatchMode; + private _lastRunTimeout; + private _lastRunTimer; + private _lastRunCount; + private _timeStart; + private _offUnhandledRejection?; + constructor(); + get mode(): VitestRunMode; + onInit(ctx: Vitest): void; + relative(path: string): string; + onFinished(files?: File[], errors?: unknown[]): Promise; + onTaskUpdate(packs: TaskResultPack[]): void; + onWatcherStart(files?: File[], errors?: unknown[]): Promise; + private resetLastRunLog; + onWatcherRerun(files: string[], trigger?: string): Promise; + onUserConsoleLog(log: UserConsoleLog): void; + shouldLog(log: UserConsoleLog): boolean; + onServerRestart(reason?: string): void; + reportSummary(files: File[], errors: unknown[]): Promise; + reportTestSummary(files: File[], errors: unknown[]): Promise; + private printErrorsSummary; + reportBenchmarkSummary(files: File[]): Promise; + private printTaskErrors; + registerUnhandledRejection(): void; +} + +declare class BasicReporter extends BaseReporter { + isTTY: boolean; + reportSummary(files: File[], errors: unknown[]): Promise; +} + +interface ListRendererOptions { + renderSucceed?: boolean; + logger: Logger; + showHeap: boolean; + slowTestThreshold: number; + mode: VitestRunMode; +} +declare function createListRenderer(_tasks: Task[], options: ListRendererOptions): { + start(): any; + update(_tasks: Task[]): any; + stop(): Promise; + clear(): void; +}; + +declare class DefaultReporter extends BaseReporter { + renderer?: ReturnType; + rendererOptions: ListRendererOptions; + private renderSucceedDefault?; + onPathsCollected(paths?: string[]): void; + onTestRemoved(trigger?: string): Promise; + onCollected(): void; + onFinished(files?: _vitest_runner.File[], errors?: unknown[]): Promise; + onWatcherStart(files?: _vitest_runner.File[], errors?: unknown[]): Promise; + stopListRender(): Promise; + onWatcherRerun(files: string[], trigger?: string): Promise; + onUserConsoleLog(log: UserConsoleLog): void; +} + +interface DotRendererOptions { + logger: Logger; +} +declare function createDotRenderer(_tasks: Task[], options: DotRendererOptions): { + start(): any; + update(_tasks: Task[]): any; + stop(): Promise; + clear(): void; +}; + +declare class DotReporter extends BaseReporter { + renderer?: ReturnType; + onCollected(): void; + onFinished(files?: _vitest_runner.File[], errors?: unknown[]): Promise; + onWatcherStart(): Promise; + stopListRender(): Promise; + onWatcherRerun(files: string[], trigger?: string): Promise; + onUserConsoleLog(log: UserConsoleLog): void; +} + +type Status = 'passed' | 'failed' | 'skipped' | 'pending' | 'todo' | 'disabled'; +type Milliseconds = number; +interface Callsite { + line: number; + column: number; +} +interface JsonAssertionResult { + ancestorTitles: Array; + fullName: string; + status: Status; + title: string; + duration?: Milliseconds | null; + failureMessages: Array; + location?: Callsite | null; +} +interface JsonTestResult { + message: string; + name: string; + status: 'failed' | 'passed'; + startTime: number; + endTime: number; + assertionResults: Array; +} +interface JsonTestResults { + numFailedTests: number; + numFailedTestSuites: number; + numPassedTests: number; + numPassedTestSuites: number; + numPendingTests: number; + numPendingTestSuites: number; + numTodoTests: number; + numTotalTests: number; + numTotalTestSuites: number; + startTime: number; + success: boolean; + testResults: Array; +} +interface JsonOptions$1 { + outputFile?: string; +} +declare class JsonReporter$1 implements Reporter { + start: number; + ctx: Vitest; + options: JsonOptions$1; + constructor(options: JsonOptions$1); + onInit(ctx: Vitest): void; + protected logTasks(files: File[]): Promise; + onFinished(files?: File[]): Promise; + /** + * Writes the report to an output file if specified in the config, + * or logs it to the console otherwise. + * @param report + */ + writeReport(report: string): Promise; + protected getFailureLocation(test: Task): Promise; +} + +declare class VerboseReporter extends DefaultReporter { + constructor(); + onTaskUpdate(packs: TaskResultPack[]): void; +} + +interface Reporter { + onInit?: (ctx: Vitest) => void; + onPathsCollected?: (paths?: string[]) => Awaitable; + onCollected?: (files?: File[]) => Awaitable; + onFinished?: (files?: File[], errors?: unknown[]) => Awaitable; + onTaskUpdate?: (packs: TaskResultPack[]) => Awaitable; + onTestRemoved?: (trigger?: string) => Awaitable; + onWatcherStart?: (files?: File[], errors?: unknown[]) => Awaitable; + onWatcherRerun?: (files: string[], trigger?: string) => Awaitable; + onServerRestart?: (reason?: string) => Awaitable; + onUserConsoleLog?: (log: UserConsoleLog) => Awaitable; + onProcessTimeout?: () => Awaitable; +} + +declare class TapReporter implements Reporter { + protected ctx: Vitest; + private logger; + onInit(ctx: Vitest): void; + static getComment(task: Task): string; + private logErrorDetails; + protected logTasks(tasks: Task[]): void; + onFinished(files?: _vitest_runner.File[]): Promise; +} + +interface JUnitOptions { + outputFile?: string; + classname?: string; + suiteName?: string; +} +declare class JUnitReporter implements Reporter { + private ctx; + private reportFile?; + private baseLog; + private logger; + private _timeStart; + private fileFd?; + private options; + constructor(options: JUnitOptions); + onInit(ctx: Vitest): Promise; + writeElement(name: string, attrs: Record, children: () => Promise): Promise; + writeErrorDetails(task: Task, error: ErrorWithDiff): Promise; + writeLogs(task: Task, type: 'err' | 'out'): Promise; + writeTasks(tasks: Task[], filename: string): Promise; + onFinished(files?: _vitest_runner.File[]): Promise; +} + +declare class TapFlatReporter extends TapReporter { + onInit(ctx: Vitest): void; + onFinished(files?: _vitest_runner.File[]): Promise; +} + +declare class HangingProcessReporter implements Reporter { + whyRunning: (() => void) | undefined; + onInit(): void; + onProcessTimeout(): void; +} + +declare class GithubActionsReporter implements Reporter { + ctx: Vitest; + onInit(ctx: Vitest): void; + onFinished(files?: File[], errors?: unknown[]): Promise; +} + +declare class JsonReporter implements Reporter { + start: number; + ctx: Vitest; + onInit(ctx: Vitest): void; + protected logTasks(files: File[]): Promise; + onFinished(files?: File[]): Promise; + /** + * Writes the report to an output file if specified in the config, + * or logs it to the console otherwise. + * @param report + */ + writeReport(report: string): Promise; +} + +interface TableRendererOptions { + renderSucceed?: boolean; + logger: Logger; + showHeap: boolean; + slowTestThreshold: number; +} +declare function createTableRenderer(_tasks: Task[], options: TableRendererOptions): { + start(): any; + update(_tasks: Task[]): any; + stop(): Promise; + clear(): void; +}; + +declare class TableReporter extends BaseReporter { + renderer?: ReturnType; + rendererOptions: TableRendererOptions; + onTestRemoved(trigger?: string): Promise; + onCollected(): void; + onFinished(files?: _vitest_runner.File[], errors?: unknown[]): Promise; + onWatcherStart(): Promise; + stopListRender(): Promise; + onWatcherRerun(files: string[], trigger?: string): Promise; + onUserConsoleLog(log: UserConsoleLog): void; +} + +declare const BenchmarkReportsMap: { + default: typeof TableReporter; + verbose: typeof VerboseReporter; + json: typeof JsonReporter; +}; +type BenchmarkBuiltinReporters = keyof typeof BenchmarkReportsMap; + +declare const ReportersMap: { + default: typeof DefaultReporter; + basic: typeof BasicReporter; + verbose: typeof VerboseReporter; + dot: typeof DotReporter; + json: typeof JsonReporter$1; + tap: typeof TapReporter; + 'tap-flat': typeof TapFlatReporter; + junit: typeof JUnitReporter; + 'hanging-process': typeof HangingProcessReporter; + 'github-actions': typeof GithubActionsReporter; +}; +type BuiltinReporters = keyof typeof ReportersMap; +interface BuiltinReporterOptions { + 'default': never; + 'basic': never; + 'verbose': never; + 'dot': never; + 'json': JsonOptions$1; + 'tap': never; + 'tap-flat': never; + 'junit': JUnitOptions; + 'hanging-process': never; + 'html': { + outputFile?: string; + }; +} + +type ChaiConfig = Omit, 'useProxy' | 'proxyExcludedKeys'>; + +interface Node { + isRoot(): boolean; + visit(visitor: Visitor, state: any): void; +} + +interface Visitor { + onStart(root: N, state: any): void; + onSummary(root: N, state: any): void; + onDetail(root: N, state: any): void; + onSummaryEnd(root: N, state: any): void; + onEnd(root: N, state: any): void; +} + +interface FileOptions { + file: string; +} + +interface ProjectOptions { + projectRoot: string; +} + +interface ReportOptions { + clover: CloverOptions; + cobertura: CoberturaOptions; + "html-spa": HtmlSpaOptions; + html: HtmlOptions; + json: JsonOptions; + "json-summary": JsonSummaryOptions; + lcov: LcovOptions; + lcovonly: LcovOnlyOptions; + none: never; + teamcity: TeamcityOptions; + text: TextOptions; + "text-lcov": TextLcovOptions; + "text-summary": TextSummaryOptions; +} + +interface CloverOptions extends FileOptions, ProjectOptions {} + +interface CoberturaOptions extends FileOptions, ProjectOptions {} + +interface HtmlSpaOptions extends HtmlOptions { + metricsToShow: Array<"lines" | "branches" | "functions" | "statements">; +} +interface HtmlOptions { + verbose: boolean; + skipEmpty: boolean; + subdir: string; + linkMapper: LinkMapper; +} + +type JsonOptions = FileOptions; +type JsonSummaryOptions = FileOptions; + +interface LcovOptions extends FileOptions, ProjectOptions {} +interface LcovOnlyOptions extends FileOptions, ProjectOptions {} + +interface TeamcityOptions extends FileOptions { + blockName: string; +} + +interface TextOptions extends FileOptions { + maxCols: number; + skipEmpty: boolean; + skipFull: boolean; +} +type TextLcovOptions = ProjectOptions; +type TextSummaryOptions = FileOptions; + +interface LinkMapper { + getPath(node: string | Node): string; + relativePath(source: string | Node, target: string | Node): string; + assetPath(node: Node, name: string): string; +} + +type ArgumentsType = T extends (...args: infer A) => any ? A : never; +type ReturnType$1 = T extends (...args: any) => infer R ? R : never; +type PromisifyFn = ReturnType$1 extends Promise ? T : (...args: ArgumentsType) => Promise>>; +type BirpcResolver = (name: string, resolved: (...args: unknown[]) => unknown) => ((...args: unknown[]) => unknown) | undefined; +interface ChannelOptions { + /** + * Function to post raw message + */ + post: (data: any, ...extras: any[]) => any | Promise; + /** + * Listener to receive raw message + */ + on: (fn: (data: any, ...extras: any[]) => void) => any | Promise; + /** + * Custom function to serialize data + * + * by default it passes the data as-is + */ + serialize?: (data: any) => any; + /** + * Custom function to deserialize data + * + * by default it passes the data as-is + */ + deserialize?: (data: any) => any; +} +interface EventOptions { + /** + * Names of remote functions that do not need response. + */ + eventNames?: (keyof Remote)[]; + /** + * Maximum timeout for waiting for response, in milliseconds. + * + * @default 60_000 + */ + timeout?: number; + /** + * Custom resolver to resolve function to be called + * + * For advanced use cases only + */ + resolver?: BirpcResolver; + /** + * Custom error handler + */ + onError?: (error: Error, functionName: string, args: any[]) => boolean | void; + /** + * Custom error handler for timeouts + */ + onTimeoutError?: (functionName: string, args: any[]) => boolean | void; +} +type BirpcOptions = EventOptions & ChannelOptions; +type BirpcFn = PromisifyFn & { + /** + * Send event without asking for response + */ + asEvent(...args: ArgumentsType): void; +}; +type BirpcReturn> = { + [K in keyof RemoteFunctions]: BirpcFn; +} & { + $functions: LocalFunctions; +}; + +type MockFactoryWithHelper = (importOriginal: () => Promise) => any; +type MockFactory = () => any; +type MockMap = Map>; +interface PendingSuiteMock { + id: string; + importer: string; + type: 'mock' | 'unmock'; + throwIfCached: boolean; + factory?: MockFactory; +} + +type TransformMode = 'web' | 'ssr'; +interface RuntimeRPC { + fetch: (id: string, environment: TransformMode) => Promise; + transform: (id: string, environment: TransformMode) => Promise; + resolveId: (id: string, importer: string | undefined, environment: TransformMode) => Promise; + getSourceMap: (id: string, force?: boolean) => Promise; + onFinished: (files: File[], errors?: unknown[]) => void; + onPathsCollected: (paths: string[]) => void; + onUserConsoleLog: (log: UserConsoleLog) => void; + onUnhandledError: (err: unknown, type: string) => void; + onCollected: (files: File[]) => Promise; + onAfterSuiteRun: (meta: AfterSuiteRunMeta) => void; + onTaskUpdate: (pack: TaskResultPack[]) => Promise; + onCancel: (reason: CancelReason) => void; + getCountOfFailedTests: () => number; + snapshotSaved: (snapshot: SnapshotResult) => void; + resolveSnapshotPath: (testPath: string) => string; +} +interface RunnerRPC { + onCancel: (reason: CancelReason) => void; +} +interface ContextTestEnvironment { + name: VitestEnvironment; + transformMode?: TransformMode; + options: EnvironmentOptions | null; +} +interface ResolvedTestEnvironment { + environment: Environment; + options: EnvironmentOptions | null; +} +interface ContextRPC { + pool: Pool; + worker: string; + workerId: number; + config: ResolvedConfig; + projectName: string; + files: string[]; + environment: ContextTestEnvironment; + providedContext: Record; + invalidates?: string[]; +} + +interface WorkerContext extends ContextRPC { + port: MessagePort; +} +type ResolveIdFunction = (id: string, importer?: string) => Promise; +interface AfterSuiteRunMeta { + coverage?: unknown; + transformMode: Environment['transformMode']; + projectName?: string; +} +type WorkerRPC = BirpcReturn; +interface WorkerGlobalState { + ctx: ContextRPC; + config: ResolvedConfig; + rpc: WorkerRPC; + current?: Task; + filepath?: string; + environment: Environment; + environmentTeardownRun?: boolean; + onCancel: Promise; + moduleCache: ModuleCacheMap; + mockMap: MockMap; + providedContext: Record; + durations: { + environment: number; + prepare: number; + }; +} + +type TransformResult = string | Partial | undefined | null | void; +interface CoverageProvider { + name: string; + initialize: (ctx: Vitest) => Promise | void; + resolveOptions: () => ResolvedCoverageOptions; + clean: (clean?: boolean) => void | Promise; + onAfterSuiteRun: (meta: AfterSuiteRunMeta) => void | Promise; + reportCoverage: (reportContext?: ReportContext) => void | Promise; + onFileTransform?: (sourceCode: string, id: string, pluginCtx: any) => TransformResult | Promise; +} +interface ReportContext { + /** Indicates whether all tests were run. False when only specific tests were run. */ + allTestsRun?: boolean; +} +interface CoverageProviderModule { + /** + * Factory for creating a new coverage provider + */ + getProvider: () => CoverageProvider | Promise; + /** + * Executed before tests are run in the worker thread. + */ + startCoverage?: () => unknown | Promise; + /** + * Executed on after each run in the worker thread. Possible to return a payload passed to the provider + */ + takeCoverage?: () => unknown | Promise; + /** + * Executed after all tests have been run in the worker thread. + */ + stopCoverage?: () => unknown | Promise; +} +type CoverageReporter = keyof ReportOptions | (string & {}); +type CoverageReporterWithOptions = ReporterName extends keyof ReportOptions ? ReportOptions[ReporterName] extends never ? [ReporterName, {}] : [ReporterName, Partial] : [ReporterName, Record]; +type Provider = 'v8' | 'istanbul' | 'custom' | undefined; +type CoverageOptions = T extends 'istanbul' ? ({ + provider: T; +} & CoverageIstanbulOptions) : T extends 'v8' ? ({ + provider: T; +} & CoverageV8Options) : T extends 'custom' ? ({ + provider: T; +} & CustomProviderOptions) : ({ + provider?: T; +} & (CoverageV8Options)); +/** Fields that have default values. Internally these will always be defined. */ +type FieldsWithDefaultValues = 'enabled' | 'clean' | 'cleanOnRerun' | 'reportsDirectory' | 'exclude' | 'extension' | 'reportOnFailure' | 'allowExternal' | 'processingConcurrency'; +type ResolvedCoverageOptions = CoverageOptions & Required, FieldsWithDefaultValues>> & { + reporter: CoverageReporterWithOptions[]; +}; +interface BaseCoverageOptions { + /** + * Enables coverage collection. Can be overridden using `--coverage` CLI option. + * + * @default false + */ + enabled?: boolean; + /** + * List of files included in coverage as glob patterns + * + * @default ['**'] + */ + include?: string[]; + /** + * Extensions for files to be included in coverage + * + * @default ['.js', '.cjs', '.mjs', '.ts', '.tsx', '.jsx', '.vue', '.svelte', '.marko'] + */ + extension?: string | string[]; + /** + * List of files excluded from coverage as glob patterns + */ + exclude?: string[]; + /** + * Whether to include all files, including the untested ones into report + * + * @default false + */ + all?: boolean; + /** + * Clean coverage results before running tests + * + * @default true + */ + clean?: boolean; + /** + * Clean coverage report on watch rerun + * + * @default true + */ + cleanOnRerun?: boolean; + /** + * Directory to write coverage report to + */ + reportsDirectory?: string; + /** + * Coverage reporters to use. + * See [istanbul documentation](https://istanbul.js.org/docs/advanced/alternative-reporters/) for detailed list of all reporters. + * + * @default ['text', 'html', 'clover', 'json'] + */ + reporter?: Arrayable | (CoverageReporter | [CoverageReporter] | CoverageReporterWithOptions)[]; + /** + * Do not show files with 100% statement, branch, and function coverage + * + * @default false + */ + skipFull?: boolean; + /** + * Configurations for thresholds + * + * @example + * + * ```ts + * { + * // Thresholds for all files + * functions: 95, + * branches: 70, + * perFile: true, + * autoUpdate: true, + * + * // Thresholds for utilities + * 'src/utils/**.ts': { + * lines: 100, + * statements: 95, + * } + * } + * ``` + */ + thresholds?: Thresholds | ({ + [glob: string]: Pick; + } & Thresholds); + /** + * Watermarks for statements, lines, branches and functions. + * + * Default value is `[50,80]` for each property. + */ + watermarks?: { + statements?: [number, number]; + functions?: [number, number]; + branches?: [number, number]; + lines?: [number, number]; + }; + /** + * Generate coverage report even when tests fail. + * + * @default false + */ + reportOnFailure?: boolean; + /** + * Collect coverage of files outside the project `root`. + * + * @default false + */ + allowExternal?: boolean; + /** + * Concurrency limit used when processing the coverage results. + * Defaults to `Math.min(20, os.availableParallelism?.() ?? os.cpus().length)` + */ + processingConcurrency?: number; +} +interface CoverageIstanbulOptions extends BaseCoverageOptions { + /** + * Set to array of class method names to ignore for coverage + * + * @default [] + */ + ignoreClassMethods?: string[]; +} +interface CoverageV8Options extends BaseCoverageOptions { +} +interface CustomProviderOptions extends Pick { + /** Name of the module or path to a file to load the custom provider from */ + customProviderModule: string; +} +interface Thresholds { + /** Set global thresholds to `100` */ + 100?: boolean; + /** Check thresholds per file. */ + perFile?: boolean; + /** + * Update threshold values automatically when current coverage is higher than earlier thresholds + * + * @default false + */ + autoUpdate?: boolean; + /** Thresholds for statements */ + statements?: number; + /** Thresholds for functions */ + functions?: number; + /** Thresholds for branches */ + branches?: number; + /** Thresholds for lines */ + lines?: number; +} + +interface JSDOMOptions { + /** + * The html content for the test. + * + * @default '' + */ + html?: string | Buffer | ArrayBufferLike; + /** + * referrer just affects the value read from document.referrer. + * It defaults to no referrer (which reflects as the empty string). + */ + referrer?: string; + /** + * userAgent affects the value read from navigator.userAgent, as well as the User-Agent header sent while fetching subresources. + * + * @default `Mozilla/5.0 (${process.platform}) AppleWebKit/537.36 (KHTML, like Gecko) jsdom/${jsdomVersion}` + */ + userAgent?: string; + /** + * url sets the value returned by window.location, document.URL, and document.documentURI, + * and affects things like resolution of relative URLs within the document + * and the same-origin restrictions and referrer used while fetching subresources. + * + * @default 'http://localhost:3000'. + */ + url?: string; + /** + * contentType affects the value read from document.contentType, and how the document is parsed: as HTML or as XML. + * Values that are not "text/html" or an XML mime type will throw. + * + * @default 'text/html'. + */ + contentType?: string; + /** + * The maximum size in code units for the separate storage areas used by localStorage and sessionStorage. + * Attempts to store data larger than this limit will cause a DOMException to be thrown. By default, it is set + * to 5,000,000 code units per origin, as inspired by the HTML specification. + * + * @default 5_000_000 + */ + storageQuota?: number; + /** + * Enable console? + * + * @default false + */ + console?: boolean; + /** + * jsdom does not have the capability to render visual content, and will act like a headless browser by default. + * It provides hints to web pages through APIs such as document.hidden that their content is not visible. + * + * When the `pretendToBeVisual` option is set to `true`, jsdom will pretend that it is rendering and displaying + * content. + * + * @default true + */ + pretendToBeVisual?: boolean; + /** + * `includeNodeLocations` preserves the location info produced by the HTML parser, + * allowing you to retrieve it with the nodeLocation() method (described below). + * + * It defaults to false to give the best performance, + * and cannot be used with an XML content type since our XML parser does not support location info. + * + * @default false + */ + includeNodeLocations?: boolean | undefined; + /** + * @default 'dangerously' + */ + runScripts?: 'dangerously' | 'outside-only'; + /** + * Enable CookieJar + * + * @default false + */ + cookieJar?: boolean; + resources?: 'usable' | any; +} + +/** + * Happy DOM options. + */ +interface HappyDOMOptions { + width?: number; + height?: number; + url?: string; + settings?: { + disableJavaScriptEvaluation?: boolean; + disableJavaScriptFileLoading?: boolean; + disableCSSFileLoading?: boolean; + disableIframePageLoading?: boolean; + disableComputedStyleRendering?: boolean; + enableFileSystemHttpRequests?: boolean; + navigator?: { + userAgent?: string; + }; + device?: { + prefersColorScheme?: string; + mediaType?: string; + }; + }; +} + +interface BenchmarkUserOptions { + /** + * Include globs for benchmark test files + * + * @default ['**\/*.{bench,benchmark}.?(c|m)[jt]s?(x)'] + */ + include?: string[]; + /** + * Exclude globs for benchmark test files + * @default ['node_modules', 'dist', '.idea', '.git', '.cache'] + */ + exclude?: string[]; + /** + * Include globs for in-source benchmark test files + * + * @default [] + */ + includeSource?: string[]; + /** + * Custom reporter for output. Can contain one or more built-in report names, reporter instances, + * and/or paths to custom reporters + */ + reporters?: Arrayable$1; + /** + * Write test results to a file when the `--reporter=json` option is also specified. + * Also definable individually per reporter by using an object instead. + */ + outputFile?: string | (Partial> & Record); +} +interface Benchmark extends Custom { + meta: { + benchmark: true; + result?: TaskResult; + }; +} +interface BenchmarkResult extends TaskResult { + name: string; + rank: number; +} +type BenchFunction = (this: Bench) => Promise | void; +type ChainableBenchmarkAPI = ChainableFunction<'skip' | 'only' | 'todo', (name: string | Function, fn?: BenchFunction, options?: Options) => void>; +type BenchmarkAPI = ChainableBenchmarkAPI & { + skipIf: (condition: any) => ChainableBenchmarkAPI; + runIf: (condition: any) => ChainableBenchmarkAPI; +}; + +declare const defaultInclude: string[]; +declare const defaultExclude: string[]; +declare const coverageConfigDefaults: ResolvedCoverageOptions; +declare const configDefaults: Readonly<{ + allowOnly: boolean; + isolate: true; + watch: boolean; + globals: false; + environment: "node"; + pool: "threads"; + clearMocks: false; + restoreMocks: false; + mockReset: false; + include: string[]; + exclude: string[]; + testTimeout: number; + hookTimeout: number; + teardownTimeout: number; + watchExclude: string[]; + forceRerunTriggers: string[]; + update: false; + reporters: never[]; + silent: false; + hideSkippedTests: false; + api: false; + ui: false; + uiBase: string; + open: boolean; + css: { + include: never[]; + }; + coverage: CoverageV8Options; + fakeTimers: { + loopLimit: number; + shouldClearNativeTimers: true; + toFake: ("setTimeout" | "setInterval" | "clearInterval" | "clearTimeout" | "setImmediate" | "clearImmediate" | "Date")[]; + }; + maxConcurrency: number; + dangerouslyIgnoreUnhandledErrors: false; + typecheck: { + checker: "tsc"; + include: string[]; + exclude: string[]; + }; + slowTestThreshold: number; + disableConsoleIntercept: false; +}>; + +declare const extraInlineDeps: (string | RegExp)[]; + +interface UserWorkspaceConfig extends UserConfig$1 { + test?: ProjectConfig; +} + +type UserConfigFnObject = (env: ConfigEnv) => UserConfig$1; +type UserConfigFnPromise = (env: ConfigEnv) => Promise; +type UserConfigFn = (env: ConfigEnv) => UserConfig$1 | Promise; +type UserConfigExport = UserConfig$1 | Promise | UserConfigFnObject | UserConfigFnPromise | UserConfigFn; +type UserProjectConfigFn = (env: ConfigEnv) => UserWorkspaceConfig | Promise; +type UserProjectConfigExport = UserWorkspaceConfig | Promise | UserProjectConfigFn; +declare function defineConfig(config: UserConfig$1): UserConfig$1; +declare function defineConfig(config: Promise): Promise; +declare function defineConfig(config: UserConfigFnObject): UserConfigFnObject; +declare function defineConfig(config: UserConfigExport): UserConfigExport; +declare function defineProject(config: T): T; +type Workspace = (string | (UserProjectConfigExport & { + extends?: string; +})); +declare function defineWorkspace(config: Workspace[]): Workspace[]; + +type BuiltinEnvironment = 'node' | 'jsdom' | 'happy-dom' | 'edge-runtime'; +type VitestEnvironment = BuiltinEnvironment | (string & Record); + +type CSSModuleScopeStrategy = 'stable' | 'scoped' | 'non-scoped'; +type ApiConfig = Pick; + +interface EnvironmentOptions { + /** + * jsdom options. + */ + jsdom?: JSDOMOptions; + happyDOM?: HappyDOMOptions; + [x: string]: unknown; +} +type VitestRunMode = 'test' | 'benchmark'; +interface SequenceOptions { + /** + * Class that handles sorting and sharding algorithm. + * If you only need to change sorting, you can extend + * your custom sequencer from `BaseSequencer` from `vitest/node`. + * @default BaseSequencer + */ + sequencer?: TestSequencerConstructor; + /** + * Should tests run in random order. + * @default false + */ + shuffle?: boolean; + /** + * Should tests run in parallel. + * @default false + */ + concurrent?: boolean; + /** + * Defines how setup files should be ordered + * - 'parallel' will run all setup files in parallel + * - 'list' will run all setup files in the order they are defined in the config file + * @default 'parallel' + */ + setupFiles?: SequenceSetupFiles; + /** + * Seed for the random number generator. + * @default Date.now() + */ + seed?: number; + /** + * Defines how hooks should be ordered + * - `stack` will order "after" hooks in reverse order, "before" hooks will run sequentially + * - `list` will order hooks in the order they are defined + * - `parallel` will run hooks in a single group in parallel + * @default 'parallel' + */ + hooks?: SequenceHooks; +} +type DepsOptimizationOptions = Omit & { + enabled?: boolean; +}; +interface TransformModePatterns { + /** + * Use SSR transform pipeline for all modules inside specified tests. + * Vite plugins will receive `ssr: true` flag when processing those files. + * + * @default tests with node or edge environment + */ + ssr?: string[]; + /** + * First do a normal transform pipeline (targeting browser), + * then then do a SSR rewrite to run the code in Node. + * Vite plugins will receive `ssr: false` flag when processing those files. + * + * @default tests with jsdom or happy-dom environment + */ + web?: string[]; +} +interface DepsOptions { + /** + * Enable dependency optimization. This can improve the performance of your tests. + */ + optimizer?: { + web?: DepsOptimizationOptions; + ssr?: DepsOptimizationOptions; + }; + web?: { + /** + * Should Vitest process assets (.png, .svg, .jpg, etc) files and resolve them like Vite does in the browser. + * + * These module will have a default export equal to the path to the asset, if no query is specified. + * + * **At the moment, this option only works with `{ pool: 'vmThreads' }`.** + * + * @default true + */ + transformAssets?: boolean; + /** + * Should Vitest process CSS (.css, .scss, .sass, etc) files and resolve them like Vite does in the browser. + * + * If CSS files are disabled with `css` options, this option will just silence UNKNOWN_EXTENSION errors. + * + * **At the moment, this option only works with `{ pool: 'vmThreads' }`.** + * + * @default true + */ + transformCss?: boolean; + /** + * Regexp pattern to match external files that should be transformed. + * + * By default, files inside `node_modules` are externalized and not transformed. + * + * **At the moment, this option only works with `{ pool: 'vmThreads' }`.** + * + * @default [] + */ + transformGlobPattern?: RegExp | RegExp[]; + }; + /** + * Externalize means that Vite will bypass the package to native Node. + * + * Externalized dependencies will not be applied Vite's transformers and resolvers. + * And does not support HMR on reload. + * + * Typically, packages under `node_modules` are externalized. + * + * @deprecated If you rely on vite-node directly, use `server.deps.external` instead. Otherwise, consider using `deps.optimizer.{web,ssr}.exclude`. + */ + external?: (string | RegExp)[]; + /** + * Vite will process inlined modules. + * + * This could be helpful to handle packages that ship `.js` in ESM format (that Node can't handle). + * + * If `true`, every dependency will be inlined + * + * @deprecated If you rely on vite-node directly, use `server.deps.inline` instead. Otherwise, consider using `deps.optimizer.{web,ssr}.include`. + */ + inline?: (string | RegExp)[] | true; + /** + * Interpret CJS module's default as named exports + * + * @default true + */ + interopDefault?: boolean; + /** + * When a dependency is a valid ESM package, try to guess the cjs version based on the path. + * This will significantly improve the performance in huge repo, but might potentially + * cause some misalignment if a package have different logic in ESM and CJS mode. + * + * @default false + * + * @deprecated Use `server.deps.fallbackCJS` instead. + */ + fallbackCJS?: boolean; + /** + * A list of directories relative to the config file that should be treated as module directories. + * + * @default ['node_modules'] + */ + moduleDirectories?: string[]; +} +type InlineReporter = Reporter; +type ReporterName = BuiltinReporters | 'html' | (string & {}); +type ReporterWithOptions = Name extends keyof BuiltinReporterOptions ? BuiltinReporterOptions[Name] extends never ? [Name, {}] : [Name, Partial] : [Name, Record]; +interface InlineConfig { + /** + * Name of the project. Will be used to display in the reporter. + */ + name?: string; + /** + * Benchmark options. + * + * @default {} + */ + benchmark?: BenchmarkUserOptions; + /** + * Include globs for test files + * + * @default ['**\/*.{test,spec}.?(c|m)[jt]s?(x)'] + */ + include?: string[]; + /** + * Exclude globs for test files + * @default ['node_modules', 'dist', '.idea', '.git', '.cache'] + */ + exclude?: string[]; + /** + * Include globs for in-source test files + * + * @default [] + */ + includeSource?: string[]; + /** + * Handling for dependencies inlining or externalizing + * + */ + deps?: DepsOptions; + /** + * Vite-node server options + */ + server?: Omit; + /** + * Base directory to scan for the test files + * + * @default `config.root` + */ + dir?: string; + /** + * Register apis globally + * + * @default false + */ + globals?: boolean; + /** + * Running environment + * + * Supports 'node', 'jsdom', 'happy-dom', 'edge-runtime' + * + * If used unsupported string, will try to load the package `vitest-environment-${env}` + * + * @default 'node' + */ + environment?: VitestEnvironment; + /** + * Environment options. + */ + environmentOptions?: EnvironmentOptions; + /** + * Automatically assign environment based on globs. The first match will be used. + * This has effect only when running tests inside Node.js. + * + * Format: [glob, environment-name] + * + * @default [] + * @example [ + * // all tests in tests/dom will run in jsdom + * ['tests/dom/**', 'jsdom'], + * // all tests in tests/ with .edge.test.ts will run in edge-runtime + * ['**\/*.edge.test.ts', 'edge-runtime'], + * // ... + * ] + */ + environmentMatchGlobs?: [string, VitestEnvironment][]; + /** + * Run tests in an isolated environment. This option has no effect on vmThreads pool. + * + * Disabling this option might improve performance if your code doesn't rely on side effects. + * + * @default true + */ + isolate?: boolean; + /** + * Pool used to run tests in. + * + * Supports 'threads', 'forks', 'vmThreads' + * + * @default 'threads' + */ + pool?: Exclude; + /** + * Pool options + */ + poolOptions?: PoolOptions; + /** + * Maximum number of workers to run tests in. `poolOptions.{threads,vmThreads}.maxThreads`/`poolOptions.forks.maxForks` has higher priority. + */ + maxWorkers?: number; + /** + * Minimum number of workers to run tests in. `poolOptions.{threads,vmThreads}.minThreads`/`poolOptions.forks.minForks` has higher priority. + */ + minWorkers?: number; + /** + * Should all test files run in parallel. Doesn't affect tests running in the same file. + * Setting this to `false` will override `maxWorkers` and `minWorkers` options to `1`. + * + * @default true + */ + fileParallelism?: boolean; + /** + * Automatically assign pool based on globs. The first match will be used. + * + * Format: [glob, pool-name] + * + * @default [] + * @example [ + * // all tests in "forks" directory will run using "poolOptions.forks" API + * ['tests/forks/**', 'forks'], + * // all other tests will run based on "poolOptions.threads" option, if you didn't specify other globs + * // ... + * ] + */ + poolMatchGlobs?: [string, Exclude][]; + /** + * Path to a workspace configuration file + */ + workspace?: string; + /** + * Update snapshot + * + * @default false + */ + update?: boolean; + /** + * Watch mode + * + * @default true + */ + watch?: boolean; + /** + * Project root + * + * @default process.cwd() + */ + root?: string; + /** + * Custom reporter for output. Can contain one or more built-in report names, reporter instances, + * and/or paths to custom reporters. + */ + reporters?: Arrayable | ((ReporterName | InlineReporter) | [ReporterName] | ReporterWithOptions)[]; + /** + * Write test results to a file when the --reporter=json` or `--reporter=junit` option is also specified. + * Also definable individually per reporter by using an object instead. + */ + outputFile?: string | (Partial> & Record); + /** + * Default timeout of a test in milliseconds + * + * @default 5000 + */ + testTimeout?: number; + /** + * Default timeout of a hook in milliseconds + * + * @default 10000 + */ + hookTimeout?: number; + /** + * Default timeout to wait for close when Vitest shuts down, in milliseconds + * + * @default 10000 + */ + teardownTimeout?: number; + /** + * Silent mode + * + * @default false + */ + silent?: boolean; + /** + * Hide logs for skipped tests + * + * @default false + */ + hideSkippedTests?: boolean; + /** + * Path to setup files + */ + setupFiles?: string | string[]; + /** + * Path to global setup files + */ + globalSetup?: string | string[]; + /** + * Glob pattern of file paths to be ignore from triggering watch rerun + * @deprecated Use server.watch.ignored instead + */ + watchExclude?: string[]; + /** + * Glob patter of file paths that will trigger the whole suite rerun + * + * Useful if you are testing calling CLI commands + * + * @default [] + */ + forceRerunTriggers?: string[]; + /** + * Coverage options + */ + coverage?: CoverageOptions; + /** + * run test names with the specified pattern + */ + testNamePattern?: string | RegExp; + /** + * Will call `.mockClear()` on all spies before each test + * @default false + */ + clearMocks?: boolean; + /** + * Will call `.mockReset()` on all spies before each test + * @default false + */ + mockReset?: boolean; + /** + * Will call `.mockRestore()` on all spies before each test + * @default false + */ + restoreMocks?: boolean; + /** + * Will restore all global stubs to their original values before each test + * @default false + */ + unstubGlobals?: boolean; + /** + * Will restore all env stubs to their original values before each test + * @default false + */ + unstubEnvs?: boolean; + /** + * Serve API options. + * + * When set to true, the default port is 51204. + * + * @default false + */ + api?: boolean | number | ApiConfig; + /** + * Enable Vitest UI + */ + ui?: boolean; + /** + * options for test in a browser environment + * @experimental + * + * @default false + */ + browser?: BrowserConfigOptions; + /** + * Open UI automatically. + * + * @default true + */ + open?: boolean; + /** + * Base url for the UI + * + * @default '/__vitest__/' + */ + uiBase?: string; + /** + * Determine the transform method for all modules imported inside a test that matches the glob pattern. + */ + testTransformMode?: TransformModePatterns; + /** + * Format options for snapshot testing. + */ + snapshotFormat?: Omit; + /** + * Path to a module which has a default export of diff config. + */ + diff?: string; + /** + * Paths to snapshot serializer modules. + */ + snapshotSerializers?: string[]; + /** + * Resolve custom snapshot path + */ + resolveSnapshotPath?: (path: string, extension: string) => string; + /** + * Pass with no tests + */ + passWithNoTests?: boolean; + /** + * Allow tests and suites that are marked as only + */ + allowOnly?: boolean; + /** + * Show heap usage after each test. Useful for debugging memory leaks. + */ + logHeapUsage?: boolean; + /** + * Custom environment variables assigned to `process.env` before running tests. + */ + env?: Record; + /** + * Options for @sinon/fake-timers + */ + fakeTimers?: FakeTimerInstallOpts; + /** + * Custom handler for console.log in tests. + * + * Return `false` to ignore the log. + */ + onConsoleLog?: (log: string, type: 'stdout' | 'stderr') => false | void; + /** + * Enable stack trace filtering. If absent, all stack trace frames + * will be shown. + * + * Return `false` to omit the frame. + */ + onStackTrace?: (error: Error, frame: ParsedStack) => boolean | void; + /** + * Indicates if CSS files should be processed. + * + * When excluded, the CSS files will be replaced with empty strings to bypass the subsequent processing. + * + * @default { include: [], modules: { classNameStrategy: false } } + */ + css?: boolean | { + include?: RegExp | RegExp[]; + exclude?: RegExp | RegExp[]; + modules?: { + classNameStrategy?: CSSModuleScopeStrategy; + }; + }; + /** + * A number of tests that are allowed to run at the same time marked with `test.concurrent`. + * @default 5 + */ + maxConcurrency?: number; + /** + * Options for configuring cache policy. + * @default { dir: 'node_modules/.vitest' } + */ + cache?: false | { + dir?: string; + }; + /** + * Options for configuring the order of running tests. + */ + sequence?: SequenceOptions; + /** + * Specifies an `Object`, or an `Array` of `Object`, + * which defines aliases used to replace values in `import` or `require` statements. + * Will be merged with the default aliases inside `resolve.alias`. + */ + alias?: AliasOptions; + /** + * Ignore any unhandled errors that occur + */ + dangerouslyIgnoreUnhandledErrors?: boolean; + /** + * Options for configuring typechecking test environment. + */ + typecheck?: Partial; + /** + * The number of milliseconds after which a test is considered slow and reported as such in the results. + * + * @default 300 + */ + slowTestThreshold?: number; + /** + * Path to a custom test runner. + */ + runner?: string; + /** + * Debug tests by opening `node:inspector` in worker / child process. + * Provides similar experience as `--inspect` Node CLI argument. + * + * Requires `poolOptions.threads.singleThread: true` OR `poolOptions.forks.singleFork: true`. + */ + inspect?: boolean; + /** + * Debug tests by opening `node:inspector` in worker / child process and wait for debugger to connect. + * Provides similar experience as `--inspect-brk` Node CLI argument. + * + * Requires `poolOptions.threads.singleThread: true` OR `poolOptions.forks.singleFork: true`. + */ + inspectBrk?: boolean; + /** + * Modify default Chai config. Vitest uses Chai for `expect` and `assert` matches. + * https://github.com/chaijs/chai/blob/4.x.x/lib/chai/config.js + */ + chaiConfig?: ChaiConfig; + /** + * Stop test execution when given number of tests have failed. + */ + bail?: number; + /** + * Retry the test specific number of times if it fails. + * + * @default 0 + */ + retry?: number; + /** + * Show full diff when snapshot fails instead of a patch. + */ + expandSnapshotDiff?: boolean; + /** + * By default, Vitest automatically intercepts console logging during tests for extra formatting of test file, test title, etc... + * This is also required for console log preview on Vitest UI. + * However, disabling such interception might help when you want to debug a code with normal synchronus terminal console logging. + * + * This option has no effect on browser pool since Vitest preserves original logging on browser devtools. + * + * @default false + */ + disableConsoleIntercept?: boolean; +} +interface TypecheckConfig { + /** + * Run typechecking tests alongisde regular tests. + */ + enabled?: boolean; + /** + * When typechecking is enabled, only run typechecking tests. + */ + only?: boolean; + /** + * What tools to use for type checking. + */ + checker: 'tsc' | 'vue-tsc' | (string & Record); + /** + * Pattern for files that should be treated as test files + */ + include: string[]; + /** + * Pattern for files that should not be treated as test files + */ + exclude: string[]; + /** + * Check JS files that have `@ts-check` comment. + * If you have it enabled in tsconfig, this will not overwrite it. + */ + allowJs?: boolean; + /** + * Do not fail, if Vitest found errors outside the test files. + */ + ignoreSourceErrors?: boolean; + /** + * Path to tsconfig, relative to the project root. + */ + tsconfig?: string; +} +interface UserConfig extends InlineConfig { + /** + * Path to the config file. + * + * Default resolving to `vitest.config.*`, `vite.config.*` + * + * Setting to `false` will disable config resolving. + */ + config?: string | false | undefined; + /** + * Use happy-dom + */ + dom?: boolean; + /** + * Run tests that cover a list of source files + */ + related?: string[] | string; + /** + * Overrides Vite mode + * @default 'test' + */ + mode?: string; + /** + * Runs tests that are affected by the changes in the repository, or between specified branch or commit hash + * Requires initialized git repository + * @default false + */ + changed?: boolean | string; + /** + * Test suite shard to execute in a format of /. + * Will divide tests into a `count` numbers, and run only the `indexed` part. + * Cannot be used with enabled watch. + * @example --shard=2/3 + */ + shard?: string; + /** + * Name of the project or projects to run. + */ + project?: string | string[]; + /** + * Additional exclude patterns + */ + cliExclude?: string[]; +} +interface ResolvedConfig extends Omit, 'config' | 'filters' | 'browser' | 'coverage' | 'testNamePattern' | 'related' | 'api' | 'reporters' | 'resolveSnapshotPath' | 'benchmark' | 'shard' | 'cache' | 'sequence' | 'typecheck' | 'runner' | 'poolOptions' | 'pool' | 'cliExclude'> { + mode: VitestRunMode; + base?: string; + config?: string; + filters?: string[]; + testNamePattern?: RegExp; + related?: string[]; + coverage: ResolvedCoverageOptions; + snapshotOptions: SnapshotStateOptions; + browser: ResolvedBrowserOptions; + pool: Pool; + poolOptions?: PoolOptions; + reporters: (InlineReporter | ReporterWithOptions)[]; + defines: Record; + api?: ApiConfig; + cliExclude?: string[]; + benchmark?: Required> & Pick; + shard?: { + index: number; + count: number; + }; + cache: { + dir: string; + } | false; + sequence: { + sequencer: TestSequencerConstructor; + hooks: SequenceHooks; + setupFiles: SequenceSetupFiles; + shuffle?: boolean; + concurrent?: boolean; + seed: number; + }; + typecheck: Omit & { + enabled: boolean; + }; + runner?: string; +} +type ProjectConfig = Omit & { + sequencer?: Omit; + deps?: Omit; + poolOptions?: { + threads?: Pick, 'singleThread' | 'isolate'>; + vmThreads?: Pick, 'singleThread'>; + forks?: Pick, 'singleFork' | 'isolate'>; + }; +}; +type RuntimeConfig = Pick & { + sequence?: { + concurrent?: boolean; + hooks?: SequenceHooks; + }; +}; + +type VitestInlineConfig = InlineConfig; +declare module 'vite' { + interface UserConfig { + /** + * Options for Vitest + */ + test?: VitestInlineConfig; + } +} + +declare global { + namespace Chai { + interface Assertion { + containSubset: (expected: any) => Assertion; + } + interface Assert { + containSubset: (val: any, exp: any, msg?: string) => void; + } + } +} +interface SnapshotMatcher { + (snapshot: Partial, message?: string): void; + (message?: string): void; +} +interface InlineSnapshotMatcher { + (properties: Partial, snapshot?: string, message?: string): void; + (message?: string): void; +} +declare module '@vitest/expect' { + interface MatcherState { + environment: VitestEnvironment; + snapshotState: SnapshotState; + } + interface ExpectStatic { + addSnapshotSerializer: (plugin: Plugin_2) => void; + } + interface Assertion { + matchSnapshot: SnapshotMatcher; + toMatchSnapshot: SnapshotMatcher; + toMatchInlineSnapshot: InlineSnapshotMatcher; + toThrowErrorMatchingSnapshot: (message?: string) => void; + toThrowErrorMatchingInlineSnapshot: (snapshot?: string, message?: string) => void; + toMatchFileSnapshot: (filepath: string, message?: string) => Promise; + } +} +declare module '@vitest/runner' { + interface TestContext { + expect: ExpectStatic; + } + interface TaskMeta { + typecheck?: boolean; + benchmark?: boolean; + } + interface File { + prepareDuration?: number; + environmentLoad?: number; + } + interface TaskBase { + logs?: UserConsoleLog[]; + } + interface TaskResult { + benchmark?: BenchmarkResult; + } +} + +type RawErrsMap = Map; +interface TscErrorInfo { + filePath: string; + errCode: number; + errMsg: string; + line: number; + column: number; +} +interface CollectLineNumbers { + target: number; + next: number; + prev?: number; +} +type CollectLines = { + [key in keyof CollectLineNumbers]: string; +}; +interface RootAndTarget { + root: string; + targetAbsPath: string; +} +type Context = RootAndTarget & { + rawErrsMap: RawErrsMap; + openedDirs: Set; + lastActivePath?: string; +}; + +export { type ProjectConfig as $, type AfterSuiteRunMeta as A, type BaseCoverageOptions as B, type CoverageOptions as C, type RootAndTarget as D, type Environment as E, type FakeTimerInstallOpts as F, type Context as G, type Pool as H, type PoolOptions as I, type JSDOMOptions as J, type HappyDOMOptions as K, type BuiltinEnvironment as L, type MockFactoryWithHelper as M, type VitestEnvironment as N, type CSSModuleScopeStrategy as O, type ProvidedContext as P, type ApiConfig as Q, type ResolvedConfig as R, type EnvironmentOptions as S, type TestSequencer as T, type UserConfig as U, type VitestRunMode as V, WorkspaceProject as W, type DepsOptimizationOptions as X, type TransformModePatterns as Y, type InlineConfig as Z, type TypecheckConfig as _, type ResolvedCoverageOptions as a, type UserWorkspaceConfig as a0, type RunnerRPC as a1, type ContextTestEnvironment as a2, type ResolvedTestEnvironment as a3, type ResolveIdFunction as a4, type WorkerRPC as a5, type Awaitable as a6, type Nullable as a7, type Arrayable as a8, type ArgumentsType$1 as a9, defineProject as aA, defineWorkspace as aB, configDefaults as aC, defaultInclude as aD, defaultExclude as aE, coverageConfigDefaults as aF, extraInlineDeps as aG, DefaultReporter as aH, BasicReporter as aI, DotReporter as aJ, JsonReporter$1 as aK, VerboseReporter as aL, TapReporter as aM, JUnitReporter as aN, TapFlatReporter as aO, HangingProcessReporter as aP, GithubActionsReporter as aQ, BaseReporter as aR, ReportersMap as aS, type BuiltinReporters as aT, type BuiltinReporterOptions as aU, type JsonAssertionResult as aV, type JsonTestResult as aW, type JsonTestResults as aX, BenchmarkReportsMap as aY, type BenchmarkBuiltinReporters as aZ, type MutableArray as aa, type Constructable as ab, type ModuleCache as ac, type EnvironmentReturn as ad, type VmEnvironmentReturn as ae, type OnServerRestartHandler as af, type ReportContext as ag, type CoverageReporter as ah, type CoverageIstanbulOptions as ai, type CoverageV8Options as aj, type CustomProviderOptions as ak, type BenchmarkUserOptions as al, type Benchmark as am, type BenchmarkResult as an, type BenchFunction as ao, type BenchmarkAPI as ap, type PendingSuiteMock as aq, type MockFactory as ar, type MockMap as as, type UserConfigFnObject as at, type UserConfigFnPromise as au, type UserConfigFn as av, type UserConfigExport as aw, type UserProjectConfigFn as ax, type UserProjectConfigExport as ay, defineConfig as az, type CoverageProvider as b, type CoverageProviderModule as c, type VitestOptions as d, Vitest as e, type RuntimeRPC as f, type WorkspaceSpec as g, type ProcessPool as h, VitestPackageInstaller as i, type TestSequencerConstructor as j, type BrowserProviderInitializationOptions as k, type BrowserProvider as l, type BrowserProviderOptions as m, type BirpcOptions as n, type ContextRPC as o, type WorkerGlobalState as p, type WorkerContext as q, type RuntimeConfig as r, startVitest as s, type UserConsoleLog as t, type ModuleGraphData as u, type Reporter as v, type RawErrsMap as w, type TscErrorInfo as x, type CollectLineNumbers as y, type CollectLines as z }; diff --git a/.pnpm-store/v3/files/71/be82648fdc01c5ceba91ccb3f525278312058a677893e8165b9361bcf084de8d5ea8ae0cc68a7f6b2aff8860df0b6b50f9f3e2fdcf67555f87202b49f3c144 b/.pnpm-store/v3/files/71/be82648fdc01c5ceba91ccb3f525278312058a677893e8165b9361bcf084de8d5ea8ae0cc68a7f6b2aff8860df0b6b50f9f3e2fdcf67555f87202b49f3c144 new file mode 100644 index 00000000..7db06811 --- /dev/null +++ b/.pnpm-store/v3/files/71/be82648fdc01c5ceba91ccb3f525278312058a677893e8165b9361bcf084de8d5ea8ae0cc68a7f6b2aff8860df0b6b50f9f3e2fdcf67555f87202b49f3c144 @@ -0,0 +1,60 @@ +import { Plugin, OptionsReceived } from 'pretty-format'; +import { S as SnapshotEnvironment } from './environment-cMiGIVXz.js'; + +interface RawSnapshotInfo { + file: string; + readonly?: boolean; + content?: string; +} + +type SnapshotData = Record; +type SnapshotUpdateState = 'all' | 'new' | 'none'; +type SnapshotSerializer = Plugin; +interface SnapshotStateOptions { + updateSnapshot: SnapshotUpdateState; + snapshotEnvironment: SnapshotEnvironment; + expand?: boolean; + snapshotFormat?: OptionsReceived; + resolveSnapshotPath?: (path: string, extension: string) => string; +} +interface SnapshotMatchOptions { + testName: string; + received: unknown; + key?: string; + inlineSnapshot?: string; + isInline: boolean; + error?: Error; + rawSnapshot?: RawSnapshotInfo; +} +interface SnapshotResult { + filepath: string; + added: number; + fileDeleted: boolean; + matched: number; + unchecked: number; + uncheckedKeys: Array; + unmatched: number; + updated: number; +} +interface UncheckedSnapshot { + filePath: string; + keys: Array; +} +interface SnapshotSummary { + added: number; + didUpdate: boolean; + failure: boolean; + filesAdded: number; + filesRemoved: number; + filesRemovedList: Array; + filesUnmatched: number; + filesUpdated: number; + matched: number; + total: number; + unchecked: number; + uncheckedKeysByFile: Array; + unmatched: number; + updated: number; +} + +export type { RawSnapshotInfo as R, SnapshotStateOptions as S, UncheckedSnapshot as U, SnapshotMatchOptions as a, SnapshotResult as b, SnapshotData as c, SnapshotUpdateState as d, SnapshotSerializer as e, SnapshotSummary as f }; diff --git a/.pnpm-store/v3/files/76/19ae98039220f9706e0b50bf33068342bdcc4c1de7d7c6f08819d5dd774bb23f576200750dc87dc3b66edfc7112499e8db2728ac2b03eedb92daaa38e74629 b/.pnpm-store/v3/files/76/19ae98039220f9706e0b50bf33068342bdcc4c1de7d7c6f08819d5dd774bb23f576200750dc87dc3b66edfc7112499e8db2728ac2b03eedb92daaa38e74629 new file mode 100644 index 00000000..8695e5de --- /dev/null +++ b/.pnpm-store/v3/files/76/19ae98039220f9706e0b50bf33068342bdcc4c1de7d7c6f08819d5dd774bb23f576200750dc87dc3b66edfc7112499e8db2728ac2b03eedb92daaa38e74629 @@ -0,0 +1,18 @@ +import { S as SnapshotStateOptions, f as SnapshotSummary, b as SnapshotResult } from './index-S94ASl6q.js'; +import 'pretty-format'; +import './environment-cMiGIVXz.js'; + +declare class SnapshotManager { + options: Omit; + summary: SnapshotSummary; + extension: string; + constructor(options: Omit); + clear(): void; + add(result: SnapshotResult): void; + resolvePath(testPath: string): string; + resolveRawPath(testPath: string, rawPath: string): string; +} +declare function emptySummary(options: Omit): SnapshotSummary; +declare function addSnapshotResult(summary: SnapshotSummary, result: SnapshotResult): void; + +export { SnapshotManager, addSnapshotResult, emptySummary }; diff --git a/.pnpm-store/v3/files/76/2081e205700aa0931625b119c47ded47fdbccbb73c8fec6b339c35d83f70d7709fd1a4507a099aae9fc4c709388c6394a65d28e5c2a2a15a28ebaf81a95f3e b/.pnpm-store/v3/files/76/2081e205700aa0931625b119c47ded47fdbccbb73c8fec6b339c35d83f70d7709fd1a4507a099aae9fc4c709388c6394a65d28e5c2a2a15a28ebaf81a95f3e new file mode 100644 index 00000000..56f2b435 --- /dev/null +++ b/.pnpm-store/v3/files/76/2081e205700aa0931625b119c47ded47fdbccbb73c8fec6b339c35d83f70d7709fd1a4507a099aae9fc4c709388c6394a65d28e5c2a2a15a28ebaf81a95f3e @@ -0,0 +1,2 @@ +import type { IImage } from './interface.ts'; +export declare const JPG: IImage; diff --git a/.pnpm-store/v3/files/77/a8cd9970fc6d5873d7952196ea46d827466e10de7384fb056658f47735d28c5b8ac4c60cbbce418be69b9183bcd8b5ac9a1125f42080c09b93bd27d3bb57b3 b/.pnpm-store/v3/files/77/a8cd9970fc6d5873d7952196ea46d827466e10de7384fb056658f47735d28c5b8ac4c60cbbce418be69b9183bcd8b5ac9a1125f42080c09b93bd27d3bb57b3 new file mode 100644 index 00000000..a3328e23 --- /dev/null +++ b/.pnpm-store/v3/files/77/a8cd9970fc6d5873d7952196ea46d827466e10de7384fb056658f47735d28c5b8ac4c60cbbce418be69b9183bcd8b5ac9a1125f42080c09b93bd27d3bb57b3 @@ -0,0 +1,564 @@ +const UnknownCompilerError = { + name: "UnknownCompilerError", + title: "Unknown compiler error.", + hint: "This is almost always a problem with the Astro compiler, not your code. Please open an issue at https://astro.build/issues/compiler." +}; +const StaticRedirectNotAvailable = { + name: "StaticRedirectNotAvailable", + title: "`Astro.redirect` is not available in static mode.", + message: "Redirects are only available when using `output: 'server'` or `output: 'hybrid'`. Update your Astro config if you need SSR features.", + hint: "See https://docs.astro.build/en/guides/server-side-rendering/ for more information on how to enable SSR." +}; +const ClientAddressNotAvailable = { + name: "ClientAddressNotAvailable", + title: "`Astro.clientAddress` is not available in current adapter.", + message: (adapterName) => `\`Astro.clientAddress\` is not available in the \`${adapterName}\` adapter. File an issue with the adapter to add support.` +}; +const StaticClientAddressNotAvailable = { + name: "StaticClientAddressNotAvailable", + title: "`Astro.clientAddress` is not available in static mode.", + message: "`Astro.clientAddress` is only available when using `output: 'server'` or `output: 'hybrid'`. Update your Astro config if you need SSR features.", + hint: "See https://docs.astro.build/en/guides/server-side-rendering/ for more information on how to enable SSR." +}; +const NoMatchingStaticPathFound = { + name: "NoMatchingStaticPathFound", + title: "No static path found for requested path.", + message: (pathName) => `A \`getStaticPaths()\` route pattern was matched, but no matching static path was found for requested path \`${pathName}\`.`, + hint: (possibleRoutes) => `Possible dynamic routes being matched: ${possibleRoutes.join(", ")}.` +}; +const OnlyResponseCanBeReturned = { + name: "OnlyResponseCanBeReturned", + title: "Invalid type returned by Astro page.", + message: (route, returnedValue) => `Route \`${route ? route : ""}\` returned a \`${returnedValue}\`. Only a [Response](https://developer.mozilla.org/en-US/docs/Web/API/Response) can be returned from Astro files.`, + hint: "See https://docs.astro.build/en/guides/server-side-rendering/#response for more information." +}; +const MissingMediaQueryDirective = { + name: "MissingMediaQueryDirective", + title: "Missing value for `client:media` directive.", + message: 'Media query not provided for `client:media` directive. A media query similar to `client:media="(max-width: 600px)"` must be provided' +}; +const NoMatchingRenderer = { + name: "NoMatchingRenderer", + title: "No matching renderer found.", + message: (componentName, componentExtension, plural, validRenderersCount) => `Unable to render \`${componentName}\`. + +${validRenderersCount > 0 ? `There ${plural ? "are" : "is"} ${validRenderersCount} renderer${plural ? "s" : ""} configured in your \`astro.config.mjs\` file, +but ${plural ? "none were" : "it was not"} able to server-side render \`${componentName}\`.` : `No valid renderer was found ${componentExtension ? `for the \`.${componentExtension}\` file extension.` : `for this file extension.`}`}`, + hint: (probableRenderers) => `Did you mean to enable the ${probableRenderers} integration? + +See https://docs.astro.build/en/guides/framework-components/ for more information on how to install and configure integrations.` +}; +const NoClientEntrypoint = { + name: "NoClientEntrypoint", + title: "No client entrypoint specified in renderer.", + message: (componentName, clientDirective, rendererName) => `\`${componentName}\` component has a \`client:${clientDirective}\` directive, but no client entrypoint was provided by \`${rendererName}\`.`, + hint: "See https://docs.astro.build/en/reference/integrations-reference/#addrenderer-option for more information on how to configure your renderer." +}; +const NoClientOnlyHint = { + name: "NoClientOnlyHint", + title: "Missing hint on client:only directive.", + message: (componentName) => `Unable to render \`${componentName}\`. When using the \`client:only\` hydration strategy, Astro needs a hint to use the correct renderer.`, + hint: (probableRenderers) => `Did you mean to pass \`client:only="${probableRenderers}"\`? See https://docs.astro.build/en/reference/directives-reference/#clientonly for more information on client:only` +}; +const InvalidGetStaticPathParam = { + name: "InvalidGetStaticPathParam", + title: "Invalid value returned by a `getStaticPaths` path.", + message: (paramType) => `Invalid params given to \`getStaticPaths\` path. Expected an \`object\`, got \`${paramType}\``, + hint: "See https://docs.astro.build/en/reference/api-reference/#getstaticpaths for more information on getStaticPaths." +}; +const InvalidGetStaticPathsEntry = { + name: "InvalidGetStaticPathsEntry", + title: "Invalid entry inside getStaticPath's return value", + message: (entryType) => `Invalid entry returned by getStaticPaths. Expected an object, got \`${entryType}\``, + hint: "If you're using a `.map` call, you might be looking for `.flatMap()` instead. See https://docs.astro.build/en/reference/api-reference/#getstaticpaths for more information on getStaticPaths." +}; +const InvalidGetStaticPathsReturn = { + name: "InvalidGetStaticPathsReturn", + title: "Invalid value returned by getStaticPaths.", + message: (returnType) => `Invalid type returned by \`getStaticPaths\`. Expected an \`array\`, got \`${returnType}\``, + hint: "See https://docs.astro.build/en/reference/api-reference/#getstaticpaths for more information on getStaticPaths." +}; +const GetStaticPathsRemovedRSSHelper = { + name: "GetStaticPathsRemovedRSSHelper", + title: "getStaticPaths RSS helper is not available anymore.", + message: "The RSS helper has been removed from `getStaticPaths`. Try the new @astrojs/rss package instead.", + hint: "See https://docs.astro.build/en/guides/rss/ for more information." +}; +const GetStaticPathsExpectedParams = { + name: "GetStaticPathsExpectedParams", + title: "Missing params property on `getStaticPaths` route.", + message: "Missing or empty required `params` property on `getStaticPaths` route.", + hint: "See https://docs.astro.build/en/reference/api-reference/#getstaticpaths for more information on getStaticPaths." +}; +const GetStaticPathsInvalidRouteParam = { + name: "GetStaticPathsInvalidRouteParam", + title: "Invalid value for `getStaticPaths` route parameter.", + message: (key, value, valueType) => `Invalid getStaticPaths route parameter for \`${key}\`. Expected undefined, a string or a number, received \`${valueType}\` (\`${value}\`)`, + hint: "See https://docs.astro.build/en/reference/api-reference/#getstaticpaths for more information on getStaticPaths." +}; +const GetStaticPathsRequired = { + name: "GetStaticPathsRequired", + title: "`getStaticPaths()` function required for dynamic routes.", + message: "`getStaticPaths()` function is required for dynamic routes. Make sure that you `export` a `getStaticPaths` function from your dynamic route.", + hint: `See https://docs.astro.build/en/guides/routing/#dynamic-routes for more information on dynamic routes. + +Alternatively, set \`output: "server"\` or \`output: "hybrid"\` in your Astro config file to switch to a non-static server build. This error can also occur if using \`export const prerender = true;\`. +See https://docs.astro.build/en/guides/server-side-rendering/ for more information on non-static rendering.` +}; +const ReservedSlotName = { + name: "ReservedSlotName", + title: "Invalid slot name.", + message: (slotName) => `Unable to create a slot named \`${slotName}\`. \`${slotName}\` is a reserved slot name. Please update the name of this slot.` +}; +const NoAdapterInstalled = { + name: "NoAdapterInstalled", + title: "Cannot use Server-side Rendering without an adapter.", + message: `Cannot use \`output: 'server'\` or \`output: 'hybrid'\` without an adapter. Please install and configure the appropriate server adapter for your final deployment.`, + hint: "See https://docs.astro.build/en/guides/server-side-rendering/ for more information." +}; +const NoMatchingImport = { + name: "NoMatchingImport", + title: "No import found for component.", + message: (componentName) => `Could not render \`${componentName}\`. No matching import has been found for \`${componentName}\`.`, + hint: "Please make sure the component is properly imported." +}; +const InvalidPrerenderExport = { + name: "InvalidPrerenderExport", + title: "Invalid prerender export.", + message(prefix, suffix, isHydridOuput) { + const defaultExpectedValue = isHydridOuput ? "false" : "true"; + let msg = `A \`prerender\` export has been detected, but its value cannot be statically analyzed.`; + if (prefix !== "const") + msg += ` +Expected \`const\` declaration but got \`${prefix}\`.`; + if (suffix !== "true") + msg += ` +Expected \`${defaultExpectedValue}\` value but got \`${suffix}\`.`; + return msg; + }, + hint: "Mutable values declared at runtime are not supported. Please make sure to use exactly `export const prerender = true`." +}; +const InvalidComponentArgs = { + name: "InvalidComponentArgs", + title: "Invalid component arguments.", + message: (name) => `Invalid arguments passed to${name ? ` <${name}>` : ""} component.`, + hint: "Astro components cannot be rendered directly via function call, such as `Component()` or `{items.map(Component)}`." +}; +const PageNumberParamNotFound = { + name: "PageNumberParamNotFound", + title: "Page number param not found.", + message: (paramName) => `[paginate()] page number param \`${paramName}\` not found in your filepath.`, + hint: "Rename your file to `[page].astro` or `[...page].astro`." +}; +const ImageMissingAlt = { + name: "ImageMissingAlt", + title: 'Image missing required "alt" property.', + message: 'Image missing "alt" property. "alt" text is required to describe important images on the page.', + hint: 'Use an empty string ("") for decorative images.' +}; +const InvalidImageService = { + name: "InvalidImageService", + title: "Error while loading image service.", + message: "There was an error loading the configured image service. Please see the stack trace for more information." +}; +const MissingImageDimension = { + name: "MissingImageDimension", + title: "Missing image dimensions", + message: (missingDimension, imageURL) => `Missing ${missingDimension === "both" ? "width and height attributes" : `${missingDimension} attribute`} for ${imageURL}. When using remote images, both dimensions are required unless in order to avoid CLS.`, + hint: "If your image is inside your `src` folder, you probably meant to import it instead. See [the Imports guide for more information](https://docs.astro.build/en/guides/imports/#other-assets). You can also use `inferSize={true}` for remote images to get the original dimensions." +}; +const FailedToFetchRemoteImageDimensions = { + name: "FailedToFetchRemoteImageDimensions", + title: "Failed to retrieve remote image dimensions", + message: (imageURL) => `Failed to get the dimensions for ${imageURL}.`, + hint: "Verify your remote image URL is accurate, and that you are not using `inferSize` with a file located in your `public/` folder." +}; +const UnsupportedImageFormat = { + name: "UnsupportedImageFormat", + title: "Unsupported image format", + message: (format, imagePath, supportedFormats) => `Received unsupported format \`${format}\` from \`${imagePath}\`. Currently only ${supportedFormats.join( + ", " + )} are supported by our image services.`, + hint: "Using an `img` tag directly instead of the `Image` component might be what you're looking for." +}; +const UnsupportedImageConversion = { + name: "UnsupportedImageConversion", + title: "Unsupported image conversion", + message: "Converting between vector (such as SVGs) and raster (such as PNGs and JPEGs) images is not currently supported." +}; +const PrerenderDynamicEndpointPathCollide = { + name: "PrerenderDynamicEndpointPathCollide", + title: "Prerendered dynamic endpoint has path collision.", + message: (pathname) => `Could not render \`${pathname}\` with an \`undefined\` param as the generated path will collide during prerendering. Prevent passing \`undefined\` as \`params\` for the endpoint's \`getStaticPaths()\` function, or add an additional extension to the endpoint's filename.`, + hint: (filename) => `Rename \`${filename}\` to \`${filename.replace(/\.(?:js|ts)/, (m) => `.json` + m)}\`` +}; +const ExpectedImage = { + name: "ExpectedImage", + title: "Expected src to be an image.", + message: (src, typeofOptions, fullOptions) => `Expected \`src\` property for \`getImage\` or \`\` to be either an ESM imported image or a string with the path of a remote image. Received \`${src}\` (type: \`${typeofOptions}\`). + +Full serialized options received: \`${fullOptions}\`.`, + hint: "This error can often happen because of a wrong path. Make sure the path to your image is correct. If you're passing an async function, make sure to call and await it." +}; +const ExpectedImageOptions = { + name: "ExpectedImageOptions", + title: "Expected image options.", + message: (options) => `Expected getImage() parameter to be an object. Received \`${options}\`.` +}; +const IncompatibleDescriptorOptions = { + name: "IncompatibleDescriptorOptions", + title: "Cannot set both `densities` and `widths`", + message: "Only one of `densities` or `widths` can be specified. In most cases, you'll probably want to use only `widths` if you require specific widths.", + hint: "Those attributes are used to construct a `srcset` attribute, which cannot have both `x` and `w` descriptors." +}; +const ImageNotFound = { + name: "ImageNotFound", + title: "Image not found.", + message: (imagePath) => `Could not find requested image \`${imagePath}\`. Does it exist?`, + hint: "This is often caused by a typo in the image path. Please make sure the file exists, and is spelled correctly." +}; +const NoImageMetadata = { + name: "NoImageMetadata", + title: "Could not process image metadata.", + message: (imagePath) => `Could not process image metadata${imagePath ? ` for \`${imagePath}\`` : ""}.`, + hint: "This is often caused by a corrupted or malformed image. Re-exporting the image from your image editor may fix this issue." +}; +const MarkdownImageNotFound = { + name: "MarkdownImageNotFound", + title: "Image not found.", + message: (imagePath, fullImagePath) => `Could not find requested image \`${imagePath}\`${fullImagePath ? ` at \`${fullImagePath}\`.` : "."}`, + hint: "This is often caused by a typo in the image path. Please make sure the file exists, and is spelled correctly." +}; +const CouldNotTransformImage = { + name: "CouldNotTransformImage", + title: "Could not transform image.", + message: (imagePath) => `Could not transform image \`${imagePath}\`. See the stack trace for more information.`, + hint: "This is often caused by a corrupted or malformed image. Re-exporting the image from your image editor may fix this issue." +}; +const ResponseSentError = { + name: "ResponseSentError", + title: "Unable to set response.", + message: "The response has already been sent to the browser and cannot be altered." +}; +const MiddlewareNoDataOrNextCalled = { + name: "MiddlewareNoDataOrNextCalled", + title: "The middleware didn't return a `Response`.", + message: "Make sure your middleware returns a `Response` object, either directly or by returning the `Response` from calling the `next` function." +}; +const MiddlewareNotAResponse = { + name: "MiddlewareNotAResponse", + title: "The middleware returned something that is not a `Response` object.", + message: "Any data returned from middleware must be a valid `Response` object." +}; +const LocalsNotAnObject = { + name: "LocalsNotAnObject", + title: "Value assigned to `locals` is not accepted.", + message: "`locals` can only be assigned to an object. Other values like numbers, strings, etc. are not accepted.", + hint: "If you tried to remove some information from the `locals` object, try to use `delete` or set the property to `undefined`." +}; +const MiddlewareCantBeLoaded = { + name: "MiddlewareCantBeLoaded", + title: "Can't load the middleware.", + message: "The middleware threw an error while Astro was trying to loading it." +}; +const LocalImageUsedWrongly = { + name: "LocalImageUsedWrongly", + title: "Local images must be imported.", + message: (imageFilePath) => `\`Image\`'s and \`getImage\`'s \`src\` parameter must be an imported image or an URL, it cannot be a string filepath. Received \`${imageFilePath}\`.`, + hint: "If you want to use an image from your `src` folder, you need to either import it or if the image is coming from a content collection, use the [image() schema helper](https://docs.astro.build/en/guides/images/#images-in-content-collections). See https://docs.astro.build/en/guides/images/#src-required for more information on the `src` property." +}; +const AstroGlobUsedOutside = { + name: "AstroGlobUsedOutside", + title: "Astro.glob() used outside of an Astro file.", + message: (globStr) => `\`Astro.glob(${globStr})\` can only be used in \`.astro\` files. \`import.meta.glob(${globStr})\` can be used instead to achieve a similar result.`, + hint: "See Vite's documentation on `import.meta.glob` for more information: https://vitejs.dev/guide/features.html#glob-import" +}; +const AstroGlobNoMatch = { + name: "AstroGlobNoMatch", + title: "Astro.glob() did not match any files.", + message: (globStr) => `\`Astro.glob(${globStr})\` did not return any matching files.`, + hint: "Check the pattern for typos." +}; +const RedirectWithNoLocation = { + name: "RedirectWithNoLocation", + title: "A redirect must be given a location with the `Location` header." +}; +const InvalidDynamicRoute = { + name: "InvalidDynamicRoute", + title: "Invalid dynamic route.", + message: (route, invalidParam, received) => `The ${invalidParam} param for route ${route} is invalid. Received **${received}**.` +}; +const MissingSharp = { + name: "MissingSharp", + title: "Could not find Sharp.", + message: "Could not find Sharp. Please install Sharp (`sharp`) manually into your project or migrate to another image service.", + hint: "See Sharp's installation instructions for more information: https://sharp.pixelplumbing.com/install. If you are not relying on `astro:assets` to optimize, transform, or process any images, you can configure a passthrough image service instead of installing Sharp. See https://docs.astro.build/en/reference/errors/missing-sharp for more information.\n\nSee https://docs.astro.build/en/guides/images/#default-image-service for more information on how to migrate to another image service." +}; +const UnknownViteError = { + name: "UnknownViteError", + title: "Unknown Vite Error." +}; +const FailedToLoadModuleSSR = { + name: "FailedToLoadModuleSSR", + title: "Could not import file.", + message: (importName) => `Could not import \`${importName}\`.`, + hint: "This is often caused by a typo in the import path. Please make sure the file exists." +}; +const InvalidGlob = { + name: "InvalidGlob", + title: "Invalid glob pattern.", + message: (globPattern) => `Invalid glob pattern: \`${globPattern}\`. Glob patterns must start with './', '../' or '/'.`, + hint: "See https://docs.astro.build/en/guides/imports/#glob-patterns for more information on supported glob patterns." +}; +const FailedToFindPageMapSSR = { + name: "FailedToFindPageMapSSR", + title: "Astro couldn't find the correct page to render", + message: "Astro couldn't find the correct page to render, probably because it wasn't correctly mapped for SSR usage. This is an internal error. Please file an issue." +}; +const MissingLocale = { + name: "MissingLocaleError", + title: "The provided locale does not exist.", + message: (locale) => `The locale/path \`${locale}\` does not exist in the configured \`i18n.locales\`.` +}; +const MissingIndexForInternationalization = { + name: "MissingIndexForInternationalizationError", + title: "Index page not found.", + message: (defaultLocale) => `Could not find index page. A root index page is required in order to create a redirect to the index URL of the default locale. (\`/${defaultLocale}\`)`, + hint: (src) => `Create an index page (\`index.astro, index.md, etc.\`) in \`${src}\`.` +}; +const NoPrerenderedRoutesWithDomains = { + name: "NoPrerenderedRoutesWithDomains", + title: "Prerendered routes aren't supported when internationalization domains are enabled.", + message: (component) => `Static pages aren't yet supported with multiple domains. If you wish to enable this feature, you have to disable prerendering for the page ${component}` +}; +const CantRenderPage = { + name: "CantRenderPage", + title: "Astro can't render the route.", + message: "Astro cannot find any content to render for this route. There is no file or redirect associated with this route.", + hint: "If you expect to find a route here, this may be an Astro bug. Please file an issue/restart the dev server" +}; +const UnhandledRejection = { + name: "UnhandledRejection", + title: "Unhandled rejection", + message: (stack) => `Astro detected an unhandled rejection. Here's the stack trace: +${stack}`, + hint: "Make sure your promises all have an `await` or a `.catch()` handler." +}; +const i18nNotEnabled = { + name: "i18nNotEnabled", + title: "i18n Not Enabled", + message: "The `astro:i18n` module can not be used without enabling i18n in your Astro config.", + hint: "See https://docs.astro.build/en/guides/internationalization for a guide on setting up i18n." +}; +const UnknownCSSError = { + name: "UnknownCSSError", + title: "Unknown CSS Error." +}; +const CSSSyntaxError = { + name: "CSSSyntaxError", + title: "CSS Syntax Error." +}; +const UnknownMarkdownError = { + name: "UnknownMarkdownError", + title: "Unknown Markdown Error." +}; +const MarkdownFrontmatterParseError = { + name: "MarkdownFrontmatterParseError", + title: "Failed to parse Markdown frontmatter." +}; +const InvalidFrontmatterInjectionError = { + name: "InvalidFrontmatterInjectionError", + title: "Invalid frontmatter injection.", + message: 'A remark or rehype plugin attempted to inject invalid frontmatter. Ensure "astro.frontmatter" is set to a valid JSON object that is not `null` or `undefined`.', + hint: "See the frontmatter injection docs https://docs.astro.build/en/guides/markdown-content/#modifying-frontmatter-programmatically for more information." +}; +const MdxIntegrationMissingError = { + name: "MdxIntegrationMissingError", + title: "MDX integration missing.", + message: (file) => `Unable to render ${file}. Ensure that the \`@astrojs/mdx\` integration is installed.`, + hint: "See the MDX integration docs for installation and usage instructions: https://docs.astro.build/en/guides/integrations-guide/mdx/" +}; +const UnknownConfigError = { + name: "UnknownConfigError", + title: "Unknown configuration error." +}; +const ConfigNotFound = { + name: "ConfigNotFound", + title: "Specified configuration file not found.", + message: (configFile) => `Unable to resolve \`--config "${configFile}"\`. Does the file exist?` +}; +const ConfigLegacyKey = { + name: "ConfigLegacyKey", + title: "Legacy configuration detected.", + message: (legacyConfigKey) => `Legacy configuration detected: \`${legacyConfigKey}\`.`, + hint: "Please update your configuration to the new format.\nSee https://astro.build/config for more information." +}; +const UnknownCLIError = { + name: "UnknownCLIError", + title: "Unknown CLI Error." +}; +const GenerateContentTypesError = { + name: "GenerateContentTypesError", + title: "Failed to generate content types.", + message: (errorMessage) => `\`astro sync\` command failed to generate content collection types: ${errorMessage}`, + hint: "Check your `src/content/config.*` file for typos." +}; +const UnknownContentCollectionError = { + name: "UnknownContentCollectionError", + title: "Unknown Content Collection Error." +}; +const InvalidContentEntryFrontmatterError = { + name: "InvalidContentEntryFrontmatterError", + title: "Content entry frontmatter does not match schema.", + message(collection, entryId, error) { + return [ + `**${String(collection)} \u2192 ${String( + entryId + )}** frontmatter does not match collection schema.`, + ...error.errors.map((zodError) => zodError.message) + ].join("\n"); + }, + hint: "See https://docs.astro.build/en/guides/content-collections/ for more information on content schemas." +}; +const InvalidContentEntrySlugError = { + name: "InvalidContentEntrySlugError", + title: "Invalid content entry slug.", + message(collection, entryId) { + return `${String(collection)} \u2192 ${String( + entryId + )} has an invalid slug. \`slug\` must be a string.`; + }, + hint: "See https://docs.astro.build/en/guides/content-collections/ for more on the `slug` field." +}; +const ContentSchemaContainsSlugError = { + name: "ContentSchemaContainsSlugError", + title: "Content Schema should not contain `slug`.", + message: (collectionName) => `A content collection schema should not contain \`slug\` since it is reserved for slug generation. Remove this from your ${collectionName} collection schema.`, + hint: "See https://docs.astro.build/en/guides/content-collections/ for more on the `slug` field." +}; +const CollectionDoesNotExistError = { + name: "CollectionDoesNotExistError", + title: "Collection does not exist", + message: (collectionName) => `The collection **${collectionName}** does not exist. Ensure a collection directory with this name exists.`, + hint: "See https://docs.astro.build/en/guides/content-collections/ for more on creating collections." +}; +const MixedContentDataCollectionError = { + name: "MixedContentDataCollectionError", + title: "Content and data cannot be in same collection.", + message: (collectionName) => `**${collectionName}** contains a mix of content and data entries. All entries must be of the same type.`, + hint: "Store data entries in a new collection separate from your content collection." +}; +const ContentCollectionTypeMismatchError = { + name: "ContentCollectionTypeMismatchError", + title: "Collection contains entries of a different type.", + message: (collection, expectedType, actualType) => `${collection} contains ${expectedType} entries, but is configured as a ${actualType} collection.` +}; +const DataCollectionEntryParseError = { + name: "DataCollectionEntryParseError", + title: "Data collection entry failed to parse.", + message(entryId, errorMessage) { + return `**${entryId}** failed to parse: ${errorMessage}`; + }, + hint: "Ensure your data entry is an object with valid JSON (for `.json` entries) or YAML (for `.yaml` entries)." +}; +const DuplicateContentEntrySlugError = { + name: "DuplicateContentEntrySlugError", + title: "Duplicate content entry slug.", + message(collection, slug, preExisting, alsoFound) { + return `**${collection}** contains multiple entries with the same slug: \`${slug}\`. Slugs must be unique. + +Entries: +- ${preExisting} +- ${alsoFound}`; + } +}; +const UnsupportedConfigTransformError = { + name: "UnsupportedConfigTransformError", + title: "Unsupported transform in content config.", + message: (parseError) => `\`transform()\` functions in your content config must return valid JSON, or data types compatible with the devalue library (including Dates, Maps, and Sets). +Full error: ${parseError}`, + hint: "See the devalue library for all supported types: https://github.com/rich-harris/devalue" +}; +const UnknownError = { name: "UnknownError", title: "Unknown Error." }; +export { + AstroGlobNoMatch, + AstroGlobUsedOutside, + CSSSyntaxError, + CantRenderPage, + ClientAddressNotAvailable, + CollectionDoesNotExistError, + ConfigLegacyKey, + ConfigNotFound, + ContentCollectionTypeMismatchError, + ContentSchemaContainsSlugError, + CouldNotTransformImage, + DataCollectionEntryParseError, + DuplicateContentEntrySlugError, + ExpectedImage, + ExpectedImageOptions, + FailedToFetchRemoteImageDimensions, + FailedToFindPageMapSSR, + FailedToLoadModuleSSR, + GenerateContentTypesError, + GetStaticPathsExpectedParams, + GetStaticPathsInvalidRouteParam, + GetStaticPathsRemovedRSSHelper, + GetStaticPathsRequired, + ImageMissingAlt, + ImageNotFound, + IncompatibleDescriptorOptions, + InvalidComponentArgs, + InvalidContentEntryFrontmatterError, + InvalidContentEntrySlugError, + InvalidDynamicRoute, + InvalidFrontmatterInjectionError, + InvalidGetStaticPathParam, + InvalidGetStaticPathsEntry, + InvalidGetStaticPathsReturn, + InvalidGlob, + InvalidImageService, + InvalidPrerenderExport, + LocalImageUsedWrongly, + LocalsNotAnObject, + MarkdownFrontmatterParseError, + MarkdownImageNotFound, + MdxIntegrationMissingError, + MiddlewareCantBeLoaded, + MiddlewareNoDataOrNextCalled, + MiddlewareNotAResponse, + MissingImageDimension, + MissingIndexForInternationalization, + MissingLocale, + MissingMediaQueryDirective, + MissingSharp, + MixedContentDataCollectionError, + NoAdapterInstalled, + NoClientEntrypoint, + NoClientOnlyHint, + NoImageMetadata, + NoMatchingImport, + NoMatchingRenderer, + NoMatchingStaticPathFound, + NoPrerenderedRoutesWithDomains, + OnlyResponseCanBeReturned, + PageNumberParamNotFound, + PrerenderDynamicEndpointPathCollide, + RedirectWithNoLocation, + ReservedSlotName, + ResponseSentError, + StaticClientAddressNotAvailable, + StaticRedirectNotAvailable, + UnhandledRejection, + UnknownCLIError, + UnknownCSSError, + UnknownCompilerError, + UnknownConfigError, + UnknownContentCollectionError, + UnknownError, + UnknownMarkdownError, + UnknownViteError, + UnsupportedConfigTransformError, + UnsupportedImageConversion, + UnsupportedImageFormat, + i18nNotEnabled +}; diff --git a/.pnpm-store/v3/files/77/b5fba4de6b0f4897ec37a6cebc1873ad08a8f963eba08ff24f502b27eb9e6bafb8e9ecad375d32bdeeb3d0b50f3fa41082932b5804c75526fc1c02feed1bf5 b/.pnpm-store/v3/files/77/b5fba4de6b0f4897ec37a6cebc1873ad08a8f963eba08ff24f502b27eb9e6bafb8e9ecad375d32bdeeb3d0b50f3fa41082932b5804c75526fc1c02feed1bf5 new file mode 100644 index 00000000..904e9b01 --- /dev/null +++ b/.pnpm-store/v3/files/77/b5fba4de6b0f4897ec37a6cebc1873ad08a8f963eba08ff24f502b27eb9e6bafb8e9ecad375d32bdeeb3d0b50f3fa41082932b5804c75526fc1c02feed1bf5 @@ -0,0 +1,11 @@ +import { readUInt32LE } from "./utils.js"; +const DDS = { + validate: (input) => readUInt32LE(input, 0) === 542327876, + calculate: (input) => ({ + height: readUInt32LE(input, 12), + width: readUInt32LE(input, 16) + }) +}; +export { + DDS +}; diff --git a/.pnpm-store/v3/files/78/d8f2ec08148f7d7142214072694ee4d60ffb42c74a2b386149913b2b262150f5fca1b6204e9edcf382d6fe59e1f868ec9b087decbcb94093c526ab7520a093 b/.pnpm-store/v3/files/78/d8f2ec08148f7d7142214072694ee4d60ffb42c74a2b386149913b2b262150f5fca1b6204e9edcf382d6fe59e1f868ec9b087decbcb94093c526ab7520a093 new file mode 100644 index 00000000..f50f95d0 --- /dev/null +++ b/.pnpm-store/v3/files/78/d8f2ec08148f7d7142214072694ee4d60ffb42c74a2b386149913b2b262150f5fca1b6204e9edcf382d6fe59e1f868ec9b087decbcb94093c526ab7520a093 @@ -0,0 +1,53 @@ +import { findBox, readUInt32BE, toUTF8String } from "./utils.js"; +const brandMap = { + avif: "avif", + mif1: "heif", + msf1: "heif", + // hief-sequence + heic: "heic", + heix: "heic", + hevc: "heic", + // heic-sequence + hevx: "heic" + // heic-sequence +}; +function detectBrands(buffer, start, end) { + let brandsDetected = {}; + for (let i = start; i <= end; i += 4) { + const brand = toUTF8String(buffer, i, i + 4); + if (brand in brandMap) { + brandsDetected[brand] = 1; + } + } + if ("avif" in brandsDetected) { + return "avif"; + } else if ("heic" in brandsDetected || "heix" in brandsDetected || "hevc" in brandsDetected || "hevx" in brandsDetected) { + return "heic"; + } else if ("mif1" in brandsDetected || "msf1" in brandsDetected) { + return "heif"; + } +} +const HEIF = { + validate(buffer) { + const ftype = toUTF8String(buffer, 4, 8); + const brand = toUTF8String(buffer, 8, 12); + return "ftyp" === ftype && brand in brandMap; + }, + calculate(buffer) { + const metaBox = findBox(buffer, "meta", 0); + const iprpBox = metaBox && findBox(buffer, "iprp", metaBox.offset + 12); + const ipcoBox = iprpBox && findBox(buffer, "ipco", iprpBox.offset + 8); + const ispeBox = ipcoBox && findBox(buffer, "ispe", ipcoBox.offset + 8); + if (ispeBox) { + return { + height: readUInt32BE(buffer, ispeBox.offset + 16), + width: readUInt32BE(buffer, ispeBox.offset + 12), + type: detectBrands(buffer, 8, metaBox.offset) + }; + } + throw new TypeError("Invalid HEIF, no size found"); + } +}; +export { + HEIF +}; diff --git a/.pnpm-store/v3/files/79/ab845c1816caaf3970b2dd60c3cdff67ec97def1cfa4c6635ca48c5364aed36b543f3ca944d07aa9c1760165cfe7612bf5fc65f7f3467619bd9259c3a21b88 b/.pnpm-store/v3/files/79/ab845c1816caaf3970b2dd60c3cdff67ec97def1cfa4c6635ca48c5364aed36b543f3ca944d07aa9c1760165cfe7612bf5fc65f7f3467619bd9259c3a21b88 new file mode 100644 index 00000000..4e06c634 --- /dev/null +++ b/.pnpm-store/v3/files/79/ab845c1816caaf3970b2dd60c3cdff67ec97def1cfa4c6635ca48c5364aed36b543f3ca944d07aa9c1760165cfe7612bf5fc65f7f3467619bd9259c3a21b88 @@ -0,0 +1,2 @@ +import type { IImage } from './interface.ts'; +export declare const WEBP: IImage; diff --git a/.pnpm-store/v3/files/7b/594ec29b2a01b7a316c3004226f1f1965a912e043a93240758abce6e5be8fa997d88b8dfa66c3d159445a9fd2975e1f33045a388f6cc3b641a3bbd897155e0 b/.pnpm-store/v3/files/7b/594ec29b2a01b7a316c3004226f1f1965a912e043a93240758abce6e5be8fa997d88b8dfa66c3d159445a9fd2975e1f33045a388f6cc3b641a3bbd897155e0 new file mode 100644 index 00000000..88f50985 --- /dev/null +++ b/.pnpm-store/v3/files/7b/594ec29b2a01b7a316c3004226f1f1965a912e043a93240758abce6e5be8fa997d88b8dfa66c3d159445a9fd2975e1f33045a388f6cc3b641a3bbd897155e0 @@ -0,0 +1,34 @@ +import { toUTF8String, readUInt32BE } from "./utils.js"; +const pngSignature = "PNG\r\n\n"; +const pngImageHeaderChunkName = "IHDR"; +const pngFriedChunkName = "CgBI"; +const PNG = { + validate(input) { + if (pngSignature === toUTF8String(input, 1, 8)) { + let chunkName = toUTF8String(input, 12, 16); + if (chunkName === pngFriedChunkName) { + chunkName = toUTF8String(input, 28, 32); + } + if (chunkName !== pngImageHeaderChunkName) { + throw new TypeError("Invalid PNG"); + } + return true; + } + return false; + }, + calculate(input) { + if (toUTF8String(input, 12, 16) === pngFriedChunkName) { + return { + height: readUInt32BE(input, 36), + width: readUInt32BE(input, 32) + }; + } + return { + height: readUInt32BE(input, 20), + width: readUInt32BE(input, 16) + }; + } +}; +export { + PNG +}; diff --git a/.pnpm-store/v3/files/7d/31fbce0bdd747d14cf58648a055289a3588f609b43496818c8b6f748a89ac2bf39dd03d329e73f8ce105a9b9b942ccb7996f670d14eaa5de2d6c07265f3ffa b/.pnpm-store/v3/files/7d/31fbce0bdd747d14cf58648a055289a3588f609b43496818c8b6f748a89ac2bf39dd03d329e73f8ce105a9b9b942ccb7996f670d14eaa5de2d6c07265f3ffa new file mode 100644 index 00000000..f07e1ac1 --- /dev/null +++ b/.pnpm-store/v3/files/7d/31fbce0bdd747d14cf58648a055289a3588f609b43496818c8b6f748a89ac2bf39dd03d329e73f8ce105a9b9b942ccb7996f670d14eaa5de2d6c07265f3ffa @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024 Simon Lydell + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/.pnpm-store/v3/files/7d/b84cdcf9fe01b2c06039accb8c95dcd617c1f5225c7089f9c49fe02d2e15967df59bf752aca9930b0b45e70f35b18c98a8bd6c147f1c62a54e30059654b363 b/.pnpm-store/v3/files/7d/b84cdcf9fe01b2c06039accb8c95dcd617c1f5225c7089f9c49fe02d2e15967df59bf752aca9930b0b45e70f35b18c98a8bd6c147f1c62a54e30059654b363 new file mode 100644 index 00000000..d49e64e8 --- /dev/null +++ b/.pnpm-store/v3/files/7d/b84cdcf9fe01b2c06039accb8c95dcd617c1f5225c7089f9c49fe02d2e15967df59bf752aca9930b0b45e70f35b18c98a8bd6c147f1c62a54e30059654b363 @@ -0,0 +1,62 @@ +import { renderComponentToString } from "./component.js"; +import { isAstroComponentFactory } from "./astro/index.js"; +import { renderToReadableStream, renderToString, renderToAsyncIterable } from "./astro/render.js"; +import { encoder } from "./common.js"; +import { isNode } from "./util.js"; +async function renderPage(result, componentFactory, props, children, streaming, route) { + if (!isAstroComponentFactory(componentFactory)) { + result._metadata.headInTree = result.componentMetadata.get(componentFactory.moduleId)?.containsHead ?? false; + const pageProps = { ...props ?? {}, "server:root": true }; + const str = await renderComponentToString( + result, + componentFactory.name, + componentFactory, + pageProps, + {}, + true, + route + ); + const bytes = encoder.encode(str); + return new Response(bytes, { + headers: new Headers([ + ["Content-Type", "text/html; charset=utf-8"], + ["Content-Length", bytes.byteLength.toString()] + ]) + }); + } + result._metadata.headInTree = result.componentMetadata.get(componentFactory.moduleId)?.containsHead ?? false; + let body; + if (streaming) { + if (isNode) { + const nodeBody = await renderToAsyncIterable( + result, + componentFactory, + props, + children, + true, + route + ); + body = nodeBody; + } else { + body = await renderToReadableStream(result, componentFactory, props, children, true, route); + } + } else { + body = await renderToString(result, componentFactory, props, children, true, route); + } + if (body instanceof Response) + return body; + const init = result.response; + const headers = new Headers(init.headers); + if (!streaming && typeof body === "string") { + body = encoder.encode(body); + headers.set("Content-Length", body.byteLength.toString()); + } + if (route?.component.endsWith(".md")) { + headers.set("Content-Type", "text/html; charset=utf-8"); + } + const response = new Response(body, { ...init, headers }); + return response; +} +export { + renderPage +}; diff --git a/.pnpm-store/v3/files/7f/96ca959e18fc88146a94bf2553f5dec3c2571a77fe5dac2720b8ce7a035eff0923c8fbd0f720a88f5e7966272cbe5e4a919760f71badf4908b651f4bb123f6 b/.pnpm-store/v3/files/7f/96ca959e18fc88146a94bf2553f5dec3c2571a77fe5dac2720b8ce7a035eff0923c8fbd0f720a88f5e7966272cbe5e4a919760f71badf4908b651f4bb123f6 new file mode 100644 index 00000000..a4910cbf --- /dev/null +++ b/.pnpm-store/v3/files/7f/96ca959e18fc88146a94bf2553f5dec3c2571a77fe5dac2720b8ce7a035eff0923c8fbd0f720a88f5e7966272cbe5e4a919760f71badf4908b651f4bb123f6 @@ -0,0 +1,439 @@ +import {FileImporter, Importer, NodePackageImporter} from './importer'; +import {Logger} from './logger'; +import {Value} from './value'; +import {PromiseOr} from './util/promise_or'; + +/** + * Syntaxes supported by Sass: + * + * - `'scss'` is the [SCSS + * syntax](https://sass-lang.com/documentation/syntax#scss). + * - `'indented'` is the [indented + * syntax](https://sass-lang.com/documentation/syntax#the-indented-syntax) + * - `'css'` is plain CSS, which is parsed like SCSS but forbids the use of any + * special Sass features. + * + * @category Options + */ +export type Syntax = 'scss' | 'indented' | 'css'; + +/** + * Possible output styles for the compiled CSS: + * + * - `"expanded"` (the default for Dart Sass) writes each selector and + * declaration on its own line. + * + * - `"compressed"` removes as many extra characters as possible, and writes + * the entire stylesheet on a single line. + * + * @category Options + */ +export type OutputStyle = 'expanded' | 'compressed'; + +/** + * A callback that implements a custom Sass function. This can be passed to + * {@link Options.functions}. + * + * ```js + * const result = sass.compile('style.scss', { + * functions: { + * "sum($arg1, $arg2)": (args) => { + * const arg1 = args[0].assertNumber('arg1'); + * const value1 = arg1.value; + * const value2 = args[1].assertNumber('arg2') + * .convertValueToMatch(arg1, 'arg2', 'arg1'); + * return new sass.SassNumber(value1 + value2).coerceToMatch(arg1); + * } + * } + * }); + * ``` + * + * @typeParam sync - A `CustomFunction<'sync'>` must return synchronously, but + * in return it can be passed to {@link compile} and {@link compileString} in + * addition to {@link compileAsync} and {@link compileStringAsync}. + * + * A `CustomFunction<'async'>` may either return synchronously or + * asynchronously, but it can only be used with {@link compileAsync} and {@link + * compileStringAsync}. + * + * @param args - An array of arguments passed by the function's caller. If the + * function takes [arbitrary + * arguments](https://sass-lang.com/documentation/at-rules/function#taking-arbitrary-arguments), + * the last element will be a {@link SassArgumentList}. + * + * @returns The function's result. This may be in the form of a `Promise`, but + * if it is the function may only be passed to {@link compileAsync} and {@link + * compileStringAsync}, not {@link compile} or {@link compileString}. + * + * @throws any - This function may throw an error, which the Sass compiler will + * treat as the function call failing. If the exception object has a `message` + * property, it will be used as the wrapped exception's message; otherwise, the + * exception object's `toString()` will be used. This means it's safe for custom + * functions to throw plain strings. + * + * @category Custom Function + */ +export type CustomFunction = ( + args: Value[] +) => PromiseOr; + +/** + * Options that can be passed to {@link compile}, {@link compileAsync}, {@link + * compileString}, or {@link compileStringAsync}. + * + * @typeParam sync - This lets the TypeScript checker verify that asynchronous + * {@link Importer}s, {@link FileImporter}s, and {@link CustomFunction}s aren't + * passed to {@link compile} or {@link compileString}. + * + * @category Options + */ +export interface Options { + /** + * If this is `true`, the compiler will exclusively use ASCII characters in + * its error and warning messages. Otherwise, it may use non-ASCII Unicode + * characters as well. + * + * @defaultValue `false` + * @category Messages + */ + alertAscii?: boolean; + + /** + * If this is `true`, the compiler will use ANSI color escape codes in its + * error and warning messages. If it's `false`, it won't use these. If it's + * undefined, the compiler will determine whether or not to use colors + * depending on whether the user is using an interactive terminal. + * + * @category Messages + */ + alertColor?: boolean; + + /** + * If `true`, the compiler may prepend `@charset "UTF-8";` or U+FEFF + * (byte-order marker) if it outputs non-ASCII CSS. + * + * If `false`, the compiler never emits these byte sequences. This is ideal + * when concatenating or embedding in HTML `