diff --git a/.changeset/icy-keys-tickle.md b/.changeset/icy-keys-tickle.md new file mode 100644 index 000000000000..61bfa33cd4b9 --- /dev/null +++ b/.changeset/icy-keys-tickle.md @@ -0,0 +1,28 @@ +--- +'astro': minor +'@astrojs/markdown-remark': patch +--- + +Adds support for TOML files to Astro's built-in `glob()` and `file()` content loaders. + +In Astro 5.2, Astro added support for using TOML frontmatter in Markdown files instead of YAML. However, if you wanted to use TOML files as local content collection entries themselves, you needed to write your own loader. + +Astro 5.12 now directly supports loading data from TOML files in content collections in both the `glob()` and the `file()` loaders. + +If you had added your own TOML content parser for the `file()` loader, you can now remove it as this functionality is now included: + +```diff +// src/content.config.ts +import { defineCollection } from "astro:content"; +import { file } from "astro/loaders"; +- import { parse as parseToml } from "toml"; +const dogs = defineCollection({ +- loader: file("src/data/dogs.toml", { parser: (text) => parseToml(text) }), ++ loader: file("src/data/dogs.toml") + schema: /* ... */ +}) +``` + +Note that TOML does not support top-level arrays. Instead, the `file()` loader considers each top-level table to be an independent entry. The table header is populated in the `id` field of the entry object. + +See Astro's [content collections guide](https://docs.astro.build/en/guides/content-collections/#built-in-loaders) for more information on using the built-in content loaders. \ No newline at end of file diff --git a/packages/astro/package.json b/packages/astro/package.json index cdcc69cc0db6..0301eb47deb7 100644 --- a/packages/astro/package.json +++ b/packages/astro/package.json @@ -159,6 +159,7 @@ "rehype": "^13.0.2", "semver": "^7.7.1", "shiki": "^3.2.1", + "smol-toml": "^1.3.4", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.12", "tsconfck": "^3.1.5", diff --git a/packages/astro/src/content/loaders/file.ts b/packages/astro/src/content/loaders/file.ts index 494f4bae255e..c4057177d3ea 100644 --- a/packages/astro/src/content/loaders/file.ts +++ b/packages/astro/src/content/loaders/file.ts @@ -1,6 +1,7 @@ import { existsSync, promises as fs } from 'node:fs'; import { fileURLToPath } from 'node:url'; import yaml from 'js-yaml'; +import toml from 'smol-toml'; import { FileGlobNotSupported, FileParserNotFound } from '../../core/errors/errors-data.js'; import { AstroError } from '../../core/errors/index.js'; import { posixRelative } from '../utils.js'; @@ -36,6 +37,8 @@ export function file(fileName: string, options?: FileOptions): Loader { yaml.load(text, { filename: fileName, }); + } else if (ext === 'toml') { + parse = toml.parse; } if (options?.parser) parse = options.parser; diff --git a/packages/astro/src/core/config/settings.ts b/packages/astro/src/core/config/settings.ts index be5e19118d85..07245e701577 100644 --- a/packages/astro/src/core/config/settings.ts +++ b/packages/astro/src/core/config/settings.ts @@ -1,6 +1,7 @@ import path from 'node:path'; import { fileURLToPath, pathToFileURL } from 'node:url'; import yaml from 'js-yaml'; +import toml from 'smol-toml'; import { getContentPaths } from '../../content/index.js'; import createPreferences from '../../preferences/index.js'; import type { AstroSettings } from '../../types/astro.js'; @@ -9,7 +10,12 @@ import { markdownContentEntryType } from '../../vite-plugin-markdown/content-ent import { getDefaultClientDirectives } from '../client-directive/index.js'; import { SUPPORTED_MARKDOWN_FILE_EXTENSIONS } from './../constants.js'; import { AstroError, AstroErrorData } from '../errors/index.js'; -import { formatYAMLException, isYAMLException } from '../errors/utils.js'; +import { + formatTOMLError, + formatYAMLException, + isTOMLError, + isYAMLException, +} from '../errors/utils.js'; import { AstroTimer } from './timer.js'; import { loadTSConfig } from './tsconfig.js'; @@ -100,6 +106,38 @@ export function createBaseSettings(config: AstroConfig): AstroSettings { } }, }, + { + extensions: ['.toml'], + getEntryInfo({ contents, fileUrl }) { + try { + const data = toml.parse(contents); + const rawData = contents; + + return { data, rawData }; + } catch (e) { + const pathRelToContentDir = path.relative( + fileURLToPath(contentDir), + fileURLToPath(fileUrl), + ); + const formattedError = isTOMLError(e) + ? formatTOMLError(e) + : new Error('contains invalid TOML.'); + + throw new AstroError({ + ...AstroErrorData.DataCollectionEntryParseError, + message: AstroErrorData.DataCollectionEntryParseError.message( + pathRelToContentDir, + formattedError.message, + ), + stack: formattedError.stack, + location: + 'loc' in formattedError + ? { file: fileUrl.pathname, ...formattedError.loc } + : { file: fileUrl.pathname }, + }); + } + }, + }, ], renderers: [], scripts: [], diff --git a/packages/astro/src/core/errors/errors-data.ts b/packages/astro/src/core/errors/errors-data.ts index 9d8ddad31a08..2354f66377cb 100644 --- a/packages/astro/src/core/errors/errors-data.ts +++ b/packages/astro/src/core/errors/errors-data.ts @@ -1805,7 +1805,7 @@ export const ContentCollectionTypeMismatchError = { * @docs * @message `COLLECTION_ENTRY_NAME` failed to parse. * @description - * Collection entries of `type: 'data'` must return an object with valid JSON (for `.json` entries) or YAML (for `.yaml` entries). + * Collection entries of `type: 'data'` must return an object with valid JSON (for `.json` entries), YAML (for `.yaml` entries) or TOML (for `.toml` entries).' */ export const DataCollectionEntryParseError = { name: 'DataCollectionEntryParseError', @@ -1813,7 +1813,7 @@ export const DataCollectionEntryParseError = { message(entryId: string, errorMessage: string) { return `**${entryId}** failed to parse: ${errorMessage}`; }, - hint: 'Ensure your data entry is an object with valid JSON (for `.json` entries) or YAML (for `.yaml` entries).', + hint: 'Ensure your data entry is an object with valid JSON (for `.json` entries), YAML (for `.yaml` entries) or TOML (for `.toml` entries).', } satisfies ErrorData; /** * @docs @@ -1855,7 +1855,7 @@ export const UnsupportedConfigTransformError = { * @see * - [Passing a `parser` to the `file` loader](https://docs.astro.build/en/guides/content-collections/#parser-function) * @description - * The `file` loader can’t determine which parser to use. Please provide a custom parser (e.g. `toml.parse` or `csv-parse`) to create a collection from your file type. + * The `file` loader can’t determine which parser to use. Please provide a custom parser (e.g. `csv-parse`) to create a collection from your file type. */ export const FileParserNotFound = { name: 'FileParserNotFound', diff --git a/packages/astro/src/core/errors/utils.ts b/packages/astro/src/core/errors/utils.ts index 6754656b9134..1e0cd5c53b19 100644 --- a/packages/astro/src/core/errors/utils.ts +++ b/packages/astro/src/core/errors/utils.ts @@ -1,4 +1,5 @@ import type { YAMLException } from 'js-yaml'; +import type { TomlError } from 'smol-toml'; import type { ErrorPayload as ViteErrorPayload } from 'vite'; import type { SSRError } from '../../types/public/internal.js'; @@ -86,6 +87,21 @@ export function formatYAMLException(e: YAMLException): ViteErrorPayload['err'] { }; } +export function isTOMLError(err: unknown): err is TomlError { + return err instanceof Error && err.name === 'TomlError'; +} + +/** Format TOML exceptions as Vite errors */ +export function formatTOMLError(e: TomlError): ViteErrorPayload['err'] { + return { + name: e.name, + id: e.name, + loc: { line: e.line + 1, column: e.column }, + message: e.message, + stack: e.stack ?? '', + }; +} + /** Coalesce any throw variable to an Error instance. */ export function createSafeError(err: any): Error { if (err instanceof Error || (err?.name && err.message)) { diff --git a/packages/astro/test/content-layer.test.js b/packages/astro/test/content-layer.test.js index dfb5ef8e14f9..5778bbf43da5 100644 --- a/packages/astro/test/content-layer.test.js +++ b/packages/astro/test/content-layer.test.js @@ -137,7 +137,7 @@ describe('Content Layer', () => { assert.ok(json.hasOwnProperty('tomlLoader')); assert.ok(Array.isArray(json.tomlLoader)); - const ids = json.tomlLoader.map((item) => item.data.id); + const ids = json.tomlLoader.map((item) => item.id); assert.deepEqual(ids, [ 'crown', 'nikes-on-my-feet', @@ -150,6 +150,41 @@ describe('Content Layer', () => { ]); }); + it('Returns csv `file()` loader collection', async () => { + assert.ok(json.hasOwnProperty('csvLoader')); + assert.ok(Array.isArray(json.csvLoader)); + + const ids = json.csvLoader.map((item) => item.data.id); + assert.deepEqual(ids, [ + 'lavender', + 'rose', + 'sunflower', + 'basil', + 'thyme', + 'sage', + 'daisy', + 'marigold', + 'chamomile', + 'fern', + ]); + }); + + it('Returns yaml `glob()` loader collection', async () => { + assert.ok(json.hasOwnProperty('numbersYaml')); + assert.ok(Array.isArray(json.numbersYaml)); + + const titles = json.numbersYaml.map((item) => item.data.title).sort(); + assert.deepEqual(titles, ['One', 'Three', 'Two']); + }); + + it('Returns toml `glob()` loader collection', async () => { + assert.ok(json.hasOwnProperty('numbersToml')); + assert.ok(Array.isArray(json.numbersToml)); + + const titles = json.numbersToml.map((item) => item.data.title).sort(); + assert.deepEqual(titles, ['One', 'Three', 'Two']); + }); + it('Returns nested json `file()` loader collection', async () => { assert.ok(json.hasOwnProperty('nestedJsonLoader')); assert.ok(Array.isArray(json.nestedJsonLoader)); diff --git a/packages/astro/test/fixtures/content-layer/package.json b/packages/astro/test/fixtures/content-layer/package.json index 4057b1c35a64..fc73ce6f7ac7 100644 --- a/packages/astro/test/fixtures/content-layer/package.json +++ b/packages/astro/test/fixtures/content-layer/package.json @@ -4,7 +4,6 @@ "private": true, "dependencies": { "astro": "workspace:*", - "@astrojs/mdx": "workspace:*", - "toml": "^3.0.0" + "@astrojs/mdx": "workspace:*" } } diff --git a/packages/astro/test/fixtures/content-layer/src/content.config.ts b/packages/astro/test/fixtures/content-layer/src/content.config.ts index 0a9c1654ecb2..17c785b8e879 100644 --- a/packages/astro/test/fixtures/content-layer/src/content.config.ts +++ b/packages/astro/test/fixtures/content-layer/src/content.config.ts @@ -1,7 +1,6 @@ import { defineCollection, z, reference } from 'astro:content'; import { file, glob } from 'astro/loaders'; import { loader } from './loaders/post-loader.js'; -import { parse as parseToml } from 'toml'; import { readFile } from 'fs/promises'; const blog = defineCollection({ @@ -130,6 +129,22 @@ const birds = defineCollection({ }), }); +const plants = defineCollection({ + loader: file('src/data/plants.csv', { + parser: (text) => { + const [headers, ...rows] = text.trim().split('\n'); + return rows.map(row => Object.fromEntries( + headers.split(',').map((h, i) => [h, row.split(',')[i]]) + )); + }, + }), + schema: z.object({ + id: z.string(), + common_name: z.string(), + scientific_name: z.string(), + color: z.string(), + }), +}); const probes = defineCollection({ loader: glob({ pattern: ['*.md', '!voyager-*'], base: 'src/data/space-probes' }), @@ -148,6 +163,14 @@ const numbers = defineCollection({ loader: glob({ pattern: 'src/data/glob-data/*', base: '.' }), }); +const numbersYaml = defineCollection({ + loader: glob({ pattern: 'src/data/glob-yaml/*', base: '.' }), +}); + +const numbersToml = defineCollection({ + loader: glob({ pattern: 'src/data/glob-toml/*', base: '.' }), +}); + const notADirectory = defineCollection({ loader: glob({ pattern: '*', base: 'src/nonexistent' }), }); @@ -215,18 +238,16 @@ const increment = defineCollection({ }); const artists = defineCollection({ - loader: file('src/data/music.toml', { parser: (text) => parseToml(text).artists }), + loader: file('src/data/artists.toml'), schema: z.object({ - id: z.string(), name: z.string(), genre: z.string().array(), }), }); const songs = defineCollection({ - loader: file('src/data/music.toml', { parser: (text) => parseToml(text).songs }), + loader: file('src/data/songs.toml'), schema: z.object({ - id: z.string(), name: z.string(), artists: z.array(reference('artists')), }), @@ -238,7 +259,10 @@ export const collections = { cats, fish, birds, + plants, numbers, + numbersToml, + numbersYaml, spacecraft, increment, images, diff --git a/packages/astro/test/fixtures/content-layer/src/data/artists.toml b/packages/astro/test/fixtures/content-layer/src/data/artists.toml new file mode 100644 index 000000000000..0416db01083f --- /dev/null +++ b/packages/astro/test/fixtures/content-layer/src/data/artists.toml @@ -0,0 +1,39 @@ +[kendrick-lamar] +name = "Kendrick Lamar" +genre = ["Hip-Hop", "Rap"] + +[mac-miller] +name = "Mac Miller" +genre = ["Hip-Hop", "Rap"] + +[jid] +name = "JID" +genre = ["Hip-Hop", "Rap"] + +[yasiin-bey] +name = "Yasiin Bey" +genre = ["Hip-Hop", "Rap"] + +[kanye-west] +name = "Kanye West" +genre = ["Hip-Hop", "Rap"] + +[jay-z] +name = "JAY-Z" +genre = ["Hip-Hop", "Rap"] + +[j-ivy] +name = "J. Ivy" +genre = ["Spoken Word", "Rap"] + +[frank-ocean] +name = "Frank Ocean" +genre = ["R&B", "Hip-Hop"] + +[the-dream] +name = "The-Dream" +genre = ["R&B", "Hip-Hop"] + +[baby-keem] +name = "Baby Keem" +genre = ["Hip-Hop", "Rap"] diff --git a/packages/astro/test/fixtures/content-layer/src/data/glob-toml/one.toml b/packages/astro/test/fixtures/content-layer/src/data/glob-toml/one.toml new file mode 100644 index 000000000000..ed1091c715de --- /dev/null +++ b/packages/astro/test/fixtures/content-layer/src/data/glob-toml/one.toml @@ -0,0 +1 @@ +title = "One" diff --git a/packages/astro/test/fixtures/content-layer/src/data/glob-toml/three.toml b/packages/astro/test/fixtures/content-layer/src/data/glob-toml/three.toml new file mode 100644 index 000000000000..0d5b539a695d --- /dev/null +++ b/packages/astro/test/fixtures/content-layer/src/data/glob-toml/three.toml @@ -0,0 +1 @@ +title = "Three" diff --git a/packages/astro/test/fixtures/content-layer/src/data/glob-toml/two.toml b/packages/astro/test/fixtures/content-layer/src/data/glob-toml/two.toml new file mode 100644 index 000000000000..c0b3a2daa6f9 --- /dev/null +++ b/packages/astro/test/fixtures/content-layer/src/data/glob-toml/two.toml @@ -0,0 +1 @@ +title = "Two" diff --git a/packages/astro/test/fixtures/content-layer/src/data/glob-yaml/one.yaml b/packages/astro/test/fixtures/content-layer/src/data/glob-yaml/one.yaml new file mode 100644 index 000000000000..5284a5e4030a --- /dev/null +++ b/packages/astro/test/fixtures/content-layer/src/data/glob-yaml/one.yaml @@ -0,0 +1 @@ +title: "One" diff --git a/packages/astro/test/fixtures/content-layer/src/data/glob-yaml/three.yaml b/packages/astro/test/fixtures/content-layer/src/data/glob-yaml/three.yaml new file mode 100644 index 000000000000..ee252ce4c9c3 --- /dev/null +++ b/packages/astro/test/fixtures/content-layer/src/data/glob-yaml/three.yaml @@ -0,0 +1 @@ +title: "Three" diff --git a/packages/astro/test/fixtures/content-layer/src/data/glob-yaml/two.yaml b/packages/astro/test/fixtures/content-layer/src/data/glob-yaml/two.yaml new file mode 100644 index 000000000000..0592298c91ab --- /dev/null +++ b/packages/astro/test/fixtures/content-layer/src/data/glob-yaml/two.yaml @@ -0,0 +1 @@ +title: "Two" diff --git a/packages/astro/test/fixtures/content-layer/src/data/music.toml b/packages/astro/test/fixtures/content-layer/src/data/music.toml deleted file mode 100644 index 89e15c9bbbf5..000000000000 --- a/packages/astro/test/fixtures/content-layer/src/data/music.toml +++ /dev/null @@ -1,89 +0,0 @@ -[[artists]] -id = "kendrick-lamar" -name = "Kendrick Lamar" -genre = ["Hip-Hop", "Rap"] - -[[artists]] -id = "mac-miller" -name = "Mac Miller" -genre = ["Hip-Hop", "Rap"] - -[[artists]] -id = "jid" -name = "JID" -genre = ["Hip-Hop", "Rap"] - -[[artists]] -id = "yasiin-bey" -name = "Yasiin Bey" -genre = ["Hip-Hop", "Rap"] - -[[artists]] -id = "kanye-west" -name = "Kanye West" -genre = ["Hip-Hop", "Rap"] - -[[artists]] -id = "jay-z" -name = "JAY-Z" -genre = ["Hip-Hop", "Rap"] - -[[artists]] -id = "j-ivy" -name = "J. Ivy" -genre = ["Spoken Word", "Rap"] - -[[artists]] -id = "frank-ocean" -name = "Frank Ocean" -genre = ["R&B", "Hip-Hop"] - -[[artists]] -id = "the-dream" -name = "The-Dream" -genre = ["R&B", "Hip-Hop"] - -[[artists]] -id = "baby-keem" -name = "Baby Keem" -genre = ["Hip-Hop", "Rap"] - -[[songs]] -id = "crown" -name = "Crown" -artists = ["kendrick-lamar"] - -[[songs]] -id = "nikes-on-my-feet" -name = "Nikes on My Feet" -artists = ["mac-miller"] - -[[songs]] -id = "stars" -name = "Stars" -artists = ["jid", "yasiin-bey"] - -[[songs]] -id = "never-let-me-down" -name = "Never Let Me Down" -artists = ["kanye-west", "jay-z", "j-ivy"] - -[[songs]] -id = "no-church-in-the-wild" -name = "No Church In The Wild" -artists = ["jay-z", "kanye-west", "frank-ocean", "the-dream"] - -[[songs]] -id = "family-ties" -name = "family ties" -artists = ["kendrick-lamar", "baby-keem"] - -[[songs]] -id = "somebody" -name = "Somebody" -artists = ["jid"] - -[[songs]] -id = "honest" -name = "HONEST" -artists = ["baby-keem"] diff --git a/packages/astro/test/fixtures/content-layer/src/data/plants.csv b/packages/astro/test/fixtures/content-layer/src/data/plants.csv new file mode 100644 index 000000000000..89e66b9426f1 --- /dev/null +++ b/packages/astro/test/fixtures/content-layer/src/data/plants.csv @@ -0,0 +1,11 @@ +id,common_name,scientific_name,color +lavender,Lavender,Lavandula,Purple +rose,Rose,Rosa,Red +sunflower,Sunflower,Helianthus annuus,Yellow +basil,Basil,Ocimum,Green +thyme,Thyme,Thymus vulgaris,Green +sage,Sage,Salvia officinalis,Gray-Green +daisy,Daisy,Bellis,White +marigold,Marigold,Tagetes,Orange +chamomile,Chamomile,Matricaria chamomilla,White-Yellow +fern,Fern,Tracheophyta,Green diff --git a/packages/astro/test/fixtures/content-layer/src/data/songs.toml b/packages/astro/test/fixtures/content-layer/src/data/songs.toml new file mode 100644 index 000000000000..2aae72868a2e --- /dev/null +++ b/packages/astro/test/fixtures/content-layer/src/data/songs.toml @@ -0,0 +1,31 @@ +[crown] +name = "Crown" +artists = ["kendrick-lamar"] + +[nikes-on-my-feet] +name = "Nikes on My Feet" +artists = ["mac-miller"] + +[stars] +name = "Stars" +artists = ["jid", "yasiin-bey"] + +[never-let-me-down] +name = "Never Let Me Down" +artists = ["kanye-west", "jay-z", "j-ivy"] + +[no-church-in-the-wild] +name = "No Church In The Wild" +artists = ["jay-z", "kanye-west", "frank-ocean", "the-dream"] + +[family-ties] +name = "family ties" +artists = ["kendrick-lamar", "baby-keem"] + +[somebody] +name = "Somebody" +artists = ["jid"] + +[honest] +name = "HONEST" +artists = ["baby-keem"] diff --git a/packages/astro/test/fixtures/content-layer/src/pages/collections.json.js b/packages/astro/test/fixtures/content-layer/src/pages/collections.json.js index 3fa3543e6e0d..1eda4dddab61 100644 --- a/packages/astro/test/fixtures/content-layer/src/pages/collections.json.js +++ b/packages/astro/test/fixtures/content-layer/src/pages/collections.json.js @@ -33,8 +33,14 @@ export async function GET() { const nestedJsonLoader = await getCollection('birds'); + const csvLoader = await getCollection('plants'); + const numbers = await getCollection('numbers'); + const numbersYaml = await getCollection('numbersYaml'); + + const numbersToml = await getCollection('numbersToml'); + return new Response( devalue.stringify({ customLoader, @@ -47,11 +53,14 @@ export async function GET() { referencedEntry, increment, numbers, + numbersYaml, + numbersToml, images, probes, yamlLoader, tomlLoader, nestedJsonLoader, + csvLoader, atlantis, spacecraft: spacecraft.map(({id}) => id).sort((a, b) => a.localeCompare(b)), }) diff --git a/packages/astro/test/fixtures/data-collections-schema/src/content/func/it.toml b/packages/astro/test/fixtures/data-collections-schema/src/content/func/it.toml new file mode 100644 index 000000000000..bc9e1a80097e --- /dev/null +++ b/packages/astro/test/fixtures/data-collections-schema/src/content/func/it.toml @@ -0,0 +1,3 @@ +[homepage] +greeting = "Ciao mondo!" +preamble = "Benvenuti nel futuro dei contenuti." \ No newline at end of file diff --git a/packages/astro/test/fixtures/data-collections-schema/src/content/i18n/it.toml b/packages/astro/test/fixtures/data-collections-schema/src/content/i18n/it.toml new file mode 100644 index 000000000000..bc9e1a80097e --- /dev/null +++ b/packages/astro/test/fixtures/data-collections-schema/src/content/i18n/it.toml @@ -0,0 +1,3 @@ +[homepage] +greeting = "Ciao mondo!" +preamble = "Benvenuti nel futuro dei contenuti." \ No newline at end of file diff --git a/packages/astro/test/fixtures/data-collections-schema/src/content/image/it.toml b/packages/astro/test/fixtures/data-collections-schema/src/content/image/it.toml new file mode 100644 index 000000000000..f7d33e661e5c --- /dev/null +++ b/packages/astro/test/fixtures/data-collections-schema/src/content/image/it.toml @@ -0,0 +1,4 @@ +[homepage] +greeting = "Ciao mondo!" +preamble = "Benvenuti nel futuro dei contenuti." +image = "/src/assets/hero.jpg" \ No newline at end of file diff --git a/packages/markdown/remark/package.json b/packages/markdown/remark/package.json index cd6879fd8aa2..6026fcf04162 100644 --- a/packages/markdown/remark/package.json +++ b/packages/markdown/remark/package.json @@ -47,7 +47,7 @@ "remark-rehype": "^11.1.2", "remark-smartypants": "^3.0.2", "shiki": "^3.2.1", - "smol-toml": "^1.3.1", + "smol-toml": "^1.3.4", "unified": "^11.0.5", "unist-util-remove-position": "^5.0.0", "unist-util-visit": "^5.0.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 13b4506d403f..7b7f907b4a06 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -601,6 +601,9 @@ importers: shiki: specifier: ^3.2.1 version: 3.2.1 + smol-toml: + specifier: ^1.3.4 + version: 1.3.4 tinyexec: specifier: ^0.3.2 version: 0.3.2 @@ -2702,9 +2705,6 @@ importers: astro: specifier: workspace:* version: link:../../.. - toml: - specifier: ^3.0.0 - version: 3.0.0 packages/astro/test/fixtures/content-layer-markdoc: dependencies: @@ -6217,8 +6217,8 @@ importers: specifier: ^3.2.1 version: 3.2.1 smol-toml: - specifier: ^1.3.1 - version: 1.3.1 + specifier: ^1.3.4 + version: 1.3.4 unified: specifier: ^11.0.5 version: 11.0.5 @@ -12590,8 +12590,8 @@ packages: resolution: {integrity: sha512-TzobUYoEft/xBtb2voRPryAUIvYguG0V7Tt3de79I1WfXgCwelqVsGuZSnu3GFGRZhXR90AeEYIM+icuB/S06Q==} hasBin: true - smol-toml@1.3.1: - resolution: {integrity: sha512-tEYNll18pPKHroYSmLLrksq233j021G0giwW7P3D24jC54pQ5W5BXMsQ/Mvw1OJCmEYDgY+lrzT+3nNUtoNfXQ==} + smol-toml@1.3.4: + resolution: {integrity: sha512-UOPtVuYkzYGee0Bd2Szz8d2G3RfMfJ2t3qVdZUAozZyAk+a0Sxa+QKix0YCwjL/A1RR0ar44nCxaoN9FxdJGwA==} engines: {node: '>= 18'} solid-js@1.9.7: @@ -18540,7 +18540,7 @@ snapshots: picocolors: 1.1.1 picomatch: 4.0.2 pretty-ms: 9.2.0 - smol-toml: 1.3.1 + smol-toml: 1.3.4 strip-json-comments: 5.0.1 typescript: 5.8.3 zod: 3.24.2 @@ -20768,7 +20768,7 @@ snapshots: smartypants@0.2.2: {} - smol-toml@1.3.1: {} + smol-toml@1.3.4: {} solid-js@1.9.7: dependencies: