diff --git a/package.json b/package.json index 125276c..6f4321d 100644 --- a/package.json +++ b/package.json @@ -40,6 +40,7 @@ "npm-run-all": "^4.1.5", "octokit": "^3.1.0", "pagefind": "^0.12.0", + "prettier-plugin-astro": "^0.12.2", "remark": "^14.0.3", "remark-frontmatter": "^4.0.1", "rimraf": "^5.0.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 3673556..9abccff 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,4 +1,4 @@ -lockfileVersion: '6.1' +lockfileVersion: '6.0' settings: autoInstallPeers: true @@ -70,6 +70,9 @@ devDependencies: pagefind: specifier: ^0.12.0 version: 0.12.0 + prettier-plugin-astro: + specifier: ^0.12.2 + version: 0.12.2 remark: specifier: ^14.0.3 version: 14.0.3 @@ -110,6 +113,10 @@ packages: '@jridgewell/gen-mapping': 0.3.3 '@jridgewell/trace-mapping': 0.3.19 + /@astrojs/compiler@1.8.2: + resolution: {integrity: sha512-o/ObKgtMzl8SlpIdzaxFnt7SATKPxu4oIP/1NL+HDJRzxfJcAkOTAb/ZKMRyULbz4q+1t2/DAebs2Z1QairkZw==} + dev: true + /@astrojs/compiler@2.0.1: resolution: {integrity: sha512-DfBR7Cf+tOgQ4n7TIgTtU5x5SEA/08DNshpEPcT+91A0KbBlmUOYMBM/O6qAaHkmVo1KIoXQYhAmfdTT1zx9PQ==} @@ -4879,6 +4886,21 @@ packages: engines: {node: '>= 0.8.0'} dev: true + /prettier-plugin-astro@0.12.2: + resolution: {integrity: sha512-1OXSEht27zrnX7rCa0bEpLdspeumFW4hnj4+JzPuG5bRlSOAhD0rbXBNZfRD9q0Qbr00EcCcnjd6k6M8q+GfTA==} + engines: {node: ^14.15.0 || >=16.0.0} + dependencies: + '@astrojs/compiler': 1.8.2 + prettier: 3.1.1 + sass-formatter: 0.7.8 + dev: true + + /prettier@3.1.1: + resolution: {integrity: sha512-22UbSzg8luF4UuZtzgiUOfcGM8s4tjBv6dJRT7j275NXsy2jb4aJa4NNveul5x4eqlF1wuhuR2RElK71RvmVaw==} + engines: {node: '>=14'} + hasBin: true + dev: true + /prismjs@1.29.0: resolution: {integrity: sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==} engines: {node: '>=6'} @@ -5174,6 +5196,10 @@ packages: dependencies: queue-microtask: 1.2.3 + /s.color@0.0.15: + resolution: {integrity: sha512-AUNrbEUHeKY8XsYr/DYpl+qk5+aM+DChopnWOPEzn8YKzOhv4l2zH6LzZms3tOZP3wwdOyc0RmTciyi46HLIuA==} + dev: true + /sade@1.8.1: resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==} engines: {node: '>=6'} @@ -5201,6 +5227,12 @@ packages: is-regex: 1.1.4 dev: true + /sass-formatter@0.7.8: + resolution: {integrity: sha512-7fI2a8THglflhhYis7k06eUf92VQuJoXzEs2KRP0r1bluFxKFvLx0Ns7c478oYGM0fPfrr846ZRWVi2MAgHt9Q==} + dependencies: + suf-log: 2.5.3 + dev: true + /sax@1.2.4: resolution: {integrity: sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==} dev: false @@ -5544,6 +5576,12 @@ packages: pirates: 4.0.6 ts-interface-checker: 0.1.13 + /suf-log@2.5.3: + resolution: {integrity: sha512-KvC8OPjzdNOe+xQ4XWJV2whQA0aM1kGVczMQ8+dStAO6KfEB140JEVQ9dE76ONZ0/Ylf67ni4tILPJB41U0eow==} + dependencies: + s.color: 0.0.15 + dev: true + /supports-color@5.5.0: resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} engines: {node: '>=4'} diff --git a/src/content/config.ts b/src/content/config.ts index 39f8e05..0a38051 100644 --- a/src/content/config.ts +++ b/src/content/config.ts @@ -17,7 +17,11 @@ const blog = defineCollection({ heroImage: z.string().optional(), draft: z.boolean().optional(), filepath: z.string().optional(), // Added from add-filepath plugin - tags: z.array(z.string().or(z.null())).optional(), + tags: z + .array(z.any()) + .default([]) + .nullable() + .transform((arr) => (arr ? arr.map((item) => String(item)) : [])), }), }) @@ -42,18 +46,25 @@ const secondBrain = defineCollection({ draft: z.boolean().optional(), filepath: z.string(), // Added from add-filepath plugin tags: z - .array( - z - .string() - .refine( - (tag) => !/\s/.test(tag), - (tag) => ({ - message: `Tag "${tag}" cannot include whitespaces`, - }) - ) - .or(z.null()) - ) - .optional(), + .array(z.any()) + .nullable() + .default([]) + .transform((arr) => (arr ? arr.map((item) => String(item).trim()) : [])) + .refine( + (arr) => + arr.every( + (item) => + z + .string() + .refine((value) => !/\s/.test(value), { + message: "String must not contain whitespaces", + }) + .safeParse(item).success + ), + { + message: "Array elements must not contain whitespaces", + } + ), }), }) diff --git a/src/layouts/SecondBrainPost.astro b/src/layouts/SecondBrainPost.astro index 40580d6..f67cf56 100644 --- a/src/layouts/SecondBrainPost.astro +++ b/src/layouts/SecondBrainPost.astro @@ -36,7 +36,7 @@ const { slug } = Astro.params { - tags && tags.length && ( + tags && tags.length ? (
{tags.map( (tag) => @@ -50,6 +50,8 @@ const { slug } = Astro.params ) )}
+ ) : ( + "" ) } diff --git a/src/pages/second-brain/index.astro b/src/pages/second-brain/index.astro index 6b012dd..ea83156 100644 --- a/src/pages/second-brain/index.astro +++ b/src/pages/second-brain/index.astro @@ -34,7 +34,9 @@ const secondBrainPosts = await getCollection("second-brain", ({ data }) => { { secondBrainPosts.map((post) => (
  • - {post.data.title || post.id} + + {post.data.title || post.id} +
  • )) }