From 6cfa42d6b857dd4cf21c4fd412d4acf307e9e834 Mon Sep 17 00:00:00 2001 From: Matt Kane Date: Mon, 9 Sep 2024 10:39:13 +0100 Subject: [PATCH 01/43] feat: support pattern arrays with glob --- packages/astro/src/content/loaders/glob.ts | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/packages/astro/src/content/loaders/glob.ts b/packages/astro/src/content/loaders/glob.ts index 9c3475f34d2e..48a6b31ff914 100644 --- a/packages/astro/src/content/loaders/glob.ts +++ b/packages/astro/src/content/loaders/glob.ts @@ -21,7 +21,7 @@ export interface GenerateIdOptions { export interface GlobOptions { /** The glob pattern to match files, relative to the base directory */ - pattern: string; + pattern: string | Array; /** The base directory to resolve the glob pattern from. Relative to the root directory, or an absolute file URL. Defaults to `.` */ base?: string | URL; /** @@ -44,17 +44,24 @@ function generateIdDefault({ entry, base, data }: GenerateIdOptions): string { return slug; } +function checkPrefix(pattern: string | Array, prefix: string) { + if (Array.isArray(pattern)) { + return pattern.some((p) => p.startsWith(prefix)); + } + return pattern.startsWith(prefix); +} + /** * Loads multiple entries, using a glob pattern to match files. * @param pattern A glob pattern to match files, relative to the content directory. */ export function glob(globOptions: GlobOptions): Loader { - if (globOptions.pattern.startsWith('../')) { + if (checkPrefix(globOptions.pattern, '../')) { throw new Error( 'Glob patterns cannot start with `../`. Set the `base` option to a parent directory instead.', ); } - if (globOptions.pattern.startsWith('/')) { + if (checkPrefix(globOptions.pattern, '/')) { throw new Error( 'Glob patterns cannot start with `/`. Set the `base` option to a parent directory or use a relative path instead.', ); @@ -247,9 +254,8 @@ export function glob(globOptions: GlobOptions): Loader { return; } - const matcher: RegExp = micromatch.makeRe(globOptions.pattern); - const matchesGlob = (entry: string) => !entry.startsWith('../') && matcher.test(entry); + const matchesGlob = (entry: string) => !entry.startsWith('../') && micromatch.isMatch(entry, globOptions.pattern); const basePath = fileURLToPath(baseDir); From c2f48aa4c423527ca2d9707a6b9dbe04279054aa Mon Sep 17 00:00:00 2001 From: Matt Kane Date: Mon, 9 Sep 2024 10:39:58 +0100 Subject: [PATCH 02/43] wip --- packages/astro/src/content/utils.ts | 165 +++++++++++++++--- .../vite-plugin-content-virtual-mod.ts | 77 ++++---- packages/astro/src/core/config/schema.ts | 5 + packages/astro/src/types/public/config.ts | 5 + .../content-collections/astro.config.mjs | 3 +- 5 files changed, 194 insertions(+), 61 deletions(-) diff --git a/packages/astro/src/content/utils.ts b/packages/astro/src/content/utils.ts index 65e4551df335..b33050d3a175 100644 --- a/packages/astro/src/content/utils.ts +++ b/packages/astro/src/content/utils.ts @@ -6,7 +6,7 @@ import matter from 'gray-matter'; import type { PluginContext } from 'rollup'; import type { ViteDevServer } from 'vite'; import xxhash from 'xxhash-wasm'; -import { z } from 'zod'; +import { z, ZodDiscriminatedUnion, ZodEffects, ZodObject, type ZodTypeAny } from 'zod'; import { AstroError, AstroErrorData, MarkdownError, errorMap } from '../core/errors/index.js'; import { isYAMLException } from '../core/errors/utils.js'; import type { Logger } from '../core/logger/core.js'; @@ -23,6 +23,8 @@ import { PROPAGATED_ASSET_FLAG, } from './consts.js'; import { createImage } from './runtime-assets.js'; +import { glob, type GenerateIdOptions } from './loaders/glob.js'; +import { appendForwardSlash } from '../core/path.js'; /** * Amap from a collection + slug to the local file path. * This is used internally to resolve entry imports when using `getEntry()`. @@ -67,24 +69,23 @@ const collectionConfigParser = z.union([ ), z.object({ name: z.string(), - load: z.function( - z.tuple( - [ - z.object({ - collection: z.string(), - store: z.any(), - meta: z.any(), - logger: z.any(), - config: z.any(), - entryTypes: z.any(), - parseData: z.any(), - generateDigest: z.function(z.tuple([z.any()], z.string())), - watcher: z.any().optional(), - }), - ], - z.unknown(), - ), - ), + load: z + .function() + .args( + z.object({ + collection: z.string(), + store: z.any(), + meta: z.any(), + logger: z.any(), + config: z.any(), + entryTypes: z.any(), + parseData: z.any(), + generateDigest: z.function(z.tuple([z.any()], z.string())), + watcher: z.any().optional(), + }), + ) + .returns(z.promise(z.void())), + schema: z.any().optional(), render: z.function(z.tuple([z.any()], z.unknown())).optional(), }), @@ -508,6 +509,112 @@ async function loadContentConfig({ } } +function generateLegacyId({ entry, base }: GenerateIdOptions): string { + const entryURL = new URL(entry, base); + const { id } = getContentEntryIdAndSlug({ + entry: entryURL, + contentDir: base, + collection: '', + }); + return id; +} + +function extendSchema( + schema: T, + newFields: z.ZodRawShape, +): ZodObject | ZodEffects | ZodDiscriminatedUnion { + // If the schema is a ZodEffects, extract the inner schema + if (schema instanceof ZodEffects) { + const innerSchema = schema._def.schema; + + if (innerSchema instanceof ZodObject) { + // Extend the inner object schema and reapply the effects + const extendedSchema = innerSchema.extend(newFields); + return new ZodEffects({ + ...schema._def, // keep the existing effects + schema: extendedSchema, // apply effects to the extended schema + }); + } + } + + // If the schema is a ZodObject, extend it directly + if (schema instanceof ZodObject) { + return schema.extend(newFields); + } + + // If the schema is a ZodDiscriminatedUnion, extend the inner schemas + if (schema instanceof ZodDiscriminatedUnion) { + const innerSchema = schema._def.schema; + const extendedSchema = innerSchema.extend(newFields); + return new ZodDiscriminatedUnion({ + ...schema._def, + schemas: [extendedSchema], + }); + } + + // If the schema is neither a ZodObject nor a ZodEffects containing a ZodObject, throw an error + throw new Error('Schema is neither ZodObject nor ZodEffects containing a ZodObject.'); +} + +export async function autogenerateCollections({ + config, + settings, + fs, +}: { + config?: ContentConfig; + settings: AstroSettings; + fs: typeof fsMod; +}): Promise { + if (!settings.config.experimental.emulateLegacyCollections) { + return config; + } + const contentDir = new URL('./content/', settings.config.srcDir); + // Find all directories in the content directory + const collectionDirs = await fs.promises.readdir(contentDir, { withFileTypes: true }); + + const collections: Record = config?.collections ?? {}; + + const contentExts = getContentEntryExts(settings); + const dataExts = getDataEntryExts(settings); + + const contentPattern = globWithUnderscoresIgnored('', contentExts); + const dataPattern = globWithUnderscoresIgnored('', dataExts); + for (const dir of collectionDirs) { + if (!dir.isDirectory() || dir.name.startsWith('_')) { + continue; + } + const collectionName = dir.name; + if (collections[collectionName]?.type === 'content_layer') { + // This is already a content layer, skip + continue; + } + + let schema = (collections[collectionName]?.schema as ZodTypeAny) ?? z.object({}).passthrough(); + schema = extendSchema(schema, { + slug: z.string(), + }); + schema = schema.transform((val) => { + return { + ...val, + slug: (val.slug ?? val.id) as string, + }; + }); + + collections[collectionName] = { + ...collections[collectionName], + type: 'content_layer', + loader: glob({ + base: new URL(collectionName, contentDir), + pattern: collections[collectionName]?.type === 'data' ? dataPattern : contentPattern, + generateId: generateLegacyId, + // Zod weirdness has trouble with typing the args to the load function + }) as any, + schema, + }; + } + return { ...config, collections }; +} + export async function reloadContentConfigObserver({ observer = globalContentConfigObserver, ...loadContentConfigOpts @@ -519,7 +626,15 @@ export async function reloadContentConfigObserver({ }) { observer.set({ status: 'loading' }); try { - const config = await loadContentConfig(loadContentConfigOpts); + let config = await loadContentConfig(loadContentConfigOpts); + + if (loadContentConfigOpts.settings.config.experimental.emulateLegacyCollections) { + config = await autogenerateCollections({ + config, + ...loadContentConfigOpts, + }); + } + if (config) { observer.set({ status: 'loaded', config }); } else { @@ -657,6 +772,16 @@ export function hasAssetPropagationFlag(id: string): boolean { } } +export function globWithUnderscoresIgnored(relContentDir: string, exts: string[]): string[] { + const extGlob = getExtGlob(exts); + const contentDir = relContentDir.length > 0 ? appendForwardSlash(relContentDir) : relContentDir; + return [ + `${contentDir}**/*${extGlob}`, + `!${contentDir}**/_*/**/*${extGlob}`, + `!${contentDir}**/_*${extGlob}`, + ]; +} + /** * Convert a platform path to a posix path. */ diff --git a/packages/astro/src/content/vite-plugin-content-virtual-mod.ts b/packages/astro/src/content/vite-plugin-content-virtual-mod.ts index ca09d1c1e202..d26240d949e3 100644 --- a/packages/astro/src/content/vite-plugin-content-virtual-mod.ts +++ b/packages/astro/src/content/vite-plugin-content-virtual-mod.ts @@ -7,7 +7,7 @@ import pLimit from 'p-limit'; import type { Plugin } from 'vite'; import { encodeName } from '../core/build/util.js'; import { AstroError, AstroErrorData } from '../core/errors/index.js'; -import { appendForwardSlash, removeFileExtension } from '../core/path.js'; +import { removeFileExtension } from '../core/path.js'; import { rootRelativePath } from '../core/viteUtils.js'; import type { AstroSettings } from '../types/astro.js'; import type { AstroPluginMetadata } from '../vite-plugin-astro/index.js'; @@ -39,6 +39,7 @@ import { getEntrySlug, getEntryType, getExtGlob, + globWithUnderscoresIgnored, isDeferredModule, } from './utils.js'; @@ -228,35 +229,41 @@ export async function generateContentEntryFile({ const contentPaths = getContentPaths(settings.config); const relContentDir = rootRelativePath(settings.config.root, contentPaths.contentDir); - let contentEntryGlobResult: string; - let dataEntryGlobResult: string; - let renderEntryGlobResult: string; - if (IS_DEV || IS_SERVER || !settings.config.experimental.contentCollectionCache) { - const contentEntryConfigByExt = getEntryConfigByExtMap(settings.contentEntryTypes); - const contentEntryExts = [...contentEntryConfigByExt.keys()]; - const dataEntryExts = getDataEntryExts(settings); - const createGlob = (value: string[], flag: string) => - `import.meta.glob(${JSON.stringify(value)}, { query: { ${flag}: true } })`; - contentEntryGlobResult = createGlob( - globWithUnderscoresIgnored(relContentDir, contentEntryExts), - CONTENT_FLAG, - ); - dataEntryGlobResult = createGlob( - globWithUnderscoresIgnored(relContentDir, dataEntryExts), - DATA_FLAG, - ); - renderEntryGlobResult = createGlob( - globWithUnderscoresIgnored(relContentDir, contentEntryExts), - CONTENT_RENDER_FLAG, - ); - } else { - contentEntryGlobResult = getStringifiedCollectionFromLookup( - 'content', - relContentDir, - lookupMap, - ); - dataEntryGlobResult = getStringifiedCollectionFromLookup('data', relContentDir, lookupMap); - renderEntryGlobResult = getStringifiedCollectionFromLookup('render', relContentDir, lookupMap); + let contentEntryGlobResult = '""'; + let dataEntryGlobResult = '""'; + let renderEntryGlobResult = '""'; + if (!settings.config.experimental.emulateLegacyCollections) { + if (IS_DEV || IS_SERVER || !settings.config.experimental.contentCollectionCache) { + const contentEntryConfigByExt = getEntryConfigByExtMap(settings.contentEntryTypes); + const contentEntryExts = [...contentEntryConfigByExt.keys()]; + const dataEntryExts = getDataEntryExts(settings); + const createGlob = (value: string[], flag: string) => + `import.meta.glob(${JSON.stringify(value)}, { query: { ${flag}: true } })`; + contentEntryGlobResult = createGlob( + globWithUnderscoresIgnored(relContentDir, contentEntryExts), + CONTENT_FLAG, + ); + dataEntryGlobResult = createGlob( + globWithUnderscoresIgnored(relContentDir, dataEntryExts), + DATA_FLAG, + ); + renderEntryGlobResult = createGlob( + globWithUnderscoresIgnored(relContentDir, contentEntryExts), + CONTENT_RENDER_FLAG, + ); + } else { + contentEntryGlobResult = getStringifiedCollectionFromLookup( + 'content', + relContentDir, + lookupMap, + ); + dataEntryGlobResult = getStringifiedCollectionFromLookup('data', relContentDir, lookupMap); + renderEntryGlobResult = getStringifiedCollectionFromLookup( + 'render', + relContentDir, + lookupMap, + ); + } } let virtualModContents: string; @@ -422,16 +429,6 @@ export async function generateLookupMap({ return lookupMap; } -function globWithUnderscoresIgnored(relContentDir: string, exts: string[]): string[] { - const extGlob = getExtGlob(exts); - const contentDir = appendForwardSlash(relContentDir); - return [ - `${contentDir}**/*${extGlob}`, - `!${contentDir}**/_*/**/*${extGlob}`, - `!${contentDir}**/_*${extGlob}`, - ]; -} - const UnexpectedLookupMapError = new AstroError({ ...AstroErrorData.UnknownContentCollectionError, message: `Unexpected error while parsing content entry IDs and slugs.`, diff --git a/packages/astro/src/core/config/schema.ts b/packages/astro/src/core/config/schema.ts index f2a397030112..172046c7e29f 100644 --- a/packages/astro/src/core/config/schema.ts +++ b/packages/astro/src/core/config/schema.ts @@ -93,6 +93,7 @@ export const ASTRO_CONFIG_DEFAULTS = { clientPrerender: false, serverIslands: false, contentIntellisense: false, + emulateLegacyCollections: false, }, } satisfies AstroUserConfig & { server: { open: boolean } }; @@ -529,6 +530,10 @@ export const AstroConfigSchema = z.object({ .boolean() .optional() .default(ASTRO_CONFIG_DEFAULTS.experimental.contentIntellisense), + emulateLegacyCollections: z + .boolean() + .optional() + .default(ASTRO_CONFIG_DEFAULTS.experimental.emulateLegacyCollections), }) .strict( `Invalid or outdated experimental feature.\nCheck for incorrect spelling or outdated Astro version.\nSee https://docs.astro.build/en/reference/configuration-reference/#experimental-flags for a list of all current experiments.`, diff --git a/packages/astro/src/types/public/config.ts b/packages/astro/src/types/public/config.ts index b75cf027b16c..f278d00f738e 100644 --- a/packages/astro/src/types/public/config.ts +++ b/packages/astro/src/types/public/config.ts @@ -1687,6 +1687,11 @@ export interface AstroUserConfig { * To use this feature with the Astro VS Code extension, you must also enable the `astro.content-intellisense` option in your VS Code settings. For editors using the Astro language server directly, pass the `contentIntellisense: true` initialization parameter to enable this feature. */ contentIntellisense?: boolean; + + /** + * Emulate legacy content collection behavior using glob loader + */ + emulateLegacyCollections?: boolean; }; } diff --git a/packages/astro/test/fixtures/content-collections/astro.config.mjs b/packages/astro/test/fixtures/content-collections/astro.config.mjs index 911cb3a99881..63abb27ceffc 100644 --- a/packages/astro/test/fixtures/content-collections/astro.config.mjs +++ b/packages/astro/test/fixtures/content-collections/astro.config.mjs @@ -5,6 +5,7 @@ import { defineConfig } from 'astro/config'; export default defineConfig({ integrations: [mdx()], experimental: { - contentIntellisense: true + contentIntellisense: true, + emulateLegacyCollections: true, } }); From 0e9b54c268610c1e5dc267b3bdb7dd4c769a2a69 Mon Sep 17 00:00:00 2001 From: Matt Kane Date: Thu, 12 Sep 2024 12:39:31 +0100 Subject: [PATCH 03/43] feat: emulate legacy content collections --- packages/astro/src/content/data-store.ts | 2 + packages/astro/src/content/loaders/glob.ts | 40 +++++++++-- .../astro/src/content/mutable-data-store.ts | 30 ++------- packages/astro/src/content/runtime.ts | 24 ++++++- packages/astro/src/content/utils.ts | 66 ++----------------- .../vite-plugin-content-virtual-mod.ts | 10 +-- .../content-collections-base/astro.config.mjs | 3 + .../astro.config.mjs | 3 + .../astro.config.mjs | 3 + .../astro.config.mjs | 3 + .../src/pages/entries.json.js | 10 +-- 11 files changed, 91 insertions(+), 103 deletions(-) diff --git a/packages/astro/src/content/data-store.ts b/packages/astro/src/content/data-store.ts index 57df3d521596..82875b1ecdd2 100644 --- a/packages/astro/src/content/data-store.ts +++ b/packages/astro/src/content/data-store.ts @@ -34,6 +34,8 @@ export interface DataEntry = Record; + /** @deprecated */ + legacyId?: string; } /** diff --git a/packages/astro/src/content/loaders/glob.ts b/packages/astro/src/content/loaders/glob.ts index b47e63f20b7b..6bf6f34143fa 100644 --- a/packages/astro/src/content/loaders/glob.ts +++ b/packages/astro/src/content/loaders/glob.ts @@ -55,6 +55,15 @@ function checkPrefix(pattern: string | Array, prefix: string) { * Loads multiple entries, using a glob pattern to match files. * @param pattern A glob pattern to match files, relative to the content directory. */ +export function glob(globOptions: GlobOptions): Loader; +/** @private */ +export function glob( + globOptions: GlobOptions & { + /** @deprecated */ + _legacy: true; + }, +): Loader; + export function glob(globOptions: GlobOptions): Loader { if (checkPrefix(globOptions.pattern, '../')) { throw new Error( @@ -73,13 +82,23 @@ export function glob(globOptions: GlobOptions): Loader { return { name: 'glob-loader', - load: async ({ config, logger, watcher, parseData, store, generateDigest, entryTypes }) => { + load: async ({ + config, + logger, + watcher, + parseData, + store, + generateDigest, + entryTypes, + }) => { const renderFunctionByContentType = new WeakMap< ContentEntryType, ContentEntryRenderFunction >(); const untouchedEntries = new Set(store.keys()); + const _legacy = '_legacy' in globOptions || undefined; + async function syncData(entry: string, base: URL, entryType?: ContentEntryType) { if (!entryType) { @@ -102,7 +121,18 @@ export function glob(globOptions: GlobOptions): Loader { fileUrl, }); - const id = generateId({ entry, base, data }); + const id = generateId({ entry, base, data }) + let legacyId: string | undefined; + + if (_legacy) { + const entryURL = new URL(entry, base); + const legacyOptions = getContentEntryIdAndSlug({ + entry: entryURL, + contentDir: base, + collection: '', + }); + legacyId = legacyOptions.id; + } untouchedEntries.delete(id); const existingEntry = store.get(id); @@ -160,6 +190,7 @@ export function glob(globOptions: GlobOptions): Loader { digest, rendered, assetImports: rendered?.metadata?.imagePaths, + legacyId, }); // todo: add an explicit way to opt in to deferred rendering @@ -171,9 +202,10 @@ export function glob(globOptions: GlobOptions): Loader { filePath: relativePath, digest, deferredRender: true, + legacyId, }); } else { - store.set({ id, data: parsedData, body, filePath: relativePath, digest }); + store.set({ id, data: parsedData, body, filePath: relativePath, digest, legacyId }); } fileToIdMap.set(filePath, id); @@ -222,7 +254,7 @@ export function glob(globOptions: GlobOptions): Loader { if (isConfigFile(entry)) { return; } - if (isInContentDir(entry)) { + if (!_legacy && isInContentDir(entry)) { skippedFiles.push(entry); return; } diff --git a/packages/astro/src/content/mutable-data-store.ts b/packages/astro/src/content/mutable-data-store.ts index de0591503c66..7d58281bd4e1 100644 --- a/packages/astro/src/content/mutable-data-store.ts +++ b/packages/astro/src/content/mutable-data-store.ts @@ -197,7 +197,7 @@ export default new Map([\n${lines.join(',\n')}]); entries: () => this.entries(collectionName), values: () => this.values(collectionName), keys: () => this.keys(collectionName), - set: ({ id: key, data, body, filePath, deferredRender, digest, rendered, assetImports }) => { + set: ({ id: key, data, body, filePath, deferredRender, digest, rendered, assetImports, legacyId }) => { if (!key) { throw new Error(`ID must be a non-empty string`); } @@ -244,6 +244,9 @@ export default new Map([\n${lines.join(',\n')}]); if (rendered) { entry.rendered = rendered; } + if (legacyId) { + entry.legacyId = legacyId; + } if (deferredRender) { entry.deferredRender = deferredRender; if (filePath) { @@ -335,30 +338,7 @@ export interface DataStore { key: string, ) => DataEntry | undefined; entries: () => Array<[id: string, DataEntry]>; - set: >(opts: { - /** The ID of the entry. Must be unique per collection. */ - id: string; - /** The data to store. */ - data: TData; - /** The raw body of the content, if applicable. */ - body?: string; - /** The file path of the content, if applicable. Relative to the site root. */ - filePath?: string; - /** A content digest, to check if the content has changed. */ - digest?: number | string; - /** The rendered content, if applicable. */ - rendered?: RenderedContent; - /** - * If an entry is a deferred, its rendering phase is delegated to a virtual module during the runtime phase. - */ - deferredRender?: boolean; - /** - * Assets such as images to process during the build. These should be files on disk, with a path relative to filePath. - * Any values that use image() in the schema will already be added automatically. - * @internal - */ - assetImports?: Array; - }) => boolean; + set: >(opts: DataEntry) => boolean; values: () => Array; keys: () => Array; delete: (key: string) => void; diff --git a/packages/astro/src/content/runtime.ts b/packages/astro/src/content/runtime.ts index 95d31079029d..ed9e96b427ce 100644 --- a/packages/astro/src/content/runtime.ts +++ b/packages/astro/src/content/runtime.ts @@ -94,7 +94,11 @@ export function createGetCollection({ if (hasFilter && !filter(entry)) { continue; } - result.push(entry); + if (entry.legacyId) { + result.push(emulateLegacyEntry(entry)); + } else { + result.push(entry); + } } return result; } else { @@ -257,6 +261,14 @@ type DataEntryResult = { type EntryLookupObject = { collection: string; id: string } | { collection: string; slug: string }; +function emulateLegacyEntry({ legacyId, id, ...entry }: DataEntry) { + const legacyEntry = { ...entry, id: legacyId!, slug: id }; + return { + ...legacyEntry, + render: () => renderEntry(legacyEntry), + }; +} + export function createGetEntry({ getEntryImport, getRenderEntryImport, @@ -304,6 +316,9 @@ export function createGetEntry({ // @ts-expect-error virtual module const { default: imageAssetMap } = await import('astro:asset-imports'); entry.data = updateImageReferencesInData(entry.data, entry.filePath, imageAssetMap); + if (entry.legacyId) { + return { ...emulateLegacyEntry(entry), collection } as ContentEntryResult; + } return { ...entry, collection, @@ -434,9 +449,12 @@ function updateImageReferencesInData>( } export async function renderEntry( - entry: DataEntry | { render: () => Promise<{ Content: AstroComponentFactory }> }, + entry: + | DataEntry + | { render: () => Promise<{ Content: AstroComponentFactory }> } + | (DataEntry & { render: () => Promise<{ Content: AstroComponentFactory }> }), ) { - if (entry && 'render' in entry) { + if (entry && 'render' in entry && !('legacyId' in entry)) { // This is an old content collection entry, so we use its render method return entry.render(); } diff --git a/packages/astro/src/content/utils.ts b/packages/astro/src/content/utils.ts index 70e399b4cc8f..eb0545d7f0c8 100644 --- a/packages/astro/src/content/utils.ts +++ b/packages/astro/src/content/utils.ts @@ -6,7 +6,7 @@ import matter from 'gray-matter'; import type { PluginContext } from 'rollup'; import type { ViteDevServer } from 'vite'; import xxhash from 'xxhash-wasm'; -import { z, ZodDiscriminatedUnion, ZodEffects, ZodObject, type ZodTypeAny } from 'zod'; +import { z } from 'zod'; import { AstroError, AstroErrorData, MarkdownError, errorMap } from '../core/errors/index.js'; import { isYAMLException } from '../core/errors/utils.js'; import type { Logger } from '../core/logger/core.js'; @@ -23,7 +23,7 @@ import { PROPAGATED_ASSET_FLAG, } from './consts.js'; import { createImage } from './runtime-assets.js'; -import { glob, type GenerateIdOptions } from './loaders/glob.js'; +import { glob } from './loaders/glob.js'; import { appendForwardSlash } from '../core/path.js'; /** * Amap from a collection + slug to the local file path. @@ -140,7 +140,7 @@ export async function getEntryDataAndImages< pluginContext?: PluginContext, ): Promise<{ data: TOutputData; imageImports: Array }> { let data: TOutputData; - if (collectionConfig.type === 'data' || collectionConfig.type === CONTENT_LAYER_TYPE) { + if (collectionConfig.type === 'data') { data = entry.unvalidatedData as TOutputData; } else { const { slug, ...unvalidatedData } = entry.unvalidatedData; @@ -511,53 +511,6 @@ async function loadContentConfig({ } } -function generateLegacyId({ entry, base }: GenerateIdOptions): string { - const entryURL = new URL(entry, base); - const { id } = getContentEntryIdAndSlug({ - entry: entryURL, - contentDir: base, - collection: '', - }); - return id; -} - -function extendSchema( - schema: T, - newFields: z.ZodRawShape, -): ZodObject | ZodEffects | ZodDiscriminatedUnion { - // If the schema is a ZodEffects, extract the inner schema - if (schema instanceof ZodEffects) { - const innerSchema = schema._def.schema; - - if (innerSchema instanceof ZodObject) { - // Extend the inner object schema and reapply the effects - const extendedSchema = innerSchema.extend(newFields); - return new ZodEffects({ - ...schema._def, // keep the existing effects - schema: extendedSchema, // apply effects to the extended schema - }); - } - } - - // If the schema is a ZodObject, extend it directly - if (schema instanceof ZodObject) { - return schema.extend(newFields); - } - - // If the schema is a ZodDiscriminatedUnion, extend the inner schemas - if (schema instanceof ZodDiscriminatedUnion) { - const innerSchema = schema._def.schema; - const extendedSchema = innerSchema.extend(newFields); - return new ZodDiscriminatedUnion({ - ...schema._def, - schemas: [extendedSchema], - }); - } - - // If the schema is neither a ZodObject nor a ZodEffects containing a ZodObject, throw an error - throw new Error('Schema is neither ZodObject nor ZodEffects containing a ZodObject.'); -} - export async function autogenerateCollections({ config, settings, @@ -591,16 +544,6 @@ export async function autogenerateCollections({ continue; } - let schema = (collections[collectionName]?.schema as ZodTypeAny) ?? z.object({}).passthrough(); - schema = extendSchema(schema, { - slug: z.string(), - }); - schema = schema.transform((val) => { - return { - ...val, - slug: (val.slug ?? val.id) as string, - }; - }); collections[collectionName] = { ...collections[collectionName], @@ -608,10 +551,9 @@ export async function autogenerateCollections({ loader: glob({ base: new URL(collectionName, contentDir), pattern: collections[collectionName]?.type === 'data' ? dataPattern : contentPattern, - generateId: generateLegacyId, + _legacy: true, // Zod weirdness has trouble with typing the args to the load function }) as any, - schema, }; } return { ...config, collections }; diff --git a/packages/astro/src/content/vite-plugin-content-virtual-mod.ts b/packages/astro/src/content/vite-plugin-content-virtual-mod.ts index d26240d949e3..24486c73273d 100644 --- a/packages/astro/src/content/vite-plugin-content-virtual-mod.ts +++ b/packages/astro/src/content/vite-plugin-content-virtual-mod.ts @@ -109,10 +109,12 @@ export function astroContentVirtualModPlugin({ }, async load(id, args) { if (id === RESOLVED_VIRTUAL_MODULE_ID) { - const lookupMap = await generateLookupMap({ - settings, - fs, - }); + const lookupMap = settings.config.experimental.emulateLegacyCollections + ? {} + : await generateLookupMap({ + settings, + fs, + }); const isClient = !args?.ssr; const code = await generateContentEntryFile({ settings, diff --git a/packages/astro/test/fixtures/content-collections-base/astro.config.mjs b/packages/astro/test/fixtures/content-collections-base/astro.config.mjs index 5f168d340f35..872cf0cd542c 100644 --- a/packages/astro/test/fixtures/content-collections-base/astro.config.mjs +++ b/packages/astro/test/fixtures/content-collections-base/astro.config.mjs @@ -9,5 +9,8 @@ export default defineConfig({ build: { assetsInlineLimit: 0 } + }, + experimental: { + emulateLegacyCollections: true, } }); diff --git a/packages/astro/test/fixtures/content-collections-cache-invalidation/astro.config.mjs b/packages/astro/test/fixtures/content-collections-cache-invalidation/astro.config.mjs index a74151f32bd2..3906f97914cb 100644 --- a/packages/astro/test/fixtures/content-collections-cache-invalidation/astro.config.mjs +++ b/packages/astro/test/fixtures/content-collections-cache-invalidation/astro.config.mjs @@ -8,5 +8,8 @@ export default defineConfig({ build: { assetsInlineLimit: 0, } + }, + experimental: { + emulateLegacyCollections: true, } }); diff --git a/packages/astro/test/fixtures/content-collections-mutation/astro.config.mjs b/packages/astro/test/fixtures/content-collections-mutation/astro.config.mjs index d69e57975a64..0f0efbe27b55 100644 --- a/packages/astro/test/fixtures/content-collections-mutation/astro.config.mjs +++ b/packages/astro/test/fixtures/content-collections-mutation/astro.config.mjs @@ -3,4 +3,7 @@ import { defineConfig } from 'astro/config'; export default defineConfig({ integrations: [mdx()], + experimental: { + emulateLegacyCollections: true, + } }); diff --git a/packages/astro/test/fixtures/content-collections-same-contents/astro.config.mjs b/packages/astro/test/fixtures/content-collections-same-contents/astro.config.mjs index 417b7c5e9cce..1bfaed140657 100644 --- a/packages/astro/test/fixtures/content-collections-same-contents/astro.config.mjs +++ b/packages/astro/test/fixtures/content-collections-same-contents/astro.config.mjs @@ -7,5 +7,8 @@ export default defineConfig({ build: { assetsInlineLimit: 0 } + }, + experimental: { + emulateLegacyCollections: true, } }); diff --git a/packages/astro/test/fixtures/content-collections/src/pages/entries.json.js b/packages/astro/test/fixtures/content-collections/src/pages/entries.json.js index a05a9138b1d8..af92ab2d0b88 100644 --- a/packages/astro/test/fixtures/content-collections/src/pages/entries.json.js +++ b/packages/astro/test/fixtures/content-collections/src/pages/entries.json.js @@ -1,14 +1,14 @@ -import { getEntryBySlug } from 'astro:content'; +import { getEntry } from 'astro:content'; import * as devalue from 'devalue'; import { stripRenderFn } from '../utils.js'; export async function GET() { - const columbiaWithoutConfig = stripRenderFn(await getEntryBySlug('without-config', 'columbia')); - const oneWithSchemaConfig = stripRenderFn(await getEntryBySlug('with-schema-config', 'one')); + const columbiaWithoutConfig = stripRenderFn(await getEntry('without-config', 'columbia')); + const oneWithSchemaConfig = stripRenderFn(await getEntry('with-schema-config', 'one')); const twoWithSlugConfig = stripRenderFn( - await getEntryBySlug('with-custom-slugs', 'interesting-two') + await getEntry('with-custom-slugs', 'interesting-two') ); - const postWithUnionSchema = stripRenderFn(await getEntryBySlug('with-union-schema', 'post')); + const postWithUnionSchema = stripRenderFn(await getEntry('with-union-schema', 'post')); return new Response( devalue.stringify({ From 1ff97b4e92f4c0634fb84d32a3ec900a40e780df Mon Sep 17 00:00:00 2001 From: Matt Kane Date: Thu, 12 Sep 2024 13:09:00 +0100 Subject: [PATCH 04/43] Fixes --- packages/astro/src/content/loaders/glob.ts | 12 ++++++------ packages/astro/src/content/runtime.ts | 13 +++++++++---- packages/astro/src/content/utils.ts | 2 +- packages/astro/templates/content/module.mjs | 13 ++++++++----- .../content-collections/src/pages/entries.json.js | 10 +++++----- 5 files changed, 29 insertions(+), 21 deletions(-) diff --git a/packages/astro/src/content/loaders/glob.ts b/packages/astro/src/content/loaders/glob.ts index 6bf6f34143fa..71a76dcac639 100644 --- a/packages/astro/src/content/loaders/glob.ts +++ b/packages/astro/src/content/loaders/glob.ts @@ -35,7 +35,7 @@ function generateIdDefault({ entry, base, data }: GenerateIdOptions): string { if (data.slug) { return data.slug as string; } - const entryURL = new URL(entry, base); + const entryURL = new URL(encodeURI(entry), base); const { slug } = getContentEntryIdAndSlug({ entry: entryURL, contentDir: base, @@ -97,7 +97,7 @@ export function glob(globOptions: GlobOptions): Loader { >(); const untouchedEntries = new Set(store.keys()); - const _legacy = '_legacy' in globOptions || undefined; + const isLegacy = '_legacy' in globOptions || undefined; async function syncData(entry: string, base: URL, entryType?: ContentEntryType) { @@ -105,7 +105,7 @@ export function glob(globOptions: GlobOptions): Loader { logger.warn(`No entry type found for ${entry}`); return; } - const fileUrl = new URL(entry, base); + const fileUrl = new URL(encodeURI(entry), base); const contents = await fs.readFile(fileUrl, 'utf-8').catch((err) => { logger.error(`Error reading ${entry}: ${err.message}`); return; @@ -124,8 +124,8 @@ export function glob(globOptions: GlobOptions): Loader { const id = generateId({ entry, base, data }) let legacyId: string | undefined; - if (_legacy) { - const entryURL = new URL(entry, base); + if (isLegacy) { + const entryURL = new URL(encodeURI(entry), base); const legacyOptions = getContentEntryIdAndSlug({ entry: entryURL, contentDir: base, @@ -254,7 +254,7 @@ export function glob(globOptions: GlobOptions): Loader { if (isConfigFile(entry)) { return; } - if (!_legacy && isInContentDir(entry)) { + if (!isLegacy && isInContentDir(entry)) { skippedFiles.push(entry); return; } diff --git a/packages/astro/src/content/runtime.ts b/packages/astro/src/content/runtime.ts index ed9e96b427ce..1868668a118c 100644 --- a/packages/astro/src/content/runtime.ts +++ b/packages/astro/src/content/runtime.ts @@ -166,16 +166,22 @@ export function createGetEntryBySlug({ getEntryImport, getRenderEntryImport, collectionNames, + getEntry, }: { getEntryImport: GetEntryImport; getRenderEntryImport: GetEntryImport; collectionNames: Set; + getEntry: ReturnType; }) { return async function getEntryBySlug(collection: string, slug: string) { const store = await globalDataStore.get(); if (!collectionNames.has(collection)) { if (store.hasCollection(collection)) { + const entry = await getEntry(collection, slug); + if(entry && 'slug' in entry) { + return entry; + } throw new AstroError({ ...AstroErrorData.GetEntryDeprecationError, message: AstroErrorData.GetEntryDeprecationError.message(collection, 'getEntryBySlug'), @@ -211,19 +217,18 @@ export function createGetEntryBySlug({ export function createGetDataEntryById({ getEntryImport, collectionNames, + getEntry }: { getEntryImport: GetEntryImport; collectionNames: Set; + getEntry: ReturnType; }) { return async function getDataEntryById(collection: string, id: string) { const store = await globalDataStore.get(); if (!collectionNames.has(collection)) { if (store.hasCollection(collection)) { - throw new AstroError({ - ...AstroErrorData.GetEntryDeprecationError, - message: AstroErrorData.GetEntryDeprecationError.message(collection, 'getDataEntryById'), - }); + return getEntry(collection, id); } // eslint-disable-next-line no-console console.warn(`The collection ${JSON.stringify(collection)} does not exist.`); diff --git a/packages/astro/src/content/utils.ts b/packages/astro/src/content/utils.ts index eb0545d7f0c8..9be1e548257c 100644 --- a/packages/astro/src/content/utils.ts +++ b/packages/astro/src/content/utils.ts @@ -535,7 +535,7 @@ export async function autogenerateCollections({ const contentPattern = globWithUnderscoresIgnored('', contentExts); const dataPattern = globWithUnderscoresIgnored('', dataExts); for (const dir of collectionDirs) { - if (!dir.isDirectory() || dir.name.startsWith('_')) { + if (!(dir.isDirectory() || dir.isSymbolicLink()) || dir.name.startsWith('_')) { continue; } const collectionName = dir.name; diff --git a/packages/astro/templates/content/module.mjs b/packages/astro/templates/content/module.mjs index 2d395db49541..3f57dbf21439 100644 --- a/packages/astro/templates/content/module.mjs +++ b/packages/astro/templates/content/module.mjs @@ -58,22 +58,25 @@ export const getCollection = createGetCollection({ cacheEntriesByCollection, }); +export const getEntry = createGetEntry({ + getEntryImport: createGlobLookup(collectionToEntryMap), + getRenderEntryImport: createGlobLookup(collectionToRenderEntryMap), + collectionNames, +}); + export const getEntryBySlug = createGetEntryBySlug({ getEntryImport: createGlobLookup(contentCollectionToEntryMap), getRenderEntryImport: createGlobLookup(collectionToRenderEntryMap), collectionNames, + getEntry }); export const getDataEntryById = createGetDataEntryById({ getEntryImport: createGlobLookup(dataCollectionToEntryMap), collectionNames, + getEntry }); -export const getEntry = createGetEntry({ - getEntryImport: createGlobLookup(collectionToEntryMap), - getRenderEntryImport: createGlobLookup(collectionToRenderEntryMap), - collectionNames, -}); export const getEntries = createGetEntries(getEntry); diff --git a/packages/astro/test/fixtures/content-collections/src/pages/entries.json.js b/packages/astro/test/fixtures/content-collections/src/pages/entries.json.js index af92ab2d0b88..a05a9138b1d8 100644 --- a/packages/astro/test/fixtures/content-collections/src/pages/entries.json.js +++ b/packages/astro/test/fixtures/content-collections/src/pages/entries.json.js @@ -1,14 +1,14 @@ -import { getEntry } from 'astro:content'; +import { getEntryBySlug } from 'astro:content'; import * as devalue from 'devalue'; import { stripRenderFn } from '../utils.js'; export async function GET() { - const columbiaWithoutConfig = stripRenderFn(await getEntry('without-config', 'columbia')); - const oneWithSchemaConfig = stripRenderFn(await getEntry('with-schema-config', 'one')); + const columbiaWithoutConfig = stripRenderFn(await getEntryBySlug('without-config', 'columbia')); + const oneWithSchemaConfig = stripRenderFn(await getEntryBySlug('with-schema-config', 'one')); const twoWithSlugConfig = stripRenderFn( - await getEntry('with-custom-slugs', 'interesting-two') + await getEntryBySlug('with-custom-slugs', 'interesting-two') ); - const postWithUnionSchema = stripRenderFn(await getEntry('with-union-schema', 'post')); + const postWithUnionSchema = stripRenderFn(await getEntryBySlug('with-union-schema', 'post')); return new Response( devalue.stringify({ From 9585b5a69c93c57e74fcf9f7f0ce7136a36052fd Mon Sep 17 00:00:00 2001 From: Matt Kane Date: Thu, 12 Sep 2024 13:19:26 +0100 Subject: [PATCH 05/43] Lint --- packages/astro/src/content/mutable-data-store.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/astro/src/content/mutable-data-store.ts b/packages/astro/src/content/mutable-data-store.ts index 7d58281bd4e1..a11efbae35b7 100644 --- a/packages/astro/src/content/mutable-data-store.ts +++ b/packages/astro/src/content/mutable-data-store.ts @@ -4,7 +4,7 @@ import { Traverse } from 'neotraverse/modern'; import { imageSrcToImportId, importIdToSymbolName } from '../assets/utils/resolveImports.js'; import { AstroError, AstroErrorData } from '../core/errors/index.js'; import { IMAGE_IMPORT_PREFIX } from './consts.js'; -import { type DataEntry, ImmutableDataStore, type RenderedContent } from './data-store.js'; +import { type DataEntry, ImmutableDataStore } from './data-store.js'; import { contentModuleToId } from './utils.js'; const SAVE_DEBOUNCE_MS = 500; From 181c95064f427c182ba2e8beccf950927cf35491 Mon Sep 17 00:00:00 2001 From: Matt Kane Date: Thu, 12 Sep 2024 15:16:38 +0100 Subject: [PATCH 06/43] Correctly handle legacy data --- packages/astro/src/content/loaders/glob.ts | 9 ++++----- packages/astro/src/content/utils.ts | 2 +- packages/astro/test/content-collections.test.js | 8 ++++---- 3 files changed, 9 insertions(+), 10 deletions(-) diff --git a/packages/astro/src/content/loaders/glob.ts b/packages/astro/src/content/loaders/glob.ts index 71a76dcac639..afb9b1e94dc5 100644 --- a/packages/astro/src/content/loaders/glob.ts +++ b/packages/astro/src/content/loaders/glob.ts @@ -60,7 +60,7 @@ export function glob(globOptions: GlobOptions): Loader; export function glob( globOptions: GlobOptions & { /** @deprecated */ - _legacy: true; + _legacy?: true; }, ): Loader; @@ -97,9 +97,8 @@ export function glob(globOptions: GlobOptions): Loader { >(); const untouchedEntries = new Set(store.keys()); - const isLegacy = '_legacy' in globOptions || undefined; - - + const isLegacy = (globOptions as any)._legacy; + const legacyEnabled = config.experimental?.emulateLegacyCollections async function syncData(entry: string, base: URL, entryType?: ContentEntryType) { if (!entryType) { logger.warn(`No entry type found for ${entry}`); @@ -254,7 +253,7 @@ export function glob(globOptions: GlobOptions): Loader { if (isConfigFile(entry)) { return; } - if (!isLegacy && isInContentDir(entry)) { + if (!legacyEnabled && isInContentDir(entry)) { skippedFiles.push(entry); return; } diff --git a/packages/astro/src/content/utils.ts b/packages/astro/src/content/utils.ts index 9be1e548257c..ddf19e7fe531 100644 --- a/packages/astro/src/content/utils.ts +++ b/packages/astro/src/content/utils.ts @@ -551,7 +551,7 @@ export async function autogenerateCollections({ loader: glob({ base: new URL(collectionName, contentDir), pattern: collections[collectionName]?.type === 'data' ? dataPattern : contentPattern, - _legacy: true, + _legacy: collections[collectionName]?.type !== 'data' || undefined, // Zod weirdness has trouble with typing the args to the load function }) as any, }; diff --git a/packages/astro/test/content-collections.test.js b/packages/astro/test/content-collections.test.js index 5bb3736b75d5..32da1ce000a5 100644 --- a/packages/astro/test/content-collections.test.js +++ b/packages/astro/test/content-collections.test.js @@ -26,13 +26,13 @@ describe('Content Collections', () => { assert.equal(Array.isArray(json.withoutConfig), true); const ids = json.withoutConfig.map((item) => item.id); - assert.deepEqual(ids, [ + assert.deepEqual(ids.sort(), [ 'columbia.md', 'endeavour.md', 'enterprise.md', // Spaces allowed in IDs 'promo/launch week.mdx', - ]); + ].sort()); }); it('Handles spaces in `without config` slugs', async () => { @@ -40,13 +40,13 @@ describe('Content Collections', () => { assert.equal(Array.isArray(json.withoutConfig), true); const slugs = json.withoutConfig.map((item) => item.slug); - assert.deepEqual(slugs, [ + assert.deepEqual(slugs.sort(), [ 'columbia', 'endeavour', 'enterprise', // "launch week.mdx" is converted to "launch-week.mdx" 'promo/launch-week', - ]); + ].sort()); }); it('Returns `with schema` collection', async () => { From f47c6ba224ee098bb34225ff3e91145a1e32e2ae Mon Sep 17 00:00:00 2001 From: Matt Kane Date: Thu, 12 Sep 2024 16:01:44 +0100 Subject: [PATCH 07/43] Fix tests --- packages/astro/src/content/loaders/glob.ts | 16 +- .../astro/src/content/mutable-data-store.ts | 12 +- packages/astro/src/content/runtime.ts | 4 +- packages/astro/src/content/utils.ts | 5 +- packages/astro/templates/content/module.mjs | 5 +- ...content-collections-emulate-legacy.test.js | 424 ++++++++++++++++++ .../astro/test/content-collections.test.js | 44 +- .../content-collections-base/astro.config.mjs | 3 - .../astro.config.mjs | 3 - .../astro.config.mjs | 3 - .../astro.config.mjs | 3 - .../content-collections/astro.config.mjs | 1 - 12 files changed, 471 insertions(+), 52 deletions(-) create mode 100644 packages/astro/test/content-collections-emulate-legacy.test.js diff --git a/packages/astro/src/content/loaders/glob.ts b/packages/astro/src/content/loaders/glob.ts index afb9b1e94dc5..874560e66516 100644 --- a/packages/astro/src/content/loaders/glob.ts +++ b/packages/astro/src/content/loaders/glob.ts @@ -82,15 +82,7 @@ export function glob(globOptions: GlobOptions): Loader { return { name: 'glob-loader', - load: async ({ - config, - logger, - watcher, - parseData, - store, - generateDigest, - entryTypes, - }) => { + load: async ({ config, logger, watcher, parseData, store, generateDigest, entryTypes }) => { const renderFunctionByContentType = new WeakMap< ContentEntryType, ContentEntryRenderFunction @@ -98,7 +90,7 @@ export function glob(globOptions: GlobOptions): Loader { const untouchedEntries = new Set(store.keys()); const isLegacy = (globOptions as any)._legacy; - const legacyEnabled = config.experimental?.emulateLegacyCollections + const legacyEnabled = config.experimental?.emulateLegacyCollections; async function syncData(entry: string, base: URL, entryType?: ContentEntryType) { if (!entryType) { logger.warn(`No entry type found for ${entry}`); @@ -120,7 +112,7 @@ export function glob(globOptions: GlobOptions): Loader { fileUrl, }); - const id = generateId({ entry, base, data }) + const id = generateId({ entry, base, data }); let legacyId: string | undefined; if (isLegacy) { @@ -131,7 +123,7 @@ export function glob(globOptions: GlobOptions): Loader { collection: '', }); legacyId = legacyOptions.id; - } + } untouchedEntries.delete(id); const existingEntry = store.get(id); diff --git a/packages/astro/src/content/mutable-data-store.ts b/packages/astro/src/content/mutable-data-store.ts index a11efbae35b7..18a7662ee6ca 100644 --- a/packages/astro/src/content/mutable-data-store.ts +++ b/packages/astro/src/content/mutable-data-store.ts @@ -197,7 +197,17 @@ export default new Map([\n${lines.join(',\n')}]); entries: () => this.entries(collectionName), values: () => this.values(collectionName), keys: () => this.keys(collectionName), - set: ({ id: key, data, body, filePath, deferredRender, digest, rendered, assetImports, legacyId }) => { + set: ({ + id: key, + data, + body, + filePath, + deferredRender, + digest, + rendered, + assetImports, + legacyId, + }) => { if (!key) { throw new Error(`ID must be a non-empty string`); } diff --git a/packages/astro/src/content/runtime.ts b/packages/astro/src/content/runtime.ts index 1868668a118c..a009e1d671ea 100644 --- a/packages/astro/src/content/runtime.ts +++ b/packages/astro/src/content/runtime.ts @@ -179,7 +179,7 @@ export function createGetEntryBySlug({ if (!collectionNames.has(collection)) { if (store.hasCollection(collection)) { const entry = await getEntry(collection, slug); - if(entry && 'slug' in entry) { + if (entry && 'slug' in entry) { return entry; } throw new AstroError({ @@ -217,7 +217,7 @@ export function createGetEntryBySlug({ export function createGetDataEntryById({ getEntryImport, collectionNames, - getEntry + getEntry, }: { getEntryImport: GetEntryImport; collectionNames: Set; diff --git a/packages/astro/src/content/utils.ts b/packages/astro/src/content/utils.ts index ddf19e7fe531..adf98de4781f 100644 --- a/packages/astro/src/content/utils.ts +++ b/packages/astro/src/content/utils.ts @@ -10,6 +10,7 @@ import { z } from 'zod'; import { AstroError, AstroErrorData, MarkdownError, errorMap } from '../core/errors/index.js'; import { isYAMLException } from '../core/errors/utils.js'; import type { Logger } from '../core/logger/core.js'; +import { appendForwardSlash } from '../core/path.js'; import { normalizePath } from '../core/viteUtils.js'; import type { AstroSettings } from '../types/astro.js'; import type { AstroConfig } from '../types/public/config.js'; @@ -22,9 +23,8 @@ import { IMAGE_IMPORT_PREFIX, PROPAGATED_ASSET_FLAG, } from './consts.js'; -import { createImage } from './runtime-assets.js'; import { glob } from './loaders/glob.js'; -import { appendForwardSlash } from '../core/path.js'; +import { createImage } from './runtime-assets.js'; /** * Amap from a collection + slug to the local file path. * This is used internally to resolve entry imports when using `getEntry()`. @@ -544,7 +544,6 @@ export async function autogenerateCollections({ continue; } - collections[collectionName] = { ...collections[collectionName], type: 'content_layer', diff --git a/packages/astro/templates/content/module.mjs b/packages/astro/templates/content/module.mjs index 3f57dbf21439..7947574c341c 100644 --- a/packages/astro/templates/content/module.mjs +++ b/packages/astro/templates/content/module.mjs @@ -68,16 +68,15 @@ export const getEntryBySlug = createGetEntryBySlug({ getEntryImport: createGlobLookup(contentCollectionToEntryMap), getRenderEntryImport: createGlobLookup(collectionToRenderEntryMap), collectionNames, - getEntry + getEntry, }); export const getDataEntryById = createGetDataEntryById({ getEntryImport: createGlobLookup(dataCollectionToEntryMap), collectionNames, - getEntry + getEntry, }); - export const getEntries = createGetEntries(getEntry); export const reference = createReference({ lookupMap }); diff --git a/packages/astro/test/content-collections-emulate-legacy.test.js b/packages/astro/test/content-collections-emulate-legacy.test.js new file mode 100644 index 000000000000..706874b21dd4 --- /dev/null +++ b/packages/astro/test/content-collections-emulate-legacy.test.js @@ -0,0 +1,424 @@ +import assert from 'node:assert/strict'; +import { before, describe, it } from 'node:test'; +import * as cheerio from 'cheerio'; +import * as devalue from 'devalue'; +import testAdapter from './test-adapter.js'; +import { preventNodeBuiltinDependencyPlugin } from './test-plugins.js'; +import { loadFixture } from './test-utils.js'; + +describe('Content Collections - Emulate Legacy', () => { + describe('Query', () => { + let fixture; + before(async () => { + fixture = await loadFixture({ + root: './fixtures/content-collections/', + experimental: { + emulateLegacyCollections: true, + }, + }); + await fixture.build(); + }); + + describe('Collection', () => { + let json; + before(async () => { + const rawJson = await fixture.readFile('/collections.json'); + json = devalue.parse(rawJson); + }); + + it('Returns `without config` collection', async () => { + assert.ok(json.hasOwnProperty('withoutConfig')); + assert.equal(Array.isArray(json.withoutConfig), true); + + const ids = json.withoutConfig.map((item) => item.id); + assert.deepEqual( + ids.sort(), + [ + 'columbia.md', + 'endeavour.md', + 'enterprise.md', + // Spaces allowed in IDs + 'promo/launch week.mdx', + ].sort(), + ); + }); + + it('Handles spaces in `without config` slugs', async () => { + assert.ok(json.hasOwnProperty('withoutConfig')); + assert.equal(Array.isArray(json.withoutConfig), true); + + const slugs = json.withoutConfig.map((item) => item.slug); + assert.deepEqual( + slugs.sort(), + [ + 'columbia', + 'endeavour', + 'enterprise', + // "launch week.mdx" is converted to "launch-week.mdx" + 'promo/launch-week', + ].sort(), + ); + }); + + it('Returns `with schema` collection', async () => { + assert.ok(json.hasOwnProperty('withSchemaConfig')); + assert.equal(Array.isArray(json.withSchemaConfig), true); + + const ids = json.withSchemaConfig.map((item) => item.id); + const publishedDates = json.withSchemaConfig.map((item) => item.data.publishedAt); + assert.deepEqual(ids.sort(), ['four%.md', 'one.md', 'three.md', 'two.md'].sort()); + assert.equal( + publishedDates.every((date) => date instanceof Date), + true, + 'Not all publishedAt dates are Date objects', + ); + assert.deepEqual( + publishedDates.map((date) => date.toISOString()), + [ + '2021-01-01T00:00:00.000Z', + '2021-01-01T00:00:00.000Z', + '2021-01-03T00:00:00.000Z', + '2021-01-02T00:00:00.000Z', + ], + ); + }); + + it('Returns `with custom slugs` collection', async () => { + assert.ok(json.hasOwnProperty('withSlugConfig')); + assert.equal(Array.isArray(json.withSlugConfig), true); + + const slugs = json.withSlugConfig.map((item) => item.slug); + assert.deepEqual(slugs, ['fancy-one', 'excellent-three', 'interesting-two']); + }); + + it('Returns `with union schema` collection', async () => { + assert.ok(json.hasOwnProperty('withUnionSchema')); + assert.equal(Array.isArray(json.withUnionSchema), true); + + const post = json.withUnionSchema.find((item) => item.id === 'post.md'); + assert.notEqual(post, undefined); + assert.deepEqual(post.data, { + type: 'post', + title: 'My Post', + description: 'This is my post', + }); + const newsletter = json.withUnionSchema.find((item) => item.id === 'newsletter.md'); + assert.notEqual(newsletter, undefined); + assert.deepEqual(newsletter.data, { + type: 'newsletter', + subject: 'My Newsletter', + }); + }); + + it('Handles symlinked content', async () => { + assert.ok(json.hasOwnProperty('withSymlinkedContent')); + assert.equal(Array.isArray(json.withSymlinkedContent), true); + const ids = json.withSymlinkedContent.map((item) => item.id); + assert.deepEqual(ids.sort(), ['first.md', 'second.md', 'third.md'].sort()); + assert.equal( + json.withSymlinkedContent.find(({ id }) => id === 'first.md').data.title, + 'First Blog', + ); + }); + + it('Handles symlinked data', async () => { + assert.ok(json.hasOwnProperty('withSymlinkedData')); + assert.equal(Array.isArray(json.withSymlinkedData), true); + + const ids = json.withSymlinkedData.map((item) => item.id); + assert.deepEqual(ids, ['welcome']); + assert.equal( + json.withSymlinkedData[0].data.alt, + 'Futuristic landscape with chrome buildings and blue skies', + ); + assert.notEqual(json.withSymlinkedData[0].data.src.src, undefined); + }); + }); + + describe('Propagation', () => { + it('Applies styles', async () => { + const html = await fixture.readFile('/propagation/index.html'); + const $ = cheerio.load(html); + assert.equal($('style').text().includes('content:"works!"'), true); + }); + }); + + describe('Entry', () => { + let json; + before(async () => { + const rawJson = await fixture.readFile('/entries.json'); + json = devalue.parse(rawJson); + }); + + it('Returns `without config` collection entry', async () => { + assert.ok(json.hasOwnProperty('columbiaWithoutConfig')); + assert.equal(json.columbiaWithoutConfig.id, 'columbia.md'); + }); + + it('Returns `with schema` collection entry', async () => { + assert.ok(json.hasOwnProperty('oneWithSchemaConfig')); + assert.equal(json.oneWithSchemaConfig.id, 'one.md'); + assert.equal(json.oneWithSchemaConfig.data.publishedAt instanceof Date, true); + assert.equal( + json.oneWithSchemaConfig.data.publishedAt.toISOString(), + '2021-01-01T00:00:00.000Z', + ); + }); + + it('Returns `with custom slugs` collection entry', async () => { + assert.ok(json.hasOwnProperty('twoWithSlugConfig')); + assert.equal(json.twoWithSlugConfig.slug, 'interesting-two'); + }); + + it('Returns `with union schema` collection entry', async () => { + assert.ok(json.hasOwnProperty('postWithUnionSchema')); + assert.equal(json.postWithUnionSchema.id, 'post.md'); + assert.deepEqual(json.postWithUnionSchema.data, { + type: 'post', + title: 'My Post', + description: 'This is my post', + }); + }); + }); + + describe('Scripts', () => { + it('Contains all the scripts imported by components', async () => { + const html = await fixture.readFile('/with-scripts/one/index.html'); + const $ = cheerio.load(html); + assert.equal($('script').length, 2); + // Read the scripts' content + const scriptsCode = $('script') + .map((_, el) => $(el).text()) + .toArray() + .join('\n'); + assert.match(scriptsCode, /ScriptCompA/); + assert.match(scriptsCode, /ScriptCompB/); + }); + }); + }); + + const blogSlugToContents = { + 'first-post': { + title: 'First post', + element: 'blockquote', + content: 'First post loaded: yes!', + }, + 'second-post': { + title: 'Second post', + element: 'blockquote', + content: 'Second post loaded: yes!', + }, + 'third-post': { + title: 'Third post', + element: 'blockquote', + content: 'Third post loaded: yes!', + }, + 'using-mdx': { + title: 'Using MDX', + element: 'a[href="#"]', + content: 'Embedded component in MDX', + }, + }; + + describe('Static paths integration', () => { + let fixture; + + before(async () => { + fixture = await loadFixture({ root: './fixtures/content-static-paths-integration/' }); + await fixture.build(); + }); + + it('Generates expected pages', async () => { + for (const slug in blogSlugToContents) { + assert.equal(fixture.pathExists(`/posts/${slug}`), true); + } + }); + + it('Renders titles', async () => { + for (const slug in blogSlugToContents) { + const post = await fixture.readFile(`/posts/${slug}/index.html`); + const $ = cheerio.load(post); + assert.equal($('h1').text(), blogSlugToContents[slug].title); + } + }); + + it('Renders content', async () => { + for (const slug in blogSlugToContents) { + const post = await fixture.readFile(`/posts/${slug}/index.html`); + const $ = cheerio.load(post); + assert.equal( + $(blogSlugToContents[slug].element).text().trim(), + blogSlugToContents[slug].content, + ); + } + }); + }); + + describe('With spaces in path', () => { + it('Does not throw', async () => { + const fixture = await loadFixture({ root: './fixtures/content with spaces in folder name/' }); + let error = null; + try { + await fixture.build(); + } catch (e) { + error = e.message; + } + assert.equal(error, null); + }); + }); + describe('With config.mjs', () => { + it("Errors when frontmatter doesn't match schema", async () => { + const fixture = await loadFixture({ + root: './fixtures/content-collections-with-config-mjs/', + }); + let error; + try { + await fixture.build(); + } catch (e) { + error = e.message; + } + assert.equal(error.includes('**title**: Expected type `"string"`, received "number"'), true); + }); + }); + describe('With config.mts', () => { + it("Errors when frontmatter doesn't match schema", async () => { + const fixture = await loadFixture({ + root: './fixtures/content-collections-with-config-mts/', + }); + let error; + try { + await fixture.build(); + } catch (e) { + error = e.message; + } + assert.equal(error.includes('**title**: Expected type `"string"`, received "number"'), true); + }); + }); + + describe('With empty markdown file', () => { + it('Throws the right error', async () => { + const fixture = await loadFixture({ + root: './fixtures/content-collections-empty-md-file/', + }); + let error; + try { + await fixture.build(); + } catch (e) { + error = e.message; + } + assert.equal(error.includes('**title**: Required'), true); + }); + }); + + describe('With empty collections directory', () => { + it('Handles the empty directory correctly', async () => { + const fixture = await loadFixture({ + root: './fixtures/content-collections-empty-dir/', + }); + let error; + try { + await fixture.build(); + } catch (e) { + error = e.message; + } + assert.equal(error, undefined); + + const html = await fixture.readFile('/index.html'); + const $ = cheerio.load(html); + const h1 = $('h1'); + assert.equal(h1.text(), 'Entries length: 0'); + assert.equal(h1.attr('data-entries'), '[]'); + }); + }); + + describe('SSR integration', () => { + let app; + + before(async () => { + const fixture = await loadFixture({ + root: './fixtures/content-ssr-integration/', + output: 'server', + adapter: testAdapter(), + vite: { + plugins: [preventNodeBuiltinDependencyPlugin()], + }, + }); + await fixture.build(); + app = await fixture.loadTestAdapterApp(); + }); + + it('Responds 200 for expected pages', async () => { + for (const slug in blogSlugToContents) { + const request = new Request('http://example.com/posts/' + slug); + const response = await app.render(request); + assert.equal(response.status, 200); + } + }); + + it('Renders titles', async () => { + for (const slug in blogSlugToContents) { + const request = new Request('http://example.com/posts/' + slug); + const response = await app.render(request); + const body = await response.text(); + const $ = cheerio.load(body); + assert.equal($('h1').text(), blogSlugToContents[slug].title); + } + }); + + it('Renders content', async () => { + for (const slug in blogSlugToContents) { + const request = new Request('http://example.com/posts/' + slug); + const response = await app.render(request); + const body = await response.text(); + const $ = cheerio.load(body); + assert.equal( + $(blogSlugToContents[slug].element).text().trim(), + blogSlugToContents[slug].content, + ); + } + }); + }); + + describe('Base configuration', () => { + let fixture; + + before(async () => { + fixture = await loadFixture({ + root: './fixtures/content-collections-base/', + }); + await fixture.build(); + }); + + it('Includes base in links', async () => { + const html = await fixture.readFile('/docs/index.html'); + const $ = cheerio.load(html); + assert.equal($('link').attr('href').startsWith('/docs'), true); + }); + + it('Includes base in scripts', async () => { + const html = await fixture.readFile('/docs/index.html'); + const $ = cheerio.load(html); + assert.equal($('script').attr('src').startsWith('/docs'), true); + }); + }); + + describe('Mutation', () => { + let fixture; + + before(async () => { + fixture = await loadFixture({ + root: './fixtures/content-collections-mutation/', + }); + await fixture.build(); + }); + + it('Does not mutate cached collection', async () => { + const html = await fixture.readFile('/index.html'); + const index = cheerio.load(html)('h2:first').text(); + const html2 = await fixture.readFile('/another_page/index.html'); + const anotherPage = cheerio.load(html2)('h2:first').text(); + + assert.equal(index, anotherPage); + }); + }); +}); diff --git a/packages/astro/test/content-collections.test.js b/packages/astro/test/content-collections.test.js index 32da1ce000a5..a4c527cfc349 100644 --- a/packages/astro/test/content-collections.test.js +++ b/packages/astro/test/content-collections.test.js @@ -26,13 +26,16 @@ describe('Content Collections', () => { assert.equal(Array.isArray(json.withoutConfig), true); const ids = json.withoutConfig.map((item) => item.id); - assert.deepEqual(ids.sort(), [ - 'columbia.md', - 'endeavour.md', - 'enterprise.md', - // Spaces allowed in IDs - 'promo/launch week.mdx', - ].sort()); + assert.deepEqual( + ids.sort(), + [ + 'columbia.md', + 'endeavour.md', + 'enterprise.md', + // Spaces allowed in IDs + 'promo/launch week.mdx', + ].sort(), + ); }); it('Handles spaces in `without config` slugs', async () => { @@ -40,13 +43,16 @@ describe('Content Collections', () => { assert.equal(Array.isArray(json.withoutConfig), true); const slugs = json.withoutConfig.map((item) => item.slug); - assert.deepEqual(slugs.sort(), [ - 'columbia', - 'endeavour', - 'enterprise', - // "launch week.mdx" is converted to "launch-week.mdx" - 'promo/launch-week', - ].sort()); + assert.deepEqual( + slugs.sort(), + [ + 'columbia', + 'endeavour', + 'enterprise', + // "launch week.mdx" is converted to "launch-week.mdx" + 'promo/launch-week', + ].sort(), + ); }); it('Returns `with schema` collection', async () => { @@ -55,7 +61,7 @@ describe('Content Collections', () => { const ids = json.withSchemaConfig.map((item) => item.id); const publishedDates = json.withSchemaConfig.map((item) => item.data.publishedAt); - assert.deepEqual(ids, ['four%.md', 'one.md', 'three.md', 'two.md']); + assert.deepEqual(ids.sort(), ['four%.md', 'one.md', 'three.md', 'two.md'].sort()); assert.equal( publishedDates.every((date) => date instanceof Date), true, @@ -102,10 +108,12 @@ describe('Content Collections', () => { it('Handles symlinked content', async () => { assert.ok(json.hasOwnProperty('withSymlinkedContent')); assert.equal(Array.isArray(json.withSymlinkedContent), true); - const ids = json.withSymlinkedContent.map((item) => item.id); - assert.deepEqual(ids, ['first.md', 'second.md', 'third.md']); - assert.equal(json.withSymlinkedContent[0].data.title, 'First Blog'); + assert.deepEqual(ids.sort(), ['first.md', 'second.md', 'third.md'].sort()); + assert.equal( + json.withSymlinkedContent.find(({ id }) => id === 'first.md').data.title, + 'First Blog', + ); }); it('Handles symlinked data', async () => { diff --git a/packages/astro/test/fixtures/content-collections-base/astro.config.mjs b/packages/astro/test/fixtures/content-collections-base/astro.config.mjs index 872cf0cd542c..193fbdc6651a 100644 --- a/packages/astro/test/fixtures/content-collections-base/astro.config.mjs +++ b/packages/astro/test/fixtures/content-collections-base/astro.config.mjs @@ -10,7 +10,4 @@ export default defineConfig({ assetsInlineLimit: 0 } }, - experimental: { - emulateLegacyCollections: true, - } }); diff --git a/packages/astro/test/fixtures/content-collections-cache-invalidation/astro.config.mjs b/packages/astro/test/fixtures/content-collections-cache-invalidation/astro.config.mjs index 3906f97914cb..a74151f32bd2 100644 --- a/packages/astro/test/fixtures/content-collections-cache-invalidation/astro.config.mjs +++ b/packages/astro/test/fixtures/content-collections-cache-invalidation/astro.config.mjs @@ -8,8 +8,5 @@ export default defineConfig({ build: { assetsInlineLimit: 0, } - }, - experimental: { - emulateLegacyCollections: true, } }); diff --git a/packages/astro/test/fixtures/content-collections-mutation/astro.config.mjs b/packages/astro/test/fixtures/content-collections-mutation/astro.config.mjs index 0f0efbe27b55..d69e57975a64 100644 --- a/packages/astro/test/fixtures/content-collections-mutation/astro.config.mjs +++ b/packages/astro/test/fixtures/content-collections-mutation/astro.config.mjs @@ -3,7 +3,4 @@ import { defineConfig } from 'astro/config'; export default defineConfig({ integrations: [mdx()], - experimental: { - emulateLegacyCollections: true, - } }); diff --git a/packages/astro/test/fixtures/content-collections-same-contents/astro.config.mjs b/packages/astro/test/fixtures/content-collections-same-contents/astro.config.mjs index 1bfaed140657..417b7c5e9cce 100644 --- a/packages/astro/test/fixtures/content-collections-same-contents/astro.config.mjs +++ b/packages/astro/test/fixtures/content-collections-same-contents/astro.config.mjs @@ -7,8 +7,5 @@ export default defineConfig({ build: { assetsInlineLimit: 0 } - }, - experimental: { - emulateLegacyCollections: true, } }); diff --git a/packages/astro/test/fixtures/content-collections/astro.config.mjs b/packages/astro/test/fixtures/content-collections/astro.config.mjs index 63abb27ceffc..c4f24615627f 100644 --- a/packages/astro/test/fixtures/content-collections/astro.config.mjs +++ b/packages/astro/test/fixtures/content-collections/astro.config.mjs @@ -6,6 +6,5 @@ export default defineConfig({ integrations: [mdx()], experimental: { contentIntellisense: true, - emulateLegacyCollections: true, } }); From 396701210e7bad6054793572917277569c7ddfed Mon Sep 17 00:00:00 2001 From: Matt Kane Date: Fri, 13 Sep 2024 10:24:51 +0100 Subject: [PATCH 08/43] Switch flag handling --- packages/astro/src/content/loaders/glob.ts | 9 ++++-- packages/astro/src/content/runtime.ts | 6 +--- packages/astro/src/content/utils.ts | 22 +++++--------- .../vite-plugin-content-virtual-mod.ts | 10 +++---- packages/astro/src/core/build/index.ts | 2 +- packages/astro/src/core/config/schema.ts | 29 ++++++++++++++----- packages/astro/src/types/public/config.ts | 25 ++++++++++++---- ...content-collections-emulate-legacy.test.js | 3 -- ...ntal-content-collection-references.test.js | 3 ++ ...ent-collections-cache-invalidation.test.js | 9 ++++++ ...collections-css-inline-stylesheets.test.js | 15 ++++++++++ ...imental-content-collections-render.test.js | 3 ++ .../experimental-content-collections.test.js | 24 +++++++++++++++ .../content-collections/astro.config.mjs | 1 + packages/astro/test/server-islands.test.js | 6 ++-- 15 files changed, 119 insertions(+), 48 deletions(-) diff --git a/packages/astro/src/content/loaders/glob.ts b/packages/astro/src/content/loaders/glob.ts index 874560e66516..29756ed0fea5 100644 --- a/packages/astro/src/content/loaders/glob.ts +++ b/packages/astro/src/content/loaders/glob.ts @@ -90,7 +90,8 @@ export function glob(globOptions: GlobOptions): Loader { const untouchedEntries = new Set(store.keys()); const isLegacy = (globOptions as any)._legacy; - const legacyEnabled = config.experimental?.emulateLegacyCollections; + // If legacy mode is *not* enabled then we use emulate legacy collections instead + const emulateLegacyCollections = !config.legacy.legacyContentCollections; async function syncData(entry: string, base: URL, entryType?: ContentEntryType) { if (!entryType) { logger.warn(`No entry type found for ${entry}`); @@ -245,7 +246,7 @@ export function glob(globOptions: GlobOptions): Loader { if (isConfigFile(entry)) { return; } - if (!legacyEnabled && isInContentDir(entry)) { + if (!emulateLegacyCollections && isInContentDir(entry)) { skippedFiles.push(entry); return; } @@ -263,7 +264,9 @@ export function glob(globOptions: GlobOptions): Loader { ? globOptions.pattern.join(', ') : globOptions.pattern; - logger.warn(`The glob() loader cannot be used for files in ${bold('src/content')}.`); + logger.warn( + `The glob() loader cannot be used for files in ${bold('src/content')} when legacy mode is enabled.`, + ); if (skipCount > 10) { logger.warn( `Skipped ${green(skippedFiles.length)} files that matched ${green(patternList)}.`, diff --git a/packages/astro/src/content/runtime.ts b/packages/astro/src/content/runtime.ts index a009e1d671ea..66c0dcab60db 100644 --- a/packages/astro/src/content/runtime.ts +++ b/packages/astro/src/content/runtime.ts @@ -94,11 +94,7 @@ export function createGetCollection({ if (hasFilter && !filter(entry)) { continue; } - if (entry.legacyId) { - result.push(emulateLegacyEntry(entry)); - } else { - result.push(entry); - } + result.push(entry.legacyId ? emulateLegacyEntry(entry) : entry); } return result; } else { diff --git a/packages/astro/src/content/utils.ts b/packages/astro/src/content/utils.ts index adf98de4781f..a11bf66b1307 100644 --- a/packages/astro/src/content/utils.ts +++ b/packages/astro/src/content/utils.ts @@ -514,18 +514,15 @@ async function loadContentConfig({ export async function autogenerateCollections({ config, settings, - fs, }: { config?: ContentConfig; settings: AstroSettings; fs: typeof fsMod; }): Promise { - if (!settings.config.experimental.emulateLegacyCollections) { + if (settings.config.legacy.legacyContentCollections) { return config; } const contentDir = new URL('./content/', settings.config.srcDir); - // Find all directories in the content directory - const collectionDirs = await fs.promises.readdir(contentDir, { withFileTypes: true }); const collections: Record = config?.collections ?? {}; @@ -534,11 +531,7 @@ export async function autogenerateCollections({ const contentPattern = globWithUnderscoresIgnored('', contentExts); const dataPattern = globWithUnderscoresIgnored('', dataExts); - for (const dir of collectionDirs) { - if (!(dir.isDirectory() || dir.isSymbolicLink()) || dir.name.startsWith('_')) { - continue; - } - const collectionName = dir.name; + for (const collectionName of Object.keys(collections)) { if (collections[collectionName]?.type === 'content_layer') { // This is already a content layer, skip continue; @@ -550,6 +543,7 @@ export async function autogenerateCollections({ loader: glob({ base: new URL(collectionName, contentDir), pattern: collections[collectionName]?.type === 'data' ? dataPattern : contentPattern, + // Only "content" collections need special legacy handling _legacy: collections[collectionName]?.type !== 'data' || undefined, // Zod weirdness has trouble with typing the args to the load function }) as any, @@ -571,12 +565,10 @@ export async function reloadContentConfigObserver({ try { let config = await loadContentConfig(loadContentConfigOpts); - if (loadContentConfigOpts.settings.config.experimental.emulateLegacyCollections) { - config = await autogenerateCollections({ - config, - ...loadContentConfigOpts, - }); - } + config = await autogenerateCollections({ + config, + ...loadContentConfigOpts, + }); if (config) { observer.set({ status: 'loaded', config }); diff --git a/packages/astro/src/content/vite-plugin-content-virtual-mod.ts b/packages/astro/src/content/vite-plugin-content-virtual-mod.ts index 24486c73273d..906d9a3e3588 100644 --- a/packages/astro/src/content/vite-plugin-content-virtual-mod.ts +++ b/packages/astro/src/content/vite-plugin-content-virtual-mod.ts @@ -109,12 +109,12 @@ export function astroContentVirtualModPlugin({ }, async load(id, args) { if (id === RESOLVED_VIRTUAL_MODULE_ID) { - const lookupMap = settings.config.experimental.emulateLegacyCollections - ? {} - : await generateLookupMap({ + const lookupMap = settings.config.legacy.legacyContentCollections + ? await generateLookupMap({ settings, fs, - }); + }) + : {}; const isClient = !args?.ssr; const code = await generateContentEntryFile({ settings, @@ -234,7 +234,7 @@ export async function generateContentEntryFile({ let contentEntryGlobResult = '""'; let dataEntryGlobResult = '""'; let renderEntryGlobResult = '""'; - if (!settings.config.experimental.emulateLegacyCollections) { + if (settings.config.legacy.legacyContentCollections) { if (IS_DEV || IS_SERVER || !settings.config.experimental.contentCollectionCache) { const contentEntryConfigByExt = getEntryConfigByExtMap(settings.contentEntryTypes); const contentEntryExts = [...contentEntryConfigByExt.keys()]; diff --git a/packages/astro/src/core/build/index.ts b/packages/astro/src/core/build/index.ts index c420e85c415d..1757dc65c914 100644 --- a/packages/astro/src/core/build/index.ts +++ b/packages/astro/src/core/build/index.ts @@ -213,7 +213,7 @@ class AstroBuilder { const hasServerIslands = this.settings.serverIslandNameMap.size > 0; // Error if there are server islands but no adapter provided. - if(hasServerIslands && this.settings.buildOutput !== 'server') { + if (hasServerIslands && this.settings.buildOutput !== 'server') { throw new AstroError(AstroErrorData.NoAdapterInstalledServerIslands); } diff --git a/packages/astro/src/core/config/schema.ts b/packages/astro/src/core/config/schema.ts index e581dfb4c9c9..e3a73ba5455a 100644 --- a/packages/astro/src/core/config/schema.ts +++ b/packages/astro/src/core/config/schema.ts @@ -80,7 +80,9 @@ export const ASTRO_CONFIG_DEFAULTS = { integrations: [], markdown: markdownConfigDefaults, vite: {}, - legacy: {}, + legacy: { + legacyContentCollections: false, + }, redirects: {}, security: { checkOrigin: true, @@ -93,7 +95,6 @@ export const ASTRO_CONFIG_DEFAULTS = { contentCollectionCache: false, clientPrerender: false, contentIntellisense: false, - emulateLegacyCollections: false, }, } satisfies AstroUserConfig & { server: { open: boolean } }; @@ -534,16 +535,19 @@ export const AstroConfigSchema = z.object({ .boolean() .optional() .default(ASTRO_CONFIG_DEFAULTS.experimental.contentIntellisense), - emulateLegacyCollections: z - .boolean() - .optional() - .default(ASTRO_CONFIG_DEFAULTS.experimental.emulateLegacyCollections), }) .strict( `Invalid or outdated experimental feature.\nCheck for incorrect spelling or outdated Astro version.\nSee https://docs.astro.build/en/reference/configuration-reference/#experimental-flags for a list of all current experiments.`, ) .default({}), - legacy: z.object({}).default({}), + legacy: z + .object({ + legacyContentCollections: z + .boolean() + .optional() + .default(ASTRO_CONFIG_DEFAULTS.legacy.legacyContentCollections), + }) + .default({}), }); export type AstroConfigType = z.infer; @@ -706,6 +710,17 @@ export function createRelativeSchema(cmd: string, fileProtocolRoot: string) { }); } } + + if ( + configuration.experimental.contentCollectionCache && + !configuration.legacy.legacyContentCollections + ) { + ctx.addIssue({ + code: z.ZodIssueCode.custom, + message: + 'Content collections cache is not supported with the Content Layer API. Please remove the `experimental.contentCollectionsCache` option from your Astro config or enable `legacy.legacyContentCollections`', + }); + } }); return AstroConfigRelativeSchema; diff --git a/packages/astro/src/types/public/config.ts b/packages/astro/src/types/public/config.ts index bec60ac19e8a..b8b5b734ff8a 100644 --- a/packages/astro/src/types/public/config.ts +++ b/packages/astro/src/types/public/config.ts @@ -1537,7 +1537,25 @@ export interface AstroUserConfig { * These flags allow you to opt in to some deprecated or otherwise outdated behavior of Astro * in the latest version, so that you can continue to upgrade and take advantage of new Astro releases. */ - legacy?: object; + legacy?: { + /** + * @docs + * @name legacy.contentCollections + * @type {boolean} + * @default `false` + * @version 5.0.0 + * @description + * Enable legacy behavior for content collections. This flag is intended to help users migrate from Astro 4.x to 5.x. + * If it enabled, data and content collections are handled using the legacy code instead of Content Layer API, including generating + * implicit collections for directories in `src/content`. Any collections with a loader defined will still use the Content Layer API. + * When enabled, you cannot use the glob loader for any collections in the `src/content` directory, and they will instead be handled by + * the legacy code. + * + * To migrate to the new Content Layer API, you should remove this flag and define a collection for any directories in `src/content` that + * you want to use as a collection. + */ + legacyContentCollections?: boolean; + }; /** * @docs @@ -1691,11 +1709,6 @@ export interface AstroUserConfig { * To use this feature with the Astro VS Code extension, you must also enable the `astro.content-intellisense` option in your VS Code settings. For editors using the Astro language server directly, pass the `contentIntellisense: true` initialization parameter to enable this feature. */ contentIntellisense?: boolean; - - /** - * Emulate legacy content collection behavior using glob loader - */ - emulateLegacyCollections?: boolean; }; } diff --git a/packages/astro/test/content-collections-emulate-legacy.test.js b/packages/astro/test/content-collections-emulate-legacy.test.js index 706874b21dd4..b8f00dd4c214 100644 --- a/packages/astro/test/content-collections-emulate-legacy.test.js +++ b/packages/astro/test/content-collections-emulate-legacy.test.js @@ -12,9 +12,6 @@ describe('Content Collections - Emulate Legacy', () => { before(async () => { fixture = await loadFixture({ root: './fixtures/content-collections/', - experimental: { - emulateLegacyCollections: true, - }, }); await fixture.build(); }); diff --git a/packages/astro/test/experimental-content-collection-references.test.js b/packages/astro/test/experimental-content-collection-references.test.js index ab458bbd8d7b..61e61d4674a2 100644 --- a/packages/astro/test/experimental-content-collection-references.test.js +++ b/packages/astro/test/experimental-content-collection-references.test.js @@ -10,6 +10,9 @@ describe('Experimental Content Collections cache - references', () => { fixture = await loadFixture({ root: './fixtures/content-collection-references/', experimental: { contentCollectionCache: true }, + legacy: { + legacyContentCollections: true, + }, }); }); diff --git a/packages/astro/test/experimental-content-collections-cache-invalidation.test.js b/packages/astro/test/experimental-content-collections-cache-invalidation.test.js index c359950a0f22..776491204f21 100644 --- a/packages/astro/test/experimental-content-collections-cache-invalidation.test.js +++ b/packages/astro/test/experimental-content-collections-cache-invalidation.test.js @@ -53,6 +53,9 @@ describe('Experimental Content Collections cache - invalidation', () => { root: './fixtures/content-collections-cache-invalidation/', cacheDir: './cache/version-mismatch/', experimental: { contentCollectionCache: true }, + legacy: { + legacyContentCollections: true, + }, integrations: [testPlugin.plugin()], }); backup = new CacheBackup( @@ -84,6 +87,9 @@ describe('Experimental Content Collections cache - invalidation', () => { root: './fixtures/content-collections-cache-invalidation/', cacheDir: './cache/lockfile-mismatch/', experimental: { contentCollectionCache: true }, + legacy: { + legacyContentCollections: true, + }, integrations: [testPlugin.plugin()], }); backup = new CacheBackup( @@ -115,6 +121,9 @@ describe('Experimental Content Collections cache - invalidation', () => { root: './fixtures/content-collections-same-contents/', cacheDir: './cache/same-contents/', experimental: { contentCollectionCache: true }, + legacy: { + legacyContentCollections: true, + }, integrations: [testPlugin.plugin()], }); backup = new CacheBackup( diff --git a/packages/astro/test/experimental-content-collections-css-inline-stylesheets.test.js b/packages/astro/test/experimental-content-collections-css-inline-stylesheets.test.js index 2c61563c6834..e58464a1ed16 100644 --- a/packages/astro/test/experimental-content-collections-css-inline-stylesheets.test.js +++ b/packages/astro/test/experimental-content-collections-css-inline-stylesheets.test.js @@ -21,6 +21,9 @@ describe('Experimental Content Collections cache inlineStylesheets', () => { experimental: { contentCollectionCache: true, }, + legacy: { + legacyContentCollections: true, + }, }); await fixture.build(); }); @@ -66,6 +69,9 @@ describe('Experimental Content Collections cache - inlineStylesheets to never in experimental: { contentCollectionCache: true, }, + legacy: { + legacyContentCollections: true, + }, }); await fixture.build(); app = await fixture.loadTestAdapterApp(); @@ -116,6 +122,9 @@ describe('Experimental Content Collections cache - inlineStylesheets to auto in experimental: { contentCollectionCache: true, }, + legacy: { + legacyContentCollections: true, + }, }); await fixture.build(); }); @@ -167,6 +176,9 @@ describe('Setting inlineStylesheets to always in static output', () => { experimental: { contentCollectionCache: true, }, + legacy: { + legacyContentCollections: true, + }, }); await fixture.build(); }); @@ -211,6 +223,9 @@ describe('Setting inlineStylesheets to always in server output', () => { experimental: { contentCollectionCache: true, }, + legacy: { + legacyContentCollections: true, + }, }); await fixture.build(); app = await fixture.loadTestAdapterApp(); diff --git a/packages/astro/test/experimental-content-collections-render.test.js b/packages/astro/test/experimental-content-collections-render.test.js index f515913c4c66..da3d852b18c5 100644 --- a/packages/astro/test/experimental-content-collections-render.test.js +++ b/packages/astro/test/experimental-content-collections-render.test.js @@ -17,6 +17,9 @@ if (!isWindows) { experimental: { contentCollectionCache: true, }, + legacy: { + legacyContentCollections: true, + }, }); await fixture.build(); }); diff --git a/packages/astro/test/experimental-content-collections.test.js b/packages/astro/test/experimental-content-collections.test.js index b2b2832ce62c..c226b004571d 100644 --- a/packages/astro/test/experimental-content-collections.test.js +++ b/packages/astro/test/experimental-content-collections.test.js @@ -13,6 +13,9 @@ describe('Experimental Content Collections cache', () => { fixture = await loadFixture({ root: './fixtures/content-collections/', experimental: { contentCollectionCache: true }, + legacy: { + legacyContentCollections: true, + }, }); await fixture.build(); }); @@ -180,6 +183,9 @@ describe('Experimental Content Collections cache', () => { experimental: { contentCollectionCache: true, }, + legacy: { + legacyContentCollections: true, + }, }); await fixture.build(); }); @@ -219,6 +225,9 @@ describe('Experimental Content Collections cache', () => { experimental: { contentCollectionCache: true, }, + legacy: { + legacyContentCollections: true, + }, }); let error = null; try { @@ -238,6 +247,9 @@ describe('Experimental Content Collections cache', () => { experimental: { contentCollectionCache: true, }, + legacy: { + legacyContentCollections: true, + }, }); let error; try { @@ -257,6 +269,9 @@ describe('Experimental Content Collections cache', () => { experimental: { contentCollectionCache: true, }, + legacy: { + legacyContentCollections: true, + }, }); let error; try { @@ -277,6 +292,9 @@ describe('Experimental Content Collections cache', () => { experimental: { contentCollectionCache: true, }, + legacy: { + legacyContentCollections: true, + }, }); let error; try { @@ -297,6 +315,9 @@ describe('Experimental Content Collections cache', () => { experimental: { contentCollectionCache: true, }, + legacy: { + legacyContentCollections: true, + }, }); let error; try { @@ -326,6 +347,9 @@ describe('Experimental Content Collections cache', () => { experimental: { contentCollectionCache: true, }, + legacy: { + legacyContentCollections: true, + }, }); await fixture.build(); app = await fixture.loadTestAdapterApp(); diff --git a/packages/astro/test/fixtures/content-collections/astro.config.mjs b/packages/astro/test/fixtures/content-collections/astro.config.mjs index c4f24615627f..38ee7b8b38da 100644 --- a/packages/astro/test/fixtures/content-collections/astro.config.mjs +++ b/packages/astro/test/fixtures/content-collections/astro.config.mjs @@ -6,5 +6,6 @@ export default defineConfig({ integrations: [mdx()], experimental: { contentIntellisense: true, + } }); diff --git a/packages/astro/test/server-islands.test.js b/packages/astro/test/server-islands.test.js index 86956f0d1ae8..5055369727bf 100644 --- a/packages/astro/test/server-islands.test.js +++ b/packages/astro/test/server-islands.test.js @@ -69,7 +69,7 @@ describe('Server islands', () => { describe('build', () => { before(async () => { await fixture.build({ - adapter: testAdapter() + adapter: testAdapter(), }); }); @@ -89,10 +89,10 @@ describe('Server islands', () => { it('Errors during the build', async () => { try { await fixture.build({ - adapter: undefined + adapter: undefined, }); assert.equal(true, false, 'should not have succeeded'); - } catch(err) { + } catch (err) { assert.equal(err.title, 'Cannot use Server Islands without an adapter.'); } }); From 072dd7e43db6c5a9a9ddd37e70fc8b933e0a1f35 Mon Sep 17 00:00:00 2001 From: Matt Kane Date: Fri, 13 Sep 2024 10:55:23 +0100 Subject: [PATCH 09/43] Fix warnings --- examples/with-markdoc/src/content/config.ts | 5 +++++ packages/astro/src/content/runtime.ts | 10 +++++----- 2 files changed, 10 insertions(+), 5 deletions(-) create mode 100644 examples/with-markdoc/src/content/config.ts diff --git a/examples/with-markdoc/src/content/config.ts b/examples/with-markdoc/src/content/config.ts new file mode 100644 index 000000000000..79743326eac3 --- /dev/null +++ b/examples/with-markdoc/src/content/config.ts @@ -0,0 +1,5 @@ +import { defineCollection } from 'astro:content'; + +export const collections = { + docs: defineCollection({}) +}; diff --git a/packages/astro/src/content/runtime.ts b/packages/astro/src/content/runtime.ts index 66c0dcab60db..5e2b9e1d0159 100644 --- a/packages/astro/src/content/runtime.ts +++ b/packages/astro/src/content/runtime.ts @@ -184,7 +184,7 @@ export function createGetEntryBySlug({ }); } // eslint-disable-next-line no-console - console.warn(`The collection ${JSON.stringify(collection)} does not exist.`); + console.warn(`The collection ${JSON.stringify(collection)} does not exist. Please ensure it is defined in your content config.`); return undefined; } @@ -227,7 +227,7 @@ export function createGetDataEntryById({ return getEntry(collection, id); } // eslint-disable-next-line no-console - console.warn(`The collection ${JSON.stringify(collection)} does not exist.`); + console.warn(`The collection ${JSON.stringify(collection)} does not exist. Please ensure it is defined in your content config.`); return undefined; } @@ -328,7 +328,7 @@ export function createGetEntry({ if (!collectionNames.has(collection)) { // eslint-disable-next-line no-console - console.warn(`The collection ${JSON.stringify(collection)} does not exist.`); + console.warn(`The collection ${JSON.stringify(collection)} does not exist. Please ensure it is defined in your content config.`); return undefined; } @@ -644,13 +644,13 @@ export function createReference({ lookupMap }: { lookupMap: ContentLookupMap }) return { id: lookup, collection }; } - if (!lookupMap[collection] && store.collections().size === 0) { + if (!lookupMap[collection] && store.collections().size < 2) { // If the collection is not in the lookup map or store, it may be a content layer collection and the store may not yet be populated. + // The store may still have a single collection, which would be the top level metadata collection. // For now, we can't validate this reference, so we'll optimistically convert it to a reference object which we'll validate // later in the pipeline when we do have access to the store. return { id: lookup, collection }; } - const { type, entries } = lookupMap[collection]; const entry = entries[lookup]; From 75c7181a5cbbecfcd8eaedfe8cba31a1d5784af7 Mon Sep 17 00:00:00 2001 From: Matt Kane Date: Fri, 13 Sep 2024 11:29:23 +0100 Subject: [PATCH 10/43] Add layout warning --- packages/astro/src/content/loaders/glob.ts | 5 +++++ .../test/fixtures/content-mixed-errors/astro.config.mjs | 6 +++++- .../fixtures/css-inline-stylesheets/src/content/config.ts | 5 +++++ 3 files changed, 15 insertions(+), 1 deletion(-) create mode 100644 packages/astro/test/fixtures/css-inline-stylesheets/src/content/config.ts diff --git a/packages/astro/src/content/loaders/glob.ts b/packages/astro/src/content/loaders/glob.ts index 29756ed0fea5..5d7e184df007 100644 --- a/packages/astro/src/content/loaders/glob.ts +++ b/packages/astro/src/content/loaders/glob.ts @@ -154,6 +154,11 @@ export function glob(globOptions: GlobOptions): Loader { filePath, }); if (entryType.getRenderFunction) { + + if(isLegacy && data.layout) { + logger.error(`The Markdown "layout" field is not supported in content collections in Astro 5. Ignoring layout for ${JSON.stringify(entry)}. Enable "legacy.legacyContentCollections" if you need to use the layout field.`); + } + let render = renderFunctionByContentType.get(entryType); if (!render) { render = await entryType.getRenderFunction(config); diff --git a/packages/astro/test/fixtures/content-mixed-errors/astro.config.mjs b/packages/astro/test/fixtures/content-mixed-errors/astro.config.mjs index 882e6515a67e..5a64519c9185 100644 --- a/packages/astro/test/fixtures/content-mixed-errors/astro.config.mjs +++ b/packages/astro/test/fixtures/content-mixed-errors/astro.config.mjs @@ -1,4 +1,8 @@ import { defineConfig } from 'astro/config'; // https://astro.build/config -export default defineConfig({}); +export default defineConfig({ + legacy: { + legacyContentCollections: true, + } +}); diff --git a/packages/astro/test/fixtures/css-inline-stylesheets/src/content/config.ts b/packages/astro/test/fixtures/css-inline-stylesheets/src/content/config.ts new file mode 100644 index 000000000000..f2f3ecc529a2 --- /dev/null +++ b/packages/astro/test/fixtures/css-inline-stylesheets/src/content/config.ts @@ -0,0 +1,5 @@ +import { defineCollection } from 'astro:content'; + +export const collections = { + en: defineCollection({}) +}; From 9d371a1255a234ba1fbf74c0336b1fdad84350b6 Mon Sep 17 00:00:00 2001 From: Matt Kane Date: Fri, 13 Sep 2024 16:23:01 +0100 Subject: [PATCH 11/43] Update fixtures --- packages/astro/test/fixtures/content/astro.config.mjs | 4 ++++ .../fixtures/css-inline-stylesheets-2/astro.config.mjs | 8 ++++++++ .../fixtures/css-inline-stylesheets-3/astro.config.mjs | 8 ++++++++ .../test/fixtures/css-inline-stylesheets/astro.config.mjs | 8 ++++++++ .../fixtures/css-inline-stylesheets/src/content/config.ts | 5 ----- 5 files changed, 28 insertions(+), 5 deletions(-) create mode 100644 packages/astro/test/fixtures/css-inline-stylesheets-2/astro.config.mjs create mode 100644 packages/astro/test/fixtures/css-inline-stylesheets-3/astro.config.mjs create mode 100644 packages/astro/test/fixtures/css-inline-stylesheets/astro.config.mjs delete mode 100644 packages/astro/test/fixtures/css-inline-stylesheets/src/content/config.ts diff --git a/packages/astro/test/fixtures/content/astro.config.mjs b/packages/astro/test/fixtures/content/astro.config.mjs index d69e57975a64..c71bf7daf89b 100644 --- a/packages/astro/test/fixtures/content/astro.config.mjs +++ b/packages/astro/test/fixtures/content/astro.config.mjs @@ -3,4 +3,8 @@ import { defineConfig } from 'astro/config'; export default defineConfig({ integrations: [mdx()], + legacy: { + // Enable legacy content collections as we test layout fields + legacyContentCollections: true + } }); diff --git a/packages/astro/test/fixtures/css-inline-stylesheets-2/astro.config.mjs b/packages/astro/test/fixtures/css-inline-stylesheets-2/astro.config.mjs new file mode 100644 index 000000000000..08abca419b64 --- /dev/null +++ b/packages/astro/test/fixtures/css-inline-stylesheets-2/astro.config.mjs @@ -0,0 +1,8 @@ +import { defineConfig } from 'astro/config'; + +export default defineConfig({ + legacy: { + // Enable legacy content collections as we test layout fields + legacyContentCollections: true + } +}); diff --git a/packages/astro/test/fixtures/css-inline-stylesheets-3/astro.config.mjs b/packages/astro/test/fixtures/css-inline-stylesheets-3/astro.config.mjs new file mode 100644 index 000000000000..08abca419b64 --- /dev/null +++ b/packages/astro/test/fixtures/css-inline-stylesheets-3/astro.config.mjs @@ -0,0 +1,8 @@ +import { defineConfig } from 'astro/config'; + +export default defineConfig({ + legacy: { + // Enable legacy content collections as we test layout fields + legacyContentCollections: true + } +}); diff --git a/packages/astro/test/fixtures/css-inline-stylesheets/astro.config.mjs b/packages/astro/test/fixtures/css-inline-stylesheets/astro.config.mjs new file mode 100644 index 000000000000..08abca419b64 --- /dev/null +++ b/packages/astro/test/fixtures/css-inline-stylesheets/astro.config.mjs @@ -0,0 +1,8 @@ +import { defineConfig } from 'astro/config'; + +export default defineConfig({ + legacy: { + // Enable legacy content collections as we test layout fields + legacyContentCollections: true + } +}); diff --git a/packages/astro/test/fixtures/css-inline-stylesheets/src/content/config.ts b/packages/astro/test/fixtures/css-inline-stylesheets/src/content/config.ts deleted file mode 100644 index f2f3ecc529a2..000000000000 --- a/packages/astro/test/fixtures/css-inline-stylesheets/src/content/config.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { defineCollection } from 'astro:content'; - -export const collections = { - en: defineCollection({}) -}; From 1a27f35eab1788ae6a5612844968a06897a19e1d Mon Sep 17 00:00:00 2001 From: Matt Kane Date: Fri, 13 Sep 2024 17:40:10 +0100 Subject: [PATCH 12/43] More tests! --- .../content-collection-references.test.js | 41 +++-- .../astro/test/content-collections.test.js | 45 +---- .../experimental-content-collections.test.js | 5 +- .../content-collections/src/content/config.ts | 3 + .../src/pages/collections.json.js | 3 +- .../src/pages/entries.json.js | 2 - .../Ben Holmes.yml | 0 .../Fred K Schott.yml | 0 .../Nate Moore.yml | 0 .../src/content/config.ts | 4 +- .../src/pages/authors/[id].json.js | 2 +- .../src/pages/authors/all.json.js | 2 +- .../data-collections/astro.config.mjs | 4 +- .../Ben Holmes.yml | 0 .../Fred K Schott.yml | 0 .../Nate Moore.yml | 0 .../data-collections/src/content/config.ts | 6 +- .../src/pages/authors/[id].json.js | 10 +- .../src/pages/authors/all.json.js | 2 +- .../astro.config.mjs | 13 ++ .../legacy-content-collections/package.json | 9 + .../src/assets/the-future.jpg | Bin 0 -> 22792 bytes .../src/components/ScriptCompA.astro | 1 + .../src/components/ScriptCompB.astro | 1 + .../src/content/config.ts | 62 +++++++ .../src/content/with-custom-slugs/one.md | 5 + .../src/content/with-custom-slugs/three.md | 5 + .../src/content/with-custom-slugs/two.md | 5 + .../src/content/with-data/one.json | 3 + .../src/content/with-data/three.json | 3 + .../src/content/with-data/two.json | 3 + .../src/content/with-schema-config/_ignore.md | 0 .../with-schema-config/_ignore/file.md | 0 .../with-schema-config/_ignore/ignore/file.md | 0 .../src/content/with-schema-config/four%.md | 8 + .../src/content/with-schema-config/one.md | 8 + .../src/content/with-schema-config/three.md | 8 + .../src/content/with-schema-config/two.md | 8 + .../src/content/with-scripts/one.mdx | 7 + .../src/content/with-symlinked-content | 1 + .../src/content/with-symlinked-data | 1 + .../content/with-union-schema/newsletter.md | 6 + .../src/content/with-union-schema/post.md | 7 + .../src/content/without-config/columbia.md | 0 .../src/content/without-config/endeavour.md | 0 .../src/content/without-config/enterprise.md | 0 .../promo/_launch-week-styles.css | 0 .../without-config/promo/launch week.mdx | 0 .../src/pages/collections.json.js | 16 ++ .../src/pages/entries.json.js | 21 +++ .../src/pages/index.astro | 24 +++ .../src/pages/propagation.astro | 22 +++ .../src/pages/with-scripts/[...slug].astro | 21 +++ .../legacy-content-collections/src/utils.js | 8 + .../content-collection/first.md | 6 + .../content-collection/second.md | 6 + .../content-collection/third.md | 6 + .../data-collection/welcome.json | 4 + .../legacy-data-collections/astro.config.mjs | 8 + .../legacy-data-collections/package.json | 16 ++ .../authors-without-config/Ben Holmes.yml | 2 + .../authors-without-config/Fred K Schott.yml | 2 + .../authors-without-config/Nate Moore.yml | 2 + .../src/content/config.ts | 20 +++ .../src/content/docs/example.md | 3 + .../src/content/i18n/en.json | 6 + .../src/content/i18n/es.json | 6 + .../src/content/i18n/fr.yaml | 3 + .../src/pages/authors/[id].json.js | 18 ++ .../src/pages/authors/all.json.js | 6 + .../src/pages/translations/[lang].json.js | 18 ++ .../src/pages/translations/all.json.js | 6 + .../src/pages/translations/by-id.json.js | 6 + ....js => legacy-content-collections.test.js} | 40 ++++- .../test/legacy-data-collections.test.js | 159 ++++++++++++++++++ 75 files changed, 660 insertions(+), 88 deletions(-) rename packages/astro/test/fixtures/data-collections-schema/src/content/{authors-without-config => authors}/Ben Holmes.yml (100%) rename packages/astro/test/fixtures/data-collections-schema/src/content/{authors-without-config => authors}/Fred K Schott.yml (100%) rename packages/astro/test/fixtures/data-collections-schema/src/content/{authors-without-config => authors}/Nate Moore.yml (100%) rename packages/astro/test/fixtures/data-collections/src/content/{authors-without-config => authors}/Ben Holmes.yml (100%) rename packages/astro/test/fixtures/data-collections/src/content/{authors-without-config => authors}/Fred K Schott.yml (100%) rename packages/astro/test/fixtures/data-collections/src/content/{authors-without-config => authors}/Nate Moore.yml (100%) create mode 100644 packages/astro/test/fixtures/legacy-content-collections/astro.config.mjs create mode 100644 packages/astro/test/fixtures/legacy-content-collections/package.json create mode 100644 packages/astro/test/fixtures/legacy-content-collections/src/assets/the-future.jpg create mode 100644 packages/astro/test/fixtures/legacy-content-collections/src/components/ScriptCompA.astro create mode 100644 packages/astro/test/fixtures/legacy-content-collections/src/components/ScriptCompB.astro create mode 100644 packages/astro/test/fixtures/legacy-content-collections/src/content/config.ts create mode 100644 packages/astro/test/fixtures/legacy-content-collections/src/content/with-custom-slugs/one.md create mode 100644 packages/astro/test/fixtures/legacy-content-collections/src/content/with-custom-slugs/three.md create mode 100644 packages/astro/test/fixtures/legacy-content-collections/src/content/with-custom-slugs/two.md create mode 100644 packages/astro/test/fixtures/legacy-content-collections/src/content/with-data/one.json create mode 100644 packages/astro/test/fixtures/legacy-content-collections/src/content/with-data/three.json create mode 100644 packages/astro/test/fixtures/legacy-content-collections/src/content/with-data/two.json create mode 100644 packages/astro/test/fixtures/legacy-content-collections/src/content/with-schema-config/_ignore.md create mode 100644 packages/astro/test/fixtures/legacy-content-collections/src/content/with-schema-config/_ignore/file.md create mode 100644 packages/astro/test/fixtures/legacy-content-collections/src/content/with-schema-config/_ignore/ignore/file.md create mode 100644 packages/astro/test/fixtures/legacy-content-collections/src/content/with-schema-config/four%.md create mode 100644 packages/astro/test/fixtures/legacy-content-collections/src/content/with-schema-config/one.md create mode 100644 packages/astro/test/fixtures/legacy-content-collections/src/content/with-schema-config/three.md create mode 100644 packages/astro/test/fixtures/legacy-content-collections/src/content/with-schema-config/two.md create mode 100644 packages/astro/test/fixtures/legacy-content-collections/src/content/with-scripts/one.mdx create mode 120000 packages/astro/test/fixtures/legacy-content-collections/src/content/with-symlinked-content create mode 120000 packages/astro/test/fixtures/legacy-content-collections/src/content/with-symlinked-data create mode 100644 packages/astro/test/fixtures/legacy-content-collections/src/content/with-union-schema/newsletter.md create mode 100644 packages/astro/test/fixtures/legacy-content-collections/src/content/with-union-schema/post.md rename packages/astro/test/fixtures/{content-collections => legacy-content-collections}/src/content/without-config/columbia.md (100%) rename packages/astro/test/fixtures/{content-collections => legacy-content-collections}/src/content/without-config/endeavour.md (100%) rename packages/astro/test/fixtures/{content-collections => legacy-content-collections}/src/content/without-config/enterprise.md (100%) rename packages/astro/test/fixtures/{content-collections => legacy-content-collections}/src/content/without-config/promo/_launch-week-styles.css (100%) rename packages/astro/test/fixtures/{content-collections => legacy-content-collections}/src/content/without-config/promo/launch week.mdx (100%) create mode 100644 packages/astro/test/fixtures/legacy-content-collections/src/pages/collections.json.js create mode 100644 packages/astro/test/fixtures/legacy-content-collections/src/pages/entries.json.js create mode 100644 packages/astro/test/fixtures/legacy-content-collections/src/pages/index.astro create mode 100644 packages/astro/test/fixtures/legacy-content-collections/src/pages/propagation.astro create mode 100644 packages/astro/test/fixtures/legacy-content-collections/src/pages/with-scripts/[...slug].astro create mode 100644 packages/astro/test/fixtures/legacy-content-collections/src/utils.js create mode 100644 packages/astro/test/fixtures/legacy-content-collections/symlinked-collections/content-collection/first.md create mode 100644 packages/astro/test/fixtures/legacy-content-collections/symlinked-collections/content-collection/second.md create mode 100644 packages/astro/test/fixtures/legacy-content-collections/symlinked-collections/content-collection/third.md create mode 100644 packages/astro/test/fixtures/legacy-content-collections/symlinked-collections/data-collection/welcome.json create mode 100644 packages/astro/test/fixtures/legacy-data-collections/astro.config.mjs create mode 100644 packages/astro/test/fixtures/legacy-data-collections/package.json create mode 100644 packages/astro/test/fixtures/legacy-data-collections/src/content/authors-without-config/Ben Holmes.yml create mode 100644 packages/astro/test/fixtures/legacy-data-collections/src/content/authors-without-config/Fred K Schott.yml create mode 100644 packages/astro/test/fixtures/legacy-data-collections/src/content/authors-without-config/Nate Moore.yml create mode 100644 packages/astro/test/fixtures/legacy-data-collections/src/content/config.ts create mode 100644 packages/astro/test/fixtures/legacy-data-collections/src/content/docs/example.md create mode 100644 packages/astro/test/fixtures/legacy-data-collections/src/content/i18n/en.json create mode 100644 packages/astro/test/fixtures/legacy-data-collections/src/content/i18n/es.json create mode 100644 packages/astro/test/fixtures/legacy-data-collections/src/content/i18n/fr.yaml create mode 100644 packages/astro/test/fixtures/legacy-data-collections/src/pages/authors/[id].json.js create mode 100644 packages/astro/test/fixtures/legacy-data-collections/src/pages/authors/all.json.js create mode 100644 packages/astro/test/fixtures/legacy-data-collections/src/pages/translations/[lang].json.js create mode 100644 packages/astro/test/fixtures/legacy-data-collections/src/pages/translations/all.json.js create mode 100644 packages/astro/test/fixtures/legacy-data-collections/src/pages/translations/by-id.json.js rename packages/astro/test/{content-collections-emulate-legacy.test.js => legacy-content-collections.test.js} (94%) create mode 100644 packages/astro/test/legacy-data-collections.test.js diff --git a/packages/astro/test/content-collection-references.test.js b/packages/astro/test/content-collection-references.test.js index 7119e0f0460c..c255f2dad7fb 100644 --- a/packages/astro/test/content-collection-references.test.js +++ b/packages/astro/test/content-collection-references.test.js @@ -65,13 +65,9 @@ describe('Content Collections - references', () => { it('Returns `author` data', () => { const { author } = json; assert.ok(author.hasOwnProperty('data')); - assert.deepEqual(author, { - id: 'nate-moore', - collection: 'authors', - data: { - name: 'Nate Something Moore', - twitter: 'https://twitter.com/n_moore', - }, + assert.deepEqual(author.data, { + name: 'Nate Something Moore', + twitter: 'https://twitter.com/n_moore', }); }); @@ -82,20 +78,23 @@ describe('Content Collections - references', () => { ...meta, body: fixLineEndings(body).trim(), })); - assert.deepEqual(topLevelInfo, [ - { - id: 'related-1.md', - slug: 'related-1', - body: '# Related post 1\n\nThis is related to the welcome post.', - collection: 'blog', - }, - { - id: 'related-2.md', - slug: 'related-2', - body: '# Related post 2\n\nThis is related to the welcome post.', - collection: 'blog', - }, - ]); + assert.deepEqual( + topLevelInfo.map(({ id, slug, body, collection }) => ({ id, slug, body, collection })), + [ + { + id: 'related-1.md', + slug: 'related-1', + body: '# Related post 1\n\nThis is related to the welcome post.', + collection: 'blog', + }, + { + id: 'related-2.md', + slug: 'related-2', + body: '# Related post 2\n\nThis is related to the welcome post.', + collection: 'blog', + }, + ], + ); const postData = relatedPosts.map(({ data }) => data); assert.deepEqual(postData, [ { diff --git a/packages/astro/test/content-collections.test.js b/packages/astro/test/content-collections.test.js index a4c527cfc349..79497d0191c9 100644 --- a/packages/astro/test/content-collections.test.js +++ b/packages/astro/test/content-collections.test.js @@ -21,40 +21,6 @@ describe('Content Collections', () => { json = devalue.parse(rawJson); }); - it('Returns `without config` collection', async () => { - assert.ok(json.hasOwnProperty('withoutConfig')); - assert.equal(Array.isArray(json.withoutConfig), true); - - const ids = json.withoutConfig.map((item) => item.id); - assert.deepEqual( - ids.sort(), - [ - 'columbia.md', - 'endeavour.md', - 'enterprise.md', - // Spaces allowed in IDs - 'promo/launch week.mdx', - ].sort(), - ); - }); - - it('Handles spaces in `without config` slugs', async () => { - assert.ok(json.hasOwnProperty('withoutConfig')); - assert.equal(Array.isArray(json.withoutConfig), true); - - const slugs = json.withoutConfig.map((item) => item.slug); - assert.deepEqual( - slugs.sort(), - [ - 'columbia', - 'endeavour', - 'enterprise', - // "launch week.mdx" is converted to "launch-week.mdx" - 'promo/launch-week', - ].sort(), - ); - }); - it('Returns `with schema` collection', async () => { assert.ok(json.hasOwnProperty('withSchemaConfig')); assert.equal(Array.isArray(json.withSchemaConfig), true); @@ -68,13 +34,13 @@ describe('Content Collections', () => { 'Not all publishedAt dates are Date objects', ); assert.deepEqual( - publishedDates.map((date) => date.toISOString()), + publishedDates.map((date) => date.toISOString()).sort(), [ '2021-01-01T00:00:00.000Z', '2021-01-01T00:00:00.000Z', '2021-01-03T00:00:00.000Z', '2021-01-02T00:00:00.000Z', - ], + ].sort(), ); }); @@ -83,7 +49,7 @@ describe('Content Collections', () => { assert.equal(Array.isArray(json.withSlugConfig), true); const slugs = json.withSlugConfig.map((item) => item.slug); - assert.deepEqual(slugs, ['fancy-one', 'excellent-three', 'interesting-two']); + assert.deepEqual(slugs.sort(), ['fancy-one', 'excellent-three', 'interesting-two'].sort()); }); it('Returns `with union schema` collection', async () => { @@ -145,11 +111,6 @@ describe('Content Collections', () => { json = devalue.parse(rawJson); }); - it('Returns `without config` collection entry', async () => { - assert.ok(json.hasOwnProperty('columbiaWithoutConfig')); - assert.equal(json.columbiaWithoutConfig.id, 'columbia.md'); - }); - it('Returns `with schema` collection entry', async () => { assert.ok(json.hasOwnProperty('oneWithSchemaConfig')); assert.equal(json.oneWithSchemaConfig.id, 'one.md'); diff --git a/packages/astro/test/experimental-content-collections.test.js b/packages/astro/test/experimental-content-collections.test.js index c226b004571d..99c2e61436a3 100644 --- a/packages/astro/test/experimental-content-collections.test.js +++ b/packages/astro/test/experimental-content-collections.test.js @@ -11,11 +11,8 @@ describe('Experimental Content Collections cache', () => { let fixture; before(async () => { fixture = await loadFixture({ - root: './fixtures/content-collections/', + root: './fixtures/legacy-content-collections/', experimental: { contentCollectionCache: true }, - legacy: { - legacyContentCollections: true, - }, }); await fixture.build(); }); diff --git a/packages/astro/test/fixtures/content-collections/src/content/config.ts b/packages/astro/test/fixtures/content-collections/src/content/config.ts index 23908e32cb6d..0c846d2a71ec 100644 --- a/packages/astro/test/fixtures/content-collections/src/content/config.ts +++ b/packages/astro/test/fixtures/content-collections/src/content/config.ts @@ -52,6 +52,8 @@ const withSymlinkedContent = defineCollection({ }), }); +const withScripts = defineCollection({}); + export const collections = { 'with-data': withData, 'with-custom-slugs': withCustomSlugs, @@ -59,4 +61,5 @@ export const collections = { 'with-union-schema': withUnionSchema, 'with-symlinked-data': withSymlinkedData, 'with-symlinked-content': withSymlinkedContent, + 'with-scripts': withScripts, }; diff --git a/packages/astro/test/fixtures/content-collections/src/pages/collections.json.js b/packages/astro/test/fixtures/content-collections/src/pages/collections.json.js index 67bafdb93e1d..2855b24ceb8d 100644 --- a/packages/astro/test/fixtures/content-collections/src/pages/collections.json.js +++ b/packages/astro/test/fixtures/content-collections/src/pages/collections.json.js @@ -3,7 +3,6 @@ import * as devalue from 'devalue'; import { stripAllRenderFn } from '../utils.js'; export async function GET() { - const withoutConfig = stripAllRenderFn(await getCollection('without-config')); const withSchemaConfig = stripAllRenderFn(await getCollection('with-schema-config')); const withSlugConfig = stripAllRenderFn(await getCollection('with-custom-slugs')); const withUnionSchema = stripAllRenderFn(await getCollection('with-union-schema')); @@ -11,6 +10,6 @@ export async function GET() { const withSymlinkedData = stripAllRenderFn(await getCollection('with-symlinked-data')); return new Response( - devalue.stringify({ withoutConfig, withSchemaConfig, withSlugConfig, withUnionSchema, withSymlinkedContent, withSymlinkedData }), + devalue.stringify({ withSchemaConfig, withSlugConfig, withUnionSchema, withSymlinkedContent, withSymlinkedData }), ); } diff --git a/packages/astro/test/fixtures/content-collections/src/pages/entries.json.js b/packages/astro/test/fixtures/content-collections/src/pages/entries.json.js index a05a9138b1d8..06484bcb25ed 100644 --- a/packages/astro/test/fixtures/content-collections/src/pages/entries.json.js +++ b/packages/astro/test/fixtures/content-collections/src/pages/entries.json.js @@ -3,7 +3,6 @@ import * as devalue from 'devalue'; import { stripRenderFn } from '../utils.js'; export async function GET() { - const columbiaWithoutConfig = stripRenderFn(await getEntryBySlug('without-config', 'columbia')); const oneWithSchemaConfig = stripRenderFn(await getEntryBySlug('with-schema-config', 'one')); const twoWithSlugConfig = stripRenderFn( await getEntryBySlug('with-custom-slugs', 'interesting-two') @@ -12,7 +11,6 @@ export async function GET() { return new Response( devalue.stringify({ - columbiaWithoutConfig, oneWithSchemaConfig, twoWithSlugConfig, postWithUnionSchema, diff --git a/packages/astro/test/fixtures/data-collections-schema/src/content/authors-without-config/Ben Holmes.yml b/packages/astro/test/fixtures/data-collections-schema/src/content/authors/Ben Holmes.yml similarity index 100% rename from packages/astro/test/fixtures/data-collections-schema/src/content/authors-without-config/Ben Holmes.yml rename to packages/astro/test/fixtures/data-collections-schema/src/content/authors/Ben Holmes.yml diff --git a/packages/astro/test/fixtures/data-collections-schema/src/content/authors-without-config/Fred K Schott.yml b/packages/astro/test/fixtures/data-collections-schema/src/content/authors/Fred K Schott.yml similarity index 100% rename from packages/astro/test/fixtures/data-collections-schema/src/content/authors-without-config/Fred K Schott.yml rename to packages/astro/test/fixtures/data-collections-schema/src/content/authors/Fred K Schott.yml diff --git a/packages/astro/test/fixtures/data-collections-schema/src/content/authors-without-config/Nate Moore.yml b/packages/astro/test/fixtures/data-collections-schema/src/content/authors/Nate Moore.yml similarity index 100% rename from packages/astro/test/fixtures/data-collections-schema/src/content/authors-without-config/Nate Moore.yml rename to packages/astro/test/fixtures/data-collections-schema/src/content/authors/Nate Moore.yml diff --git a/packages/astro/test/fixtures/data-collections-schema/src/content/config.ts b/packages/astro/test/fixtures/data-collections-schema/src/content/config.ts index fc20cd3020ac..378a3dcf24ac 100644 --- a/packages/astro/test/fixtures/data-collections-schema/src/content/config.ts +++ b/packages/astro/test/fixtures/data-collections-schema/src/content/config.ts @@ -38,4 +38,6 @@ const image = defineCollection({ }), }); -export const collections = { docs, func, image, i18n }; +const authors = defineCollection({}); + +export const collections = { docs, func, image, i18n, authors }; diff --git a/packages/astro/test/fixtures/data-collections-schema/src/pages/authors/[id].json.js b/packages/astro/test/fixtures/data-collections-schema/src/pages/authors/[id].json.js index 8d5365a2eb2d..ce06db861474 100644 --- a/packages/astro/test/fixtures/data-collections-schema/src/pages/authors/[id].json.js +++ b/packages/astro/test/fixtures/data-collections-schema/src/pages/authors/[id].json.js @@ -9,7 +9,7 @@ export function getStaticPaths() { /** @param {import('astro').APIContext} params */ export async function GET({ params }) { const { id } = params; - const author = await getEntry('authors-without-config', id); + const author = await getEntry('authors', id); if (!author) { return Response.json({ error: `Author ${id} Not found` }); } else { diff --git a/packages/astro/test/fixtures/data-collections-schema/src/pages/authors/all.json.js b/packages/astro/test/fixtures/data-collections-schema/src/pages/authors/all.json.js index 79dd8cd9dd3c..8db82375cdb7 100644 --- a/packages/astro/test/fixtures/data-collections-schema/src/pages/authors/all.json.js +++ b/packages/astro/test/fixtures/data-collections-schema/src/pages/authors/all.json.js @@ -1,6 +1,6 @@ import { getCollection } from 'astro:content'; export async function GET() { - const authors = await getCollection('authors-without-config'); + const authors = await getCollection('authors'); return Response.json(authors); } diff --git a/packages/astro/test/fixtures/data-collections/astro.config.mjs b/packages/astro/test/fixtures/data-collections/astro.config.mjs index 882e6515a67e..561ff8679c14 100644 --- a/packages/astro/test/fixtures/data-collections/astro.config.mjs +++ b/packages/astro/test/fixtures/data-collections/astro.config.mjs @@ -1,4 +1,6 @@ import { defineConfig } from 'astro/config'; // https://astro.build/config -export default defineConfig({}); +export default defineConfig({ + +}); diff --git a/packages/astro/test/fixtures/data-collections/src/content/authors-without-config/Ben Holmes.yml b/packages/astro/test/fixtures/data-collections/src/content/authors/Ben Holmes.yml similarity index 100% rename from packages/astro/test/fixtures/data-collections/src/content/authors-without-config/Ben Holmes.yml rename to packages/astro/test/fixtures/data-collections/src/content/authors/Ben Holmes.yml diff --git a/packages/astro/test/fixtures/data-collections/src/content/authors-without-config/Fred K Schott.yml b/packages/astro/test/fixtures/data-collections/src/content/authors/Fred K Schott.yml similarity index 100% rename from packages/astro/test/fixtures/data-collections/src/content/authors-without-config/Fred K Schott.yml rename to packages/astro/test/fixtures/data-collections/src/content/authors/Fred K Schott.yml diff --git a/packages/astro/test/fixtures/data-collections/src/content/authors-without-config/Nate Moore.yml b/packages/astro/test/fixtures/data-collections/src/content/authors/Nate Moore.yml similarity index 100% rename from packages/astro/test/fixtures/data-collections/src/content/authors-without-config/Nate Moore.yml rename to packages/astro/test/fixtures/data-collections/src/content/authors/Nate Moore.yml diff --git a/packages/astro/test/fixtures/data-collections/src/content/config.ts b/packages/astro/test/fixtures/data-collections/src/content/config.ts index 5f3de9423806..b41988ec7f90 100644 --- a/packages/astro/test/fixtures/data-collections/src/content/config.ts +++ b/packages/astro/test/fixtures/data-collections/src/content/config.ts @@ -17,4 +17,8 @@ const i18n = defineCollection({ }), }); -export const collections = { docs, i18n }; +const authors = defineCollection({ + type: 'data' +}); + +export const collections = { docs, i18n, authors }; diff --git a/packages/astro/test/fixtures/data-collections/src/pages/authors/[id].json.js b/packages/astro/test/fixtures/data-collections/src/pages/authors/[id].json.js index 8d5365a2eb2d..ef3cc1d231f2 100644 --- a/packages/astro/test/fixtures/data-collections/src/pages/authors/[id].json.js +++ b/packages/astro/test/fixtures/data-collections/src/pages/authors/[id].json.js @@ -1,15 +1,15 @@ -import { getEntry } from 'astro:content'; +import { getEntry, getCollection } from 'astro:content'; -const ids = ['Ben Holmes', 'Fred K Schott', 'Nate Moore']; +export async function getStaticPaths() { + const collection = await getCollection('authors'); -export function getStaticPaths() { - return ids.map((id) => ({ params: { id } })); + return collection.map(({ id }) => ({ params: { id } })); } /** @param {import('astro').APIContext} params */ export async function GET({ params }) { const { id } = params; - const author = await getEntry('authors-without-config', id); + const author = await getEntry('authors', id); if (!author) { return Response.json({ error: `Author ${id} Not found` }); } else { diff --git a/packages/astro/test/fixtures/data-collections/src/pages/authors/all.json.js b/packages/astro/test/fixtures/data-collections/src/pages/authors/all.json.js index 79dd8cd9dd3c..8db82375cdb7 100644 --- a/packages/astro/test/fixtures/data-collections/src/pages/authors/all.json.js +++ b/packages/astro/test/fixtures/data-collections/src/pages/authors/all.json.js @@ -1,6 +1,6 @@ import { getCollection } from 'astro:content'; export async function GET() { - const authors = await getCollection('authors-without-config'); + const authors = await getCollection('authors'); return Response.json(authors); } diff --git a/packages/astro/test/fixtures/legacy-content-collections/astro.config.mjs b/packages/astro/test/fixtures/legacy-content-collections/astro.config.mjs new file mode 100644 index 000000000000..b05538b001b9 --- /dev/null +++ b/packages/astro/test/fixtures/legacy-content-collections/astro.config.mjs @@ -0,0 +1,13 @@ +import mdx from '@astrojs/mdx'; +import { defineConfig } from 'astro/config'; + +// https://astro.build/config +export default defineConfig({ + integrations: [mdx()], + experimental: { + contentIntellisense: true, + }, + legacy: { + legacyContentCollections: true, + }, +}); diff --git a/packages/astro/test/fixtures/legacy-content-collections/package.json b/packages/astro/test/fixtures/legacy-content-collections/package.json new file mode 100644 index 000000000000..b95788cef770 --- /dev/null +++ b/packages/astro/test/fixtures/legacy-content-collections/package.json @@ -0,0 +1,9 @@ +{ + "name": "@test/content-collections", + "version": "0.0.0", + "private": true, + "dependencies": { + "astro": "workspace:*", + "@astrojs/mdx": "workspace:*" + } +} diff --git a/packages/astro/test/fixtures/legacy-content-collections/src/assets/the-future.jpg b/packages/astro/test/fixtures/legacy-content-collections/src/assets/the-future.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e9caf02ab6ee318cdbfbcc70ac050e6d2cd36575 GIT binary patch literal 22792 zcmafZb95!ayX}c>+qRvFlZka=+cqY)CboToiESGb+qNd2x%u69?|Xl~-D`ENu3oEG zb@#4a->&cbxB71vfGR8XT?zmO4gi3C9e{ru0C4~;JUjwC0@8m26$SPG0UaG33k&P( zjEahmj){qdg@c3h)$!Hf;o%Vz6B1HTP%N|HLPjWieIsH(R)}CEbQn%@vRNrMl$KB7FZ!JcA$_`M zT^44=KnzMM#_tLh7Er{DTg~e`Nio8-O)LWihBpM@wio*N;dC%i84MrUo`>@e7Di=z zb$c(zyI=&vH=h>kr@bv1!Ol-7EGvxXpEZTJsz|;*l77qkF?Mt!Z~ftzR`q>-^9rj< zR8lO{ZqEaJ1+Q2!H72qa^(TGdxP`68+#8pE)iICwI#l)F3Xn4}O$#YiZ@MQjSHPs< zJ(YT|tp2!0=O2J%?A6-%jD^*}%^&;~+;9mV07*8;l67~YtsC_&XQ?2L(|{%#~}>=v5`vdOET^I7_GHc0+2f*_#6G% z#_33r36f%B>|Yi8W~9~S$GMCo^e(~j?UCB5@zYNndp~W}6ZA*M{A8}YnrDTk6Yb-I zj=9FXQ54IVWq-pf2ivXHBvPrf0mH7Sc?`p9n<>*(*LVe*LEp zxGI%_Y7Av-`- zj>OoA4*Pg1Ys&6O^4awXVZEBkaQQpXI%Ho{XiY{HdrF5-64n$^hmPtJ+HnFfaOAQVl~7XHpN%lBqb7F5U90=6lm@ep*`Y8;*_DWpt)k z;*XQ>rEyBQC9%Q_8yIJQ>g}=i7d?N^zKQX{EOb=NZI>VxIlh+5EmKa#?j_g$I-HV1 zF`6<_aOg*2pYbs;`DJ;!x|td`!?j3PeYFw?sb86isFq}ge@s{UOhN2<>bdc_RWRs% z(*EnDv#S+BueGo@{a&#rRcl`hw~Vpldy;Cp7cox5i<9S0){FNqx~D|br<`dEzM6He z16;{xV!Oh4%Q97&2F@tv=bPfSDSr}Q{|k?Q0IKwPbxW};CSu7rm^CQ$#vq2;z;;<} z%&<)1*h6hu>cEIcB&L>`=4r%_`>&~Vh!;62*C6cIqW-!Y*MM)%*r81v;97hm4Ak~H~J_8lvx(BSQNojZDCDdP!;NRrt<0KR$D_gh795Fch&l$(#gKvz5i zl-ejky=oYL*oH)7q5?_m1w21<-wnXuL@w+!bY^A1(6=fVGnkErEKu<7vh_>o@W257 z(YgOsx&O3a;1G~d|E+T1s9%?lU_D;vg@|sM@V`Zpf+b^7Y|L|B9G8{hP6S}(jTQCz&-i>M|Eh+?clJ*mODV7xnU8)h+!EE@vD^IvDV2mQqotNP)}v z`*c5b7E?KDt4G4vi$voO^tF&MX~Mw$3Y3$5fS_>NU}Xj$lb*ySfQiSrRq`PctcaQpLOFfcEeL(PVS;W^gg8%&>{RZE#2`mwoklopRtIQS zucP`K-YydLlOi6tk#)qmeZmiA1<9CH@l`BBB_#$vvAqt=I~lp4{n|` zI12letCit-UoJHWy4xK?$Y|A64jnD@a!!m^Y1w)FlP)YX)F-`rx0n4S70lmav?jLm zt4jhJVMXatO7gFq<;Oo|!DL|+MM`|CeVB@}Q#LJu{FW(0MzY`GC6KekO%{6k?bZ9H zT!O>0e^`lx{#1~GuSg`)_bK6VP|=`%h*ldUmq7=7hcL00-Ki>U(nuofs0>_~kUVD>zoi*=%meZ^&ec zss*fa1&bJyxlw-hpYq}>O!!rzXbLLmxh)kyd8(PrV_6aMv^7@#AW>RxG#ihbm9y#(6glElZK@RE*l6B>+(J8-Okb{WKJfZBurIUJT6F z3IfMn1td`|Ftf`zsHa?>cowEB%Nl+CcuK1oA2#rucpoap3yBk_FFFBmsaNZId_#e4 z-RNxVBdl;=T|~0#tHNG^*f;$1bVTD7;272rc3`rmSjcc17&)rBR!AZMd}uHQ407nz zO!mIi9JNv*5dacWJ$IHhsf-byDj+o2M+9I`t*WCiEV!YnVIRc_C;(Ubq9zwA02~|~ z4B|h41i*ZW?^j3*0f~kVg+Yc&&W6b@O2NTNDy9OBMX5@~$|WvgY~uVsQ70HI*!FQb z-Ut-x9FHJs;d(=a1Y8BSQw|NTs?8U`5Eoa<%E}5bR80E8rzKH+GUi6&@VWAzoTdaD zpkp*Uo!%UvgCa^>?rwQ+@LK{UuSpOYs67rae_e|RDsJxaLWj3+MA zO&JyvRfPQIiNm>A9A9T}pX31_iZyPaG4|_z{R;}3^oP#w_dXFoo+YxHQGse5DMxsr zmQ*LcUCkhexT^56z<$W8RkELAk5SvIj+P?c|yi$;!bJ6aIK$G zg`%h>$!*oK@PeM~Jy=RGIs3Vt6510=;n!0zzD7~sGl((;P8%o+^VGyTNECR>(&gU} zZFo}`sqyvRO!zfr-E?y!VnCa2|6Y092P~N!>R3Renu#+5BwhOe``3Ue)V`o%^U<&q zqKB9ALl_itkIa=1#dRy>SwUpUl^yF2buxu5d>}>Yx8)^z684JT<#YBf^T;}_AUE3Z zEkuB2u$`que_`GNM$xgXrPCSvJW7t!XmfLpgS_1QHr?g*4i>c<%Yoen{vV*f%DFPP zARj*n;RUX*&EpJ^Knwii;1c zWpiK_dL1i=2Cj0%28`uS4zHI@=~RyEF;(KBJ?4Gi;wG(Jo?z^60%Rg_Zkm(77fVz9WcTKOV~&z}qEo2;pKgyha7681N}q;<9-EX{&kqC3}!o?xVgD_z|@hIfb%v%r44^oI3#6Ayz@%>UW>0k;KvvsOwH1U9X`YAo%MLV z(yh3EF>1bXydu10mwaqWVm9fndrIAjmSbxmvAAfSV~GKuc+9oL2pI{RtMpPsZwRgS zj=-#NpvLPYG?riPnqKw?>rXn;d#>ngp~eRo*Qo?7OrIE>aL40H;aCM5_yyD7?ZV__ z!;poCHR55nZad`#xByX$@&x%RTj0L-XIOD-Perd)=F92Cvh2bWwPc(&p-o!UAP}GQqDP4&!z`R-Q5-&`K^)shU$~g2Ki^3j-T_8=Y}I3Kh_NIh9)fa_@j$S zqLlGSP1k&wVH#=^KcXr&Ao}hp9{%=^RX_0NUVcq=0$a7>Q~6$`=(-vp>r6fk9fW9B zeylG6Wul=k1>v1pr*-3|{!8uci5eyCzWFn7-5t@x`nR_vM+JwI^+K=1+E4#UcH|3; zGNU6iXES*!P38qxo~lrx4%#zrv%F(-^%b$uS{s#A{ho!&CFu_}_@1GvmwmGU=*oB= zBMjId9g0=Yipd}Or;QbAy3V|>a87e7R>C*uCT?zyMgnjJHYtf(L%f*aTgYU=F!|0B4iG=}evrVuV4$1+x|2J60^;5?%g^!W=}9SJ5_x zPr;a4R+=g=>AD{I3u$YTasyw^D$S!yug_mzCI>>tdnxZ*(>|c~DRhUt{caUOyw9sV ziQh*{Zp)^koqJu+T;C$H?M|C(EF<}q$(%V{NvMW7A3q?6^>e4E`%JwtQYPLdrvCvJ z7${NoV{2y@e5UjJM_1f5j@=$Qf6i30A~!&Kju9NFt!|uTZ1**+7<+*aR_V$NRcx1@ zE1}V^;*&x^iFrtHk^Dr3K6HM0e{xwJ2i;>gdumo&;0laYFZ1^N18mi%DzzH^u}u_B zurISI7nWXhre`=iTFEXZ(3)Sk zkkLzqV|EQkO^v9O2FeU3Qz@-Nu=(ke9bIZ+KJ(GC|`P}h0HZq;&3}~ z!{(6wU~yjQQ{O=+amMQtjFI?c8|C_OZRrR3@0aJlrS$olrgBWobD5eC)RM93rjaZ3 zGd81ri*{2!t5szROn16>wVsdejCDc+X{!wAptjnRe}Lqfk|x);XsuIs#6N9WHnQJ^ zh2v;<9Y#CRqeHl*ByqG2Ew=3XW7n`l@sQU&3bonQp1Eadhgr9hSLm*bWudt$F&334=^Ztle;DO7rp+ z%Q|-QUX71wmP{$f&goK?t1s}63~o0xoi*KIR4#RfYTt$j#(&0{XH2z+v<=1~0cmEJ z4@50!CvWnudB}~<-K=c3E8~$jh~MsMm-IztL4p=g++dWaM-RGKVbxc z_7;X8!x~l0Wo5DMHY>?epk+s-nortcpnexq^X9n267~894=rAVX}9?f|0gnp^f9W^ zEZWPiMeKamlb(Thm5O@lpc;BG7~>;vy{7@Mz8r0JdAml+s*XC)$^4UP)qIV?7Wt}l zF2>4rlOTeuGq-ggFUfNCVwBi)r6XPcms4==%u2V0KjSYVubDzEQN1(!^)Y-dVyA;}`e~Lc=tcLyH zi=8ogltOHg?y^5XI@Jx6Zn&k;2Vf6yu>YNsqEGe$*XVJm#xqC=_xrr&%gT;S7Lp?C|N>Q6uK_eS9mnKyiCT!)blN_t zd?U!&QdaV77u)Ec@|Nr%g1%`FldEmC-e8V+B-)Kh1EvQ zgy{M0iQ$p~C0+!nY`(eWD`s!L*_(0J2QZ1ui4@@dW0ekU}IH^PDLJa47#c*dP^7DSf^;@C| z`Z%~`@07*f35s;`<9c!J|El87bBFu~7~JtEgqoH4ixOOODDQ4_ZKKe9vlp^#84wUa z`g=(FwH)ugYTb`>9N*?P-Qcn(eYZiUtn8k+Q#PiiWaTJvj-?*a1`@xwm8-3|~Q+wo$ z&R;XcQoQ)7+mLo)2Und{mOVp_oyHrG7&x>{M6FF2woa<&o+w^Jt>NulyZNGL?Y$Rw zp9I9gMAJUD4`y!3hOgZ;icT36a-UZd#S&~>5!ab^qb*%WK^8F2OGf3O1>vwLpf7l_|o;7i;;6sJM~H_@2xhlktRPlolJ#z zeWEOD{-rT$J0m|bPggBEs!fPT(00K$`&+`dpCf*6aP7TABtc(HfI z7S2&TetY{SJz?0idq}f61}t)R<*j)A7(69=iMllkdHB{jU;bI--}upgKj+u~-2bQg zTgFbl1PFG~y#4GjYY1ND`N`Eui60B|%i2y`}46=PI#=b*%TQg+qC{`p%BF_WY{ zNLH8NqJ{wq4w2t?;%dt3A^+o+;l6>LW_T8xRT;1gl^OeL&K-YyF%UMex^9Q9h|ldx ztq%=g4qVko=)F$*l`j*JLCRN&$nTMN`Dps#!y#T3@PZo<1Rnekknj8>HXuG`3X>?K z9up$$eD;=A3)yhjmQZkFStxDoNwvSt{>+RstqDP{x}GndU~dFgoQ>IVkC&}2ACS-_ zFzcl5@QOvyBguSd`kUXlTS*S|_u#O%WOmWtLCn9{QHcmb1M<02OSErbNp?AF-d=jS zimYK1=g(fNpC2bAC!Sd?K-;le_+(VFawfrJ&r3Oy+A9?JlY9vO(wLkN^BKn2iokKV z<}|RR1oeKq?Ua?b#?vEr@7X{9@aO_)%eoe0-^kcTOO!>pxhbXMF)?quA^JrGO z#*XJDw#P@HSt;{<@+$_d0$uCl)!mBO2cTmd;-cf@@xJxgYodm=@BVUy z@zVSXXGe4TPI+mXg*C>dnw=~OD2mY|!7=mT`fl{g9!`;n{sGkgJRHsS{fc-__4EKW z;SL$HM}{)M=)=;cr*lHkC9im#V8NFH8FL5?>Cvdb08T$liXMFAIX`}6z$1}{pwzH5p*{vt zeU5UmgS)L4y`@7T$$2GQU`>tGJky@I8w{l$s`d5_c!@H0${!qca;#AGLqBXV^v-XW zb?_(j>;%|Z*GqPBE4c%B<>=p`vEi(jox7Bdh`DL_UH^zo{pHbZXREeqFT!^x3aY#0 zXA>FtjA7Z-G?VxNtmbHPPwn4KHyx@SY>yA~A3QHcb5^v*1x6%n0`m;j=ZAHjm7y95 zSnmzsYTb>N2S~L{gJX%1ifycE+S^lh+33oC?wjp!eHWV@$Jho^;cZCmJc)%I{sTn+ z3dTUC#-?sBoDQs}KZwPm49v7jpE4hydsP1wd6Cs8z~V;44!(%^{@@wnRpX-;U}-7k zbT7q7jrGf7GmT7e-CryAU`MM;4(yZGktEm1n|bVWvcbDmVNgPztJHyZodS|m6s;d@ zT*9h-h9KD5xdFm{Oq^;N)8Ye56L8_*tg-~HY~3)d9`L?=JQpU5-@92&#t^@_erS08 zsZ0Skc{DdqXiwV@A?tE}cOP9+u|4IVu|wqA28F}7qS9jdAWV4`Y->&DU_^EMp~UmS z1h+jBf4s&rc-$Pz(ya#_!}lTm62>oXJy@L11^N*~G$Pk1Juc>K@I*n#qtp9@EK3@M zOCWUQt3j|Sk|eJzKH@~ z9HKo$>zT#&PjOx;$%G(K7JGLdVoUhRpqkv^0a!PRo~f?=UBS|S5J0W@L?>YR64QYU zenO~70CjfldvBWHM_N&td*7N})H4yl@ei<6>Yo?aX-fhK!(Ed;zR$aR(dwVVl2aH$ z78UK2#ff65<;h8o0!wkiNLhx(;Bc$KDNBSWh3CnBS8?234%%{$%G{96rkt;U3g z_p{=BLaea*AVjjHP&sjlHO4cFdIT<2AyI;xPa+i;&A*~*r8>DM7iMb9$IIa#fbwA2 zh%XnN4Vvhu`7qjkcGu(zq<`UMP*qnskQurPS{H-xS?tH$PLmXU6&InTUdt|T|`M5Gy z{yAfK1tE~=h{)7Jy9$}tJA2MfJ_Uf@2iPON_J4qjg#f6)&xwj^FpPFE==oMNlM?XtPPuLV z@i}QpQfu6CRW97wydc=u3K;(BAh^t5T4WdvbOjb7sKMvk&Krl#3D(OFz%ztP@P0%` zRonO)9UkbxS(~=bt*~N=FzIFgDbx$XU`myyz>)XGvNvf0d{!E#Xs}n^wxc8~0sua9 ztNmZuqZ_nGVk!taC@_Fb6!xHvudwlPrPU#kX)&)^-u8b!FS*dDHx0kpdzi-SkIHF} z-Yh$z;=B{QE$FyNk&)?OwAEO+lzB*WatgWxRTaVh;0lHCFLfqsXAPcMv=2%lvNN@h z`UxVO3qU9c;;%WzI212h_=&n3+4H{0IJ$@t-dH`NwVF+xq%emElBGk~hRG@~CMRkE z*?h}Xtsf}P)_|N!6ku2CVK?ncwFR7aTurWXQy;er_kLdUku7rIVHtzh4%7y%2C~gy zD?!dtSyAT6{-Ce!V}mgZ+enPb#6Yg9ZA($=+9w12b{%n%+NZP}Ib8nOk@&&V)ZUU2 zuy5l~j}DG%YX{b@mqE_d(&Q_k0zI9zYDjhY%rQNTyUd=#_*PRY=~=)pDZ#cWu*5|2 zm~$N7JkNcQsc?QCiTh?h$Dl5tL!pD#B#oLUgBE+h6#ghr2&HU%vA6&ho8VFm?u^VG z7fugoKQ{5m3<*_7r1F(|JR3nJMT2m3uk2q8;dMxlhJ+R4yXqHE-{vnOOpZdb)w_wh z&f`W18)HNXrhnY$fjl9wWCU7|>=X$Zv&B;LdKIle7+oQq?JTs{N7}!&4l;nddb7kx zJyrK#cbITHE4X8pYZ!q%#Z-(bAq2RJx)VVwr~slvy$mQynx98LT1x5Ru#;QT^V-LnjD)!G)_;x0!GQ%;KfMoKKck!wLQ6 zd9`AUqISWEV)^NFxrsX|evpB9b%Vj8q7sY*?pEC`31*AWtYRBwk1iz~XNm6DtNvle z`{zP*v3ICL#5EaqmN+ToIpPehmI=F7rbRIWWgcbzW)9+~f-R0%b#XtZw3$)X=5F?~ zZD{x~iKR4X71!QPrDS_Q_91g*m0nz+K5bablmOYot9*G}XFqQzgQiJ}__m)HZyzH9 zHO6R<$(T#?7{20LB>7GzFxFS5k;zPt8#(L2KGKE02-Bnzqsu*q((NK9$;;(A|i?PJqLJSTwMZTiQAsahjj6OEo&811OiSUH74=XXqok}y&( zK??r>JvIgxp4&y==nhPfBA2PwYmj1DTPgq80iLlg+6wl$g9Q?U;`YIy`v|sRFXf9G z{{bxL*}A1*SL_EN=O{Grr&|Po7&)+s(D5)a1MhsyNN)1lOxDN^?`)qWmlc)L8Yb2J z#rx65G!g6>dK4aFP%7U7A9Uy71_oI`q;Nmkq`*&$dl+!f0`>bLkm0&5((WX9G$5Gn z)k_Wm!cZ{ccBtfk2An*c+fL&%x!FKWH2bvT#hmNKIJl5++!5~X*)@pdJquD>@yvqw zOY#OLRI1>RQ$t>b<*e&`F!sg&3xqp08^hPS6QMxk_=_%X}44n@q%>6pcTd)&u z6kl&eb970sE@;kfd!X2DXgP09lmDFsLZUw%jWHj#RW-PQ z-sNod1__!(X!ma#;$BNk33bokD(BWWvQW}~ZS!8ih@Hu@_t*#o$9OYeaH0s)Jt@+R zV24@Nullo#OQawoir;Re(aK@&MRUY@co&mL3wHI6J(bhfF9b*(cL|()DqUBDm)oBCP?x^_b=C1QUwE0FmkFWsvYPuR712*XSn&g}1%1Owi@_1j_0(rW{z%%c@0Xss>w+ zwv(v~qmh!j^$6A5AIC9Kre7V{Xk|Iqwev0pz@_#|K+jXI@6ZV@5tL^>s59?qy#7fR zmzu{ky|9UjkDjmF_0+0lx`H^)mGW%!!u<2)qB06IlLmue>4bM;6Vl2bT+($i}E zv);WTg)CkY6z*r!4P)iVv=b0<=fbW1VkBO|hd;}T=dcS8<|r*FeG~tLunAL~2U(sI z`;T9Fyx#sM?=5p_3W0bi5 zXp%&g*8WvdcZ>aycRI!hUou>Nc-A@_HZ5L!6E11cW<<{U(5$o`?KgeKWz-;X4*oLf zG^k&u{40$O`F{%~!2oDv|8eMF{=Bdrwf}a0?~e3;6W8BR%YOF;<5i^MxU@Et3SojB zDyZZY?+;ZI!p4P^uqGgup{?eI4HJrXkQ02&+Kt{pCG5&rqV)gjatUvn8sredsDy8R zLBb1dFHyt&bzA0DGm|ybf*c4_k>)$mk>QMP zOR2KhY!ngr7{e`Zf!2us7iQPsXMtBn^DBiiTLI}*TQ8X52YpV*WADz2md?9@;Pb;3 zv7CO~AN1+gYZ8`=WB2*}NJlstq%{xsADuI<>E7F~Y5xHJma0T>Dj6vkv;+dgiibr6 zb4#Vx{D!+QGOF`0YbFelh1!;f*5EpQGt>+9{_?ZeWG?{z5ew81Xn};?00<;E{bl|p z;U+)XwCLw)0XK5=%YT3XK1_3=ds%{wG zqJMc|AH1`d^{I$d%k&OP{soQHV=}-hK9Oh`)7NNrJREC}XV@~E-Xr*DXp>Lr$)W0< zeisL#z6X1Sb@t3h-2POWnYSS)hIQZ$w(fG-Og_00BOfqgTAsjIce;Xa$UdBe{awfqaF*Yo5=4(uh0Tf z_P}m1V1gmp1g58WxN+$fV4Ms-J21IuR7vr@PxFM2TKP99~U!7e}ZhTw`;Y#l$Y z5V2!0$rnZ;r{X%%F6U4Dk5GSLOMJlWQ|u>{?4DpjS?_@v#C=uMwYTNe0>K(qmcl)G z=GhK$Y$iX2q%zzgW~h)(YLZ(yY{-gCWVe>3dDe&z*w%uxfUh?Q&Y8ukgP4jkK8gd! zWCdZ`Lo|j_TC1doD^7#o*h}Dpe^p8&H|Y`iKD|-=Nz|~ND;55o9IrTGvF;DUKAmmx z9#01N(A=|w1UJdYi(L0XuUH64|1Chg!r+IKwu>HE`X0v~IG@LBkk6W?V}QhDw^#d?02>>vmIA5w zQ~)`(gMN(}B#rBRM{9mgp8)-9NpTsLzENb<^0!RTmStYtO1 z?M_YqqVojl3hGy6zIXkN?HQ=Rdz3f0O{kDc%v>iDl<*g?ei}<_wDzc&p{#cE;5SUF z4x2&Ea4MdHpkx?S_2bq_uNE)Kccnk%A*prVT#V;(a}2o%k8;&Gh9FnE!F=>v_b}02 zfoJmGpMhSAVb7@^LZ+^}ms@>V%rW!};q2Ct|Lb$ zn%X-ip613PfK1KAnxXGA%R7!UJf3A1rgkQ^VrM^cH51hUlFK}Sm)=dt{Vjz~5bbE6 z@d5i3tw`cobO@i1zE$}Wh3-l)&~*A6B56+e;#v0DIwLEm!U4~aUT*D2wSEbXHWYB1 zpq8sWP;`8rL}ihz;0&^qc>Q@12(&JBzA|}}XV|clo};B|F&LyqY+W~g6+U_D6vGT& zj!l__B$xqoT#ihBXplb<=P1_H>xn}!8LvQWhc*#(emhm@ckPQ+yrCwI?OfX@^w$zm z$l$g|PNH5j`lZ0V+}gn7z1CQtUKnE}r`C)M{z0TtGoqNqz-L+Am8&mbpL*B-VD-*s z)nrhHVr$f%Y9>=P-W%9>hlFMN=q>p6kTz$uJhq3$K1--x(^m66+~nY=#JZ zjoR1{G${}Szu)GGOss2eXlb~bbgRQEGk2j&$oOawbQseSlF7k<}5PbAni5!{3m~t6;Z+lJS55Sa1 zf<%weYoUKu(rT}=tM*wGQb_I>m6Mifi%Y1s6>%4zp6^+HldN5bIjEn$YnS_dpmxB3 zO4Xu$=W?9x3$gXdTFgA}!8JeHC{Lf1=W z0446N&w#z9G zzK9-Fgp61eM&IJ_*X$ZOL%qg))6^iAr!s%CZFi>+$$5X{dGbE#CO#z-Pee}fR z^qbsmVP5iI!NdysweeN%(l?wEvWXUb@P$0jUhSXHtl{Mh$2;h`%aUnWIjlVX#UJJl z2$cco=jfI;AE&qSto$~e8Jextn#si*Ncm_@MYoROw++z?G5TyWNv$=(#v^Z@8Ch1E z@_CYeTOyE9BCXGnQiU-P2H#}V2wW+gqb){qHwz#jB_%4x6am+h9q^#W0M+g>@*Lv&|6~1n<%s`e&+zg&9*+; zK~w%sx#uy8!TO{bV}Kt*jes*6gwkFiZQ$3*+6 zb^o(;YU~;ZkU;a); z#*9XQ5AxZl8KM_%7(j;JY*8c_Ag9aOd{k{TZv{7H1M7n7s9khoWmbdy`XlU{qh)A{(3QDo8P}61zv?^*{R;Nk4`v(A`MJ^Cj$$9B_3>lH(T2cbE zi*6rtrl2fVJ6)B83R-_}=Xyeem$-NBZ_S@EKR^$44EoM!=a>p}Z1ZzwtjLS6JLe`0 zjV|$o@(g;qUvN8XEU7A^Nb^T`rWls1zGa3c=q!s9LLJ%wjWc21giz+e&|pZD&gdl8 zXhAxpLYWur5kCw?M@vc#D@N-+hfVsX<9r~VAdfx7j2m~gSm4~Wh?jfzZs0ffle{M$ zj5H$j(jT9Kc<>R*{d>n%%iG{$4n$wQ%_nPLgaQs*(GQ1Lt^UGj6v|%PyCPVN_?{V8seAEv|=I4HVL>73Xv0{i*CYd z2<22%%KQQ>AjGDkb9Gd3T;uE72GSr(1%^scpVEO+(;_u}So(XK>3L8cqNk9^E7z0X zhZE1FT8M2zIG77unBz5gt8j&gz^`U=0`y?8ogM`;hO8;f9eue~#JXDZsEz9258W;< zD&RS&74qEEGvwsLXbi4}$Smm(Y}2((l@}k+b2_o)ZfrZ)J=iXN%FTba&iEHKl+*!P za^pN~$OQnv1^00LiOnK}vAyL8-~#+W9dAKdzk3E)429OF>yW&f$j}_rkA!sbS*{;? zWz8GOs0I7%-7s^Sg86F5OP+I5Yp8LW^9ZX@o9-ewgR|xFciky*w8Ne4tHlZhEKEI# zkau-O0zXRC;Gj3eV&T2#4aoTNcamPgAT;7p2wlWM0 zoE|yJeoXc&M9A$^W~#h=EGuYxb8`ex1lWS=i*sT4i}-h#7krQMFa>$pY{2@R2&v{@ zZal^Y9B4)BYUb59ahWOPFTl^-cR7U1ShxPTUVn3_fVbijE>d;$_r1&hAXuFy#;Y7O zI2f$Z_-yJwnN?du#q~ZjxOAc_gI>6iW|p(oI`{N9GIv9a$MdB8n4S(@B3LGqmKtv= zX#o9{CQi4>*#Iw94zzA;jl0ephDxTwa5>Xqy(WwllXs0Srw0VJHskY*)HV$aDBFB(MX-W;ky$nLP81FU z8u(N*!Xm+K7Fx4?{<6_PYNAiL^BQvj_CPwBo#->*e&f^qwA*GAma`90Tm>9#Ko%L2DitC zVjm*G)cCI6+?;_&5X@w#Ro_kZS%@2+;>PgBruk(+CD`v+0Oip z;@y?Paow?R?Te=G1W%ip@+>9Is!|r*QW#Xw6gan>z0+~2HRdJgQlZ&g!2&y>MFaUf z*O=FkksA8S+O*lO|1t!Mn^?d7%o8gSQfTjIDkHn6xM9n|oM)P!W_m;x~w?Obcv;ATu}SDq4a{qBsest1tJ5Wr+FRb4K=2VhkdF2d zDOxvmt_WSYb_Z-h5;Zi^rOz!JGo(F_=y;IEh0&xUSYgAYdkmFsuU3R$f_qIhrlnA# zc6d(EAd|G~T0Bexd{N6_R2&Z9e1P zs6Jx&$mYrU9ZtdZvk+BGt~&fg`{LbiG5#d50$bpxdHge-qa`VoH@vhL=dH1hLOEmz zPMfhXp~IO60^PdMw2B+TS%bX(9tfy*DY9vVYu3UtCEKMjm6NG&oj6fnMW0DkNYdr2 z@NyJX?*8aID2Q^?359TLX>~hfw2-(LndQzBF2!|1kr_GOA$f%@ZQb}xBVvybI6yU$ zST9o~=iD zA#pB%FMz6A^U(A;rj=UHa%hYfNA_d$p){DBSQ&tDsbQE?F0~JtOB}wQNP#sTAST)T z^h_$*aNZRr{{zNuY9C6k%0LoOU3|J z*HpKx8OC}a7lAnh3a&7tLZs?2-|#a+ZlDN#LiG-<!tWW3gl9}_MUlQ3qq3WoKC?7wV@4i?5pfe4Wte?P|;i5m~ z#KJmcx=F*-Z=shMj}G`l2Gq!j?&r36p@xNWX4gmm$fCkSFcJK&z!)YM(NF77gO=E~ zuPGt-GfbhK#KIDsb~SYr{R*>#w-wI>MG>=cnb4kHL>ZWC^0zp|)=2Z*8sTSBJHp9g zkhp0F5!bIxV*sf7X;yTl3gM2i^tFaX-y?_=wk~_UH7~O?SLP7(iMQlD%cdW5&14%` zz9Cdh>%!t)JRYZ+!6mWh7PcQWavQY_SVFMrIKTn=u?2I2QLRLHy@fxUp%wExPgu3J zVigpoRsG_-g3m?b(OgMxs*@-D13B$h@q!7E>;jgDl(fp0Xjwc-&9-ewJw$$WqUU zqcBHuhfD@Cwlo)IUJ(wU0HBnuVv)35ct@Rtj*P%Y2Hp2?SGC&tak8FL{E0zyr;Y+0 zF>m7j)$e_Z(6D1y)cH{cvhah231$eEgVAdy`KX)G*eqexjVAq7M3Ao~ZMYCr_o}Rm z4Z0>je`K&M^Op5bk`qi*d8DPX`Pw4l7qwkH<47PaadshD@wy^Xzo8mCOv>fu`ig6T z5_9-(njOZisj?6z-5wt@NVyxy2kk9?eTD*bc9&b%0rKGI?F)Ygn;afW6dRd*2^R7f zPzEN8d2rN4=H|V|XM(14^oe$1n^X7BKM_(Y=v{St7QF5 z5?jSTZ4f9j{*>vQHFZSpq3@X>rF}AO;=g;=MQq|Oj?#-Q6^)wPw{2Jktt?ft9|u>d zNlGGqxLcDcffqEi9IwNIwW6sL{G41!Zf4c*fiAn5zhvlg)>yyeFEc1j=Cb^pc-0&8 zFPDDMj(&KafQbaSnRF)MApz`ZV45QI-S88CHX*?uvIRM=gV?)bZs&i| zt7g}6JbjKJ471sYoGa#>9Ae6KFe73F=kG$G1Gr)DFqfp}IX@t!;aD?BNC3Otph!vh|V zKm;R3n;g(tY`nnEC~Cnd@@4{yO51NBJY+%K1Q-?VrRB=zw4z+l_+MA~A{~Mro*^%^ z7inzdJ^_C1%NC!!f8ACE{zT|kpiCu|aiQL0zxg>hc!|zEBAYQN)!eNCl}uCu>eWH& zq#&S%Y}e3xy#85*?+g!e?CGg_W>TDq{R+) z%LHn(iDz1Zb%k+qnX6*G=JM)tZwK~?bx!@_w?%o+%tH8k7?wB>?|Eu9@Tg8Z7Y574X26wR*4+lbM99Pz|VUR9@m7EshZ|lAP8r zCp|ZFUD@V5`1b>nYek`=D7PVH;MTa;iA@Tss=Rb=9;LafKAuOs0~KlI`ub*xPva8y zvusa9t#bE?(?R82YDuo;i^bEW#Cx43AsS83H5xOVsVZbI=SaLZqNY)4domq@bq7#G zv2Lz42arb&X$ZhmI$+Od?o~-bxkn*2)x)Vyv7oN5SFUxgBIbQMLGJ;3s)OS9#1{0- z{{U(w)<1B+?aXTuy38rpekUz4yX)^8uAU$EV(RgkPA`4@PQHoF%XOyr#B0(DD`$wMmzujR;4$+S3=JWd z&PUXKyvH;hD9llHgZqXXccM01E$nLOVjW!r6V~-DTID544$@^7U97{c&7bdr8sLC# zyJiJ@^_X7kr~XR|CTl+xIthQ1!nN)2o$}o7~3K78tFw2{-)_qeZt$avM4cQtrg{fKu~}H4gkP* zpX9qDoE$gaGVQ^Bu94gi82X(hCq_W3s-9{Zgauk1jt^N@oxzYiI?TRU()+yX zX#}o@v%fD%)SnG|)C4RVTgx`t((4eQ!Wqrv@olFkBfjJf!Azx^A=UkGx5Aes8_Bh7!Z8t z&o>-Lb>ASNfM+->Q?(DOKsjfV+{H_yrh!j89;74m!3Z7_&+ka~Rrfpp0K`?oIV|>K zU(@ar`;Oo4Q)iFDY=iyzW{CW7b@cjAfc?#1U(|L;{`*gW{j=+R zGwFRzlb=t+U*{7?^K)cvI?u#D&&2x8pDfk&o4ig@|HJ?`5dZ-L0t5sE1p@>E0{{R3 z009635g{=H5E4NkQDJctB7va| z<&-u+f+Q#^GnFcGIh^4~5#cE2E{6mu4H8rFiM5oKgd9!joNyDczu9}!@|?i#g<-MH zHH@W9aL!Z4e@Nys8Nx3N9aEfKYm+dEy$}En7)O$_-~Rw#&SxSeG!~wj$jEV6AdY6m z3vd)|#536(Hx=POqGlLvZg?RKiGYPN-_!Gva0oaNITITuyH|XV5EH-=Il9S~;XE*g zQNZj$VN#eKI-T_5cGPUQ#!igJK5x{RmvT<|RLud!Izs2HP=^Qm>YwFtG%wgaq5uu2fOUN-iLI zQysD-s-RJL2pI}tY8}+(C9^RfsOGNLVt zwu{8J>Q5!8jgfm?DzDp;l{`=ofQz8fH&*Cy&k3j3A%9d)o6!{LizbDO^7`=26sgPw z2vHIgsZOX(bO?(nlxh_KwfO2#5`$1=?xHe+Dy2%3{25m%%Ty;BM&5{BADhv7s4h2v zi@Y-vAz~R|@A?pelq91)KC0V=scI-Yx&=1r)=t~Da-~64LQu$A8X$7~O4LA7UA2>{(VVHs6+ARkm?N*EBzEqYZf=Q|gyU3IR3KqV(o^g*9FS^l zmL|!cGIfqxmZdIT}s3K2X$$?W90<+5$c3m4@+iwwh4{#?M5kgH6s zCQ!rXSB4gbtpR8p(P`SMy;SeeCxSrRAV{*-R=%snF%Y6|QF}1{XdTy#>`&=5pYnAY zh6Xe0{8tW*r@9z8E!$UD67Ra!0D%MB?1Y-ZQbzIFU-vgu2oW|=p+YJYW%6*mZ9 zChn#dEm}>~_@@-HU z_?)o8^>QB#hT6N#dAQ2)03K2FvX{GP9cZ+T$vp)E6tDv>s&Z(qMu?HNUW?H|T2COM z+|YlR)1t(GBwJ4CEz>tn-?Dk~eHInHQQx|ril{aP)DgOIdv{ui6~8n{3PJ=Tvi%?unnOJ0`R@zE0gcZpb)wPxCrJ*eEJMT7sDz#yH}MMA`b z9YQS+5J>}gPIUln8a7u=!;~6HhKT08GS@d(KI>(Rwo#N(MnuVsfdNQC!AL-&;mK;~ zr8`4f9C}lKrzFg9>O_5(B|?%QfdqaQy-lH5ZXwWXDb_-Q7RVZ}6@bBTSlgULZph1aUzYDk^_vPDmk%00=;WM?#)F)6GVp5%P~^hzQf#6c}AC z34=(QTju;9!ozSCrqvc$Zq)ahbXd1HHP`U7O=H8HbM=I zqXO$wIjv1vn_#uHZi}1EYHu*LwHGjpiBzNQ(*jc0rOOQKh$9V{w1FbdgicNKPHlG?_h9f!LJR zx+^o?0Pd=5Qk>vQ4+KI0M>VEJkZcQ8Gz#`bf;oDiB8coIV2GDa(4ALJ)`>Kt!@_}A zF9)jd;>9((Xr2jL3erLX5p1TkL=;*->Jh^n)`b#JK1;(qiY!H?7M@1w%qN*erUfMi z(Eyyqp?GuE5g+c0Q$@%{&D9{SP1q8(k{~oFbjgpp(g+~dvVZ|bQWLRxBI0wEB?dU} z?wf{0)@Yp9y3LsD1J;OPVsD|or2fg6NBf8;ppVHxp{&zuuLll)yZ->Ee(AV+M1k)p zIRdJoT^6Xy5S0Z*5q2gSA_RTMG{(f3mpZ+I6T0zwFBI|%#XOgadM_08UL(1$72MZ| z?rX$%HLRV=l7nRi0H_wFsB;Tjd9M+x#0cVaMaA3&HwEth03QDUvTwt*T$B9i`9J`h zR};#K)d{RIve8sUO426BBEYo5u|gedq*1Amu=;)D6j@z`+;p=_gre#U-?5JZjh1{R?U4ce+FAn!3A zqpnb*GBOsfYfw&ySgjqD1u9ct0@97sn<@g+JD|?_k;O$kBQq*hQQ*VHEb0?p*NGer z^2~EV{M3V0Bc4-~jLUij9X+ywqca;VC}EYP_Twrtg$StQ8SbGFg)6@_&xj-DuTg)Z zW7_*4=VUaFsF}`TYAabPPXH@YzEP1wEnU@2Z@~(j5TQp2QIv6<+m80%&EDz15XWE3 z-rrx{10qF72rBA0ExOex6+}-Z0!k<-84IOFwBaDgqcj>*3e{owl_=b|4F!+9TX zst#+cLG8h*NK{l*RN$O~ftK7`thk#i0F%%E0FfCqNyYi=O`LR5 zMHQu&*IC!Li$$Ylk4K`5lM+iwO?EEyy=+Uk&fh=v(y&TN$JAO@wpo2Qs#!zlrF1=B zyOF&Tp6nu@L+M<6=%U!;S|m8N^P*+`HKOE~I;|H&)%3<4_$MX8{(lS;e0iG~_b)>% zqb7Q2WfW0e5QCRE5`=pUeKtt=$SrQdPxdZ6`#PKD4NE zqD{RMp~=5b#{U3cfpPLiSf>4$)4cco3OP2SkwV~ld=$#bwXGP+)0{ku!#1xoYHyQd zqVQdNob@8vlChFi*m}{PrT+k0Kh^sSkC9-F*(Z`5{{Z{UT6`O9s%0Z#g3!z9PMFtn z&D7CuPnw~-(y`IOdO1;drsc*=X+{hbQApY)Ozu8D2#j)!R~Zy{#k!~NL1*C4MGpq= zF}u=+h4cIgdK4s5)n-EOBqUKqtD_!kq4Gy0h0d*OwfP%mulW}`C4(g?aekj7UUYbofnuD5GjEYT3Gt?LWKVPBP>E#*!A+ zT38g<2G!1Z;k#zX7PT2))Nv`9PUZ>pnv-y6;*0@c3 z;N1NW5mtRkW%-ITeoNenQRUk=8;j8{nj+5YVPn=p-(eKmI77hD@RH$H6Y&1zF)@baZ!Q`Mjm&?mwyGJd46h zoSZBw(aj-cuW}i?^AU7zLy|*xrsRoD@+SL|coql4_9Md6YIq{3iu;b_mI;yV?nCxG zMfWdanHtTKm5f{>J<4QovRO={gnds!QcWHjT(VMb>hM_(<<@!fBOY9`#>X)@rES?M z#!1$m7^xeEShQSOpCU=M!L^PorZ~2kqUhTE&f|03(niLzByw#{qH#-%5yM2X)A&1& zfyPXXJkO`(ZEDfA`3?=68JeRb92**I_#p5%w%DHLL8pJojV1SCe;?SA_xA7oNv*Mp z^T`8a^Abq!lW}%!M;c#E^jlH$cq3{}*ZKJyUPlFKEQxv>Q#Qofidy=QM%kJ-G02O% zCBaP+@}b>T9v^>=5Yl{=FFW@df9?MOld!X8-V9r`Se|TptuIRGv82$F{CB5u=|^T$ z8f=a(%Cd?m*lhJStQ%0$DHB3Q#7;ED5~<+NeKX`_Ry*<&Xvvd0XY#H;CG;^5NoJOu z5_h5-u{2r`^v$y(l^f9)QAXwG*Ih}X*Wj}HY3brss`5Ted7bRBWsW6jV`x&+?V*;7 zMXxa=$EBjtWtLfNwp%Tk(!VVfIzwqjE4$D3Eh=y1mek8k`95^ES;>{`VTj5TM6x7N z6@(&5bXWRntz?~zt@wSv;SzW+%*Kg{k4vJ{L{+*J2O81cU|vH_b}E)de#2JE=&$q$ zqO{|oq|J>xzxYx2=ubWvJST??YUb!g+ItL$wWVnRZ_9t(e&bl#Vzp;e_6QA1yX giq|Gbr4^$y_?D}o2z=*>mGZ-~a#s literal 0 HcmV?d00001 diff --git a/packages/astro/test/fixtures/legacy-content-collections/src/components/ScriptCompA.astro b/packages/astro/test/fixtures/legacy-content-collections/src/components/ScriptCompA.astro new file mode 100644 index 000000000000..8b1e7dff1638 --- /dev/null +++ b/packages/astro/test/fixtures/legacy-content-collections/src/components/ScriptCompA.astro @@ -0,0 +1 @@ + diff --git a/packages/astro/test/fixtures/legacy-content-collections/src/components/ScriptCompB.astro b/packages/astro/test/fixtures/legacy-content-collections/src/components/ScriptCompB.astro new file mode 100644 index 000000000000..e133a2f51895 --- /dev/null +++ b/packages/astro/test/fixtures/legacy-content-collections/src/components/ScriptCompB.astro @@ -0,0 +1 @@ + diff --git a/packages/astro/test/fixtures/legacy-content-collections/src/content/config.ts b/packages/astro/test/fixtures/legacy-content-collections/src/content/config.ts new file mode 100644 index 000000000000..23908e32cb6d --- /dev/null +++ b/packages/astro/test/fixtures/legacy-content-collections/src/content/config.ts @@ -0,0 +1,62 @@ +import { defineCollection, z } from 'astro:content'; + +const withData = defineCollection({ + type: 'data', + schema: z.object({ + title: z.string(), + }), +}); + +const withCustomSlugs = defineCollection({ + // Ensure schema passes even when `slug` is present + schema: z.object({}).strict(), +}); + +const withSchemaConfig = defineCollection({ + schema: z.object({ + title: z.string(), + isDraft: z.boolean().default(false), + lang: z.enum(['en', 'fr', 'es']).default('en'), + publishedAt: z.date().transform((val) => new Date(val)), + }), +}); + +const withUnionSchema = defineCollection({ + schema: z.discriminatedUnion('type', [ + z.object({ + type: z.literal('post'), + title: z.string(), + description: z.string(), + }), + z.object({ + type: z.literal('newsletter'), + subject: z.string(), + }), + ]), +}); + +const withSymlinkedData = defineCollection({ + type: 'data', + schema: ({ image }) => + z.object({ + alt: z.string(), + src: image(), + }), +}); + +const withSymlinkedContent = defineCollection({ + type: 'content', + schema: z.object({ + title: z.string(), + date: z.date(), + }), +}); + +export const collections = { + 'with-data': withData, + 'with-custom-slugs': withCustomSlugs, + 'with-schema-config': withSchemaConfig, + 'with-union-schema': withUnionSchema, + 'with-symlinked-data': withSymlinkedData, + 'with-symlinked-content': withSymlinkedContent, +}; diff --git a/packages/astro/test/fixtures/legacy-content-collections/src/content/with-custom-slugs/one.md b/packages/astro/test/fixtures/legacy-content-collections/src/content/with-custom-slugs/one.md new file mode 100644 index 000000000000..d6d5bd90791f --- /dev/null +++ b/packages/astro/test/fixtures/legacy-content-collections/src/content/with-custom-slugs/one.md @@ -0,0 +1,5 @@ +--- +slug: fancy-one +--- + +# It's the first page, fancy! diff --git a/packages/astro/test/fixtures/legacy-content-collections/src/content/with-custom-slugs/three.md b/packages/astro/test/fixtures/legacy-content-collections/src/content/with-custom-slugs/three.md new file mode 100644 index 000000000000..7352e4e0f553 --- /dev/null +++ b/packages/astro/test/fixtures/legacy-content-collections/src/content/with-custom-slugs/three.md @@ -0,0 +1,5 @@ +--- +slug: excellent-three +--- + +# It's the third page, excellent! diff --git a/packages/astro/test/fixtures/legacy-content-collections/src/content/with-custom-slugs/two.md b/packages/astro/test/fixtures/legacy-content-collections/src/content/with-custom-slugs/two.md new file mode 100644 index 000000000000..292cdfc04830 --- /dev/null +++ b/packages/astro/test/fixtures/legacy-content-collections/src/content/with-custom-slugs/two.md @@ -0,0 +1,5 @@ +--- +slug: interesting-two +--- + +# It's the second page, interesting! diff --git a/packages/astro/test/fixtures/legacy-content-collections/src/content/with-data/one.json b/packages/astro/test/fixtures/legacy-content-collections/src/content/with-data/one.json new file mode 100644 index 000000000000..efc60137d68e --- /dev/null +++ b/packages/astro/test/fixtures/legacy-content-collections/src/content/with-data/one.json @@ -0,0 +1,3 @@ +{ + "title": "One" +} diff --git a/packages/astro/test/fixtures/legacy-content-collections/src/content/with-data/three.json b/packages/astro/test/fixtures/legacy-content-collections/src/content/with-data/three.json new file mode 100644 index 000000000000..7d028e937a71 --- /dev/null +++ b/packages/astro/test/fixtures/legacy-content-collections/src/content/with-data/three.json @@ -0,0 +1,3 @@ +{ + "title": "Three" +} diff --git a/packages/astro/test/fixtures/legacy-content-collections/src/content/with-data/two.json b/packages/astro/test/fixtures/legacy-content-collections/src/content/with-data/two.json new file mode 100644 index 000000000000..1a8215509b0a --- /dev/null +++ b/packages/astro/test/fixtures/legacy-content-collections/src/content/with-data/two.json @@ -0,0 +1,3 @@ +{ + "title": "Two" +} diff --git a/packages/astro/test/fixtures/legacy-content-collections/src/content/with-schema-config/_ignore.md b/packages/astro/test/fixtures/legacy-content-collections/src/content/with-schema-config/_ignore.md new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/packages/astro/test/fixtures/legacy-content-collections/src/content/with-schema-config/_ignore/file.md b/packages/astro/test/fixtures/legacy-content-collections/src/content/with-schema-config/_ignore/file.md new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/packages/astro/test/fixtures/legacy-content-collections/src/content/with-schema-config/_ignore/ignore/file.md b/packages/astro/test/fixtures/legacy-content-collections/src/content/with-schema-config/_ignore/ignore/file.md new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/packages/astro/test/fixtures/legacy-content-collections/src/content/with-schema-config/four%.md b/packages/astro/test/fixtures/legacy-content-collections/src/content/with-schema-config/four%.md new file mode 100644 index 000000000000..bad429c8cfe9 --- /dev/null +++ b/packages/astro/test/fixtures/legacy-content-collections/src/content/with-schema-config/four%.md @@ -0,0 +1,8 @@ +--- +title: Four +description: The forth page +lang: en +publishedAt: 2021-01-01 +--- + +# It's the forth page, fancy! diff --git a/packages/astro/test/fixtures/legacy-content-collections/src/content/with-schema-config/one.md b/packages/astro/test/fixtures/legacy-content-collections/src/content/with-schema-config/one.md new file mode 100644 index 000000000000..a470f86cb634 --- /dev/null +++ b/packages/astro/test/fixtures/legacy-content-collections/src/content/with-schema-config/one.md @@ -0,0 +1,8 @@ +--- +title: One +description: The first page +lang: en +publishedAt: 2021-01-01 +--- + +# It's the first page, fancy! diff --git a/packages/astro/test/fixtures/legacy-content-collections/src/content/with-schema-config/three.md b/packages/astro/test/fixtures/legacy-content-collections/src/content/with-schema-config/three.md new file mode 100644 index 000000000000..e5c3191e5cf6 --- /dev/null +++ b/packages/astro/test/fixtures/legacy-content-collections/src/content/with-schema-config/three.md @@ -0,0 +1,8 @@ +--- +title: Three +description: The third page +lang: es +publishedAt: 2021-01-03 +--- + +# It's the third page, excellent! diff --git a/packages/astro/test/fixtures/legacy-content-collections/src/content/with-schema-config/two.md b/packages/astro/test/fixtures/legacy-content-collections/src/content/with-schema-config/two.md new file mode 100644 index 000000000000..d4de3edf71ee --- /dev/null +++ b/packages/astro/test/fixtures/legacy-content-collections/src/content/with-schema-config/two.md @@ -0,0 +1,8 @@ +--- +title: Two +description: The second page +lang: en +publishedAt: 2021-01-02 +--- + +# It's the second page, interesting! diff --git a/packages/astro/test/fixtures/legacy-content-collections/src/content/with-scripts/one.mdx b/packages/astro/test/fixtures/legacy-content-collections/src/content/with-scripts/one.mdx new file mode 100644 index 000000000000..049a25a37791 --- /dev/null +++ b/packages/astro/test/fixtures/legacy-content-collections/src/content/with-scripts/one.mdx @@ -0,0 +1,7 @@ +import ScriptCompA from '../../components/ScriptCompA.astro' +import ScriptCompB from '../../components/ScriptCompB.astro' + +Both scripts should exist. + + + diff --git a/packages/astro/test/fixtures/legacy-content-collections/src/content/with-symlinked-content b/packages/astro/test/fixtures/legacy-content-collections/src/content/with-symlinked-content new file mode 120000 index 000000000000..e66bf94bc1f0 --- /dev/null +++ b/packages/astro/test/fixtures/legacy-content-collections/src/content/with-symlinked-content @@ -0,0 +1 @@ +../../symlinked-collections/content-collection \ No newline at end of file diff --git a/packages/astro/test/fixtures/legacy-content-collections/src/content/with-symlinked-data b/packages/astro/test/fixtures/legacy-content-collections/src/content/with-symlinked-data new file mode 120000 index 000000000000..f90d3eb907e7 --- /dev/null +++ b/packages/astro/test/fixtures/legacy-content-collections/src/content/with-symlinked-data @@ -0,0 +1 @@ +../../symlinked-collections/data-collection \ No newline at end of file diff --git a/packages/astro/test/fixtures/legacy-content-collections/src/content/with-union-schema/newsletter.md b/packages/astro/test/fixtures/legacy-content-collections/src/content/with-union-schema/newsletter.md new file mode 100644 index 000000000000..6e8703a1b646 --- /dev/null +++ b/packages/astro/test/fixtures/legacy-content-collections/src/content/with-union-schema/newsletter.md @@ -0,0 +1,6 @@ +--- +type: newsletter +subject: My Newsletter +--- + +# It's a newsletter! diff --git a/packages/astro/test/fixtures/legacy-content-collections/src/content/with-union-schema/post.md b/packages/astro/test/fixtures/legacy-content-collections/src/content/with-union-schema/post.md new file mode 100644 index 000000000000..fb260d6645f4 --- /dev/null +++ b/packages/astro/test/fixtures/legacy-content-collections/src/content/with-union-schema/post.md @@ -0,0 +1,7 @@ +--- +type: post +title: My Post +description: This is my post +--- + +# It's a post! diff --git a/packages/astro/test/fixtures/content-collections/src/content/without-config/columbia.md b/packages/astro/test/fixtures/legacy-content-collections/src/content/without-config/columbia.md similarity index 100% rename from packages/astro/test/fixtures/content-collections/src/content/without-config/columbia.md rename to packages/astro/test/fixtures/legacy-content-collections/src/content/without-config/columbia.md diff --git a/packages/astro/test/fixtures/content-collections/src/content/without-config/endeavour.md b/packages/astro/test/fixtures/legacy-content-collections/src/content/without-config/endeavour.md similarity index 100% rename from packages/astro/test/fixtures/content-collections/src/content/without-config/endeavour.md rename to packages/astro/test/fixtures/legacy-content-collections/src/content/without-config/endeavour.md diff --git a/packages/astro/test/fixtures/content-collections/src/content/without-config/enterprise.md b/packages/astro/test/fixtures/legacy-content-collections/src/content/without-config/enterprise.md similarity index 100% rename from packages/astro/test/fixtures/content-collections/src/content/without-config/enterprise.md rename to packages/astro/test/fixtures/legacy-content-collections/src/content/without-config/enterprise.md diff --git a/packages/astro/test/fixtures/content-collections/src/content/without-config/promo/_launch-week-styles.css b/packages/astro/test/fixtures/legacy-content-collections/src/content/without-config/promo/_launch-week-styles.css similarity index 100% rename from packages/astro/test/fixtures/content-collections/src/content/without-config/promo/_launch-week-styles.css rename to packages/astro/test/fixtures/legacy-content-collections/src/content/without-config/promo/_launch-week-styles.css diff --git a/packages/astro/test/fixtures/content-collections/src/content/without-config/promo/launch week.mdx b/packages/astro/test/fixtures/legacy-content-collections/src/content/without-config/promo/launch week.mdx similarity index 100% rename from packages/astro/test/fixtures/content-collections/src/content/without-config/promo/launch week.mdx rename to packages/astro/test/fixtures/legacy-content-collections/src/content/without-config/promo/launch week.mdx diff --git a/packages/astro/test/fixtures/legacy-content-collections/src/pages/collections.json.js b/packages/astro/test/fixtures/legacy-content-collections/src/pages/collections.json.js new file mode 100644 index 000000000000..67bafdb93e1d --- /dev/null +++ b/packages/astro/test/fixtures/legacy-content-collections/src/pages/collections.json.js @@ -0,0 +1,16 @@ +import { getCollection } from 'astro:content'; +import * as devalue from 'devalue'; +import { stripAllRenderFn } from '../utils.js'; + +export async function GET() { + const withoutConfig = stripAllRenderFn(await getCollection('without-config')); + const withSchemaConfig = stripAllRenderFn(await getCollection('with-schema-config')); + const withSlugConfig = stripAllRenderFn(await getCollection('with-custom-slugs')); + const withUnionSchema = stripAllRenderFn(await getCollection('with-union-schema')); + const withSymlinkedContent = stripAllRenderFn(await getCollection('with-symlinked-content')); + const withSymlinkedData = stripAllRenderFn(await getCollection('with-symlinked-data')); + + return new Response( + devalue.stringify({ withoutConfig, withSchemaConfig, withSlugConfig, withUnionSchema, withSymlinkedContent, withSymlinkedData }), + ); +} diff --git a/packages/astro/test/fixtures/legacy-content-collections/src/pages/entries.json.js b/packages/astro/test/fixtures/legacy-content-collections/src/pages/entries.json.js new file mode 100644 index 000000000000..a05a9138b1d8 --- /dev/null +++ b/packages/astro/test/fixtures/legacy-content-collections/src/pages/entries.json.js @@ -0,0 +1,21 @@ +import { getEntryBySlug } from 'astro:content'; +import * as devalue from 'devalue'; +import { stripRenderFn } from '../utils.js'; + +export async function GET() { + const columbiaWithoutConfig = stripRenderFn(await getEntryBySlug('without-config', 'columbia')); + const oneWithSchemaConfig = stripRenderFn(await getEntryBySlug('with-schema-config', 'one')); + const twoWithSlugConfig = stripRenderFn( + await getEntryBySlug('with-custom-slugs', 'interesting-two') + ); + const postWithUnionSchema = stripRenderFn(await getEntryBySlug('with-union-schema', 'post')); + + return new Response( + devalue.stringify({ + columbiaWithoutConfig, + oneWithSchemaConfig, + twoWithSlugConfig, + postWithUnionSchema, + }) + ); +} diff --git a/packages/astro/test/fixtures/legacy-content-collections/src/pages/index.astro b/packages/astro/test/fixtures/legacy-content-collections/src/pages/index.astro new file mode 100644 index 000000000000..468b70e7bc34 --- /dev/null +++ b/packages/astro/test/fixtures/legacy-content-collections/src/pages/index.astro @@ -0,0 +1,24 @@ +--- + +--- + + + + + It's content time! + + + +
+
+ + diff --git a/packages/astro/test/fixtures/legacy-content-collections/src/pages/propagation.astro b/packages/astro/test/fixtures/legacy-content-collections/src/pages/propagation.astro new file mode 100644 index 000000000000..3775697acd00 --- /dev/null +++ b/packages/astro/test/fixtures/legacy-content-collections/src/pages/propagation.astro @@ -0,0 +1,22 @@ +--- +import { getCollection } from "astro:content"; +const posts = await getCollection("with-schema-config"); +--- + + + +
+
Hello World
+ Styles? +
+ + + + diff --git a/packages/astro/test/fixtures/legacy-content-collections/src/pages/with-scripts/[...slug].astro b/packages/astro/test/fixtures/legacy-content-collections/src/pages/with-scripts/[...slug].astro new file mode 100644 index 000000000000..893cbb9c61ff --- /dev/null +++ b/packages/astro/test/fixtures/legacy-content-collections/src/pages/with-scripts/[...slug].astro @@ -0,0 +1,21 @@ +--- +import { getCollection } from 'astro:content'; + +export async function getStaticPaths() { + const blogEntries = await getCollection('with-scripts'); + return blogEntries.map(entry => ({ + params: { slug: entry.slug }, props: { entry }, + })); +} + +const { entry } = Astro.props; + +const { Content } = await entry.render(); +const { title } = entry.data; +--- + +
+

This is a content collection post

+

{title}

+ +
diff --git a/packages/astro/test/fixtures/legacy-content-collections/src/utils.js b/packages/astro/test/fixtures/legacy-content-collections/src/utils.js new file mode 100644 index 000000000000..3a6244327862 --- /dev/null +++ b/packages/astro/test/fixtures/legacy-content-collections/src/utils.js @@ -0,0 +1,8 @@ +export function stripRenderFn(entryWithRender) { + const { render, ...entry } = entryWithRender; + return entry; +} + +export function stripAllRenderFn(collection = []) { + return collection.map(stripRenderFn); +} diff --git a/packages/astro/test/fixtures/legacy-content-collections/symlinked-collections/content-collection/first.md b/packages/astro/test/fixtures/legacy-content-collections/symlinked-collections/content-collection/first.md new file mode 100644 index 000000000000..0ecb2d8587b0 --- /dev/null +++ b/packages/astro/test/fixtures/legacy-content-collections/symlinked-collections/content-collection/first.md @@ -0,0 +1,6 @@ +--- +title: "First Blog" +date: 2024-04-05 +--- + +First blog content. diff --git a/packages/astro/test/fixtures/legacy-content-collections/symlinked-collections/content-collection/second.md b/packages/astro/test/fixtures/legacy-content-collections/symlinked-collections/content-collection/second.md new file mode 100644 index 000000000000..dcded99ccf63 --- /dev/null +++ b/packages/astro/test/fixtures/legacy-content-collections/symlinked-collections/content-collection/second.md @@ -0,0 +1,6 @@ +--- +title: "Second Blog" +date: 2024-04-06 +--- + +Second blog content. diff --git a/packages/astro/test/fixtures/legacy-content-collections/symlinked-collections/content-collection/third.md b/packages/astro/test/fixtures/legacy-content-collections/symlinked-collections/content-collection/third.md new file mode 100644 index 000000000000..1adee317378b --- /dev/null +++ b/packages/astro/test/fixtures/legacy-content-collections/symlinked-collections/content-collection/third.md @@ -0,0 +1,6 @@ +--- +title: "Third Blog" +date: 2024-04-07 +--- + +Third blog content. diff --git a/packages/astro/test/fixtures/legacy-content-collections/symlinked-collections/data-collection/welcome.json b/packages/astro/test/fixtures/legacy-content-collections/symlinked-collections/data-collection/welcome.json new file mode 100644 index 000000000000..8ab06ff1f24f --- /dev/null +++ b/packages/astro/test/fixtures/legacy-content-collections/symlinked-collections/data-collection/welcome.json @@ -0,0 +1,4 @@ +{ + "alt": "Futuristic landscape with chrome buildings and blue skies", + "src": "../../assets/the-future.jpg" +} diff --git a/packages/astro/test/fixtures/legacy-data-collections/astro.config.mjs b/packages/astro/test/fixtures/legacy-data-collections/astro.config.mjs new file mode 100644 index 000000000000..cceda36f2f93 --- /dev/null +++ b/packages/astro/test/fixtures/legacy-data-collections/astro.config.mjs @@ -0,0 +1,8 @@ +import { defineConfig } from 'astro/config'; + +// https://astro.build/config +export default defineConfig({ + legacy: { + legacyContentCollections: true, + }, +}); diff --git a/packages/astro/test/fixtures/legacy-data-collections/package.json b/packages/astro/test/fixtures/legacy-data-collections/package.json new file mode 100644 index 000000000000..711eb495666b --- /dev/null +++ b/packages/astro/test/fixtures/legacy-data-collections/package.json @@ -0,0 +1,16 @@ +{ + "name": "@test/data-collections", + "type": "module", + "version": "0.0.1", + "private": true, + "scripts": { + "dev": "astro dev", + "start": "astro dev", + "build": "astro build", + "preview": "astro preview", + "astro": "astro" + }, + "dependencies": { + "astro": "workspace:*" + } +} diff --git a/packages/astro/test/fixtures/legacy-data-collections/src/content/authors-without-config/Ben Holmes.yml b/packages/astro/test/fixtures/legacy-data-collections/src/content/authors-without-config/Ben Holmes.yml new file mode 100644 index 000000000000..54e6743d96cc --- /dev/null +++ b/packages/astro/test/fixtures/legacy-data-collections/src/content/authors-without-config/Ben Holmes.yml @@ -0,0 +1,2 @@ +name: Ben J Holmes +twitter: https://twitter.com/bholmesdev diff --git a/packages/astro/test/fixtures/legacy-data-collections/src/content/authors-without-config/Fred K Schott.yml b/packages/astro/test/fixtures/legacy-data-collections/src/content/authors-without-config/Fred K Schott.yml new file mode 100644 index 000000000000..0b51067d9529 --- /dev/null +++ b/packages/astro/test/fixtures/legacy-data-collections/src/content/authors-without-config/Fred K Schott.yml @@ -0,0 +1,2 @@ +name: Fred K Schott +twitter: https://twitter.com/FredKSchott diff --git a/packages/astro/test/fixtures/legacy-data-collections/src/content/authors-without-config/Nate Moore.yml b/packages/astro/test/fixtures/legacy-data-collections/src/content/authors-without-config/Nate Moore.yml new file mode 100644 index 000000000000..953f348a08f8 --- /dev/null +++ b/packages/astro/test/fixtures/legacy-data-collections/src/content/authors-without-config/Nate Moore.yml @@ -0,0 +1,2 @@ +name: Nate Something Moore +twitter: https://twitter.com/n_moore diff --git a/packages/astro/test/fixtures/legacy-data-collections/src/content/config.ts b/packages/astro/test/fixtures/legacy-data-collections/src/content/config.ts new file mode 100644 index 000000000000..5f3de9423806 --- /dev/null +++ b/packages/astro/test/fixtures/legacy-data-collections/src/content/config.ts @@ -0,0 +1,20 @@ +import { defineCollection, z } from 'astro:content'; + +const docs = defineCollection({ + type: 'content', + schema: z.object({ + title: z.string(), + }) +}); + +const i18n = defineCollection({ + type: 'data', + schema: z.object({ + homepage: z.object({ + greeting: z.string(), + preamble: z.string(), + }) + }), +}); + +export const collections = { docs, i18n }; diff --git a/packages/astro/test/fixtures/legacy-data-collections/src/content/docs/example.md b/packages/astro/test/fixtures/legacy-data-collections/src/content/docs/example.md new file mode 100644 index 000000000000..356e65f64b6a --- /dev/null +++ b/packages/astro/test/fixtures/legacy-data-collections/src/content/docs/example.md @@ -0,0 +1,3 @@ +--- +title: The future of content +--- diff --git a/packages/astro/test/fixtures/legacy-data-collections/src/content/i18n/en.json b/packages/astro/test/fixtures/legacy-data-collections/src/content/i18n/en.json new file mode 100644 index 000000000000..51d127f4a744 --- /dev/null +++ b/packages/astro/test/fixtures/legacy-data-collections/src/content/i18n/en.json @@ -0,0 +1,6 @@ +{ + "homepage": { + "greeting": "Hello World!", + "preamble": "Welcome to the future of content." + } +} diff --git a/packages/astro/test/fixtures/legacy-data-collections/src/content/i18n/es.json b/packages/astro/test/fixtures/legacy-data-collections/src/content/i18n/es.json new file mode 100644 index 000000000000..bf4c7af0fd05 --- /dev/null +++ b/packages/astro/test/fixtures/legacy-data-collections/src/content/i18n/es.json @@ -0,0 +1,6 @@ +{ + "homepage": { + "greeting": "¡Hola Mundo!", + "preamble": "Bienvenido al futuro del contenido." + } +} diff --git a/packages/astro/test/fixtures/legacy-data-collections/src/content/i18n/fr.yaml b/packages/astro/test/fixtures/legacy-data-collections/src/content/i18n/fr.yaml new file mode 100644 index 000000000000..90a86d411f6e --- /dev/null +++ b/packages/astro/test/fixtures/legacy-data-collections/src/content/i18n/fr.yaml @@ -0,0 +1,3 @@ +homepage: + greeting: "Bonjour le monde!" + preamble: "Bienvenue dans le futur du contenu." diff --git a/packages/astro/test/fixtures/legacy-data-collections/src/pages/authors/[id].json.js b/packages/astro/test/fixtures/legacy-data-collections/src/pages/authors/[id].json.js new file mode 100644 index 000000000000..8d5365a2eb2d --- /dev/null +++ b/packages/astro/test/fixtures/legacy-data-collections/src/pages/authors/[id].json.js @@ -0,0 +1,18 @@ +import { getEntry } from 'astro:content'; + +const ids = ['Ben Holmes', 'Fred K Schott', 'Nate Moore']; + +export function getStaticPaths() { + return ids.map((id) => ({ params: { id } })); +} + +/** @param {import('astro').APIContext} params */ +export async function GET({ params }) { + const { id } = params; + const author = await getEntry('authors-without-config', id); + if (!author) { + return Response.json({ error: `Author ${id} Not found` }); + } else { + return Response.json(author); + } +} diff --git a/packages/astro/test/fixtures/legacy-data-collections/src/pages/authors/all.json.js b/packages/astro/test/fixtures/legacy-data-collections/src/pages/authors/all.json.js new file mode 100644 index 000000000000..79dd8cd9dd3c --- /dev/null +++ b/packages/astro/test/fixtures/legacy-data-collections/src/pages/authors/all.json.js @@ -0,0 +1,6 @@ +import { getCollection } from 'astro:content'; + +export async function GET() { + const authors = await getCollection('authors-without-config'); + return Response.json(authors); +} diff --git a/packages/astro/test/fixtures/legacy-data-collections/src/pages/translations/[lang].json.js b/packages/astro/test/fixtures/legacy-data-collections/src/pages/translations/[lang].json.js new file mode 100644 index 000000000000..c6b0cfff669b --- /dev/null +++ b/packages/astro/test/fixtures/legacy-data-collections/src/pages/translations/[lang].json.js @@ -0,0 +1,18 @@ +import { getEntry } from 'astro:content'; + +const langs = ['en', 'es', 'fr']; + +export function getStaticPaths() { + return langs.map((lang) => ({ params: { lang } })); +} + +/** @param {import('astro').APIContext} params */ +export async function GET({ params }) { + const { lang } = params; + const translations = await getEntry('i18n', lang); + if (!translations) { + return Response.json({ error: `Translation ${lang} Not found` }); + } else { + return Response.json(translations); + } +} diff --git a/packages/astro/test/fixtures/legacy-data-collections/src/pages/translations/all.json.js b/packages/astro/test/fixtures/legacy-data-collections/src/pages/translations/all.json.js new file mode 100644 index 000000000000..f1ebb15b761e --- /dev/null +++ b/packages/astro/test/fixtures/legacy-data-collections/src/pages/translations/all.json.js @@ -0,0 +1,6 @@ +import { getCollection } from 'astro:content'; + +export async function GET() { + const translations = await getCollection('i18n'); + return Response.json(translations); +} diff --git a/packages/astro/test/fixtures/legacy-data-collections/src/pages/translations/by-id.json.js b/packages/astro/test/fixtures/legacy-data-collections/src/pages/translations/by-id.json.js new file mode 100644 index 000000000000..5f71c80e9f7b --- /dev/null +++ b/packages/astro/test/fixtures/legacy-data-collections/src/pages/translations/by-id.json.js @@ -0,0 +1,6 @@ +import { getDataEntryById } from 'astro:content'; + +export async function GET() { + const item = await getDataEntryById('i18n', 'en'); + return Response.json(item); +} diff --git a/packages/astro/test/content-collections-emulate-legacy.test.js b/packages/astro/test/legacy-content-collections.test.js similarity index 94% rename from packages/astro/test/content-collections-emulate-legacy.test.js rename to packages/astro/test/legacy-content-collections.test.js index b8f00dd4c214..b7f7ea2238da 100644 --- a/packages/astro/test/content-collections-emulate-legacy.test.js +++ b/packages/astro/test/legacy-content-collections.test.js @@ -6,13 +6,11 @@ import testAdapter from './test-adapter.js'; import { preventNodeBuiltinDependencyPlugin } from './test-plugins.js'; import { loadFixture } from './test-utils.js'; -describe('Content Collections - Emulate Legacy', () => { +describe('Legacy Content Collections', () => { describe('Query', () => { let fixture; before(async () => { - fixture = await loadFixture({ - root: './fixtures/content-collections/', - }); + fixture = await loadFixture({ root: './fixtures/legacy-content-collections/' }); await fixture.build(); }); @@ -221,7 +219,12 @@ describe('Content Collections - Emulate Legacy', () => { let fixture; before(async () => { - fixture = await loadFixture({ root: './fixtures/content-static-paths-integration/' }); + fixture = await loadFixture({ + root: './fixtures/content-static-paths-integration/', + legacy: { + legacyContentCollections: true, + }, + }); await fixture.build(); }); @@ -253,7 +256,10 @@ describe('Content Collections - Emulate Legacy', () => { describe('With spaces in path', () => { it('Does not throw', async () => { - const fixture = await loadFixture({ root: './fixtures/content with spaces in folder name/' }); + const fixture = await loadFixture({ root: './fixtures/content with spaces in folder name/', + legacy: { + legacyContentCollections: true, + }, }); let error = null; try { await fixture.build(); @@ -267,6 +273,10 @@ describe('Content Collections - Emulate Legacy', () => { it("Errors when frontmatter doesn't match schema", async () => { const fixture = await loadFixture({ root: './fixtures/content-collections-with-config-mjs/', + legacy: { + legacyContentCollections: true, + }, + }); let error; try { @@ -281,6 +291,9 @@ describe('Content Collections - Emulate Legacy', () => { it("Errors when frontmatter doesn't match schema", async () => { const fixture = await loadFixture({ root: './fixtures/content-collections-with-config-mts/', + legacy: { + legacyContentCollections: true, + }, }); let error; try { @@ -296,6 +309,9 @@ describe('Content Collections - Emulate Legacy', () => { it('Throws the right error', async () => { const fixture = await loadFixture({ root: './fixtures/content-collections-empty-md-file/', + legacy: { + legacyContentCollections: true, + }, }); let error; try { @@ -311,6 +327,9 @@ describe('Content Collections - Emulate Legacy', () => { it('Handles the empty directory correctly', async () => { const fixture = await loadFixture({ root: './fixtures/content-collections-empty-dir/', + legacy: { + legacyContentCollections: true, + }, }); let error; try { @@ -339,6 +358,9 @@ describe('Content Collections - Emulate Legacy', () => { vite: { plugins: [preventNodeBuiltinDependencyPlugin()], }, + legacy: { + legacyContentCollections: true, + }, }); await fixture.build(); app = await fixture.loadTestAdapterApp(); @@ -382,6 +404,9 @@ describe('Content Collections - Emulate Legacy', () => { before(async () => { fixture = await loadFixture({ root: './fixtures/content-collections-base/', + legacy: { + legacyContentCollections: true, + }, }); await fixture.build(); }); @@ -405,6 +430,9 @@ describe('Content Collections - Emulate Legacy', () => { before(async () => { fixture = await loadFixture({ root: './fixtures/content-collections-mutation/', + legacy: { + legacyContentCollections: true, + }, }); await fixture.build(); }); diff --git a/packages/astro/test/legacy-data-collections.test.js b/packages/astro/test/legacy-data-collections.test.js new file mode 100644 index 000000000000..3cfb3afd4fc6 --- /dev/null +++ b/packages/astro/test/legacy-data-collections.test.js @@ -0,0 +1,159 @@ +import assert from 'node:assert/strict'; +import { before, describe, it } from 'node:test'; +import { loadFixture } from './test-utils.js'; + +const authorIds = ['Ben Holmes', 'Fred K Schott', 'Nate Moore']; +const translationIds = ['en', 'es', 'fr']; + +describe('Content Collections - legacy data collections', () => { + let fixture; + before(async () => { + fixture = await loadFixture({ root: './fixtures/legacy-data-collections/' }); + await fixture.build(); + }); + + describe('Authors Collection', () => { + let json; + before(async () => { + const rawJson = await fixture.readFile('/authors/all.json'); + json = JSON.parse(rawJson); + }); + + it('Returns', async () => { + assert.equal(Array.isArray(json), true); + assert.equal(json.length, 3); + }); + + it('Generates correct ids', async () => { + const ids = json.map((item) => item.id).sort(); + assert.deepEqual(ids, ['Ben Holmes', 'Fred K Schott', 'Nate Moore']); + }); + + it('Generates correct data', async () => { + const names = json.map((item) => item.data.name); + assert.deepEqual(names, ['Ben J Holmes', 'Fred K Schott', 'Nate Something Moore']); + + const twitterUrls = json.map((item) => item.data.twitter); + assert.deepEqual(twitterUrls, [ + 'https://twitter.com/bholmesdev', + 'https://twitter.com/FredKSchott', + 'https://twitter.com/n_moore', + ]); + }); + }); + + describe('getDataEntryById', () => { + let json; + before(async () => { + const rawJson = await fixture.readFile('/translations/by-id.json'); + json = JSON.parse(rawJson); + }); + it('Grabs the item by the base file name', () => { + assert.equal(json.id, 'en'); + }); + }); + + describe('Authors Entry', () => { + for (const authorId of authorIds) { + let json; + before(async () => { + const rawJson = await fixture.readFile(`/authors/${authorId}.json`); + json = JSON.parse(rawJson); + }); + + it(`Returns ${authorId}`, async () => { + assert.equal(json.hasOwnProperty('id'), true); + assert.equal(json.id, authorId); + }); + + it(`Generates correct data for ${authorId}`, async () => { + assert.equal(json.hasOwnProperty('data'), true); + assert.equal(json.data.hasOwnProperty('name'), true); + assert.equal(json.data.hasOwnProperty('twitter'), true); + + switch (authorId) { + case 'Ben Holmes': + assert.equal(json.data.name, 'Ben J Holmes'); + assert.equal(json.data.twitter, 'https://twitter.com/bholmesdev'); + break; + case 'Fred K Schott': + assert.equal(json.data.name, 'Fred K Schott'); + assert.equal(json.data.twitter, 'https://twitter.com/FredKSchott'); + break; + case 'Nate Moore': + assert.equal(json.data.name, 'Nate Something Moore'); + assert.equal(json.data.twitter, 'https://twitter.com/n_moore'); + break; + } + }); + } + }); + + describe('Translations Collection', () => { + let json; + before(async () => { + const rawJson = await fixture.readFile('/translations/all.json'); + json = JSON.parse(rawJson); + }); + + it('Returns', async () => { + assert.equal(Array.isArray(json), true); + assert.equal(json.length, 3); + }); + + it('Generates correct ids', async () => { + const ids = json.map((item) => item.id).sort(); + assert.deepEqual(ids, translationIds); + }); + + it('Generates correct data', async () => { + const sorted = json.sort((a, b) => a.id.localeCompare(b.id)); + const homepageGreetings = sorted.map((item) => item.data.homepage?.greeting); + assert.deepEqual(homepageGreetings, ['Hello World!', '¡Hola Mundo!', 'Bonjour le monde!']); + + const homepagePreambles = sorted.map((item) => item.data.homepage?.preamble); + assert.deepEqual(homepagePreambles, [ + 'Welcome to the future of content.', + 'Bienvenido al futuro del contenido.', + 'Bienvenue dans le futur du contenu.', + ]); + }); + }); + + describe('Translations Entry', () => { + for (const translationId of translationIds) { + let json; + before(async () => { + const rawJson = await fixture.readFile(`/translations/${translationId}.json`); + json = JSON.parse(rawJson); + }); + + it(`Returns ${translationId}`, async () => { + assert.equal(json.hasOwnProperty('id'), true); + assert.equal(json.id, translationId); + }); + + it(`Generates correct data for ${translationId}`, async () => { + assert.equal(json.hasOwnProperty('data'), true); + assert.equal(json.data.hasOwnProperty('homepage'), true); + assert.equal(json.data.homepage.hasOwnProperty('greeting'), true); + assert.equal(json.data.homepage.hasOwnProperty('preamble'), true); + + switch (translationId) { + case 'en': + assert.equal(json.data.homepage.greeting, 'Hello World!'); + assert.equal(json.data.homepage.preamble, 'Welcome to the future of content.'); + break; + case 'es': + assert.equal(json.data.homepage.greeting, '¡Hola Mundo!'); + assert.equal(json.data.homepage.preamble, 'Bienvenido al futuro del contenido.'); + break; + case 'fr': + assert.equal(json.data.homepage.greeting, 'Bonjour le monde!'); + assert.equal(json.data.homepage.preamble, 'Bienvenue dans le futur du contenu.'); + break; + } + }); + } + }); +}); From e14090a093308e9f5a8695c02c85ad2eb7cc1a01 Mon Sep 17 00:00:00 2001 From: Matt Kane Date: Fri, 13 Sep 2024 17:40:22 +0100 Subject: [PATCH 13/43] Handle empty md files --- packages/astro/src/content/loaders/glob.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/astro/src/content/loaders/glob.ts b/packages/astro/src/content/loaders/glob.ts index 5d7e184df007..ed3b664a6362 100644 --- a/packages/astro/src/content/loaders/glob.ts +++ b/packages/astro/src/content/loaders/glob.ts @@ -103,7 +103,7 @@ export function glob(globOptions: GlobOptions): Loader { return; }); - if (!contents) { + if (!contents && contents !== '') { logger.warn(`No contents found for ${entry}`); return; } From bb15ef5672200c6ddfa4d8cdf59df12a0c517d49 Mon Sep 17 00:00:00 2001 From: Matt Kane Date: Fri, 13 Sep 2024 17:45:56 +0100 Subject: [PATCH 14/43] Lockfile --- pnpm-lock.yaml | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e5e027330101..f6582f6d121e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -3344,6 +3344,21 @@ importers: specifier: workspace:* version: link:../../.. + packages/astro/test/fixtures/legacy-content-collections: + dependencies: + '@astrojs/mdx': + specifier: workspace:* + version: link:../../../../integrations/mdx + astro: + specifier: workspace:* + version: link:../../.. + + packages/astro/test/fixtures/legacy-data-collections: + dependencies: + astro: + specifier: workspace:* + version: link:../../.. + packages/astro/test/fixtures/markdown: dependencies: '@astrojs/preact': From e42c4b08aa305d84ec81a991c6220c67f242719c Mon Sep 17 00:00:00 2001 From: Matt Kane Date: Fri, 13 Sep 2024 17:46:46 +0100 Subject: [PATCH 15/43] Dedupe name --- .../astro/test/fixtures/legacy-content-collections/package.json | 2 +- .../astro/test/fixtures/legacy-data-collections/package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/astro/test/fixtures/legacy-content-collections/package.json b/packages/astro/test/fixtures/legacy-content-collections/package.json index b95788cef770..f7cb90d61f41 100644 --- a/packages/astro/test/fixtures/legacy-content-collections/package.json +++ b/packages/astro/test/fixtures/legacy-content-collections/package.json @@ -1,5 +1,5 @@ { - "name": "@test/content-collections", + "name": "@test/legacy-content-collections", "version": "0.0.0", "private": true, "dependencies": { diff --git a/packages/astro/test/fixtures/legacy-data-collections/package.json b/packages/astro/test/fixtures/legacy-data-collections/package.json index 711eb495666b..8daa28ad3f91 100644 --- a/packages/astro/test/fixtures/legacy-data-collections/package.json +++ b/packages/astro/test/fixtures/legacy-data-collections/package.json @@ -1,5 +1,5 @@ { - "name": "@test/data-collections", + "name": "@test/legacy-data-collections", "type": "module", "version": "0.0.1", "private": true, From 8b7dc59d4b45a478149f853480ae0ca39c04273e Mon Sep 17 00:00:00 2001 From: Matt Kane Date: Fri, 13 Sep 2024 19:08:56 +0100 Subject: [PATCH 16/43] Handle data ID unslug --- packages/astro/src/content/loaders/glob.ts | 7 ++++--- packages/astro/src/content/runtime.ts | 12 +++++++++--- packages/astro/src/content/utils.ts | 18 +++++++++++++++--- packages/astro/test/data-collections.test.js | 4 ++-- .../test/legacy-content-collections.test.js | 7 ++++--- 5 files changed, 34 insertions(+), 14 deletions(-) diff --git a/packages/astro/src/content/loaders/glob.ts b/packages/astro/src/content/loaders/glob.ts index ed3b664a6362..f2b40db0950e 100644 --- a/packages/astro/src/content/loaders/glob.ts +++ b/packages/astro/src/content/loaders/glob.ts @@ -154,9 +154,10 @@ export function glob(globOptions: GlobOptions): Loader { filePath, }); if (entryType.getRenderFunction) { - - if(isLegacy && data.layout) { - logger.error(`The Markdown "layout" field is not supported in content collections in Astro 5. Ignoring layout for ${JSON.stringify(entry)}. Enable "legacy.legacyContentCollections" if you need to use the layout field.`); + if (isLegacy && data.layout) { + logger.error( + `The Markdown "layout" field is not supported in content collections in Astro 5. Ignoring layout for ${JSON.stringify(entry)}. Enable "legacy.legacyContentCollections" if you need to use the layout field.`, + ); } let render = renderFunctionByContentType.get(entryType); diff --git a/packages/astro/src/content/runtime.ts b/packages/astro/src/content/runtime.ts index 5e2b9e1d0159..fdfbfce5b952 100644 --- a/packages/astro/src/content/runtime.ts +++ b/packages/astro/src/content/runtime.ts @@ -184,7 +184,9 @@ export function createGetEntryBySlug({ }); } // eslint-disable-next-line no-console - console.warn(`The collection ${JSON.stringify(collection)} does not exist. Please ensure it is defined in your content config.`); + console.warn( + `The collection ${JSON.stringify(collection)} does not exist. Please ensure it is defined in your content config.`, + ); return undefined; } @@ -227,7 +229,9 @@ export function createGetDataEntryById({ return getEntry(collection, id); } // eslint-disable-next-line no-console - console.warn(`The collection ${JSON.stringify(collection)} does not exist. Please ensure it is defined in your content config.`); + console.warn( + `The collection ${JSON.stringify(collection)} does not exist. Please ensure it is defined in your content config.`, + ); return undefined; } @@ -328,7 +332,9 @@ export function createGetEntry({ if (!collectionNames.has(collection)) { // eslint-disable-next-line no-console - console.warn(`The collection ${JSON.stringify(collection)} does not exist. Please ensure it is defined in your content config.`); + console.warn( + `The collection ${JSON.stringify(collection)} does not exist. Please ensure it is defined in your content config.`, + ); return undefined; } diff --git a/packages/astro/src/content/utils.ts b/packages/astro/src/content/utils.ts index a11bf66b1307..075746ec4317 100644 --- a/packages/astro/src/content/utils.ts +++ b/packages/astro/src/content/utils.ts @@ -537,14 +537,26 @@ export async function autogenerateCollections({ continue; } + const isDataCollection = collections[collectionName]?.type === 'data'; + const base = new URL(`${collectionName}/`, contentDir); collections[collectionName] = { ...collections[collectionName], type: 'content_layer', loader: glob({ - base: new URL(collectionName, contentDir), - pattern: collections[collectionName]?.type === 'data' ? dataPattern : contentPattern, + base, + pattern: isDataCollection ? dataPattern : contentPattern, // Only "content" collections need special legacy handling - _legacy: collections[collectionName]?.type !== 'data' || undefined, + _legacy: !isDataCollection || undefined, + // Legacy data collections IDs aren't slugified + generateId: isDataCollection + ? ({ entry }) => + getDataEntryId({ + entry: new URL(entry, base), + collection: collectionName, + contentDir, + }) + : undefined, + // Zod weirdness has trouble with typing the args to the load function }) as any, }; diff --git a/packages/astro/test/data-collections.test.js b/packages/astro/test/data-collections.test.js index 68f15a773370..e5677c9724cf 100644 --- a/packages/astro/test/data-collections.test.js +++ b/packages/astro/test/data-collections.test.js @@ -31,13 +31,13 @@ describe('Content Collections - data collections', () => { it('Generates correct data', async () => { const names = json.map((item) => item.data.name); - assert.deepEqual(names, ['Ben J Holmes', 'Fred K Schott', 'Nate Something Moore']); + assert.deepEqual(names, ['Ben J Holmes', 'Nate Something Moore', 'Fred K Schott']); const twitterUrls = json.map((item) => item.data.twitter); assert.deepEqual(twitterUrls, [ 'https://twitter.com/bholmesdev', - 'https://twitter.com/FredKSchott', 'https://twitter.com/n_moore', + 'https://twitter.com/FredKSchott', ]); }); }); diff --git a/packages/astro/test/legacy-content-collections.test.js b/packages/astro/test/legacy-content-collections.test.js index b7f7ea2238da..14999ab6f63e 100644 --- a/packages/astro/test/legacy-content-collections.test.js +++ b/packages/astro/test/legacy-content-collections.test.js @@ -256,10 +256,12 @@ describe('Legacy Content Collections', () => { describe('With spaces in path', () => { it('Does not throw', async () => { - const fixture = await loadFixture({ root: './fixtures/content with spaces in folder name/', + const fixture = await loadFixture({ + root: './fixtures/content with spaces in folder name/', legacy: { legacyContentCollections: true, - }, }); + }, + }); let error = null; try { await fixture.build(); @@ -276,7 +278,6 @@ describe('Legacy Content Collections', () => { legacy: { legacyContentCollections: true, }, - }); let error; try { From ab7918a349a7c7b75af12936748bf3b5ba2c4c7e Mon Sep 17 00:00:00 2001 From: Matt Kane Date: Fri, 13 Sep 2024 19:41:49 +0100 Subject: [PATCH 17/43] Fix e2e --- .../e2e/fixtures/content-collections/src/content/config.ts | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 packages/astro/e2e/fixtures/content-collections/src/content/config.ts diff --git a/packages/astro/e2e/fixtures/content-collections/src/content/config.ts b/packages/astro/e2e/fixtures/content-collections/src/content/config.ts new file mode 100644 index 000000000000..81f62c975b82 --- /dev/null +++ b/packages/astro/e2e/fixtures/content-collections/src/content/config.ts @@ -0,0 +1,6 @@ +import { defineCollection } from "astro:content"; + + +const posts = defineCollection({}); + +export const collections = { posts }; From 5d1684e2b1ce9cd096d179049634a347aa6449f5 Mon Sep 17 00:00:00 2001 From: Matt Kane Date: Fri, 13 Sep 2024 19:49:03 +0100 Subject: [PATCH 18/43] Clean build --- .../test/experimental-content-collection-references.test.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/astro/test/experimental-content-collection-references.test.js b/packages/astro/test/experimental-content-collection-references.test.js index 61e61d4674a2..49dbef87e6f2 100644 --- a/packages/astro/test/experimental-content-collection-references.test.js +++ b/packages/astro/test/experimental-content-collection-references.test.js @@ -24,9 +24,9 @@ describe('Experimental Content Collections cache - references', () => { describe(mode, () => { before(async () => { if (mode === 'prod') { - await fixture.build(); + await fixture.build({ force: true }); } else if (mode === 'dev') { - devServer = await fixture.startDevServer(); + devServer = await fixture.startDevServer({ force: true }); } }); From 032ce4f9b7f55202440fb6d5ffde416f149731e7 Mon Sep 17 00:00:00 2001 From: Matt Kane Date: Fri, 13 Sep 2024 19:52:28 +0100 Subject: [PATCH 19/43] Clean builds in tests --- .../astro/test/content-collections.test.js | 20 +++++++++---------- packages/astro/test/data-collections.test.js | 2 +- .../test/legacy-data-collections.test.js | 2 +- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/packages/astro/test/content-collections.test.js b/packages/astro/test/content-collections.test.js index 79497d0191c9..6c452d8499c5 100644 --- a/packages/astro/test/content-collections.test.js +++ b/packages/astro/test/content-collections.test.js @@ -11,7 +11,7 @@ describe('Content Collections', () => { let fixture; before(async () => { fixture = await loadFixture({ root: './fixtures/content-collections/' }); - await fixture.build(); + await fixture.build({ force: true }); }); describe('Collection', () => { @@ -181,7 +181,7 @@ describe('Content Collections', () => { before(async () => { fixture = await loadFixture({ root: './fixtures/content-static-paths-integration/' }); - await fixture.build(); + await fixture.build({ force: true }); }); it('Generates expected pages', async () => { @@ -215,7 +215,7 @@ describe('Content Collections', () => { const fixture = await loadFixture({ root: './fixtures/content with spaces in folder name/' }); let error = null; try { - await fixture.build(); + await fixture.build({ force: true }); } catch (e) { error = e.message; } @@ -229,7 +229,7 @@ describe('Content Collections', () => { }); let error; try { - await fixture.build(); + await fixture.build({ force: true }); } catch (e) { error = e.message; } @@ -243,7 +243,7 @@ describe('Content Collections', () => { }); let error; try { - await fixture.build(); + await fixture.build({ force: true }); } catch (e) { error = e.message; } @@ -258,7 +258,7 @@ describe('Content Collections', () => { }); let error; try { - await fixture.build(); + await fixture.build({ force: true }); } catch (e) { error = e.message; } @@ -273,7 +273,7 @@ describe('Content Collections', () => { }); let error; try { - await fixture.build(); + await fixture.build({ force: true }); } catch (e) { error = e.message; } @@ -299,7 +299,7 @@ describe('Content Collections', () => { plugins: [preventNodeBuiltinDependencyPlugin()], }, }); - await fixture.build(); + await fixture.build({ force: true }); app = await fixture.loadTestAdapterApp(); }); @@ -342,7 +342,7 @@ describe('Content Collections', () => { fixture = await loadFixture({ root: './fixtures/content-collections-base/', }); - await fixture.build(); + await fixture.build({ force: true }); }); it('Includes base in links', async () => { @@ -365,7 +365,7 @@ describe('Content Collections', () => { fixture = await loadFixture({ root: './fixtures/content-collections-mutation/', }); - await fixture.build(); + await fixture.build({ force: true }); }); it('Does not mutate cached collection', async () => { diff --git a/packages/astro/test/data-collections.test.js b/packages/astro/test/data-collections.test.js index e5677c9724cf..9b2fd134bb6d 100644 --- a/packages/astro/test/data-collections.test.js +++ b/packages/astro/test/data-collections.test.js @@ -9,7 +9,7 @@ describe('Content Collections - data collections', () => { let fixture; before(async () => { fixture = await loadFixture({ root: './fixtures/data-collections/' }); - await fixture.build(); + await fixture.build({ force: true }); }); describe('Authors Collection', () => { diff --git a/packages/astro/test/legacy-data-collections.test.js b/packages/astro/test/legacy-data-collections.test.js index 3cfb3afd4fc6..6bd5f19493c9 100644 --- a/packages/astro/test/legacy-data-collections.test.js +++ b/packages/astro/test/legacy-data-collections.test.js @@ -9,7 +9,7 @@ describe('Content Collections - legacy data collections', () => { let fixture; before(async () => { fixture = await loadFixture({ root: './fixtures/legacy-data-collections/' }); - await fixture.build(); + await fixture.build({ force: true }); }); describe('Authors Collection', () => { From f48be22687c53ef5f4d2a27cb9bc21a72ae4ee92 Mon Sep 17 00:00:00 2001 From: Matt Kane Date: Sat, 14 Sep 2024 10:12:50 +0100 Subject: [PATCH 20/43] Test fixes --- .../core-image-base/src/pages/blog/[...slug].astro | 1 - .../test/fixtures/core-image-errors/astro.config.mjs | 9 +++++++++ packages/astro/test/fixtures/core-image/astro.config.mjs | 9 +++++++++ 3 files changed, 18 insertions(+), 1 deletion(-) create mode 100644 packages/astro/test/fixtures/core-image-errors/astro.config.mjs create mode 100644 packages/astro/test/fixtures/core-image/astro.config.mjs diff --git a/packages/astro/test/fixtures/core-image-base/src/pages/blog/[...slug].astro b/packages/astro/test/fixtures/core-image-base/src/pages/blog/[...slug].astro index dc25493e854a..20b21bbd34eb 100644 --- a/packages/astro/test/fixtures/core-image-base/src/pages/blog/[...slug].astro +++ b/packages/astro/test/fixtures/core-image-base/src/pages/blog/[...slug].astro @@ -11,7 +11,6 @@ export async function getStaticPaths() { const { entry } = Astro.props; const { Content } = await entry.render(); -const myImage = await getImage(entry.data.image); --- diff --git a/packages/astro/test/fixtures/core-image-errors/astro.config.mjs b/packages/astro/test/fixtures/core-image-errors/astro.config.mjs new file mode 100644 index 000000000000..eb5a79d81404 --- /dev/null +++ b/packages/astro/test/fixtures/core-image-errors/astro.config.mjs @@ -0,0 +1,9 @@ +// @ts-check +import { defineConfig } from 'astro/config'; + +export default defineConfig({ + legacy: { + // Needed because we're using image().refine() + legacyContentCollections: true, + }, +}); diff --git a/packages/astro/test/fixtures/core-image/astro.config.mjs b/packages/astro/test/fixtures/core-image/astro.config.mjs new file mode 100644 index 000000000000..de6a35ee6ae5 --- /dev/null +++ b/packages/astro/test/fixtures/core-image/astro.config.mjs @@ -0,0 +1,9 @@ +// @ts-check +import { defineConfig } from 'astro/config'; + +export default defineConfig({ + legacy: { + // Needed because we're using image().refine() + legacyContentCollections: true, + }, +}); From f33783827e46c38deba4b4953fb25d1e28ca9805 Mon Sep 17 00:00:00 2001 From: Matt Kane Date: Sat, 14 Sep 2024 10:15:05 +0100 Subject: [PATCH 21/43] Fix test --- packages/astro/test/data-collections.test.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/astro/test/data-collections.test.js b/packages/astro/test/data-collections.test.js index 9b2fd134bb6d..a6d54093130e 100644 --- a/packages/astro/test/data-collections.test.js +++ b/packages/astro/test/data-collections.test.js @@ -31,13 +31,13 @@ describe('Content Collections - data collections', () => { it('Generates correct data', async () => { const names = json.map((item) => item.data.name); - assert.deepEqual(names, ['Ben J Holmes', 'Nate Something Moore', 'Fred K Schott']); + assert.deepEqual(names, ['Ben J Holmes', 'Fred K Schott', 'Nate Something Moore']); const twitterUrls = json.map((item) => item.data.twitter); assert.deepEqual(twitterUrls, [ 'https://twitter.com/bholmesdev', - 'https://twitter.com/n_moore', 'https://twitter.com/FredKSchott', + 'https://twitter.com/n_moore', ]); }); }); From ec2fcb03af7b7f63424334c3982169b5932b1950 Mon Sep 17 00:00:00 2001 From: Matt Kane Date: Sat, 14 Sep 2024 12:27:19 +0100 Subject: [PATCH 22/43] Fix typegen --- .changeset/quick-onions-leave.md | 14 ++++++++++++++ packages/astro/src/content/types-generator.ts | 5 +++-- packages/astro/src/content/utils.ts | 8 ++++++-- packages/astro/test/astro-sync.test.js | 7 +++++-- 4 files changed, 28 insertions(+), 6 deletions(-) create mode 100644 .changeset/quick-onions-leave.md diff --git a/.changeset/quick-onions-leave.md b/.changeset/quick-onions-leave.md new file mode 100644 index 000000000000..be08b0b6983c --- /dev/null +++ b/.changeset/quick-onions-leave.md @@ -0,0 +1,14 @@ +--- +'astro': patch +--- + +Implements legacy collections using `glob()` loader + +Changes default behavior to emulate legacy content and data collections using content layer and the `glob()` loader if they are defined in the config. These emulated collections use `glob()`, with matching patterns to exclude underscores, but with the + +- Data collections have a non-slugified ID generated from the filename +- Content collections are stored with a new `legacyId` field based on the filename. When this is set on an entry the runtime returns an object that is compatible with legacy collections: the `id` is set to the legacy ID, the `slug` is set and an `entry.render()` method is set. + +It does not support the `render` frontmatter field, and does not generate implicit collections for folders that don't have a defined collection. + +It adds a `legacy.legacyContentCollections` flag which re-enables the behavior from 4.14: legacy collections are handled using the old code, and content layer collections can't be created in `src/content`. diff --git a/packages/astro/src/content/types-generator.ts b/packages/astro/src/content/types-generator.ts index 9923a0c343d7..0c1bdd25f5c6 100644 --- a/packages/astro/src/content/types-generator.ts +++ b/packages/astro/src/content/types-generator.ts @@ -474,7 +474,7 @@ async function writeContentFiles({ collection.type === 'unknown' ? // Add empty / unknown collections to the data type map by default // This ensures `getCollection('empty-collection')` doesn't raise a type error - collectionConfig?.type ?? 'data' + (collectionConfig?.type ?? 'data') : collection.type; const collectionEntryKeys = Object.keys(collection.entries).sort(); @@ -498,7 +498,8 @@ async function writeContentFiles({ contentTypesStr += `};\n`; break; case CONTENT_LAYER_TYPE: - dataTypesStr += `${collectionKey}: Record;\n`; + const legacyTypes = (collectionConfig as any)?._legacy ? 'render(): Render[".md"];\n slug: string;\n body: string;\n' : 'body?: string;\n'; + dataTypesStr += `${collectionKey}: Record;\n`; break; case 'data': if (collectionEntryKeys.length === 0) { diff --git a/packages/astro/src/content/utils.ts b/packages/astro/src/content/utils.ts index 075746ec4317..94ed4ef234d8 100644 --- a/packages/astro/src/content/utils.ts +++ b/packages/astro/src/content/utils.ts @@ -92,6 +92,8 @@ const collectionConfigParser = z.union([ render: z.function(z.tuple([z.any()], z.unknown())).optional(), }), ]), + /** deprecated */ + _legacy: z.boolean().optional(), }), ]); @@ -539,14 +541,16 @@ export async function autogenerateCollections({ const isDataCollection = collections[collectionName]?.type === 'data'; const base = new URL(`${collectionName}/`, contentDir); + // Only "content" collections need special legacy handling + const _legacy = !isDataCollection || undefined; collections[collectionName] = { ...collections[collectionName], type: 'content_layer', + _legacy, loader: glob({ base, pattern: isDataCollection ? dataPattern : contentPattern, - // Only "content" collections need special legacy handling - _legacy: !isDataCollection || undefined, + _legacy, // Legacy data collections IDs aren't slugified generateId: isDataCollection ? ({ entry }) => diff --git a/packages/astro/test/astro-sync.test.js b/packages/astro/test/astro-sync.test.js index f12fb5bc42ed..6dd573bb7855 100644 --- a/packages/astro/test/astro-sync.test.js +++ b/packages/astro/test/astro-sync.test.js @@ -142,20 +142,23 @@ describe('astro sync', () => { '.astro/astro/content.d.ts', `"blog": Record; - render(): Render[".md"]; -}>;`, + rendered?: RenderedContent; +}>`, 'Types file does not include empty collection type', ); fixture.thenFileContentShouldInclude( '.astro/astro/content.d.ts', `"blogMeta": Record; + rendered?: RenderedContent; }>;`, 'Types file does not include empty collection type', ); From 0aebf32920f155ada6ff31d53998919c8904d9e9 Mon Sep 17 00:00:00 2001 From: Matt Kane Date: Sat, 14 Sep 2024 14:23:32 +0100 Subject: [PATCH 23/43] Fix tests --- packages/astro/src/content/types-generator.ts | 6 ++++-- packages/astro/src/core/errors/errors-data.ts | 1 - .../content-collection-references.test.js | 2 +- packages/astro/test/data-collections.test.js | 20 ++++++++++++------- .../test/legacy-content-collections.test.js | 2 +- 5 files changed, 19 insertions(+), 12 deletions(-) diff --git a/packages/astro/src/content/types-generator.ts b/packages/astro/src/content/types-generator.ts index 0c1bdd25f5c6..f6627c2ad0fe 100644 --- a/packages/astro/src/content/types-generator.ts +++ b/packages/astro/src/content/types-generator.ts @@ -474,7 +474,7 @@ async function writeContentFiles({ collection.type === 'unknown' ? // Add empty / unknown collections to the data type map by default // This ensures `getCollection('empty-collection')` doesn't raise a type error - (collectionConfig?.type ?? 'data') + collectionConfig?.type ?? 'data' : collection.type; const collectionEntryKeys = Object.keys(collection.entries).sort(); @@ -498,7 +498,9 @@ async function writeContentFiles({ contentTypesStr += `};\n`; break; case CONTENT_LAYER_TYPE: - const legacyTypes = (collectionConfig as any)?._legacy ? 'render(): Render[".md"];\n slug: string;\n body: string;\n' : 'body?: string;\n'; + const legacyTypes = (collectionConfig as any)?._legacy + ? 'render(): Render[".md"];\n slug: string;\n body: string;\n' + : 'body?: string;\n'; dataTypesStr += `${collectionKey}: Record;\n`; break; case 'data': diff --git a/packages/astro/src/core/errors/errors-data.ts b/packages/astro/src/core/errors/errors-data.ts index b5ed4ecebad7..6ae53a7f73c6 100644 --- a/packages/astro/src/core/errors/errors-data.ts +++ b/packages/astro/src/core/errors/errors-data.ts @@ -855,7 +855,6 @@ export const LocalsReassigned = { hint: 'Set a `locals` property instead.', } satisfies ErrorData; - /** * @docs * @description diff --git a/packages/astro/test/content-collection-references.test.js b/packages/astro/test/content-collection-references.test.js index c255f2dad7fb..6114b0f214ee 100644 --- a/packages/astro/test/content-collection-references.test.js +++ b/packages/astro/test/content-collection-references.test.js @@ -16,7 +16,7 @@ describe('Content Collections - references', () => { describe(mode, () => { before(async () => { if (mode === 'prod') { - await fixture.build(); + await fixture.build({ force: true }); } else if (mode === 'dev') { devServer = await fixture.startDevServer(); } diff --git a/packages/astro/test/data-collections.test.js b/packages/astro/test/data-collections.test.js index a6d54093130e..ef58e989e132 100644 --- a/packages/astro/test/data-collections.test.js +++ b/packages/astro/test/data-collections.test.js @@ -26,19 +26,25 @@ describe('Content Collections - data collections', () => { it('Generates correct ids', async () => { const ids = json.map((item) => item.id).sort(); - assert.deepEqual(ids, ['Ben Holmes', 'Fred K Schott', 'Nate Moore']); + assert.deepEqual(ids.sort(), ['Ben Holmes', 'Fred K Schott', 'Nate Moore'].sort()); }); it('Generates correct data', async () => { const names = json.map((item) => item.data.name); - assert.deepEqual(names, ['Ben J Holmes', 'Fred K Schott', 'Nate Something Moore']); + assert.deepEqual( + names.sort(), + ['Ben J Holmes', 'Fred K Schott', 'Nate Something Moore'].sort(), + ); const twitterUrls = json.map((item) => item.data.twitter); - assert.deepEqual(twitterUrls, [ - 'https://twitter.com/bholmesdev', - 'https://twitter.com/FredKSchott', - 'https://twitter.com/n_moore', - ]); + assert.deepEqual( + twitterUrls.sort(), + [ + 'https://twitter.com/bholmesdev', + 'https://twitter.com/FredKSchott', + 'https://twitter.com/n_moore', + ].sort(), + ); }); }); diff --git a/packages/astro/test/legacy-content-collections.test.js b/packages/astro/test/legacy-content-collections.test.js index 14999ab6f63e..8ccbcd85371c 100644 --- a/packages/astro/test/legacy-content-collections.test.js +++ b/packages/astro/test/legacy-content-collections.test.js @@ -264,7 +264,7 @@ describe('Legacy Content Collections', () => { }); let error = null; try { - await fixture.build(); + await fixture.build({ force: true }); } catch (e) { error = e.message; } From 8f2e3fecd2d25ae47f61611853052501b1a85229 Mon Sep 17 00:00:00 2001 From: Matt Kane Date: Mon, 16 Sep 2024 10:35:17 +0100 Subject: [PATCH 24/43] Fixture updates --- .../markdoc/test/content-collections.test.js | 13 ++++++++++++- .../fixtures/headings-custom/src/content/config.ts | 7 +++++++ .../test/fixtures/headings/src/content/config.ts | 7 +++++++ .../fixtures/image-assets/src/content/config.ts | 7 +++++++ .../propagated-assets/src/content/config.ts | 7 +++++++ .../render with-space/src/content/config.ts | 7 +++++++ .../test/fixtures/render-html/src/content/config.ts | 7 +++++++ .../test/fixtures/render-null/src/content/config.ts | 7 +++++++ .../fixtures/render-partials/src/content/config.ts | 7 +++++++ .../fixtures/render-simple/src/content/config.ts | 7 +++++++ .../render-typographer/src/content/config.ts | 7 +++++++ .../render-with-components/src/content/config.ts | 7 +++++++ .../render-with-config/src/content/config.ts | 7 +++++++ .../src/content/config.ts | 7 +++++++ .../src/content/config.ts | 7 +++++++ 15 files changed, 110 insertions(+), 1 deletion(-) create mode 100644 packages/integrations/markdoc/test/fixtures/headings-custom/src/content/config.ts create mode 100644 packages/integrations/markdoc/test/fixtures/headings/src/content/config.ts create mode 100644 packages/integrations/markdoc/test/fixtures/image-assets/src/content/config.ts create mode 100644 packages/integrations/markdoc/test/fixtures/propagated-assets/src/content/config.ts create mode 100644 packages/integrations/markdoc/test/fixtures/render with-space/src/content/config.ts create mode 100644 packages/integrations/markdoc/test/fixtures/render-html/src/content/config.ts create mode 100644 packages/integrations/markdoc/test/fixtures/render-null/src/content/config.ts create mode 100644 packages/integrations/markdoc/test/fixtures/render-partials/src/content/config.ts create mode 100644 packages/integrations/markdoc/test/fixtures/render-simple/src/content/config.ts create mode 100644 packages/integrations/markdoc/test/fixtures/render-typographer/src/content/config.ts create mode 100644 packages/integrations/markdoc/test/fixtures/render-with-components/src/content/config.ts create mode 100644 packages/integrations/markdoc/test/fixtures/render-with-config/src/content/config.ts create mode 100644 packages/integrations/markdoc/test/fixtures/render-with-extends-components/src/content/config.ts create mode 100644 packages/integrations/markdoc/test/fixtures/render-with-indented-components/src/content/config.ts diff --git a/packages/integrations/markdoc/test/content-collections.test.js b/packages/integrations/markdoc/test/content-collections.test.js index 5417f297d011..34901e648a3f 100644 --- a/packages/integrations/markdoc/test/content-collections.test.js +++ b/packages/integrations/markdoc/test/content-collections.test.js @@ -13,6 +13,8 @@ function formatPost(post) { const root = new URL('./fixtures/content-collections/', import.meta.url); +const sortById = (a, b) => a.id.localeCompare(b.id); + describe('Markdoc - Content Collections', () => { let baseFixture; @@ -46,7 +48,7 @@ describe('Markdoc - Content Collections', () => { assert.notEqual(posts, null); assert.deepEqual( - posts.sort().map((post) => formatPost(post)), + posts.sort(sortById).map((post) => formatPost(post)), [post1Entry, post2Entry, post3Entry], ); }); @@ -84,6 +86,9 @@ const post1Entry = { title: 'Post 1', }, body: '\n## Post 1\n\nThis is the contents of post 1.\n', + deferredRender: true, + filePath: 'src/content/blog/post-1.mdoc', + digest: '5d5bd98d949e2b9a', }; const post2Entry = { @@ -95,6 +100,9 @@ const post2Entry = { title: 'Post 2', }, body: '\n## Post 2\n\nThis is the contents of post 2.\n', + deferredRender: true, + filePath: 'src/content/blog/post-2.mdoc', + digest: '595af4b93a4af072', }; const post3Entry = { @@ -106,4 +114,7 @@ const post3Entry = { title: 'Post 3', }, body: '\n## Post 3\n\nThis is the contents of post 3.\n', + deferredRender: true, + filePath: 'src/content/blog/post-3.mdoc', + digest: 'ef589606e542247e', }; diff --git a/packages/integrations/markdoc/test/fixtures/headings-custom/src/content/config.ts b/packages/integrations/markdoc/test/fixtures/headings-custom/src/content/config.ts new file mode 100644 index 000000000000..a142ace11a74 --- /dev/null +++ b/packages/integrations/markdoc/test/fixtures/headings-custom/src/content/config.ts @@ -0,0 +1,7 @@ +import { defineCollection } from 'astro:content'; + +const docs = defineCollection({}); + +export const collections = { + docs, +}; diff --git a/packages/integrations/markdoc/test/fixtures/headings/src/content/config.ts b/packages/integrations/markdoc/test/fixtures/headings/src/content/config.ts new file mode 100644 index 000000000000..a142ace11a74 --- /dev/null +++ b/packages/integrations/markdoc/test/fixtures/headings/src/content/config.ts @@ -0,0 +1,7 @@ +import { defineCollection } from 'astro:content'; + +const docs = defineCollection({}); + +export const collections = { + docs, +}; diff --git a/packages/integrations/markdoc/test/fixtures/image-assets/src/content/config.ts b/packages/integrations/markdoc/test/fixtures/image-assets/src/content/config.ts new file mode 100644 index 000000000000..a142ace11a74 --- /dev/null +++ b/packages/integrations/markdoc/test/fixtures/image-assets/src/content/config.ts @@ -0,0 +1,7 @@ +import { defineCollection } from 'astro:content'; + +const docs = defineCollection({}); + +export const collections = { + docs, +}; diff --git a/packages/integrations/markdoc/test/fixtures/propagated-assets/src/content/config.ts b/packages/integrations/markdoc/test/fixtures/propagated-assets/src/content/config.ts new file mode 100644 index 000000000000..629486e48aa5 --- /dev/null +++ b/packages/integrations/markdoc/test/fixtures/propagated-assets/src/content/config.ts @@ -0,0 +1,7 @@ +import { defineCollection } from 'astro:content'; + +const blog = defineCollection({}); + +export const collections = { + blog, +}; diff --git a/packages/integrations/markdoc/test/fixtures/render with-space/src/content/config.ts b/packages/integrations/markdoc/test/fixtures/render with-space/src/content/config.ts new file mode 100644 index 000000000000..629486e48aa5 --- /dev/null +++ b/packages/integrations/markdoc/test/fixtures/render with-space/src/content/config.ts @@ -0,0 +1,7 @@ +import { defineCollection } from 'astro:content'; + +const blog = defineCollection({}); + +export const collections = { + blog, +}; diff --git a/packages/integrations/markdoc/test/fixtures/render-html/src/content/config.ts b/packages/integrations/markdoc/test/fixtures/render-html/src/content/config.ts new file mode 100644 index 000000000000..629486e48aa5 --- /dev/null +++ b/packages/integrations/markdoc/test/fixtures/render-html/src/content/config.ts @@ -0,0 +1,7 @@ +import { defineCollection } from 'astro:content'; + +const blog = defineCollection({}); + +export const collections = { + blog, +}; diff --git a/packages/integrations/markdoc/test/fixtures/render-null/src/content/config.ts b/packages/integrations/markdoc/test/fixtures/render-null/src/content/config.ts new file mode 100644 index 000000000000..629486e48aa5 --- /dev/null +++ b/packages/integrations/markdoc/test/fixtures/render-null/src/content/config.ts @@ -0,0 +1,7 @@ +import { defineCollection } from 'astro:content'; + +const blog = defineCollection({}); + +export const collections = { + blog, +}; diff --git a/packages/integrations/markdoc/test/fixtures/render-partials/src/content/config.ts b/packages/integrations/markdoc/test/fixtures/render-partials/src/content/config.ts new file mode 100644 index 000000000000..629486e48aa5 --- /dev/null +++ b/packages/integrations/markdoc/test/fixtures/render-partials/src/content/config.ts @@ -0,0 +1,7 @@ +import { defineCollection } from 'astro:content'; + +const blog = defineCollection({}); + +export const collections = { + blog, +}; diff --git a/packages/integrations/markdoc/test/fixtures/render-simple/src/content/config.ts b/packages/integrations/markdoc/test/fixtures/render-simple/src/content/config.ts new file mode 100644 index 000000000000..629486e48aa5 --- /dev/null +++ b/packages/integrations/markdoc/test/fixtures/render-simple/src/content/config.ts @@ -0,0 +1,7 @@ +import { defineCollection } from 'astro:content'; + +const blog = defineCollection({}); + +export const collections = { + blog, +}; diff --git a/packages/integrations/markdoc/test/fixtures/render-typographer/src/content/config.ts b/packages/integrations/markdoc/test/fixtures/render-typographer/src/content/config.ts new file mode 100644 index 000000000000..629486e48aa5 --- /dev/null +++ b/packages/integrations/markdoc/test/fixtures/render-typographer/src/content/config.ts @@ -0,0 +1,7 @@ +import { defineCollection } from 'astro:content'; + +const blog = defineCollection({}); + +export const collections = { + blog, +}; diff --git a/packages/integrations/markdoc/test/fixtures/render-with-components/src/content/config.ts b/packages/integrations/markdoc/test/fixtures/render-with-components/src/content/config.ts new file mode 100644 index 000000000000..629486e48aa5 --- /dev/null +++ b/packages/integrations/markdoc/test/fixtures/render-with-components/src/content/config.ts @@ -0,0 +1,7 @@ +import { defineCollection } from 'astro:content'; + +const blog = defineCollection({}); + +export const collections = { + blog, +}; diff --git a/packages/integrations/markdoc/test/fixtures/render-with-config/src/content/config.ts b/packages/integrations/markdoc/test/fixtures/render-with-config/src/content/config.ts new file mode 100644 index 000000000000..629486e48aa5 --- /dev/null +++ b/packages/integrations/markdoc/test/fixtures/render-with-config/src/content/config.ts @@ -0,0 +1,7 @@ +import { defineCollection } from 'astro:content'; + +const blog = defineCollection({}); + +export const collections = { + blog, +}; diff --git a/packages/integrations/markdoc/test/fixtures/render-with-extends-components/src/content/config.ts b/packages/integrations/markdoc/test/fixtures/render-with-extends-components/src/content/config.ts new file mode 100644 index 000000000000..629486e48aa5 --- /dev/null +++ b/packages/integrations/markdoc/test/fixtures/render-with-extends-components/src/content/config.ts @@ -0,0 +1,7 @@ +import { defineCollection } from 'astro:content'; + +const blog = defineCollection({}); + +export const collections = { + blog, +}; diff --git a/packages/integrations/markdoc/test/fixtures/render-with-indented-components/src/content/config.ts b/packages/integrations/markdoc/test/fixtures/render-with-indented-components/src/content/config.ts new file mode 100644 index 000000000000..629486e48aa5 --- /dev/null +++ b/packages/integrations/markdoc/test/fixtures/render-with-indented-components/src/content/config.ts @@ -0,0 +1,7 @@ +import { defineCollection } from 'astro:content'; + +const blog = defineCollection({}); + +export const collections = { + blog, +}; From a7cccef7963abf3a3a71c4601ce6e44f7b736da6 Mon Sep 17 00:00:00 2001 From: Matt Kane Date: Mon, 16 Sep 2024 11:26:23 +0100 Subject: [PATCH 25/43] Test updates --- packages/integrations/mdx/test/css-head-mdx.test.js | 4 ++++ .../mdx/test/fixtures/mdx-images/src/content/config.ts | 5 +++++ 2 files changed, 9 insertions(+) create mode 100644 packages/integrations/mdx/test/fixtures/mdx-images/src/content/config.ts diff --git a/packages/integrations/mdx/test/css-head-mdx.test.js b/packages/integrations/mdx/test/css-head-mdx.test.js index 96ee7c9001b3..894e98426546 100644 --- a/packages/integrations/mdx/test/css-head-mdx.test.js +++ b/packages/integrations/mdx/test/css-head-mdx.test.js @@ -15,6 +15,10 @@ describe('Head injection w/ MDX', () => { integrations: [mdx()], // test suite was authored when inlineStylesheets defaulted to never build: { inlineStylesheets: 'never' }, + legacy: { + // There is currently an issue with CSS injection in emulated mode + legacyContentCollections: true, + } }); }); diff --git a/packages/integrations/mdx/test/fixtures/mdx-images/src/content/config.ts b/packages/integrations/mdx/test/fixtures/mdx-images/src/content/config.ts new file mode 100644 index 000000000000..14443e78d6f7 --- /dev/null +++ b/packages/integrations/mdx/test/fixtures/mdx-images/src/content/config.ts @@ -0,0 +1,5 @@ +import { defineCollection, z } from 'astro:content'; + +const blog = defineCollection({}); + +export const collections = { blog }; From a030814cc9e1f93d457fb22d2299d2485c55bce7 Mon Sep 17 00:00:00 2001 From: Matt Kane Date: Mon, 16 Sep 2024 12:09:54 +0100 Subject: [PATCH 26/43] Update changeset --- .changeset/quick-onions-leave.md | 32 +++++++++++++++---- .../propagated-assets/astro.config.mjs | 4 +++ .../propagated-assets/src/content/config.ts | 7 ---- 3 files changed, 30 insertions(+), 13 deletions(-) delete mode 100644 packages/integrations/markdoc/test/fixtures/propagated-assets/src/content/config.ts diff --git a/.changeset/quick-onions-leave.md b/.changeset/quick-onions-leave.md index be08b0b6983c..0b40316b14af 100644 --- a/.changeset/quick-onions-leave.md +++ b/.changeset/quick-onions-leave.md @@ -2,13 +2,33 @@ 'astro': patch --- -Implements legacy collections using `glob()` loader +Implements legacy content and data collections using `glob()` loader -Changes default behavior to emulate legacy content and data collections using content layer and the `glob()` loader if they are defined in the config. These emulated collections use `glob()`, with matching patterns to exclude underscores, but with the +:warning: **BREAKING CHANGE FOR LEGACY CONTENT COLLECTIONS** :warning: -- Data collections have a non-slugified ID generated from the filename -- Content collections are stored with a new `legacyId` field based on the filename. When this is set on an entry the runtime returns an object that is compatible with legacy collections: the `id` is set to the legacy ID, the `slug` is set and an `entry.render()` method is set. +By default, collections that use the the old types (content or data) are now implemented using the glob loader, with extra backward-compat handling. This includes any collection without a `loader` defined. -It does not support the `render` frontmatter field, and does not generate implicit collections for folders that don't have a defined collection. +Any legacy content collections are handled like this: -It adds a `legacy.legacyContentCollections` flag which re-enables the behavior from 4.14: legacy collections are handled using the old code, and content layer collections can't be created in `src/content`. +- a `glob` loader collection is defined, with patterns that match the previous handling (matches `src/content//**/*.md` and other content extensions depending on installed integrations, with underscore-prefixed files and folders ignored) +- When used in the runtime, the entries have an ID based on the filename in the same format as legacy collections +- A `slug` field is added with the same format as before +- A `render()` method is added to the entry, so they can be called using `entry.render()` +- `getEntryBySlug` is supported + +Legacy data collections are handled like this: + +- a `glob` loader collection is defined, with patterns that match the previous handling (matches `src/content//**/*{.json,.yaml}` and other data extensions, with underscore-prefixed files and folders ignored) +- Entries have an ID that is not slugified +- `getDataEntryById` is supported + +While these emulate most of the features of legacy collections, they have these differences: + +- No implicit collections. In order to be generated, a collection must be defined in `config.ts`. For legacy collections these can just be empty declarations: e.g.`const blog = defineCollection({})`. Removing implicit collections means that we can allow content layer collections in `src/content`. +- The `layout` field is not supported in Markdown +- Experimental content collection cache is not supported +- Sort order of generated collections is non-deterministic and platform-dependent. +- `image().refine()` is not supported +- the key for `getEntry` is typed as `string`, rather than having types for every entry. + +A new config flag `legacy.legacyContentCollections` is added for users that need the old behavior. When set, collections in `src/content` are processed in the same way as before rather than being implemented with glob - including implicit collections. When set, content layer collections are forbidden in `src/content`, and will fail a build if defined. diff --git a/packages/integrations/markdoc/test/fixtures/propagated-assets/astro.config.mjs b/packages/integrations/markdoc/test/fixtures/propagated-assets/astro.config.mjs index 1bd8ba93f461..ba419319466a 100644 --- a/packages/integrations/markdoc/test/fixtures/propagated-assets/astro.config.mjs +++ b/packages/integrations/markdoc/test/fixtures/propagated-assets/astro.config.mjs @@ -4,4 +4,8 @@ import { defineConfig } from 'astro/config'; // https://astro.build/config export default defineConfig({ integrations: [markdoc()], + legacy: { + // Content layer backwards compatibility has a bug in header propagation + legacyContentCollections: true, + }, }); diff --git a/packages/integrations/markdoc/test/fixtures/propagated-assets/src/content/config.ts b/packages/integrations/markdoc/test/fixtures/propagated-assets/src/content/config.ts deleted file mode 100644 index 629486e48aa5..000000000000 --- a/packages/integrations/markdoc/test/fixtures/propagated-assets/src/content/config.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { defineCollection } from 'astro:content'; - -const blog = defineCollection({}); - -export const collections = { - blog, -}; From 67a4253c0bf548fee8ff38ce492e837c34d61021 Mon Sep 17 00:00:00 2001 From: Matt Kane Date: Mon, 16 Sep 2024 12:31:29 +0100 Subject: [PATCH 27/43] Test --- packages/astro/src/types/public/config.ts | 2 +- packages/astro/test/content-collection-references.test.js | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/astro/src/types/public/config.ts b/packages/astro/src/types/public/config.ts index e8717c0ea083..e1058f4481dd 100644 --- a/packages/astro/src/types/public/config.ts +++ b/packages/astro/src/types/public/config.ts @@ -1545,7 +1545,7 @@ export interface AstroUserConfig { * @default `false` * @version 5.0.0 * @description - * Enable legacy behavior for content collections. This flag is intended to help users migrate from Astro 4.x to 5.x. + * Enable legacy behavior for content collections. * If it enabled, data and content collections are handled using the legacy code instead of Content Layer API, including generating * implicit collections for directories in `src/content`. Any collections with a loader defined will still use the Content Layer API. * When enabled, you cannot use the glob loader for any collections in the `src/content` directory, and they will instead be handled by diff --git a/packages/astro/test/content-collection-references.test.js b/packages/astro/test/content-collection-references.test.js index 6114b0f214ee..455c443e1736 100644 --- a/packages/astro/test/content-collection-references.test.js +++ b/packages/astro/test/content-collection-references.test.js @@ -18,7 +18,8 @@ describe('Content Collections - references', () => { if (mode === 'prod') { await fixture.build({ force: true }); } else if (mode === 'dev') { - devServer = await fixture.startDevServer(); + devServer = await fixture.startDevServer({ force: true }); + await fixture.onNextDataStoreChange(); } }); From e1b94914166994f290352fb681ce7701fef23859 Mon Sep 17 00:00:00 2001 From: Matt Kane Date: Mon, 16 Sep 2024 13:24:59 +0000 Subject: [PATCH 28/43] Remove wait in test --- packages/astro/test/content-collection-references.test.js | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/astro/test/content-collection-references.test.js b/packages/astro/test/content-collection-references.test.js index 455c443e1736..c91638882c53 100644 --- a/packages/astro/test/content-collection-references.test.js +++ b/packages/astro/test/content-collection-references.test.js @@ -19,7 +19,6 @@ describe('Content Collections - references', () => { await fixture.build({ force: true }); } else if (mode === 'dev') { devServer = await fixture.startDevServer({ force: true }); - await fixture.onNextDataStoreChange(); } }); From 5200a5dd7841e259098f637ef654c11bc2993f70 Mon Sep 17 00:00:00 2001 From: Matt Kane Date: Mon, 16 Sep 2024 14:50:58 +0100 Subject: [PATCH 29/43] Handle race condition --- packages/astro/test/content-collection-references.test.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/packages/astro/test/content-collection-references.test.js b/packages/astro/test/content-collection-references.test.js index c91638882c53..8e5510cebf03 100644 --- a/packages/astro/test/content-collection-references.test.js +++ b/packages/astro/test/content-collection-references.test.js @@ -19,6 +19,9 @@ describe('Content Collections - references', () => { await fixture.build({ force: true }); } else if (mode === 'dev') { devServer = await fixture.startDevServer({ force: true }); + await fixture.onNextDataStoreChange(1000).catch(() => { + // Ignore timeout, because it may have saved before we get here. + }); } }); From 869dc3a6d634abf7011a5a0c80d06af5c007901a Mon Sep 17 00:00:00 2001 From: Matt Kane Date: Tue, 17 Sep 2024 14:30:33 +0100 Subject: [PATCH 30/43] Lock --- pnpm-lock.yaml | 252 ++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 210 insertions(+), 42 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d482acaad143..234d4e143f03 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -116,13 +116,13 @@ importers: examples/basics: dependencies: astro: - specifier: ^5.0.0-alpha.8 + specifier: ^5.0.0-beta.1 version: link:../../packages/astro examples/blog: dependencies: '@astrojs/mdx': - specifier: ^4.0.0-alpha.2 + specifier: ^4.0.0-beta.1 version: link:../../packages/integrations/mdx '@astrojs/rss': specifier: ^4.0.7 @@ -131,13 +131,13 @@ importers: specifier: ^3.1.6 version: link:../../packages/integrations/sitemap astro: - specifier: ^5.0.0-alpha.8 + specifier: ^5.0.0-beta.1 version: link:../../packages/astro examples/component: devDependencies: astro: - specifier: ^5.0.0-alpha.8 + specifier: ^5.0.0-beta.1 version: link:../../packages/astro examples/container-with-vitest: @@ -146,7 +146,7 @@ importers: specifier: ^3.6.2 version: link:../../packages/integrations/react astro: - specifier: ^5.0.0-alpha.8 + specifier: ^5.0.0-beta.1 version: link:../../packages/astro react: specifier: ^18.3.1 @@ -177,7 +177,7 @@ importers: specifier: ^3.14.1 version: 3.14.1 astro: - specifier: ^5.0.0-alpha.8 + specifier: ^5.0.0-beta.1 version: link:../../packages/astro examples/framework-multiple: @@ -192,10 +192,10 @@ importers: specifier: ^4.4.1 version: link:../../packages/integrations/solid '@astrojs/svelte': - specifier: ^6.0.0-alpha.0 + specifier: ^5.7.0 version: link:../../packages/integrations/svelte '@astrojs/vue': - specifier: ^5.0.0-alpha.0 + specifier: ^4.5.0 version: link:../../packages/integrations/vue '@types/react': specifier: ^18.3.3 @@ -204,7 +204,7 @@ importers: specifier: ^18.3.0 version: 18.3.0 astro: - specifier: ^5.0.0-alpha.8 + specifier: ^5.0.0-beta.1 version: link:../../packages/astro preact: specifier: ^10.23.2 @@ -234,7 +234,7 @@ importers: specifier: ^1.3.0 version: 1.3.0(preact@10.23.2) astro: - specifier: ^5.0.0-alpha.8 + specifier: ^5.0.0-beta.1 version: link:../../packages/astro preact: specifier: ^10.23.2 @@ -252,7 +252,7 @@ importers: specifier: ^18.3.0 version: 18.3.0 astro: - specifier: ^5.0.0-alpha.8 + specifier: ^5.0.0-beta.1 version: link:../../packages/astro react: specifier: ^18.3.1 @@ -267,7 +267,7 @@ importers: specifier: ^4.4.1 version: link:../../packages/integrations/solid astro: - specifier: ^5.0.0-alpha.8 + specifier: ^5.0.0-beta.1 version: link:../../packages/astro solid-js: specifier: ^1.8.22 @@ -276,10 +276,10 @@ importers: examples/framework-svelte: dependencies: '@astrojs/svelte': - specifier: ^6.0.0-alpha.0 + specifier: ^5.7.0 version: link:../../packages/integrations/svelte astro: - specifier: ^5.0.0-alpha.8 + specifier: ^5.0.0-beta.1 version: link:../../packages/astro svelte: specifier: ^4.2.19 @@ -288,10 +288,10 @@ importers: examples/framework-vue: dependencies: '@astrojs/vue': - specifier: ^5.0.0-alpha.0 + specifier: ^4.5.0 version: link:../../packages/integrations/vue astro: - specifier: ^5.0.0-alpha.8 + specifier: ^5.0.0-beta.1 version: link:../../packages/astro vue: specifier: ^3.4.38 @@ -303,13 +303,13 @@ importers: specifier: ^9.0.0-alpha.1 version: 9.0.0-alpha.1(astro@packages+astro) astro: - specifier: ^5.0.0-alpha.8 + specifier: ^5.0.0-beta.1 version: link:../../packages/astro examples/integration: devDependencies: astro: - specifier: ^5.0.0-alpha.8 + specifier: ^5.0.0-beta.1 version: link:../../packages/astro examples/middleware: @@ -318,7 +318,7 @@ importers: specifier: ^9.0.0-alpha.1 version: 9.0.0-alpha.1(astro@packages+astro) astro: - specifier: ^5.0.0-alpha.8 + specifier: ^5.0.0-beta.1 version: link:../../packages/astro html-minifier: specifier: ^4.0.0 @@ -331,19 +331,19 @@ importers: examples/minimal: dependencies: astro: - specifier: ^5.0.0-alpha.8 + specifier: ^5.0.0-beta.1 version: link:../../packages/astro examples/non-html-pages: dependencies: astro: - specifier: ^5.0.0-alpha.8 + specifier: ^5.0.0-beta.1 version: link:../../packages/astro examples/portfolio: dependencies: astro: - specifier: ^5.0.0-alpha.8 + specifier: ^5.0.0-beta.1 version: link:../../packages/astro examples/server-islands: @@ -355,7 +355,7 @@ importers: specifier: ^3.6.2 version: link:../../packages/integrations/react '@astrojs/tailwind': - specifier: ^6.0.0-alpha.0 + specifier: ^5.1.0 version: link:../../packages/integrations/tailwind '@fortawesome/fontawesome-free': specifier: ^6.6.0 @@ -370,7 +370,7 @@ importers: specifier: ^18.3.0 version: 18.3.0 astro: - specifier: ^5.0.0-alpha.8 + specifier: ^5.0.0-beta.1 version: link:../../packages/astro postcss: specifier: ^8.4.45 @@ -391,10 +391,10 @@ importers: specifier: ^9.0.0-alpha.1 version: 9.0.0-alpha.1(astro@packages+astro) '@astrojs/svelte': - specifier: ^6.0.0-alpha.0 + specifier: ^5.7.0 version: link:../../packages/integrations/svelte astro: - specifier: ^5.0.0-alpha.8 + specifier: ^5.0.0-beta.1 version: link:../../packages/astro svelte: specifier: ^4.2.19 @@ -403,7 +403,7 @@ importers: examples/starlog: dependencies: astro: - specifier: ^5.0.0-alpha.8 + specifier: ^5.0.0-beta.1 version: link:../../packages/astro sass: specifier: ^1.78.0 @@ -415,7 +415,7 @@ importers: examples/toolbar-app: devDependencies: astro: - specifier: ^5.0.0-alpha.8 + specifier: ^5.0.0-beta.1 version: link:../../packages/astro examples/view-transitions: @@ -424,28 +424,28 @@ importers: specifier: ^9.0.0-alpha.1 version: 9.0.0-alpha.1(astro@packages+astro) '@astrojs/tailwind': - specifier: ^6.0.0-alpha.0 + specifier: ^5.1.0 version: link:../../packages/integrations/tailwind astro: - specifier: ^5.0.0-alpha.8 + specifier: ^5.0.0-beta.1 version: link:../../packages/astro examples/with-markdoc: dependencies: '@astrojs/markdoc': - specifier: ^1.0.0-alpha.1 + specifier: ^0.11.5-beta.0 version: link:../../packages/integrations/markdoc astro: - specifier: ^5.0.0-alpha.8 + specifier: ^5.0.0-beta.1 version: link:../../packages/astro examples/with-markdown-plugins: dependencies: '@astrojs/markdown-remark': - specifier: ^6.0.0-alpha.1 + specifier: ^6.0.0-beta.1 version: link:../../packages/markdown/remark astro: - specifier: ^5.0.0-alpha.8 + specifier: ^5.0.0-beta.1 version: link:../../packages/astro hast-util-select: specifier: ^6.0.2 @@ -466,19 +466,19 @@ importers: examples/with-markdown-shiki: dependencies: astro: - specifier: ^5.0.0-alpha.8 + specifier: ^5.0.0-beta.1 version: link:../../packages/astro examples/with-mdx: dependencies: '@astrojs/mdx': - specifier: ^4.0.0-alpha.2 + specifier: ^4.0.0-beta.1 version: link:../../packages/integrations/mdx '@astrojs/preact': specifier: ^3.5.3 version: link:../../packages/integrations/preact astro: - specifier: ^5.0.0-alpha.8 + specifier: ^5.0.0-beta.1 version: link:../../packages/astro preact: specifier: ^10.23.2 @@ -493,7 +493,7 @@ importers: specifier: ^0.5.2 version: 0.5.2(nanostores@0.11.3)(preact@10.23.2) astro: - specifier: ^5.0.0-alpha.8 + specifier: ^5.0.0-beta.1 version: link:../../packages/astro nanostores: specifier: ^0.11.3 @@ -505,16 +505,16 @@ importers: examples/with-tailwindcss: dependencies: '@astrojs/mdx': - specifier: ^4.0.0-alpha.2 + specifier: ^4.0.0-beta.1 version: link:../../packages/integrations/mdx '@astrojs/tailwind': - specifier: ^6.0.0-alpha.0 + specifier: ^5.1.0 version: link:../../packages/integrations/tailwind '@types/canvas-confetti': specifier: ^1.6.4 version: 1.6.4 astro: - specifier: ^5.0.0-alpha.8 + specifier: ^5.0.0-beta.1 version: link:../../packages/astro autoprefixer: specifier: ^10.4.20 @@ -532,7 +532,7 @@ importers: examples/with-vitest: dependencies: astro: - specifier: ^5.0.0-alpha.8 + specifier: ^5.0.0-beta.1 version: link:../../packages/astro vitest: specifier: ^2.0.5 @@ -839,6 +839,9 @@ importers: unified: specifier: ^11.0.5 version: 11.0.5 + vitest: + specifier: ^2.1.1 + version: 2.1.1(@types/node@18.19.31)(jsdom@23.2.0)(sass@1.78.0) packages/astro-prism: dependencies: @@ -4173,6 +4176,15 @@ importers: specifier: workspace:* version: link:../../.. + packages/astro/test/fixtures/vitest: + dependencies: + astro: + specifier: workspace:* + version: link:../../.. + vitest: + specifier: ^2.1.1 + version: 2.1.1(@types/node@18.19.31)(jsdom@23.2.0)(sass@1.78.0) + packages/astro/test/fixtures/vue-component: dependencies: '@astrojs/vue': @@ -7202,21 +7214,50 @@ packages: '@vitest/expect@2.0.5': resolution: {integrity: sha512-yHZtwuP7JZivj65Gxoi8upUN2OzHTi3zVfjwdpu2WrvCZPLwsJ2Ey5ILIPccoW23dd/zQBlJ4/dhi7DWNyXCpA==} + '@vitest/expect@2.1.1': + resolution: {integrity: sha512-YeueunS0HiHiQxk+KEOnq/QMzlUuOzbU1Go+PgAsHvvv3tUkJPm9xWt+6ITNTlzsMXUjmgm5T+U7KBPK2qQV6w==} + + '@vitest/mocker@2.1.1': + resolution: {integrity: sha512-LNN5VwOEdJqCmJ/2XJBywB11DLlkbY0ooDJW3uRX5cZyYCrc4PI/ePX0iQhE3BiEGiQmK4GE7Q/PqCkkaiPnrA==} + peerDependencies: + msw: ^2.3.5 + vite: ^5.0.0 + peerDependenciesMeta: + msw: + optional: true + vite: + optional: true + '@vitest/pretty-format@2.0.5': resolution: {integrity: sha512-h8k+1oWHfwTkyTkb9egzwNMfJAEx4veaPSnMeKbVSjp4euqGSbQlm5+6VHwTr7u4FJslVVsUG5nopCaAYdOmSQ==} + '@vitest/pretty-format@2.1.1': + resolution: {integrity: sha512-SjxPFOtuINDUW8/UkElJYQSFtnWX7tMksSGW0vfjxMneFqxVr8YJ979QpMbDW7g+BIiq88RAGDjf7en6rvLPPQ==} + '@vitest/runner@2.0.5': resolution: {integrity: sha512-TfRfZa6Bkk9ky4tW0z20WKXFEwwvWhRY+84CnSEtq4+3ZvDlJyY32oNTJtM7AW9ihW90tX/1Q78cb6FjoAs+ig==} + '@vitest/runner@2.1.1': + resolution: {integrity: sha512-uTPuY6PWOYitIkLPidaY5L3t0JJITdGTSwBtwMjKzo5O6RCOEncz9PUN+0pDidX8kTHYjO0EwUIvhlGpnGpxmA==} + '@vitest/snapshot@2.0.5': resolution: {integrity: sha512-SgCPUeDFLaM0mIUHfaArq8fD2WbaXG/zVXjRupthYfYGzc8ztbFbu6dUNOblBG7XLMR1kEhS/DNnfCZ2IhdDew==} + '@vitest/snapshot@2.1.1': + resolution: {integrity: sha512-BnSku1WFy7r4mm96ha2FzN99AZJgpZOWrAhtQfoxjUU5YMRpq1zmHRq7a5K9/NjqonebO7iVDla+VvZS8BOWMw==} + '@vitest/spy@2.0.5': resolution: {integrity: sha512-c/jdthAhvJdpfVuaexSrnawxZz6pywlTPe84LUB2m/4t3rl2fTo9NFGBG4oWgaD+FTgDDV8hJ/nibT7IfH3JfA==} + '@vitest/spy@2.1.1': + resolution: {integrity: sha512-ZM39BnZ9t/xZ/nF4UwRH5il0Sw93QnZXd9NAZGRpIgj0yvVwPpLd702s/Cx955rGaMlyBQkZJ2Ir7qyY48VZ+g==} + '@vitest/utils@2.0.5': resolution: {integrity: sha512-d8HKbqIcya+GR67mkZbrzhS5kKhtp8dQLcmRZLGTscGVg7yImT82cIrhtn2L8+VujWcy6KZweApgNmPsTAO/UQ==} + '@vitest/utils@2.1.1': + resolution: {integrity: sha512-Y6Q9TsI+qJ2CC0ZKj6VBb+T8UPz593N113nnUykqwANqhgf3QkZeHFlusgKLTqrnVHbj/XDKZcDHol+dxVT+rQ==} + '@volar/kit@2.4.0': resolution: {integrity: sha512-uqwtPKhrbnP+3f8hs+ltDYXLZ6Wdbs54IzkaPocasI4aBhqWLht5qXctE1MqpZU52wbH359E0u9nhxEFmyon+w==} peerDependencies: @@ -10345,6 +10386,9 @@ packages: tinybench@2.8.0: resolution: {integrity: sha512-1/eK7zUnIklz4JUUlL+658n58XO2hHLQfSk1Zf2LKieUjxidN16eKFEoDEfjHc3ohofSSqK3X5yO6VGb6iW8Lw==} + tinybench@2.9.0: + resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} + tinyexec@0.3.0: resolution: {integrity: sha512-tVGE0mVJPGb0chKhqmsoosjsS+qUnJVGJpZgsHYQcGoPlG3B51R3PouqTgEGH2Dc9jjFyOqOpix6ZHNMXp1FZg==} @@ -10642,6 +10686,11 @@ packages: engines: {node: ^18.0.0 || >=20.0.0} hasBin: true + vite-node@2.1.1: + resolution: {integrity: sha512-N/mGckI1suG/5wQI35XeR9rsMsPqKXzq1CdUndzVstBj/HvyxxGctwnK6WX43NGt5L3Z5tcRf83g4TITKJhPrA==} + engines: {node: ^18.0.0 || >=20.0.0} + hasBin: true + vite-plugin-inspect@0.8.7: resolution: {integrity: sha512-/XXou3MVc13A5O9/2Nd6xczjrUwt7ZyI9h8pTnUMkr5SshLcb0PJUOVq2V+XVkdeU4njsqAtmK87THZuO2coGA==} engines: {node: '>=14'} @@ -10750,6 +10799,31 @@ packages: jsdom: optional: true + vitest@2.1.1: + resolution: {integrity: sha512-97We7/VC0e9X5zBVkvt7SGQMGrRtn3KtySFQG5fpaMlS+l62eeXRQO633AYhSTC3z7IMebnPPNjGXVGNRFlxBA==} + engines: {node: ^18.0.0 || >=20.0.0} + hasBin: true + peerDependencies: + '@edge-runtime/vm': '*' + '@types/node': ^18.0.0 || >=20.0.0 + '@vitest/browser': 2.1.1 + '@vitest/ui': 2.1.1 + happy-dom: '*' + jsdom: '*' + peerDependenciesMeta: + '@edge-runtime/vm': + optional: true + '@types/node': + optional: true + '@vitest/browser': + optional: true + '@vitest/ui': + optional: true + happy-dom: + optional: true + jsdom: + optional: true + volar-service-css@0.0.61: resolution: {integrity: sha512-Ct9L/w+IB1JU8F4jofcNCGoHy6TF83aiapfZq9A0qYYpq+Kk5dH+ONS+rVZSsuhsunq8UvAuF8Gk6B8IFLfniw==} peerDependencies: @@ -12796,25 +12870,59 @@ snapshots: chai: 5.1.1 tinyrainbow: 1.2.0 + '@vitest/expect@2.1.1': + dependencies: + '@vitest/spy': 2.1.1 + '@vitest/utils': 2.1.1 + chai: 5.1.1 + tinyrainbow: 1.2.0 + + '@vitest/mocker@2.1.1(vite@5.4.3(@types/node@18.19.31)(sass@1.78.0))': + dependencies: + '@vitest/spy': 2.1.1 + estree-walker: 3.0.3 + magic-string: 0.30.11 + optionalDependencies: + vite: 5.4.3(@types/node@18.19.31)(sass@1.78.0) + '@vitest/pretty-format@2.0.5': dependencies: tinyrainbow: 1.2.0 + '@vitest/pretty-format@2.1.1': + dependencies: + tinyrainbow: 1.2.0 + '@vitest/runner@2.0.5': dependencies: '@vitest/utils': 2.0.5 pathe: 1.1.2 + '@vitest/runner@2.1.1': + dependencies: + '@vitest/utils': 2.1.1 + pathe: 1.1.2 + '@vitest/snapshot@2.0.5': dependencies: '@vitest/pretty-format': 2.0.5 magic-string: 0.30.11 pathe: 1.1.2 + '@vitest/snapshot@2.1.1': + dependencies: + '@vitest/pretty-format': 2.1.1 + magic-string: 0.30.11 + pathe: 1.1.2 + '@vitest/spy@2.0.5': dependencies: tinyspy: 3.0.0 + '@vitest/spy@2.1.1': + dependencies: + tinyspy: 3.0.0 + '@vitest/utils@2.0.5': dependencies: '@vitest/pretty-format': 2.0.5 @@ -12822,6 +12930,12 @@ snapshots: loupe: 3.1.1 tinyrainbow: 1.2.0 + '@vitest/utils@2.1.1': + dependencies: + '@vitest/pretty-format': 2.1.1 + loupe: 3.1.1 + tinyrainbow: 1.2.0 + '@volar/kit@2.4.0(typescript@5.5.4)': dependencies: '@volar/language-service': 2.4.0 @@ -16529,6 +16643,8 @@ snapshots: tinybench@2.8.0: {} + tinybench@2.9.0: {} + tinyexec@0.3.0: {} tinypool@1.0.0: {} @@ -16821,6 +16937,23 @@ snapshots: - supports-color - terser + vite-node@2.1.1(@types/node@18.19.31)(sass@1.78.0): + dependencies: + cac: 6.7.14 + debug: 4.3.7 + pathe: 1.1.2 + vite: 5.4.3(@types/node@18.19.31)(sass@1.78.0) + transitivePeerDependencies: + - '@types/node' + - less + - lightningcss + - sass + - sass-embedded + - stylus + - sugarss + - supports-color + - terser + vite-plugin-inspect@0.8.7(rollup@4.21.2)(vite@5.4.3(@types/node@18.19.31)(sass@1.78.0)): dependencies: '@antfu/utils': 0.7.10 @@ -16938,6 +17071,41 @@ snapshots: - supports-color - terser + vitest@2.1.1(@types/node@18.19.31)(jsdom@23.2.0)(sass@1.78.0): + dependencies: + '@vitest/expect': 2.1.1 + '@vitest/mocker': 2.1.1(vite@5.4.3(@types/node@18.19.31)(sass@1.78.0)) + '@vitest/pretty-format': 2.1.1 + '@vitest/runner': 2.1.1 + '@vitest/snapshot': 2.1.1 + '@vitest/spy': 2.1.1 + '@vitest/utils': 2.1.1 + chai: 5.1.1 + debug: 4.3.7 + magic-string: 0.30.11 + pathe: 1.1.2 + std-env: 3.7.0 + tinybench: 2.9.0 + tinyexec: 0.3.0 + tinypool: 1.0.0 + tinyrainbow: 1.2.0 + vite: 5.4.3(@types/node@18.19.31)(sass@1.78.0) + vite-node: 2.1.1(@types/node@18.19.31)(sass@1.78.0) + why-is-node-running: 2.3.0 + optionalDependencies: + '@types/node': 18.19.31 + jsdom: 23.2.0 + transitivePeerDependencies: + - less + - lightningcss + - msw + - sass + - sass-embedded + - stylus + - sugarss + - supports-color + - terser + volar-service-css@0.0.61(@volar/language-service@2.4.0): dependencies: vscode-css-languageservice: 6.3.0 From 53396753b9bb79e56e99da8b1ffe78919a2d2f6b Mon Sep 17 00:00:00 2001 From: Matt Kane Date: Tue, 1 Oct 2024 12:26:42 +0100 Subject: [PATCH 31/43] chore: changes from review --- .changeset/quick-onions-leave.md | 1 - packages/astro/src/content/consts.ts | 2 +- packages/astro/src/content/runtime.ts | 10 +- packages/astro/src/types/public/config.ts | 2 +- pnpm-lock.yaml | 3169 ++++++++++----------- 5 files changed, 1506 insertions(+), 1678 deletions(-) diff --git a/.changeset/quick-onions-leave.md b/.changeset/quick-onions-leave.md index 0b40316b14af..64c5d150dc5a 100644 --- a/.changeset/quick-onions-leave.md +++ b/.changeset/quick-onions-leave.md @@ -26,7 +26,6 @@ While these emulate most of the features of legacy collections, they have these - No implicit collections. In order to be generated, a collection must be defined in `config.ts`. For legacy collections these can just be empty declarations: e.g.`const blog = defineCollection({})`. Removing implicit collections means that we can allow content layer collections in `src/content`. - The `layout` field is not supported in Markdown -- Experimental content collection cache is not supported - Sort order of generated collections is non-deterministic and platform-dependent. - `image().refine()` is not supported - the key for `getEntry` is typed as `string`, rather than having types for every entry. diff --git a/packages/astro/src/content/consts.ts b/packages/astro/src/content/consts.ts index 51eb6b78ed02..76218d7e8aea 100644 --- a/packages/astro/src/content/consts.ts +++ b/packages/astro/src/content/consts.ts @@ -38,6 +38,6 @@ export const DATA_STORE_FILE = 'data-store.json'; export const ASSET_IMPORTS_FILE = 'content-assets.mjs'; export const MODULES_IMPORTS_FILE = 'content-modules.mjs'; export const COLLECTIONS_MANIFEST_FILE = 'collections/collections.json'; -export const COLLECTIONS_DIR = 'collections/' +export const COLLECTIONS_DIR = 'collections/'; export const CONTENT_LAYER_TYPE = 'content_layer'; diff --git a/packages/astro/src/content/runtime.ts b/packages/astro/src/content/runtime.ts index 177fa8201f67..cf4aa7cd6167 100644 --- a/packages/astro/src/content/runtime.ts +++ b/packages/astro/src/content/runtime.ts @@ -265,10 +265,16 @@ type DataEntryResult = { type EntryLookupObject = { collection: string; id: string } | { collection: string; slug: string }; -function emulateLegacyEntry({ legacyId, id, ...entry }: DataEntry) { - const legacyEntry = { ...entry, id: legacyId!, slug: id }; +function emulateLegacyEntry(entry: DataEntry) { + // Define this first so it's in scope for the render function + const legacyEntry = { + ...entry, + id: entry.legacyId!, + slug: entry.id, + }; return { ...legacyEntry, + // Define separately so the render function isn't included in the object passed to `renderEntry()` render: () => renderEntry(legacyEntry), }; } diff --git a/packages/astro/src/types/public/config.ts b/packages/astro/src/types/public/config.ts index c3cab4e6fcc1..2b9ec8d730fa 100644 --- a/packages/astro/src/types/public/config.ts +++ b/packages/astro/src/types/public/config.ts @@ -1549,7 +1549,7 @@ export interface AstroUserConfig { * @default `false` * @version 5.0.0 * @description - * Enable legacy behavior for content collections. + * Enable legacy behavior for content collections. * If it enabled, data and content collections are handled using the legacy code instead of Content Layer API, including generating * implicit collections for directories in `src/content`. Any collections with a loader defined will still use the Content Layer API. * When enabled, you cannot use the glob loader for any collections in the `src/content` directory, and they will instead be handled by diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 128d7ddbc0df..88e1d316ae63 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -14,7 +14,7 @@ importers: devDependencies: '@astrojs/check': specifier: ^0.9.3 - version: 0.9.3(prettier-plugin-astro@0.14.1)(prettier@3.3.3)(typescript@5.5.4) + version: 0.9.3(prettier-plugin-astro@0.14.1)(prettier@3.3.3)(typescript@5.6.2) '@biomejs/biome': specifier: 1.8.3 version: 1.8.3 @@ -31,14 +31,11 @@ importers: specifier: ^0.21.5 version: 0.21.5 eslint: - specifier: ^9.10.0 - version: 9.10.0(jiti@1.21.0) - eslint-plugin-no-only-tests: - specifier: ^3.3.0 - version: 3.3.0 + specifier: ^9.11.1 + version: 9.11.1(jiti@1.21.0) eslint-plugin-regexp: specifier: ^2.6.0 - version: 2.6.0(eslint@9.10.0(jiti@1.21.0)) + version: 2.6.0(eslint@9.11.1(jiti@1.21.0)) globby: specifier: ^14.0.2 version: 14.0.2 @@ -52,14 +49,14 @@ importers: specifier: ^0.14.1 version: 0.14.1 turbo: - specifier: ^2.1.1 - version: 2.1.1 + specifier: ^2.1.2 + version: 2.1.3 typescript: - specifier: ~5.5.4 - version: 5.5.4 + specifier: ~5.6.2 + version: 5.6.2 typescript-eslint: - specifier: ^8.4.0 - version: 8.4.0(eslint@9.10.0(jiti@1.21.0))(typescript@5.5.4) + specifier: ^8.7.0 + version: 8.8.0(eslint@9.11.1(jiti@1.21.0))(typescript@5.6.2) benchmark: dependencies: @@ -67,8 +64,8 @@ importers: specifier: workspace:* version: link:../packages/integrations/mdx '@astrojs/node': - specifier: ^8.3.3 - version: 8.3.3(astro@packages+astro) + specifier: ^8.3.4 + version: 8.3.4(astro@packages+astro) '@benchmark/timer': specifier: workspace:* version: link:packages/timer @@ -116,7 +113,7 @@ importers: examples/basics: dependencies: astro: - specifier: ^5.0.0-beta.1 + specifier: ^5.0.0-beta.2 version: link:../../packages/astro examples/blog: @@ -131,13 +128,13 @@ importers: specifier: ^3.1.6 version: link:../../packages/integrations/sitemap astro: - specifier: ^5.0.0-beta.1 + specifier: ^5.0.0-beta.2 version: link:../../packages/astro examples/component: devDependencies: astro: - specifier: ^5.0.0-beta.1 + specifier: ^5.0.0-beta.2 version: link:../../packages/astro examples/container-with-vitest: @@ -146,7 +143,7 @@ importers: specifier: ^3.6.2 version: link:../../packages/integrations/react astro: - specifier: ^5.0.0-beta.1 + specifier: ^5.0.0-beta.2 version: link:../../packages/astro react: specifier: ^18.3.1 @@ -155,12 +152,12 @@ importers: specifier: ^18.3.1 version: 18.3.1(react@18.3.1) vitest: - specifier: ^2.0.5 - version: 2.0.5(@types/node@18.19.31)(jsdom@23.2.0)(sass@1.78.0) + specifier: ^2.1.1 + version: 2.1.1(@types/node@18.19.31)(jsdom@23.2.0)(sass@1.79.4) devDependencies: '@types/react': - specifier: ^18.3.5 - version: 18.3.5 + specifier: ^18.3.10 + version: 18.3.10 '@types/react-dom': specifier: ^18.3.0 version: 18.3.0 @@ -177,7 +174,7 @@ importers: specifier: ^3.14.1 version: 3.14.1 astro: - specifier: ^5.0.0-beta.1 + specifier: ^5.0.0-beta.2 version: link:../../packages/astro examples/framework-multiple: @@ -189,26 +186,26 @@ importers: specifier: ^3.6.2 version: link:../../packages/integrations/react '@astrojs/solid-js': - specifier: ^4.4.1 + specifier: ^4.4.2 version: link:../../packages/integrations/solid '@astrojs/svelte': - specifier: ^5.7.0 + specifier: ^6.0.0-beta.0 version: link:../../packages/integrations/svelte '@astrojs/vue': - specifier: ^4.5.0 + specifier: ^5.0.0-beta.0 version: link:../../packages/integrations/vue '@types/react': - specifier: ^18.3.3 - version: 18.3.5 + specifier: ^18.3.10 + version: 18.3.10 '@types/react-dom': specifier: ^18.3.0 version: 18.3.0 astro: - specifier: ^5.0.0-beta.1 + specifier: ^5.0.0-beta.2 version: link:../../packages/astro preact: - specifier: ^10.23.2 - version: 10.23.2 + specifier: ^10.24.1 + version: 10.24.1 react: specifier: ^18.3.1 version: 18.3.1 @@ -216,14 +213,14 @@ importers: specifier: ^18.3.1 version: 18.3.1(react@18.3.1) solid-js: - specifier: ^1.8.22 - version: 1.8.22 + specifier: ^1.9.1 + version: 1.9.1 svelte: specifier: ^4.2.19 version: 4.2.19 vue: - specifier: ^3.5.3 - version: 3.5.3(typescript@5.5.4) + specifier: ^3.5.10 + version: 3.5.10(typescript@5.6.2) examples/framework-preact: dependencies: @@ -232,13 +229,13 @@ importers: version: link:../../packages/integrations/preact '@preact/signals': specifier: ^1.3.0 - version: 1.3.0(preact@10.23.2) + version: 1.3.0(preact@10.24.1) astro: - specifier: ^5.0.0-beta.1 + specifier: ^5.0.0-beta.2 version: link:../../packages/astro preact: - specifier: ^10.23.2 - version: 10.23.2 + specifier: ^10.24.1 + version: 10.24.1 examples/framework-react: dependencies: @@ -246,13 +243,13 @@ importers: specifier: ^3.6.2 version: link:../../packages/integrations/react '@types/react': - specifier: ^18.3.5 - version: 18.3.5 + specifier: ^18.3.10 + version: 18.3.10 '@types/react-dom': specifier: ^18.3.0 version: 18.3.0 astro: - specifier: ^5.0.0-beta.1 + specifier: ^5.0.0-beta.2 version: link:../../packages/astro react: specifier: ^18.3.1 @@ -264,22 +261,22 @@ importers: examples/framework-solid: dependencies: '@astrojs/solid-js': - specifier: ^4.4.1 + specifier: ^4.4.2 version: link:../../packages/integrations/solid astro: - specifier: ^5.0.0-beta.1 + specifier: ^5.0.0-beta.2 version: link:../../packages/astro solid-js: - specifier: ^1.8.22 - version: 1.8.22 + specifier: ^1.9.1 + version: 1.9.1 examples/framework-svelte: dependencies: '@astrojs/svelte': - specifier: ^5.7.0 + specifier: ^6.0.0-beta.0 version: link:../../packages/integrations/svelte astro: - specifier: ^5.0.0-beta.1 + specifier: ^5.0.0-beta.2 version: link:../../packages/astro svelte: specifier: ^4.2.19 @@ -288,14 +285,14 @@ importers: examples/framework-vue: dependencies: '@astrojs/vue': - specifier: ^4.5.0 + specifier: ^5.0.0-beta.0 version: link:../../packages/integrations/vue astro: - specifier: ^5.0.0-beta.1 + specifier: ^5.0.0-beta.2 version: link:../../packages/astro vue: - specifier: ^3.4.38 - version: 3.5.3(typescript@5.5.4) + specifier: ^3.5.10 + version: 3.5.10(typescript@5.6.2) examples/hackernews: dependencies: @@ -303,13 +300,13 @@ importers: specifier: ^9.0.0-alpha.1 version: 9.0.0-alpha.1(astro@packages+astro) astro: - specifier: ^5.0.0-beta.1 + specifier: ^5.0.0-beta.2 version: link:../../packages/astro examples/integration: devDependencies: astro: - specifier: ^5.0.0-beta.1 + specifier: ^5.0.0-beta.2 version: link:../../packages/astro examples/middleware: @@ -318,7 +315,7 @@ importers: specifier: ^9.0.0-alpha.1 version: 9.0.0-alpha.1(astro@packages+astro) astro: - specifier: ^5.0.0-beta.1 + specifier: ^5.0.0-beta.2 version: link:../../packages/astro html-minifier: specifier: ^4.0.0 @@ -331,19 +328,19 @@ importers: examples/minimal: dependencies: astro: - specifier: ^5.0.0-beta.1 + specifier: ^5.0.0-beta.2 version: link:../../packages/astro examples/non-html-pages: dependencies: astro: - specifier: ^5.0.0-beta.1 + specifier: ^5.0.0-beta.2 version: link:../../packages/astro examples/portfolio: dependencies: astro: - specifier: ^5.0.0-beta.1 + specifier: ^5.0.0-beta.2 version: link:../../packages/astro examples/server-islands: @@ -362,19 +359,19 @@ importers: version: 6.6.0 '@tailwindcss/forms': specifier: ^0.5.9 - version: 0.5.9(tailwindcss@3.4.10) + version: 0.5.9(tailwindcss@3.4.13) '@types/react': - specifier: ^18.3.5 - version: 18.3.5 + specifier: ^18.3.10 + version: 18.3.10 '@types/react-dom': specifier: ^18.3.0 version: 18.3.0 astro: - specifier: ^5.0.0-beta.1 + specifier: ^5.0.0-beta.2 version: link:../../packages/astro postcss: - specifier: ^8.4.45 - version: 8.4.45 + specifier: ^8.4.47 + version: 8.4.47 react: specifier: ^18.3.1 version: 18.3.1 @@ -382,8 +379,8 @@ importers: specifier: ^18.3.1 version: 18.3.1(react@18.3.1) tailwindcss: - specifier: ^3.4.10 - version: 3.4.10 + specifier: ^3.4.13 + version: 3.4.13 examples/ssr: dependencies: @@ -391,10 +388,10 @@ importers: specifier: ^9.0.0-alpha.1 version: 9.0.0-alpha.1(astro@packages+astro) '@astrojs/svelte': - specifier: ^5.7.0 + specifier: ^6.0.0-beta.0 version: link:../../packages/integrations/svelte astro: - specifier: ^5.0.0-beta.1 + specifier: ^5.0.0-beta.2 version: link:../../packages/astro svelte: specifier: ^4.2.19 @@ -403,11 +400,11 @@ importers: examples/starlog: dependencies: astro: - specifier: ^5.0.0-beta.1 + specifier: ^5.0.0-beta.2 version: link:../../packages/astro sass: - specifier: ^1.78.0 - version: 1.78.0 + specifier: ^1.79.4 + version: 1.79.4 sharp: specifier: ^0.33.3 version: 0.33.3 @@ -415,7 +412,7 @@ importers: examples/toolbar-app: devDependencies: astro: - specifier: ^5.0.0-beta.1 + specifier: ^5.0.0-beta.2 version: link:../../packages/astro examples/view-transitions: @@ -424,10 +421,10 @@ importers: specifier: ^9.0.0-alpha.1 version: 9.0.0-alpha.1(astro@packages+astro) '@astrojs/tailwind': - specifier: ^5.1.0 + specifier: ^5.1.1 version: link:../../packages/integrations/tailwind astro: - specifier: ^5.0.0-beta.1 + specifier: ^5.0.0-beta.2 version: link:../../packages/astro examples/with-markdoc: @@ -436,7 +433,7 @@ importers: specifier: ^0.11.5-beta.0 version: link:../../packages/integrations/markdoc astro: - specifier: ^5.0.0-beta.1 + specifier: ^5.0.0-beta.2 version: link:../../packages/astro examples/with-markdown-plugins: @@ -445,7 +442,7 @@ importers: specifier: ^6.0.0-beta.1 version: link:../../packages/markdown/remark astro: - specifier: ^5.0.0-beta.1 + specifier: ^5.0.0-beta.2 version: link:../../packages/astro hast-util-select: specifier: ^6.0.2 @@ -466,7 +463,7 @@ importers: examples/with-markdown-shiki: dependencies: astro: - specifier: ^5.0.0-beta.1 + specifier: ^5.0.0-beta.2 version: link:../../packages/astro examples/with-mdx: @@ -478,11 +475,11 @@ importers: specifier: ^3.5.3 version: link:../../packages/integrations/preact astro: - specifier: ^5.0.0-beta.1 + specifier: ^5.0.0-beta.2 version: link:../../packages/astro preact: - specifier: ^10.23.2 - version: 10.23.2 + specifier: ^10.24.1 + version: 10.24.1 examples/with-nanostores: dependencies: @@ -491,16 +488,16 @@ importers: version: link:../../packages/integrations/preact '@nanostores/preact': specifier: ^0.5.2 - version: 0.5.2(nanostores@0.11.3)(preact@10.23.2) + version: 0.5.2(nanostores@0.11.3)(preact@10.24.1) astro: - specifier: ^5.0.0-beta.1 + specifier: ^5.0.0-beta.2 version: link:../../packages/astro nanostores: specifier: ^0.11.3 version: 0.11.3 preact: - specifier: ^10.23.2 - version: 10.23.2 + specifier: ^10.24.1 + version: 10.24.1 examples/with-tailwindcss: dependencies: @@ -508,35 +505,35 @@ importers: specifier: ^4.0.0-beta.1 version: link:../../packages/integrations/mdx '@astrojs/tailwind': - specifier: ^5.1.0 + specifier: ^5.1.1 version: link:../../packages/integrations/tailwind '@types/canvas-confetti': specifier: ^1.6.4 version: 1.6.4 astro: - specifier: ^5.0.0-beta.1 + specifier: ^5.0.0-beta.2 version: link:../../packages/astro autoprefixer: specifier: ^10.4.20 - version: 10.4.20(postcss@8.4.45) + version: 10.4.20(postcss@8.4.47) canvas-confetti: specifier: ^1.9.3 version: 1.9.3 postcss: - specifier: ^8.4.45 - version: 8.4.45 + specifier: ^8.4.47 + version: 8.4.47 tailwindcss: - specifier: ^3.4.10 - version: 3.4.10 + specifier: ^3.4.13 + version: 3.4.13 examples/with-vitest: dependencies: astro: - specifier: ^5.0.0-beta.1 + specifier: ^5.0.0-beta.2 version: link:../../packages/astro vitest: - specifier: ^2.0.5 - version: 2.0.5(@types/node@18.19.31)(jsdom@23.2.0)(sass@1.78.0) + specifier: ^2.1.1 + version: 2.1.1(@types/node@18.19.31)(jsdom@23.2.0)(sass@1.79.4) packages/astro: dependencies: @@ -553,14 +550,14 @@ importers: specifier: workspace:* version: link:../telemetry '@babel/types': - specifier: ^7.25.4 - version: 7.25.4 + specifier: ^7.25.6 + version: 7.25.6 '@oslojs/encoding': - specifier: ^0.4.1 - version: 0.4.1 + specifier: ^1.1.0 + version: 1.1.0 '@rollup/pluginutils': - specifier: ^5.1.0 - version: 5.1.0(rollup@4.21.2) + specifier: ^5.1.2 + version: 5.1.2(rollup@4.23.0) '@types/cookie': specifier: ^0.6.0 version: 0.6.0 @@ -568,14 +565,14 @@ importers: specifier: ^8.12.1 version: 8.12.1 aria-query: - specifier: ^5.3.0 - version: 5.3.0 + specifier: ^5.3.2 + version: 5.3.2 axobject-query: specifier: ^4.1.0 version: 4.1.0 boxen: - specifier: 7.1.1 - version: 7.1.1 + specifier: 8.0.1 + version: 8.0.1 ci-info: specifier: ^4.0.0 version: 4.0.0 @@ -598,8 +595,8 @@ importers: specifier: ^2.0.2 version: 2.0.2 devalue: - specifier: ^5.0.0 - version: 5.0.0 + specifier: ^5.1.1 + version: 5.1.1 diff: specifier: ^5.2.0 version: 5.2.0 @@ -607,8 +604,8 @@ importers: specifier: ^1.1.3 version: 1.1.3 dset: - specifier: ^3.1.3 - version: 3.1.3 + specifier: ^3.1.4 + version: 3.1.4 es-module-lexer: specifier: ^1.5.4 version: 1.5.4 @@ -630,9 +627,6 @@ importers: github-slugger: specifier: ^2.0.0 version: 2.0.0 - gray-matter: - specifier: ^4.0.3 - version: 4.0.3 html-escaper: specifier: ^3.0.3 version: 3.0.3 @@ -660,18 +654,12 @@ importers: neotraverse: specifier: ^0.6.18 version: 0.6.18 - ora: - specifier: ^8.1.0 - version: 8.1.0 p-limit: specifier: ^6.1.0 version: 6.1.0 p-queue: specifier: ^8.0.1 version: 8.0.1 - path-to-regexp: - specifier: 6.2.2 - version: 6.2.2 preferred-pm: specifier: ^4.0.0 version: 4.0.0 @@ -679,14 +667,14 @@ importers: specifier: ^2.4.2 version: 2.4.2 rehype: - specifier: ^13.0.1 - version: 13.0.1 + specifier: ^13.0.2 + version: 13.0.2 semver: specifier: ^7.6.3 version: 7.6.3 shiki: - specifier: ^1.16.2 - version: 1.16.2 + specifier: ^1.21.0 + version: 1.21.0 string-width: specifier: ^7.2.0 version: 7.2.0 @@ -698,7 +686,7 @@ importers: version: 0.3.0 tsconfck: specifier: ^3.1.3 - version: 3.1.3(typescript@5.5.4) + version: 3.1.3(typescript@5.6.2) unist-util-visit: specifier: ^5.0.0 version: 5.0.0 @@ -706,11 +694,11 @@ importers: specifier: ^6.0.3 version: 6.0.3 vite: - specifier: ^5.4.3 - version: 5.4.3(@types/node@18.19.31)(sass@1.78.0) + specifier: ^5.4.8 + version: 5.4.8(@types/node@18.19.31)(sass@1.79.4) vitefu: specifier: ^1.0.2 - version: 1.0.2(vite@5.4.3(@types/node@18.19.31)(sass@1.78.0)) + version: 1.0.2(vite@5.4.8(@types/node@18.19.31)(sass@1.79.4)) which-pm: specifier: ^3.0.0 version: 3.0.0 @@ -720,15 +708,18 @@ importers: yargs-parser: specifier: ^21.1.1 version: 21.1.1 + yocto-spinner: + specifier: ^0.1.0 + version: 0.1.0 zod: specifier: ^3.23.8 version: 3.23.8 zod-to-json-schema: - specifier: ^3.23.2 - version: 3.23.2(zod@3.23.8) + specifier: ^3.23.3 + version: 3.23.3(zod@3.23.8) zod-to-ts: specifier: ^1.2.0 - version: 1.2.0(typescript@5.5.4)(zod@3.23.8) + version: 1.2.0(typescript@5.6.2)(zod@3.23.8) optionalDependencies: sharp: specifier: ^0.33.3 @@ -736,10 +727,10 @@ importers: devDependencies: '@astrojs/check': specifier: ^0.9.3 - version: 0.9.3(prettier-plugin-astro@0.14.1)(prettier@3.3.3)(typescript@5.5.4) + version: 0.9.3(prettier-plugin-astro@0.14.1)(prettier@3.3.3)(typescript@5.6.2) '@playwright/test': - specifier: ^1.47.0 - version: 1.47.0 + specifier: ^1.47.2 + version: 1.47.2 '@types/aria-query': specifier: ^5.0.4 version: 5.0.4 @@ -758,9 +749,6 @@ importers: '@types/dlv': specifier: ^1.1.4 version: 1.1.4 - '@types/dom-view-transitions': - specifier: ^1.0.5 - version: 1.0.5 '@types/hast': specifier: ^3.0.4 version: 3.0.4 @@ -807,11 +795,11 @@ importers: specifier: ^3.1.3 version: 3.1.3 memfs: - specifier: ^4.11.1 - version: 4.11.1 + specifier: ^4.12.0 + version: 4.12.0 node-mocks-http: - specifier: ^1.15.1 - version: 1.15.1 + specifier: ^1.16.0 + version: 1.16.0 parse-srcset: specifier: ^1.0.2 version: 1.0.2 @@ -828,11 +816,11 @@ importers: specifier: ^0.1.2 version: 0.1.2 rollup: - specifier: ^4.21.2 - version: 4.21.2 + specifier: ^4.22.5 + version: 4.23.0 sass: - specifier: ^1.78.0 - version: 1.78.0 + specifier: ^1.79.4 + version: 1.79.4 undici: specifier: ^6.19.8 version: 6.19.8 @@ -841,7 +829,7 @@ importers: version: 11.0.5 vitest: specifier: ^2.1.1 - version: 2.1.1(@types/node@18.19.31)(jsdom@23.2.0)(sass@1.78.0) + version: 2.1.1(@types/node@18.19.31)(jsdom@23.2.0)(sass@1.79.4) packages/astro-prism: dependencies: @@ -888,19 +876,19 @@ importers: dependencies: '@astrojs/check': specifier: ^0.9.3 - version: 0.9.3(prettier-plugin-astro@0.14.1)(prettier@3.3.3)(typescript@5.5.4) + version: 0.9.3(prettier-plugin-astro@0.14.1)(prettier@3.3.3)(typescript@5.6.2) '@astrojs/db': specifier: workspace:* version: link:../../../../db '@astrojs/node': - specifier: ^8.3.3 - version: 8.3.3(astro@packages+astro) + specifier: ^8.3.4 + version: 8.3.4(astro@packages+astro) '@astrojs/react': specifier: workspace:* version: link:../../../../integrations/react '@types/react': - specifier: ^18.3.5 - version: 18.3.5 + specifier: ^18.3.10 + version: 18.3.10 '@types/react-dom': specifier: ^18.3.0 version: 18.3.0 @@ -914,20 +902,20 @@ importers: specifier: ^18.3.1 version: 18.3.1(react@18.3.1) typescript: - specifier: ^5.5.4 - version: 5.5.4 + specifier: ^5.6.2 + version: 5.6.2 packages/astro/e2e/fixtures/actions-react-19: dependencies: '@astrojs/check': specifier: ^0.9.3 - version: 0.9.3(prettier-plugin-astro@0.14.1)(prettier@3.3.3)(typescript@5.5.4) + version: 0.9.3(prettier-plugin-astro@0.14.1)(prettier@3.3.3)(typescript@5.6.2) '@astrojs/db': specifier: workspace:* version: link:../../../../db '@astrojs/node': - specifier: ^8.3.3 - version: 8.3.3(astro@packages+astro) + specifier: ^8.3.4 + version: 8.3.4(astro@packages+astro) '@astrojs/react': specifier: workspace:* version: link:../../../../integrations/react @@ -947,8 +935,8 @@ importers: specifier: 19.0.0-rc-fb9a90fa48-20240614 version: 19.0.0-rc-fb9a90fa48-20240614(react@19.0.0-rc-fb9a90fa48-20240614) typescript: - specifier: ^5.5.4 - version: 5.5.4 + specifier: ^5.6.2 + version: 5.6.2 packages/astro/e2e/fixtures/astro-component: dependencies: @@ -962,8 +950,8 @@ importers: specifier: workspace:* version: link:../../.. preact: - specifier: ^10.23.2 - version: 10.23.2 + specifier: ^10.24.1 + version: 10.24.1 packages/astro/e2e/fixtures/astro-envs: dependencies: @@ -974,8 +962,8 @@ importers: specifier: workspace:* version: link:../../.. vue: - specifier: ^3.5.3 - version: 3.5.3(typescript@5.5.4) + specifier: ^3.5.10 + version: 3.5.10(typescript@5.6.2) packages/astro/e2e/fixtures/client-idle-timeout: dependencies: @@ -996,8 +984,8 @@ importers: packages/astro/e2e/fixtures/client-only: dependencies: preact: - specifier: ^10.23.2 - version: 10.23.2 + specifier: ^10.24.1 + version: 10.24.1 react: specifier: ^18.3.1 version: 18.3.1 @@ -1005,14 +993,14 @@ importers: specifier: ^18.3.1 version: 18.3.1(react@18.3.1) solid-js: - specifier: ^1.8.22 - version: 1.8.22 + specifier: ^1.9.1 + version: 1.9.1 svelte: specifier: ^4.2.19 version: 4.2.19 vue: - specifier: ^3.5.3 - version: 3.5.3(typescript@5.5.4) + specifier: ^3.5.10 + version: 3.5.10(typescript@5.6.2) devDependencies: '@astrojs/preact': specifier: workspace:* @@ -1072,8 +1060,8 @@ importers: specifier: workspace:* version: link:../../.. preact: - specifier: ^10.23.2 - version: 10.23.2 + specifier: ^10.24.1 + version: 10.24.1 packages/astro/e2e/fixtures/error-cyclic: dependencies: @@ -1084,8 +1072,8 @@ importers: specifier: workspace:* version: link:../../.. preact: - specifier: ^10.23.2 - version: 10.23.2 + specifier: ^10.24.1 + version: 10.24.1 packages/astro/e2e/fixtures/error-sass: dependencies: @@ -1093,8 +1081,8 @@ importers: specifier: workspace:* version: link:../../.. sass: - specifier: ^1.78.0 - version: 1.78.0 + specifier: ^1.79.4 + version: 1.79.4 packages/astro/e2e/fixtures/errors: dependencies: @@ -1117,8 +1105,8 @@ importers: specifier: workspace:* version: link:../../.. preact: - specifier: ^10.23.2 - version: 10.23.2 + specifier: ^10.24.1 + version: 10.24.1 react: specifier: ^18.3.1 version: 18.3.1 @@ -1126,17 +1114,17 @@ importers: specifier: ^18.3.1 version: 18.3.1(react@18.3.1) sass: - specifier: ^1.78.0 - version: 1.78.0 + specifier: ^1.79.4 + version: 1.79.4 solid-js: - specifier: ^1.8.22 - version: 1.8.22 + specifier: ^1.9.1 + version: 1.9.1 svelte: specifier: ^4.2.19 version: 4.2.19 vue: - specifier: ^3.5.3 - version: 3.5.3(typescript@5.5.4) + specifier: ^3.5.10 + version: 3.5.10(typescript@5.6.2) packages/astro/e2e/fixtures/hmr: devDependencies: @@ -1144,8 +1132,8 @@ importers: specifier: workspace:* version: link:../../.. sass: - specifier: ^1.78.0 - version: 1.78.0 + specifier: ^1.79.4 + version: 1.79.4 packages/astro/e2e/fixtures/hydration-race: dependencies: @@ -1156,8 +1144,8 @@ importers: specifier: workspace:* version: link:../../.. preact: - specifier: ^10.23.2 - version: 10.23.2 + specifier: ^10.24.1 + version: 10.24.1 packages/astro/e2e/fixtures/i18n: dependencies: @@ -1174,8 +1162,8 @@ importers: specifier: ^3.2.0 version: 3.2.0 preact: - specifier: ^10.23.2 - version: 10.23.2 + specifier: ^10.24.1 + version: 10.24.1 react: specifier: ^18.3.1 version: 18.3.1 @@ -1183,14 +1171,14 @@ importers: specifier: ^18.3.1 version: 18.3.1(react@18.3.1) solid-js: - specifier: ^1.8.22 - version: 1.8.22 + specifier: ^1.9.1 + version: 1.9.1 svelte: specifier: ^4.2.19 version: 4.2.19 vue: - specifier: ^3.5.3 - version: 3.5.3(typescript@5.5.4) + specifier: ^3.5.10 + version: 3.5.10(typescript@5.6.2) devDependencies: '@astrojs/preact': specifier: workspace:* @@ -1214,8 +1202,8 @@ importers: packages/astro/e2e/fixtures/namespaced-component: dependencies: preact: - specifier: ^10.23.2 - version: 10.23.2 + specifier: ^10.24.1 + version: 10.24.1 devDependencies: '@astrojs/mdx': specifier: workspace:* @@ -1230,8 +1218,8 @@ importers: packages/astro/e2e/fixtures/nested-in-preact: dependencies: preact: - specifier: ^10.23.2 - version: 10.23.2 + specifier: ^10.24.1 + version: 10.24.1 react: specifier: ^18.3.1 version: 18.3.1 @@ -1239,14 +1227,14 @@ importers: specifier: ^18.3.1 version: 18.3.1(react@18.3.1) solid-js: - specifier: ^1.8.22 - version: 1.8.22 + specifier: ^1.9.1 + version: 1.9.1 svelte: specifier: ^4.2.19 version: 4.2.19 vue: - specifier: ^3.5.3 - version: 3.5.3(typescript@5.5.4) + specifier: ^3.5.10 + version: 3.5.10(typescript@5.6.2) devDependencies: '@astrojs/preact': specifier: workspace:* @@ -1270,8 +1258,8 @@ importers: packages/astro/e2e/fixtures/nested-in-react: dependencies: preact: - specifier: ^10.23.2 - version: 10.23.2 + specifier: ^10.24.1 + version: 10.24.1 react: specifier: ^18.3.1 version: 18.3.1 @@ -1279,14 +1267,14 @@ importers: specifier: ^18.3.1 version: 18.3.1(react@18.3.1) solid-js: - specifier: ^1.8.22 - version: 1.8.22 + specifier: ^1.9.1 + version: 1.9.1 svelte: specifier: ^4.2.19 version: 4.2.19 vue: - specifier: ^3.5.3 - version: 3.5.3(typescript@5.5.4) + specifier: ^3.5.10 + version: 3.5.10(typescript@5.6.2) devDependencies: '@astrojs/preact': specifier: workspace:* @@ -1310,8 +1298,8 @@ importers: packages/astro/e2e/fixtures/nested-in-solid: dependencies: preact: - specifier: ^10.23.2 - version: 10.23.2 + specifier: ^10.24.1 + version: 10.24.1 react: specifier: ^18.3.1 version: 18.3.1 @@ -1319,14 +1307,14 @@ importers: specifier: ^18.3.1 version: 18.3.1(react@18.3.1) solid-js: - specifier: ^1.8.22 - version: 1.8.22 + specifier: ^1.9.1 + version: 1.9.1 svelte: specifier: ^4.2.19 version: 4.2.19 vue: - specifier: ^3.5.3 - version: 3.5.3(typescript@5.5.4) + specifier: ^3.5.10 + version: 3.5.10(typescript@5.6.2) devDependencies: '@astrojs/preact': specifier: workspace:* @@ -1350,8 +1338,8 @@ importers: packages/astro/e2e/fixtures/nested-in-svelte: dependencies: preact: - specifier: ^10.23.2 - version: 10.23.2 + specifier: ^10.24.1 + version: 10.24.1 react: specifier: ^18.3.1 version: 18.3.1 @@ -1359,14 +1347,14 @@ importers: specifier: ^18.3.1 version: 18.3.1(react@18.3.1) solid-js: - specifier: ^1.8.22 - version: 1.8.22 + specifier: ^1.9.1 + version: 1.9.1 svelte: specifier: ^4.2.19 version: 4.2.19 vue: - specifier: ^3.5.3 - version: 3.5.3(typescript@5.5.4) + specifier: ^3.5.10 + version: 3.5.10(typescript@5.6.2) devDependencies: '@astrojs/preact': specifier: workspace:* @@ -1390,8 +1378,8 @@ importers: packages/astro/e2e/fixtures/nested-in-vue: dependencies: preact: - specifier: ^10.23.2 - version: 10.23.2 + specifier: ^10.24.1 + version: 10.24.1 react: specifier: ^18.3.1 version: 18.3.1 @@ -1399,14 +1387,14 @@ importers: specifier: ^18.3.1 version: 18.3.1(react@18.3.1) solid-js: - specifier: ^1.8.22 - version: 1.8.22 + specifier: ^1.9.1 + version: 1.9.1 svelte: specifier: ^4.2.19 version: 4.2.19 vue: - specifier: ^3.5.3 - version: 3.5.3(typescript@5.5.4) + specifier: ^3.5.10 + version: 3.5.10(typescript@5.6.2) devDependencies: '@astrojs/preact': specifier: workspace:* @@ -1430,8 +1418,8 @@ importers: packages/astro/e2e/fixtures/nested-recursive: dependencies: preact: - specifier: ^10.23.2 - version: 10.23.2 + specifier: ^10.24.1 + version: 10.24.1 react: specifier: ^18.3.1 version: 18.3.1 @@ -1439,14 +1427,14 @@ importers: specifier: ^18.3.1 version: 18.3.1(react@18.3.1) solid-js: - specifier: ^1.8.22 - version: 1.8.22 + specifier: ^1.9.1 + version: 1.9.1 svelte: specifier: ^4.2.19 version: 4.2.19 vue: - specifier: ^3.5.3 - version: 3.5.3(typescript@5.5.4) + specifier: ^3.5.10 + version: 3.5.10(typescript@5.6.2) devDependencies: '@astrojs/preact': specifier: workspace:* @@ -1498,8 +1486,8 @@ importers: specifier: workspace:* version: link:../../.. preact: - specifier: ^10.23.2 - version: 10.23.2 + specifier: ^10.24.1 + version: 10.24.1 packages/astro/e2e/fixtures/preact-component: dependencies: @@ -1513,8 +1501,8 @@ importers: specifier: workspace:* version: link:../../.. preact: - specifier: ^10.23.2 - version: 10.23.2 + specifier: ^10.24.1 + version: 10.24.1 packages/astro/e2e/fixtures/preact-lazy-component: dependencies: @@ -1528,8 +1516,8 @@ importers: specifier: workspace:* version: link:../../.. preact: - specifier: ^10.23.2 - version: 10.23.2 + specifier: ^10.24.1 + version: 10.24.1 packages/astro/e2e/fixtures/prefetch: dependencies: @@ -1561,8 +1549,8 @@ importers: specifier: workspace:* version: link:../../../../integrations/mdx '@astrojs/node': - specifier: ^8.3.3 - version: 8.3.3(astro@packages+astro) + specifier: ^8.3.4 + version: 8.3.4(astro@packages+astro) '@astrojs/react': specifier: workspace:* version: link:../../../../integrations/react @@ -1579,8 +1567,8 @@ importers: packages/astro/e2e/fixtures/server-islands-key: dependencies: '@astrojs/node': - specifier: ^8.3.3 - version: 8.3.3(astro@packages+astro) + specifier: ^8.3.4 + version: 8.3.4(astro@packages+astro) astro: specifier: workspace:* version: link:../../.. @@ -1595,8 +1583,8 @@ importers: version: link:../../.. devDependencies: solid-js: - specifier: ^1.8.22 - version: 1.8.22 + specifier: ^1.9.1 + version: 1.9.1 packages/astro/e2e/fixtures/solid-component: dependencies: @@ -1610,8 +1598,8 @@ importers: specifier: workspace:* version: link:../../.. solid-js: - specifier: ^1.8.22 - version: 1.8.22 + specifier: ^1.9.1 + version: 1.9.1 packages/astro/e2e/fixtures/solid-recurse: dependencies: @@ -1623,8 +1611,8 @@ importers: version: link:../../.. devDependencies: solid-js: - specifier: ^1.8.22 - version: 1.8.22 + specifier: ^1.9.1 + version: 1.9.1 packages/astro/e2e/fixtures/svelte-component: dependencies: @@ -1651,13 +1639,13 @@ importers: version: link:../../.. autoprefixer: specifier: ^10.4.20 - version: 10.4.20(postcss@8.4.45) + version: 10.4.20(postcss@8.4.47) postcss: - specifier: ^8.4.45 - version: 8.4.45 + specifier: ^8.4.47 + version: 8.4.47 tailwindcss: - specifier: ^3.4.10 - version: 3.4.10 + specifier: ^3.4.13 + version: 3.4.13 packages/astro/e2e/fixtures/ts-resolution: dependencies: @@ -1677,8 +1665,8 @@ importers: packages/astro/e2e/fixtures/view-transitions: dependencies: '@astrojs/node': - specifier: ^8.3.3 - version: 8.3.3(astro@packages+astro) + specifier: ^8.3.4 + version: 8.3.4(astro@packages+astro) '@astrojs/react': specifier: workspace:* version: link:../../../../integrations/react @@ -1701,14 +1689,14 @@ importers: specifier: ^18.3.1 version: 18.3.1(react@18.3.1) solid-js: - specifier: ^1.8.0 - version: 1.8.22 + specifier: ^1.9.1 + version: 1.9.1 svelte: specifier: ^4.2.19 version: 4.2.19 vue: - specifier: ^3.5.3 - version: 3.5.3(typescript@5.5.4) + specifier: ^3.5.10 + version: 3.5.10(typescript@5.6.2) packages/astro/e2e/fixtures/vue-component: dependencies: @@ -1722,8 +1710,8 @@ importers: specifier: workspace:* version: link:../../.. vue: - specifier: ^3.5.3 - version: 3.5.3(typescript@5.5.4) + specifier: ^3.5.10 + version: 3.5.10(typescript@5.6.2) packages/astro/performance: devDependencies: @@ -1740,8 +1728,8 @@ importers: specifier: workspace:* version: link:../utils '@types/react': - specifier: ^18.3.5 - version: 18.3.5 + specifier: ^18.3.10 + version: 18.3.10 '@types/react-dom': specifier: ^18.3.0 version: 18.3.0 @@ -1767,8 +1755,8 @@ importers: specifier: workspace:* version: link:../utils '@types/react': - specifier: ^18.3.5 - version: 18.3.5 + specifier: ^18.3.10 + version: 18.3.10 '@types/react-dom': specifier: ^18.3.0 version: 18.3.0 @@ -1794,8 +1782,8 @@ importers: specifier: workspace:* version: link:../utils '@types/react': - specifier: ^18.3.5 - version: 18.3.5 + specifier: ^18.3.10 + version: 18.3.10 '@types/react-dom': specifier: ^18.3.0 version: 18.3.0 @@ -1845,8 +1833,8 @@ importers: specifier: ^4.2.19 version: 4.2.19 vue: - specifier: ^3.5.3 - version: 3.5.3(typescript@5.5.4) + specifier: ^3.5.10 + version: 3.5.10(typescript@5.6.2) packages/astro/test/fixtures/actions: dependencies: @@ -1976,8 +1964,8 @@ importers: specifier: workspace:* version: link:../../.. preact: - specifier: ^10.23.2 - version: 10.23.2 + specifier: ^10.24.1 + version: 10.24.1 packages/astro/test/fixtures/astro-check-errors: dependencies: @@ -2012,14 +2000,14 @@ importers: specifier: workspace:* version: link:../../.. preact: - specifier: ^10.23.2 - version: 10.23.2 + specifier: ^10.24.1 + version: 10.24.1 svelte: specifier: ^4.2.19 version: 4.2.19 vue: - specifier: ^3.5.3 - version: 3.5.3(typescript@5.5.4) + specifier: ^3.5.10 + version: 3.5.10(typescript@5.6.2) packages/astro/test/fixtures/astro-class-list: dependencies: @@ -2182,8 +2170,8 @@ importers: specifier: workspace:* version: link:../../.. vue: - specifier: ^3.5.3 - version: 3.5.3(typescript@5.5.4) + specifier: ^3.5.10 + version: 3.5.10(typescript@5.6.2) packages/astro/test/fixtures/astro-expr: dependencies: @@ -2194,8 +2182,8 @@ importers: specifier: workspace:* version: link:../../.. preact: - specifier: ^10.23.2 - version: 10.23.2 + specifier: ^10.24.1 + version: 10.24.1 packages/astro/test/fixtures/astro-external-files: dependencies: @@ -2212,8 +2200,8 @@ importers: specifier: workspace:* version: link:../../.. preact: - specifier: ^10.23.2 - version: 10.23.2 + specifier: ^10.24.1 + version: 10.24.1 packages/astro/test/fixtures/astro-generator: dependencies: @@ -2428,8 +2416,8 @@ importers: specifier: workspace:* version: link:../../.. preact: - specifier: ^10.23.2 - version: 10.23.2 + specifier: ^10.24.1 + version: 10.24.1 packages/astro/test/fixtures/astro-slots: dependencies: @@ -2458,8 +2446,8 @@ importers: specifier: workspace:* version: link:../../.. preact: - specifier: ^10.23.2 - version: 10.23.2 + specifier: ^10.24.1 + version: 10.24.1 react: specifier: ^18.3.1 version: 18.3.1 @@ -2467,14 +2455,14 @@ importers: specifier: ^18.3.1 version: 18.3.1(react@18.3.1) solid-js: - specifier: ^1.8.22 - version: 1.8.22 + specifier: ^1.9.1 + version: 1.9.1 svelte: specifier: ^4.2.19 version: 4.2.19 vue: - specifier: ^3.5.3 - version: 3.5.3(typescript@5.5.4) + specifier: ^3.5.10 + version: 3.5.10(typescript@5.6.2) packages/astro/test/fixtures/before-hydration: dependencies: @@ -2485,8 +2473,8 @@ importers: specifier: workspace:* version: link:../../.. preact: - specifier: ^10.23.2 - version: 10.23.2 + specifier: ^10.24.1 + version: 10.24.1 packages/astro/test/fixtures/build-assets: dependencies: @@ -2497,8 +2485,8 @@ importers: specifier: workspace:* version: link:../../.. preact: - specifier: ^10.23.2 - version: 10.23.2 + specifier: ^10.24.1 + version: 10.24.1 packages/astro/test/fixtures/build-readonly-file: dependencies: @@ -2515,8 +2503,8 @@ importers: packages/astro/test/fixtures/client-address-node: dependencies: '@astrojs/node': - specifier: ^8.3.3 - version: 8.3.3(astro@packages+astro) + specifier: ^8.3.4 + version: 8.3.4(astro@packages+astro) astro: specifier: workspace:* version: link:../../.. @@ -2545,8 +2533,8 @@ importers: specifier: workspace:* version: link:../../.. preact: - specifier: ^10.23.2 - version: 10.23.2 + specifier: ^10.24.1 + version: 10.24.1 react: specifier: ^18.3.1 version: 18.3.1 @@ -2560,8 +2548,8 @@ importers: packages/astro/test/fixtures/component-library-shared: dependencies: preact: - specifier: ^10.23.2 - version: 10.23.2 + specifier: ^10.24.1 + version: 10.24.1 react: specifier: ^18.3.1 version: 18.3.1 @@ -2612,8 +2600,8 @@ importers: specifier: ^18.3.1 version: 18.3.1(react@18.3.1) vue: - specifier: ^3.5.3 - version: 3.5.3(typescript@5.5.4) + specifier: ^3.5.10 + version: 3.5.10(typescript@5.6.2) packages/astro/test/fixtures/content: dependencies: @@ -2722,6 +2710,9 @@ importers: astro: specifier: workspace:* version: link:../../.. + toml: + specifier: ^3.0.0 + version: 3.0.0 packages/astro/test/fixtures/content-layer-markdoc: dependencies: @@ -2735,8 +2726,8 @@ importers: specifier: workspace:* version: link:../../.. preact: - specifier: ^10.23.2 - version: 10.23.2 + specifier: ^10.24.1 + version: 10.24.1 packages/astro/test/fixtures/content-layer-rendering: dependencies: @@ -3007,8 +2998,8 @@ importers: packages/astro/test/fixtures/custom-assets-name: dependencies: '@astrojs/node': - specifier: ^8.3.3 - version: 8.3.3(astro@packages+astro) + specifier: ^8.3.4 + version: 8.3.4(astro@packages+astro) astro: specifier: workspace:* version: link:../../.. @@ -3064,8 +3055,8 @@ importers: specifier: workspace:* version: link:../../.. preact: - specifier: ^10.23.2 - version: 10.23.2 + specifier: ^10.24.1 + version: 10.24.1 packages/astro/test/fixtures/error-bad-js: dependencies: @@ -3106,23 +3097,23 @@ importers: specifier: workspace:* version: link:../../.. preact: - specifier: ^10.23.2 - version: 10.23.2 + specifier: ^10.24.1 + version: 10.24.1 svelte: specifier: ^4.2.19 version: 4.2.19 vue: - specifier: ^3.5.3 - version: 3.5.3(typescript@5.5.4) + specifier: ^3.5.10 + version: 3.5.10(typescript@5.6.2) packages/astro/test/fixtures/fontsource-package: dependencies: '@fontsource/monofett': - specifier: 5.0.22 - version: 5.0.22 + specifier: 5.1.0 + version: 5.1.0 '@fontsource/montserrat': - specifier: 5.0.20 - version: 5.0.20 + specifier: 5.1.0 + version: 5.1.0 astro: specifier: workspace:* version: link:../../.. @@ -3196,8 +3187,8 @@ importers: specifier: workspace:* version: link:../../.. preact: - specifier: ^10.23.2 - version: 10.23.2 + specifier: ^10.24.1 + version: 10.24.1 packages/astro/test/fixtures/i18n-routing: dependencies: @@ -3295,8 +3286,8 @@ importers: packages/astro/test/fixtures/jsx: dependencies: preact: - specifier: ^10.23.2 - version: 10.23.2 + specifier: ^10.24.1 + version: 10.24.1 react: specifier: ^18.3.1 version: 18.3.1 @@ -3304,14 +3295,14 @@ importers: specifier: ^18.3.1 version: 18.3.1(react@18.3.1) solid-js: - specifier: ^1.8.22 - version: 1.8.22 + specifier: ^1.9.1 + version: 1.9.1 svelte: specifier: ^4.2.19 version: 4.2.19 vue: - specifier: ^3.5.3 - version: 3.5.3(typescript@5.5.4) + specifier: ^3.5.10 + version: 3.5.10(typescript@5.6.2) devDependencies: '@astrojs/mdx': specifier: workspace:* @@ -3344,8 +3335,8 @@ importers: specifier: workspace:* version: link:../../.. solid-js: - specifier: ^1.8.22 - version: 1.8.22 + specifier: ^1.9.1 + version: 1.9.1 packages/astro/test/fixtures/lazy-layout: dependencies: @@ -3487,23 +3478,23 @@ importers: version: link:../../.. autoprefixer: specifier: ^10.4.20 - version: 10.4.20(postcss@8.4.45) + version: 10.4.20(postcss@8.4.47) postcss: - specifier: ^8.4.45 - version: 8.4.45 + specifier: ^8.4.47 + version: 8.4.47 solid-js: - specifier: ^1.8.22 - version: 1.8.22 + specifier: ^1.9.1 + version: 1.9.1 svelte: specifier: ^4.2.19 version: 4.2.19 vue: - specifier: ^3.5.3 - version: 3.5.3(typescript@5.5.4) + specifier: ^3.5.10 + version: 3.5.10(typescript@5.6.2) devDependencies: postcss-preset-env: - specifier: ^10.0.2 - version: 10.0.2(postcss@8.4.45) + specifier: ^10.0.5 + version: 10.0.5(postcss@8.4.47) packages/astro/test/fixtures/preact-compat-component: dependencies: @@ -3517,8 +3508,8 @@ importers: specifier: workspace:* version: link:../../.. preact: - specifier: ^10.23.2 - version: 10.23.2 + specifier: ^10.24.1 + version: 10.24.1 packages/astro/test/fixtures/preact-compat-component/packages/react-lib: dependencies: @@ -3533,13 +3524,13 @@ importers: version: link:../../../../integrations/preact '@preact/signals': specifier: 1.3.0 - version: 1.3.0(preact@10.23.2) + version: 1.3.0(preact@10.24.1) astro: specifier: workspace:* version: link:../../.. preact: - specifier: ^10.23.2 - version: 10.23.2 + specifier: ^10.24.1 + version: 10.24.1 packages/astro/test/fixtures/public-base-404: dependencies: @@ -3565,8 +3556,8 @@ importers: specifier: ^18.3.1 version: 18.3.1(react@18.3.1) solid-js: - specifier: ^1.8.22 - version: 1.8.22 + specifier: ^1.9.1 + version: 1.9.1 packages/astro/test/fixtures/react-jsx-export: dependencies: @@ -3599,8 +3590,8 @@ importers: specifier: 'workspace:' version: link:../../.. preact: - specifier: ^10.23.2 - version: 10.23.2 + specifier: ^10.24.1 + version: 10.24.1 packages/astro/test/fixtures/remote-css: dependencies: @@ -3722,8 +3713,8 @@ importers: specifier: workspace:* version: link:../../.. preact: - specifier: ^10.23.2 - version: 10.23.2 + specifier: ^10.24.1 + version: 10.24.1 packages/astro/test/fixtures/slots-react: dependencies: @@ -3755,8 +3746,8 @@ importers: specifier: workspace:* version: link:../../.. solid-js: - specifier: ^1.8.22 - version: 1.8.22 + specifier: ^1.9.1 + version: 1.9.1 packages/astro/test/fixtures/slots-svelte: dependencies: @@ -3785,8 +3776,8 @@ importers: specifier: workspace:* version: link:../../.. vue: - specifier: ^3.5.3 - version: 3.5.3(typescript@5.5.4) + specifier: ^3.5.10 + version: 3.5.10(typescript@5.6.2) packages/astro/test/fixtures/solid-component: dependencies: @@ -3794,8 +3785,8 @@ importers: specifier: workspace:* version: link:../../../../integrations/solid '@solidjs/router': - specifier: ^0.14.3 - version: 0.14.3(solid-js@1.8.22) + specifier: ^0.14.7 + version: 0.14.7(solid-js@1.9.1) '@test/solid-jsx-component': specifier: file:./deps/solid-jsx-component version: link:deps/solid-jsx-component @@ -3803,14 +3794,14 @@ importers: specifier: workspace:* version: link:../../.. solid-js: - specifier: ^1.8.22 - version: 1.8.22 + specifier: ^1.9.1 + version: 1.9.1 packages/astro/test/fixtures/solid-component/deps/solid-jsx-component: dependencies: solid-js: - specifier: ^1.8.22 - version: 1.8.22 + specifier: ^1.9.1 + version: 1.9.1 packages/astro/test/fixtures/sourcemap: dependencies: @@ -3854,8 +3845,8 @@ importers: packages/astro/test/fixtures/ssr-api-route: dependencies: '@astrojs/node': - specifier: ^8.3.3 - version: 8.3.3(astro@packages+astro) + specifier: ^8.3.4 + version: 8.3.4(astro@packages+astro) astro: specifier: workspace:* version: link:../../.. @@ -3881,8 +3872,8 @@ importers: specifier: workspace:* version: link:../../.. preact: - specifier: ^10.23.2 - version: 10.23.2 + specifier: ^10.24.1 + version: 10.24.1 packages/astro/test/fixtures/ssr-error-pages: dependencies: @@ -3938,8 +3929,8 @@ importers: specifier: link:./deps/test-adapter version: link:deps/test-adapter '@types/react': - specifier: ^18.3.5 - version: 18.3.5 + specifier: ^18.3.10 + version: 18.3.10 '@types/react-dom': specifier: ^18.3.0 version: 18.3.0 @@ -3994,8 +3985,8 @@ importers: specifier: workspace:* version: link:../../.. preact: - specifier: ^10.23.2 - version: 10.23.2 + specifier: ^10.24.1 + version: 10.24.1 packages/astro/test/fixtures/ssr-split-manifest: dependencies: @@ -4015,8 +4006,8 @@ importers: specifier: workspace:* version: link:../../.. preact: - specifier: ^10.23.2 - version: 10.23.2 + specifier: ^10.24.1 + version: 10.24.1 packages/astro/test/fixtures/static-build-code-component: dependencies: @@ -4042,8 +4033,8 @@ importers: specifier: workspace:* version: link:../../.. preact: - specifier: ^10.23.2 - version: 10.23.2 + specifier: ^10.24.1 + version: 10.24.1 react: specifier: ^18.3.1 version: 18.3.1 @@ -4060,8 +4051,8 @@ importers: packages/astro/test/fixtures/static-build-ssr: dependencies: '@astrojs/node': - specifier: ^8.3.3 - version: 8.3.3(astro@packages+astro) + specifier: ^8.3.4 + version: 8.3.4(astro@packages+astro) '@test/static-build-pkg': specifier: workspace:* version: link:../static-build/pkg @@ -4111,13 +4102,13 @@ importers: version: link:../../.. autoprefixer: specifier: ^10.4.20 - version: 10.4.20(postcss@8.4.45) + version: 10.4.20(postcss@8.4.47) postcss: - specifier: ^8.4.45 - version: 8.4.45 + specifier: ^8.4.47 + version: 8.4.47 tailwindcss: - specifier: ^3.4.10 - version: 3.4.10 + specifier: ^3.4.13 + version: 3.4.13 packages/astro/test/fixtures/tailwindcss-ts: dependencies: @@ -4128,11 +4119,11 @@ importers: specifier: workspace:* version: link:../../.. postcss: - specifier: ^8.4.45 - version: 8.4.45 + specifier: ^8.4.47 + version: 8.4.47 tailwindcss: - specifier: ^3.4.10 - version: 3.4.10 + specifier: ^3.4.13 + version: 3.4.13 packages/astro/test/fixtures/third-party-astro: dependencies: @@ -4189,7 +4180,7 @@ importers: version: link:../../.. vitest: specifier: ^2.1.1 - version: 2.1.1(@types/node@18.19.31)(jsdom@23.2.0)(sass@1.78.0) + version: 2.1.1(@types/node@18.19.31)(jsdom@23.2.0)(sass@1.79.4) packages/astro/test/fixtures/vue-component: dependencies: @@ -4200,8 +4191,8 @@ importers: specifier: workspace:* version: link:../../.. vue: - specifier: ^3.5.3 - version: 3.5.3(typescript@5.5.4) + specifier: ^3.5.10 + version: 3.5.10(typescript@5.6.2) packages/astro/test/fixtures/vue-jsx: dependencies: @@ -4212,8 +4203,8 @@ importers: specifier: workspace:* version: link:../../.. vue: - specifier: ^3.5.3 - version: 3.5.3(typescript@5.5.4) + specifier: ^3.5.10 + version: 3.5.10(typescript@5.6.2) packages/astro/test/fixtures/vue-with-multi-renderer: dependencies: @@ -4230,8 +4221,8 @@ importers: specifier: ^4.2.19 version: 4.2.19 vue: - specifier: ^3.5.3 - version: 3.5.3(typescript@5.5.4) + specifier: ^3.5.10 + version: 3.5.10(typescript@5.6.2) packages/astro/test/fixtures/with-endpoint-routes: dependencies: @@ -4281,8 +4272,8 @@ importers: specifier: workspace:* version: link:../studio '@libsql/client': - specifier: ^0.10.0 - version: 0.10.0 + specifier: ^0.14.0 + version: 0.14.0 async-listen: specifier: ^3.0.1 version: 3.0.1 @@ -4291,7 +4282,7 @@ importers: version: 1.0.2 drizzle-orm: specifier: ^0.31.2 - version: 0.31.4(@libsql/client@0.10.0)(@types/react@18.3.5)(react@18.3.1) + version: 0.31.4(@libsql/client@0.14.0)(@types/react@18.3.10)(react@18.3.1) github-slugger: specifier: ^2.0.0 version: 2.0.0 @@ -4304,9 +4295,6 @@ importers: open: specifier: ^10.1.0 version: 10.1.0 - ora: - specifier: ^8.1.0 - version: 8.1.0 prompts: specifier: ^2.4.2 version: 2.4.2 @@ -4316,6 +4304,9 @@ importers: yargs-parser: specifier: ^21.1.1 version: 21.1.1 + yocto-spinner: + specifier: ^0.1.0 + version: 0.1.0 zod: specifier: ^3.23.8 version: 3.23.8 @@ -4339,11 +4330,11 @@ importers: specifier: 1.0.0 version: 1.0.0 typescript: - specifier: ^5.5.4 - version: 5.5.4 + specifier: ^5.6.2 + version: 5.6.2 vite: - specifier: ^5.4.3 - version: 5.4.3(@types/node@18.19.31)(sass@1.78.0) + specifier: ^5.4.8 + version: 5.4.8(@types/node@18.19.31)(sass@1.79.4) packages/db/test/fixtures/basics: dependencies: @@ -4439,19 +4430,19 @@ importers: dependencies: '@astrojs/check': specifier: ^0.9.3 - version: 0.9.3(prettier-plugin-astro@0.14.1)(prettier@3.3.3)(typescript@5.5.4) + version: 0.9.3(prettier-plugin-astro@0.14.1)(prettier@3.3.3)(typescript@5.6.2) '@astrojs/db': specifier: workspace:* version: link:../../.. '@astrojs/node': - specifier: ^8.3.3 - version: 8.3.3(astro@packages+astro) + specifier: ^8.3.4 + version: 8.3.4(astro@packages+astro) '@astrojs/react': specifier: ^3.6.2 version: link:../../../../integrations/react '@types/react': - specifier: ^18.3.5 - version: 18.3.5 + specifier: ^18.3.10 + version: 18.3.10 '@types/react-dom': specifier: ^18.3.0 version: 18.3.0 @@ -4471,8 +4462,8 @@ importers: specifier: ^0.1.12 version: 0.1.12(astro@packages+astro)(zod@3.23.8) typescript: - specifier: ^5.5.4 - version: 5.5.4 + specifier: ^5.6.2 + version: 5.6.2 zod: specifier: ^3.23.8 version: 3.23.8 @@ -4480,8 +4471,8 @@ importers: packages/integrations/alpinejs: devDependencies: '@playwright/test': - specifier: 1.47.0 - version: 1.47.0 + specifier: 1.47.2 + version: 1.47.2 astro: specifier: workspace:* version: link:../../astro @@ -4489,8 +4480,8 @@ importers: specifier: workspace:* version: link:../../../scripts vite: - specifier: ^5.4.3 - version: 5.4.3(@types/node@18.19.31)(sass@1.78.0) + specifier: ^5.4.8 + version: 5.4.8(@types/node@18.19.31)(sass@1.79.4) packages/integrations/alpinejs/test/fixtures/basics: dependencies: @@ -4552,16 +4543,13 @@ importers: version: link:../../astro-prism '@markdoc/markdoc': specifier: ^0.4.0 - version: 0.4.0(@types/react@18.3.5)(react@18.3.1) + version: 0.4.0(@types/react@18.3.10)(react@18.3.1) esbuild: specifier: ^0.21.5 version: 0.21.5 github-slugger: specifier: ^2.0.0 version: 2.0.0 - gray-matter: - specifier: ^4.0.3 - version: 4.0.3 htmlparser2: specifier: ^9.1.0 version: 9.1.0 @@ -4576,14 +4564,14 @@ importers: specifier: workspace:* version: link:../../../scripts devalue: - specifier: ^5.0.0 - version: 5.0.0 + specifier: ^5.1.1 + version: 5.1.1 linkedom: - specifier: ^0.18.4 - version: 0.18.4 + specifier: ^0.18.5 + version: 0.18.5 vite: - specifier: ^5.4.3 - version: 5.4.3(@types/node@18.19.31)(sass@1.78.0) + specifier: ^5.4.8 + version: 5.4.8(@types/node@18.19.31)(sass@1.79.4) packages/integrations/markdoc/test/fixtures/content-collections: dependencies: @@ -4696,8 +4684,8 @@ importers: specifier: workspace:* version: link:../../../../../astro preact: - specifier: ^10.23.2 - version: 10.23.2 + specifier: ^10.24.1 + version: 10.24.1 packages/integrations/markdoc/test/fixtures/render-with-config: dependencies: @@ -4752,12 +4740,9 @@ importers: estree-util-visit: specifier: ^2.0.0 version: 2.0.0 - gray-matter: - specifier: ^4.0.3 - version: 4.0.3 hast-util-to-html: - specifier: ^9.0.2 - version: 9.0.2 + specifier: ^9.0.3 + version: 9.0.3 kleur: specifier: ^4.1.5 version: 4.1.5 @@ -4781,8 +4766,8 @@ importers: version: 6.0.3 devDependencies: '@types/estree': - specifier: ^1.0.5 - version: 1.0.5 + specifier: ^1.0.6 + version: 1.0.6 '@types/hast': specifier: ^3.0.4 version: 3.0.4 @@ -4799,8 +4784,8 @@ importers: specifier: 1.0.0 version: 1.0.0 linkedom: - specifier: ^0.18.4 - version: 0.18.4 + specifier: ^0.18.5 + version: 0.18.5 mdast-util-mdx: specifier: ^3.0.0 version: 3.0.0 @@ -4815,28 +4800,28 @@ importers: version: 6.0.0 rehype-pretty-code: specifier: ^0.14.0 - version: 0.14.0(shiki@1.16.2) + version: 0.14.0(shiki@1.21.0) remark-math: specifier: ^6.0.0 version: 6.0.0 remark-rehype: - specifier: ^11.1.0 - version: 11.1.0 + specifier: ^11.1.1 + version: 11.1.1 remark-shiki-twoslash: specifier: ^3.1.3 - version: 3.1.3(typescript@5.5.4) + version: 3.1.3(typescript@5.6.2) remark-toc: specifier: ^9.0.0 version: 9.0.0 shiki: - specifier: ^1.16.2 - version: 1.16.2 + specifier: ^1.21.0 + version: 1.21.0 unified: specifier: ^11.0.5 version: 11.0.5 vite: - specifier: ^5.4.3 - version: 5.4.3(@types/node@18.19.31)(sass@1.78.0) + specifier: ^5.4.8 + version: 5.4.8(@types/node@18.19.31)(sass@1.79.4) packages/integrations/mdx/test/fixtures/css-head-mdx: dependencies: @@ -4904,8 +4889,8 @@ importers: specifier: workspace:* version: link:../../../../../astro preact: - specifier: ^10.23.2 - version: 10.23.2 + specifier: ^10.24.1 + version: 10.24.1 packages/integrations/mdx/test/fixtures/mdx-namespace: dependencies: @@ -5024,16 +5009,16 @@ importers: version: 7.24.7(@babel/core@7.25.2) '@preact/preset-vite': specifier: 2.8.2 - version: 2.8.2(@babel/core@7.25.2)(preact@10.23.2)(vite@5.4.3(@types/node@18.19.31)(sass@1.78.0)) + version: 2.8.2(@babel/core@7.25.2)(preact@10.24.1)(vite@5.4.8(@types/node@18.19.31)(sass@1.79.4)) '@preact/signals': specifier: ^1.3.0 - version: 1.3.0(preact@10.23.2) + version: 1.3.0(preact@10.24.1) babel-plugin-transform-hook-names: specifier: ^1.0.2 version: 1.0.2(@babel/core@7.25.2) preact-render-to-string: - specifier: ^6.5.10 - version: 6.5.10(preact@10.23.2) + specifier: ^6.5.11 + version: 6.5.11(preact@10.24.1) devDependencies: astro: specifier: workspace:* @@ -5042,21 +5027,21 @@ importers: specifier: workspace:* version: link:../../../scripts preact: - specifier: ^10.23.2 - version: 10.23.2 + specifier: ^10.24.1 + version: 10.24.1 packages/integrations/react: dependencies: '@vitejs/plugin-react': - specifier: ^4.3.1 - version: 4.3.1(vite@5.4.3(@types/node@18.19.31)(sass@1.78.0)) + specifier: ^4.3.2 + version: 4.3.2(vite@5.4.8(@types/node@18.19.31)(sass@1.79.4)) ultrahtml: specifier: ^1.5.3 version: 1.5.3 devDependencies: '@types/react': - specifier: ^18.3.5 - version: 18.3.5 + specifier: ^18.3.10 + version: 18.3.10 '@types/react-dom': specifier: ^18.3.0 version: 18.3.0 @@ -5076,8 +5061,8 @@ importers: specifier: ^18.3.1 version: 18.3.1(react@18.3.1) vite: - specifier: ^5.4.3 - version: 5.4.3(@types/node@18.19.31)(sass@1.78.0) + specifier: ^5.4.8 + version: 5.4.8(@types/node@18.19.31)(sass@1.79.4) packages/integrations/react/test/fixtures/react-component: dependencies: @@ -5097,8 +5082,8 @@ importers: specifier: ^18.3.1 version: 18.3.1(react@18.3.1) vue: - specifier: ^3.5.3 - version: 3.5.3(typescript@5.5.4) + specifier: ^3.5.10 + version: 3.5.10(typescript@5.6.2) packages/integrations/sitemap: dependencies: @@ -5165,7 +5150,7 @@ importers: dependencies: vite-plugin-solid: specifier: ^2.10.2 - version: 2.10.2(solid-js@1.8.22)(vite@5.4.3(@types/node@18.19.31)(sass@1.78.0)) + version: 2.10.2(solid-js@1.9.1)(vite@5.4.8(@types/node@18.19.31)(sass@1.79.4)) devDependencies: astro: specifier: workspace:* @@ -5174,20 +5159,20 @@ importers: specifier: workspace:* version: link:../../../scripts solid-js: - specifier: ^1.8.22 - version: 1.8.22 + specifier: ^1.9.1 + version: 1.9.1 vite: - specifier: ^5.4.3 - version: 5.4.3(@types/node@18.19.31)(sass@1.78.0) + specifier: ^5.4.8 + version: 5.4.8(@types/node@18.19.31)(sass@1.79.4) packages/integrations/svelte: dependencies: '@sveltejs/vite-plugin-svelte': specifier: ^3.1.2 - version: 3.1.2(svelte@4.2.19)(vite@5.4.3(@types/node@18.19.31)(sass@1.78.0)) + version: 3.1.2(svelte@4.2.19)(vite@5.4.8(@types/node@18.19.31)(sass@1.79.4)) svelte2tsx: - specifier: ^0.7.18 - version: 0.7.18(svelte@4.2.19)(typescript@5.5.4) + specifier: ^0.7.21 + version: 0.7.21(svelte@4.2.19)(typescript@5.6.2) devDependencies: astro: specifier: workspace:* @@ -5199,20 +5184,20 @@ importers: specifier: ^4.2.19 version: 4.2.19 vite: - specifier: ^5.4.3 - version: 5.4.3(@types/node@18.19.31)(sass@1.78.0) + specifier: ^5.4.8 + version: 5.4.8(@types/node@18.19.31)(sass@1.79.4) packages/integrations/tailwind: dependencies: autoprefixer: specifier: ^10.4.20 - version: 10.4.20(postcss@8.4.45) + version: 10.4.20(postcss@8.4.47) postcss: - specifier: ^8.4.45 - version: 8.4.45 + specifier: ^8.4.47 + version: 8.4.47 postcss-load-config: specifier: ^4.0.2 - version: 4.0.2(postcss@8.4.45) + version: 4.0.2(postcss@8.4.47) devDependencies: astro: specifier: workspace:* @@ -5221,11 +5206,11 @@ importers: specifier: workspace:* version: link:../../../scripts tailwindcss: - specifier: ^3.4.10 - version: 3.4.10 + specifier: ^3.4.13 + version: 3.4.13 vite: - specifier: ^5.4.3 - version: 5.4.3(@types/node@18.19.31)(sass@1.78.0) + specifier: ^5.4.8 + version: 5.4.8(@types/node@18.19.31)(sass@1.79.4) packages/integrations/tailwind/test/fixtures/basic: dependencies: @@ -5241,17 +5226,17 @@ importers: packages/integrations/vue: dependencies: '@vitejs/plugin-vue': - specifier: ^5.1.3 - version: 5.1.3(vite@5.4.3(@types/node@18.19.31)(sass@1.78.0))(vue@3.5.3(typescript@5.5.4)) + specifier: ^5.1.4 + version: 5.1.4(vite@5.4.8(@types/node@18.19.31)(sass@1.79.4))(vue@3.5.10(typescript@5.6.2)) '@vitejs/plugin-vue-jsx': specifier: ^4.0.1 - version: 4.0.1(vite@5.4.3(@types/node@18.19.31)(sass@1.78.0))(vue@3.5.3(typescript@5.5.4)) + version: 4.0.1(vite@5.4.8(@types/node@18.19.31)(sass@1.79.4))(vue@3.5.10(typescript@5.6.2)) '@vue/compiler-sfc': - specifier: ^3.5.3 - version: 3.5.3 + specifier: ^3.5.10 + version: 3.5.10 vite-plugin-vue-devtools: - specifier: ^7.4.4 - version: 7.4.4(rollup@4.21.2)(vite@5.4.3(@types/node@18.19.31)(sass@1.78.0))(vue@3.5.3(typescript@5.5.4)) + specifier: ^7.4.6 + version: 7.4.6(rollup@4.23.0)(vite@5.4.8(@types/node@18.19.31)(sass@1.79.4))(vue@3.5.10(typescript@5.6.2)) devDependencies: astro: specifier: workspace:* @@ -5263,14 +5248,14 @@ importers: specifier: 1.0.0 version: 1.0.0 linkedom: - specifier: ^0.18.4 - version: 0.18.4 + specifier: ^0.18.5 + version: 0.18.5 vite: - specifier: ^5.4.3 - version: 5.4.3(@types/node@18.19.31)(sass@1.78.0) + specifier: ^5.4.8 + version: 5.4.8(@types/node@18.19.31)(sass@1.79.4) vue: - specifier: ^3.5.3 - version: 3.5.3(typescript@5.5.4) + specifier: ^3.5.10 + version: 3.5.10(typescript@5.6.2) packages/integrations/vue/test/fixtures/app-entrypoint: dependencies: @@ -5282,10 +5267,10 @@ importers: version: link:../../../../../astro vite-svg-loader: specifier: 5.1.0 - version: 5.1.0(vue@3.5.3(typescript@5.5.4)) + version: 5.1.0(vue@3.5.10(typescript@5.6.2)) vue: - specifier: ^3.5.3 - version: 3.5.3(typescript@5.5.4) + specifier: ^3.5.10 + version: 3.5.10(typescript@5.6.2) packages/integrations/vue/test/fixtures/app-entrypoint-async: dependencies: @@ -5297,10 +5282,10 @@ importers: version: link:../../../../../astro vite-svg-loader: specifier: 5.1.0 - version: 5.1.0(vue@3.5.3(typescript@5.5.4)) + version: 5.1.0(vue@3.5.10(typescript@5.6.2)) vue: - specifier: ^3.5.3 - version: 3.5.3(typescript@5.5.4) + specifier: ^3.5.10 + version: 3.5.10(typescript@5.6.2) packages/integrations/vue/test/fixtures/app-entrypoint-css: dependencies: @@ -5321,10 +5306,10 @@ importers: version: link:../../../../../astro vite-svg-loader: specifier: 5.1.0 - version: 5.1.0(vue@3.5.3(typescript@5.5.4)) + version: 5.1.0(vue@3.5.10(typescript@5.6.2)) vue: - specifier: ^3.5.3 - version: 3.5.3(typescript@5.5.4) + specifier: ^3.5.10 + version: 3.5.10(typescript@5.6.2) packages/integrations/vue/test/fixtures/app-entrypoint-relative: dependencies: @@ -5369,8 +5354,8 @@ importers: specifier: workspace:* version: link:../../../scripts linkedom: - specifier: ^0.18.4 - version: 0.18.4 + specifier: ^0.18.5 + version: 0.18.5 packages/integrations/web-vitals/test/fixtures/basics: dependencies: @@ -5378,8 +5363,8 @@ importers: specifier: workspace:* version: link:../../../../../db '@astrojs/node': - specifier: ^8.3.3 - version: 8.3.3(astro@packages+astro) + specifier: ^8.3.4 + version: 8.3.4(astro@packages+astro) '@astrojs/web-vitals': specifier: workspace:* version: link:../../.. @@ -5402,14 +5387,17 @@ importers: specifier: ^2.0.0 version: 2.0.0 hast-util-from-html: - specifier: ^2.0.2 - version: 2.0.2 + specifier: ^2.0.3 + version: 2.0.3 hast-util-to-text: specifier: ^4.0.2 version: 4.0.2 import-meta-resolve: specifier: ^4.1.0 version: 4.1.0 + js-yaml: + specifier: ^4.1.0 + version: 4.1.0 mdast-util-definitions: specifier: ^6.0.0 version: 6.0.0 @@ -5417,8 +5405,8 @@ importers: specifier: ^7.0.0 version: 7.0.0 rehype-stringify: - specifier: ^10.0.0 - version: 10.0.0 + specifier: ^10.0.1 + version: 10.0.1 remark-gfm: specifier: ^4.0.0 version: 4.0.0 @@ -5426,14 +5414,14 @@ importers: specifier: ^11.0.0 version: 11.0.0 remark-rehype: - specifier: ^11.1.0 - version: 11.1.0 + specifier: ^11.1.1 + version: 11.1.1 remark-smartypants: specifier: ^3.0.2 version: 3.0.2 shiki: - specifier: ^1.16.2 - version: 1.16.2 + specifier: ^1.21.0 + version: 1.21.0 unified: specifier: ^11.0.5 version: 11.0.5 @@ -5451,11 +5439,14 @@ importers: version: 6.0.3 devDependencies: '@types/estree': - specifier: ^1.0.5 - version: 1.0.5 + specifier: ^1.0.6 + version: 1.0.6 '@types/hast': specifier: ^3.0.4 version: 3.0.4 + '@types/js-yaml': + specifier: ^4.0.9 + version: 4.0.9 '@types/mdast': specifier: ^4.0.4 version: 4.0.4 @@ -5469,8 +5460,8 @@ importers: specifier: ^0.21.5 version: 0.21.5 mdast-util-mdx-expression: - specifier: ^2.0.0 - version: 2.0.0 + specifier: ^2.0.1 + version: 2.0.1 packages/studio: dependencies: @@ -5480,9 +5471,9 @@ importers: kleur: specifier: ^4.1.5 version: 4.1.5 - ora: - specifier: ^8.1.0 - version: 8.1.0 + yocto-spinner: + specifier: ^0.1.0 + version: 0.1.0 devDependencies: astro: specifier: workspace:* @@ -5491,11 +5482,11 @@ importers: specifier: workspace:* version: link:../../scripts typescript: - specifier: ^5.5.4 - version: 5.5.4 + specifier: ^5.6.2 + version: 5.6.2 vite: - specifier: ^5.4.3 - version: 5.4.3(@types/node@18.19.31)(sass@1.78.0) + specifier: ^5.4.8 + version: 5.4.8(@types/node@18.19.31)(sass@1.79.4) packages/telemetry: dependencies: @@ -5509,8 +5500,8 @@ importers: specifier: ^1.1.3 version: 1.1.3 dset: - specifier: ^3.1.3 - version: 3.1.3 + specifier: ^3.1.4 + version: 3.1.4 is-docker: specifier: ^3.0.0 version: 3.0.0 @@ -5596,7 +5587,7 @@ importers: version: 0.3.0 tsconfck: specifier: ^3.1.3 - version: 3.1.3(typescript@5.5.4) + version: 3.1.3(typescript@5.6.2) packages: @@ -5677,6 +5668,11 @@ packages: peerDependencies: astro: ^4.2.0 + '@astrojs/node@8.3.4': + resolution: {integrity: sha512-xzQs39goN7xh9np9rypGmbgZj3AmmjNxEMj9ZWz5aBERlqqFF3n8A/w/uaJeZ/bkHS60l1BXVS0tgsQt9MFqBA==} + peerDependencies: + astro: ^4.2.0 + '@astrojs/node@9.0.0-alpha.1': resolution: {integrity: sha512-5KsaJYuAnKP4tmT/skEWLs4UP6FQhtwIVa26MBU5imiS/aL33cIwmZ7Gl2W0rP/t4Wnz9ehf42lXWXLPekhETw==} peerDependencies: @@ -5843,8 +5839,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-react-jsx-source@7.24.1': - resolution: {integrity: sha512-1v202n7aUq4uXAieRTKcwPzNyphlCuqHHDcdSNc+vdhoTEZcFMh+L5yZuCmGaIO7bs1nJUNfHB89TZyoL48xNA==} + '@babel/plugin-transform-react-jsx-source@7.24.7': + resolution: {integrity: sha512-J2z+MWzZHVOemyLweMqngXrgGC42jQ//R0KdxqkIz/OrbVIIlhFI3WigZ5fO+nwFvBlncr4MGapd8vTyc7RPNQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -5873,8 +5869,8 @@ packages: resolution: {integrity: sha512-VJ4XsrD+nOvlXyLzmLzUs/0qjFS4sK30te5yEFlvbbUNEgKaVb2BHZUpAL+ttLPQAHNrsI3zZisbfha5Cvr8vg==} engines: {node: '>=6.9.0'} - '@babel/types@7.25.4': - resolution: {integrity: sha512-zQ1ijeeCXVEh+aNL0RlmkPkG8HUiDcU2pzQQFjtbntgAczRASFzj4H+6+bV+dy1ntKR14I/DypeuRG1uma98iQ==} + '@babel/types@7.25.6': + resolution: {integrity: sha512-/l42B1qxpG6RdfYf343Uw1vmDjeNhneUXtzhojE7pDgfpEypmRhI6j1kr17XCVv4Cgl9HdAiQY2x0GwKm7rWCw==} engines: {node: '>=6.9.0'} '@biomejs/biome@1.8.3': @@ -6122,8 +6118,8 @@ packages: peerDependencies: postcss: ^8.4 - '@csstools/postcss-light-dark-function@2.0.2': - resolution: {integrity: sha512-QAWWDJtJ7ywzhaMe09QwhjhuwB0XN04fW1MFwoEJMcYyiQub4a57mVFV+ngQEekUhsqe/EtKVCzyOx4q3xshag==} + '@csstools/postcss-light-dark-function@2.0.4': + resolution: {integrity: sha512-yHUt5DZ61Irvp72notmAl3Zt4Me50EWToWNocazyIFTVYFwwo/EucmV3hWi9zJehu3rOSvMclL7DzvRDfbak/A==} engines: {node: '>=18'} peerDependencies: postcss: ^8.4 @@ -6424,27 +6420,31 @@ packages: resolution: {integrity: sha512-fTxvnS1sRMu3+JjXwJG0j/i4RT9u4qJ+lqS/yCGap4lH4zZGzQ7tu+xZqQmcMZq5OBZDL4QRxQzRjkWcGt8IVw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@eslint/core@0.6.0': + resolution: {integrity: sha512-8I2Q8ykA4J0x0o7cg67FPVnehcqWTBehu/lmY+bolPFHGjh49YzGBMXTvpqVgEbBdvNCSxj6iFgiIyHzf03lzg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@eslint/eslintrc@3.1.0': resolution: {integrity: sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/js@9.10.0': - resolution: {integrity: sha512-fuXtbiP5GWIn8Fz+LWoOMVf/Jxm+aajZYkhi6CuEm4SxymFM+eUWzbO9qXT+L0iCkL5+KGYMCSGxo686H19S1g==} + '@eslint/js@9.11.1': + resolution: {integrity: sha512-/qu+TWz8WwPWc7/HcIJKi+c+MOm46GdVaSlTTQcaqaL53+GsoA6MxWp5PtTx48qbSP7ylM1Kn7nhvkugfJvRSA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@eslint/object-schema@2.1.4': resolution: {integrity: sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/plugin-kit@0.1.0': - resolution: {integrity: sha512-autAXT203ixhqei9xt+qkYOvY8l6LAFIdT2UXc/RPNeUVfqRF1BV94GTJyVPFKT8nFM6MyVJhjLj9E8JWvf5zQ==} + '@eslint/plugin-kit@0.2.0': + resolution: {integrity: sha512-vH9PiIMMwvhCx31Af3HiGzsVNULDbyVkHXwlemn/B0TFj/00ho3y55efXrUZTfQipxoHC5u4xq6zblww1zm1Ig==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@fontsource/monofett@5.0.22': - resolution: {integrity: sha512-GzSuU+qHQ4A1AOu/5IH2DkBqLYSzj2T65o4hNNxgbtOgaJ8xuF9a4BcI1ei7BSOHgwENlhXMuHUR6ExCHVuwVA==} + '@fontsource/monofett@5.1.0': + resolution: {integrity: sha512-9q+bvgtXR3OZa3MFjeRsxHZsBkXtAsz3a3f06ehuFz2BTafJuWRLKl5RKbe3tBnRJB0sPKjTnmQsgBLDVz4SUw==} - '@fontsource/montserrat@5.0.20': - resolution: {integrity: sha512-9woBFkQBhhuEyeHyy6s9IKokjyC8NKuwv+yUw7dqOw2E0zRzD6pxk/KYt+SzKHz5B77AkGKu7swp4dI6mptQkw==} + '@fontsource/montserrat@5.1.0': + resolution: {integrity: sha512-HB4+rWP9Y8g6T9RGRVJk2SvAJtx2eBAXuivvPOqQdD806/9WESUfucfH9LqFj3bGgdhNCfh0Rv0NGuwEmBLRiw==} '@fortawesome/fontawesome-free@6.6.0': resolution: {integrity: sha512-60G28ke/sXdtS9KZCpZSHHkCbdsOGEhIUGlwq6yhY74UpTiToIh8np7A8yphhM4BWsvNFtIvLpi4co+h9Mr9Ow==} @@ -6615,88 +6615,54 @@ packages: peerDependencies: tslib: '2' - '@libsql/client@0.10.0': - resolution: {integrity: sha512-2ERn08T4XOVx34yBtUPq0RDjAdd9TJ5qNH/izugr208ml2F94mk92qC64kXyDVQINodWJvp3kAdq6P4zTtCZ7g==} + '@libsql/client@0.14.0': + resolution: {integrity: sha512-/9HEKfn6fwXB5aTEEoMeFh4CtG0ZzbncBb1e++OCdVpgKZ/xyMsIVYXm0w7Pv4RUel803vE6LwniB3PqD72R0Q==} - '@libsql/core@0.10.0': - resolution: {integrity: sha512-rqynAXGaiSpTsykOZdBtI1N4z4O+KZ6mt33K/aHeXAY0gSIfK/ctxuWa0Y1Bjo4FMz1idBTCXz4Ps5kITOvZZw==} + '@libsql/core@0.14.0': + resolution: {integrity: sha512-nhbuXf7GP3PSZgdCY2Ecj8vz187ptHlZQ0VRc751oB2C1W8jQUXKKklvt7t1LJiUTQBVJuadF628eUk+3cRi4Q==} - '@libsql/darwin-arm64@0.3.19': - resolution: {integrity: sha512-rmOqsLcDI65zzxlUOoEiPJLhqmbFsZF6p4UJQ2kMqB+Kc0Rt5/A1OAdOZ/Wo8fQfJWjR1IbkbpEINFioyKf+nQ==} + '@libsql/darwin-arm64@0.4.5': + resolution: {integrity: sha512-xLdnn0NrgSk6OMi716FFs/27Hs33jtSd2fkKi/72Ey/qBtPWcB1BMurDQekzi0yAcfQTjGqIz7tpOibyjiEPyQ==} cpu: [arm64] os: [darwin] - '@libsql/darwin-arm64@0.4.1': - resolution: {integrity: sha512-XICT9/OyU8Aa9Iv1xZIHgvM09n/1OQUk3VC+s5uavzdiGHrDMkOWzN47JN7/FiMa/NWrcgoEiDMk3+e7mE53Ig==} - cpu: [arm64] - os: [darwin] - - '@libsql/darwin-x64@0.3.19': - resolution: {integrity: sha512-q9O55B646zU+644SMmOQL3FIfpmEvdWpRpzubwFc2trsa+zoBlSkHuzU9v/C+UNoPHQVRMP7KQctJ455I/h/xw==} + '@libsql/darwin-x64@0.4.5': + resolution: {integrity: sha512-rZsEWj0H7oCqd5Y2pe0RzKmuQXC2OB1RbnFy4CvjeAjT6MP6mFp+Vx9mTCAUuJMhuoSVMsFPUJRpAQznl9E3Tg==} cpu: [x64] os: [darwin] - '@libsql/darwin-x64@0.4.1': - resolution: {integrity: sha512-pSKxhRrhu4SsTD+IBRZXcs1SkwMdeAG1tv6Z/Ctp/sOEYrgkU8MDKLqkOr9NsmwpK4S0+JdwjkLMyhTkct/5TQ==} - cpu: [x64] - os: [darwin] + '@libsql/hrana-client@0.7.0': + resolution: {integrity: sha512-OF8fFQSkbL7vJY9rfuegK1R7sPgQ6kFMkDamiEccNUvieQ+3urzfDFI616oPl8V7T9zRmnTkSjMOImYCAVRVuw==} - '@libsql/hrana-client@0.6.2': - resolution: {integrity: sha512-MWxgD7mXLNf9FXXiM0bc90wCjZSpErWKr5mGza7ERy2FJNNMXd7JIOv+DepBA1FQTIfI8TFO4/QDYgaQC0goNw==} - - '@libsql/isomorphic-fetch@0.2.1': - resolution: {integrity: sha512-Sv07QP1Aw8A5OOrmKgRUBKe2fFhF2hpGJhtHe3d1aRnTESZCGkn//0zDycMKTGamVWb3oLYRroOsCV8Ukes9GA==} + '@libsql/isomorphic-fetch@0.3.1': + resolution: {integrity: sha512-6kK3SUK5Uu56zPq/Las620n5aS9xJq+jMBcNSOmjhNf/MUvdyji4vrMTqD7ptY7/4/CAVEAYDeotUz60LNQHtw==} + engines: {node: '>=18.0.0'} '@libsql/isomorphic-ws@0.1.5': resolution: {integrity: sha512-DtLWIH29onUYR00i0GlQ3UdcTRC6EP4u9w/h9LxpUZJWRMARk6dQwZ6Jkd+QdwVpuAOrdxt18v0K2uIYR3fwFg==} - '@libsql/linux-arm64-gnu@0.3.19': - resolution: {integrity: sha512-mgeAUU1oqqh57k7I3cQyU6Trpdsdt607eFyEmH5QO7dv303ti+LjUvh1pp21QWV6WX7wZyjeJV1/VzEImB+jRg==} - cpu: [arm64] - os: [linux] - - '@libsql/linux-arm64-gnu@0.4.1': - resolution: {integrity: sha512-9lpvb24tO2qZd9nq5dlq3ESA3hSKYWBIK7lJjfiCM6f7a70AUwBY9QoPJV9q4gILIyVnR1YBGrlm50nnb+dYgw==} - cpu: [arm64] - os: [linux] - - '@libsql/linux-arm64-musl@0.3.19': - resolution: {integrity: sha512-VEZtxghyK6zwGzU9PHohvNxthruSxBEnRrX7BSL5jQ62tN4n2JNepJ6SdzXp70pdzTfwroOj/eMwiPt94gkVRg==} + '@libsql/linux-arm64-gnu@0.4.5': + resolution: {integrity: sha512-VR09iu6KWGJ6fauCn59u/jJ9OA+/A2yQ0dr2HDN2zkRueLC6D2oGYt4gPfLZPFKf+WJpVMtIhNfd+Ru9MMaFkA==} cpu: [arm64] os: [linux] - '@libsql/linux-arm64-musl@0.4.1': - resolution: {integrity: sha512-lyxi+lFxE+NcBRDMQCxCtDg3c4WcKAbc9u63d5+B23Vm+UgphD9XY4seu+tGrBy1MU2tuNVix7r9S7ECpAaVrA==} + '@libsql/linux-arm64-musl@0.4.5': + resolution: {integrity: sha512-74hvD5ej4rBshhxFGNYU16a3m8B/NjIPvhlZ/flG1Oeydfo6AuUXSSNFi+H5+zi9/uWuzyz5TLVeQcraoUV10A==} cpu: [arm64] os: [linux] - '@libsql/linux-x64-gnu@0.3.19': - resolution: {integrity: sha512-2t/J7LD5w2f63wGihEO+0GxfTyYIyLGEvTFEsMO16XI5o7IS9vcSHrxsvAJs4w2Pf907uDjmc7fUfMg6L82BrQ==} - cpu: [x64] - os: [linux] - - '@libsql/linux-x64-gnu@0.4.1': - resolution: {integrity: sha512-psvuQ3UFBEmDFV8ZHG+WkUHIJiWv+elZ+zIPvOVedlIKdxG1O+8WthWUAhFHOGnbiyzc4sAZ4c3de1oCvyHxyQ==} - cpu: [x64] - os: [linux] - - '@libsql/linux-x64-musl@0.3.19': - resolution: {integrity: sha512-BLsXyJaL8gZD8+3W2LU08lDEd9MIgGds0yPy5iNPp8tfhXx3pV/Fge2GErN0FC+nzt4DYQtjL+A9GUMglQefXQ==} + '@libsql/linux-x64-gnu@0.4.5': + resolution: {integrity: sha512-gb5WObGO3+rbuG8h9font1N02iF+zgYAgY0wNa8BNiZ5A9UolZKFxiqGFS7eHaAYfemHJKKTT+aAt3X2p5TibA==} cpu: [x64] os: [linux] - '@libsql/linux-x64-musl@0.4.1': - resolution: {integrity: sha512-PDidJ3AhGDqosGg3OAZzGxMFIbnuOALya4BoezJKl667AFv3x7BBQ30H81Mngsq3Fh8RkJkXSdWfL91+Txb1iA==} + '@libsql/linux-x64-musl@0.4.5': + resolution: {integrity: sha512-JfyE6OVC5X4Nr4cFF77VhB1o+hBRxAqYT9YdeqnWdAQSYc/ASi5HnRALLAQEsGacFPZZ32pixfraQmPE3iJFfw==} cpu: [x64] os: [linux] - '@libsql/win32-x64-msvc@0.3.19': - resolution: {integrity: sha512-ay1X9AobE4BpzG0XPw1gplyLZPGHIgJOovvW23gUrukRegiUP62uzhpRbKNogLlUOynyXeq//prHgPXiebUfWg==} - cpu: [x64] - os: [win32] - - '@libsql/win32-x64-msvc@0.4.1': - resolution: {integrity: sha512-IdODVqV/PrdOnHA/004uWyorZQuRsB7U7bCRCE3vXgABj3eJLJGc6cv2C6ksEaEoVxJbD8k53H4VVAGrtYwXzQ==} + '@libsql/win32-x64-msvc@0.4.5': + resolution: {integrity: sha512-57GGurNJhOhq3XIopLdGnCoQ4kQAcmbmzzFoC4tpvDE/KSbwZ/13zqJWhQA41nMGk/PKM1XKfKmbIybKx1+eqA==} cpu: [x64] os: [win32] @@ -6749,15 +6715,15 @@ packages: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} - '@oslojs/encoding@0.4.1': - resolution: {integrity: sha512-hkjo6MuIK/kQR5CrGNdAPZhS01ZCXuWDRJ187zh6qqF2+yMHZpD9fAYpX8q2bOO6Ryhl3XpCT6kUX76N8hhm4Q==} + '@oslojs/encoding@1.1.0': + resolution: {integrity: sha512-70wQhgYmndg4GCPxPPxPGevRKqTIJ2Nh4OkiMWmDAVYsTQ+Ta7Sq+rPevXyXGdzr30/qZBnyOalCszoMxlyldQ==} '@pkgjs/parseargs@0.11.0': resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} - '@playwright/test@1.47.0': - resolution: {integrity: sha512-SgAdlSwYVpToI4e/IH19IHHWvoijAYH5hu2MWSXptRypLSnzj51PcGD+rsOXFayde4P9ZLi+loXVwArg6IUkCA==} + '@playwright/test@1.47.2': + resolution: {integrity: sha512-jTXRsoSPONAs8Za9QEQdyjFn+0ZQFjCiIztAIF6bi1HqhBzG9Ma7g1WotyiGqFSBRZjIEqMdT8RUlbk1QVhzCQ==} engines: {node: '>=18'} hasBin: true @@ -6799,8 +6765,8 @@ packages: resolution: {integrity: sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==} engines: {node: '>= 8.0.0'} - '@rollup/pluginutils@5.1.0': - resolution: {integrity: sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==} + '@rollup/pluginutils@5.1.2': + resolution: {integrity: sha512-/FIdS3PyZ39bjZlwqFnWqCOVnW7o963LtKMwQOD0NhQqw22gSr2YY1afu3FxRip4ZCZNsD5jq6Aaz6QV3D/Njw==} engines: {node: '>=14.0.0'} peerDependencies: rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 @@ -6808,98 +6774,107 @@ packages: rollup: optional: true - '@rollup/rollup-android-arm-eabi@4.21.2': - resolution: {integrity: sha512-fSuPrt0ZO8uXeS+xP3b+yYTCBUd05MoSp2N/MFOgjhhUhMmchXlpTQrTpI8T+YAwAQuK7MafsCOxW7VrPMrJcg==} + '@rollup/rollup-android-arm-eabi@4.23.0': + resolution: {integrity: sha512-8OR+Ok3SGEMsAZispLx8jruuXw0HVF16k+ub2eNXKHDmdxL4cf9NlNpAzhlOhNyXzKDEJuFeq0nZm+XlNb1IFw==} cpu: [arm] os: [android] - '@rollup/rollup-android-arm64@4.21.2': - resolution: {integrity: sha512-xGU5ZQmPlsjQS6tzTTGwMsnKUtu0WVbl0hYpTPauvbRAnmIvpInhJtgjj3mcuJpEiuUw4v1s4BimkdfDWlh7gA==} + '@rollup/rollup-android-arm64@4.23.0': + resolution: {integrity: sha512-rEFtX1nP8gqmLmPZsXRMoLVNB5JBwOzIAk/XAcEPuKrPa2nPJ+DuGGpfQUR0XjRm8KjHfTZLpWbKXkA5BoFL3w==} cpu: [arm64] os: [android] - '@rollup/rollup-darwin-arm64@4.21.2': - resolution: {integrity: sha512-99AhQ3/ZMxU7jw34Sq8brzXqWH/bMnf7ZVhvLk9QU2cOepbQSVTns6qoErJmSiAvU3InRqC2RRZ5ovh1KN0d0Q==} + '@rollup/rollup-darwin-arm64@4.23.0': + resolution: {integrity: sha512-ZbqlMkJRMMPeapfaU4drYHns7Q5MIxjM/QeOO62qQZGPh9XWziap+NF9fsqPHT0KzEL6HaPspC7sOwpgyA3J9g==} cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.21.2': - resolution: {integrity: sha512-ZbRaUvw2iN/y37x6dY50D8m2BnDbBjlnMPotDi/qITMJ4sIxNY33HArjikDyakhSv0+ybdUxhWxE6kTI4oX26w==} + '@rollup/rollup-darwin-x64@4.23.0': + resolution: {integrity: sha512-PfmgQp78xx5rBCgn2oYPQ1rQTtOaQCna0kRaBlc5w7RlA3TDGGo7m3XaptgitUZ54US9915i7KeVPHoy3/W8tA==} cpu: [x64] os: [darwin] - '@rollup/rollup-linux-arm-gnueabihf@4.21.2': - resolution: {integrity: sha512-ztRJJMiE8nnU1YFcdbd9BcH6bGWG1z+jP+IPW2oDUAPxPjo9dverIOyXz76m6IPA6udEL12reYeLojzW2cYL7w==} + '@rollup/rollup-linux-arm-gnueabihf@4.23.0': + resolution: {integrity: sha512-WAeZfAAPus56eQgBioezXRRzArAjWJGjNo/M+BHZygUcs9EePIuGI1Wfc6U/Ki+tMW17FFGvhCfYnfcKPh18SA==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm-musleabihf@4.21.2': - resolution: {integrity: sha512-flOcGHDZajGKYpLV0JNc0VFH361M7rnV1ee+NTeC/BQQ1/0pllYcFmxpagltANYt8FYf9+kL6RSk80Ziwyhr7w==} + '@rollup/rollup-linux-arm-musleabihf@4.23.0': + resolution: {integrity: sha512-v7PGcp1O5XKZxKX8phTXtmJDVpE20Ub1eF6w9iMmI3qrrPak6yR9/5eeq7ziLMrMTjppkkskXyxnmm00HdtXjA==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm64-gnu@4.21.2': - resolution: {integrity: sha512-69CF19Kp3TdMopyteO/LJbWufOzqqXzkrv4L2sP8kfMaAQ6iwky7NoXTp7bD6/irKgknDKM0P9E/1l5XxVQAhw==} + '@rollup/rollup-linux-arm64-gnu@4.23.0': + resolution: {integrity: sha512-nAbWsDZ9UkU6xQiXEyXBNHAKbzSAi95H3gTStJq9UGiS1v+YVXwRHcQOQEF/3CHuhX5BVhShKoeOf6Q/1M+Zhg==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-arm64-musl@4.21.2': - resolution: {integrity: sha512-48pD/fJkTiHAZTnZwR0VzHrao70/4MlzJrq0ZsILjLW/Ab/1XlVUStYyGt7tdyIiVSlGZbnliqmult/QGA2O2w==} + '@rollup/rollup-linux-arm64-musl@4.23.0': + resolution: {integrity: sha512-5QT/Di5FbGNPaVw8hHO1wETunwkPuZBIu6W+5GNArlKHD9fkMHy7vS8zGHJk38oObXfWdsuLMogD4sBySLJ54g==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-powerpc64le-gnu@4.21.2': - resolution: {integrity: sha512-cZdyuInj0ofc7mAQpKcPR2a2iu4YM4FQfuUzCVA2u4HI95lCwzjoPtdWjdpDKyHxI0UO82bLDoOaLfpZ/wviyQ==} + '@rollup/rollup-linux-powerpc64le-gnu@4.23.0': + resolution: {integrity: sha512-Sefl6vPyn5axzCsO13r1sHLcmPuiSOrKIImnq34CBurntcJ+lkQgAaTt/9JkgGmaZJ+OkaHmAJl4Bfd0DmdtOQ==} cpu: [ppc64] os: [linux] - '@rollup/rollup-linux-riscv64-gnu@4.21.2': - resolution: {integrity: sha512-RL56JMT6NwQ0lXIQmMIWr1SW28z4E4pOhRRNqwWZeXpRlykRIlEpSWdsgNWJbYBEWD84eocjSGDu/XxbYeCmwg==} + '@rollup/rollup-linux-riscv64-gnu@4.23.0': + resolution: {integrity: sha512-o4QI2KU/QbP7ZExMse6ULotdV3oJUYMrdx3rBZCgUF3ur3gJPfe8Fuasn6tia16c5kZBBw0aTmaUygad6VB/hQ==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-s390x-gnu@4.21.2': - resolution: {integrity: sha512-PMxkrWS9z38bCr3rWvDFVGD6sFeZJw4iQlhrup7ReGmfn7Oukrr/zweLhYX6v2/8J6Cep9IEA/SmjXjCmSbrMQ==} + '@rollup/rollup-linux-s390x-gnu@4.23.0': + resolution: {integrity: sha512-+bxqx+V/D4FGrpXzPGKp/SEZIZ8cIW3K7wOtcJAoCrmXvzRtmdUhYNbgd+RztLzfDEfA2WtKj5F4tcbNPuqgeg==} cpu: [s390x] os: [linux] - '@rollup/rollup-linux-x64-gnu@4.21.2': - resolution: {integrity: sha512-B90tYAUoLhU22olrafY3JQCFLnT3NglazdwkHyxNDYF/zAxJt5fJUB/yBoWFoIQ7SQj+KLe3iL4BhOMa9fzgpw==} + '@rollup/rollup-linux-x64-gnu@4.23.0': + resolution: {integrity: sha512-I/eXsdVoCKtSgK9OwyQKPAfricWKUMNCwJKtatRYMmDo5N859tbO3UsBw5kT3dU1n6ZcM1JDzPRSGhAUkxfLxw==} cpu: [x64] os: [linux] - '@rollup/rollup-linux-x64-musl@4.21.2': - resolution: {integrity: sha512-7twFizNXudESmC9oneLGIUmoHiiLppz/Xs5uJQ4ShvE6234K0VB1/aJYU3f/4g7PhssLGKBVCC37uRkkOi8wjg==} + '@rollup/rollup-linux-x64-musl@4.23.0': + resolution: {integrity: sha512-4ZoDZy5ShLbbe1KPSafbFh1vbl0asTVfkABC7eWqIs01+66ncM82YJxV2VtV3YVJTqq2P8HMx3DCoRSWB/N3rw==} cpu: [x64] os: [linux] - '@rollup/rollup-win32-arm64-msvc@4.21.2': - resolution: {integrity: sha512-9rRero0E7qTeYf6+rFh3AErTNU1VCQg2mn7CQcI44vNUWM9Ze7MSRS/9RFuSsox+vstRt97+x3sOhEey024FRQ==} + '@rollup/rollup-win32-arm64-msvc@4.23.0': + resolution: {integrity: sha512-+5Ky8dhft4STaOEbZu3/NU4QIyYssKO+r1cD3FzuusA0vO5gso15on7qGzKdNXnc1gOrsgCqZjRw1w+zL4y4hQ==} cpu: [arm64] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.21.2': - resolution: {integrity: sha512-5rA4vjlqgrpbFVVHX3qkrCo/fZTj1q0Xxpg+Z7yIo3J2AilW7t2+n6Q8Jrx+4MrYpAnjttTYF8rr7bP46BPzRw==} + '@rollup/rollup-win32-ia32-msvc@4.23.0': + resolution: {integrity: sha512-0SPJk4cPZQhq9qA1UhIRumSE3+JJIBBjtlGl5PNC///BoaByckNZd53rOYD0glpTkYFBQSt7AkMeLVPfx65+BQ==} cpu: [ia32] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.21.2': - resolution: {integrity: sha512-6UUxd0+SKomjdzuAcp+HAmxw1FlGBnl1v2yEPSabtx4lBfdXHDVsW7+lQkgz9cNFJGY3AWR7+V8P5BqkD9L9nA==} + '@rollup/rollup-win32-x64-msvc@4.23.0': + resolution: {integrity: sha512-lqCK5GQC8fNo0+JvTSxcG7YB1UKYp8yrNLhsArlvPWN+16ovSZgoehlVHg6X0sSWPUkpjRBR5TuR12ZugowZ4g==} cpu: [x64] os: [win32] - '@shikijs/core@1.16.2': - resolution: {integrity: sha512-XSVH5OZCvE4WLMgdoBqfPMYmGHGmCC3OgZhw0S7KcSi2XKZ+5oHGe71GFnTljgdOxvxx5WrRks6QoTLKrl1eAA==} + '@shikijs/core@1.21.0': + resolution: {integrity: sha512-zAPMJdiGuqXpZQ+pWNezQAk5xhzRXBNiECFPcJLtUdsFM3f//G95Z15EHTnHchYycU8kIIysqGgxp8OVSj1SPQ==} + + '@shikijs/engine-javascript@1.21.0': + resolution: {integrity: sha512-jxQHNtVP17edFW4/0vICqAVLDAxmyV31MQJL4U/Kg+heQALeKYVOWo0sMmEZ18FqBt+9UCdyqGKYE7bLRtk9mg==} - '@shikijs/vscode-textmate@9.2.0': - resolution: {integrity: sha512-5FinaOp6Vdh/dl4/yaOTh0ZeKch+rYS8DUb38V3GMKYVkdqzxw53lViRKUYkVILRiVQT7dcPC7VvAKOR73zVtQ==} + '@shikijs/engine-oniguruma@1.21.0': + resolution: {integrity: sha512-AIZ76XocENCrtYzVU7S4GY/HL+tgHGbVU+qhiDyNw1qgCA5OSi4B4+HY4BtAoJSMGuD/L5hfTzoRVbzEm2WTvg==} + + '@shikijs/types@1.21.0': + resolution: {integrity: sha512-tzndANDhi5DUndBtpojEq/42+dpUF2wS7wdCDQaFtIXm3Rd1QkrcVgSSRLOvEwexekihOXfbYJINW37g96tJRw==} + + '@shikijs/vscode-textmate@9.2.2': + resolution: {integrity: sha512-TMp15K+GGYrWlZM8+Lnj9EaHEFmOen0WJBrfa17hF7taDOYthuPPV0GWzfd/9iMij0akS/8Yw2ikquH7uVi/fg==} '@sindresorhus/merge-streams@2.3.0': resolution: {integrity: sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==} engines: {node: '>=18'} - '@solidjs/router@0.14.3': - resolution: {integrity: sha512-9p4k4zL2baK/1XRQALbFcaQ4IikjkWmxqYQtFqLzjONUejhL1uqJHtzxB4tZjmNqtRANVRnTDbJfzjvaD9k+pQ==} + '@solidjs/router@0.14.7': + resolution: {integrity: sha512-agLf8AUz5XnW6+F64a4Iq+QQQobI5zGHQ/gUYd/WHSwcbnFpavbsiwRLob3YhWMXVX3sQyn4ekUN+uchMCRupw==} peerDependencies: solid-js: ^1.8.6 @@ -6984,15 +6959,15 @@ packages: '@types/dlv@1.1.4': resolution: {integrity: sha512-m8KmImw4Jt+4rIgupwfivrWEOnj1LzkmKkqbh075uG13eTQ1ZxHWT6T0vIdSQhLIjQCiR0n0lZdtyDOPO1x2Mw==} - '@types/dom-view-transitions@1.0.5': - resolution: {integrity: sha512-N2sILR7fxSMnaFaAPwGj4DtHCXjIyQTHt+xJyf9jATpzUsTkMNM0DWtqZB6W7f501B/Y0tq3uqat/VlbjuTpMA==} - '@types/estree-jsx@1.0.5': resolution: {integrity: sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==} '@types/estree@1.0.5': resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} + '@types/estree@1.0.6': + resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} + '@types/express-serve-static-core@4.19.0': resolution: {integrity: sha512-bGyep3JqPCRry1wq+O5n7oiBgGWmeIJXPjXXCo8EK0u8duZGSYar7cGqd3ML2JUsLGeB7fmc06KYo9fLGWqPvQ==} @@ -7017,6 +6992,9 @@ packages: '@types/js-yaml@4.0.9': resolution: {integrity: sha512-k4MGaQl5TGo/iipqb2UDG2UwjXziSWkh0uysQelTlJpX1qGlpUZYm8PnO4DxG1qBomtJUdYJ6qR6xdIah10JLg==} + '@types/json-schema@7.0.15': + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + '@types/katex@0.16.7': resolution: {integrity: sha512-HMwFiRujE5PjrgwHQ25+bsLJgowjGjm5Z8FVSf0N6PwgJrwxH0QxzHYDcKsTfV3wva0vzrpqMTJS2jXPr5BMEQ==} @@ -7080,8 +7058,8 @@ packages: '@types/react-dom@18.3.0': resolution: {integrity: sha512-EhwApuTmMBmXuFOikhQLIBUn6uFg81SwLMOAUgodJF14SOBOCMdU04gDoYi0WOJJHD144TL32z4yDqCW3dnkQg==} - '@types/react@18.3.5': - resolution: {integrity: sha512-WeqMfGJLGuLCqHGYRGHxnKrXcTitc6L/nBUWfWPcTarG3t9PsquqUMuVeXZeca+mglY4Vo5GZjCi0A3Or2lnxA==} + '@types/react@18.3.10': + resolution: {integrity: sha512-02sAAlBnP39JgXwkAq3PeU9DVaaGpZyF3MGcC0MKgQVkZor5IiiDAipVaxQHtDJAmO4GIy/rVBy/LzVj76Cyqg==} '@types/relateurl@0.2.33': resolution: {integrity: sha512-bTQCKsVbIdzLqZhLkF5fcJQreE4y1ro4DIyVrlDNSCJRRwHhB8Z+4zXXa8jN6eDvc2HbRsEYgbvrnGvi54EpSw==} @@ -7128,8 +7106,8 @@ packages: '@types/yargs-parser@21.0.3': resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} - '@typescript-eslint/eslint-plugin@8.4.0': - resolution: {integrity: sha512-rg8LGdv7ri3oAlenMACk9e+AR4wUV0yrrG+XKsGKOK0EVgeEDqurkXMPILG2836fW4ibokTB5v4b6Z9+GYQDEw==} + '@typescript-eslint/eslint-plugin@8.8.0': + resolution: {integrity: sha512-wORFWjU30B2WJ/aXBfOm1LX9v9nyt9D3jsSOxC3cCaTQGCW5k4jNpmjFv3U7p/7s4yvdjHzwtv2Sd2dOyhjS0A==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 @@ -7139,8 +7117,8 @@ packages: typescript: optional: true - '@typescript-eslint/parser@8.4.0': - resolution: {integrity: sha512-NHgWmKSgJk5K9N16GIhQ4jSobBoJwrmURaLErad0qlLjrpP5bECYg+wxVTGlGZmJbU03jj/dfnb6V9bw+5icsA==} + '@typescript-eslint/parser@8.8.0': + resolution: {integrity: sha512-uEFUsgR+tl8GmzmLjRqz+VrDv4eoaMqMXW7ruXfgThaAShO9JTciKpEsB+TvnfFfbg5IpujgMXVV36gOJRLtZg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -7149,12 +7127,12 @@ packages: typescript: optional: true - '@typescript-eslint/scope-manager@8.4.0': - resolution: {integrity: sha512-n2jFxLeY0JmKfUqy3P70rs6vdoPjHK8P/w+zJcV3fk0b0BwRXC/zxRTEnAsgYT7MwdQDt/ZEbtdzdVC+hcpF0A==} + '@typescript-eslint/scope-manager@8.8.0': + resolution: {integrity: sha512-EL8eaGC6gx3jDd8GwEFEV091210U97J0jeEHrAYvIYosmEGet4wJ+g0SYmLu+oRiAwbSA5AVrt6DxLHfdd+bUg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/type-utils@8.4.0': - resolution: {integrity: sha512-pu2PAmNrl9KX6TtirVOrbLPLwDmASpZhK/XU7WvoKoCUkdtq9zF7qQ7gna0GBZFN0hci0vHaSusiL2WpsQk37A==} + '@typescript-eslint/type-utils@8.8.0': + resolution: {integrity: sha512-IKwJSS7bCqyCeG4NVGxnOP6lLT9Okc3Zj8hLO96bpMkJab+10HIfJbMouLrlpyOr3yrQ1cA413YPFiGd1mW9/Q==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '*' @@ -7162,12 +7140,12 @@ packages: typescript: optional: true - '@typescript-eslint/types@8.4.0': - resolution: {integrity: sha512-T1RB3KQdskh9t3v/qv7niK6P8yvn7ja1mS7QK7XfRVL6wtZ8/mFs/FHf4fKvTA0rKnqnYxl/uHFNbnEt0phgbw==} + '@typescript-eslint/types@8.8.0': + resolution: {integrity: sha512-QJwc50hRCgBd/k12sTykOJbESe1RrzmX6COk8Y525C9l7oweZ+1lw9JiU56im7Amm8swlz00DRIlxMYLizr2Vw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/typescript-estree@8.4.0': - resolution: {integrity: sha512-kJ2OIP4dQw5gdI4uXsaxUZHRwWAGpREJ9Zq6D5L0BweyOrWsL6Sz0YcAZGWhvKnH7fm1J5YFE1JrQL0c9dd53A==} + '@typescript-eslint/typescript-estree@8.8.0': + resolution: {integrity: sha512-ZaMJwc/0ckLz5DaAZ+pNLmHv8AMVGtfWxZe/x2JVEkD5LnmhWiQMMcYT7IY7gkdJuzJ9P14fRy28lUrlDSWYdw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '*' @@ -7175,14 +7153,14 @@ packages: typescript: optional: true - '@typescript-eslint/utils@8.4.0': - resolution: {integrity: sha512-swULW8n1IKLjRAgciCkTCafyTHHfwVQFt8DovmaF69sKbOxTSFMmIZaSHjqO9i/RV0wIblaawhzvtva8Nmm7lQ==} + '@typescript-eslint/utils@8.8.0': + resolution: {integrity: sha512-QE2MgfOTem00qrlPgyByaCHay9yb1+9BjnMFnSFkUKQfu7adBXDTnCAivURnuPPAG/qiB+kzKkZKmKfaMT0zVg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 - '@typescript-eslint/visitor-keys@8.4.0': - resolution: {integrity: sha512-zTQD6WLNTre1hj5wp09nBIDiOc2U5r/qmzo7wxPn4ZgAjHql09EofqhF9WF+fZHzL5aCyaIpPcT2hyxl73kr9A==} + '@typescript-eslint/visitor-keys@8.8.0': + resolution: {integrity: sha512-8mq51Lx6Hpmd7HnA2fcHQo3YgfX1qbccxQOgZcb4tvasu//zXRaA1j5ZRFeCw/VRAdFi4mRM9DnZw0Nu0Q2d1g==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@typescript/twoslash@3.1.0': @@ -7197,8 +7175,8 @@ packages: '@ungap/structured-clone@1.2.0': resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} - '@vitejs/plugin-react@4.3.1': - resolution: {integrity: sha512-m/V2syj5CuVnaxcUJOQRel/Wr31FFXRFlnOoq1TVtkCxsY5veGMTEmpWHndrhB2U8ScHtCQB1e+4hWYExQc6Lg==} + '@vitejs/plugin-react@4.3.2': + resolution: {integrity: sha512-hieu+o05v4glEBucTcKMK3dlES0OeJlD9YVOAPraVMOInBCwzumaIFiUjr4bHK7NPgnAHgiskUoceKercrN8vg==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: vite: ^4.2.0 || ^5.0.0 @@ -7210,16 +7188,13 @@ packages: vite: ^5.0.0 vue: ^3.0.0 - '@vitejs/plugin-vue@5.1.3': - resolution: {integrity: sha512-3xbWsKEKXYlmX82aOHufFQVnkbMC/v8fLpWwh6hWOUrK5fbbtBh9Q/WWse27BFgSy2/e2c0fz5Scgya9h2GLhw==} + '@vitejs/plugin-vue@5.1.4': + resolution: {integrity: sha512-N2XSI2n3sQqp5w7Y/AN/L2XDjBIRGqXko+eDp42sydYSBeJuSm5a1sLf8zakmo8u7tA8NmBgoDLA1HeOESjp9A==} engines: {node: ^18.0.0 || >=20.0.0} peerDependencies: vite: ^5.0.0 vue: ^3.2.25 - '@vitest/expect@2.0.5': - resolution: {integrity: sha512-yHZtwuP7JZivj65Gxoi8upUN2OzHTi3zVfjwdpu2WrvCZPLwsJ2Ey5ILIPccoW23dd/zQBlJ4/dhi7DWNyXCpA==} - '@vitest/expect@2.1.1': resolution: {integrity: sha512-YeueunS0HiHiQxk+KEOnq/QMzlUuOzbU1Go+PgAsHvvv3tUkJPm9xWt+6ITNTlzsMXUjmgm5T+U7KBPK2qQV6w==} @@ -7234,33 +7209,18 @@ packages: vite: optional: true - '@vitest/pretty-format@2.0.5': - resolution: {integrity: sha512-h8k+1oWHfwTkyTkb9egzwNMfJAEx4veaPSnMeKbVSjp4euqGSbQlm5+6VHwTr7u4FJslVVsUG5nopCaAYdOmSQ==} - '@vitest/pretty-format@2.1.1': resolution: {integrity: sha512-SjxPFOtuINDUW8/UkElJYQSFtnWX7tMksSGW0vfjxMneFqxVr8YJ979QpMbDW7g+BIiq88RAGDjf7en6rvLPPQ==} - '@vitest/runner@2.0.5': - resolution: {integrity: sha512-TfRfZa6Bkk9ky4tW0z20WKXFEwwvWhRY+84CnSEtq4+3ZvDlJyY32oNTJtM7AW9ihW90tX/1Q78cb6FjoAs+ig==} - '@vitest/runner@2.1.1': resolution: {integrity: sha512-uTPuY6PWOYitIkLPidaY5L3t0JJITdGTSwBtwMjKzo5O6RCOEncz9PUN+0pDidX8kTHYjO0EwUIvhlGpnGpxmA==} - '@vitest/snapshot@2.0.5': - resolution: {integrity: sha512-SgCPUeDFLaM0mIUHfaArq8fD2WbaXG/zVXjRupthYfYGzc8ztbFbu6dUNOblBG7XLMR1kEhS/DNnfCZ2IhdDew==} - '@vitest/snapshot@2.1.1': resolution: {integrity: sha512-BnSku1WFy7r4mm96ha2FzN99AZJgpZOWrAhtQfoxjUU5YMRpq1zmHRq7a5K9/NjqonebO7iVDla+VvZS8BOWMw==} - '@vitest/spy@2.0.5': - resolution: {integrity: sha512-c/jdthAhvJdpfVuaexSrnawxZz6pywlTPe84LUB2m/4t3rl2fTo9NFGBG4oWgaD+FTgDDV8hJ/nibT7IfH3JfA==} - '@vitest/spy@2.1.1': resolution: {integrity: sha512-ZM39BnZ9t/xZ/nF4UwRH5il0Sw93QnZXd9NAZGRpIgj0yvVwPpLd702s/Cx955rGaMlyBQkZJ2Ir7qyY48VZ+g==} - '@vitest/utils@2.0.5': - resolution: {integrity: sha512-d8HKbqIcya+GR67mkZbrzhS5kKhtp8dQLcmRZLGTscGVg7yImT82cIrhtn2L8+VujWcy6KZweApgNmPsTAO/UQ==} - '@vitest/utils@2.1.1': resolution: {integrity: sha512-Y6Q9TsI+qJ2CC0ZKj6VBb+T8UPz593N113nnUykqwANqhgf3QkZeHFlusgKLTqrnVHbj/XDKZcDHol+dxVT+rQ==} @@ -7306,49 +7266,58 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 + '@vue/compiler-core@3.5.10': + resolution: {integrity: sha512-iXWlk+Cg/ag7gLvY0SfVucU8Kh2CjysYZjhhP70w9qI4MvSox4frrP+vDGvtQuzIcgD8+sxM6lZvCtdxGunTAA==} + '@vue/compiler-core@3.5.3': resolution: {integrity: sha512-adAfy9boPkP233NTyvLbGEqVuIfK/R0ZsBsIOW4BZNfb4BRpRW41Do1u+ozJpsb+mdoy80O20IzAsHaihRb5qA==} + '@vue/compiler-dom@3.5.10': + resolution: {integrity: sha512-DyxHC6qPcktwYGKOIy3XqnHRrrXyWR2u91AjP+nLkADko380srsC2DC3s7Y1Rk6YfOlxOlvEQKa9XXmLI+W4ZA==} + '@vue/compiler-dom@3.5.3': resolution: {integrity: sha512-wnzFArg9zpvk/811CDOZOadJRugf1Bgl/TQ3RfV4nKfSPok4hi0w10ziYUQR6LnnBAUlEXYLUfZ71Oj9ds/+QA==} - '@vue/compiler-sfc@3.5.3': - resolution: {integrity: sha512-P3uATLny2tfyvMB04OQFe7Sczteno7SLFxwrOA/dw01pBWQHB5HL15a8PosoNX2aG/EAMGqnXTu+1LnmzFhpTQ==} + '@vue/compiler-sfc@3.5.10': + resolution: {integrity: sha512-to8E1BgpakV7224ZCm8gz1ZRSyjNCAWEplwFMWKlzCdP9DkMKhRRwt0WkCjY7jkzi/Vz3xgbpeig5Pnbly4Tow==} - '@vue/compiler-ssr@3.5.3': - resolution: {integrity: sha512-F/5f+r2WzL/2YAPl7UlKcJWHrvoZN8XwEBLnT7S4BXwncH25iDOabhO2M2DWioyTguJAGavDOawejkFXj8EM1w==} + '@vue/compiler-ssr@3.5.10': + resolution: {integrity: sha512-hxP4Y3KImqdtyUKXDRSxKSRkSm1H9fCvhojEYrnaoWhE4w/y8vwWhnosJoPPe2AXm5sU7CSbYYAgkt2ZPhDz+A==} - '@vue/devtools-core@7.4.4': - resolution: {integrity: sha512-DLxgA3DfeADkRzhAfm3G2Rw/cWxub64SdP5b+s5dwL30+whOGj+QNhmyFpwZ8ZTrHDFRIPj0RqNzJ8IRR1pz7w==} + '@vue/devtools-core@7.4.6': + resolution: {integrity: sha512-7ATNPEbVqThOOAp2bg/YUIm9MqqgimbSk24D05hdXUp89JlXX12aTzdrWd9xZRwS78hDR+wCToHl1C/8sopBrg==} peerDependencies: vue: ^3.0.0 - '@vue/devtools-kit@7.4.4': - resolution: {integrity: sha512-awK/4NfsUG0nQ7qnTM37m7ZkEUMREyPh8taFCX+uQYps/MTFEum0AD05VeGDRMXwWvMmGIcWX9xp8ZiBddY0jw==} + '@vue/devtools-kit@7.4.6': + resolution: {integrity: sha512-NbYBwPWgEic1AOd9bWExz9weBzFdjiIfov0yRn4DrRfR+EQJCI9dn4I0XS7IxYGdkmUJi8mFW42LLk18WsGqew==} - '@vue/devtools-shared@7.4.4': - resolution: {integrity: sha512-yeJULXFHOKIm8yL2JFO050a9ztTVqOCKTqN9JHFxGTJN0b+gjtfn6zC+FfyHUgjwCwf6E3hfKrlohtthcqoYqw==} + '@vue/devtools-shared@7.4.6': + resolution: {integrity: sha512-rPeSBzElnHYMB05Cc056BQiJpgocQjY8XVulgni+O9a9Gr9tNXgPteSzFFD+fT/iWMxNuUgGKs9CuW5DZewfIg==} '@vue/reactivity@3.1.5': resolution: {integrity: sha512-1tdfLmNjWG6t/CsPldh+foumYFo3cpyCHgBYQ34ylaMsJ+SNHQ1kApMIa8jN+i593zQuaw3AdWH0nJTARzCFhg==} - '@vue/reactivity@3.5.3': - resolution: {integrity: sha512-2w61UnRWTP7+rj1H/j6FH706gRBHdFVpIqEkSDAyIpafBXYH8xt4gttstbbCWdU3OlcSWO8/3mbKl/93/HSMpw==} + '@vue/reactivity@3.5.10': + resolution: {integrity: sha512-kW08v06F6xPSHhid9DJ9YjOGmwNDOsJJQk0ax21wKaUYzzuJGEuoKNU2Ujux8FLMrP7CFJJKsHhXN9l2WOVi2g==} - '@vue/runtime-core@3.5.3': - resolution: {integrity: sha512-5b2AQw5OZlmCzSsSBWYoZOsy75N4UdMWenTfDdI5bAzXnuVR7iR8Q4AOzQm2OGoA41xjk53VQKrqQhOz2ktWaw==} + '@vue/runtime-core@3.5.10': + resolution: {integrity: sha512-9Q86I5Qq3swSkFfzrZ+iqEy7Vla325M7S7xc1NwKnRm/qoi1Dauz0rT6mTMmscqx4qz0EDJ1wjB+A36k7rl8mA==} - '@vue/runtime-dom@3.5.3': - resolution: {integrity: sha512-wPR1DEGc3XnQ7yHbmkTt3GoY0cEnVGQnARRdAkDzZ8MbUKEs26gogCQo6AOvvgahfjIcnvWJzkZArQ1fmWjcSg==} + '@vue/runtime-dom@3.5.10': + resolution: {integrity: sha512-t3x7ht5qF8ZRi1H4fZqFzyY2j+GTMTDxRheT+i8M9Ph0oepUxoadmbwlFwMoW7RYCpNQLpP2Yx3feKs+fyBdpA==} - '@vue/server-renderer@3.5.3': - resolution: {integrity: sha512-28volmaZVG2PGO3V3+gBPKoSHvLlE8FGfG/GKXKkjjfxLuj/50B/0OQGakM/g6ehQeqCrZYM4eHC4Ks48eig1Q==} + '@vue/server-renderer@3.5.10': + resolution: {integrity: sha512-IVE97tt2kGKwHNq9yVO0xdh1IvYfZCShvDSy46JIh5OQxP1/EXSpoDqetVmyIzL7CYOWnnmMkVqd7YK2QSWkdw==} peerDependencies: - vue: 3.5.3 + vue: 3.5.10 '@vue/shared@3.1.5': resolution: {integrity: sha512-oJ4F3TnvpXaQwZJNF3ZK+kLPHKarDmJjJ6jyzVNDKH9md1dptjC7lWR//jrGuLdek/U6iltWxqAnYOu8gCiOvA==} + '@vue/shared@3.5.10': + resolution: {integrity: sha512-VkkBhU97Ki+XJ0xvl4C9YJsIZ2uIlQ7HqPpZOS3m9VCvmROPaChZU6DexdMJqvz9tbgG+4EtFVrSuailUq5KGQ==} + '@vue/shared@3.5.3': resolution: {integrity: sha512-Jp2v8nylKBT+PlOUjun2Wp/f++TfJVFjshLzNtJDdmFJabJa7noGMncqXRM1vXGX+Yo2V7WykQFNxusSim8SCA==} @@ -7432,6 +7401,10 @@ packages: aria-query@5.3.0: resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==} + aria-query@5.3.2: + resolution: {integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==} + engines: {node: '>= 0.4'} + array-iterate@2.0.1: resolution: {integrity: sha512-I1jXZMjAgCMmxT4qxXfPXa6SthSoE8h6gkSI9BGGNv8mP8G/v0blc+qFnZu6K42vTOiuME596QaLO0TP3Lk0xg==} @@ -7531,9 +7504,9 @@ packages: boolbase@1.0.0: resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} - boxen@7.1.1: - resolution: {integrity: sha512-2hCgjEmP8YLWQ130n2FerGv7rYpfBmnmp9Uy2Le1vge6X3gZIfSmEzP5QTDElFxcvVcXlEn8Aq6MU/PZygIOog==} - engines: {node: '>=14.16'} + boxen@8.0.1: + resolution: {integrity: sha512-F3PH5k5juxom4xktynS7MoFY+NUWH5LC4CnH11YB8NPew+HLpmBLCybSAEyb2F+4pRXhuhWqFesoQd6DAyc2hw==} + engines: {node: '>=18'} brace-expansion@1.1.11: resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} @@ -7576,9 +7549,9 @@ packages: resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} engines: {node: '>=10'} - camelcase@7.0.1: - resolution: {integrity: sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw==} - engines: {node: '>=14.16'} + camelcase@8.0.0: + resolution: {integrity: sha512-8WB3Jcas3swSvjIeA2yvCJ+Miyz5l1ZmB6HFb9R1317dt9LCQoswg/BGrmAmkWVEszSrrg4RwmO46qIm2OEnSA==} + engines: {node: '>=16'} caniuse-lite@1.0.30001649: resolution: {integrity: sha512-fJegqZZ0ZX8HOWr6rcafGr72+xcgJKI9oWfDW5DrD7ExUtgZC7a7R7ZYmZqplh7XDocFdGeIFn7roAxhOeYrPQ==} @@ -7638,6 +7611,10 @@ packages: resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} engines: {node: '>= 8.10.0'} + chokidar@4.0.1: + resolution: {integrity: sha512-n8enUVCED/KVRQlab1hr3MVpcVMvxtZjmEa956u+4YijlmQED223XMSYj2tLuKvr4jcCTzNNMpQDUer72MMmzA==} + engines: {node: '>= 14.16.0'} + chownr@2.0.0: resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==} engines: {node: '>=10'} @@ -7665,14 +7642,6 @@ packages: resolution: {integrity: sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - cli-cursor@5.0.0: - resolution: {integrity: sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==} - engines: {node: '>=18'} - - cli-spinners@2.9.2: - resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} - engines: {node: '>=6'} - cli-table3@0.6.4: resolution: {integrity: sha512-Lm3L0p+/npIQWNIiyF/nAn7T5dnOwR3xNTHXYEBFBFVPXzCVNZ5lqEC/1eo/EVfpDsQ1I+TX4ORPQgp+UI0CRw==} engines: {node: 10.* || >= 12.*} @@ -7819,8 +7788,8 @@ packages: resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==} engines: {node: '>= 6'} - cssdb@8.1.0: - resolution: {integrity: sha512-BQN57lfS4dYt2iL0LgyrlDbefZKEtUyrO8rbzrbGrqBk6OoyNTQLF+porY9DrpDBjLo4NEvj2IJttC7vf3x+Ew==} + cssdb@8.1.1: + resolution: {integrity: sha512-kRbSRgZoxtZNl5snb3nOzBkFOt5AwnephcUTIEFc2DebKG9PN50/cHarlwOooTxYQ/gxsnKs3BxykhNLmfvyLg==} cssesc@3.0.0: resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} @@ -7943,8 +7912,8 @@ packages: resolution: {integrity: sha512-KxektNH63SrbfUyDiwXqRb1rLwKt33AmMv+5Nhsw1kqZ13SJBRTgZHtGbE+hH3a1mVW1cz+4pqSWVPAtLVXTzQ==} engines: {node: '>=18'} - devalue@5.0.0: - resolution: {integrity: sha512-gO+/OMXF7488D+u3ue+G7Y4AA3ZmUnB3eHJXmBTgNHvr4ZNzl36A0ZtG+XCRNYCkYx/bFmw4qtkoFLa+wSrwAA==} + devalue@5.1.1: + resolution: {integrity: sha512-maua5KUiapvEwiEAe+XnlZ3Rh0GD+qI1J/nb9vrJc3muPXvcF/8gXYTWF76+5DAqHyDUtOIImEuo0YKE9mshVw==} devlop@1.1.0: resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} @@ -8073,8 +8042,8 @@ packages: sqlite3: optional: true - dset@3.1.3: - resolution: {integrity: sha512-20TuZZHCEZ2O71q9/+8BwKwZ0QtD9D8ObhrihJPr+vLLYlSuAU3/zL4cSlgbfeoGHTjCSJBa7NGcrF9/Bx/WJQ==} + dset@3.1.4: + resolution: {integrity: sha512-2QF/g9/zTaPDc3BjNcVTGoBbXBgYfMTTceLaYcFJ/W9kggFUkhxD/hMEeuLKbugyef9SqAx8cpgwlIP/jinUTA==} engines: {node: '>=4'} eastasianwidth@0.2.0: @@ -8151,10 +8120,6 @@ packages: resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} engines: {node: '>=12'} - eslint-plugin-no-only-tests@3.3.0: - resolution: {integrity: sha512-brcKcxGnISN2CcVhXJ/kEQlNa0MEfGRtwKtWA16SkqXHKitaKIMrfemJKLKX1YqDU5C/5JY3PvZXd5jEW04e0Q==} - engines: {node: '>=5.0.0'} - eslint-plugin-regexp@2.6.0: resolution: {integrity: sha512-FCL851+kislsTEQEMioAlpDuK5+E5vs0hi1bF8cFlPlHcEjeRhuAzEsGikXRreE+0j4WhW2uO54MqTjXtYOi3A==} engines: {node: ^18 || >=20} @@ -8173,8 +8138,8 @@ packages: resolution: {integrity: sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - eslint@9.10.0: - resolution: {integrity: sha512-Y4D0IgtBZfOcOUAIQTSXBKoNGfY0REGqHJG6+Q81vNippW5YlKjHFj4soMxamKK1NXHUWuBZTLdU3Km+L/pcHw==} + eslint@9.11.1: + resolution: {integrity: sha512-MobhYKIoAO1s1e4VUrgx1l1Sk2JBR/Gqjjgw8+mfgoLE2xwsHur4gdfTxyTgShrhvdVFTaJSgMiQBl1jv/AWxg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} hasBin: true peerDependencies: @@ -8248,10 +8213,6 @@ packages: resolution: {integrity: sha512-uHaC9LYNv6BcW+8SvXcwUUDCrrUxt3GSa61DFvTHj8JC+M0hekMFBwMlCarLQDk5bbpZ2vStpnQPIwRuV98YMw==} engines: {node: '>=12.0.0'} - extend-shallow@2.0.1: - resolution: {integrity: sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==} - engines: {node: '>=0.10.0'} - extend@3.0.2: resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} @@ -8440,10 +8401,6 @@ packages: graphemer@1.4.0: resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} - gray-matter@4.0.3: - resolution: {integrity: sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==} - engines: {node: '>=6.0'} - has-async-hooks@1.0.0: resolution: {integrity: sha512-YF0VPGjkxr7AyyQQNykX8zK4PvtEDsUJAPqwu06UFz1lb6EvI53sPh5H1kWxg8NXI5LsfRCZ8uX9NkYDZBb/mw==} @@ -8462,8 +8419,8 @@ packages: hast-util-from-dom@5.0.0: resolution: {integrity: sha512-d6235voAp/XR3Hh5uy7aGLbM3S4KamdW0WEgOaU1YoewnuYw4HXb5eRtv9g65m/RFGEfUY1Mw4UqCc5Y8L4Stg==} - hast-util-from-html@2.0.2: - resolution: {integrity: sha512-HwOHwxdt2zC5KQ/CNoybBntRook2zJvfZE/u5/Ap7aLPe22bDqen7KwGkOqOyzL5zIqKwiYX/OTtE0FWgr6XXA==} + hast-util-from-html@2.0.3: + resolution: {integrity: sha512-CUSRHXyKjzHov8yKsQjGOElXy/3EKpyX56ELnkHH34vDVw1N1XSQ1ZcAvTyAPtGqLTuKP/uxM+aLkSPqF/EtMw==} hast-util-from-parse5@8.0.1: resolution: {integrity: sha512-Er/Iixbc7IEa7r/XLtuG52zoqn/b3Xng/w6aZQ0xGVxzhw5xUFxcRqdPzP6yFi/4HBYRaifaI5fQ1RH8n0ZeOQ==} @@ -8489,8 +8446,8 @@ packages: hast-util-to-estree@3.1.0: resolution: {integrity: sha512-lfX5g6hqVh9kjS/B9E2gSkvHH4SZNiQFiqWS0x9fENzEl+8W12RqdRxX6d/Cwxi30tPQs3bIO+aolQJNp1bIyw==} - hast-util-to-html@9.0.2: - resolution: {integrity: sha512-RP5wNpj5nm1Z8cloDv4Sl4RS8jH5HYa0v93YB6Wb4poEzgMo/dAAL0KcT4974dCjcNG5pkLqTImeFHHCwwfY3g==} + hast-util-to-html@9.0.3: + resolution: {integrity: sha512-M17uBDzMJ9RPCqLMO92gNNUDuBSq10a25SDBI08iCCxmorf4Yy6sYHK57n9WAbRAAaU+DuR4W6GN9K4DFZesYg==} hast-util-to-jsx-runtime@2.3.0: resolution: {integrity: sha512-H/y0+IWPdsLLS738P8tDnrQ8Z+dj12zQQ6WC11TIM21C8WFVoIxcqWXf2H3hiTVZjF1AWqoimGwrTWecWrnmRQ==} @@ -8646,10 +8603,6 @@ packages: engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} hasBin: true - is-extendable@0.1.1: - resolution: {integrity: sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==} - engines: {node: '>=0.10.0'} - is-extglob@2.1.1: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} @@ -8674,10 +8627,6 @@ packages: engines: {node: '>=14.16'} hasBin: true - is-interactive@2.0.0: - resolution: {integrity: sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==} - engines: {node: '>=12'} - is-number@7.0.0: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} @@ -8704,14 +8653,6 @@ packages: resolution: {integrity: sha512-2AT6j+gXe/1ueqbW6fLZJiIw3F8iXGJtt0yDrZaBhAZEG1raiTxKWU+IPqMCzQAXOUCKdA4UDMgacKH25XG2Cw==} engines: {node: '>=4'} - is-unicode-supported@1.3.0: - resolution: {integrity: sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==} - engines: {node: '>=12'} - - is-unicode-supported@2.0.0: - resolution: {integrity: sha512-FRdAyx5lusK1iHG0TWpVtk9+1i+GjrzRffhDg4ovQ7mcidMQ6mj+MhKPmvh7Xwyv5gIS06ns49CA7Sqg7lC22Q==} - engines: {node: '>=18'} - is-what@4.1.16: resolution: {integrity: sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==} engines: {node: '>=12.13'} @@ -8806,10 +8747,6 @@ packages: keyv@4.5.4: resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} - kind-of@6.0.3: - resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} - engines: {node: '>=0.10.0'} - kleur@3.0.3: resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} engines: {node: '>=6'} @@ -8825,12 +8762,8 @@ packages: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} - libsql@0.3.19: - resolution: {integrity: sha512-Aj5cQ5uk/6fHdmeW0TiXK42FqUlwx7ytmMLPSaUQPin5HKKKuUPD62MAbN4OEweGBBI7q1BekoEN4gPUEL6MZA==} - os: [darwin, linux, win32] - - libsql@0.4.1: - resolution: {integrity: sha512-qZlR9Yu1zMBeLChzkE/cKfoKV3Esp9cn9Vx5Zirn4AVhDWPcjYhKwbtJcMuHehgk3mH+fJr9qW+3vesBWbQpBg==} + libsql@0.4.5: + resolution: {integrity: sha512-sorTJV6PNt94Wap27Sai5gtVLIea4Otb2LUiAUyr3p6BPOScGMKGt5F1b5X/XgkNtcsDKeX5qfeBDj+PdShclQ==} os: [darwin, linux, win32] lilconfig@2.1.0: @@ -8847,8 +8780,8 @@ packages: linkedom@0.14.26: resolution: {integrity: sha512-mK6TrydfFA7phrnp+1j57ycBwFI5bGSW6YXlw9acHoqF+mP/y+FooEYYyniOt5Ot57FSKB3iwmnuQ1UUyNLm5A==} - linkedom@0.18.4: - resolution: {integrity: sha512-JhLErxMIEOKByMi3fURXgI1fYOzR87L1Cn0+MI9GlMckFrqFZpV1SUGox1jcKtsKN3y6JgclcQf0FzZT//BuGw==} + linkedom@0.18.5: + resolution: {integrity: sha512-JGLaGGtqtu+eOhYrC1wkWYTBcpVWL4AsnwAtMtgO1Q0gI0PuPJKI0zBBE+a/1BrhOE3Uw8JI/ycByAv5cLrAuQ==} lit-element@4.1.0: resolution: {integrity: sha512-gSejRUQJuMQjV2Z59KAS/D4iElUhwKpIyJvZ9w+DIagIQjfJnhR20h2Q5ddpzXGS+fF0tMZ/xEYGMnKmaI/iww==} @@ -8895,10 +8828,6 @@ packages: lodash@4.17.21: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} - log-symbols@6.0.0: - resolution: {integrity: sha512-i24m8rpwhmPIS4zscNzK6MSEhk0DUWa/8iYQWxhffV8jkI4Phvs3F+quL5xvS0gdQR0FyTCMMH33Y78dDTzzIw==} - engines: {node: '>=18'} - log-update@5.0.1: resolution: {integrity: sha512-5UtUDQ/6edw4ofyljDNcOVJQ4c7OjDro4h3y8e1GQL5iYElYclVHJ3zeWchylvMaKnDbDilC8irOVyexnA/Slw==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -9004,6 +8933,9 @@ packages: mdast-util-mdx-expression@2.0.0: resolution: {integrity: sha512-fGCu8eWdKUKNu5mohVGkhBXCXGnOTLuFqOvGMvdikr+J1w7lDJgxThOKpwRWzzbyXAU2hhSwsmssOY4yTokluw==} + mdast-util-mdx-expression@2.0.1: + resolution: {integrity: sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ==} + mdast-util-mdx-jsx@3.1.3: resolution: {integrity: sha512-bfOjvNt+1AcbPLTFMFWY149nJz0OjmewJs3LQQ5pIyVGxP4CdOqNVJL6kTaM5c68p8q82Xv3nCyFfUnuEcH3UQ==} @@ -9038,8 +8970,8 @@ packages: resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} engines: {node: '>= 0.6'} - memfs@4.11.1: - resolution: {integrity: sha512-LZcMTBAgqUUKNXZagcZxvXXfgF1bHX7Y7nQ0QyEiNbRJgE29GhgPd8Yna1VQcLlPiHt/5RFJMWYN9Uv/VPNvjQ==} + memfs@4.12.0: + resolution: {integrity: sha512-74wDsex5tQDSClVkeK1vtxqYCAgCoXxx+K4NSHzgU/muYVYByFqa+0RnrPO9NM6naWm1+G9JmZ0p6QHhXmeYfA==} engines: {node: '>= 4.0.0'} merge-anything@5.1.7: @@ -9196,10 +9128,6 @@ packages: resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} engines: {node: '>=12'} - mimic-function@5.0.1: - resolution: {integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==} - engines: {node: '>=18'} - mini-svg-data-uri@1.4.4: resolution: {integrity: sha512-r9deDe9p5FJUPZAk3A59wGH7Ii9YrjjWw0jmw/liSbHl2CHiyXj6FcDXDu2K3TjVAXqiJdaw3xxwlZZr9E6nHg==} hasBin: true @@ -9318,8 +9246,8 @@ packages: node-html-parser@6.1.13: resolution: {integrity: sha512-qIsTMOY4C/dAa5Q5vsobRpOOvPfC4pB61UVW2uSwZNUp0QU/jCekTal1vMmbO0DgdHeLUJpv/ARmDqErVxA3Sg==} - node-mocks-http@1.15.1: - resolution: {integrity: sha512-X/GpUpNNiPDYUeUD183W8V4OW6OHYWI29w/QDyb+c/GzOfVEAlo6HjbW9++eXT2aV2lGg+uS+XqTD2q0pNREQA==} + node-mocks-http@1.16.0: + resolution: {integrity: sha512-jmDjsr87ugnZ4nqBeX8ccMB1Fn04qc5Fz45XgrneJerWGV0VqS+wpu/zVkwv8LDAYHljDy5FzNvRJaOzEW9Dyw==} engines: {node: '>=14'} node-releases@2.0.18: @@ -9375,9 +9303,8 @@ packages: resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} engines: {node: '>=12'} - onetime@7.0.0: - resolution: {integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==} - engines: {node: '>=18'} + oniguruma-to-js@0.4.3: + resolution: {integrity: sha512-X0jWUcAlxORhOqqBREgPMgnshB7ZGYszBNspP+tS9hPD3l13CdaXcHbgImoHUHlrvGx/7AvFEkTRhAGYh+jzjQ==} only-allow@1.2.1: resolution: {integrity: sha512-M7CJbmv7UCopc0neRKdzfoGWaVZC+xC1925GitKH9EAqYFzX9//25Q7oX4+jw0tiCCj+t5l6VZh8UPH23NZkMA==} @@ -9394,10 +9321,6 @@ packages: resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} engines: {node: '>= 0.8.0'} - ora@8.1.0: - resolution: {integrity: sha512-GQEkNkH/GHOhPFXcqZs3IDahXEQcQxsSjEkK4KvEEST4t7eNzoMjxTzef+EZ+JluDEV+Raoi3WQ2CflnRdSVnQ==} - engines: {node: '>=18'} - os-tmpdir@1.0.2: resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} engines: {node: '>=0.10.0'} @@ -9508,9 +9431,6 @@ packages: resolution: {integrity: sha512-7xTavNy5RQXnsjANvVvMkEjvloOinkAjv/Z6Ildz9v2RinZ4SBKTWFOVRbaF8p0vpHnyjV/UwNDdKuUv6M5qcA==} engines: {node: '>=16 || 14 >=14.17'} - path-to-regexp@6.2.2: - resolution: {integrity: sha512-GQX3SSMokngb36+whdpRXE+3f9V8UzyAorlYvOGx87ufGHehNTn5lCxrKtLyZ4Yl/wEKnNnr98ZzOwwDZV5ogw==} - path-type@4.0.0: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} @@ -9555,13 +9475,13 @@ packages: resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} engines: {node: '>=8'} - playwright-core@1.47.0: - resolution: {integrity: sha512-1DyHT8OqkcfCkYUD9zzUTfg7EfTd+6a8MkD/NWOvjo0u/SCNd5YmY/lJwFvUZOxJbWNds+ei7ic2+R/cRz/PDg==} + playwright-core@1.47.2: + resolution: {integrity: sha512-3JvMfF+9LJfe16l7AbSmU555PaTl2tPyQsVInqm3id16pdDfvZ8TTZ/pyzmkbDrZTQefyzU7AIHlZqQnxpqHVQ==} engines: {node: '>=18'} hasBin: true - playwright@1.47.0: - resolution: {integrity: sha512-jOWiRq2pdNAX/mwLiwFYnPHpEZ4rM+fRSQpRHwEwZlP2PUANvL3+aJOF/bvISMhFD30rqMxUB4RJx9aQbfh4Ww==} + playwright@1.47.2: + resolution: {integrity: sha512-nx1cLMmQWqmA3UsnjaaokyoUpdVaaDhJhMoxX2qj3McpjnsqFHs516QAKYhqHAgOP+oCFTEOCOAaD1RgD/RQfA==} engines: {node: '>=18'} hasBin: true @@ -9705,11 +9625,11 @@ packages: peerDependencies: postcss: ^8.4 - postcss-opacity-percentage@2.0.0: - resolution: {integrity: sha512-lyDrCOtntq5Y1JZpBFzIWm2wG9kbEdujpNt4NLannF+J9c8CgFIzPa80YQfdza+Y+yFfzbYj/rfoOsYsooUWTQ==} - engines: {node: ^14 || ^16 || >=18} + postcss-opacity-percentage@3.0.0: + resolution: {integrity: sha512-K6HGVzyxUxd/VgZdX04DCtdwWJ4NGLG212US4/LA1TLAbHgmAsTWVR86o+gGIbFtnTkfOpb9sCRBx8K7HO66qQ==} + engines: {node: '>=18'} peerDependencies: - postcss: ^8.2 + postcss: ^8.4 postcss-overflow-shorthand@6.0.0: resolution: {integrity: sha512-BdDl/AbVkDjoTofzDQnwDdm/Ym6oS9KgmO7Gr+LHYjNWJ6ExORe4+3pcLQsLA9gIROMkiGVjjwZNoL/mpXHd5Q==} @@ -9728,8 +9648,8 @@ packages: peerDependencies: postcss: ^8.4 - postcss-preset-env@10.0.2: - resolution: {integrity: sha512-PMxqnz0RQYMUmUi6p4P7BhC9EVGyEUCIdwn4vJ7Fy1jvc2QP4mMH75BSBB1mBFqjl3x4xYwyCNMhGZ8y0+/qOA==} + postcss-preset-env@10.0.5: + resolution: {integrity: sha512-ipPOgr3RY0utgJDbNoCX2dxKoQ4e4WO1pC21QhDlxCAX8+qC8O2Ezkzb54fd+8XtZ1UveA5gLjBsVo6dJDoWIg==} engines: {node: '>=18'} peerDependencies: postcss: ^8.4 @@ -9758,17 +9678,17 @@ packages: postcss-value-parser@4.2.0: resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} - postcss@8.4.45: - resolution: {integrity: sha512-7KTLTdzdZZYscUc65XmjFiB73vBhBfbPztCYdUNvlaso9PrzjzcmjqBPR0lNGkcVlcO4BjiO5rK/qNz+XAen1Q==} + postcss@8.4.47: + resolution: {integrity: sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==} engines: {node: ^10 || ^12 || >=14} - preact-render-to-string@6.5.10: - resolution: {integrity: sha512-BJdypTQaBA5UbTF9NKZS3zP93Sw33tZOxNXIfuHofqOZFoMdsquNkVebs/HkEw0in/Qbi6Ep/Anngnj+VsHeBQ==} + preact-render-to-string@6.5.11: + resolution: {integrity: sha512-ubnauqoGczeGISiOh6RjX0/cdaF8v/oDXIjO85XALCQjwQP+SB4RDXXtvZ6yTYSjG+PC1QRP2AhPgCEsM2EvUw==} peerDependencies: preact: '>=10' - preact@10.23.2: - resolution: {integrity: sha512-kKYfePf9rzKnxOAKDpsWhg/ysrHPqT+yQ7UW4JjdnqjFIeNUnNcEJvhuA8fDenxAGWzUqtd51DfVg7xp/8T9NA==} + preact@10.24.1: + resolution: {integrity: sha512-PnBAwFI3Yjxxcxw75n6VId/5TFxNW/81zexzWD9jn1+eSrOP84NdsS38H5IkF/UH3frqRPT+MvuCoVHjTDTnDw==} preferred-pm@4.0.0: resolution: {integrity: sha512-gYBeFTZLu055D8Vv3cSPox/0iTPtkzxpLroSYYA7WXgRi31WCJ51Uyl8ZiPeUUjyvs2MBzK+S8v9JVUgHU/Sqw==} @@ -9876,6 +9796,10 @@ packages: resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} engines: {node: '>=8.10.0'} + readdirp@4.0.1: + resolution: {integrity: sha512-GkMg9uOTpIWWKbSsgwb5fA4EavTR+SG/PMPoAY8hkhHfEEY0/vqljY+XHqtDf2cr2IJtoNRDbrrEpZUiZCkYRw==} + engines: {node: '>= 14.16.0'} + reading-time@1.5.0: resolution: {integrity: sha512-onYyVhBNr4CmAxFsKS7bz+uTLRakypIe4R+5A824vBSkQy/hB3fZepoVEf8OVAxzLvK+H/jm9TzpI3ETSm64Kg==} @@ -9889,6 +9813,9 @@ packages: regenerator-runtime@0.14.1: resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} + regex@4.3.2: + resolution: {integrity: sha512-kK/AA3A9K6q2js89+VMymcboLOlF5lZRCYJv3gzszXFHBr6kO6qLGzbm+UIugBEV8SMMKCTR59txoY6ctRHYVw==} + regexp-ast-analysis@0.7.1: resolution: {integrity: sha512-sZuz1dYW/ZsfG17WSAG7eS85r5a0dDsvg+7BiiYR5o6lKCAtUrEwdmRmaGF6rwVj3LcmAeYkOWKEPlbPzN3Y3A==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} @@ -9914,15 +9841,15 @@ packages: rehype-slug@6.0.0: resolution: {integrity: sha512-lWyvf/jwu+oS5+hL5eClVd3hNdmwM1kAC0BUvEGD19pajQMIzcNUd/k9GsfQ+FfECvX+JE+e9/btsKH0EjJT6A==} - rehype-stringify@10.0.0: - resolution: {integrity: sha512-1TX1i048LooI9QoecrXy7nGFFbFSufxVRAfc6Y9YMRAi56l+oB0zP51mLSV312uRuvVLPV1opSlJmslozR1XHQ==} + rehype-stringify@10.0.1: + resolution: {integrity: sha512-k9ecfXHmIPuFVI61B9DeLPN0qFHfawM6RsuX48hoqlaKSF61RskNjSm1lI8PhBEM0MRdLxVVm4WmTqJQccH9mA==} rehype-toc@3.0.2: resolution: {integrity: sha512-DMt376+4i1KJGgHJL7Ezd65qKkJ7Eqp6JSB47BJ90ReBrohI9ufrornArM6f4oJjP2E2DVZZHufWucv/9t7GUQ==} engines: {node: '>=10'} - rehype@13.0.1: - resolution: {integrity: sha512-AcSLS2mItY+0fYu9xKxOu1LhUZeBZZBx8//5HKzF+0XP+eP8+6a5MXn2+DW2kfXR6Dtp1FEXMVrjyKAcvcU8vg==} + rehype@13.0.2: + resolution: {integrity: sha512-j31mdaRFrwFRUIlxGeuPXXKWQxet52RBQRvCmzl5eCefn/KGbomK5GMHNMsOJf55fgo3qw5tST5neDuarDYR2A==} reinterval@1.1.0: resolution: {integrity: sha512-QIRet3SYrGp0HUHO88jVskiG6seqUGC5iAG7AwI/BV4ypGcuqk9Du6YQBUOUqm9c8pw1eyLoIaONifRua1lsEQ==} @@ -9946,8 +9873,8 @@ packages: remark-parse@11.0.0: resolution: {integrity: sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==} - remark-rehype@11.1.0: - resolution: {integrity: sha512-z3tJrAs2kIs1AqIIy6pzHmAHlF1hWQ+OdY4/hv+Wxe35EhyLKcajL33iUEn3ScxtFox9nUvRufR/Zre8Q08H/g==} + remark-rehype@11.1.1: + resolution: {integrity: sha512-g/osARvjkBXb6Wo0XvAeXQohVta8i84ACbenPpoSsxTOQH/Ae0/RGP4WZgnMH5pMLpsj4FG7OHmcIcXxpza8eQ==} remark-shiki-twoslash@3.1.3: resolution: {integrity: sha512-4e8OH3ySOCw5wUbDcPszokOKjKuebOqlP2WlySvC7ITBOq27BiGsFlq+FNWhxppZ+JzhTWah4gQrnMjX3KDbAQ==} @@ -9997,10 +9924,6 @@ packages: resolution: {integrity: sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - restore-cursor@5.1.0: - resolution: {integrity: sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==} - engines: {node: '>=18'} - retext-latin@4.0.0: resolution: {integrity: sha512-hv9woG7Fy0M9IlRQloq/N6atV82NxLGveq+3H2WOi79dtIYWN8OaxogDm77f8YnVXJL2VD3bbqowu5E3EMhBYA==} @@ -10023,8 +9946,8 @@ packages: rfdc@1.4.1: resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} - rollup@4.21.2: - resolution: {integrity: sha512-e3TapAgYf9xjdLvKQCkQTnbTKd4a6jwlpQSJJFokHGaX2IVjoEqkIIhiQfqsi0cdwlOD+tQGuOd5AJkc5RngBw==} + rollup@4.23.0: + resolution: {integrity: sha512-vXB4IT9/KLDrS2WRXmY22sVB2wTsTwkpxjB8Q3mnakTENcYw3FRmfdYDy/acNmls+lHmDazgrRjK/yQ6hQAtwA==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true @@ -10050,8 +9973,8 @@ packages: sass-formatter@0.7.9: resolution: {integrity: sha512-CWZ8XiSim+fJVG0cFLStwDvft1VI7uvXdCNJYXhDvowiv+DsbD1nXLiQ4zrE5UBvj5DWZJ93cwN0NX5PMsr1Pw==} - sass@1.78.0: - resolution: {integrity: sha512-AaIqGSrjo5lA2Yg7RvFZrlXDBCp3nV4XP73GrLGvdRWWwk+8H3l0SDvq/5bA4eF+0RFPLuWUk3E+P1U/YqnpsQ==} + sass@1.79.4: + resolution: {integrity: sha512-K0QDSNPXgyqO4GZq2HO5Q70TLxTH6cIT59RdoCHMivrC8rqzaTw5ab9prjz9KUN1El4FLXrBXJhik61JR4HcGg==} engines: {node: '>=14.0.0'} hasBin: true @@ -10072,10 +9995,6 @@ packages: resolution: {integrity: sha512-3A6sD0WYP7+QrjbfNA2FN3FsOaGGFoekCVgTyypy53gPxhbkCIjtO6YWgdrfM+n/8sI8JeXZOIxsHjMTNxQ4nQ==} engines: {node: ^14.0.0 || >=16.0.0} - section-matter@1.0.0: - resolution: {integrity: sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==} - engines: {node: '>=4'} - semver@6.3.1: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true @@ -10089,6 +10008,10 @@ packages: resolution: {integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==} engines: {node: '>= 0.8.0'} + send@0.19.0: + resolution: {integrity: sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==} + engines: {node: '>= 0.8.0'} + seroval-plugins@1.1.1: resolution: {integrity: sha512-qNSy1+nUj7hsCOon7AO4wdAIo9P0jrzAMp18XhiOzA6/uO5TKtP7ScozVJ8T293oRIvi5wyCHSM4TrJo/c/GJA==} engines: {node: '>=10'} @@ -10133,8 +10056,8 @@ packages: shiki@0.10.1: resolution: {integrity: sha512-VsY7QJVzU51j5o1+DguUd+6vmCmZ5v/6gYu4vyYAhzjuNQU6P/vmSy4uQaOhvje031qQMiW0d2BwgMH52vqMng==} - shiki@1.16.2: - resolution: {integrity: sha512-gSym0hZf5a1U0iDPsdoOAZbvoi+e0c6c3NKAi03FoSLTm7oG20tum29+gk0wzzivOasn3loxfGUPT+jZXIUbWg==} + shiki@1.21.0: + resolution: {integrity: sha512-apCH5BoWTrmHDPGgg3RF8+HAAbEL/CdbYr8rMw7eIrdhCkZHdVGat5mMNlRtd1erNG01VPMIKHNQ0Pj2HMAiog==} siginfo@2.0.0: resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} @@ -10184,8 +10107,8 @@ packages: resolution: {integrity: sha512-TzobUYoEft/xBtb2voRPryAUIvYguG0V7Tt3de79I1WfXgCwelqVsGuZSnu3GFGRZhXR90AeEYIM+icuB/S06Q==} hasBin: true - solid-js@1.8.22: - resolution: {integrity: sha512-VBzN5j+9Y4rqIKEnK301aBk+S7fvFSTs9ljg+YEdFxjNjH0hkjXPiQRcws9tE5fUzMznSS6KToL5hwMfHDgpLA==} + solid-js@1.9.1: + resolution: {integrity: sha512-Gd6QWRFfO2XKKZqVK4YwbhWZkr0jWw1dYHOt+VYebomeyikGP0SuMflf42XcDuU9HAEYDArFJIYsBNjlE7iZsw==} solid-refresh@0.6.3: resolution: {integrity: sha512-F3aPsX6hVw9ttm5LYlth8Q15x6MlI/J3Dn+o3EQyRTtTxidepSTwAYdozt01/YA+7ObcciagGEyXIopGZzQtbA==} @@ -10196,6 +10119,10 @@ packages: resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==} engines: {node: '>=0.10.0'} + source-map-js@1.2.1: + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} + engines: {node: '>=0.10.0'} + source-map@0.6.1: resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} engines: {node: '>=0.10.0'} @@ -10235,10 +10162,6 @@ packages: std-env@3.7.0: resolution: {integrity: sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==} - stdin-discarder@0.2.2: - resolution: {integrity: sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ==} - engines: {node: '>=18'} - stream-replace-string@2.0.0: resolution: {integrity: sha512-TlnjJ1C0QrmxRNrON00JvaFFlNh5TTG00APw23j74ET7gkQpTASi6/L2fuiav8pzK715HXtUeClpBTw2NPSn6w==} @@ -10265,10 +10188,6 @@ packages: resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} engines: {node: '>=12'} - strip-bom-string@1.0.0: - resolution: {integrity: sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==} - engines: {node: '>=0.10.0'} - strip-bom@3.0.0: resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} engines: {node: '>=4'} @@ -10331,8 +10250,8 @@ packages: peerDependencies: svelte: ^3.19.0 || ^4.0.0 - svelte2tsx@0.7.18: - resolution: {integrity: sha512-PCOhH7uQaV472ZvNAcnkvShjFRMMkKUc/eNJImQMH9T4CyHeQpdatedFrEjaMCsweFb/oo3a6bv4qtdfaCPw8g==} + svelte2tsx@0.7.21: + resolution: {integrity: sha512-cdYR5gYBK0Ys3/jzGu9yfW9oxGLtLAnxcKtS7oJy2pjLhLLYSZcWeeeuaY9SMULwlqMZ1HfngGH3n5VdquRC3Q==} peerDependencies: svelte: ^3.55 || ^4.0.0-next.0 || ^4.0 || ^5.0.0-next.0 typescript: ^4.9.4 || ^5.0.0 @@ -10352,8 +10271,8 @@ packages: symbol-tree@3.2.4: resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} - tailwindcss@3.4.10: - resolution: {integrity: sha512-KWZkVPm7yJRhdu4SRSl9d4AK2wM3a50UsvgHZO7xY77NQr2V+fIrEuoDGQcbvswWvFGbS2f6e+jC/6WJm1Dl0w==} + tailwindcss@3.4.13: + resolution: {integrity: sha512-KqjHOJKogOUt5Bs752ykCeiwvi0fKVkr5oqsFNt/8px/tA8scFPIlkygsf6jXrfCqGHz7VflA6+yytWuM+XhFw==} engines: {node: '>=14.0.0'} hasBin: true @@ -10389,9 +10308,6 @@ packages: resolution: {integrity: sha512-wMctrWD2HZZLuIlchlkE2dfXJh7J2KDI9Dwl+2abPYg0mswQHfOAyQW3jJg1pY5VfttSINZuKcXoB3FGypVklA==} engines: {node: '>=8'} - tinybench@2.8.0: - resolution: {integrity: sha512-1/eK7zUnIklz4JUUlL+658n58XO2hHLQfSk1Zf2LKieUjxidN16eKFEoDEfjHc3ohofSSqK3X5yO6VGb6iW8Lw==} - tinybench@2.9.0: resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} @@ -10426,6 +10342,9 @@ packages: resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} engines: {node: '>=0.6'} + toml@3.0.0: + resolution: {integrity: sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==} + totalist@3.0.1: resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==} engines: {node: '>=6'} @@ -10478,38 +10397,38 @@ packages: tslib@2.6.2: resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} - turbo-darwin-64@2.1.1: - resolution: {integrity: sha512-aYNuJpZlCoi0Htd79fl/2DywpewGKijdXeOfg9KzNuPVKzSMYlAXuAlNGh0MKjiOcyqxQGL7Mq9LFhwA0VpDpQ==} + turbo-darwin-64@2.1.3: + resolution: {integrity: sha512-ouJOm0g0YyoBuhmikEujVCBGo3Zr0lbSOWFIsQtWUTItC88F2w2byhjtsYGPXQwMlTbXwmoBU2lOCfWNkeEwHQ==} cpu: [x64] os: [darwin] - turbo-darwin-arm64@2.1.1: - resolution: {integrity: sha512-tifJKD8yHY48rHXPMcM8o1jI/Jk2KCaXiNjTKvvy9Zsim61BZksNVLelIbrRoCGwAN6PUBZO2lGU5iL/TQJ5Pw==} + turbo-darwin-arm64@2.1.3: + resolution: {integrity: sha512-j2FOJsK4LAOtHQlb3Oom0yWB/Vi0nF1ljInr311mVzHoFAJRZtfW2fRvdZRb/lBUwjSp8be58qWHzANIcrA0OA==} cpu: [arm64] os: [darwin] - turbo-linux-64@2.1.1: - resolution: {integrity: sha512-Js6d/bSQe9DuV9c7ITXYpsU/ADzFHABdz1UIHa7Oqjj9VOEbFeA9WpAn0c+mdJrVD+IXJFbbDZUjN7VYssmtcg==} + turbo-linux-64@2.1.3: + resolution: {integrity: sha512-ubRHkI1gSel7H7wsmxKK8C9UlLWqg/2dkCC88LFupaK6TKgvBKqDqA0Z1M9C/escK0Jsle2k0H8bybV9OYIl4Q==} cpu: [x64] os: [linux] - turbo-linux-arm64@2.1.1: - resolution: {integrity: sha512-LidzTCq0yvQ+N8w8Qub9FmhQ/mmEIeoqFi7DSupekEV2EjvE9jw/zYc9Pk67X+g7dHVfgOnvVzmrjChdxpFePw==} + turbo-linux-arm64@2.1.3: + resolution: {integrity: sha512-LffUL+e5wv7BtD6DgnM2kKOlDkMo2eRjhbAjVnrCD3wi2ug0tl6NDzajnHHjtaMyOnIf4AvzSKdLWsBxafGBQA==} cpu: [arm64] os: [linux] - turbo-windows-64@2.1.1: - resolution: {integrity: sha512-GKc9ZywKwy4xLDhwXd6H07yzl0TB52HjXMrFLyHGhCVnf/w0oq4sLJv2sjbvuarPjsyx4xnCBJ3m3oyL2XmFtA==} + turbo-windows-64@2.1.3: + resolution: {integrity: sha512-S9SvcZZoaq5jKr6kA6eF7/xgQhVn8Vh7PVy5lono9zybvhyL4eY++y2PaLToIgL8G9IcbLmgOC73ExNjFBg9XQ==} cpu: [x64] os: [win32] - turbo-windows-arm64@2.1.1: - resolution: {integrity: sha512-oFKkMj11KKUv3xSK9/fhAEQTxLUp1Ol1EOktwc32+SFtEU0uls7kosAz0b+qe8k3pJGEMFdDPdqoEjyJidbxtQ==} + turbo-windows-arm64@2.1.3: + resolution: {integrity: sha512-twlEo8lRrGbrR6T/ZklUIquW3IlFCEtywklgVA81aIrSBm56+GEVpSrHhIlsx1hiYeSNrs+GpDwZGe+V7fvEVQ==} cpu: [arm64] os: [win32] - turbo@2.1.1: - resolution: {integrity: sha512-u9gUDkmR9dFS8b5kAYqIETK4OnzsS4l2ragJ0+soSMHh6VEeNHjTfSjk1tKxCqLyziCrPogadxP680J+v6yGHw==} + turbo@2.1.3: + resolution: {integrity: sha512-lY0yj2GH2a2a3NExZ3rGe+rHUVeFE2aXuRAue57n+08E7Z7N7YCmynju0kPC1grAQzERmoLpKrmzmWd+PNiADw==} hasBin: true type-check@0.4.0: @@ -10520,9 +10439,9 @@ packages: resolution: {integrity: sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==} engines: {node: '>=10'} - type-fest@2.19.0: - resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} - engines: {node: '>=12.20'} + type-fest@4.26.1: + resolution: {integrity: sha512-yOGpmOAL7CkKe/91I5O3gPICmJNLJ1G4zFYVAsRHg7M64biSnPtRj0WNQt++bRkjYOqjWXrhnUw1utzmVErAdg==} + engines: {node: '>=16'} type-is@1.6.18: resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} @@ -10540,8 +10459,8 @@ packages: typescript-auto-import-cache@0.3.3: resolution: {integrity: sha512-ojEC7+Ci1ij9eE6hp8Jl9VUNnsEKzztktP5gtYNRMrTmfXVwA1PITYYAkpxCvvupdSYa/Re51B6KMcv1CTZEUA==} - typescript-eslint@8.4.0: - resolution: {integrity: sha512-67qoc3zQZe3CAkO0ua17+7aCLI0dU+sSQd1eKPGq06QE4rfQjstVXR6woHO5qQvGUa550NfGckT4tzh3b3c8Pw==} + typescript-eslint@8.8.0: + resolution: {integrity: sha512-BjIT/VwJ8+0rVO01ZQ2ZVnjE1svFBiRczcpr1t1Yxt7sT25VSbPfrJtDsQ8uQTy2pilX5nI9gwxhUyLULNentw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '*' @@ -10549,8 +10468,8 @@ packages: typescript: optional: true - typescript@5.5.4: - resolution: {integrity: sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==} + typescript@5.6.2: + resolution: {integrity: sha512-NW8ByodCSNCwZeghjN3o+JX5OFH0Ojg6sadjEKY4huZ52TqbJTJnDo5+Tw98lSy63NZvi4n+ez5m2u5d4PkZyw==} engines: {node: '>=14.17'} hasBin: true @@ -10687,11 +10606,6 @@ packages: peerDependencies: vite: ^2.6.0 || ^3.0.0 || ^4.0.0 || ^5.0.0-0 - vite-node@2.0.5: - resolution: {integrity: sha512-LdsW4pxj0Ot69FAoXZ1yTnA9bjGohr2yNBU7QKRxpz8ITSkhuDl6h3zS/tvgz4qrNjeRnvrWeXQ8ZF7Um4W00Q==} - engines: {node: ^18.0.0 || >=20.0.0} - hasBin: true - vite-node@2.1.1: resolution: {integrity: sha512-N/mGckI1suG/5wQI35XeR9rsMsPqKXzq1CdUndzVstBj/HvyxxGctwnK6WX43NGt5L3Z5tcRf83g4TITKJhPrA==} engines: {node: ^18.0.0 || >=20.0.0} @@ -10717,8 +10631,8 @@ packages: '@testing-library/jest-dom': optional: true - vite-plugin-vue-devtools@7.4.4: - resolution: {integrity: sha512-lJ7Vr6gznv1nf2S75XJTpXl4XcwnHfyvqJQ7szOvTUfumQALDGo772TEH69wx8gkY/ZWZQea4DZR5IQZMOZKUA==} + vite-plugin-vue-devtools@7.4.6: + resolution: {integrity: sha512-lOKur3qovCB3BQStL0qfHEoIusqya1ngfxfWuqn9DTa6h9rlw6+S3PV4geOP5YBGYQ4NW1hRX70OD8I+sYr1dA==} engines: {node: '>=v14.21.3'} peerDependencies: vite: ^3.1.0 || ^4.0.0-0 || ^5.0.0-0 @@ -10733,8 +10647,8 @@ packages: peerDependencies: vue: '>=3.2.13' - vite@5.4.3: - resolution: {integrity: sha512-IH+nl64eq9lJjFqU+/yrRnrHPVTlgy42/+IzbOdaFDVlyLgI/wDlf+FCobXLX1cT0X5+7LMyH1mIy2xJdLfo8Q==} + vite@5.4.8: + resolution: {integrity: sha512-FqrItQ4DT1NC4zCUqMB4c4AZORMKIa0m8/URVCZ77OZ/QSNeJ54bU1vrFADbDsuwfIPcgknRkmqakQcgnL4GiQ==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true peerDependencies: @@ -10780,31 +10694,6 @@ packages: vite: optional: true - vitest@2.0.5: - resolution: {integrity: sha512-8GUxONfauuIdeSl5f9GTgVEpg5BTOlplET4WEDaeY2QBiN8wSm68vxN/tb5z405OwppfoCavnwXafiaYBC/xOA==} - engines: {node: ^18.0.0 || >=20.0.0} - hasBin: true - peerDependencies: - '@edge-runtime/vm': '*' - '@types/node': ^18.0.0 || >=20.0.0 - '@vitest/browser': 2.0.5 - '@vitest/ui': 2.0.5 - happy-dom: '*' - jsdom: '*' - peerDependenciesMeta: - '@edge-runtime/vm': - optional: true - '@types/node': - optional: true - '@vitest/browser': - optional: true - '@vitest/ui': - optional: true - happy-dom: - optional: true - jsdom: - optional: true - vitest@2.1.1: resolution: {integrity: sha512-97We7/VC0e9X5zBVkvt7SGQMGrRtn3KtySFQG5fpaMlS+l62eeXRQO633AYhSTC3z7IMebnPPNjGXVGNRFlxBA==} engines: {node: ^18.0.0 || >=20.0.0} @@ -10945,8 +10834,8 @@ packages: vscode-uri@3.0.8: resolution: {integrity: sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw==} - vue@3.5.3: - resolution: {integrity: sha512-xvRbd0HpuLovYbOHXRHlSBsSvmUJbo0pzbkKTApWnQGf3/cu5Z39mQeA5cZdLRVIoNf3zI6MSoOgHUT5i2jO+Q==} + vue@3.5.10: + resolution: {integrity: sha512-Vy2kmJwHPlouC/tSnIgXVg03SG+9wSqT1xu1Vehc+ChsXsRd7jLkKgMltVEFOzUdBr3uFwBCG+41LJtfAcBRng==} peerDependencies: typescript: '*' peerDependenciesMeta: @@ -11014,9 +10903,9 @@ packages: wicked-good-xpath@1.3.0: resolution: {integrity: sha512-Gd9+TUn5nXdwj/hFsPVx5cuHHiF5Bwuc30jZ4+ronF1qHK5O7HD0sgmXWSEgwKquT3ClLoKPVbO6qGwVwLzvAw==} - widest-line@4.0.1: - resolution: {integrity: sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==} - engines: {node: '>=12'} + widest-line@5.0.0: + resolution: {integrity: sha512-c9bZp7b5YtRj2wOe6dlj32MK+Bx/M/d+9VB2SHM1OtsUHR0aV0tdP6DWh/iMt0kWi1t5g1Iudu6hQRNd1A4PVA==} + engines: {node: '>=18'} wrap-ansi@7.0.0: resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} @@ -11026,6 +10915,10 @@ packages: resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} engines: {node: '>=12'} + wrap-ansi@9.0.0: + resolution: {integrity: sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==} + engines: {node: '>=18'} + ws@8.16.0: resolution: {integrity: sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==} engines: {node: '>=10.0.0'} @@ -11102,8 +10995,16 @@ packages: resolution: {integrity: sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g==} engines: {node: '>=12.20'} - zod-to-json-schema@3.23.2: - resolution: {integrity: sha512-uSt90Gzc/tUfyNqxnjlfBs8W6WSGpNBv0rVsNxP/BVSMHMKGdthPYff4xtCHYloJGM0CFxFsb3NbC0eqPhfImw==} + yocto-spinner@0.1.0: + resolution: {integrity: sha512-sBra0N4uhNn5UibnOz/HJxB1a0tzZ5zXbqnDe+tfRR3BGy+BmOrzrnQCZRJI7C++JiSZaPygPeNon4QCUmMQ4g==} + engines: {node: '>=18.19'} + + yoctocolors@2.1.1: + resolution: {integrity: sha512-GQHQqAopRhwU8Kt1DDM8NjibDXHC8eoh1erhGAJPEyveY9qqVeXvVikNKrDz69sHowPMorbPUrH/mx8c50eiBQ==} + engines: {node: '>=18'} + + zod-to-json-schema@3.23.3: + resolution: {integrity: sha512-TYWChTxKQbRJp5ST22o/Irt9KC5nj7CdBKYB/AosCRdj/wxEMvv4NNaj9XVUHDOIp53ZxArGhnw5HMZziPFjog==} peerDependencies: zod: ^3.23.3 @@ -11174,13 +11075,13 @@ snapshots: astro: link:packages/astro lite-youtube-embed: 0.3.2 - '@astrojs/check@0.9.3(prettier-plugin-astro@0.14.1)(prettier@3.3.3)(typescript@5.5.4)': + '@astrojs/check@0.9.3(prettier-plugin-astro@0.14.1)(prettier@3.3.3)(typescript@5.6.2)': dependencies: - '@astrojs/language-server': 2.14.1(prettier-plugin-astro@0.14.1)(prettier@3.3.3)(typescript@5.5.4) + '@astrojs/language-server': 2.14.1(prettier-plugin-astro@0.14.1)(prettier@3.3.3)(typescript@5.6.2) chokidar: 3.6.0 fast-glob: 3.3.2 kleur: 4.1.5 - typescript: 5.5.4 + typescript: 5.6.2 yargs: 17.7.2 transitivePeerDependencies: - prettier @@ -11194,12 +11095,12 @@ snapshots: '@astrojs/compiler@2.10.3': {} - '@astrojs/language-server@2.14.1(prettier-plugin-astro@0.14.1)(prettier@3.3.3)(typescript@5.5.4)': + '@astrojs/language-server@2.14.1(prettier-plugin-astro@0.14.1)(prettier@3.3.3)(typescript@5.6.2)': dependencies: '@astrojs/compiler': 2.10.3 '@astrojs/yaml2ts': 0.2.1 '@jridgewell/sourcemap-codec': 1.5.0 - '@volar/kit': 2.4.0(typescript@5.5.4) + '@volar/kit': 2.4.0(typescript@5.6.2) '@volar/language-core': 2.4.0 '@volar/language-server': 2.4.0 '@volar/language-service': 2.4.0 @@ -11229,6 +11130,14 @@ snapshots: transitivePeerDependencies: - supports-color + '@astrojs/node@8.3.4(astro@packages+astro)': + dependencies: + astro: link:packages/astro + send: 0.19.0 + server-destroy: 1.0.1 + transitivePeerDependencies: + - supports-color + '@astrojs/node@9.0.0-alpha.1(astro@packages+astro)': dependencies: astro: link:packages/astro @@ -11259,7 +11168,7 @@ snapshots: '@babel/parser': 7.25.4 '@babel/template': 7.25.0 '@babel/traverse': 7.25.4 - '@babel/types': 7.25.4 + '@babel/types': 7.25.6 convert-source-map: 2.0.0 debug: 4.3.7 gensync: 1.0.0-beta.2 @@ -11270,14 +11179,14 @@ snapshots: '@babel/generator@7.25.5': dependencies: - '@babel/types': 7.25.4 + '@babel/types': 7.25.6 '@jridgewell/gen-mapping': 0.3.5 '@jridgewell/trace-mapping': 0.3.25 jsesc: 2.5.2 '@babel/helper-annotate-as-pure@7.24.7': dependencies: - '@babel/types': 7.25.4 + '@babel/types': 7.25.6 '@babel/helper-compilation-targets@7.25.2': dependencies: @@ -11304,32 +11213,32 @@ snapshots: '@babel/helper-environment-visitor@7.24.7': dependencies: - '@babel/types': 7.25.4 + '@babel/types': 7.25.6 '@babel/helper-function-name@7.24.7': dependencies: '@babel/template': 7.25.0 - '@babel/types': 7.25.4 + '@babel/types': 7.25.6 '@babel/helper-member-expression-to-functions@7.24.7': dependencies: '@babel/traverse': 7.25.4 - '@babel/types': 7.25.4 + '@babel/types': 7.25.6 transitivePeerDependencies: - supports-color '@babel/helper-module-imports@7.18.6': dependencies: - '@babel/types': 7.25.4 + '@babel/types': 7.25.6 '@babel/helper-module-imports@7.22.15': dependencies: - '@babel/types': 7.25.4 + '@babel/types': 7.25.6 '@babel/helper-module-imports@7.24.7': dependencies: '@babel/traverse': 7.25.4 - '@babel/types': 7.25.4 + '@babel/types': 7.25.6 transitivePeerDependencies: - supports-color @@ -11345,7 +11254,7 @@ snapshots: '@babel/helper-optimise-call-expression@7.24.7': dependencies: - '@babel/types': 7.25.4 + '@babel/types': 7.25.6 '@babel/helper-plugin-utils@7.24.8': {} @@ -11361,20 +11270,20 @@ snapshots: '@babel/helper-simple-access@7.24.7': dependencies: '@babel/traverse': 7.25.4 - '@babel/types': 7.25.4 + '@babel/types': 7.25.6 transitivePeerDependencies: - supports-color '@babel/helper-skip-transparent-expression-wrappers@7.24.7': dependencies: '@babel/traverse': 7.25.4 - '@babel/types': 7.25.4 + '@babel/types': 7.25.6 transitivePeerDependencies: - supports-color '@babel/helper-split-export-declaration@7.24.7': dependencies: - '@babel/types': 7.25.4 + '@babel/types': 7.25.6 '@babel/helper-string-parser@7.24.8': {} @@ -11385,7 +11294,7 @@ snapshots: '@babel/helpers@7.25.0': dependencies: '@babel/template': 7.25.0 - '@babel/types': 7.25.4 + '@babel/types': 7.25.6 '@babel/highlight@7.24.7': dependencies: @@ -11396,7 +11305,7 @@ snapshots: '@babel/parser@7.25.4': dependencies: - '@babel/types': 7.25.4 + '@babel/types': 7.25.6 '@babel/plugin-proposal-decorators@7.24.1(@babel/core@7.25.2)': dependencies: @@ -11444,7 +11353,7 @@ snapshots: '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-transform-react-jsx-source@7.24.1(@babel/core@7.25.2)': + '@babel/plugin-transform-react-jsx-source@7.24.7(@babel/core@7.25.2)': dependencies: '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.24.8 @@ -11456,7 +11365,7 @@ snapshots: '@babel/helper-module-imports': 7.24.7 '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-syntax-jsx': 7.24.7(@babel/core@7.25.2) - '@babel/types': 7.25.4 + '@babel/types': 7.25.6 transitivePeerDependencies: - supports-color @@ -11478,7 +11387,7 @@ snapshots: dependencies: '@babel/code-frame': 7.24.7 '@babel/parser': 7.25.4 - '@babel/types': 7.25.4 + '@babel/types': 7.25.6 '@babel/traverse@7.25.4': dependencies: @@ -11486,13 +11395,13 @@ snapshots: '@babel/generator': 7.25.5 '@babel/parser': 7.25.4 '@babel/template': 7.25.0 - '@babel/types': 7.25.4 + '@babel/types': 7.25.6 debug: 4.3.7 globals: 11.12.0 transitivePeerDependencies: - supports-color - '@babel/types@7.25.4': + '@babel/types@7.25.6': dependencies: '@babel/helper-string-parser': 7.24.8 '@babel/helper-validator-identifier': 7.24.7 @@ -11738,201 +11647,201 @@ snapshots: '@csstools/css-parser-algorithms': 3.0.1(@csstools/css-tokenizer@3.0.1) '@csstools/css-tokenizer': 3.0.1 - '@csstools/postcss-cascade-layers@5.0.0(postcss@8.4.45)': + '@csstools/postcss-cascade-layers@5.0.0(postcss@8.4.47)': dependencies: '@csstools/selector-specificity': 4.0.0(postcss-selector-parser@6.1.0) - postcss: 8.4.45 + postcss: 8.4.47 postcss-selector-parser: 6.1.0 - '@csstools/postcss-color-function@4.0.2(postcss@8.4.45)': + '@csstools/postcss-color-function@4.0.2(postcss@8.4.47)': dependencies: '@csstools/css-color-parser': 3.0.2(@csstools/css-parser-algorithms@3.0.1(@csstools/css-tokenizer@3.0.1))(@csstools/css-tokenizer@3.0.1) '@csstools/css-parser-algorithms': 3.0.1(@csstools/css-tokenizer@3.0.1) '@csstools/css-tokenizer': 3.0.1 - '@csstools/postcss-progressive-custom-properties': 4.0.0(postcss@8.4.45) - '@csstools/utilities': 2.0.0(postcss@8.4.45) - postcss: 8.4.45 + '@csstools/postcss-progressive-custom-properties': 4.0.0(postcss@8.4.47) + '@csstools/utilities': 2.0.0(postcss@8.4.47) + postcss: 8.4.47 - '@csstools/postcss-color-mix-function@3.0.2(postcss@8.4.45)': + '@csstools/postcss-color-mix-function@3.0.2(postcss@8.4.47)': dependencies: '@csstools/css-color-parser': 3.0.2(@csstools/css-parser-algorithms@3.0.1(@csstools/css-tokenizer@3.0.1))(@csstools/css-tokenizer@3.0.1) '@csstools/css-parser-algorithms': 3.0.1(@csstools/css-tokenizer@3.0.1) '@csstools/css-tokenizer': 3.0.1 - '@csstools/postcss-progressive-custom-properties': 4.0.0(postcss@8.4.45) - '@csstools/utilities': 2.0.0(postcss@8.4.45) - postcss: 8.4.45 + '@csstools/postcss-progressive-custom-properties': 4.0.0(postcss@8.4.47) + '@csstools/utilities': 2.0.0(postcss@8.4.47) + postcss: 8.4.47 - '@csstools/postcss-content-alt-text@2.0.1(postcss@8.4.45)': + '@csstools/postcss-content-alt-text@2.0.1(postcss@8.4.47)': dependencies: '@csstools/css-parser-algorithms': 3.0.1(@csstools/css-tokenizer@3.0.1) '@csstools/css-tokenizer': 3.0.1 - '@csstools/postcss-progressive-custom-properties': 4.0.0(postcss@8.4.45) - '@csstools/utilities': 2.0.0(postcss@8.4.45) - postcss: 8.4.45 + '@csstools/postcss-progressive-custom-properties': 4.0.0(postcss@8.4.47) + '@csstools/utilities': 2.0.0(postcss@8.4.47) + postcss: 8.4.47 - '@csstools/postcss-exponential-functions@2.0.1(postcss@8.4.45)': + '@csstools/postcss-exponential-functions@2.0.1(postcss@8.4.47)': dependencies: '@csstools/css-calc': 2.0.1(@csstools/css-parser-algorithms@3.0.1(@csstools/css-tokenizer@3.0.1))(@csstools/css-tokenizer@3.0.1) '@csstools/css-parser-algorithms': 3.0.1(@csstools/css-tokenizer@3.0.1) '@csstools/css-tokenizer': 3.0.1 - postcss: 8.4.45 + postcss: 8.4.47 - '@csstools/postcss-font-format-keywords@4.0.0(postcss@8.4.45)': + '@csstools/postcss-font-format-keywords@4.0.0(postcss@8.4.47)': dependencies: - '@csstools/utilities': 2.0.0(postcss@8.4.45) - postcss: 8.4.45 + '@csstools/utilities': 2.0.0(postcss@8.4.47) + postcss: 8.4.47 postcss-value-parser: 4.2.0 - '@csstools/postcss-gamut-mapping@2.0.2(postcss@8.4.45)': + '@csstools/postcss-gamut-mapping@2.0.2(postcss@8.4.47)': dependencies: '@csstools/css-color-parser': 3.0.2(@csstools/css-parser-algorithms@3.0.1(@csstools/css-tokenizer@3.0.1))(@csstools/css-tokenizer@3.0.1) '@csstools/css-parser-algorithms': 3.0.1(@csstools/css-tokenizer@3.0.1) '@csstools/css-tokenizer': 3.0.1 - postcss: 8.4.45 + postcss: 8.4.47 - '@csstools/postcss-gradients-interpolation-method@5.0.2(postcss@8.4.45)': + '@csstools/postcss-gradients-interpolation-method@5.0.2(postcss@8.4.47)': dependencies: '@csstools/css-color-parser': 3.0.2(@csstools/css-parser-algorithms@3.0.1(@csstools/css-tokenizer@3.0.1))(@csstools/css-tokenizer@3.0.1) '@csstools/css-parser-algorithms': 3.0.1(@csstools/css-tokenizer@3.0.1) '@csstools/css-tokenizer': 3.0.1 - '@csstools/postcss-progressive-custom-properties': 4.0.0(postcss@8.4.45) - '@csstools/utilities': 2.0.0(postcss@8.4.45) - postcss: 8.4.45 + '@csstools/postcss-progressive-custom-properties': 4.0.0(postcss@8.4.47) + '@csstools/utilities': 2.0.0(postcss@8.4.47) + postcss: 8.4.47 - '@csstools/postcss-hwb-function@4.0.2(postcss@8.4.45)': + '@csstools/postcss-hwb-function@4.0.2(postcss@8.4.47)': dependencies: '@csstools/css-color-parser': 3.0.2(@csstools/css-parser-algorithms@3.0.1(@csstools/css-tokenizer@3.0.1))(@csstools/css-tokenizer@3.0.1) '@csstools/css-parser-algorithms': 3.0.1(@csstools/css-tokenizer@3.0.1) '@csstools/css-tokenizer': 3.0.1 - '@csstools/postcss-progressive-custom-properties': 4.0.0(postcss@8.4.45) - '@csstools/utilities': 2.0.0(postcss@8.4.45) - postcss: 8.4.45 + '@csstools/postcss-progressive-custom-properties': 4.0.0(postcss@8.4.47) + '@csstools/utilities': 2.0.0(postcss@8.4.47) + postcss: 8.4.47 - '@csstools/postcss-ic-unit@4.0.0(postcss@8.4.45)': + '@csstools/postcss-ic-unit@4.0.0(postcss@8.4.47)': dependencies: - '@csstools/postcss-progressive-custom-properties': 4.0.0(postcss@8.4.45) - '@csstools/utilities': 2.0.0(postcss@8.4.45) - postcss: 8.4.45 + '@csstools/postcss-progressive-custom-properties': 4.0.0(postcss@8.4.47) + '@csstools/utilities': 2.0.0(postcss@8.4.47) + postcss: 8.4.47 postcss-value-parser: 4.2.0 - '@csstools/postcss-initial@2.0.0(postcss@8.4.45)': + '@csstools/postcss-initial@2.0.0(postcss@8.4.47)': dependencies: - postcss: 8.4.45 + postcss: 8.4.47 - '@csstools/postcss-is-pseudo-class@5.0.0(postcss@8.4.45)': + '@csstools/postcss-is-pseudo-class@5.0.0(postcss@8.4.47)': dependencies: '@csstools/selector-specificity': 4.0.0(postcss-selector-parser@6.1.0) - postcss: 8.4.45 + postcss: 8.4.47 postcss-selector-parser: 6.1.0 - '@csstools/postcss-light-dark-function@2.0.2(postcss@8.4.45)': + '@csstools/postcss-light-dark-function@2.0.4(postcss@8.4.47)': dependencies: '@csstools/css-parser-algorithms': 3.0.1(@csstools/css-tokenizer@3.0.1) '@csstools/css-tokenizer': 3.0.1 - '@csstools/postcss-progressive-custom-properties': 4.0.0(postcss@8.4.45) - '@csstools/utilities': 2.0.0(postcss@8.4.45) - postcss: 8.4.45 + '@csstools/postcss-progressive-custom-properties': 4.0.0(postcss@8.4.47) + '@csstools/utilities': 2.0.0(postcss@8.4.47) + postcss: 8.4.47 - '@csstools/postcss-logical-float-and-clear@3.0.0(postcss@8.4.45)': + '@csstools/postcss-logical-float-and-clear@3.0.0(postcss@8.4.47)': dependencies: - postcss: 8.4.45 + postcss: 8.4.47 - '@csstools/postcss-logical-overflow@2.0.0(postcss@8.4.45)': + '@csstools/postcss-logical-overflow@2.0.0(postcss@8.4.47)': dependencies: - postcss: 8.4.45 + postcss: 8.4.47 - '@csstools/postcss-logical-overscroll-behavior@2.0.0(postcss@8.4.45)': + '@csstools/postcss-logical-overscroll-behavior@2.0.0(postcss@8.4.47)': dependencies: - postcss: 8.4.45 + postcss: 8.4.47 - '@csstools/postcss-logical-resize@3.0.0(postcss@8.4.45)': + '@csstools/postcss-logical-resize@3.0.0(postcss@8.4.47)': dependencies: - postcss: 8.4.45 + postcss: 8.4.47 postcss-value-parser: 4.2.0 - '@csstools/postcss-logical-viewport-units@3.0.1(postcss@8.4.45)': + '@csstools/postcss-logical-viewport-units@3.0.1(postcss@8.4.47)': dependencies: '@csstools/css-tokenizer': 3.0.1 - '@csstools/utilities': 2.0.0(postcss@8.4.45) - postcss: 8.4.45 + '@csstools/utilities': 2.0.0(postcss@8.4.47) + postcss: 8.4.47 - '@csstools/postcss-media-minmax@2.0.1(postcss@8.4.45)': + '@csstools/postcss-media-minmax@2.0.1(postcss@8.4.47)': dependencies: '@csstools/css-calc': 2.0.1(@csstools/css-parser-algorithms@3.0.1(@csstools/css-tokenizer@3.0.1))(@csstools/css-tokenizer@3.0.1) '@csstools/css-parser-algorithms': 3.0.1(@csstools/css-tokenizer@3.0.1) '@csstools/css-tokenizer': 3.0.1 '@csstools/media-query-list-parser': 3.0.1(@csstools/css-parser-algorithms@3.0.1(@csstools/css-tokenizer@3.0.1))(@csstools/css-tokenizer@3.0.1) - postcss: 8.4.45 + postcss: 8.4.47 - '@csstools/postcss-media-queries-aspect-ratio-number-values@3.0.1(postcss@8.4.45)': + '@csstools/postcss-media-queries-aspect-ratio-number-values@3.0.1(postcss@8.4.47)': dependencies: '@csstools/css-parser-algorithms': 3.0.1(@csstools/css-tokenizer@3.0.1) '@csstools/css-tokenizer': 3.0.1 '@csstools/media-query-list-parser': 3.0.1(@csstools/css-parser-algorithms@3.0.1(@csstools/css-tokenizer@3.0.1))(@csstools/css-tokenizer@3.0.1) - postcss: 8.4.45 + postcss: 8.4.47 - '@csstools/postcss-nested-calc@4.0.0(postcss@8.4.45)': + '@csstools/postcss-nested-calc@4.0.0(postcss@8.4.47)': dependencies: - '@csstools/utilities': 2.0.0(postcss@8.4.45) - postcss: 8.4.45 + '@csstools/utilities': 2.0.0(postcss@8.4.47) + postcss: 8.4.47 postcss-value-parser: 4.2.0 - '@csstools/postcss-normalize-display-values@4.0.0(postcss@8.4.45)': + '@csstools/postcss-normalize-display-values@4.0.0(postcss@8.4.47)': dependencies: - postcss: 8.4.45 + postcss: 8.4.47 postcss-value-parser: 4.2.0 - '@csstools/postcss-oklab-function@4.0.2(postcss@8.4.45)': + '@csstools/postcss-oklab-function@4.0.2(postcss@8.4.47)': dependencies: '@csstools/css-color-parser': 3.0.2(@csstools/css-parser-algorithms@3.0.1(@csstools/css-tokenizer@3.0.1))(@csstools/css-tokenizer@3.0.1) '@csstools/css-parser-algorithms': 3.0.1(@csstools/css-tokenizer@3.0.1) '@csstools/css-tokenizer': 3.0.1 - '@csstools/postcss-progressive-custom-properties': 4.0.0(postcss@8.4.45) - '@csstools/utilities': 2.0.0(postcss@8.4.45) - postcss: 8.4.45 + '@csstools/postcss-progressive-custom-properties': 4.0.0(postcss@8.4.47) + '@csstools/utilities': 2.0.0(postcss@8.4.47) + postcss: 8.4.47 - '@csstools/postcss-progressive-custom-properties@4.0.0(postcss@8.4.45)': + '@csstools/postcss-progressive-custom-properties@4.0.0(postcss@8.4.47)': dependencies: - postcss: 8.4.45 + postcss: 8.4.47 postcss-value-parser: 4.2.0 - '@csstools/postcss-relative-color-syntax@3.0.2(postcss@8.4.45)': + '@csstools/postcss-relative-color-syntax@3.0.2(postcss@8.4.47)': dependencies: '@csstools/css-color-parser': 3.0.2(@csstools/css-parser-algorithms@3.0.1(@csstools/css-tokenizer@3.0.1))(@csstools/css-tokenizer@3.0.1) '@csstools/css-parser-algorithms': 3.0.1(@csstools/css-tokenizer@3.0.1) '@csstools/css-tokenizer': 3.0.1 - '@csstools/postcss-progressive-custom-properties': 4.0.0(postcss@8.4.45) - '@csstools/utilities': 2.0.0(postcss@8.4.45) - postcss: 8.4.45 + '@csstools/postcss-progressive-custom-properties': 4.0.0(postcss@8.4.47) + '@csstools/utilities': 2.0.0(postcss@8.4.47) + postcss: 8.4.47 - '@csstools/postcss-scope-pseudo-class@4.0.0(postcss@8.4.45)': + '@csstools/postcss-scope-pseudo-class@4.0.0(postcss@8.4.47)': dependencies: - postcss: 8.4.45 + postcss: 8.4.47 postcss-selector-parser: 6.1.0 - '@csstools/postcss-stepped-value-functions@4.0.1(postcss@8.4.45)': + '@csstools/postcss-stepped-value-functions@4.0.1(postcss@8.4.47)': dependencies: '@csstools/css-calc': 2.0.1(@csstools/css-parser-algorithms@3.0.1(@csstools/css-tokenizer@3.0.1))(@csstools/css-tokenizer@3.0.1) '@csstools/css-parser-algorithms': 3.0.1(@csstools/css-tokenizer@3.0.1) '@csstools/css-tokenizer': 3.0.1 - postcss: 8.4.45 + postcss: 8.4.47 - '@csstools/postcss-text-decoration-shorthand@4.0.1(postcss@8.4.45)': + '@csstools/postcss-text-decoration-shorthand@4.0.1(postcss@8.4.47)': dependencies: '@csstools/color-helpers': 5.0.1 - postcss: 8.4.45 + postcss: 8.4.47 postcss-value-parser: 4.2.0 - '@csstools/postcss-trigonometric-functions@4.0.1(postcss@8.4.45)': + '@csstools/postcss-trigonometric-functions@4.0.1(postcss@8.4.47)': dependencies: '@csstools/css-calc': 2.0.1(@csstools/css-parser-algorithms@3.0.1(@csstools/css-tokenizer@3.0.1))(@csstools/css-tokenizer@3.0.1) '@csstools/css-parser-algorithms': 3.0.1(@csstools/css-tokenizer@3.0.1) '@csstools/css-tokenizer': 3.0.1 - postcss: 8.4.45 + postcss: 8.4.47 - '@csstools/postcss-unset-value@4.0.0(postcss@8.4.45)': + '@csstools/postcss-unset-value@4.0.0(postcss@8.4.47)': dependencies: - postcss: 8.4.45 + postcss: 8.4.47 '@csstools/selector-resolve-nested@2.0.0(postcss-selector-parser@6.1.0)': dependencies: @@ -11942,9 +11851,9 @@ snapshots: dependencies: postcss-selector-parser: 6.1.0 - '@csstools/utilities@2.0.0(postcss@8.4.45)': + '@csstools/utilities@2.0.0(postcss@8.4.47)': dependencies: - postcss: 8.4.45 + postcss: 8.4.47 '@emmetio/abbreviation@2.3.3': dependencies: @@ -12043,9 +11952,9 @@ snapshots: '@esbuild/win32-x64@0.21.5': optional: true - '@eslint-community/eslint-utils@4.4.0(eslint@9.10.0(jiti@1.21.0))': + '@eslint-community/eslint-utils@4.4.0(eslint@9.11.1(jiti@1.21.0))': dependencies: - eslint: 9.10.0(jiti@1.21.0) + eslint: 9.11.1(jiti@1.21.0) eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.11.0': {} @@ -12058,6 +11967,8 @@ snapshots: transitivePeerDependencies: - supports-color + '@eslint/core@0.6.0': {} + '@eslint/eslintrc@3.1.0': dependencies: ajv: 6.12.6 @@ -12072,17 +11983,17 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint/js@9.10.0': {} + '@eslint/js@9.11.1': {} '@eslint/object-schema@2.1.4': {} - '@eslint/plugin-kit@0.1.0': + '@eslint/plugin-kit@0.2.0': dependencies: levn: 0.4.1 - '@fontsource/monofett@5.0.22': {} + '@fontsource/monofett@5.1.0': {} - '@fontsource/montserrat@5.0.20': {} + '@fontsource/montserrat@5.1.0': {} '@fortawesome/fontawesome-free@6.6.0': {} @@ -12209,36 +12120,30 @@ snapshots: dependencies: tslib: 2.6.2 - '@libsql/client@0.10.0': + '@libsql/client@0.14.0': dependencies: - '@libsql/core': 0.10.0 - '@libsql/hrana-client': 0.6.2 + '@libsql/core': 0.14.0 + '@libsql/hrana-client': 0.7.0 js-base64: 3.7.7 - libsql: 0.4.1 + libsql: 0.4.5 promise-limit: 2.7.0 transitivePeerDependencies: - bufferutil - utf-8-validate - '@libsql/core@0.10.0': + '@libsql/core@0.14.0': dependencies: js-base64: 3.7.7 - '@libsql/darwin-arm64@0.3.19': + '@libsql/darwin-arm64@0.4.5': optional: true - '@libsql/darwin-arm64@0.4.1': + '@libsql/darwin-x64@0.4.5': optional: true - '@libsql/darwin-x64@0.3.19': - optional: true - - '@libsql/darwin-x64@0.4.1': - optional: true - - '@libsql/hrana-client@0.6.2': + '@libsql/hrana-client@0.7.0': dependencies: - '@libsql/isomorphic-fetch': 0.2.1 + '@libsql/isomorphic-fetch': 0.3.1 '@libsql/isomorphic-ws': 0.1.5 js-base64: 3.7.7 node-fetch: 3.3.2 @@ -12246,7 +12151,7 @@ snapshots: - bufferutil - utf-8-validate - '@libsql/isomorphic-fetch@0.2.1': {} + '@libsql/isomorphic-fetch@0.3.1': {} '@libsql/isomorphic-ws@0.1.5': dependencies: @@ -12256,34 +12161,19 @@ snapshots: - bufferutil - utf-8-validate - '@libsql/linux-arm64-gnu@0.3.19': - optional: true - - '@libsql/linux-arm64-gnu@0.4.1': - optional: true - - '@libsql/linux-arm64-musl@0.3.19': - optional: true - - '@libsql/linux-arm64-musl@0.4.1': - optional: true - - '@libsql/linux-x64-gnu@0.3.19': - optional: true - - '@libsql/linux-x64-gnu@0.4.1': + '@libsql/linux-arm64-gnu@0.4.5': optional: true - '@libsql/linux-x64-musl@0.3.19': + '@libsql/linux-arm64-musl@0.4.5': optional: true - '@libsql/linux-x64-musl@0.4.1': + '@libsql/linux-x64-gnu@0.4.5': optional: true - '@libsql/win32-x64-msvc@0.3.19': + '@libsql/linux-x64-musl@0.4.5': optional: true - '@libsql/win32-x64-msvc@0.4.1': + '@libsql/win32-x64-msvc@0.4.5': optional: true '@lit-labs/ssr-dom-shim@1.2.1': {} @@ -12308,15 +12198,15 @@ snapshots: globby: 11.1.0 read-yaml-file: 1.1.0 - '@markdoc/markdoc@0.4.0(@types/react@18.3.5)(react@18.3.1)': + '@markdoc/markdoc@0.4.0(@types/react@18.3.10)(react@18.3.1)': optionalDependencies: '@types/markdown-it': 12.2.3 - '@types/react': 18.3.5 + '@types/react': 18.3.10 react: 18.3.1 '@mdx-js/mdx@3.0.1': dependencies: - '@types/estree': 1.0.5 + '@types/estree': 1.0.6 '@types/estree-jsx': 1.0.5 '@types/hast': 3.0.4 '@types/mdx': 2.0.13 @@ -12332,7 +12222,7 @@ snapshots: periscopic: 3.1.0 remark-mdx: 3.0.1 remark-parse: 11.0.0 - remark-rehype: 11.1.0 + remark-rehype: 11.1.1 source-map: 0.7.4 unified: 11.0.5 unist-util-position-from-estree: 2.0.0 @@ -12342,10 +12232,10 @@ snapshots: transitivePeerDependencies: - supports-color - '@nanostores/preact@0.5.2(nanostores@0.11.3)(preact@10.23.2)': + '@nanostores/preact@0.5.2(nanostores@0.11.3)(preact@10.24.1)': dependencies: nanostores: 0.11.3 - preact: 10.23.2 + preact: 10.24.1 '@neon-rs/load@0.0.4': {} @@ -12361,23 +12251,23 @@ snapshots: '@nodelib/fs.scandir': 2.1.5 fastq: 1.17.1 - '@oslojs/encoding@0.4.1': {} + '@oslojs/encoding@1.1.0': {} '@pkgjs/parseargs@0.11.0': optional: true - '@playwright/test@1.47.0': + '@playwright/test@1.47.2': dependencies: - playwright: 1.47.0 + playwright: 1.47.2 '@polka/url@1.0.0-next.25': {} - '@preact/preset-vite@2.8.2(@babel/core@7.25.2)(preact@10.23.2)(vite@5.4.3(@types/node@18.19.31)(sass@1.78.0))': + '@preact/preset-vite@2.8.2(@babel/core@7.25.2)(preact@10.24.1)(vite@5.4.8(@types/node@18.19.31)(sass@1.79.4))': dependencies: '@babel/core': 7.25.2 '@babel/plugin-transform-react-jsx': 7.25.2(@babel/core@7.25.2) '@babel/plugin-transform-react-jsx-development': 7.24.7(@babel/core@7.25.2) - '@prefresh/vite': 2.4.5(preact@10.23.2)(vite@5.4.3(@types/node@18.19.31)(sass@1.78.0)) + '@prefresh/vite': 2.4.5(preact@10.24.1)(vite@5.4.8(@types/node@18.19.31)(sass@1.79.4)) '@rollup/pluginutils': 4.2.1 babel-plugin-transform-hook-names: 1.0.2(@babel/core@7.25.2) debug: 4.3.7 @@ -12387,35 +12277,35 @@ snapshots: resolve: 1.22.8 source-map: 0.7.4 stack-trace: 1.0.0-pre2 - vite: 5.4.3(@types/node@18.19.31)(sass@1.78.0) + vite: 5.4.8(@types/node@18.19.31)(sass@1.79.4) transitivePeerDependencies: - preact - supports-color '@preact/signals-core@1.7.0': {} - '@preact/signals@1.3.0(preact@10.23.2)': + '@preact/signals@1.3.0(preact@10.24.1)': dependencies: '@preact/signals-core': 1.7.0 - preact: 10.23.2 + preact: 10.24.1 '@prefresh/babel-plugin@0.5.1': {} - '@prefresh/core@1.5.2(preact@10.23.2)': + '@prefresh/core@1.5.2(preact@10.24.1)': dependencies: - preact: 10.23.2 + preact: 10.24.1 '@prefresh/utils@1.2.0': {} - '@prefresh/vite@2.4.5(preact@10.23.2)(vite@5.4.3(@types/node@18.19.31)(sass@1.78.0))': + '@prefresh/vite@2.4.5(preact@10.24.1)(vite@5.4.8(@types/node@18.19.31)(sass@1.79.4))': dependencies: '@babel/core': 7.25.2 '@prefresh/babel-plugin': 0.5.1 - '@prefresh/core': 1.5.2(preact@10.23.2) + '@prefresh/core': 1.5.2(preact@10.24.1) '@prefresh/utils': 1.2.0 '@rollup/pluginutils': 4.2.1 - preact: 10.23.2 - vite: 5.4.3(@types/node@18.19.31)(sass@1.78.0) + preact: 10.24.1 + vite: 5.4.8(@types/node@18.19.31)(sass@1.79.4) transitivePeerDependencies: - supports-color @@ -12424,108 +12314,128 @@ snapshots: estree-walker: 2.0.2 picomatch: 2.3.1 - '@rollup/pluginutils@5.1.0(rollup@4.21.2)': + '@rollup/pluginutils@5.1.2(rollup@4.23.0)': dependencies: - '@types/estree': 1.0.5 + '@types/estree': 1.0.6 estree-walker: 2.0.2 picomatch: 2.3.1 optionalDependencies: - rollup: 4.21.2 + rollup: 4.23.0 - '@rollup/rollup-android-arm-eabi@4.21.2': + '@rollup/rollup-android-arm-eabi@4.23.0': optional: true - '@rollup/rollup-android-arm64@4.21.2': + '@rollup/rollup-android-arm64@4.23.0': optional: true - '@rollup/rollup-darwin-arm64@4.21.2': + '@rollup/rollup-darwin-arm64@4.23.0': optional: true - '@rollup/rollup-darwin-x64@4.21.2': + '@rollup/rollup-darwin-x64@4.23.0': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.21.2': + '@rollup/rollup-linux-arm-gnueabihf@4.23.0': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.21.2': + '@rollup/rollup-linux-arm-musleabihf@4.23.0': optional: true - '@rollup/rollup-linux-arm64-gnu@4.21.2': + '@rollup/rollup-linux-arm64-gnu@4.23.0': optional: true - '@rollup/rollup-linux-arm64-musl@4.21.2': + '@rollup/rollup-linux-arm64-musl@4.23.0': optional: true - '@rollup/rollup-linux-powerpc64le-gnu@4.21.2': + '@rollup/rollup-linux-powerpc64le-gnu@4.23.0': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.21.2': + '@rollup/rollup-linux-riscv64-gnu@4.23.0': optional: true - '@rollup/rollup-linux-s390x-gnu@4.21.2': + '@rollup/rollup-linux-s390x-gnu@4.23.0': optional: true - '@rollup/rollup-linux-x64-gnu@4.21.2': + '@rollup/rollup-linux-x64-gnu@4.23.0': optional: true - '@rollup/rollup-linux-x64-musl@4.21.2': + '@rollup/rollup-linux-x64-musl@4.23.0': optional: true - '@rollup/rollup-win32-arm64-msvc@4.21.2': + '@rollup/rollup-win32-arm64-msvc@4.23.0': optional: true - '@rollup/rollup-win32-ia32-msvc@4.21.2': + '@rollup/rollup-win32-ia32-msvc@4.23.0': optional: true - '@rollup/rollup-win32-x64-msvc@4.21.2': + '@rollup/rollup-win32-x64-msvc@4.23.0': optional: true - '@shikijs/core@1.16.2': + '@shikijs/core@1.21.0': + dependencies: + '@shikijs/engine-javascript': 1.21.0 + '@shikijs/engine-oniguruma': 1.21.0 + '@shikijs/types': 1.21.0 + '@shikijs/vscode-textmate': 9.2.2 + '@types/hast': 3.0.4 + hast-util-to-html: 9.0.3 + + '@shikijs/engine-javascript@1.21.0': + dependencies: + '@shikijs/types': 1.21.0 + '@shikijs/vscode-textmate': 9.2.2 + oniguruma-to-js: 0.4.3 + + '@shikijs/engine-oniguruma@1.21.0': dependencies: - '@shikijs/vscode-textmate': 9.2.0 + '@shikijs/types': 1.21.0 + '@shikijs/vscode-textmate': 9.2.2 + + '@shikijs/types@1.21.0': + dependencies: + '@shikijs/vscode-textmate': 9.2.2 '@types/hast': 3.0.4 - '@shikijs/vscode-textmate@9.2.0': {} + '@shikijs/vscode-textmate@9.2.2': {} '@sindresorhus/merge-streams@2.3.0': {} - '@solidjs/router@0.14.3(solid-js@1.8.22)': + '@solidjs/router@0.14.7(solid-js@1.9.1)': dependencies: - solid-js: 1.8.22 + solid-js: 1.9.1 - '@sveltejs/vite-plugin-svelte-inspector@2.1.0(@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.19)(vite@5.4.3(@types/node@18.19.31)(sass@1.78.0)))(svelte@4.2.19)(vite@5.4.3(@types/node@18.19.31)(sass@1.78.0))': + '@sveltejs/vite-plugin-svelte-inspector@2.1.0(@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.19)(vite@5.4.8(@types/node@18.19.31)(sass@1.79.4)))(svelte@4.2.19)(vite@5.4.8(@types/node@18.19.31)(sass@1.79.4))': dependencies: - '@sveltejs/vite-plugin-svelte': 3.1.2(svelte@4.2.19)(vite@5.4.3(@types/node@18.19.31)(sass@1.78.0)) + '@sveltejs/vite-plugin-svelte': 3.1.2(svelte@4.2.19)(vite@5.4.8(@types/node@18.19.31)(sass@1.79.4)) debug: 4.3.7 svelte: 4.2.19 - vite: 5.4.3(@types/node@18.19.31)(sass@1.78.0) + vite: 5.4.8(@types/node@18.19.31)(sass@1.79.4) transitivePeerDependencies: - supports-color - '@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.19)(vite@5.4.3(@types/node@18.19.31)(sass@1.78.0))': + '@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.19)(vite@5.4.8(@types/node@18.19.31)(sass@1.79.4))': dependencies: - '@sveltejs/vite-plugin-svelte-inspector': 2.1.0(@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.19)(vite@5.4.3(@types/node@18.19.31)(sass@1.78.0)))(svelte@4.2.19)(vite@5.4.3(@types/node@18.19.31)(sass@1.78.0)) + '@sveltejs/vite-plugin-svelte-inspector': 2.1.0(@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.19)(vite@5.4.8(@types/node@18.19.31)(sass@1.79.4)))(svelte@4.2.19)(vite@5.4.8(@types/node@18.19.31)(sass@1.79.4)) debug: 4.3.7 deepmerge: 4.3.1 kleur: 4.1.5 magic-string: 0.30.11 svelte: 4.2.19 svelte-hmr: 0.16.0(svelte@4.2.19) - vite: 5.4.3(@types/node@18.19.31)(sass@1.78.0) - vitefu: 0.2.5(vite@5.4.3(@types/node@18.19.31)(sass@1.78.0)) + vite: 5.4.8(@types/node@18.19.31)(sass@1.79.4) + vitefu: 0.2.5(vite@5.4.8(@types/node@18.19.31)(sass@1.79.4)) transitivePeerDependencies: - supports-color - '@tailwindcss/forms@0.5.9(tailwindcss@3.4.10)': + '@tailwindcss/forms@0.5.9(tailwindcss@3.4.13)': dependencies: mini-svg-data-uri: 1.4.4 - tailwindcss: 3.4.10 + tailwindcss: 3.4.13 '@trysound/sax@0.2.0': {} '@types/acorn@4.0.6': dependencies: - '@types/estree': 1.0.5 + '@types/estree': 1.0.6 '@types/alpinejs@3.13.10': {} @@ -12534,23 +12444,23 @@ snapshots: '@types/babel__core@7.20.5': dependencies: '@babel/parser': 7.25.4 - '@babel/types': 7.25.4 + '@babel/types': 7.25.6 '@types/babel__generator': 7.6.8 '@types/babel__template': 7.4.4 '@types/babel__traverse': 7.20.6 '@types/babel__generator@7.6.8': dependencies: - '@babel/types': 7.25.4 + '@babel/types': 7.25.6 '@types/babel__template@7.4.4': dependencies: '@babel/parser': 7.25.4 - '@babel/types': 7.25.4 + '@babel/types': 7.25.6 '@types/babel__traverse@7.20.6': dependencies: - '@babel/types': 7.25.4 + '@babel/types': 7.25.6 '@types/body-parser@1.19.5': dependencies: @@ -12586,14 +12496,14 @@ snapshots: '@types/dlv@1.1.4': {} - '@types/dom-view-transitions@1.0.5': {} - '@types/estree-jsx@1.0.5': dependencies: - '@types/estree': 1.0.5 + '@types/estree': 1.0.6 '@types/estree@1.0.5': {} + '@types/estree@1.0.6': {} + '@types/express-serve-static-core@4.19.0': dependencies: '@types/node': 18.19.31 @@ -12626,6 +12536,8 @@ snapshots: '@types/js-yaml@4.0.9': {} + '@types/json-schema@7.0.15': {} + '@types/katex@0.16.7': {} '@types/linkify-it@5.0.0': {} @@ -12686,9 +12598,9 @@ snapshots: '@types/react-dom@18.3.0': dependencies: - '@types/react': 18.3.5 + '@types/react': 18.3.10 - '@types/react@18.3.5': + '@types/react@18.3.10': dependencies: '@types/prop-types': 15.7.12 csstype: 3.1.3 @@ -12740,85 +12652,85 @@ snapshots: '@types/yargs-parser@21.0.3': {} - '@typescript-eslint/eslint-plugin@8.4.0(@typescript-eslint/parser@8.4.0(eslint@9.10.0(jiti@1.21.0))(typescript@5.5.4))(eslint@9.10.0(jiti@1.21.0))(typescript@5.5.4)': + '@typescript-eslint/eslint-plugin@8.8.0(@typescript-eslint/parser@8.8.0(eslint@9.11.1(jiti@1.21.0))(typescript@5.6.2))(eslint@9.11.1(jiti@1.21.0))(typescript@5.6.2)': dependencies: '@eslint-community/regexpp': 4.11.0 - '@typescript-eslint/parser': 8.4.0(eslint@9.10.0(jiti@1.21.0))(typescript@5.5.4) - '@typescript-eslint/scope-manager': 8.4.0 - '@typescript-eslint/type-utils': 8.4.0(eslint@9.10.0(jiti@1.21.0))(typescript@5.5.4) - '@typescript-eslint/utils': 8.4.0(eslint@9.10.0(jiti@1.21.0))(typescript@5.5.4) - '@typescript-eslint/visitor-keys': 8.4.0 - eslint: 9.10.0(jiti@1.21.0) + '@typescript-eslint/parser': 8.8.0(eslint@9.11.1(jiti@1.21.0))(typescript@5.6.2) + '@typescript-eslint/scope-manager': 8.8.0 + '@typescript-eslint/type-utils': 8.8.0(eslint@9.11.1(jiti@1.21.0))(typescript@5.6.2) + '@typescript-eslint/utils': 8.8.0(eslint@9.11.1(jiti@1.21.0))(typescript@5.6.2) + '@typescript-eslint/visitor-keys': 8.8.0 + eslint: 9.11.1(jiti@1.21.0) graphemer: 1.4.0 ignore: 5.3.1 natural-compare: 1.4.0 - ts-api-utils: 1.3.0(typescript@5.5.4) + ts-api-utils: 1.3.0(typescript@5.6.2) optionalDependencies: - typescript: 5.5.4 + typescript: 5.6.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.4.0(eslint@9.10.0(jiti@1.21.0))(typescript@5.5.4)': + '@typescript-eslint/parser@8.8.0(eslint@9.11.1(jiti@1.21.0))(typescript@5.6.2)': dependencies: - '@typescript-eslint/scope-manager': 8.4.0 - '@typescript-eslint/types': 8.4.0 - '@typescript-eslint/typescript-estree': 8.4.0(typescript@5.5.4) - '@typescript-eslint/visitor-keys': 8.4.0 + '@typescript-eslint/scope-manager': 8.8.0 + '@typescript-eslint/types': 8.8.0 + '@typescript-eslint/typescript-estree': 8.8.0(typescript@5.6.2) + '@typescript-eslint/visitor-keys': 8.8.0 debug: 4.3.7 - eslint: 9.10.0(jiti@1.21.0) + eslint: 9.11.1(jiti@1.21.0) optionalDependencies: - typescript: 5.5.4 + typescript: 5.6.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@8.4.0': + '@typescript-eslint/scope-manager@8.8.0': dependencies: - '@typescript-eslint/types': 8.4.0 - '@typescript-eslint/visitor-keys': 8.4.0 + '@typescript-eslint/types': 8.8.0 + '@typescript-eslint/visitor-keys': 8.8.0 - '@typescript-eslint/type-utils@8.4.0(eslint@9.10.0(jiti@1.21.0))(typescript@5.5.4)': + '@typescript-eslint/type-utils@8.8.0(eslint@9.11.1(jiti@1.21.0))(typescript@5.6.2)': dependencies: - '@typescript-eslint/typescript-estree': 8.4.0(typescript@5.5.4) - '@typescript-eslint/utils': 8.4.0(eslint@9.10.0(jiti@1.21.0))(typescript@5.5.4) + '@typescript-eslint/typescript-estree': 8.8.0(typescript@5.6.2) + '@typescript-eslint/utils': 8.8.0(eslint@9.11.1(jiti@1.21.0))(typescript@5.6.2) debug: 4.3.7 - ts-api-utils: 1.3.0(typescript@5.5.4) + ts-api-utils: 1.3.0(typescript@5.6.2) optionalDependencies: - typescript: 5.5.4 + typescript: 5.6.2 transitivePeerDependencies: - eslint - supports-color - '@typescript-eslint/types@8.4.0': {} + '@typescript-eslint/types@8.8.0': {} - '@typescript-eslint/typescript-estree@8.4.0(typescript@5.5.4)': + '@typescript-eslint/typescript-estree@8.8.0(typescript@5.6.2)': dependencies: - '@typescript-eslint/types': 8.4.0 - '@typescript-eslint/visitor-keys': 8.4.0 + '@typescript-eslint/types': 8.8.0 + '@typescript-eslint/visitor-keys': 8.8.0 debug: 4.3.7 fast-glob: 3.3.2 is-glob: 4.0.3 minimatch: 9.0.4 semver: 7.6.3 - ts-api-utils: 1.3.0(typescript@5.5.4) + ts-api-utils: 1.3.0(typescript@5.6.2) optionalDependencies: - typescript: 5.5.4 + typescript: 5.6.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.4.0(eslint@9.10.0(jiti@1.21.0))(typescript@5.5.4)': + '@typescript-eslint/utils@8.8.0(eslint@9.11.1(jiti@1.21.0))(typescript@5.6.2)': dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@9.10.0(jiti@1.21.0)) - '@typescript-eslint/scope-manager': 8.4.0 - '@typescript-eslint/types': 8.4.0 - '@typescript-eslint/typescript-estree': 8.4.0(typescript@5.5.4) - eslint: 9.10.0(jiti@1.21.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@9.11.1(jiti@1.21.0)) + '@typescript-eslint/scope-manager': 8.8.0 + '@typescript-eslint/types': 8.8.0 + '@typescript-eslint/typescript-estree': 8.8.0(typescript@5.6.2) + eslint: 9.11.1(jiti@1.21.0) transitivePeerDependencies: - supports-color - typescript - '@typescript-eslint/visitor-keys@8.4.0': + '@typescript-eslint/visitor-keys@8.8.0': dependencies: - '@typescript-eslint/types': 8.4.0 + '@typescript-eslint/types': 8.8.0 eslint-visitor-keys: 3.4.3 '@typescript/twoslash@3.1.0': @@ -12843,38 +12755,31 @@ snapshots: '@ungap/structured-clone@1.2.0': {} - '@vitejs/plugin-react@4.3.1(vite@5.4.3(@types/node@18.19.31)(sass@1.78.0))': + '@vitejs/plugin-react@4.3.2(vite@5.4.8(@types/node@18.19.31)(sass@1.79.4))': dependencies: '@babel/core': 7.25.2 '@babel/plugin-transform-react-jsx-self': 7.24.7(@babel/core@7.25.2) - '@babel/plugin-transform-react-jsx-source': 7.24.1(@babel/core@7.25.2) + '@babel/plugin-transform-react-jsx-source': 7.24.7(@babel/core@7.25.2) '@types/babel__core': 7.20.5 react-refresh: 0.14.2 - vite: 5.4.3(@types/node@18.19.31)(sass@1.78.0) + vite: 5.4.8(@types/node@18.19.31)(sass@1.79.4) transitivePeerDependencies: - supports-color - '@vitejs/plugin-vue-jsx@4.0.1(vite@5.4.3(@types/node@18.19.31)(sass@1.78.0))(vue@3.5.3(typescript@5.5.4))': + '@vitejs/plugin-vue-jsx@4.0.1(vite@5.4.8(@types/node@18.19.31)(sass@1.79.4))(vue@3.5.10(typescript@5.6.2))': dependencies: '@babel/core': 7.25.2 '@babel/plugin-transform-typescript': 7.24.7(@babel/core@7.25.2) '@vue/babel-plugin-jsx': 1.2.2(@babel/core@7.25.2) - vite: 5.4.3(@types/node@18.19.31)(sass@1.78.0) - vue: 3.5.3(typescript@5.5.4) + vite: 5.4.8(@types/node@18.19.31)(sass@1.79.4) + vue: 3.5.10(typescript@5.6.2) transitivePeerDependencies: - supports-color - '@vitejs/plugin-vue@5.1.3(vite@5.4.3(@types/node@18.19.31)(sass@1.78.0))(vue@3.5.3(typescript@5.5.4))': + '@vitejs/plugin-vue@5.1.4(vite@5.4.8(@types/node@18.19.31)(sass@1.79.4))(vue@3.5.10(typescript@5.6.2))': dependencies: - vite: 5.4.3(@types/node@18.19.31)(sass@1.78.0) - vue: 3.5.3(typescript@5.5.4) - - '@vitest/expect@2.0.5': - dependencies: - '@vitest/spy': 2.0.5 - '@vitest/utils': 2.0.5 - chai: 5.1.1 - tinyrainbow: 1.2.0 + vite: 5.4.8(@types/node@18.19.31)(sass@1.79.4) + vue: 3.5.10(typescript@5.6.2) '@vitest/expect@2.1.1': dependencies: @@ -12883,71 +12788,45 @@ snapshots: chai: 5.1.1 tinyrainbow: 1.2.0 - '@vitest/mocker@2.1.1(vite@5.4.3(@types/node@18.19.31)(sass@1.78.0))': + '@vitest/mocker@2.1.1(vite@5.4.8(@types/node@18.19.31)(sass@1.79.4))': dependencies: '@vitest/spy': 2.1.1 estree-walker: 3.0.3 magic-string: 0.30.11 optionalDependencies: - vite: 5.4.3(@types/node@18.19.31)(sass@1.78.0) - - '@vitest/pretty-format@2.0.5': - dependencies: - tinyrainbow: 1.2.0 + vite: 5.4.8(@types/node@18.19.31)(sass@1.79.4) '@vitest/pretty-format@2.1.1': dependencies: tinyrainbow: 1.2.0 - '@vitest/runner@2.0.5': - dependencies: - '@vitest/utils': 2.0.5 - pathe: 1.1.2 - '@vitest/runner@2.1.1': dependencies: '@vitest/utils': 2.1.1 pathe: 1.1.2 - '@vitest/snapshot@2.0.5': - dependencies: - '@vitest/pretty-format': 2.0.5 - magic-string: 0.30.11 - pathe: 1.1.2 - '@vitest/snapshot@2.1.1': dependencies: '@vitest/pretty-format': 2.1.1 magic-string: 0.30.11 pathe: 1.1.2 - '@vitest/spy@2.0.5': - dependencies: - tinyspy: 3.0.0 - '@vitest/spy@2.1.1': dependencies: tinyspy: 3.0.0 - '@vitest/utils@2.0.5': - dependencies: - '@vitest/pretty-format': 2.0.5 - estree-walker: 3.0.3 - loupe: 3.1.1 - tinyrainbow: 1.2.0 - '@vitest/utils@2.1.1': dependencies: '@vitest/pretty-format': 2.1.1 loupe: 3.1.1 tinyrainbow: 1.2.0 - '@volar/kit@2.4.0(typescript@5.5.4)': + '@volar/kit@2.4.0(typescript@5.6.2)': dependencies: '@volar/language-service': 2.4.0 '@volar/typescript': 2.4.0 typesafe-path: 0.2.2 - typescript: 5.5.4 + typescript: 5.6.2 vscode-languageserver-textdocument: 1.0.11 vscode-uri: 3.0.8 @@ -13001,7 +12880,7 @@ snapshots: '@babel/plugin-syntax-jsx': 7.24.7(@babel/core@7.25.2) '@babel/template': 7.25.0 '@babel/traverse': 7.25.4 - '@babel/types': 7.25.4 + '@babel/types': 7.25.6 '@vue/babel-helper-vue-transform-on': 1.2.2 '@vue/babel-plugin-resolve-type': 1.2.2(@babel/core@7.25.2) camelcase: 6.3.0 @@ -13019,7 +12898,15 @@ snapshots: '@babel/helper-module-imports': 7.22.15 '@babel/helper-plugin-utils': 7.24.8 '@babel/parser': 7.25.4 - '@vue/compiler-sfc': 3.5.3 + '@vue/compiler-sfc': 3.5.10 + + '@vue/compiler-core@3.5.10': + dependencies: + '@babel/parser': 7.25.4 + '@vue/shared': 3.5.10 + entities: 4.5.0 + estree-walker: 2.0.2 + source-map-js: 1.2.0 '@vue/compiler-core@3.5.3': dependencies: @@ -13029,43 +12916,48 @@ snapshots: estree-walker: 2.0.2 source-map-js: 1.2.0 + '@vue/compiler-dom@3.5.10': + dependencies: + '@vue/compiler-core': 3.5.10 + '@vue/shared': 3.5.10 + '@vue/compiler-dom@3.5.3': dependencies: '@vue/compiler-core': 3.5.3 '@vue/shared': 3.5.3 - '@vue/compiler-sfc@3.5.3': + '@vue/compiler-sfc@3.5.10': dependencies: '@babel/parser': 7.25.4 - '@vue/compiler-core': 3.5.3 - '@vue/compiler-dom': 3.5.3 - '@vue/compiler-ssr': 3.5.3 - '@vue/shared': 3.5.3 + '@vue/compiler-core': 3.5.10 + '@vue/compiler-dom': 3.5.10 + '@vue/compiler-ssr': 3.5.10 + '@vue/shared': 3.5.10 estree-walker: 2.0.2 magic-string: 0.30.11 - postcss: 8.4.45 + postcss: 8.4.47 source-map-js: 1.2.0 - '@vue/compiler-ssr@3.5.3': + '@vue/compiler-ssr@3.5.10': dependencies: - '@vue/compiler-dom': 3.5.3 - '@vue/shared': 3.5.3 + '@vue/compiler-dom': 3.5.10 + '@vue/shared': 3.5.10 - '@vue/devtools-core@7.4.4(vite@5.4.3(@types/node@18.19.31)(sass@1.78.0))(vue@3.5.3(typescript@5.5.4))': + '@vue/devtools-core@7.4.6(vite@5.4.8(@types/node@18.19.31)(sass@1.79.4))(vue@3.5.10(typescript@5.6.2))': dependencies: - '@vue/devtools-kit': 7.4.4 - '@vue/devtools-shared': 7.4.4 + '@vue/devtools-kit': 7.4.6 + '@vue/devtools-shared': 7.4.6 mitt: 3.0.1 nanoid: 3.3.7 pathe: 1.1.2 - vite-hot-client: 0.2.3(vite@5.4.3(@types/node@18.19.31)(sass@1.78.0)) - vue: 3.5.3(typescript@5.5.4) + vite-hot-client: 0.2.3(vite@5.4.8(@types/node@18.19.31)(sass@1.79.4)) + vue: 3.5.10(typescript@5.6.2) transitivePeerDependencies: - vite - '@vue/devtools-kit@7.4.4': + '@vue/devtools-kit@7.4.6': dependencies: - '@vue/devtools-shared': 7.4.4 + '@vue/devtools-shared': 7.4.6 birpc: 0.2.17 hookable: 5.5.3 mitt: 3.0.1 @@ -13073,7 +12965,7 @@ snapshots: speakingurl: 14.0.1 superjson: 2.2.1 - '@vue/devtools-shared@7.4.4': + '@vue/devtools-shared@7.4.6': dependencies: rfdc: 1.4.1 @@ -13081,30 +12973,32 @@ snapshots: dependencies: '@vue/shared': 3.1.5 - '@vue/reactivity@3.5.3': + '@vue/reactivity@3.5.10': dependencies: - '@vue/shared': 3.5.3 + '@vue/shared': 3.5.10 - '@vue/runtime-core@3.5.3': + '@vue/runtime-core@3.5.10': dependencies: - '@vue/reactivity': 3.5.3 - '@vue/shared': 3.5.3 + '@vue/reactivity': 3.5.10 + '@vue/shared': 3.5.10 - '@vue/runtime-dom@3.5.3': + '@vue/runtime-dom@3.5.10': dependencies: - '@vue/reactivity': 3.5.3 - '@vue/runtime-core': 3.5.3 - '@vue/shared': 3.5.3 + '@vue/reactivity': 3.5.10 + '@vue/runtime-core': 3.5.10 + '@vue/shared': 3.5.10 csstype: 3.1.3 - '@vue/server-renderer@3.5.3(vue@3.5.3(typescript@5.5.4))': + '@vue/server-renderer@3.5.10(vue@3.5.10(typescript@5.6.2))': dependencies: - '@vue/compiler-ssr': 3.5.3 - '@vue/shared': 3.5.3 - vue: 3.5.3(typescript@5.5.4) + '@vue/compiler-ssr': 3.5.10 + '@vue/shared': 3.5.10 + vue: 3.5.10(typescript@5.6.2) '@vue/shared@3.1.5': {} + '@vue/shared@3.5.10': {} + '@vue/shared@3.5.3': {} '@webcomponents/template-shadowroot@0.2.1': {} @@ -13187,6 +13081,8 @@ snapshots: dependencies: dequal: 2.0.3 + aria-query@5.3.2: {} + array-iterate@2.0.1: {} array-union@2.1.0: {} @@ -13248,14 +13144,14 @@ snapshots: subarg: 1.0.0 timestring: 6.0.0 - autoprefixer@10.4.20(postcss@8.4.45): + autoprefixer@10.4.20(postcss@8.4.47): dependencies: browserslist: 4.23.3 caniuse-lite: 1.0.30001649 fraction.js: 4.3.7 normalize-range: 0.1.2 picocolors: 1.1.0 - postcss: 8.4.45 + postcss: 8.4.47 postcss-value-parser: 4.2.0 axobject-query@4.1.0: {} @@ -13265,7 +13161,7 @@ snapshots: '@babel/core': 7.25.2 '@babel/helper-module-imports': 7.18.6 '@babel/plugin-syntax-jsx': 7.24.7(@babel/core@7.25.2) - '@babel/types': 7.25.4 + '@babel/types': 7.25.6 html-entities: 2.3.3 validate-html-nesting: 1.2.2 @@ -13302,16 +13198,16 @@ snapshots: boolbase@1.0.0: {} - boxen@7.1.1: + boxen@8.0.1: dependencies: ansi-align: 3.0.1 - camelcase: 7.0.1 + camelcase: 8.0.0 chalk: 5.3.0 cli-boxes: 3.0.0 - string-width: 5.1.2 - type-fest: 2.19.0 - widest-line: 4.0.1 - wrap-ansi: 8.1.0 + string-width: 7.2.0 + type-fest: 4.26.1 + widest-line: 5.0.0 + wrap-ansi: 9.0.0 brace-expansion@1.1.11: dependencies: @@ -13355,7 +13251,7 @@ snapshots: camelcase@6.3.0: {} - camelcase@7.0.1: {} + camelcase@8.0.0: {} caniuse-lite@1.0.30001649: {} @@ -13433,6 +13329,10 @@ snapshots: optionalDependencies: fsevents: 2.3.3 + chokidar@4.0.1: + dependencies: + readdirp: 4.0.1 + chownr@2.0.0: {} ci-info@3.9.0: {} @@ -13453,12 +13353,6 @@ snapshots: dependencies: restore-cursor: 4.0.0 - cli-cursor@5.0.0: - dependencies: - restore-cursor: 5.1.0 - - cli-spinners@2.9.2: {} - cli-table3@0.6.4: dependencies: string-width: 4.2.3 @@ -13476,7 +13370,7 @@ snapshots: code-red@1.0.4: dependencies: '@jridgewell/sourcemap-codec': 1.5.0 - '@types/estree': 1.0.5 + '@types/estree': 1.0.6 acorn: 8.12.1 estree-walker: 3.0.3 periscopic: 3.1.0 @@ -13557,21 +13451,21 @@ snapshots: shebang-command: 2.0.0 which: 2.0.2 - css-blank-pseudo@7.0.0(postcss@8.4.45): + css-blank-pseudo@7.0.0(postcss@8.4.47): dependencies: - postcss: 8.4.45 + postcss: 8.4.47 postcss-selector-parser: 6.1.0 - css-has-pseudo@7.0.0(postcss@8.4.45): + css-has-pseudo@7.0.0(postcss@8.4.47): dependencies: '@csstools/selector-specificity': 4.0.0(postcss-selector-parser@6.1.0) - postcss: 8.4.45 + postcss: 8.4.47 postcss-selector-parser: 6.1.0 postcss-value-parser: 4.2.0 - css-prefers-color-scheme@10.0.0(postcss@8.4.45): + css-prefers-color-scheme@10.0.0(postcss@8.4.47): dependencies: - postcss: 8.4.45 + postcss: 8.4.47 css-select@5.1.0: dependencies: @@ -13597,7 +13491,7 @@ snapshots: css-what@6.1.0: {} - cssdb@8.1.0: {} + cssdb@8.1.1: {} cssesc@3.0.0: {} @@ -13677,7 +13571,7 @@ snapshots: dependencies: base-64: 1.0.0 - devalue@5.0.0: {} + devalue@5.1.1: {} devlop@1.1.0: dependencies: @@ -13715,13 +13609,13 @@ snapshots: dotenv@8.6.0: {} - drizzle-orm@0.31.4(@libsql/client@0.10.0)(@types/react@18.3.5)(react@18.3.1): + drizzle-orm@0.31.4(@libsql/client@0.14.0)(@types/react@18.3.10)(react@18.3.1): optionalDependencies: - '@libsql/client': 0.10.0 - '@types/react': 18.3.5 + '@libsql/client': 0.14.0 + '@types/react': 18.3.10 react: 18.3.1 - dset@3.1.3: {} + dset@3.1.4: {} eastasianwidth@0.2.0: {} @@ -13804,14 +13698,12 @@ snapshots: escape-string-regexp@5.0.0: {} - eslint-plugin-no-only-tests@3.3.0: {} - - eslint-plugin-regexp@2.6.0(eslint@9.10.0(jiti@1.21.0)): + eslint-plugin-regexp@2.6.0(eslint@9.11.1(jiti@1.21.0)): dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@9.10.0(jiti@1.21.0)) + '@eslint-community/eslint-utils': 4.4.0(eslint@9.11.1(jiti@1.21.0)) '@eslint-community/regexpp': 4.11.0 comment-parser: 1.4.1 - eslint: 9.10.0(jiti@1.21.0) + eslint: 9.11.1(jiti@1.21.0) jsdoc-type-pratt-parser: 4.0.0 refa: 0.12.1 regexp-ast-analysis: 0.7.1 @@ -13826,17 +13718,20 @@ snapshots: eslint-visitor-keys@4.0.0: {} - eslint@9.10.0(jiti@1.21.0): + eslint@9.11.1(jiti@1.21.0): dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@9.10.0(jiti@1.21.0)) + '@eslint-community/eslint-utils': 4.4.0(eslint@9.11.1(jiti@1.21.0)) '@eslint-community/regexpp': 4.11.0 '@eslint/config-array': 0.18.0 + '@eslint/core': 0.6.0 '@eslint/eslintrc': 3.1.0 - '@eslint/js': 9.10.0 - '@eslint/plugin-kit': 0.1.0 + '@eslint/js': 9.11.1 + '@eslint/plugin-kit': 0.2.0 '@humanwhocodes/module-importer': 1.0.1 '@humanwhocodes/retry': 0.3.0 '@nodelib/fs.walk': 1.2.8 + '@types/estree': 1.0.6 + '@types/json-schema': 7.0.15 ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.3 @@ -13889,7 +13784,7 @@ snapshots: estree-util-attach-comments@3.0.0: dependencies: - '@types/estree': 1.0.5 + '@types/estree': 1.0.6 estree-util-build-jsx@3.0.1: dependencies: @@ -13937,10 +13832,6 @@ snapshots: expect-type@0.20.0: {} - extend-shallow@2.0.1: - dependencies: - is-extendable: 0.1.1 - extend@3.0.2: {} extendable-error@0.1.7: {} @@ -14136,13 +14027,6 @@ snapshots: graphemer@1.4.0: {} - gray-matter@4.0.3: - dependencies: - js-yaml: 3.14.1 - kind-of: 6.0.3 - section-matter: 1.0.0 - strip-bom-string: 1.0.0 - has-async-hooks@1.0.0: {} has-flag@3.0.0: {} @@ -14159,7 +14043,7 @@ snapshots: hastscript: 8.0.0 web-namespaces: 2.0.1 - hast-util-from-html@2.0.2: + hast-util-from-html@2.0.3: dependencies: '@types/hast': 3.0.4 devlop: 1.1.0 @@ -14232,7 +14116,7 @@ snapshots: hast-util-to-estree@3.1.0: dependencies: - '@types/estree': 1.0.5 + '@types/estree': 1.0.6 '@types/estree-jsx': 1.0.5 '@types/hast': 3.0.4 comma-separated-tokens: 2.0.3 @@ -14240,7 +14124,7 @@ snapshots: estree-util-attach-comments: 3.0.0 estree-util-is-identifier-name: 3.0.0 hast-util-whitespace: 3.0.0 - mdast-util-mdx-expression: 2.0.0 + mdast-util-mdx-expression: 2.0.1 mdast-util-mdx-jsx: 3.1.3 mdast-util-mdxjs-esm: 2.0.1 property-information: 6.5.0 @@ -14251,7 +14135,7 @@ snapshots: transitivePeerDependencies: - supports-color - hast-util-to-html@9.0.2: + hast-util-to-html@9.0.3: dependencies: '@types/hast': 3.0.4 '@types/unist': 3.0.3 @@ -14267,14 +14151,14 @@ snapshots: hast-util-to-jsx-runtime@2.3.0: dependencies: - '@types/estree': 1.0.5 + '@types/estree': 1.0.6 '@types/hast': 3.0.4 '@types/unist': 3.0.3 comma-separated-tokens: 2.0.3 devlop: 1.1.0 estree-util-is-identifier-name: 3.0.0 hast-util-whitespace: 3.0.0 - mdast-util-mdx-expression: 2.0.0 + mdast-util-mdx-expression: 2.0.1 mdast-util-mdx-jsx: 3.1.3 mdast-util-mdxjs-esm: 2.0.1 property-information: 6.5.0 @@ -14454,8 +14338,6 @@ snapshots: is-docker@3.0.0: {} - is-extendable@0.1.1: {} - is-extglob@2.1.1: {} is-fullwidth-code-point@3.0.0: {} @@ -14472,8 +14354,6 @@ snapshots: dependencies: is-docker: 3.0.0 - is-interactive@2.0.0: {} - is-number@7.0.0: {} is-path-inside@3.0.3: {} @@ -14484,7 +14364,7 @@ snapshots: is-reference@3.0.2: dependencies: - '@types/estree': 1.0.5 + '@types/estree': 1.0.6 is-stream@3.0.0: {} @@ -14492,10 +14372,6 @@ snapshots: dependencies: better-path-resolve: 1.0.0 - is-unicode-supported@1.3.0: {} - - is-unicode-supported@2.0.0: {} - is-what@4.1.16: {} is-windows@1.0.2: {} @@ -14593,8 +14469,6 @@ snapshots: dependencies: json-buffer: 3.0.1 - kind-of@6.0.3: {} - kleur@3.0.3: {} kleur@4.1.5: {} @@ -14606,32 +14480,18 @@ snapshots: prelude-ls: 1.2.1 type-check: 0.4.0 - libsql@0.3.19: + libsql@0.4.5: dependencies: '@neon-rs/load': 0.0.4 detect-libc: 2.0.2 optionalDependencies: - '@libsql/darwin-arm64': 0.3.19 - '@libsql/darwin-x64': 0.3.19 - '@libsql/linux-arm64-gnu': 0.3.19 - '@libsql/linux-arm64-musl': 0.3.19 - '@libsql/linux-x64-gnu': 0.3.19 - '@libsql/linux-x64-musl': 0.3.19 - '@libsql/win32-x64-msvc': 0.3.19 - - libsql@0.4.1: - dependencies: - '@neon-rs/load': 0.0.4 - detect-libc: 2.0.2 - libsql: 0.3.19 - optionalDependencies: - '@libsql/darwin-arm64': 0.4.1 - '@libsql/darwin-x64': 0.4.1 - '@libsql/linux-arm64-gnu': 0.4.1 - '@libsql/linux-arm64-musl': 0.4.1 - '@libsql/linux-x64-gnu': 0.4.1 - '@libsql/linux-x64-musl': 0.4.1 - '@libsql/win32-x64-msvc': 0.4.1 + '@libsql/darwin-arm64': 0.4.5 + '@libsql/darwin-x64': 0.4.5 + '@libsql/linux-arm64-gnu': 0.4.5 + '@libsql/linux-arm64-musl': 0.4.5 + '@libsql/linux-x64-gnu': 0.4.5 + '@libsql/linux-x64-musl': 0.4.5 + '@libsql/win32-x64-msvc': 0.4.5 lilconfig@2.1.0: {} @@ -14647,7 +14507,7 @@ snapshots: htmlparser2: 8.0.2 uhyphen: 0.2.0 - linkedom@0.18.4: + linkedom@0.18.5: dependencies: css-select: 5.1.0 cssom: 0.5.0 @@ -14702,11 +14562,6 @@ snapshots: lodash@4.17.21: {} - log-symbols@6.0.0: - dependencies: - chalk: 5.3.0 - is-unicode-supported: 1.3.0 - log-update@5.0.1: dependencies: ansi-escapes: 5.0.0 @@ -14755,7 +14610,7 @@ snapshots: magicast@0.3.5: dependencies: '@babel/parser': 7.25.4 - '@babel/types': 7.25.4 + '@babel/types': 7.25.6 source-map-js: 1.2.0 manage-path@2.0.0: {} @@ -14892,6 +14747,17 @@ snapshots: transitivePeerDependencies: - supports-color + mdast-util-mdx-expression@2.0.1: + dependencies: + '@types/estree-jsx': 1.0.5 + '@types/hast': 3.0.4 + '@types/mdast': 4.0.4 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.0 + mdast-util-to-markdown: 2.1.0 + transitivePeerDependencies: + - supports-color + mdast-util-mdx-jsx@3.1.3: dependencies: '@types/estree-jsx': 1.0.5 @@ -14978,7 +14844,7 @@ snapshots: media-typer@0.3.0: {} - memfs@4.11.1: + memfs@4.12.0: dependencies: '@jsonjoy.com/json-pack': 1.0.4(tslib@2.6.2) '@jsonjoy.com/util': 1.3.0(tslib@2.6.2) @@ -15088,7 +14954,7 @@ snapshots: micromark-extension-mdx-expression@3.0.0: dependencies: - '@types/estree': 1.0.5 + '@types/estree': 1.0.6 devlop: 1.1.0 micromark-factory-mdx-expression: 2.0.1 micromark-factory-space: 2.0.0 @@ -15100,7 +14966,7 @@ snapshots: micromark-extension-mdx-jsx@3.0.0: dependencies: '@types/acorn': 4.0.6 - '@types/estree': 1.0.5 + '@types/estree': 1.0.6 devlop: 1.1.0 estree-util-is-identifier-name: 3.0.0 micromark-factory-mdx-expression: 2.0.1 @@ -15116,7 +14982,7 @@ snapshots: micromark-extension-mdxjs-esm@3.0.0: dependencies: - '@types/estree': 1.0.5 + '@types/estree': 1.0.6 devlop: 1.1.0 micromark-core-commonmark: 2.0.0 micromark-util-character: 2.1.0 @@ -15152,7 +15018,7 @@ snapshots: micromark-factory-mdx-expression@2.0.1: dependencies: - '@types/estree': 1.0.5 + '@types/estree': 1.0.6 devlop: 1.1.0 micromark-util-character: 2.1.0 micromark-util-events-to-acorn: 2.0.2 @@ -15216,7 +15082,7 @@ snapshots: micromark-util-events-to-acorn@2.0.2: dependencies: '@types/acorn': 4.0.6 - '@types/estree': 1.0.5 + '@types/estree': 1.0.6 '@types/unist': 3.0.3 devlop: 1.1.0 estree-util-visit: 2.0.0 @@ -15290,8 +15156,6 @@ snapshots: mimic-fn@4.0.0: {} - mimic-function@5.0.1: {} - mini-svg-data-uri@1.4.4: {} minimatch@3.1.2: @@ -15383,7 +15247,7 @@ snapshots: css-select: 5.1.0 he: 1.2.0 - node-mocks-http@1.15.1: + node-mocks-http@1.16.0: dependencies: '@types/express': 4.17.21 '@types/node': 18.19.31 @@ -15442,9 +15306,9 @@ snapshots: dependencies: mimic-fn: 4.0.0 - onetime@7.0.0: + oniguruma-to-js@0.4.3: dependencies: - mimic-function: 5.0.1 + regex: 4.3.2 only-allow@1.2.1: dependencies: @@ -15468,18 +15332,6 @@ snapshots: prelude-ls: 1.2.1 type-check: 0.4.0 - ora@8.1.0: - dependencies: - chalk: 5.3.0 - cli-cursor: 5.0.0 - cli-spinners: 2.9.2 - is-interactive: 2.0.0 - is-unicode-supported: 2.0.0 - log-symbols: 6.0.0 - stdin-discarder: 0.2.2 - string-width: 7.2.0 - strip-ansi: 7.1.0 - os-tmpdir@1.0.2: {} outdent@0.5.0: {} @@ -15590,8 +15442,6 @@ snapshots: lru-cache: 10.2.0 minipass: 7.1.2 - path-to-regexp@6.2.2: {} - path-type@4.0.0: {} path-type@5.0.0: {} @@ -15604,7 +15454,7 @@ snapshots: periscopic@3.1.0: dependencies: - '@types/estree': 1.0.5 + '@types/estree': 1.0.6 estree-walker: 3.0.3 is-reference: 3.0.2 @@ -15622,248 +15472,248 @@ snapshots: dependencies: find-up: 4.1.0 - playwright-core@1.47.0: {} + playwright-core@1.47.2: {} - playwright@1.47.0: + playwright@1.47.2: dependencies: - playwright-core: 1.47.0 + playwright-core: 1.47.2 optionalDependencies: fsevents: 2.3.2 port-authority@2.0.1: {} - postcss-attribute-case-insensitive@7.0.0(postcss@8.4.45): + postcss-attribute-case-insensitive@7.0.0(postcss@8.4.47): dependencies: - postcss: 8.4.45 + postcss: 8.4.47 postcss-selector-parser: 6.1.0 - postcss-clamp@4.1.0(postcss@8.4.45): + postcss-clamp@4.1.0(postcss@8.4.47): dependencies: - postcss: 8.4.45 + postcss: 8.4.47 postcss-value-parser: 4.2.0 - postcss-color-functional-notation@7.0.2(postcss@8.4.45): + postcss-color-functional-notation@7.0.2(postcss@8.4.47): dependencies: '@csstools/css-color-parser': 3.0.2(@csstools/css-parser-algorithms@3.0.1(@csstools/css-tokenizer@3.0.1))(@csstools/css-tokenizer@3.0.1) '@csstools/css-parser-algorithms': 3.0.1(@csstools/css-tokenizer@3.0.1) '@csstools/css-tokenizer': 3.0.1 - '@csstools/postcss-progressive-custom-properties': 4.0.0(postcss@8.4.45) - '@csstools/utilities': 2.0.0(postcss@8.4.45) - postcss: 8.4.45 + '@csstools/postcss-progressive-custom-properties': 4.0.0(postcss@8.4.47) + '@csstools/utilities': 2.0.0(postcss@8.4.47) + postcss: 8.4.47 - postcss-color-hex-alpha@10.0.0(postcss@8.4.45): + postcss-color-hex-alpha@10.0.0(postcss@8.4.47): dependencies: - '@csstools/utilities': 2.0.0(postcss@8.4.45) - postcss: 8.4.45 + '@csstools/utilities': 2.0.0(postcss@8.4.47) + postcss: 8.4.47 postcss-value-parser: 4.2.0 - postcss-color-rebeccapurple@10.0.0(postcss@8.4.45): + postcss-color-rebeccapurple@10.0.0(postcss@8.4.47): dependencies: - '@csstools/utilities': 2.0.0(postcss@8.4.45) - postcss: 8.4.45 + '@csstools/utilities': 2.0.0(postcss@8.4.47) + postcss: 8.4.47 postcss-value-parser: 4.2.0 - postcss-custom-media@11.0.1(postcss@8.4.45): + postcss-custom-media@11.0.1(postcss@8.4.47): dependencies: '@csstools/cascade-layer-name-parser': 2.0.1(@csstools/css-parser-algorithms@3.0.1(@csstools/css-tokenizer@3.0.1))(@csstools/css-tokenizer@3.0.1) '@csstools/css-parser-algorithms': 3.0.1(@csstools/css-tokenizer@3.0.1) '@csstools/css-tokenizer': 3.0.1 '@csstools/media-query-list-parser': 3.0.1(@csstools/css-parser-algorithms@3.0.1(@csstools/css-tokenizer@3.0.1))(@csstools/css-tokenizer@3.0.1) - postcss: 8.4.45 + postcss: 8.4.47 - postcss-custom-properties@14.0.1(postcss@8.4.45): + postcss-custom-properties@14.0.1(postcss@8.4.47): dependencies: '@csstools/cascade-layer-name-parser': 2.0.1(@csstools/css-parser-algorithms@3.0.1(@csstools/css-tokenizer@3.0.1))(@csstools/css-tokenizer@3.0.1) '@csstools/css-parser-algorithms': 3.0.1(@csstools/css-tokenizer@3.0.1) '@csstools/css-tokenizer': 3.0.1 - '@csstools/utilities': 2.0.0(postcss@8.4.45) - postcss: 8.4.45 + '@csstools/utilities': 2.0.0(postcss@8.4.47) + postcss: 8.4.47 postcss-value-parser: 4.2.0 - postcss-custom-selectors@8.0.1(postcss@8.4.45): + postcss-custom-selectors@8.0.1(postcss@8.4.47): dependencies: '@csstools/cascade-layer-name-parser': 2.0.1(@csstools/css-parser-algorithms@3.0.1(@csstools/css-tokenizer@3.0.1))(@csstools/css-tokenizer@3.0.1) '@csstools/css-parser-algorithms': 3.0.1(@csstools/css-tokenizer@3.0.1) '@csstools/css-tokenizer': 3.0.1 - postcss: 8.4.45 + postcss: 8.4.47 postcss-selector-parser: 6.1.0 - postcss-dir-pseudo-class@9.0.0(postcss@8.4.45): + postcss-dir-pseudo-class@9.0.0(postcss@8.4.47): dependencies: - postcss: 8.4.45 + postcss: 8.4.47 postcss-selector-parser: 6.1.0 - postcss-double-position-gradients@6.0.0(postcss@8.4.45): + postcss-double-position-gradients@6.0.0(postcss@8.4.47): dependencies: - '@csstools/postcss-progressive-custom-properties': 4.0.0(postcss@8.4.45) - '@csstools/utilities': 2.0.0(postcss@8.4.45) - postcss: 8.4.45 + '@csstools/postcss-progressive-custom-properties': 4.0.0(postcss@8.4.47) + '@csstools/utilities': 2.0.0(postcss@8.4.47) + postcss: 8.4.47 postcss-value-parser: 4.2.0 - postcss-focus-visible@10.0.0(postcss@8.4.45): + postcss-focus-visible@10.0.0(postcss@8.4.47): dependencies: - postcss: 8.4.45 + postcss: 8.4.47 postcss-selector-parser: 6.1.0 - postcss-focus-within@9.0.0(postcss@8.4.45): + postcss-focus-within@9.0.0(postcss@8.4.47): dependencies: - postcss: 8.4.45 + postcss: 8.4.47 postcss-selector-parser: 6.1.0 - postcss-font-variant@5.0.0(postcss@8.4.45): + postcss-font-variant@5.0.0(postcss@8.4.47): dependencies: - postcss: 8.4.45 + postcss: 8.4.47 - postcss-gap-properties@6.0.0(postcss@8.4.45): + postcss-gap-properties@6.0.0(postcss@8.4.47): dependencies: - postcss: 8.4.45 + postcss: 8.4.47 - postcss-image-set-function@7.0.0(postcss@8.4.45): + postcss-image-set-function@7.0.0(postcss@8.4.47): dependencies: - '@csstools/utilities': 2.0.0(postcss@8.4.45) - postcss: 8.4.45 + '@csstools/utilities': 2.0.0(postcss@8.4.47) + postcss: 8.4.47 postcss-value-parser: 4.2.0 - postcss-import@15.1.0(postcss@8.4.45): + postcss-import@15.1.0(postcss@8.4.47): dependencies: - postcss: 8.4.45 + postcss: 8.4.47 postcss-value-parser: 4.2.0 read-cache: 1.0.0 resolve: 1.22.8 - postcss-js@4.0.1(postcss@8.4.45): + postcss-js@4.0.1(postcss@8.4.47): dependencies: camelcase-css: 2.0.1 - postcss: 8.4.45 + postcss: 8.4.47 - postcss-lab-function@7.0.2(postcss@8.4.45): + postcss-lab-function@7.0.2(postcss@8.4.47): dependencies: '@csstools/css-color-parser': 3.0.2(@csstools/css-parser-algorithms@3.0.1(@csstools/css-tokenizer@3.0.1))(@csstools/css-tokenizer@3.0.1) '@csstools/css-parser-algorithms': 3.0.1(@csstools/css-tokenizer@3.0.1) '@csstools/css-tokenizer': 3.0.1 - '@csstools/postcss-progressive-custom-properties': 4.0.0(postcss@8.4.45) - '@csstools/utilities': 2.0.0(postcss@8.4.45) - postcss: 8.4.45 + '@csstools/postcss-progressive-custom-properties': 4.0.0(postcss@8.4.47) + '@csstools/utilities': 2.0.0(postcss@8.4.47) + postcss: 8.4.47 - postcss-load-config@4.0.2(postcss@8.4.45): + postcss-load-config@4.0.2(postcss@8.4.47): dependencies: lilconfig: 3.1.1 yaml: 2.5.0 optionalDependencies: - postcss: 8.4.45 + postcss: 8.4.47 - postcss-logical@8.0.0(postcss@8.4.45): + postcss-logical@8.0.0(postcss@8.4.47): dependencies: - postcss: 8.4.45 + postcss: 8.4.47 postcss-value-parser: 4.2.0 - postcss-nested@6.0.1(postcss@8.4.45): + postcss-nested@6.0.1(postcss@8.4.47): dependencies: - postcss: 8.4.45 + postcss: 8.4.47 postcss-selector-parser: 6.1.0 - postcss-nesting@13.0.0(postcss@8.4.45): + postcss-nesting@13.0.0(postcss@8.4.47): dependencies: '@csstools/selector-resolve-nested': 2.0.0(postcss-selector-parser@6.1.0) '@csstools/selector-specificity': 4.0.0(postcss-selector-parser@6.1.0) - postcss: 8.4.45 + postcss: 8.4.47 postcss-selector-parser: 6.1.0 - postcss-opacity-percentage@2.0.0(postcss@8.4.45): + postcss-opacity-percentage@3.0.0(postcss@8.4.47): dependencies: - postcss: 8.4.45 + postcss: 8.4.47 - postcss-overflow-shorthand@6.0.0(postcss@8.4.45): + postcss-overflow-shorthand@6.0.0(postcss@8.4.47): dependencies: - postcss: 8.4.45 + postcss: 8.4.47 postcss-value-parser: 4.2.0 - postcss-page-break@3.0.4(postcss@8.4.45): + postcss-page-break@3.0.4(postcss@8.4.47): dependencies: - postcss: 8.4.45 + postcss: 8.4.47 - postcss-place@10.0.0(postcss@8.4.45): + postcss-place@10.0.0(postcss@8.4.47): dependencies: - postcss: 8.4.45 + postcss: 8.4.47 postcss-value-parser: 4.2.0 - postcss-preset-env@10.0.2(postcss@8.4.45): - dependencies: - '@csstools/postcss-cascade-layers': 5.0.0(postcss@8.4.45) - '@csstools/postcss-color-function': 4.0.2(postcss@8.4.45) - '@csstools/postcss-color-mix-function': 3.0.2(postcss@8.4.45) - '@csstools/postcss-content-alt-text': 2.0.1(postcss@8.4.45) - '@csstools/postcss-exponential-functions': 2.0.1(postcss@8.4.45) - '@csstools/postcss-font-format-keywords': 4.0.0(postcss@8.4.45) - '@csstools/postcss-gamut-mapping': 2.0.2(postcss@8.4.45) - '@csstools/postcss-gradients-interpolation-method': 5.0.2(postcss@8.4.45) - '@csstools/postcss-hwb-function': 4.0.2(postcss@8.4.45) - '@csstools/postcss-ic-unit': 4.0.0(postcss@8.4.45) - '@csstools/postcss-initial': 2.0.0(postcss@8.4.45) - '@csstools/postcss-is-pseudo-class': 5.0.0(postcss@8.4.45) - '@csstools/postcss-light-dark-function': 2.0.2(postcss@8.4.45) - '@csstools/postcss-logical-float-and-clear': 3.0.0(postcss@8.4.45) - '@csstools/postcss-logical-overflow': 2.0.0(postcss@8.4.45) - '@csstools/postcss-logical-overscroll-behavior': 2.0.0(postcss@8.4.45) - '@csstools/postcss-logical-resize': 3.0.0(postcss@8.4.45) - '@csstools/postcss-logical-viewport-units': 3.0.1(postcss@8.4.45) - '@csstools/postcss-media-minmax': 2.0.1(postcss@8.4.45) - '@csstools/postcss-media-queries-aspect-ratio-number-values': 3.0.1(postcss@8.4.45) - '@csstools/postcss-nested-calc': 4.0.0(postcss@8.4.45) - '@csstools/postcss-normalize-display-values': 4.0.0(postcss@8.4.45) - '@csstools/postcss-oklab-function': 4.0.2(postcss@8.4.45) - '@csstools/postcss-progressive-custom-properties': 4.0.0(postcss@8.4.45) - '@csstools/postcss-relative-color-syntax': 3.0.2(postcss@8.4.45) - '@csstools/postcss-scope-pseudo-class': 4.0.0(postcss@8.4.45) - '@csstools/postcss-stepped-value-functions': 4.0.1(postcss@8.4.45) - '@csstools/postcss-text-decoration-shorthand': 4.0.1(postcss@8.4.45) - '@csstools/postcss-trigonometric-functions': 4.0.1(postcss@8.4.45) - '@csstools/postcss-unset-value': 4.0.0(postcss@8.4.45) - autoprefixer: 10.4.20(postcss@8.4.45) + postcss-preset-env@10.0.5(postcss@8.4.47): + dependencies: + '@csstools/postcss-cascade-layers': 5.0.0(postcss@8.4.47) + '@csstools/postcss-color-function': 4.0.2(postcss@8.4.47) + '@csstools/postcss-color-mix-function': 3.0.2(postcss@8.4.47) + '@csstools/postcss-content-alt-text': 2.0.1(postcss@8.4.47) + '@csstools/postcss-exponential-functions': 2.0.1(postcss@8.4.47) + '@csstools/postcss-font-format-keywords': 4.0.0(postcss@8.4.47) + '@csstools/postcss-gamut-mapping': 2.0.2(postcss@8.4.47) + '@csstools/postcss-gradients-interpolation-method': 5.0.2(postcss@8.4.47) + '@csstools/postcss-hwb-function': 4.0.2(postcss@8.4.47) + '@csstools/postcss-ic-unit': 4.0.0(postcss@8.4.47) + '@csstools/postcss-initial': 2.0.0(postcss@8.4.47) + '@csstools/postcss-is-pseudo-class': 5.0.0(postcss@8.4.47) + '@csstools/postcss-light-dark-function': 2.0.4(postcss@8.4.47) + '@csstools/postcss-logical-float-and-clear': 3.0.0(postcss@8.4.47) + '@csstools/postcss-logical-overflow': 2.0.0(postcss@8.4.47) + '@csstools/postcss-logical-overscroll-behavior': 2.0.0(postcss@8.4.47) + '@csstools/postcss-logical-resize': 3.0.0(postcss@8.4.47) + '@csstools/postcss-logical-viewport-units': 3.0.1(postcss@8.4.47) + '@csstools/postcss-media-minmax': 2.0.1(postcss@8.4.47) + '@csstools/postcss-media-queries-aspect-ratio-number-values': 3.0.1(postcss@8.4.47) + '@csstools/postcss-nested-calc': 4.0.0(postcss@8.4.47) + '@csstools/postcss-normalize-display-values': 4.0.0(postcss@8.4.47) + '@csstools/postcss-oklab-function': 4.0.2(postcss@8.4.47) + '@csstools/postcss-progressive-custom-properties': 4.0.0(postcss@8.4.47) + '@csstools/postcss-relative-color-syntax': 3.0.2(postcss@8.4.47) + '@csstools/postcss-scope-pseudo-class': 4.0.0(postcss@8.4.47) + '@csstools/postcss-stepped-value-functions': 4.0.1(postcss@8.4.47) + '@csstools/postcss-text-decoration-shorthand': 4.0.1(postcss@8.4.47) + '@csstools/postcss-trigonometric-functions': 4.0.1(postcss@8.4.47) + '@csstools/postcss-unset-value': 4.0.0(postcss@8.4.47) + autoprefixer: 10.4.20(postcss@8.4.47) browserslist: 4.23.3 - css-blank-pseudo: 7.0.0(postcss@8.4.45) - css-has-pseudo: 7.0.0(postcss@8.4.45) - css-prefers-color-scheme: 10.0.0(postcss@8.4.45) - cssdb: 8.1.0 - postcss: 8.4.45 - postcss-attribute-case-insensitive: 7.0.0(postcss@8.4.45) - postcss-clamp: 4.1.0(postcss@8.4.45) - postcss-color-functional-notation: 7.0.2(postcss@8.4.45) - postcss-color-hex-alpha: 10.0.0(postcss@8.4.45) - postcss-color-rebeccapurple: 10.0.0(postcss@8.4.45) - postcss-custom-media: 11.0.1(postcss@8.4.45) - postcss-custom-properties: 14.0.1(postcss@8.4.45) - postcss-custom-selectors: 8.0.1(postcss@8.4.45) - postcss-dir-pseudo-class: 9.0.0(postcss@8.4.45) - postcss-double-position-gradients: 6.0.0(postcss@8.4.45) - postcss-focus-visible: 10.0.0(postcss@8.4.45) - postcss-focus-within: 9.0.0(postcss@8.4.45) - postcss-font-variant: 5.0.0(postcss@8.4.45) - postcss-gap-properties: 6.0.0(postcss@8.4.45) - postcss-image-set-function: 7.0.0(postcss@8.4.45) - postcss-lab-function: 7.0.2(postcss@8.4.45) - postcss-logical: 8.0.0(postcss@8.4.45) - postcss-nesting: 13.0.0(postcss@8.4.45) - postcss-opacity-percentage: 2.0.0(postcss@8.4.45) - postcss-overflow-shorthand: 6.0.0(postcss@8.4.45) - postcss-page-break: 3.0.4(postcss@8.4.45) - postcss-place: 10.0.0(postcss@8.4.45) - postcss-pseudo-class-any-link: 10.0.0(postcss@8.4.45) - postcss-replace-overflow-wrap: 4.0.0(postcss@8.4.45) - postcss-selector-not: 8.0.0(postcss@8.4.45) - - postcss-pseudo-class-any-link@10.0.0(postcss@8.4.45): - dependencies: - postcss: 8.4.45 + css-blank-pseudo: 7.0.0(postcss@8.4.47) + css-has-pseudo: 7.0.0(postcss@8.4.47) + css-prefers-color-scheme: 10.0.0(postcss@8.4.47) + cssdb: 8.1.1 + postcss: 8.4.47 + postcss-attribute-case-insensitive: 7.0.0(postcss@8.4.47) + postcss-clamp: 4.1.0(postcss@8.4.47) + postcss-color-functional-notation: 7.0.2(postcss@8.4.47) + postcss-color-hex-alpha: 10.0.0(postcss@8.4.47) + postcss-color-rebeccapurple: 10.0.0(postcss@8.4.47) + postcss-custom-media: 11.0.1(postcss@8.4.47) + postcss-custom-properties: 14.0.1(postcss@8.4.47) + postcss-custom-selectors: 8.0.1(postcss@8.4.47) + postcss-dir-pseudo-class: 9.0.0(postcss@8.4.47) + postcss-double-position-gradients: 6.0.0(postcss@8.4.47) + postcss-focus-visible: 10.0.0(postcss@8.4.47) + postcss-focus-within: 9.0.0(postcss@8.4.47) + postcss-font-variant: 5.0.0(postcss@8.4.47) + postcss-gap-properties: 6.0.0(postcss@8.4.47) + postcss-image-set-function: 7.0.0(postcss@8.4.47) + postcss-lab-function: 7.0.2(postcss@8.4.47) + postcss-logical: 8.0.0(postcss@8.4.47) + postcss-nesting: 13.0.0(postcss@8.4.47) + postcss-opacity-percentage: 3.0.0(postcss@8.4.47) + postcss-overflow-shorthand: 6.0.0(postcss@8.4.47) + postcss-page-break: 3.0.4(postcss@8.4.47) + postcss-place: 10.0.0(postcss@8.4.47) + postcss-pseudo-class-any-link: 10.0.0(postcss@8.4.47) + postcss-replace-overflow-wrap: 4.0.0(postcss@8.4.47) + postcss-selector-not: 8.0.0(postcss@8.4.47) + + postcss-pseudo-class-any-link@10.0.0(postcss@8.4.47): + dependencies: + postcss: 8.4.47 postcss-selector-parser: 6.1.0 - postcss-replace-overflow-wrap@4.0.0(postcss@8.4.45): + postcss-replace-overflow-wrap@4.0.0(postcss@8.4.47): dependencies: - postcss: 8.4.45 + postcss: 8.4.47 - postcss-selector-not@8.0.0(postcss@8.4.45): + postcss-selector-not@8.0.0(postcss@8.4.47): dependencies: - postcss: 8.4.45 + postcss: 8.4.47 postcss-selector-parser: 6.1.0 postcss-selector-parser@6.1.0: @@ -15873,17 +15723,17 @@ snapshots: postcss-value-parser@4.2.0: {} - postcss@8.4.45: + postcss@8.4.47: dependencies: nanoid: 3.3.7 picocolors: 1.1.0 - source-map-js: 1.2.0 + source-map-js: 1.2.1 - preact-render-to-string@6.5.10(preact@10.23.2): + preact-render-to-string@6.5.11(preact@10.24.1): dependencies: - preact: 10.23.2 + preact: 10.24.1 - preact@10.23.2: {} + preact@10.24.1: {} preferred-pm@4.0.0: dependencies: @@ -15969,6 +15819,8 @@ snapshots: dependencies: picomatch: 2.3.1 + readdirp@4.0.1: {} + reading-time@1.5.0: {} refa@0.12.1: @@ -15979,6 +15831,8 @@ snapshots: regenerator-runtime@0.14.1: {} + regex@4.3.2: {} + regexp-ast-analysis@0.7.1: dependencies: '@eslint-community/regexpp': 4.11.0 @@ -16012,16 +15866,16 @@ snapshots: rehype-parse@9.0.0: dependencies: '@types/hast': 3.0.4 - hast-util-from-html: 2.0.2 + hast-util-from-html: 2.0.3 unified: 11.0.5 - rehype-pretty-code@0.14.0(shiki@1.16.2): + rehype-pretty-code@0.14.0(shiki@1.21.0): dependencies: '@types/hast': 3.0.4 hast-util-to-string: 3.0.0 parse-numeric-range: 1.3.0 rehype-parse: 9.0.0 - shiki: 1.16.2 + shiki: 1.21.0 unified: 11.0.5 unist-util-visit: 5.0.0 @@ -16039,21 +15893,21 @@ snapshots: hast-util-to-string: 3.0.0 unist-util-visit: 5.0.0 - rehype-stringify@10.0.0: + rehype-stringify@10.0.1: dependencies: '@types/hast': 3.0.4 - hast-util-to-html: 9.0.2 + hast-util-to-html: 9.0.3 unified: 11.0.5 rehype-toc@3.0.2: dependencies: '@jsdevtools/rehype-toc': 3.0.2 - rehype@13.0.1: + rehype@13.0.2: dependencies: '@types/hast': 3.0.4 rehype-parse: 9.0.0 - rehype-stringify: 10.0.0 + rehype-stringify: 10.0.1 unified: 11.0.5 reinterval@1.1.0: {} @@ -16100,7 +15954,7 @@ snapshots: transitivePeerDependencies: - supports-color - remark-rehype@11.1.0: + remark-rehype@11.1.1: dependencies: '@types/hast': 3.0.4 '@types/mdast': 4.0.4 @@ -16108,7 +15962,7 @@ snapshots: unified: 11.0.5 vfile: 6.0.3 - remark-shiki-twoslash@3.1.3(typescript@5.5.4): + remark-shiki-twoslash@3.1.3(typescript@5.6.2): dependencies: '@types/unist': 2.0.10 '@typescript/twoslash': 3.1.0 @@ -16116,9 +15970,9 @@ snapshots: fenceparser: 1.1.1 regenerator-runtime: 0.13.11 shiki: 0.10.1 - shiki-twoslash: 3.1.2(typescript@5.5.4) + shiki-twoslash: 3.1.2(typescript@5.6.2) tslib: 2.1.0 - typescript: 5.5.4 + typescript: 5.6.2 unist-util-visit: 2.0.3 transitivePeerDependencies: - supports-color @@ -16166,11 +16020,6 @@ snapshots: onetime: 5.1.2 signal-exit: 3.0.7 - restore-cursor@5.1.0: - dependencies: - onetime: 7.0.0 - signal-exit: 4.1.0 - retext-latin@4.0.0: dependencies: '@types/nlcst': 2.0.3 @@ -16202,26 +16051,26 @@ snapshots: rfdc@1.4.1: {} - rollup@4.21.2: + rollup@4.23.0: dependencies: - '@types/estree': 1.0.5 + '@types/estree': 1.0.6 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.21.2 - '@rollup/rollup-android-arm64': 4.21.2 - '@rollup/rollup-darwin-arm64': 4.21.2 - '@rollup/rollup-darwin-x64': 4.21.2 - '@rollup/rollup-linux-arm-gnueabihf': 4.21.2 - '@rollup/rollup-linux-arm-musleabihf': 4.21.2 - '@rollup/rollup-linux-arm64-gnu': 4.21.2 - '@rollup/rollup-linux-arm64-musl': 4.21.2 - '@rollup/rollup-linux-powerpc64le-gnu': 4.21.2 - '@rollup/rollup-linux-riscv64-gnu': 4.21.2 - '@rollup/rollup-linux-s390x-gnu': 4.21.2 - '@rollup/rollup-linux-x64-gnu': 4.21.2 - '@rollup/rollup-linux-x64-musl': 4.21.2 - '@rollup/rollup-win32-arm64-msvc': 4.21.2 - '@rollup/rollup-win32-ia32-msvc': 4.21.2 - '@rollup/rollup-win32-x64-msvc': 4.21.2 + '@rollup/rollup-android-arm-eabi': 4.23.0 + '@rollup/rollup-android-arm64': 4.23.0 + '@rollup/rollup-darwin-arm64': 4.23.0 + '@rollup/rollup-darwin-x64': 4.23.0 + '@rollup/rollup-linux-arm-gnueabihf': 4.23.0 + '@rollup/rollup-linux-arm-musleabihf': 4.23.0 + '@rollup/rollup-linux-arm64-gnu': 4.23.0 + '@rollup/rollup-linux-arm64-musl': 4.23.0 + '@rollup/rollup-linux-powerpc64le-gnu': 4.23.0 + '@rollup/rollup-linux-riscv64-gnu': 4.23.0 + '@rollup/rollup-linux-s390x-gnu': 4.23.0 + '@rollup/rollup-linux-x64-gnu': 4.23.0 + '@rollup/rollup-linux-x64-musl': 4.23.0 + '@rollup/rollup-win32-arm64-msvc': 4.23.0 + '@rollup/rollup-win32-ia32-msvc': 4.23.0 + '@rollup/rollup-win32-x64-msvc': 4.23.0 fsevents: 2.3.3 rrweb-cssom@0.6.0: {} @@ -16242,9 +16091,9 @@ snapshots: dependencies: suf-log: 2.5.3 - sass@1.78.0: + sass@1.79.4: dependencies: - chokidar: 3.6.0 + chokidar: 4.0.1 immutable: 4.3.5 source-map-js: 1.2.0 @@ -16266,11 +16115,6 @@ snapshots: refa: 0.12.1 regexp-ast-analysis: 0.7.1 - section-matter@1.0.0: - dependencies: - extend-shallow: 2.0.1 - kind-of: 6.0.3 - semver@6.3.1: {} semver@7.6.3: {} @@ -16293,6 +16137,24 @@ snapshots: transitivePeerDependencies: - supports-color + send@0.19.0: + dependencies: + debug: 2.6.9 + depd: 2.0.0 + destroy: 1.2.0 + encodeurl: 1.0.2 + escape-html: 1.0.3 + etag: 1.8.1 + fresh: 0.5.2 + http-errors: 2.0.0 + mime: 1.6.0 + ms: 2.1.3 + on-finished: 2.4.1 + range-parser: 1.2.1 + statuses: 2.0.1 + transitivePeerDependencies: + - supports-color + seroval-plugins@1.1.1(seroval@1.1.1): dependencies: seroval: 1.1.1 @@ -16341,13 +16203,13 @@ snapshots: shebang-regex@3.0.0: {} - shiki-twoslash@3.1.2(typescript@5.5.4): + shiki-twoslash@3.1.2(typescript@5.6.2): dependencies: '@typescript/twoslash': 3.1.0 '@typescript/vfs': 1.3.4 fenceparser: 1.1.1 shiki: 0.10.1 - typescript: 5.5.4 + typescript: 5.6.2 transitivePeerDependencies: - supports-color @@ -16357,10 +16219,13 @@ snapshots: vscode-oniguruma: 1.7.0 vscode-textmate: 5.2.0 - shiki@1.16.2: + shiki@1.21.0: dependencies: - '@shikijs/core': 1.16.2 - '@shikijs/vscode-textmate': 9.2.0 + '@shikijs/core': 1.21.0 + '@shikijs/engine-javascript': 1.21.0 + '@shikijs/engine-oniguruma': 1.21.0 + '@shikijs/types': 1.21.0 + '@shikijs/vscode-textmate': 9.2.2 '@types/hast': 3.0.4 siginfo@2.0.0: {} @@ -16408,23 +16273,25 @@ snapshots: smartypants@0.2.2: {} - solid-js@1.8.22: + solid-js@1.9.1: dependencies: csstype: 3.1.3 seroval: 1.1.1 seroval-plugins: 1.1.1(seroval@1.1.1) - solid-refresh@0.6.3(solid-js@1.8.22): + solid-refresh@0.6.3(solid-js@1.9.1): dependencies: '@babel/generator': 7.25.5 '@babel/helper-module-imports': 7.24.7 - '@babel/types': 7.25.4 - solid-js: 1.8.22 + '@babel/types': 7.25.6 + solid-js: 1.9.1 transitivePeerDependencies: - supports-color source-map-js@1.2.0: {} + source-map-js@1.2.1: {} + source-map@0.6.1: {} source-map@0.7.4: {} @@ -16454,8 +16321,6 @@ snapshots: std-env@3.7.0: {} - stdin-discarder@0.2.2: {} - stream-replace-string@2.0.0: {} string-width@4.2.3: @@ -16489,8 +16354,6 @@ snapshots: dependencies: ansi-regex: 6.0.1 - strip-bom-string@1.0.0: {} - strip-bom@3.0.0: {} strip-final-newline@3.0.0: {} @@ -16550,12 +16413,12 @@ snapshots: dependencies: svelte: 4.2.19 - svelte2tsx@0.7.18(svelte@4.2.19)(typescript@5.5.4): + svelte2tsx@0.7.21(svelte@4.2.19)(typescript@5.6.2): dependencies: dedent-js: 1.0.1 pascal-case: 3.1.2 svelte: 4.2.19 - typescript: 5.5.4 + typescript: 5.6.2 svelte@4.2.19: dependencies: @@ -16588,7 +16451,7 @@ snapshots: symbol-tree@3.2.4: {} - tailwindcss@3.4.10: + tailwindcss@3.4.13: dependencies: '@alloc/quick-lru': 5.2.0 arg: 5.0.2 @@ -16604,11 +16467,11 @@ snapshots: normalize-path: 3.0.0 object-hash: 3.0.0 picocolors: 1.1.0 - postcss: 8.4.45 - postcss-import: 15.1.0(postcss@8.4.45) - postcss-js: 4.0.1(postcss@8.4.45) - postcss-load-config: 4.0.2(postcss@8.4.45) - postcss-nested: 6.0.1(postcss@8.4.45) + postcss: 8.4.47 + postcss-import: 15.1.0(postcss@8.4.47) + postcss-js: 4.0.1(postcss@8.4.47) + postcss-load-config: 4.0.2(postcss@8.4.47) + postcss-nested: 6.0.1(postcss@8.4.47) postcss-selector-parser: 6.1.0 resolve: 1.22.8 sucrase: 3.35.0 @@ -16647,8 +16510,6 @@ snapshots: timestring@6.0.0: {} - tinybench@2.8.0: {} - tinybench@2.9.0: {} tinyexec@0.3.0: {} @@ -16671,6 +16532,8 @@ snapshots: toidentifier@1.0.1: {} + toml@3.0.0: {} + totalist@3.0.1: {} tough-cookie@4.1.3: @@ -16694,46 +16557,46 @@ snapshots: trough@2.2.0: {} - ts-api-utils@1.3.0(typescript@5.5.4): + ts-api-utils@1.3.0(typescript@5.6.2): dependencies: - typescript: 5.5.4 + typescript: 5.6.2 ts-interface-checker@0.1.13: {} - tsconfck@3.1.3(typescript@5.5.4): + tsconfck@3.1.3(typescript@5.6.2): optionalDependencies: - typescript: 5.5.4 + typescript: 5.6.2 tslib@2.1.0: {} tslib@2.6.2: {} - turbo-darwin-64@2.1.1: + turbo-darwin-64@2.1.3: optional: true - turbo-darwin-arm64@2.1.1: + turbo-darwin-arm64@2.1.3: optional: true - turbo-linux-64@2.1.1: + turbo-linux-64@2.1.3: optional: true - turbo-linux-arm64@2.1.1: + turbo-linux-arm64@2.1.3: optional: true - turbo-windows-64@2.1.1: + turbo-windows-64@2.1.3: optional: true - turbo-windows-arm64@2.1.1: + turbo-windows-arm64@2.1.3: optional: true - turbo@2.1.1: + turbo@2.1.3: optionalDependencies: - turbo-darwin-64: 2.1.1 - turbo-darwin-arm64: 2.1.1 - turbo-linux-64: 2.1.1 - turbo-linux-arm64: 2.1.1 - turbo-windows-64: 2.1.1 - turbo-windows-arm64: 2.1.1 + turbo-darwin-64: 2.1.3 + turbo-darwin-arm64: 2.1.3 + turbo-linux-64: 2.1.3 + turbo-linux-arm64: 2.1.3 + turbo-windows-64: 2.1.3 + turbo-windows-arm64: 2.1.3 type-check@0.4.0: dependencies: @@ -16741,7 +16604,7 @@ snapshots: type-fest@1.4.0: {} - type-fest@2.19.0: {} + type-fest@4.26.1: {} type-is@1.6.18: dependencies: @@ -16750,7 +16613,7 @@ snapshots: types-react-dom@19.0.0-alpha.3: dependencies: - '@types/react': 18.3.5 + '@types/react': 18.3.10 types-react@19.0.0-alpha.3: dependencies: @@ -16762,18 +16625,18 @@ snapshots: dependencies: semver: 7.6.3 - typescript-eslint@8.4.0(eslint@9.10.0(jiti@1.21.0))(typescript@5.5.4): + typescript-eslint@8.8.0(eslint@9.11.1(jiti@1.21.0))(typescript@5.6.2): dependencies: - '@typescript-eslint/eslint-plugin': 8.4.0(@typescript-eslint/parser@8.4.0(eslint@9.10.0(jiti@1.21.0))(typescript@5.5.4))(eslint@9.10.0(jiti@1.21.0))(typescript@5.5.4) - '@typescript-eslint/parser': 8.4.0(eslint@9.10.0(jiti@1.21.0))(typescript@5.5.4) - '@typescript-eslint/utils': 8.4.0(eslint@9.10.0(jiti@1.21.0))(typescript@5.5.4) + '@typescript-eslint/eslint-plugin': 8.8.0(@typescript-eslint/parser@8.8.0(eslint@9.11.1(jiti@1.21.0))(typescript@5.6.2))(eslint@9.11.1(jiti@1.21.0))(typescript@5.6.2) + '@typescript-eslint/parser': 8.8.0(eslint@9.11.1(jiti@1.21.0))(typescript@5.6.2) + '@typescript-eslint/utils': 8.8.0(eslint@9.11.1(jiti@1.21.0))(typescript@5.6.2) optionalDependencies: - typescript: 5.5.4 + typescript: 5.6.2 transitivePeerDependencies: - eslint - supports-color - typescript@5.5.4: {} + typescript@5.6.2: {} ufo@1.5.3: {} @@ -16921,34 +16784,16 @@ snapshots: '@types/unist': 3.0.3 vfile-message: 4.0.2 - vite-hot-client@0.2.3(vite@5.4.3(@types/node@18.19.31)(sass@1.78.0)): + vite-hot-client@0.2.3(vite@5.4.8(@types/node@18.19.31)(sass@1.79.4)): dependencies: - vite: 5.4.3(@types/node@18.19.31)(sass@1.78.0) - - vite-node@2.0.5(@types/node@18.19.31)(sass@1.78.0): - dependencies: - cac: 6.7.14 - debug: 4.3.7 - pathe: 1.1.2 - tinyrainbow: 1.2.0 - vite: 5.4.3(@types/node@18.19.31)(sass@1.78.0) - transitivePeerDependencies: - - '@types/node' - - less - - lightningcss - - sass - - sass-embedded - - stylus - - sugarss - - supports-color - - terser + vite: 5.4.8(@types/node@18.19.31)(sass@1.79.4) - vite-node@2.1.1(@types/node@18.19.31)(sass@1.78.0): + vite-node@2.1.1(@types/node@18.19.31)(sass@1.79.4): dependencies: cac: 6.7.14 debug: 4.3.7 pathe: 1.1.2 - vite: 5.4.3(@types/node@18.19.31)(sass@1.78.0) + vite: 5.4.8(@types/node@18.19.31)(sass@1.79.4) transitivePeerDependencies: - '@types/node' - less @@ -16960,10 +16805,10 @@ snapshots: - supports-color - terser - vite-plugin-inspect@0.8.7(rollup@4.21.2)(vite@5.4.3(@types/node@18.19.31)(sass@1.78.0)): + vite-plugin-inspect@0.8.7(rollup@4.23.0)(vite@5.4.8(@types/node@18.19.31)(sass@1.79.4)): dependencies: '@antfu/utils': 0.7.10 - '@rollup/pluginutils': 5.1.0(rollup@4.21.2) + '@rollup/pluginutils': 5.1.2(rollup@4.23.0) debug: 4.3.7 error-stack-parser-es: 0.1.5 fs-extra: 11.2.0 @@ -16971,41 +16816,41 @@ snapshots: perfect-debounce: 1.0.0 picocolors: 1.1.0 sirv: 2.0.4 - vite: 5.4.3(@types/node@18.19.31)(sass@1.78.0) + vite: 5.4.8(@types/node@18.19.31)(sass@1.79.4) transitivePeerDependencies: - rollup - supports-color - vite-plugin-solid@2.10.2(solid-js@1.8.22)(vite@5.4.3(@types/node@18.19.31)(sass@1.78.0)): + vite-plugin-solid@2.10.2(solid-js@1.9.1)(vite@5.4.8(@types/node@18.19.31)(sass@1.79.4)): dependencies: '@babel/core': 7.25.2 '@types/babel__core': 7.20.5 babel-preset-solid: 1.8.16(@babel/core@7.25.2) merge-anything: 5.1.7 - solid-js: 1.8.22 - solid-refresh: 0.6.3(solid-js@1.8.22) - vite: 5.4.3(@types/node@18.19.31)(sass@1.78.0) - vitefu: 0.2.5(vite@5.4.3(@types/node@18.19.31)(sass@1.78.0)) + solid-js: 1.9.1 + solid-refresh: 0.6.3(solid-js@1.9.1) + vite: 5.4.8(@types/node@18.19.31)(sass@1.79.4) + vitefu: 0.2.5(vite@5.4.8(@types/node@18.19.31)(sass@1.79.4)) transitivePeerDependencies: - supports-color - vite-plugin-vue-devtools@7.4.4(rollup@4.21.2)(vite@5.4.3(@types/node@18.19.31)(sass@1.78.0))(vue@3.5.3(typescript@5.5.4)): + vite-plugin-vue-devtools@7.4.6(rollup@4.23.0)(vite@5.4.8(@types/node@18.19.31)(sass@1.79.4))(vue@3.5.10(typescript@5.6.2)): dependencies: - '@vue/devtools-core': 7.4.4(vite@5.4.3(@types/node@18.19.31)(sass@1.78.0))(vue@3.5.3(typescript@5.5.4)) - '@vue/devtools-kit': 7.4.4 - '@vue/devtools-shared': 7.4.4 + '@vue/devtools-core': 7.4.6(vite@5.4.8(@types/node@18.19.31)(sass@1.79.4))(vue@3.5.10(typescript@5.6.2)) + '@vue/devtools-kit': 7.4.6 + '@vue/devtools-shared': 7.4.6 execa: 8.0.1 sirv: 2.0.4 - vite: 5.4.3(@types/node@18.19.31)(sass@1.78.0) - vite-plugin-inspect: 0.8.7(rollup@4.21.2)(vite@5.4.3(@types/node@18.19.31)(sass@1.78.0)) - vite-plugin-vue-inspector: 5.2.0(vite@5.4.3(@types/node@18.19.31)(sass@1.78.0)) + vite: 5.4.8(@types/node@18.19.31)(sass@1.79.4) + vite-plugin-inspect: 0.8.7(rollup@4.23.0)(vite@5.4.8(@types/node@18.19.31)(sass@1.79.4)) + vite-plugin-vue-inspector: 5.2.0(vite@5.4.8(@types/node@18.19.31)(sass@1.79.4)) transitivePeerDependencies: - '@nuxt/kit' - rollup - supports-color - vue - vite-plugin-vue-inspector@5.2.0(vite@5.4.3(@types/node@18.19.31)(sass@1.78.0)): + vite-plugin-vue-inspector@5.2.0(vite@5.4.8(@types/node@18.19.31)(sass@1.79.4)): dependencies: '@babel/core': 7.25.2 '@babel/plugin-proposal-decorators': 7.24.1(@babel/core@7.25.2) @@ -17016,71 +16861,37 @@ snapshots: '@vue/compiler-dom': 3.5.3 kolorist: 1.8.0 magic-string: 0.30.11 - vite: 5.4.3(@types/node@18.19.31)(sass@1.78.0) + vite: 5.4.8(@types/node@18.19.31)(sass@1.79.4) transitivePeerDependencies: - supports-color - vite-svg-loader@5.1.0(vue@3.5.3(typescript@5.5.4)): + vite-svg-loader@5.1.0(vue@3.5.10(typescript@5.6.2)): dependencies: svgo: 3.2.0 - vue: 3.5.3(typescript@5.5.4) + vue: 3.5.10(typescript@5.6.2) - vite@5.4.3(@types/node@18.19.31)(sass@1.78.0): + vite@5.4.8(@types/node@18.19.31)(sass@1.79.4): dependencies: esbuild: 0.21.5 - postcss: 8.4.45 - rollup: 4.21.2 + postcss: 8.4.47 + rollup: 4.23.0 optionalDependencies: '@types/node': 18.19.31 fsevents: 2.3.3 - sass: 1.78.0 - - vitefu@0.2.5(vite@5.4.3(@types/node@18.19.31)(sass@1.78.0)): - optionalDependencies: - vite: 5.4.3(@types/node@18.19.31)(sass@1.78.0) + sass: 1.79.4 - vitefu@1.0.2(vite@5.4.3(@types/node@18.19.31)(sass@1.78.0)): + vitefu@0.2.5(vite@5.4.8(@types/node@18.19.31)(sass@1.79.4)): optionalDependencies: - vite: 5.4.3(@types/node@18.19.31)(sass@1.78.0) + vite: 5.4.8(@types/node@18.19.31)(sass@1.79.4) - vitest@2.0.5(@types/node@18.19.31)(jsdom@23.2.0)(sass@1.78.0): - dependencies: - '@ampproject/remapping': 2.3.0 - '@vitest/expect': 2.0.5 - '@vitest/pretty-format': 2.0.5 - '@vitest/runner': 2.0.5 - '@vitest/snapshot': 2.0.5 - '@vitest/spy': 2.0.5 - '@vitest/utils': 2.0.5 - chai: 5.1.1 - debug: 4.3.7 - execa: 8.0.1 - magic-string: 0.30.11 - pathe: 1.1.2 - std-env: 3.7.0 - tinybench: 2.8.0 - tinypool: 1.0.0 - tinyrainbow: 1.2.0 - vite: 5.4.3(@types/node@18.19.31)(sass@1.78.0) - vite-node: 2.0.5(@types/node@18.19.31)(sass@1.78.0) - why-is-node-running: 2.3.0 + vitefu@1.0.2(vite@5.4.8(@types/node@18.19.31)(sass@1.79.4)): optionalDependencies: - '@types/node': 18.19.31 - jsdom: 23.2.0 - transitivePeerDependencies: - - less - - lightningcss - - sass - - sass-embedded - - stylus - - sugarss - - supports-color - - terser + vite: 5.4.8(@types/node@18.19.31)(sass@1.79.4) - vitest@2.1.1(@types/node@18.19.31)(jsdom@23.2.0)(sass@1.78.0): + vitest@2.1.1(@types/node@18.19.31)(jsdom@23.2.0)(sass@1.79.4): dependencies: '@vitest/expect': 2.1.1 - '@vitest/mocker': 2.1.1(vite@5.4.3(@types/node@18.19.31)(sass@1.78.0)) + '@vitest/mocker': 2.1.1(vite@5.4.8(@types/node@18.19.31)(sass@1.79.4)) '@vitest/pretty-format': 2.1.1 '@vitest/runner': 2.1.1 '@vitest/snapshot': 2.1.1 @@ -17095,8 +16906,8 @@ snapshots: tinyexec: 0.3.0 tinypool: 1.0.0 tinyrainbow: 1.2.0 - vite: 5.4.3(@types/node@18.19.31)(sass@1.78.0) - vite-node: 2.1.1(@types/node@18.19.31)(sass@1.78.0) + vite: 5.4.8(@types/node@18.19.31)(sass@1.79.4) + vite-node: 2.1.1(@types/node@18.19.31)(sass@1.79.4) why-is-node-running: 2.3.0 optionalDependencies: '@types/node': 18.19.31 @@ -17228,15 +17039,15 @@ snapshots: vscode-uri@3.0.8: {} - vue@3.5.3(typescript@5.5.4): + vue@3.5.10(typescript@5.6.2): dependencies: - '@vue/compiler-dom': 3.5.3 - '@vue/compiler-sfc': 3.5.3 - '@vue/runtime-dom': 3.5.3 - '@vue/server-renderer': 3.5.3(vue@3.5.3(typescript@5.5.4)) - '@vue/shared': 3.5.3 + '@vue/compiler-dom': 3.5.10 + '@vue/compiler-sfc': 3.5.10 + '@vue/runtime-dom': 3.5.10 + '@vue/server-renderer': 3.5.10(vue@3.5.10(typescript@5.6.2)) + '@vue/shared': 3.5.10 optionalDependencies: - typescript: 5.5.4 + typescript: 5.6.2 w3c-xmlserializer@5.0.0: dependencies: @@ -17289,9 +17100,9 @@ snapshots: wicked-good-xpath@1.3.0: {} - widest-line@4.0.1: + widest-line@5.0.0: dependencies: - string-width: 5.1.2 + string-width: 7.2.0 wrap-ansi@7.0.0: dependencies: @@ -17305,6 +17116,12 @@ snapshots: string-width: 5.1.2 strip-ansi: 7.1.0 + wrap-ansi@9.0.0: + dependencies: + ansi-styles: 6.2.1 + string-width: 7.2.0 + strip-ansi: 7.1.0 + ws@8.16.0: {} xml-name-validator@5.0.0: {} @@ -17365,13 +17182,19 @@ snapshots: yocto-queue@1.1.1: {} - zod-to-json-schema@3.23.2(zod@3.23.8): + yocto-spinner@0.1.0: + dependencies: + yoctocolors: 2.1.1 + + yoctocolors@2.1.1: {} + + zod-to-json-schema@3.23.3(zod@3.23.8): dependencies: zod: 3.23.8 - zod-to-ts@1.2.0(typescript@5.5.4)(zod@3.23.8): + zod-to-ts@1.2.0(typescript@5.6.2)(zod@3.23.8): dependencies: - typescript: 5.5.4 + typescript: 5.6.2 zod: 3.23.8 zod@3.23.8: {} From 8280450fe68d446f034752652d8da4cb50b70527 Mon Sep 17 00:00:00 2001 From: Matt Kane Date: Tue, 1 Oct 2024 13:15:23 +0100 Subject: [PATCH 32/43] Handle folders without config --- packages/astro/src/content/loaders/glob.ts | 2 +- packages/astro/src/content/utils.ts | 37 +++++++++++++++++++ packages/astro/src/core/config/schema.ts | 11 ------ .../astro/test/content-collections.test.js | 34 +++++++++++++++++ .../content/.should-also-ignore/enterprise.md | 14 +++++++ .../src/content/_should-ignore/enterprise.md | 14 +++++++ .../src/content/without-config/columbia.md | 15 ++++++++ .../src/content/without-config/endeavour.md | 14 +++++++ .../src/content/without-config/enterprise.md | 14 +++++++ .../promo/_launch-week-styles.css | 3 ++ .../without-config/promo/launch week.mdx | 14 +++++++ .../src/pages/collections.json.js | 3 +- 12 files changed, 162 insertions(+), 13 deletions(-) create mode 100644 packages/astro/test/fixtures/content-collections/src/content/.should-also-ignore/enterprise.md create mode 100644 packages/astro/test/fixtures/content-collections/src/content/_should-ignore/enterprise.md create mode 100644 packages/astro/test/fixtures/content-collections/src/content/without-config/columbia.md create mode 100644 packages/astro/test/fixtures/content-collections/src/content/without-config/endeavour.md create mode 100644 packages/astro/test/fixtures/content-collections/src/content/without-config/enterprise.md create mode 100644 packages/astro/test/fixtures/content-collections/src/content/without-config/promo/_launch-week-styles.css create mode 100644 packages/astro/test/fixtures/content-collections/src/content/without-config/promo/launch week.mdx diff --git a/packages/astro/src/content/loaders/glob.ts b/packages/astro/src/content/loaders/glob.ts index f2b40db0950e..9d8433035f86 100644 --- a/packages/astro/src/content/loaders/glob.ts +++ b/packages/astro/src/content/loaders/glob.ts @@ -90,7 +90,7 @@ export function glob(globOptions: GlobOptions): Loader { const untouchedEntries = new Set(store.keys()); const isLegacy = (globOptions as any)._legacy; - // If legacy mode is *not* enabled then we use emulate legacy collections instead + // If global legacy flag is *not* enabled then this loader is used to emulate legacy collections instead const emulateLegacyCollections = !config.legacy.legacyContentCollections; async function syncData(entry: string, base: URL, entryType?: ContentEntryType) { if (!entryType) { diff --git a/packages/astro/src/content/utils.ts b/packages/astro/src/content/utils.ts index abd259bc7ae5..cb5098363424 100644 --- a/packages/astro/src/content/utils.ts +++ b/packages/astro/src/content/utils.ts @@ -25,6 +25,7 @@ import { } from './consts.js'; import { glob } from './loaders/glob.js'; import { createImage } from './runtime-assets.js'; +import { green } from 'kleur/colors'; /** * Amap from a collection + slug to the local file path. * This is used internally to resolve entry imports when using `getEntry()`. @@ -543,6 +544,7 @@ async function loadContentConfig({ export async function autogenerateCollections({ config, settings, + fs, }: { config?: ContentConfig; settings: AstroSettings; @@ -560,8 +562,10 @@ export async function autogenerateCollections({ const contentPattern = globWithUnderscoresIgnored('', contentExts); const dataPattern = globWithUnderscoresIgnored('', dataExts); + let usesContentLayer = false; for (const collectionName of Object.keys(collections)) { if (collections[collectionName]?.type === 'content_layer') { + usesContentLayer = true; // This is already a content layer, skip continue; } @@ -592,6 +596,39 @@ export async function autogenerateCollections({ }) as any, }; } + if (!usesContentLayer) { + // If the user hasn't defined any collections using the content layer, we'll try and help out by checking for + // any orphaned folders in the content directory and creating collections for them. + const orphanedCollections = []; + for (const entry of await fs.promises.readdir(contentDir, { withFileTypes: true })) { + const collectionName = entry.name; + if (['_', '.'].includes(collectionName.at(0) ?? '')) { + continue; + } + if (entry.isDirectory() && !(collectionName in collections)) { + orphanedCollections.push(collectionName); + const base = new URL(`${collectionName}/`, contentDir); + collections[collectionName] = { + type: 'content_layer', + loader: glob({ + base, + pattern: contentPattern, + _legacy: true, + }) as any, + }; + } + } + if (orphanedCollections.length > 0) { + console.warn( + ` +Auto-generating collections for folders in the content directory that are not defined as collections. +This is deprecated, so you should define these collections yourself in "src/content/config.ts". +The following collections have been auto-generated: ${orphanedCollections + .map((name) => green(name)) + .join(', ')}\n`, + ); + } + } return { ...config, collections }; } diff --git a/packages/astro/src/core/config/schema.ts b/packages/astro/src/core/config/schema.ts index 551f29387606..72c632e6a35d 100644 --- a/packages/astro/src/core/config/schema.ts +++ b/packages/astro/src/core/config/schema.ts @@ -701,17 +701,6 @@ export function createRelativeSchema(cmd: string, fileProtocolRoot: string) { }); } } - - if ( - configuration.experimental.contentCollectionCache && - !configuration.legacy.legacyContentCollections - ) { - ctx.addIssue({ - code: z.ZodIssueCode.custom, - message: - 'Content collections cache is not supported with the Content Layer API. Please remove the `experimental.contentCollectionsCache` option from your Astro config or enable `legacy.legacyContentCollections`', - }); - } }); return AstroConfigRelativeSchema; diff --git a/packages/astro/test/content-collections.test.js b/packages/astro/test/content-collections.test.js index 6c452d8499c5..19a47f7e4cc6 100644 --- a/packages/astro/test/content-collections.test.js +++ b/packages/astro/test/content-collections.test.js @@ -21,6 +21,40 @@ describe('Content Collections', () => { json = devalue.parse(rawJson); }); + it('Returns `without config` collection', async () => { + assert.ok(json.hasOwnProperty('withoutConfig')); + assert.equal(Array.isArray(json.withoutConfig), true); + + const ids = json.withoutConfig.map((item) => item.id); + assert.deepEqual( + ids.sort(), + [ + 'columbia.md', + 'endeavour.md', + 'enterprise.md', + // Spaces allowed in IDs + 'promo/launch week.mdx', + ].sort(), + ); + }); + + it('Handles spaces in `without config` slugs', async () => { + assert.ok(json.hasOwnProperty('withoutConfig')); + assert.equal(Array.isArray(json.withoutConfig), true); + + const slugs = json.withoutConfig.map((item) => item.slug); + assert.deepEqual( + slugs.sort(), + [ + 'columbia', + 'endeavour', + 'enterprise', + // "launch week.mdx" is converted to "launch-week.mdx" + 'promo/launch-week', + ].sort(), + ); + }); + it('Returns `with schema` collection', async () => { assert.ok(json.hasOwnProperty('withSchemaConfig')); assert.equal(Array.isArray(json.withSchemaConfig), true); diff --git a/packages/astro/test/fixtures/content-collections/src/content/.should-also-ignore/enterprise.md b/packages/astro/test/fixtures/content-collections/src/content/.should-also-ignore/enterprise.md new file mode 100644 index 000000000000..3131e6d5df3a --- /dev/null +++ b/packages/astro/test/fixtures/content-collections/src/content/.should-also-ignore/enterprise.md @@ -0,0 +1,14 @@ +--- +title: 'Enterprise' +description: 'Learn about the Enterprise NASA space shuttle.' +publishedDate: 'Tue Jun 08 2021 00:00:00 GMT-0400 (Eastern Daylight Time)' +tags: [space, 70s] +--- + +**Source:** [Wikipedia](https://en.wikipedia.org/wiki/Space_Shuttle_Enterprise) + +Space Shuttle Enterprise (Orbiter Vehicle Designation: OV-101) was the first orbiter of the Space Shuttle system. Rolled out on September 17, 1976, it was built for NASA as part of the Space Shuttle program to perform atmospheric test flights after being launched from a modified Boeing 747. It was constructed without engines or a functional heat shield. As a result, it was not capable of spaceflight. + +Originally, Enterprise had been intended to be refitted for orbital flight to become the second space-rated orbiter in service. However, during the construction of Space Shuttle Columbia, details of the final design changed, making it simpler and less costly to build Challenger around a body frame that had been built as a test article. Similarly, Enterprise was considered for refit to replace Challenger after the latter was destroyed, but Endeavour was built from structural spares instead. + +Enterprise was restored and placed on display in 2003 at the Smithsonian's new Steven F. Udvar-Hazy Center in Virginia. Following the retirement of the Space Shuttle fleet, Discovery replaced Enterprise at the Udvar-Hazy Center, and Enterprise was transferred to the Intrepid Sea, Air & Space Museum in New York City, where it has been on display since July 2012. diff --git a/packages/astro/test/fixtures/content-collections/src/content/_should-ignore/enterprise.md b/packages/astro/test/fixtures/content-collections/src/content/_should-ignore/enterprise.md new file mode 100644 index 000000000000..3131e6d5df3a --- /dev/null +++ b/packages/astro/test/fixtures/content-collections/src/content/_should-ignore/enterprise.md @@ -0,0 +1,14 @@ +--- +title: 'Enterprise' +description: 'Learn about the Enterprise NASA space shuttle.' +publishedDate: 'Tue Jun 08 2021 00:00:00 GMT-0400 (Eastern Daylight Time)' +tags: [space, 70s] +--- + +**Source:** [Wikipedia](https://en.wikipedia.org/wiki/Space_Shuttle_Enterprise) + +Space Shuttle Enterprise (Orbiter Vehicle Designation: OV-101) was the first orbiter of the Space Shuttle system. Rolled out on September 17, 1976, it was built for NASA as part of the Space Shuttle program to perform atmospheric test flights after being launched from a modified Boeing 747. It was constructed without engines or a functional heat shield. As a result, it was not capable of spaceflight. + +Originally, Enterprise had been intended to be refitted for orbital flight to become the second space-rated orbiter in service. However, during the construction of Space Shuttle Columbia, details of the final design changed, making it simpler and less costly to build Challenger around a body frame that had been built as a test article. Similarly, Enterprise was considered for refit to replace Challenger after the latter was destroyed, but Endeavour was built from structural spares instead. + +Enterprise was restored and placed on display in 2003 at the Smithsonian's new Steven F. Udvar-Hazy Center in Virginia. Following the retirement of the Space Shuttle fleet, Discovery replaced Enterprise at the Udvar-Hazy Center, and Enterprise was transferred to the Intrepid Sea, Air & Space Museum in New York City, where it has been on display since July 2012. diff --git a/packages/astro/test/fixtures/content-collections/src/content/without-config/columbia.md b/packages/astro/test/fixtures/content-collections/src/content/without-config/columbia.md new file mode 100644 index 000000000000..4971108e36ed --- /dev/null +++ b/packages/astro/test/fixtures/content-collections/src/content/without-config/columbia.md @@ -0,0 +1,15 @@ +--- +title: Columbia +description: 'Learn about the Columbia NASA space shuttle.' +publishedDate: 'Sat May 21 2022 00:00:00 GMT-0400 (Eastern Daylight Time)' +tags: [space, 90s] +--- + +**Source:** [Wikipedia](https://en.wikipedia.org/wiki/Space_Shuttle_Endeavour) + +Space Shuttle Endeavour (Orbiter Vehicle Designation: OV-105) is a retired orbiter from NASA's Space Shuttle program and the fifth and final operational Shuttle built. It embarked on its first mission, STS-49, in May 1992 and its 25th and final mission, STS-134, in May 2011. STS-134 was expected to be the final mission of the Space Shuttle program, but with the authorization of STS-135, Atlantis became the last shuttle to fly. + +The United States Congress approved the construction of Endeavour in 1987 to replace the Space Shuttle Challenger, which was destroyed in 1986. + +NASA chose, on cost grounds, to build much of Endeavour from spare parts rather than refitting the Space Shuttle Enterprise, and used structural spares built during the construction of Discovery and Atlantis in its assembly. +Space Shuttle Endeavour (Orbiter Vehicle Designation: OV-105) is a retired orbiter from NASA's Space Shuttle program and the fifth and final operational Shuttle built. It embarked on its first mission, STS-49, in May 1992 and its 25th and final mission, STS-134, in May 2011. STS-134 was expected to be the final mission of the Space Shuttle program, but with the authorization of STS-135, Atlantis became the last shuttle to fly. diff --git a/packages/astro/test/fixtures/content-collections/src/content/without-config/endeavour.md b/packages/astro/test/fixtures/content-collections/src/content/without-config/endeavour.md new file mode 100644 index 000000000000..51d6e8c42178 --- /dev/null +++ b/packages/astro/test/fixtures/content-collections/src/content/without-config/endeavour.md @@ -0,0 +1,14 @@ +--- +title: Endeavour +description: 'Learn about the Endeavour NASA space shuttle.' +publishedDate: 'Sun Jul 11 2021 00:00:00 GMT-0400 (Eastern Daylight Time)' +tags: [space, 90s] +--- + +**Source:** [Wikipedia](https://en.wikipedia.org/wiki/Space_Shuttle_Endeavour) + +Space Shuttle Endeavour (Orbiter Vehicle Designation: OV-105) is a retired orbiter from NASA's Space Shuttle program and the fifth and final operational Shuttle built. It embarked on its first mission, STS-49, in May 1992 and its 25th and final mission, STS-134, in May 2011. STS-134 was expected to be the final mission of the Space Shuttle program, but with the authorization of STS-135, Atlantis became the last shuttle to fly. + +The United States Congress approved the construction of Endeavour in 1987 to replace the Space Shuttle Challenger, which was destroyed in 1986. + +NASA chose, on cost grounds, to build much of Endeavour from spare parts rather than refitting the Space Shuttle Enterprise, and used structural spares built during the construction of Discovery and Atlantis in its assembly. diff --git a/packages/astro/test/fixtures/content-collections/src/content/without-config/enterprise.md b/packages/astro/test/fixtures/content-collections/src/content/without-config/enterprise.md new file mode 100644 index 000000000000..3131e6d5df3a --- /dev/null +++ b/packages/astro/test/fixtures/content-collections/src/content/without-config/enterprise.md @@ -0,0 +1,14 @@ +--- +title: 'Enterprise' +description: 'Learn about the Enterprise NASA space shuttle.' +publishedDate: 'Tue Jun 08 2021 00:00:00 GMT-0400 (Eastern Daylight Time)' +tags: [space, 70s] +--- + +**Source:** [Wikipedia](https://en.wikipedia.org/wiki/Space_Shuttle_Enterprise) + +Space Shuttle Enterprise (Orbiter Vehicle Designation: OV-101) was the first orbiter of the Space Shuttle system. Rolled out on September 17, 1976, it was built for NASA as part of the Space Shuttle program to perform atmospheric test flights after being launched from a modified Boeing 747. It was constructed without engines or a functional heat shield. As a result, it was not capable of spaceflight. + +Originally, Enterprise had been intended to be refitted for orbital flight to become the second space-rated orbiter in service. However, during the construction of Space Shuttle Columbia, details of the final design changed, making it simpler and less costly to build Challenger around a body frame that had been built as a test article. Similarly, Enterprise was considered for refit to replace Challenger after the latter was destroyed, but Endeavour was built from structural spares instead. + +Enterprise was restored and placed on display in 2003 at the Smithsonian's new Steven F. Udvar-Hazy Center in Virginia. Following the retirement of the Space Shuttle fleet, Discovery replaced Enterprise at the Udvar-Hazy Center, and Enterprise was transferred to the Intrepid Sea, Air & Space Museum in New York City, where it has been on display since July 2012. diff --git a/packages/astro/test/fixtures/content-collections/src/content/without-config/promo/_launch-week-styles.css b/packages/astro/test/fixtures/content-collections/src/content/without-config/promo/_launch-week-styles.css new file mode 100644 index 000000000000..cce2effe20c1 --- /dev/null +++ b/packages/astro/test/fixtures/content-collections/src/content/without-config/promo/_launch-week-styles.css @@ -0,0 +1,3 @@ +body { + font-family: 'Comic Sans MS', sans-serif; +} diff --git a/packages/astro/test/fixtures/content-collections/src/content/without-config/promo/launch week.mdx b/packages/astro/test/fixtures/content-collections/src/content/without-config/promo/launch week.mdx new file mode 100644 index 000000000000..22ed07c43f0c --- /dev/null +++ b/packages/astro/test/fixtures/content-collections/src/content/without-config/promo/launch week.mdx @@ -0,0 +1,14 @@ +--- +title: 'Launch week!' +description: 'Join us for the exciting launch of SPACE BLOG' +publishedDate: 'Sat May 21 2022 00:00:00 GMT-0400 (Eastern Daylight Time)' +tags: ['announcement'] +--- + +import './_launch-week-styles.css'; + +Join us for the space blog launch! + +- THIS THURSDAY +- Houston, TX +- Dress code: **interstellar casual** ✨ diff --git a/packages/astro/test/fixtures/content-collections/src/pages/collections.json.js b/packages/astro/test/fixtures/content-collections/src/pages/collections.json.js index 2855b24ceb8d..0694cfaeca99 100644 --- a/packages/astro/test/fixtures/content-collections/src/pages/collections.json.js +++ b/packages/astro/test/fixtures/content-collections/src/pages/collections.json.js @@ -8,8 +8,9 @@ export async function GET() { const withUnionSchema = stripAllRenderFn(await getCollection('with-union-schema')); const withSymlinkedContent = stripAllRenderFn(await getCollection('with-symlinked-content')); const withSymlinkedData = stripAllRenderFn(await getCollection('with-symlinked-data')); + const withoutConfig = stripAllRenderFn(await getCollection('without-config')); return new Response( - devalue.stringify({ withSchemaConfig, withSlugConfig, withUnionSchema, withSymlinkedContent, withSymlinkedData }), + devalue.stringify({ withSchemaConfig, withSlugConfig, withUnionSchema, withSymlinkedContent, withSymlinkedData, withoutConfig }), ); } From 3da71b47a78cdc60525c838d578f04cda423aa83 Mon Sep 17 00:00:00 2001 From: Matt Kane Date: Tue, 1 Oct 2024 13:26:23 +0100 Subject: [PATCH 33/43] lint --- packages/astro/src/content/vite-plugin-content-virtual-mod.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/astro/src/content/vite-plugin-content-virtual-mod.ts b/packages/astro/src/content/vite-plugin-content-virtual-mod.ts index ca4dc319c919..3dc5019b69df 100644 --- a/packages/astro/src/content/vite-plugin-content-virtual-mod.ts +++ b/packages/astro/src/content/vite-plugin-content-virtual-mod.ts @@ -6,7 +6,6 @@ import { fileURLToPath, pathToFileURL } from 'node:url'; import pLimit from 'p-limit'; import type { Plugin } from 'vite'; import { AstroError, AstroErrorData } from '../core/errors/index.js'; -import { removeFileExtension, appendExtension } from '../core/path.js'; import { rootRelativePath } from '../core/viteUtils.js'; import type { AstroSettings } from '../types/astro.js'; import type { AstroPluginMetadata } from '../vite-plugin-astro/index.js'; From 5c6e4281b3bd039319c71bac3102ff6524416330 Mon Sep 17 00:00:00 2001 From: Matt Kane Date: Tue, 1 Oct 2024 14:16:44 +0100 Subject: [PATCH 34/43] Fix test --- packages/astro/src/content/utils.ts | 2 +- packages/astro/test/astro-sync.test.js | 3 ++- .../markdoc/test/fixtures/propagated-assets/astro.config.mjs | 4 ---- 3 files changed, 3 insertions(+), 6 deletions(-) diff --git a/packages/astro/src/content/utils.ts b/packages/astro/src/content/utils.ts index cb5098363424..f3c0bccdef48 100644 --- a/packages/astro/src/content/utils.ts +++ b/packages/astro/src/content/utils.ts @@ -621,7 +621,7 @@ export async function autogenerateCollections({ if (orphanedCollections.length > 0) { console.warn( ` -Auto-generating collections for folders in the content directory that are not defined as collections. +Auto-generating collections for folders in "src/content/" that are not defined as collections. This is deprecated, so you should define these collections yourself in "src/content/config.ts". The following collections have been auto-generated: ${orphanedCollections .map((name) => green(name)) diff --git a/packages/astro/test/astro-sync.test.js b/packages/astro/test/astro-sync.test.js index ab56d0c40c36..d6b343616e2d 100644 --- a/packages/astro/test/astro-sync.test.js +++ b/packages/astro/test/astro-sync.test.js @@ -148,7 +148,7 @@ describe('astro sync', () => { collection: "blog"; data: InferEntrySchema<"blog">; rendered?: RenderedContent; -}>`, + filePath?: string;`, 'Types file does not include empty collection type', ); fixture.thenFileContentShouldInclude( @@ -159,6 +159,7 @@ describe('astro sync', () => { collection: "blogMeta"; data: InferEntrySchema<"blogMeta">; rendered?: RenderedContent; + filePath?: string; }>;`, 'Types file does not include empty collection type', ); diff --git a/packages/integrations/markdoc/test/fixtures/propagated-assets/astro.config.mjs b/packages/integrations/markdoc/test/fixtures/propagated-assets/astro.config.mjs index ba419319466a..1bd8ba93f461 100644 --- a/packages/integrations/markdoc/test/fixtures/propagated-assets/astro.config.mjs +++ b/packages/integrations/markdoc/test/fixtures/propagated-assets/astro.config.mjs @@ -4,8 +4,4 @@ import { defineConfig } from 'astro/config'; // https://astro.build/config export default defineConfig({ integrations: [markdoc()], - legacy: { - // Content layer backwards compatibility has a bug in header propagation - legacyContentCollections: true, - }, }); From ce2c486862a48e1f35b78a1c2faab22b217db358 Mon Sep 17 00:00:00 2001 From: Matt Kane Date: Tue, 1 Oct 2024 15:03:19 +0100 Subject: [PATCH 35/43] Update wording for auto-collections --- .changeset/quick-onions-leave.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changeset/quick-onions-leave.md b/.changeset/quick-onions-leave.md index 64c5d150dc5a..134fc69a389c 100644 --- a/.changeset/quick-onions-leave.md +++ b/.changeset/quick-onions-leave.md @@ -24,7 +24,7 @@ Legacy data collections are handled like this: While these emulate most of the features of legacy collections, they have these differences: -- No implicit collections. In order to be generated, a collection must be defined in `config.ts`. For legacy collections these can just be empty declarations: e.g.`const blog = defineCollection({})`. Removing implicit collections means that we can allow content layer collections in `src/content`. +- Implicit collections for folders in `src/content` are only defined if no other collections use content layer. If no content layer collections are defined, and there are folders in `src/content` that don't match collections in `src/content/config.ts` then collections will be auto-generated for them. This is not recommended, and a warning will be logged that this is deprecated. A collection should always be defined in `config.ts`. For legacy collections these can just be empty declarations: e.g.`const blog = defineCollection({})`. - The `layout` field is not supported in Markdown - Sort order of generated collections is non-deterministic and platform-dependent. - `image().refine()` is not supported From 9d0d306256dcaccc22bc4aa2c445dfb918ccc3b0 Mon Sep 17 00:00:00 2001 From: Matt Kane Date: Tue, 1 Oct 2024 15:03:31 +0100 Subject: [PATCH 36/43] Delete legacyId --- packages/astro/src/content/runtime.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/astro/src/content/runtime.ts b/packages/astro/src/content/runtime.ts index cf4aa7cd6167..d783e8c3d258 100644 --- a/packages/astro/src/content/runtime.ts +++ b/packages/astro/src/content/runtime.ts @@ -272,6 +272,7 @@ function emulateLegacyEntry(entry: DataEntry) { id: entry.legacyId!, slug: entry.id, }; + delete legacyEntry.legacyId; return { ...legacyEntry, // Define separately so the render function isn't included in the object passed to `renderEntry()` From c8e19ede4c094597e02f36b03acfcf9685ea80d0 Mon Sep 17 00:00:00 2001 From: Matt Kane Date: Tue, 1 Oct 2024 15:24:07 +0100 Subject: [PATCH 37/43] Sort another fixture --- packages/integrations/markdoc/test/content-collections.test.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/integrations/markdoc/test/content-collections.test.js b/packages/integrations/markdoc/test/content-collections.test.js index 1a162c9235ce..48e97d45d670 100644 --- a/packages/integrations/markdoc/test/content-collections.test.js +++ b/packages/integrations/markdoc/test/content-collections.test.js @@ -70,7 +70,7 @@ describe('Markdoc - Content Collections', () => { const posts = parseDevalue(res); assert.notEqual(posts, null); assert.deepEqual( - posts.sort().map((post) => formatPost(post)), + posts.sort(sortById).map((post) => formatPost(post)), [post1Entry, post2Entry, post3Entry], ); }); From 6f4bab0bd7593f4affb582cc50888eebadbb69b3 Mon Sep 17 00:00:00 2001 From: Matt Kane Date: Tue, 1 Oct 2024 15:34:36 +0100 Subject: [PATCH 38/43] Rename flag to `legacy.collections` --- .changeset/quick-onions-leave.md | 2 +- packages/astro/src/content/loaders/glob.ts | 6 +++--- packages/astro/src/content/utils.ts | 2 +- .../content/vite-plugin-content-virtual-mod.ts | 4 ++-- packages/astro/src/core/config/schema.ts | 6 +++--- packages/astro/src/types/public/config.ts | 14 +++++++------- .../content-mixed-errors/astro.config.mjs | 2 +- .../test/fixtures/content/astro.config.mjs | 2 +- .../core-image-errors/astro.config.mjs | 2 +- .../test/fixtures/core-image/astro.config.mjs | 2 +- .../css-inline-stylesheets-2/astro.config.mjs | 2 +- .../css-inline-stylesheets-3/astro.config.mjs | 2 +- .../css-inline-stylesheets/astro.config.mjs | 2 +- .../astro.config.mjs | 2 +- .../legacy-data-collections/astro.config.mjs | 2 +- .../test/legacy-content-collections.test.js | 18 +++++++++--------- 16 files changed, 35 insertions(+), 35 deletions(-) diff --git a/.changeset/quick-onions-leave.md b/.changeset/quick-onions-leave.md index 134fc69a389c..efe633fa29b7 100644 --- a/.changeset/quick-onions-leave.md +++ b/.changeset/quick-onions-leave.md @@ -30,4 +30,4 @@ While these emulate most of the features of legacy collections, they have these - `image().refine()` is not supported - the key for `getEntry` is typed as `string`, rather than having types for every entry. -A new config flag `legacy.legacyContentCollections` is added for users that need the old behavior. When set, collections in `src/content` are processed in the same way as before rather than being implemented with glob - including implicit collections. When set, content layer collections are forbidden in `src/content`, and will fail a build if defined. +A new config flag `legacy.collections` is added for users that need the old behavior. When set, collections in `src/content` are processed in the same way as before rather than being implemented with glob - including implicit collections. When set, content layer collections are forbidden in `src/content`, and will fail a build if defined. diff --git a/packages/astro/src/content/loaders/glob.ts b/packages/astro/src/content/loaders/glob.ts index 9d8433035f86..154ae7d7b769 100644 --- a/packages/astro/src/content/loaders/glob.ts +++ b/packages/astro/src/content/loaders/glob.ts @@ -90,8 +90,8 @@ export function glob(globOptions: GlobOptions): Loader { const untouchedEntries = new Set(store.keys()); const isLegacy = (globOptions as any)._legacy; - // If global legacy flag is *not* enabled then this loader is used to emulate legacy collections instead - const emulateLegacyCollections = !config.legacy.legacyContentCollections; + // If global legacy collection handling flag is *not* enabled then this loader is used to emulate them instead + const emulateLegacyCollections = !config.legacy.collections; async function syncData(entry: string, base: URL, entryType?: ContentEntryType) { if (!entryType) { logger.warn(`No entry type found for ${entry}`); @@ -156,7 +156,7 @@ export function glob(globOptions: GlobOptions): Loader { if (entryType.getRenderFunction) { if (isLegacy && data.layout) { logger.error( - `The Markdown "layout" field is not supported in content collections in Astro 5. Ignoring layout for ${JSON.stringify(entry)}. Enable "legacy.legacyContentCollections" if you need to use the layout field.`, + `The Markdown "layout" field is not supported in content collections in Astro 5. Ignoring layout for ${JSON.stringify(entry)}. Enable "legacy.collections" if you need to use the layout field.`, ); } diff --git a/packages/astro/src/content/utils.ts b/packages/astro/src/content/utils.ts index f3c0bccdef48..164e357deef8 100644 --- a/packages/astro/src/content/utils.ts +++ b/packages/astro/src/content/utils.ts @@ -550,7 +550,7 @@ export async function autogenerateCollections({ settings: AstroSettings; fs: typeof fsMod; }): Promise { - if (settings.config.legacy.legacyContentCollections) { + if (settings.config.legacy.collections) { return config; } const contentDir = new URL('./content/', settings.config.srcDir); diff --git a/packages/astro/src/content/vite-plugin-content-virtual-mod.ts b/packages/astro/src/content/vite-plugin-content-virtual-mod.ts index b650b6eac198..ca601e0383fc 100644 --- a/packages/astro/src/content/vite-plugin-content-virtual-mod.ts +++ b/packages/astro/src/content/vite-plugin-content-virtual-mod.ts @@ -98,7 +98,7 @@ export function astroContentVirtualModPlugin({ }, async load(id, args) { if (id === RESOLVED_VIRTUAL_MODULE_ID) { - const lookupMap = settings.config.legacy.legacyContentCollections + const lookupMap = settings.config.legacy.collections ? await generateLookupMap({ settings, fs, @@ -206,7 +206,7 @@ export async function generateContentEntryFile({ let contentEntryGlobResult = '""'; let dataEntryGlobResult = '""'; let renderEntryGlobResult = '""'; - if (settings.config.legacy.legacyContentCollections) { + if (settings.config.legacy.collections) { const contentEntryConfigByExt = getEntryConfigByExtMap(settings.contentEntryTypes); const contentEntryExts = [...contentEntryConfigByExt.keys()]; const dataEntryExts = getDataEntryExts(settings); diff --git a/packages/astro/src/core/config/schema.ts b/packages/astro/src/core/config/schema.ts index 72c632e6a35d..fc201841484c 100644 --- a/packages/astro/src/core/config/schema.ts +++ b/packages/astro/src/core/config/schema.ts @@ -81,7 +81,7 @@ export const ASTRO_CONFIG_DEFAULTS = { markdown: markdownConfigDefaults, vite: {}, legacy: { - legacyContentCollections: false, + collections: false, }, redirects: {}, security: { @@ -526,10 +526,10 @@ export const AstroConfigSchema = z.object({ .default({}), legacy: z .object({ - legacyContentCollections: z + collections: z .boolean() .optional() - .default(ASTRO_CONFIG_DEFAULTS.legacy.legacyContentCollections), + .default(ASTRO_CONFIG_DEFAULTS.legacy.collections), }) .default({}), }); diff --git a/packages/astro/src/types/public/config.ts b/packages/astro/src/types/public/config.ts index 2b9ec8d730fa..287e40aa6aa7 100644 --- a/packages/astro/src/types/public/config.ts +++ b/packages/astro/src/types/public/config.ts @@ -1544,21 +1544,21 @@ export interface AstroUserConfig { legacy?: { /** * @docs - * @name legacy.contentCollections + * @name legacy.collections * @type {boolean} * @default `false` * @version 5.0.0 * @description * Enable legacy behavior for content collections. - * If it enabled, data and content collections are handled using the legacy code instead of Content Layer API, including generating - * implicit collections for directories in `src/content`. Any collections with a loader defined will still use the Content Layer API. - * When enabled, you cannot use the glob loader for any collections in the `src/content` directory, and they will instead be handled by + * If enabled, data and content collections are handled using the legacy code instead of Content Layer API. + * Any collections with a loader defined will still use the Content Layer API. When enabled, you cannot use + * the glob loader for any collections in the `src/content` directory, and they will instead be handled by * the legacy code. * - * To migrate to the new Content Layer API, you should remove this flag and define a collection for any directories in `src/content` that - * you want to use as a collection. + * To migrate to the new Content Layer API, you should remove this flag and define a collection for any + * directories in `src/content` that you want to use as a collection. */ - legacyContentCollections?: boolean; + collections?: boolean; }; /** diff --git a/packages/astro/test/fixtures/content-mixed-errors/astro.config.mjs b/packages/astro/test/fixtures/content-mixed-errors/astro.config.mjs index 5a64519c9185..dee93fdedd98 100644 --- a/packages/astro/test/fixtures/content-mixed-errors/astro.config.mjs +++ b/packages/astro/test/fixtures/content-mixed-errors/astro.config.mjs @@ -3,6 +3,6 @@ import { defineConfig } from 'astro/config'; // https://astro.build/config export default defineConfig({ legacy: { - legacyContentCollections: true, + collections: true, } }); diff --git a/packages/astro/test/fixtures/content/astro.config.mjs b/packages/astro/test/fixtures/content/astro.config.mjs index c71bf7daf89b..71f3d1c8665d 100644 --- a/packages/astro/test/fixtures/content/astro.config.mjs +++ b/packages/astro/test/fixtures/content/astro.config.mjs @@ -5,6 +5,6 @@ export default defineConfig({ integrations: [mdx()], legacy: { // Enable legacy content collections as we test layout fields - legacyContentCollections: true + collections: true } }); diff --git a/packages/astro/test/fixtures/core-image-errors/astro.config.mjs b/packages/astro/test/fixtures/core-image-errors/astro.config.mjs index eb5a79d81404..cc0052535c1e 100644 --- a/packages/astro/test/fixtures/core-image-errors/astro.config.mjs +++ b/packages/astro/test/fixtures/core-image-errors/astro.config.mjs @@ -4,6 +4,6 @@ import { defineConfig } from 'astro/config'; export default defineConfig({ legacy: { // Needed because we're using image().refine() - legacyContentCollections: true, + collections: true, }, }); diff --git a/packages/astro/test/fixtures/core-image/astro.config.mjs b/packages/astro/test/fixtures/core-image/astro.config.mjs index de6a35ee6ae5..c628127e1fd5 100644 --- a/packages/astro/test/fixtures/core-image/astro.config.mjs +++ b/packages/astro/test/fixtures/core-image/astro.config.mjs @@ -4,6 +4,6 @@ import { defineConfig } from 'astro/config'; export default defineConfig({ legacy: { // Needed because we're using image().refine() - legacyContentCollections: true, + collections: true, }, }); diff --git a/packages/astro/test/fixtures/css-inline-stylesheets-2/astro.config.mjs b/packages/astro/test/fixtures/css-inline-stylesheets-2/astro.config.mjs index 08abca419b64..8ccbbc5b173c 100644 --- a/packages/astro/test/fixtures/css-inline-stylesheets-2/astro.config.mjs +++ b/packages/astro/test/fixtures/css-inline-stylesheets-2/astro.config.mjs @@ -3,6 +3,6 @@ import { defineConfig } from 'astro/config'; export default defineConfig({ legacy: { // Enable legacy content collections as we test layout fields - legacyContentCollections: true + collections: true } }); diff --git a/packages/astro/test/fixtures/css-inline-stylesheets-3/astro.config.mjs b/packages/astro/test/fixtures/css-inline-stylesheets-3/astro.config.mjs index 08abca419b64..8ccbbc5b173c 100644 --- a/packages/astro/test/fixtures/css-inline-stylesheets-3/astro.config.mjs +++ b/packages/astro/test/fixtures/css-inline-stylesheets-3/astro.config.mjs @@ -3,6 +3,6 @@ import { defineConfig } from 'astro/config'; export default defineConfig({ legacy: { // Enable legacy content collections as we test layout fields - legacyContentCollections: true + collections: true } }); diff --git a/packages/astro/test/fixtures/css-inline-stylesheets/astro.config.mjs b/packages/astro/test/fixtures/css-inline-stylesheets/astro.config.mjs index 08abca419b64..8ccbbc5b173c 100644 --- a/packages/astro/test/fixtures/css-inline-stylesheets/astro.config.mjs +++ b/packages/astro/test/fixtures/css-inline-stylesheets/astro.config.mjs @@ -3,6 +3,6 @@ import { defineConfig } from 'astro/config'; export default defineConfig({ legacy: { // Enable legacy content collections as we test layout fields - legacyContentCollections: true + collections: true } }); diff --git a/packages/astro/test/fixtures/legacy-content-collections/astro.config.mjs b/packages/astro/test/fixtures/legacy-content-collections/astro.config.mjs index b05538b001b9..cc7f6f2d28ff 100644 --- a/packages/astro/test/fixtures/legacy-content-collections/astro.config.mjs +++ b/packages/astro/test/fixtures/legacy-content-collections/astro.config.mjs @@ -8,6 +8,6 @@ export default defineConfig({ contentIntellisense: true, }, legacy: { - legacyContentCollections: true, + collections: true, }, }); diff --git a/packages/astro/test/fixtures/legacy-data-collections/astro.config.mjs b/packages/astro/test/fixtures/legacy-data-collections/astro.config.mjs index cceda36f2f93..c342649f77fb 100644 --- a/packages/astro/test/fixtures/legacy-data-collections/astro.config.mjs +++ b/packages/astro/test/fixtures/legacy-data-collections/astro.config.mjs @@ -3,6 +3,6 @@ import { defineConfig } from 'astro/config'; // https://astro.build/config export default defineConfig({ legacy: { - legacyContentCollections: true, + collections: true, }, }); diff --git a/packages/astro/test/legacy-content-collections.test.js b/packages/astro/test/legacy-content-collections.test.js index 8ccbcd85371c..6c5335dde583 100644 --- a/packages/astro/test/legacy-content-collections.test.js +++ b/packages/astro/test/legacy-content-collections.test.js @@ -222,7 +222,7 @@ describe('Legacy Content Collections', () => { fixture = await loadFixture({ root: './fixtures/content-static-paths-integration/', legacy: { - legacyContentCollections: true, + collections: true, }, }); await fixture.build(); @@ -259,7 +259,7 @@ describe('Legacy Content Collections', () => { const fixture = await loadFixture({ root: './fixtures/content with spaces in folder name/', legacy: { - legacyContentCollections: true, + collections: true, }, }); let error = null; @@ -276,7 +276,7 @@ describe('Legacy Content Collections', () => { const fixture = await loadFixture({ root: './fixtures/content-collections-with-config-mjs/', legacy: { - legacyContentCollections: true, + collections: true, }, }); let error; @@ -293,7 +293,7 @@ describe('Legacy Content Collections', () => { const fixture = await loadFixture({ root: './fixtures/content-collections-with-config-mts/', legacy: { - legacyContentCollections: true, + collections: true, }, }); let error; @@ -311,7 +311,7 @@ describe('Legacy Content Collections', () => { const fixture = await loadFixture({ root: './fixtures/content-collections-empty-md-file/', legacy: { - legacyContentCollections: true, + collections: true, }, }); let error; @@ -329,7 +329,7 @@ describe('Legacy Content Collections', () => { const fixture = await loadFixture({ root: './fixtures/content-collections-empty-dir/', legacy: { - legacyContentCollections: true, + collections: true, }, }); let error; @@ -360,7 +360,7 @@ describe('Legacy Content Collections', () => { plugins: [preventNodeBuiltinDependencyPlugin()], }, legacy: { - legacyContentCollections: true, + collections: true, }, }); await fixture.build(); @@ -406,7 +406,7 @@ describe('Legacy Content Collections', () => { fixture = await loadFixture({ root: './fixtures/content-collections-base/', legacy: { - legacyContentCollections: true, + collections: true, }, }); await fixture.build(); @@ -432,7 +432,7 @@ describe('Legacy Content Collections', () => { fixture = await loadFixture({ root: './fixtures/content-collections-mutation/', legacy: { - legacyContentCollections: true, + collections: true, }, }); await fixture.build(); From 0e310e97baf99ad2efe6e9e27db17d1ca67b3f9e Mon Sep 17 00:00:00 2001 From: Matt Kane Date: Wed, 2 Oct 2024 09:13:19 +0100 Subject: [PATCH 39/43] Apply suggestions from code review Co-authored-by: Sarah Rainsberger --- .changeset/quick-onions-leave.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.changeset/quick-onions-leave.md b/.changeset/quick-onions-leave.md index efe633fa29b7..d6d61ef166cd 100644 --- a/.changeset/quick-onions-leave.md +++ b/.changeset/quick-onions-leave.md @@ -2,13 +2,13 @@ 'astro': patch --- -Implements legacy content and data collections using `glob()` loader +Refactors legacy `content` and `data` collections to use the Content Layer API `glob()` loader for better performance and to support backwards compatibility. Also introduces the `legacy.collections` flag for projects that are unable to update to the new behavior immediately. :warning: **BREAKING CHANGE FOR LEGACY CONTENT COLLECTIONS** :warning: -By default, collections that use the the old types (content or data) are now implemented using the glob loader, with extra backward-compat handling. This includes any collection without a `loader` defined. +By default, collections that use the old types (`content` or `data`) and do not define a `loader` are now implemented under the hood using the Content Layer API's built-in `glob()` loader, with extra backward-compatibility handling. -Any legacy content collections are handled like this: +In order to achieve backwards compatibility with existing `content` collections, the following have been implemented: - a `glob` loader collection is defined, with patterns that match the previous handling (matches `src/content//**/*.md` and other content extensions depending on installed integrations, with underscore-prefixed files and folders ignored) - When used in the runtime, the entries have an ID based on the filename in the same format as legacy collections @@ -22,10 +22,10 @@ Legacy data collections are handled like this: - Entries have an ID that is not slugified - `getDataEntryById` is supported -While these emulate most of the features of legacy collections, they have these differences: +While this backwards compatibility implementation is able to emulate most of the features of legacy collections, there are some differences and limitations that may cause breaking changes to existing collections: - Implicit collections for folders in `src/content` are only defined if no other collections use content layer. If no content layer collections are defined, and there are folders in `src/content` that don't match collections in `src/content/config.ts` then collections will be auto-generated for them. This is not recommended, and a warning will be logged that this is deprecated. A collection should always be defined in `config.ts`. For legacy collections these can just be empty declarations: e.g.`const blog = defineCollection({})`. -- The `layout` field is not supported in Markdown +- The special `layout` field is not supported in Markdown collection entries. This property is intended only for standalone page files located in `src/pages/` and not likely to be in your collection entries. However, if you were using this property, you must now create dynamic routes that include your page styling. - Sort order of generated collections is non-deterministic and platform-dependent. - `image().refine()` is not supported - the key for `getEntry` is typed as `string`, rather than having types for every entry. From 5fb9247e9911e6de474eb35df082aa8181a33bcf Mon Sep 17 00:00:00 2001 From: Matt Kane Date: Wed, 2 Oct 2024 09:39:02 +0100 Subject: [PATCH 40/43] Changes from review --- .changeset/quick-onions-leave.md | 26 ++++++++++++++++++++------ 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/.changeset/quick-onions-leave.md b/.changeset/quick-onions-leave.md index d6d61ef166cd..083de13ef939 100644 --- a/.changeset/quick-onions-leave.md +++ b/.changeset/quick-onions-leave.md @@ -16,7 +16,7 @@ In order to achieve backwards compatibility with existing `content` collections, - A `render()` method is added to the entry, so they can be called using `entry.render()` - `getEntryBySlug` is supported -Legacy data collections are handled like this: +In order to achieve backwards compatibility with existing `data` collections, the following have been implemented: - a `glob` loader collection is defined, with patterns that match the previous handling (matches `src/content//**/*{.json,.yaml}` and other data extensions, with underscore-prefixed files and folders ignored) - Entries have an ID that is not slugified @@ -24,10 +24,24 @@ Legacy data collections are handled like this: While this backwards compatibility implementation is able to emulate most of the features of legacy collections, there are some differences and limitations that may cause breaking changes to existing collections: -- Implicit collections for folders in `src/content` are only defined if no other collections use content layer. If no content layer collections are defined, and there are folders in `src/content` that don't match collections in `src/content/config.ts` then collections will be auto-generated for them. This is not recommended, and a warning will be logged that this is deprecated. A collection should always be defined in `config.ts`. For legacy collections these can just be empty declarations: e.g.`const blog = defineCollection({})`. +- In previous versions of Astro, collexctions would be generated for all folders in `src/content`, even if they were not defined in `src/content/config.ts`. This behavior is now deprecated, and collections should always be defined in `src/content/config.ts`. For existing collections, these can just be empty declarations: e.g.`const blog = defineCollection({})`. To make it easier to migrate, for now Astro will still generate collections for folders without config, but *only* if no other collections use the new `loader()` syntax. A warning will be logged if this fallback behavior is used, and it will be removed in a future version. - The special `layout` field is not supported in Markdown collection entries. This property is intended only for standalone page files located in `src/pages/` and not likely to be in your collection entries. However, if you were using this property, you must now create dynamic routes that include your page styling. -- Sort order of generated collections is non-deterministic and platform-dependent. -- `image().refine()` is not supported -- the key for `getEntry` is typed as `string`, rather than having types for every entry. +- Sort order of generated collections is non-deterministic and platform-dependent. This means that if you are calling `getCollection`, the order in which they are returned may be different than before. If you need a specific order, you should sort the collection entries yourself. +- `image().refine()` is not supported. If you need to validate the properties of an image you will need to do this at runtime in your page or component. +- the `key` argument of `getEntry(collection, key)` is typed as `string`, rather than having types for every entry. + +A new legacy configuration flag `legacy.collections` is added for users that want to keep their current legacy (content and data) collections behavior (available in Astro v2 - v4), or who are not yet ready to update their projects: + +```js +// astro.config.mjs +import { defineConfig } from 'astro/config'; + +export default defineConfig({ + legacy: { + collections: true + } +}); +``` + +When set, no changes to your existing collections are necessary, and the restrictions on storing both new and old collections continue to exist: legacy collections (only) must continue to remain in `src/content/`, while new collections using a loader from the Content Layer API are forbidden in that folder. -A new config flag `legacy.collections` is added for users that need the old behavior. When set, collections in `src/content` are processed in the same way as before rather than being implemented with glob - including implicit collections. When set, content layer collections are forbidden in `src/content`, and will fail a build if defined. From 266da4d785f3fe3c527c712c7b88ea82df67ec0d Mon Sep 17 00:00:00 2001 From: Matt Kane Date: Wed, 2 Oct 2024 14:46:04 +0100 Subject: [PATCH 41/43] Apply suggestions from code review Co-authored-by: Sarah Rainsberger --- .changeset/quick-onions-leave.md | 6 ++-- packages/astro/src/types/public/config.ts | 36 +++++++++++++++++++---- 2 files changed, 33 insertions(+), 9 deletions(-) diff --git a/.changeset/quick-onions-leave.md b/.changeset/quick-onions-leave.md index 083de13ef939..a47e1317eea3 100644 --- a/.changeset/quick-onions-leave.md +++ b/.changeset/quick-onions-leave.md @@ -22,11 +22,11 @@ In order to achieve backwards compatibility with existing `data` collections, th - Entries have an ID that is not slugified - `getDataEntryById` is supported -While this backwards compatibility implementation is able to emulate most of the features of legacy collections, there are some differences and limitations that may cause breaking changes to existing collections: +While this backwards compatibility implementation is able to emulate most of the features of legacy collections, **there are some differences and limitations that may cause breaking changes to existing collections**: -- In previous versions of Astro, collexctions would be generated for all folders in `src/content`, even if they were not defined in `src/content/config.ts`. This behavior is now deprecated, and collections should always be defined in `src/content/config.ts`. For existing collections, these can just be empty declarations: e.g.`const blog = defineCollection({})`. To make it easier to migrate, for now Astro will still generate collections for folders without config, but *only* if no other collections use the new `loader()` syntax. A warning will be logged if this fallback behavior is used, and it will be removed in a future version. +- In previous versions of Astro, collections would be generated for all folders in `src/content/`, even if they were not defined in `src/content/config.ts`. This behavior is now deprecated, and collections should always be defined in `src/content/config.ts`. For existing collections, these can just be empty declarations (e.g. `const blog = defineCollection({})`) and Astro will implicitly define your legacy collection for you in a way that is compatible with the new loading behavior. - The special `layout` field is not supported in Markdown collection entries. This property is intended only for standalone page files located in `src/pages/` and not likely to be in your collection entries. However, if you were using this property, you must now create dynamic routes that include your page styling. -- Sort order of generated collections is non-deterministic and platform-dependent. This means that if you are calling `getCollection`, the order in which they are returned may be different than before. If you need a specific order, you should sort the collection entries yourself. +- Sort order of generated collections is non-deterministic and platform-dependent. This means that if you are calling `getCollection()`, the order in which entries are returned may be different than before. If you need a specific order, you should sort the collection entries yourself. - `image().refine()` is not supported. If you need to validate the properties of an image you will need to do this at runtime in your page or component. - the `key` argument of `getEntry(collection, key)` is typed as `string`, rather than having types for every entry. diff --git a/packages/astro/src/types/public/config.ts b/packages/astro/src/types/public/config.ts index 287e40aa6aa7..fa82c2004566 100644 --- a/packages/astro/src/types/public/config.ts +++ b/packages/astro/src/types/public/config.ts @@ -1550,13 +1550,37 @@ export interface AstroUserConfig { * @version 5.0.0 * @description * Enable legacy behavior for content collections. - * If enabled, data and content collections are handled using the legacy code instead of Content Layer API. - * Any collections with a loader defined will still use the Content Layer API. When enabled, you cannot use - * the glob loader for any collections in the `src/content` directory, and they will instead be handled by - * the legacy code. + * + * ```js + * // astro.config.mjs + * import { defineConfig } from 'astro/config'; + * export default defineConfig({ + * legacy: { + * collections: true + * } + * }); + * ``` + * + * If enabled, `data` and `content` collections (only) are handled using the legacy content collections implementation. Collections with a `loader` (only) will continue to use the Content Layer API instead. Both kinds of collections may exist in the same project, each using their respective implementations. + * + * The following limitations continue to exist: * - * To migrate to the new Content Layer API, you should remove this flag and define a collection for any - * directories in `src/content` that you want to use as a collection. + * - Any legacy (`type: 'content'` or `type: 'data'`) collections must continue to be located in the `src/content/` directory. + * - These legacy collections will not be transformed to implicitly use the `glob()` loader, and will instead be handled by legacy code. + * - Collections using the Content Layer API (with a `loader` defined) are forbidden in `src/content/`, but may exist anywhere else in your project. + * + * When you are ready to remove this flag and migrate to the new Content Layer API for your legacy collections, you must define a collection for any directories in `src/content/` that you want to continue to use as a collection. It is sufficient to declare an empty collection, and Astro will implicitly generate an appropriate definition for your legacy collections: + * + * ```js + * // src/content/config.ts + * import { defineCollection, z } from 'astro:content'; + * + * const blog = defineCollection({ }) + * + * export const collections = { blog }; + * ``` + * + */ collections?: boolean; }; From 7ebcf580c5000bba0e0a7a59b49f31b186ede9ce Mon Sep 17 00:00:00 2001 From: Matt Kane Date: Fri, 4 Oct 2024 13:29:32 +0100 Subject: [PATCH 42/43] lockfile --- pnpm-lock.yaml | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 104659bd27c3..408068937e90 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -678,9 +678,6 @@ importers: string-width: specifier: ^7.2.0 version: 7.2.0 - strip-ansi: - specifier: ^7.1.0 - version: 7.1.0 tinyexec: specifier: ^0.3.0 version: 0.3.0 @@ -2774,6 +2771,12 @@ importers: specifier: workspace:* version: link:../../.. + packages/astro/test/fixtures/core-image-data-url: + dependencies: + astro: + specifier: workspace:* + version: link:../../.. + packages/astro/test/fixtures/core-image-deletion: dependencies: '@astrojs/markdoc': @@ -4257,9 +4260,6 @@ importers: astro-scripts: specifier: workspace:* version: link:../../scripts - strip-ansi: - specifier: ^7.1.0 - version: 7.1.0 strip-json-comments: specifier: ^5.0.1 version: 5.0.1 @@ -4298,9 +4298,6 @@ importers: prompts: specifier: ^2.4.2 version: 2.4.2 - strip-ansi: - specifier: ^7.1.0 - version: 7.1.0 yargs-parser: specifier: ^21.1.1 version: 21.1.1 @@ -5561,9 +5558,6 @@ importers: astro-scripts: specifier: workspace:* version: link:../../scripts - strip-ansi: - specifier: ^7.1.0 - version: 7.1.0 scripts: dependencies: From bd9a5f537e2b446c76be6286f1d9e91b54442ff6 Mon Sep 17 00:00:00 2001 From: Matt Kane Date: Fri, 4 Oct 2024 15:08:43 +0100 Subject: [PATCH 43/43] lock --- pnpm-lock.yaml | 406 +++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 329 insertions(+), 77 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 408068937e90..0b51a09ab5a5 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -4,6 +4,10 @@ settings: autoInstallPeers: false excludeLinksFromLockfile: false +overrides: + vitest>vite: 6.0.0-beta.2 + vite-node>vite: 6.0.0-beta.2 + importers: .: @@ -691,11 +695,11 @@ importers: specifier: ^6.0.3 version: 6.0.3 vite: - specifier: ^5.4.8 - version: 5.4.8(@types/node@18.19.31)(sass@1.79.4) + specifier: 6.0.0-beta.2 + version: 6.0.0-beta.2(@types/node@18.19.31)(sass@1.79.4) vitefu: specifier: ^1.0.2 - version: 1.0.2(vite@5.4.8(@types/node@18.19.31)(sass@1.79.4)) + version: 1.0.2(vite@6.0.0-beta.2(@types/node@18.19.31)(sass@1.79.4)) which-pm: specifier: ^3.0.0 version: 3.0.0 @@ -4330,8 +4334,8 @@ importers: specifier: ^5.6.2 version: 5.6.2 vite: - specifier: ^5.4.8 - version: 5.4.8(@types/node@18.19.31)(sass@1.79.4) + specifier: 6.0.0-beta.2 + version: 6.0.0-beta.2(@types/node@18.19.31)(sass@1.79.4) packages/db/test/fixtures/basics: dependencies: @@ -4477,8 +4481,8 @@ importers: specifier: workspace:* version: link:../../../scripts vite: - specifier: ^5.4.8 - version: 5.4.8(@types/node@18.19.31)(sass@1.79.4) + specifier: 6.0.0-beta.2 + version: 6.0.0-beta.2(@types/node@18.19.31)(sass@1.79.4) packages/integrations/alpinejs/test/fixtures/basics: dependencies: @@ -4567,8 +4571,8 @@ importers: specifier: ^0.18.5 version: 0.18.5 vite: - specifier: ^5.4.8 - version: 5.4.8(@types/node@18.19.31)(sass@1.79.4) + specifier: 6.0.0-beta.2 + version: 6.0.0-beta.2(@types/node@18.19.31)(sass@1.79.4) packages/integrations/markdoc/test/fixtures/content-collections: dependencies: @@ -4817,8 +4821,8 @@ importers: specifier: ^11.0.5 version: 11.0.5 vite: - specifier: ^5.4.8 - version: 5.4.8(@types/node@18.19.31)(sass@1.79.4) + specifier: 6.0.0-beta.2 + version: 6.0.0-beta.2(@types/node@18.19.31)(sass@1.79.4) packages/integrations/mdx/test/fixtures/css-head-mdx: dependencies: @@ -5006,7 +5010,7 @@ importers: version: 7.24.7(@babel/core@7.25.2) '@preact/preset-vite': specifier: 2.8.2 - version: 2.8.2(@babel/core@7.25.2)(preact@10.24.1)(vite@5.4.8(@types/node@18.19.31)(sass@1.79.4)) + version: 2.8.2(@babel/core@7.25.2)(preact@10.24.1)(vite@6.0.0-beta.2(@types/node@18.19.31)(sass@1.79.4)) '@preact/signals': specifier: ^1.3.0 version: 1.3.0(preact@10.24.1) @@ -5031,7 +5035,7 @@ importers: dependencies: '@vitejs/plugin-react': specifier: ^4.3.2 - version: 4.3.2(vite@5.4.8(@types/node@18.19.31)(sass@1.79.4)) + version: 4.3.2(vite@6.0.0-beta.2(@types/node@18.19.31)(sass@1.79.4)) ultrahtml: specifier: ^1.5.3 version: 1.5.3 @@ -5058,8 +5062,8 @@ importers: specifier: ^18.3.1 version: 18.3.1(react@18.3.1) vite: - specifier: ^5.4.8 - version: 5.4.8(@types/node@18.19.31)(sass@1.79.4) + specifier: 6.0.0-beta.2 + version: 6.0.0-beta.2(@types/node@18.19.31)(sass@1.79.4) packages/integrations/react/test/fixtures/react-component: dependencies: @@ -5147,7 +5151,7 @@ importers: dependencies: vite-plugin-solid: specifier: ^2.10.2 - version: 2.10.2(solid-js@1.9.1)(vite@5.4.8(@types/node@18.19.31)(sass@1.79.4)) + version: 2.10.2(solid-js@1.9.1)(vite@6.0.0-beta.2(@types/node@18.19.31)(sass@1.79.4)) devDependencies: astro: specifier: workspace:* @@ -5159,14 +5163,14 @@ importers: specifier: ^1.9.1 version: 1.9.1 vite: - specifier: ^5.4.8 - version: 5.4.8(@types/node@18.19.31)(sass@1.79.4) + specifier: 6.0.0-beta.2 + version: 6.0.0-beta.2(@types/node@18.19.31)(sass@1.79.4) packages/integrations/svelte: dependencies: '@sveltejs/vite-plugin-svelte': specifier: ^3.1.2 - version: 3.1.2(svelte@4.2.19)(vite@5.4.8(@types/node@18.19.31)(sass@1.79.4)) + version: 3.1.2(svelte@4.2.19)(vite@6.0.0-beta.2(@types/node@18.19.31)(sass@1.79.4)) svelte2tsx: specifier: ^0.7.21 version: 0.7.21(svelte@4.2.19)(typescript@5.6.2) @@ -5181,8 +5185,8 @@ importers: specifier: ^4.2.19 version: 4.2.19 vite: - specifier: ^5.4.8 - version: 5.4.8(@types/node@18.19.31)(sass@1.79.4) + specifier: 6.0.0-beta.2 + version: 6.0.0-beta.2(@types/node@18.19.31)(sass@1.79.4) packages/integrations/tailwind: dependencies: @@ -5206,8 +5210,8 @@ importers: specifier: ^3.4.13 version: 3.4.13 vite: - specifier: ^5.4.8 - version: 5.4.8(@types/node@18.19.31)(sass@1.79.4) + specifier: 6.0.0-beta.2 + version: 6.0.0-beta.2(@types/node@18.19.31)(sass@1.79.4) packages/integrations/tailwind/test/fixtures/basic: dependencies: @@ -5224,16 +5228,16 @@ importers: dependencies: '@vitejs/plugin-vue': specifier: ^5.1.4 - version: 5.1.4(vite@5.4.8(@types/node@18.19.31)(sass@1.79.4))(vue@3.5.10(typescript@5.6.2)) + version: 5.1.4(vite@6.0.0-beta.2(@types/node@18.19.31)(sass@1.79.4))(vue@3.5.10(typescript@5.6.2)) '@vitejs/plugin-vue-jsx': specifier: ^4.0.1 - version: 4.0.1(vite@5.4.8(@types/node@18.19.31)(sass@1.79.4))(vue@3.5.10(typescript@5.6.2)) + version: 4.0.1(vite@6.0.0-beta.2(@types/node@18.19.31)(sass@1.79.4))(vue@3.5.10(typescript@5.6.2)) '@vue/compiler-sfc': specifier: ^3.5.10 version: 3.5.10 vite-plugin-vue-devtools: specifier: ^7.4.6 - version: 7.4.6(rollup@4.23.0)(vite@5.4.8(@types/node@18.19.31)(sass@1.79.4))(vue@3.5.10(typescript@5.6.2)) + version: 7.4.6(rollup@4.23.0)(vite@6.0.0-beta.2(@types/node@18.19.31)(sass@1.79.4))(vue@3.5.10(typescript@5.6.2)) devDependencies: astro: specifier: workspace:* @@ -5248,8 +5252,8 @@ importers: specifier: ^0.18.5 version: 0.18.5 vite: - specifier: ^5.4.8 - version: 5.4.8(@types/node@18.19.31)(sass@1.79.4) + specifier: 6.0.0-beta.2 + version: 6.0.0-beta.2(@types/node@18.19.31)(sass@1.79.4) vue: specifier: ^3.5.10 version: 3.5.10(typescript@5.6.2) @@ -5482,8 +5486,8 @@ importers: specifier: ^5.6.2 version: 5.6.2 vite: - specifier: ^5.4.8 - version: 5.4.8(@types/node@18.19.31)(sass@1.79.4) + specifier: 6.0.0-beta.2 + version: 6.0.0-beta.2(@types/node@18.19.31)(sass@1.79.4) packages/telemetry: dependencies: @@ -6268,138 +6272,282 @@ packages: cpu: [ppc64] os: [aix] + '@esbuild/aix-ppc64@0.24.0': + resolution: {integrity: sha512-WtKdFM7ls47zkKHFVzMz8opM7LkcsIp9amDUBIAWirg70RM71WRSjdILPsY5Uv1D42ZpUfaPILDlfactHgsRkw==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + '@esbuild/android-arm64@0.21.5': resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==} engines: {node: '>=12'} cpu: [arm64] os: [android] + '@esbuild/android-arm64@0.24.0': + resolution: {integrity: sha512-Vsm497xFM7tTIPYK9bNTYJyF/lsP590Qc1WxJdlB6ljCbdZKU9SY8i7+Iin4kyhV/KV5J2rOKsBQbB77Ab7L/w==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] + '@esbuild/android-arm@0.21.5': resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==} engines: {node: '>=12'} cpu: [arm] os: [android] + '@esbuild/android-arm@0.24.0': + resolution: {integrity: sha512-arAtTPo76fJ/ICkXWetLCc9EwEHKaeya4vMrReVlEIUCAUncH7M4bhMQ+M9Vf+FFOZJdTNMXNBrWwW+OXWpSew==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + '@esbuild/android-x64@0.21.5': resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==} engines: {node: '>=12'} cpu: [x64] os: [android] + '@esbuild/android-x64@0.24.0': + resolution: {integrity: sha512-t8GrvnFkiIY7pa7mMgJd7p8p8qqYIz1NYiAoKc75Zyv73L3DZW++oYMSHPRarcotTKuSs6m3hTOa5CKHaS02TQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + '@esbuild/darwin-arm64@0.21.5': resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==} engines: {node: '>=12'} cpu: [arm64] os: [darwin] + '@esbuild/darwin-arm64@0.24.0': + resolution: {integrity: sha512-CKyDpRbK1hXwv79soeTJNHb5EiG6ct3efd/FTPdzOWdbZZfGhpbcqIpiD0+vwmpu0wTIL97ZRPZu8vUt46nBSw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + '@esbuild/darwin-x64@0.21.5': resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==} engines: {node: '>=12'} cpu: [x64] os: [darwin] + '@esbuild/darwin-x64@0.24.0': + resolution: {integrity: sha512-rgtz6flkVkh58od4PwTRqxbKH9cOjaXCMZgWD905JOzjFKW+7EiUObfd/Kav+A6Gyud6WZk9w+xu6QLytdi2OA==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + '@esbuild/freebsd-arm64@0.21.5': resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==} engines: {node: '>=12'} cpu: [arm64] os: [freebsd] + '@esbuild/freebsd-arm64@0.24.0': + resolution: {integrity: sha512-6Mtdq5nHggwfDNLAHkPlyLBpE5L6hwsuXZX8XNmHno9JuL2+bg2BX5tRkwjyfn6sKbxZTq68suOjgWqCicvPXA==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + '@esbuild/freebsd-x64@0.21.5': resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==} engines: {node: '>=12'} cpu: [x64] os: [freebsd] + '@esbuild/freebsd-x64@0.24.0': + resolution: {integrity: sha512-D3H+xh3/zphoX8ck4S2RxKR6gHlHDXXzOf6f/9dbFt/NRBDIE33+cVa49Kil4WUjxMGW0ZIYBYtaGCa2+OsQwQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + '@esbuild/linux-arm64@0.21.5': resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==} engines: {node: '>=12'} cpu: [arm64] os: [linux] + '@esbuild/linux-arm64@0.24.0': + resolution: {integrity: sha512-TDijPXTOeE3eaMkRYpcy3LarIg13dS9wWHRdwYRnzlwlA370rNdZqbcp0WTyyV/k2zSxfko52+C7jU5F9Tfj1g==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + '@esbuild/linux-arm@0.21.5': resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==} engines: {node: '>=12'} cpu: [arm] os: [linux] + '@esbuild/linux-arm@0.24.0': + resolution: {integrity: sha512-gJKIi2IjRo5G6Glxb8d3DzYXlxdEj2NlkixPsqePSZMhLudqPhtZ4BUrpIuTjJYXxvF9njql+vRjB2oaC9XpBw==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + '@esbuild/linux-ia32@0.21.5': resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==} engines: {node: '>=12'} cpu: [ia32] os: [linux] + '@esbuild/linux-ia32@0.24.0': + resolution: {integrity: sha512-K40ip1LAcA0byL05TbCQ4yJ4swvnbzHscRmUilrmP9Am7//0UjPreh4lpYzvThT2Quw66MhjG//20mrufm40mA==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + '@esbuild/linux-loong64@0.21.5': resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==} engines: {node: '>=12'} cpu: [loong64] os: [linux] + '@esbuild/linux-loong64@0.24.0': + resolution: {integrity: sha512-0mswrYP/9ai+CU0BzBfPMZ8RVm3RGAN/lmOMgW4aFUSOQBjA31UP8Mr6DDhWSuMwj7jaWOT0p0WoZ6jeHhrD7g==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + '@esbuild/linux-mips64el@0.21.5': resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==} engines: {node: '>=12'} cpu: [mips64el] os: [linux] + '@esbuild/linux-mips64el@0.24.0': + resolution: {integrity: sha512-hIKvXm0/3w/5+RDtCJeXqMZGkI2s4oMUGj3/jM0QzhgIASWrGO5/RlzAzm5nNh/awHE0A19h/CvHQe6FaBNrRA==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + '@esbuild/linux-ppc64@0.21.5': resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==} engines: {node: '>=12'} cpu: [ppc64] os: [linux] + '@esbuild/linux-ppc64@0.24.0': + resolution: {integrity: sha512-HcZh5BNq0aC52UoocJxaKORfFODWXZxtBaaZNuN3PUX3MoDsChsZqopzi5UupRhPHSEHotoiptqikjN/B77mYQ==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + '@esbuild/linux-riscv64@0.21.5': resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==} engines: {node: '>=12'} cpu: [riscv64] os: [linux] + '@esbuild/linux-riscv64@0.24.0': + resolution: {integrity: sha512-bEh7dMn/h3QxeR2KTy1DUszQjUrIHPZKyO6aN1X4BCnhfYhuQqedHaa5MxSQA/06j3GpiIlFGSsy1c7Gf9padw==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + '@esbuild/linux-s390x@0.21.5': resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==} engines: {node: '>=12'} cpu: [s390x] os: [linux] + '@esbuild/linux-s390x@0.24.0': + resolution: {integrity: sha512-ZcQ6+qRkw1UcZGPyrCiHHkmBaj9SiCD8Oqd556HldP+QlpUIe2Wgn3ehQGVoPOvZvtHm8HPx+bH20c9pvbkX3g==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + '@esbuild/linux-x64@0.21.5': resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==} engines: {node: '>=12'} cpu: [x64] os: [linux] + '@esbuild/linux-x64@0.24.0': + resolution: {integrity: sha512-vbutsFqQ+foy3wSSbmjBXXIJ6PL3scghJoM8zCL142cGaZKAdCZHyf+Bpu/MmX9zT9Q0zFBVKb36Ma5Fzfa8xA==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + '@esbuild/netbsd-x64@0.21.5': resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==} engines: {node: '>=12'} cpu: [x64] os: [netbsd] + '@esbuild/netbsd-x64@0.24.0': + resolution: {integrity: sha512-hjQ0R/ulkO8fCYFsG0FZoH+pWgTTDreqpqY7UnQntnaKv95uP5iW3+dChxnx7C3trQQU40S+OgWhUVwCjVFLvg==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + + '@esbuild/openbsd-arm64@0.24.0': + resolution: {integrity: sha512-MD9uzzkPQbYehwcN583yx3Tu5M8EIoTD+tUgKF982WYL9Pf5rKy9ltgD0eUgs8pvKnmizxjXZyLt0z6DC3rRXg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + '@esbuild/openbsd-x64@0.21.5': resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==} engines: {node: '>=12'} cpu: [x64] os: [openbsd] + '@esbuild/openbsd-x64@0.24.0': + resolution: {integrity: sha512-4ir0aY1NGUhIC1hdoCzr1+5b43mw99uNwVzhIq1OY3QcEwPDO3B7WNXBzaKY5Nsf1+N11i1eOfFcq+D/gOS15Q==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + '@esbuild/sunos-x64@0.21.5': resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==} engines: {node: '>=12'} cpu: [x64] os: [sunos] + '@esbuild/sunos-x64@0.24.0': + resolution: {integrity: sha512-jVzdzsbM5xrotH+W5f1s+JtUy1UWgjU0Cf4wMvffTB8m6wP5/kx0KiaLHlbJO+dMgtxKV8RQ/JvtlFcdZ1zCPA==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + '@esbuild/win32-arm64@0.21.5': resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==} engines: {node: '>=12'} cpu: [arm64] os: [win32] + '@esbuild/win32-arm64@0.24.0': + resolution: {integrity: sha512-iKc8GAslzRpBytO2/aN3d2yb2z8XTVfNV0PjGlCxKo5SgWmNXx82I/Q3aG1tFfS+A2igVCY97TJ8tnYwpUWLCA==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + '@esbuild/win32-ia32@0.21.5': resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==} engines: {node: '>=12'} cpu: [ia32] os: [win32] + '@esbuild/win32-ia32@0.24.0': + resolution: {integrity: sha512-vQW36KZolfIudCcTnaTpmLQ24Ha1RjygBo39/aLkM2kmjkWmZGEJ5Gn9l5/7tzXA42QGIoWbICfg6KLLkIw6yw==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + '@esbuild/win32-x64@0.21.5': resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==} engines: {node: '>=12'} cpu: [x64] os: [win32] + '@esbuild/win32-x64@0.24.0': + resolution: {integrity: sha512-7IAFPrjSQIJrGsK6flwg7NFmwBoSTyF3rl7If0hNUFQU4ilTsEPL6GuMuU9BfIWVVGuRnuIidkSMC+c0Otu8IA==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + '@eslint-community/eslint-utils@4.4.0': resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -8095,6 +8243,11 @@ packages: engines: {node: '>=12'} hasBin: true + esbuild@0.24.0: + resolution: {integrity: sha512-FuLPevChGDshgSicjisSooU0cemp/sGXR841D5LHMB7mTVOmsEHcAxaH3irL53+8YDIeVNQEySh4DaYU/iuPqQ==} + engines: {node: '>=18'} + hasBin: true + escalade@3.1.2: resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} engines: {node: '>=6'} @@ -10641,8 +10794,8 @@ packages: peerDependencies: vue: '>=3.2.13' - vite@5.4.8: - resolution: {integrity: sha512-FqrItQ4DT1NC4zCUqMB4c4AZORMKIa0m8/URVCZ77OZ/QSNeJ54bU1vrFADbDsuwfIPcgknRkmqakQcgnL4GiQ==} + vite@6.0.0-beta.2: + resolution: {integrity: sha512-TdrjEhCnVNjT3kjohFhVJQL9V3SguxMAphP2RW085QbE0Xc+lRvql9l5hTIr/mttO2jhivYXEP4xfaIRPjzqiw==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true peerDependencies: @@ -11880,72 +12033,144 @@ snapshots: '@esbuild/aix-ppc64@0.21.5': optional: true + '@esbuild/aix-ppc64@0.24.0': + optional: true + '@esbuild/android-arm64@0.21.5': optional: true + '@esbuild/android-arm64@0.24.0': + optional: true + '@esbuild/android-arm@0.21.5': optional: true + '@esbuild/android-arm@0.24.0': + optional: true + '@esbuild/android-x64@0.21.5': optional: true + '@esbuild/android-x64@0.24.0': + optional: true + '@esbuild/darwin-arm64@0.21.5': optional: true + '@esbuild/darwin-arm64@0.24.0': + optional: true + '@esbuild/darwin-x64@0.21.5': optional: true + '@esbuild/darwin-x64@0.24.0': + optional: true + '@esbuild/freebsd-arm64@0.21.5': optional: true + '@esbuild/freebsd-arm64@0.24.0': + optional: true + '@esbuild/freebsd-x64@0.21.5': optional: true + '@esbuild/freebsd-x64@0.24.0': + optional: true + '@esbuild/linux-arm64@0.21.5': optional: true + '@esbuild/linux-arm64@0.24.0': + optional: true + '@esbuild/linux-arm@0.21.5': optional: true + '@esbuild/linux-arm@0.24.0': + optional: true + '@esbuild/linux-ia32@0.21.5': optional: true + '@esbuild/linux-ia32@0.24.0': + optional: true + '@esbuild/linux-loong64@0.21.5': optional: true + '@esbuild/linux-loong64@0.24.0': + optional: true + '@esbuild/linux-mips64el@0.21.5': optional: true + '@esbuild/linux-mips64el@0.24.0': + optional: true + '@esbuild/linux-ppc64@0.21.5': optional: true + '@esbuild/linux-ppc64@0.24.0': + optional: true + '@esbuild/linux-riscv64@0.21.5': optional: true + '@esbuild/linux-riscv64@0.24.0': + optional: true + '@esbuild/linux-s390x@0.21.5': optional: true + '@esbuild/linux-s390x@0.24.0': + optional: true + '@esbuild/linux-x64@0.21.5': optional: true + '@esbuild/linux-x64@0.24.0': + optional: true + '@esbuild/netbsd-x64@0.21.5': optional: true + '@esbuild/netbsd-x64@0.24.0': + optional: true + + '@esbuild/openbsd-arm64@0.24.0': + optional: true + '@esbuild/openbsd-x64@0.21.5': optional: true + '@esbuild/openbsd-x64@0.24.0': + optional: true + '@esbuild/sunos-x64@0.21.5': optional: true + '@esbuild/sunos-x64@0.24.0': + optional: true + '@esbuild/win32-arm64@0.21.5': optional: true + '@esbuild/win32-arm64@0.24.0': + optional: true + '@esbuild/win32-ia32@0.21.5': optional: true + '@esbuild/win32-ia32@0.24.0': + optional: true + '@esbuild/win32-x64@0.21.5': optional: true + '@esbuild/win32-x64@0.24.0': + optional: true + '@eslint-community/eslint-utils@4.4.0(eslint@9.11.1(jiti@1.21.0))': dependencies: eslint: 9.11.1(jiti@1.21.0) @@ -12256,12 +12481,12 @@ snapshots: '@polka/url@1.0.0-next.25': {} - '@preact/preset-vite@2.8.2(@babel/core@7.25.2)(preact@10.24.1)(vite@5.4.8(@types/node@18.19.31)(sass@1.79.4))': + '@preact/preset-vite@2.8.2(@babel/core@7.25.2)(preact@10.24.1)(vite@6.0.0-beta.2(@types/node@18.19.31)(sass@1.79.4))': dependencies: '@babel/core': 7.25.2 '@babel/plugin-transform-react-jsx': 7.25.2(@babel/core@7.25.2) '@babel/plugin-transform-react-jsx-development': 7.24.7(@babel/core@7.25.2) - '@prefresh/vite': 2.4.5(preact@10.24.1)(vite@5.4.8(@types/node@18.19.31)(sass@1.79.4)) + '@prefresh/vite': 2.4.5(preact@10.24.1)(vite@6.0.0-beta.2(@types/node@18.19.31)(sass@1.79.4)) '@rollup/pluginutils': 4.2.1 babel-plugin-transform-hook-names: 1.0.2(@babel/core@7.25.2) debug: 4.3.7 @@ -12271,7 +12496,7 @@ snapshots: resolve: 1.22.8 source-map: 0.7.4 stack-trace: 1.0.0-pre2 - vite: 5.4.8(@types/node@18.19.31)(sass@1.79.4) + vite: 6.0.0-beta.2(@types/node@18.19.31)(sass@1.79.4) transitivePeerDependencies: - preact - supports-color @@ -12291,7 +12516,7 @@ snapshots: '@prefresh/utils@1.2.0': {} - '@prefresh/vite@2.4.5(preact@10.24.1)(vite@5.4.8(@types/node@18.19.31)(sass@1.79.4))': + '@prefresh/vite@2.4.5(preact@10.24.1)(vite@6.0.0-beta.2(@types/node@18.19.31)(sass@1.79.4))': dependencies: '@babel/core': 7.25.2 '@prefresh/babel-plugin': 0.5.1 @@ -12299,7 +12524,7 @@ snapshots: '@prefresh/utils': 1.2.0 '@rollup/pluginutils': 4.2.1 preact: 10.24.1 - vite: 5.4.8(@types/node@18.19.31)(sass@1.79.4) + vite: 6.0.0-beta.2(@types/node@18.19.31)(sass@1.79.4) transitivePeerDependencies: - supports-color @@ -12397,26 +12622,26 @@ snapshots: dependencies: solid-js: 1.9.1 - '@sveltejs/vite-plugin-svelte-inspector@2.1.0(@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.19)(vite@5.4.8(@types/node@18.19.31)(sass@1.79.4)))(svelte@4.2.19)(vite@5.4.8(@types/node@18.19.31)(sass@1.79.4))': + '@sveltejs/vite-plugin-svelte-inspector@2.1.0(@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.19)(vite@6.0.0-beta.2(@types/node@18.19.31)(sass@1.79.4)))(svelte@4.2.19)(vite@6.0.0-beta.2(@types/node@18.19.31)(sass@1.79.4))': dependencies: - '@sveltejs/vite-plugin-svelte': 3.1.2(svelte@4.2.19)(vite@5.4.8(@types/node@18.19.31)(sass@1.79.4)) + '@sveltejs/vite-plugin-svelte': 3.1.2(svelte@4.2.19)(vite@6.0.0-beta.2(@types/node@18.19.31)(sass@1.79.4)) debug: 4.3.7 svelte: 4.2.19 - vite: 5.4.8(@types/node@18.19.31)(sass@1.79.4) + vite: 6.0.0-beta.2(@types/node@18.19.31)(sass@1.79.4) transitivePeerDependencies: - supports-color - '@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.19)(vite@5.4.8(@types/node@18.19.31)(sass@1.79.4))': + '@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.19)(vite@6.0.0-beta.2(@types/node@18.19.31)(sass@1.79.4))': dependencies: - '@sveltejs/vite-plugin-svelte-inspector': 2.1.0(@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.19)(vite@5.4.8(@types/node@18.19.31)(sass@1.79.4)))(svelte@4.2.19)(vite@5.4.8(@types/node@18.19.31)(sass@1.79.4)) + '@sveltejs/vite-plugin-svelte-inspector': 2.1.0(@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.19)(vite@6.0.0-beta.2(@types/node@18.19.31)(sass@1.79.4)))(svelte@4.2.19)(vite@6.0.0-beta.2(@types/node@18.19.31)(sass@1.79.4)) debug: 4.3.7 deepmerge: 4.3.1 kleur: 4.1.5 magic-string: 0.30.11 svelte: 4.2.19 svelte-hmr: 0.16.0(svelte@4.2.19) - vite: 5.4.8(@types/node@18.19.31)(sass@1.79.4) - vitefu: 0.2.5(vite@5.4.8(@types/node@18.19.31)(sass@1.79.4)) + vite: 6.0.0-beta.2(@types/node@18.19.31)(sass@1.79.4) + vitefu: 0.2.5(vite@6.0.0-beta.2(@types/node@18.19.31)(sass@1.79.4)) transitivePeerDependencies: - supports-color @@ -12749,30 +12974,30 @@ snapshots: '@ungap/structured-clone@1.2.0': {} - '@vitejs/plugin-react@4.3.2(vite@5.4.8(@types/node@18.19.31)(sass@1.79.4))': + '@vitejs/plugin-react@4.3.2(vite@6.0.0-beta.2(@types/node@18.19.31)(sass@1.79.4))': dependencies: '@babel/core': 7.25.2 '@babel/plugin-transform-react-jsx-self': 7.24.7(@babel/core@7.25.2) '@babel/plugin-transform-react-jsx-source': 7.24.7(@babel/core@7.25.2) '@types/babel__core': 7.20.5 react-refresh: 0.14.2 - vite: 5.4.8(@types/node@18.19.31)(sass@1.79.4) + vite: 6.0.0-beta.2(@types/node@18.19.31)(sass@1.79.4) transitivePeerDependencies: - supports-color - '@vitejs/plugin-vue-jsx@4.0.1(vite@5.4.8(@types/node@18.19.31)(sass@1.79.4))(vue@3.5.10(typescript@5.6.2))': + '@vitejs/plugin-vue-jsx@4.0.1(vite@6.0.0-beta.2(@types/node@18.19.31)(sass@1.79.4))(vue@3.5.10(typescript@5.6.2))': dependencies: '@babel/core': 7.25.2 '@babel/plugin-transform-typescript': 7.24.7(@babel/core@7.25.2) '@vue/babel-plugin-jsx': 1.2.2(@babel/core@7.25.2) - vite: 5.4.8(@types/node@18.19.31)(sass@1.79.4) + vite: 6.0.0-beta.2(@types/node@18.19.31)(sass@1.79.4) vue: 3.5.10(typescript@5.6.2) transitivePeerDependencies: - supports-color - '@vitejs/plugin-vue@5.1.4(vite@5.4.8(@types/node@18.19.31)(sass@1.79.4))(vue@3.5.10(typescript@5.6.2))': + '@vitejs/plugin-vue@5.1.4(vite@6.0.0-beta.2(@types/node@18.19.31)(sass@1.79.4))(vue@3.5.10(typescript@5.6.2))': dependencies: - vite: 5.4.8(@types/node@18.19.31)(sass@1.79.4) + vite: 6.0.0-beta.2(@types/node@18.19.31)(sass@1.79.4) vue: 3.5.10(typescript@5.6.2) '@vitest/expect@2.1.1': @@ -12782,13 +13007,13 @@ snapshots: chai: 5.1.1 tinyrainbow: 1.2.0 - '@vitest/mocker@2.1.1(vite@5.4.8(@types/node@18.19.31)(sass@1.79.4))': + '@vitest/mocker@2.1.1(vite@6.0.0-beta.2(@types/node@18.19.31)(sass@1.79.4))': dependencies: '@vitest/spy': 2.1.1 estree-walker: 3.0.3 magic-string: 0.30.11 optionalDependencies: - vite: 5.4.8(@types/node@18.19.31)(sass@1.79.4) + vite: 6.0.0-beta.2(@types/node@18.19.31)(sass@1.79.4) '@vitest/pretty-format@2.1.1': dependencies: @@ -12937,14 +13162,14 @@ snapshots: '@vue/compiler-dom': 3.5.10 '@vue/shared': 3.5.10 - '@vue/devtools-core@7.4.6(vite@5.4.8(@types/node@18.19.31)(sass@1.79.4))(vue@3.5.10(typescript@5.6.2))': + '@vue/devtools-core@7.4.6(vite@6.0.0-beta.2(@types/node@18.19.31)(sass@1.79.4))(vue@3.5.10(typescript@5.6.2))': dependencies: '@vue/devtools-kit': 7.4.6 '@vue/devtools-shared': 7.4.6 mitt: 3.0.1 nanoid: 3.3.7 pathe: 1.1.2 - vite-hot-client: 0.2.3(vite@5.4.8(@types/node@18.19.31)(sass@1.79.4)) + vite-hot-client: 0.2.3(vite@6.0.0-beta.2(@types/node@18.19.31)(sass@1.79.4)) vue: 3.5.10(typescript@5.6.2) transitivePeerDependencies: - vite @@ -13682,6 +13907,33 @@ snapshots: '@esbuild/win32-ia32': 0.21.5 '@esbuild/win32-x64': 0.21.5 + esbuild@0.24.0: + optionalDependencies: + '@esbuild/aix-ppc64': 0.24.0 + '@esbuild/android-arm': 0.24.0 + '@esbuild/android-arm64': 0.24.0 + '@esbuild/android-x64': 0.24.0 + '@esbuild/darwin-arm64': 0.24.0 + '@esbuild/darwin-x64': 0.24.0 + '@esbuild/freebsd-arm64': 0.24.0 + '@esbuild/freebsd-x64': 0.24.0 + '@esbuild/linux-arm': 0.24.0 + '@esbuild/linux-arm64': 0.24.0 + '@esbuild/linux-ia32': 0.24.0 + '@esbuild/linux-loong64': 0.24.0 + '@esbuild/linux-mips64el': 0.24.0 + '@esbuild/linux-ppc64': 0.24.0 + '@esbuild/linux-riscv64': 0.24.0 + '@esbuild/linux-s390x': 0.24.0 + '@esbuild/linux-x64': 0.24.0 + '@esbuild/netbsd-x64': 0.24.0 + '@esbuild/openbsd-arm64': 0.24.0 + '@esbuild/openbsd-x64': 0.24.0 + '@esbuild/sunos-x64': 0.24.0 + '@esbuild/win32-arm64': 0.24.0 + '@esbuild/win32-ia32': 0.24.0 + '@esbuild/win32-x64': 0.24.0 + escalade@3.1.2: {} escape-html@1.0.3: {} @@ -16778,16 +17030,16 @@ snapshots: '@types/unist': 3.0.3 vfile-message: 4.0.2 - vite-hot-client@0.2.3(vite@5.4.8(@types/node@18.19.31)(sass@1.79.4)): + vite-hot-client@0.2.3(vite@6.0.0-beta.2(@types/node@18.19.31)(sass@1.79.4)): dependencies: - vite: 5.4.8(@types/node@18.19.31)(sass@1.79.4) + vite: 6.0.0-beta.2(@types/node@18.19.31)(sass@1.79.4) vite-node@2.1.1(@types/node@18.19.31)(sass@1.79.4): dependencies: cac: 6.7.14 debug: 4.3.7 pathe: 1.1.2 - vite: 5.4.8(@types/node@18.19.31)(sass@1.79.4) + vite: 6.0.0-beta.2(@types/node@18.19.31)(sass@1.79.4) transitivePeerDependencies: - '@types/node' - less @@ -16799,7 +17051,7 @@ snapshots: - supports-color - terser - vite-plugin-inspect@0.8.7(rollup@4.23.0)(vite@5.4.8(@types/node@18.19.31)(sass@1.79.4)): + vite-plugin-inspect@0.8.7(rollup@4.23.0)(vite@6.0.0-beta.2(@types/node@18.19.31)(sass@1.79.4)): dependencies: '@antfu/utils': 0.7.10 '@rollup/pluginutils': 5.1.2(rollup@4.23.0) @@ -16810,12 +17062,12 @@ snapshots: perfect-debounce: 1.0.0 picocolors: 1.1.0 sirv: 2.0.4 - vite: 5.4.8(@types/node@18.19.31)(sass@1.79.4) + vite: 6.0.0-beta.2(@types/node@18.19.31)(sass@1.79.4) transitivePeerDependencies: - rollup - supports-color - vite-plugin-solid@2.10.2(solid-js@1.9.1)(vite@5.4.8(@types/node@18.19.31)(sass@1.79.4)): + vite-plugin-solid@2.10.2(solid-js@1.9.1)(vite@6.0.0-beta.2(@types/node@18.19.31)(sass@1.79.4)): dependencies: '@babel/core': 7.25.2 '@types/babel__core': 7.20.5 @@ -16823,28 +17075,28 @@ snapshots: merge-anything: 5.1.7 solid-js: 1.9.1 solid-refresh: 0.6.3(solid-js@1.9.1) - vite: 5.4.8(@types/node@18.19.31)(sass@1.79.4) - vitefu: 0.2.5(vite@5.4.8(@types/node@18.19.31)(sass@1.79.4)) + vite: 6.0.0-beta.2(@types/node@18.19.31)(sass@1.79.4) + vitefu: 0.2.5(vite@6.0.0-beta.2(@types/node@18.19.31)(sass@1.79.4)) transitivePeerDependencies: - supports-color - vite-plugin-vue-devtools@7.4.6(rollup@4.23.0)(vite@5.4.8(@types/node@18.19.31)(sass@1.79.4))(vue@3.5.10(typescript@5.6.2)): + vite-plugin-vue-devtools@7.4.6(rollup@4.23.0)(vite@6.0.0-beta.2(@types/node@18.19.31)(sass@1.79.4))(vue@3.5.10(typescript@5.6.2)): dependencies: - '@vue/devtools-core': 7.4.6(vite@5.4.8(@types/node@18.19.31)(sass@1.79.4))(vue@3.5.10(typescript@5.6.2)) + '@vue/devtools-core': 7.4.6(vite@6.0.0-beta.2(@types/node@18.19.31)(sass@1.79.4))(vue@3.5.10(typescript@5.6.2)) '@vue/devtools-kit': 7.4.6 '@vue/devtools-shared': 7.4.6 execa: 8.0.1 sirv: 2.0.4 - vite: 5.4.8(@types/node@18.19.31)(sass@1.79.4) - vite-plugin-inspect: 0.8.7(rollup@4.23.0)(vite@5.4.8(@types/node@18.19.31)(sass@1.79.4)) - vite-plugin-vue-inspector: 5.2.0(vite@5.4.8(@types/node@18.19.31)(sass@1.79.4)) + vite: 6.0.0-beta.2(@types/node@18.19.31)(sass@1.79.4) + vite-plugin-inspect: 0.8.7(rollup@4.23.0)(vite@6.0.0-beta.2(@types/node@18.19.31)(sass@1.79.4)) + vite-plugin-vue-inspector: 5.2.0(vite@6.0.0-beta.2(@types/node@18.19.31)(sass@1.79.4)) transitivePeerDependencies: - '@nuxt/kit' - rollup - supports-color - vue - vite-plugin-vue-inspector@5.2.0(vite@5.4.8(@types/node@18.19.31)(sass@1.79.4)): + vite-plugin-vue-inspector@5.2.0(vite@6.0.0-beta.2(@types/node@18.19.31)(sass@1.79.4)): dependencies: '@babel/core': 7.25.2 '@babel/plugin-proposal-decorators': 7.24.1(@babel/core@7.25.2) @@ -16855,7 +17107,7 @@ snapshots: '@vue/compiler-dom': 3.5.3 kolorist: 1.8.0 magic-string: 0.30.11 - vite: 5.4.8(@types/node@18.19.31)(sass@1.79.4) + vite: 6.0.0-beta.2(@types/node@18.19.31)(sass@1.79.4) transitivePeerDependencies: - supports-color @@ -16864,9 +17116,9 @@ snapshots: svgo: 3.2.0 vue: 3.5.10(typescript@5.6.2) - vite@5.4.8(@types/node@18.19.31)(sass@1.79.4): + vite@6.0.0-beta.2(@types/node@18.19.31)(sass@1.79.4): dependencies: - esbuild: 0.21.5 + esbuild: 0.24.0 postcss: 8.4.47 rollup: 4.23.0 optionalDependencies: @@ -16874,18 +17126,18 @@ snapshots: fsevents: 2.3.3 sass: 1.79.4 - vitefu@0.2.5(vite@5.4.8(@types/node@18.19.31)(sass@1.79.4)): + vitefu@0.2.5(vite@6.0.0-beta.2(@types/node@18.19.31)(sass@1.79.4)): optionalDependencies: - vite: 5.4.8(@types/node@18.19.31)(sass@1.79.4) + vite: 6.0.0-beta.2(@types/node@18.19.31)(sass@1.79.4) - vitefu@1.0.2(vite@5.4.8(@types/node@18.19.31)(sass@1.79.4)): + vitefu@1.0.2(vite@6.0.0-beta.2(@types/node@18.19.31)(sass@1.79.4)): optionalDependencies: - vite: 5.4.8(@types/node@18.19.31)(sass@1.79.4) + vite: 6.0.0-beta.2(@types/node@18.19.31)(sass@1.79.4) vitest@2.1.1(@types/node@18.19.31)(jsdom@23.2.0)(sass@1.79.4): dependencies: '@vitest/expect': 2.1.1 - '@vitest/mocker': 2.1.1(vite@5.4.8(@types/node@18.19.31)(sass@1.79.4)) + '@vitest/mocker': 2.1.1(vite@6.0.0-beta.2(@types/node@18.19.31)(sass@1.79.4)) '@vitest/pretty-format': 2.1.1 '@vitest/runner': 2.1.1 '@vitest/snapshot': 2.1.1 @@ -16900,7 +17152,7 @@ snapshots: tinyexec: 0.3.0 tinypool: 1.0.0 tinyrainbow: 1.2.0 - vite: 5.4.8(@types/node@18.19.31)(sass@1.79.4) + vite: 6.0.0-beta.2(@types/node@18.19.31)(sass@1.79.4) vite-node: 2.1.1(@types/node@18.19.31)(sass@1.79.4) why-is-node-running: 2.3.0 optionalDependencies: