diff --git a/api/_build.mjs b/api/_build.mjs index c039dab1..0eb2d0fd 100644 --- a/api/_build.mjs +++ b/api/_build.mjs @@ -1,12 +1,11 @@ import grayMatter from 'gray-matter' import { iterateOnDirectory, writeFile } from '../scripts/global.mjs' -import { getMatchOrReturn } from './_utils.js' const metadata = {} iterateOnDirectory('../src/content/blog', (path, contents) => { - const slug = getMatchOrReturn(path, /\/[^/]*$/, 0).slice(1, -3) + const slug = path.match(/\/[^/]*$/)?.[0].slice(1, -3) const { data } = grayMatter(contents) const date = new Date(data.date) metadata[slug] = { diff --git a/api/_parser.ts b/api/_parser.ts index 6978b77f..8bc07f77 100644 --- a/api/_parser.ts +++ b/api/_parser.ts @@ -1,7 +1,5 @@ import { IncomingMessage } from 'http' -import { getMatchOrReturn } from './_utils' - import { metadata } from './metadata.json' export interface ParsedReqs { @@ -11,7 +9,7 @@ export interface ParsedReqs { } export function parseReqs(req: IncomingMessage) { - const slug = getMatchOrReturn(req.url || '', /\/([^/]*).jpg$/, 1) + const slug = req.url?.match(/\/([^/]*).jpg$/)?.[1] if (slug === 'og') { return { diff --git a/api/_utils.js b/api/_utils.js deleted file mode 100644 index 6621ff6a..00000000 --- a/api/_utils.js +++ /dev/null @@ -1,8 +0,0 @@ -/** - * @type {(haystack: string, needle: string | RegExp, index: number ) => string} getMatchOrReturn - */ -module.exports.getMatchOrReturn = (haystack, needle, index = 0) => { - const matches = haystack.match(needle) - if (!matches || !matches.length || matches.length < index + 1) return '' - return matches[index] -} diff --git a/nuxt.config.ts b/nuxt.config.ts index 8a925a66..6ebf2d80 100644 --- a/nuxt.config.ts +++ b/nuxt.config.ts @@ -1,3 +1,4 @@ +import { useNuxt } from '@nuxt/kit' import { defineNuxtConfig } from 'nuxt' export default defineNuxtConfig({ @@ -85,10 +86,43 @@ export default defineNuxtConfig({ }, modules: [ + 'magic-regexp/nuxt', '@nuxtjs/tailwindcss', '@nuxtjs/color-mode', '@nuxt/content', 'vue-plausible', '~/modules/critters', + function () { + const nuxt = useNuxt() + let dirs: string[] + nuxt.hook('components:dirs', _dirs => { + dirs = _dirs.map(d => (typeof d === 'string' ? d : d.path)) + }) + // Exclude non-prose content components + nuxt.hook('components:extend', components => { + for (const component of components) { + if ( + 'filePath' in component && + component.filePath.includes('@nuxt/content') + ) { + if (!component.filePath.includes('/Prose/')) { + components.splice(components.indexOf(component), 1) + } + } + } + }) + // Use single components chunk + nuxt.hook('vite:extendConfig', config => { + if (Array.isArray(config.build.rollupOptions.output)) return + config.build.rollupOptions.output.manualChunks = id => { + if ( + id.includes('@nuxt/content') && + dirs.some(dir => id.includes(dir)) + ) { + return 'components-chunk' + } + } + }) + }, ], }) diff --git a/package.json b/package.json index 0fd7fd4e..6496dc56 100644 --- a/package.json +++ b/package.json @@ -22,7 +22,7 @@ }, "dependencies": { "@nuxt/content": "npm:@nuxt/content-edge@2.1.0-27658086.63749d2", - "@nuxt/kit": "npm:@nuxt/kit-edge@3.0.0-rc.6-27658796.fbe2459", + "@nuxt/kit": "npm:@nuxt/kit-edge@3.0.0-rc.6-27661960.60656df", "critters": "^0.0.16", "prism-themes": "1.9.0", "vue-plausible": "^1.3.2" @@ -46,14 +46,15 @@ "happy-dom": "^6.0.4", "husky": "8.0.1", "lint-staged": "13.0.3", - "nuxt": "npm:nuxt3@3.0.0-rc.6-27658796.fbe2459", + "magic-regexp": "^0.4.1", + "nuxt": "npm:nuxt3@3.0.0-rc.6-27661960.60656df", "postcss-html": "1.5.0", "prettier": "2.7.1", "stylelint": "14.9.1", "stylelint-config-prettier": "9.0.3", "stylelint-config-recommended-vue": "1.4.0", "stylelint-config-standard": "26.0.0", - "vitest": "^0.20.3" + "vitest": "^0.21.0" }, "packageManager": "pnpm@7.8.0" } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d92dc6ce..91d60f9f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -7,7 +7,7 @@ importers: '@commitlint/cli': 17.0.3 '@commitlint/config-conventional': 17.0.3 '@nuxt/content': npm:@nuxt/content-edge@2.1.0-27658086.63749d2 - '@nuxt/kit': npm:@nuxt/kit-edge@3.0.0-rc.6-27658796.fbe2459 + '@nuxt/kit': npm:@nuxt/kit-edge@3.0.0-rc.6-27661960.60656df '@nuxtjs/color-mode': 3.1.4 '@nuxtjs/eslint-config': 10.0.0 '@nuxtjs/eslint-config-typescript': 10.0.0 @@ -25,7 +25,8 @@ importers: happy-dom: ^6.0.4 husky: 8.0.1 lint-staged: 13.0.3 - nuxt: npm:nuxt3@3.0.0-rc.6-27658796.fbe2459 + magic-regexp: ^0.4.1 + nuxt: npm:nuxt3@3.0.0-rc.6-27661960.60656df postcss-html: 1.5.0 prettier: 2.7.1 prism-themes: 1.9.0 @@ -33,11 +34,11 @@ importers: stylelint-config-prettier: 9.0.3 stylelint-config-recommended-vue: 1.4.0 stylelint-config-standard: 26.0.0 - vitest: ^0.20.3 + vitest: ^0.21.0 vue-plausible: ^1.3.2 dependencies: '@nuxt/content': /@nuxt/content-edge/2.1.0-27658086.63749d2 - '@nuxt/kit': /@nuxt/kit-edge/3.0.0-rc.6-27658796.fbe2459 + '@nuxt/kit': /@nuxt/kit-edge/3.0.0-rc.6-27661960.60656df critters: 0.0.16 prism-themes: 1.9.0 vue-plausible: 1.3.2 @@ -60,14 +61,15 @@ importers: happy-dom: 6.0.4 husky: 8.0.1 lint-staged: 13.0.3 - nuxt: /nuxt3/3.0.0-rc.6-27658796.fbe2459 + magic-regexp: 0.4.1 + nuxt: /nuxt3/3.0.0-rc.6-27661960.60656df postcss-html: 1.5.0 prettier: 2.7.1 stylelint: 14.9.1 stylelint-config-prettier: 9.0.3_stylelint@14.9.1 stylelint-config-recommended-vue: 1.4.0_5rxrxgs7sjazj2ve56ds3kmipi stylelint-config-standard: 26.0.0_stylelint@14.9.1 - vitest: 0.20.3_c8@7.12.0+happy-dom@6.0.4 + vitest: 0.21.0_c8@7.12.0+happy-dom@6.0.4 api: specifiers: @@ -111,13 +113,13 @@ packages: dependencies: '@ampproject/remapping': 2.2.0 '@babel/code-frame': 7.18.6 - '@babel/generator': 7.18.10 + '@babel/generator': 7.18.12 '@babel/helper-compilation-targets': 7.18.9_@babel+core@7.18.10 '@babel/helper-module-transforms': 7.18.9 '@babel/helpers': 7.18.9 - '@babel/parser': 7.18.10 + '@babel/parser': 7.18.11 '@babel/template': 7.18.10 - '@babel/traverse': 7.18.10 + '@babel/traverse': 7.18.11 '@babel/types': 7.18.10 convert-source-map: 1.8.0 debug: 4.3.4 @@ -127,8 +129,8 @@ packages: transitivePeerDependencies: - supports-color - /@babel/generator/7.18.10: - resolution: {integrity: sha512-0+sW7e3HjQbiHbj1NeU/vN8ornohYlacAfZIaXhdoGweQqgcNy69COVciYYqEXJ/v+9OBA7Frxm4CVAuNqKeNA==} + /@babel/generator/7.18.12: + resolution: {integrity: sha512-dfQ8ebCN98SvyL7IxNMCUtZQSq5R7kxgN+r8qYTGDmmSion1hX2C0zq2yo1bsCDhXixokv1SAWTZUMYbO/V5zg==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.18.10 @@ -212,7 +214,7 @@ packages: '@babel/helper-split-export-declaration': 7.18.6 '@babel/helper-validator-identifier': 7.18.6 '@babel/template': 7.18.10 - '@babel/traverse': 7.18.10 + '@babel/traverse': 7.18.11 '@babel/types': 7.18.10 transitivePeerDependencies: - supports-color @@ -236,7 +238,7 @@ packages: '@babel/helper-environment-visitor': 7.18.9 '@babel/helper-member-expression-to-functions': 7.18.9 '@babel/helper-optimise-call-expression': 7.18.6 - '@babel/traverse': 7.18.10 + '@babel/traverse': 7.18.11 '@babel/types': 7.18.10 transitivePeerDependencies: - supports-color @@ -271,7 +273,7 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@babel/template': 7.18.10 - '@babel/traverse': 7.18.10 + '@babel/traverse': 7.18.11 '@babel/types': 7.18.10 transitivePeerDependencies: - supports-color @@ -284,8 +286,8 @@ packages: chalk: 2.4.2 js-tokens: 4.0.0 - /@babel/parser/7.18.10: - resolution: {integrity: sha512-TYk3OA0HKL6qNryUayb5UUEhM/rkOQozIBEA5ITXh5DWrSp0TlUQXMyZmnWxG/DizSWBeeQ0Zbc5z8UGaaqoeg==} + /@babel/parser/7.18.11: + resolution: {integrity: sha512-9JKn5vN+hDt0Hdqn1PiJ2guflwP+B6Ga8qbDuoF0PzzVhrzsKIJo8yGqVk6CmMHiMei9w1C1Bp9IMJSIK+HPIQ==} engines: {node: '>=6.0.0'} hasBin: true dependencies: @@ -320,8 +322,8 @@ packages: '@babel/helper-plugin-utils': 7.18.9 dev: true - /@babel/plugin-transform-typescript/7.18.10_@babel+core@7.18.10: - resolution: {integrity: sha512-j2HQCJuMbi88QftIb5zlRu3c7PU+sXNnscqsrjqegoGiCgXR569pEdben9vly5QHKL2ilYkfnSwu64zsZo/VYQ==} + /@babel/plugin-transform-typescript/7.18.12_@babel+core@7.18.10: + resolution: {integrity: sha512-2vjjam0cum0miPkenUbQswKowuxs/NjMwIKEq0zwegRxXk12C9YOF9STXnaUptITOtOJHKHpzvvWYOjbm6tc0w==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -334,8 +336,8 @@ packages: - supports-color dev: true - /@babel/standalone/7.18.10: - resolution: {integrity: sha512-0KWHiRX9TUHiWE+dKYYEOIiRJcPwGU6u8Bq/p+ldekj7Kew9PCwl4S4FTSEPpTrn3Vc+r3iRSaN1l9AcGgLx4Q==} + /@babel/standalone/7.18.12: + resolution: {integrity: sha512-wDh3K5IUJiSMAY0MLYBFoCaj2RCZwvDz5BHn2uHat9KOsGWEVDFgFQFIOO+81Js2phFKNppLC45iOCsZVfJniw==} engines: {node: '>=6.9.0'} /@babel/template/7.18.10: @@ -343,20 +345,20 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@babel/code-frame': 7.18.6 - '@babel/parser': 7.18.10 + '@babel/parser': 7.18.11 '@babel/types': 7.18.10 - /@babel/traverse/7.18.10: - resolution: {integrity: sha512-J7ycxg0/K9XCtLyHf0cz2DqDihonJeIo+z+HEdRe9YuT8TY4A66i+Ab2/xZCEW7Ro60bPCBBfqqboHSamoV3+g==} + /@babel/traverse/7.18.11: + resolution: {integrity: sha512-TG9PiM2R/cWCAy6BPJKeHzNbu4lPzOSZpeMfeNErskGpTJx6trEvFaVCbDvpcxwy49BKWmEPwiW8mrysNiDvIQ==} engines: {node: '>=6.9.0'} dependencies: '@babel/code-frame': 7.18.6 - '@babel/generator': 7.18.10 + '@babel/generator': 7.18.12 '@babel/helper-environment-visitor': 7.18.9 '@babel/helper-function-name': 7.18.9 '@babel/helper-hoist-variables': 7.18.6 '@babel/helper-split-export-declaration': 7.18.6 - '@babel/parser': 7.18.10 + '@babel/parser': 7.18.11 '@babel/types': 7.18.10 debug: 4.3.4 globals: 11.12.0 @@ -739,7 +741,7 @@ packages: listhen: 0.2.13 mdast-util-to-hast: 12.2.0 mdurl: 1.0.1 - ohash: 0.1.4 + ohash: 0.1.5 pathe: 0.3.3 property-information: 6.1.1 rehype-external-links: 2.0.0 @@ -757,7 +759,7 @@ packages: shiki-es: 0.1.2 slugify: 1.6.5 ufo: 0.8.5 - unctx: 1.1.4 + unctx: 1.2.0 unified: 10.1.2 unist-builder: 3.0.0 unist-util-position: 4.0.3 @@ -778,12 +780,12 @@ packages: resolution: {integrity: sha512-YBI/6o2EBz02tdEJRBK8xkt3zvOFOWlLBf7WKYGBsSYSRtjjgrqPe2skp6VLLmKx5WbHHDNcW+6oACaurxGzeA==} dev: true - /@nuxt/kit-edge/3.0.0-rc.6-27658796.fbe2459: - resolution: {integrity: sha512-JqbCeuiHDVKXwN4rZlPKWdckCVEmExI1ODKR2ail6qbgOKpV6SK/8ZhQdedElcT8QU/FG9NvCZjf666I8JJgbw==} + /@nuxt/kit-edge/3.0.0-rc.6-27661960.60656df: + resolution: {integrity: sha512-pKoBM8d62K3IVs9SB/Q0j72m+hRtaOtIKkZYMxoGZbGFiIhamm8XEFtrc1OtTA+0CVoMuQTcKbRcXc/F3o2+Hg==} engines: {node: ^14.16.0 || ^16.11.0 || ^17.0.0 || ^18.0.0} dependencies: - '@nuxt/schema': /@nuxt/schema-edge/3.0.0-rc.6-27658796.fbe2459 - c12: 0.2.8 + '@nuxt/schema': /@nuxt/schema-edge/3.0.0-rc.6-27661960.60656df + c12: 0.2.9 consola: 2.15.3 defu: 6.0.0 globby: 13.1.2 @@ -793,14 +795,14 @@ packages: knitwork: 0.1.2 lodash.template: 4.5.0 mlly: 0.5.7 - ohash: 0.1.4 + ohash: 0.1.5 pathe: 0.3.3 pkg-types: 0.3.3 scule: 0.3.2 semver: 7.3.7 - unctx: 1.1.4 - unimport: 0.6.4 - untyped: 0.4.4 + unctx: 2.0.1 + unimport: 0.6.5 + untyped: 0.4.5 transitivePeerDependencies: - esbuild - rollup @@ -808,12 +810,12 @@ packages: - vite - webpack - /@nuxt/kit-edge/3.0.0-rc.6-27658796.fbe2459_ihdfoeqoutndy4vgf3nblh7e4i: - resolution: {integrity: sha512-JqbCeuiHDVKXwN4rZlPKWdckCVEmExI1ODKR2ail6qbgOKpV6SK/8ZhQdedElcT8QU/FG9NvCZjf666I8JJgbw==} + /@nuxt/kit-edge/3.0.0-rc.6-27661960.60656df_ihdfoeqoutndy4vgf3nblh7e4i: + resolution: {integrity: sha512-pKoBM8d62K3IVs9SB/Q0j72m+hRtaOtIKkZYMxoGZbGFiIhamm8XEFtrc1OtTA+0CVoMuQTcKbRcXc/F3o2+Hg==} engines: {node: ^14.16.0 || ^16.11.0 || ^17.0.0 || ^18.0.0} dependencies: - '@nuxt/schema': /@nuxt/schema-edge/3.0.0-rc.6-27658796.fbe2459_ihdfoeqoutndy4vgf3nblh7e4i - c12: 0.2.8 + '@nuxt/schema': /@nuxt/schema-edge/3.0.0-rc.6-27661960.60656df_ihdfoeqoutndy4vgf3nblh7e4i + c12: 0.2.9 consola: 2.15.3 defu: 6.0.0 globby: 13.1.2 @@ -823,14 +825,14 @@ packages: knitwork: 0.1.2 lodash.template: 4.5.0 mlly: 0.5.7 - ohash: 0.1.4 + ohash: 0.1.5 pathe: 0.3.3 pkg-types: 0.3.3 scule: 0.3.2 semver: 7.3.7 - unctx: 1.1.4_ihdfoeqoutndy4vgf3nblh7e4i - unimport: 0.6.4_ihdfoeqoutndy4vgf3nblh7e4i - untyped: 0.4.4 + unctx: 2.0.1_ihdfoeqoutndy4vgf3nblh7e4i + unimport: 0.6.5_ihdfoeqoutndy4vgf3nblh7e4i + untyped: 0.4.5 transitivePeerDependencies: - esbuild - rollup @@ -844,7 +846,7 @@ packages: engines: {node: ^14.16.0 || ^16.11.0 || ^17.0.0 || ^18.0.0} dependencies: '@nuxt/schema': 3.0.0-rc.6 - c12: 0.2.8 + c12: 0.2.9 consola: 2.15.3 defu: 6.0.0 globby: 13.1.2 @@ -858,9 +860,9 @@ packages: pkg-types: 0.3.3 scule: 0.2.1 semver: 7.3.7 - unctx: 1.1.4 + unctx: 1.2.0 unimport: 0.1.9 - untyped: 0.4.4 + untyped: 0.4.5 transitivePeerDependencies: - esbuild - rollup @@ -874,7 +876,7 @@ packages: engines: {node: ^14.16.0 || ^16.11.0 || ^17.0.0 || ^18.0.0} dependencies: '@nuxt/schema': 3.0.0-rc.6 - c12: 0.2.8 + c12: 0.2.9 consola: 2.15.3 defu: 6.0.0 globby: 13.1.2 @@ -888,9 +890,9 @@ packages: pkg-types: 0.3.3 scule: 0.2.1 semver: 7.3.7 - unctx: 1.1.4 + unctx: 1.2.0 unimport: 0.4.7 - untyped: 0.4.4 + untyped: 0.4.5 transitivePeerDependencies: - esbuild - rollup @@ -913,11 +915,11 @@ packages: - webpack dev: true - /@nuxt/schema-edge/3.0.0-rc.6-27658796.fbe2459: - resolution: {integrity: sha512-R9j4Xi1xjFy+HE76bH5F4h4kUWr0hLT/vFTqdkZxpzmrgdW8iNhMTUPMgktpcKkJOhuSs3y5PW4nbkbnK4DYmA==} + /@nuxt/schema-edge/3.0.0-rc.6-27661960.60656df: + resolution: {integrity: sha512-Odpw9uF8tf69iazIxPK0gy3RqB1R1utfwX2DcPCuxQpe5Z68i/V/JUevzDvvMddiG52UHgkJBcFAHGVfZqCNvA==} engines: {node: ^14.16.0 || ^16.11.0 || ^17.0.0 || ^18.0.0} dependencies: - c12: 0.2.8 + c12: 0.2.9 create-require: 1.1.1 defu: 6.0.0 jiti: 1.14.0 @@ -926,18 +928,18 @@ packages: scule: 0.3.2 std-env: 3.1.1 ufo: 0.8.5 - unimport: 0.6.4 + unimport: 0.6.5 transitivePeerDependencies: - esbuild - rollup - vite - webpack - /@nuxt/schema-edge/3.0.0-rc.6-27658796.fbe2459_ihdfoeqoutndy4vgf3nblh7e4i: - resolution: {integrity: sha512-R9j4Xi1xjFy+HE76bH5F4h4kUWr0hLT/vFTqdkZxpzmrgdW8iNhMTUPMgktpcKkJOhuSs3y5PW4nbkbnK4DYmA==} + /@nuxt/schema-edge/3.0.0-rc.6-27661960.60656df_ihdfoeqoutndy4vgf3nblh7e4i: + resolution: {integrity: sha512-Odpw9uF8tf69iazIxPK0gy3RqB1R1utfwX2DcPCuxQpe5Z68i/V/JUevzDvvMddiG52UHgkJBcFAHGVfZqCNvA==} engines: {node: ^14.16.0 || ^16.11.0 || ^17.0.0 || ^18.0.0} dependencies: - c12: 0.2.8 + c12: 0.2.9 create-require: 1.1.1 defu: 6.0.0 jiti: 1.14.0 @@ -946,7 +948,7 @@ packages: scule: 0.3.2 std-env: 3.1.1 ufo: 0.8.5 - unimport: 0.6.4_ihdfoeqoutndy4vgf3nblh7e4i + unimport: 0.6.5_ihdfoeqoutndy4vgf3nblh7e4i transitivePeerDependencies: - esbuild - rollup @@ -958,7 +960,7 @@ packages: resolution: {integrity: sha512-BcD5YtWRhn+jU2DlzuI1TeITFeOt5x6qm2KeaU/d5jzJ0oZDzmZwKsAimLtRbHwyU6/kKa+zFbK6pp5obm1XLg==} engines: {node: ^14.16.0 || ^16.11.0 || ^17.0.0 || ^18.0.0} dependencies: - c12: 0.2.8 + c12: 0.2.9 create-require: 1.1.1 defu: 6.0.0 jiti: 1.14.0 @@ -1010,13 +1012,13 @@ packages: resolution: {integrity: sha512-Ubpaj/yy8qcY5wFg/+AwVQmOE8YsYqqVP6iu2cY2WA0mK1+ymGi33rzgFFZqBMUR/Fz4Syv2ZDQT1M05rlaS3w==} dev: true - /@nuxt/vite-builder-edge/3.0.0-rc.6-27658796.fbe2459_vue@3.2.37: - resolution: {integrity: sha512-W7xKnCt7GcgDx72JHDWEAoKGOOqngRsbBoLT0E7N92RAaWwax1pnq6afilG9kp95JAVnSg0ic8sxU+eUaYjjvA==} + /@nuxt/vite-builder-edge/3.0.0-rc.6-27661960.60656df_vue@3.2.37: + resolution: {integrity: sha512-qjVgwgXTdJ+Yklk/zumF80UlvkSXUu0KAA3Ol87+SYPBrVgcRNDo8BnY0zECTRgqaqEWM+B+fDOrYYHH7ljhOg==} engines: {node: ^14.16.0 || ^16.11.0 || ^17.0.0 || ^18.0.0} peerDependencies: vue: ^3.2.37 dependencies: - '@nuxt/kit': /@nuxt/kit-edge/3.0.0-rc.6-27658796.fbe2459_ihdfoeqoutndy4vgf3nblh7e4i + '@nuxt/kit': /@nuxt/kit-edge/3.0.0-rc.6-27661960.60656df_ihdfoeqoutndy4vgf3nblh7e4i '@rollup/plugin-replace': 4.0.0_rollup@2.77.2 '@vitejs/plugin-vue': 3.0.1_vite@3.0.4+vue@3.2.37 '@vitejs/plugin-vue-jsx': 2.0.0_vite@3.0.4+vue@3.2.37 @@ -1034,7 +1036,7 @@ packages: knitwork: 0.1.2 magic-string: 0.26.2 mlly: 0.5.7 - ohash: 0.1.4 + ohash: 0.1.5 pathe: 0.3.3 perfect-debounce: 0.1.3 pkg-types: 0.3.3 @@ -1044,7 +1046,7 @@ packages: rollup: 2.77.2 rollup-plugin-visualizer: 5.7.1_rollup@2.77.2 ufo: 0.8.5 - unplugin: 0.8.0_ihdfoeqoutndy4vgf3nblh7e4i + unplugin: 0.8.1_ihdfoeqoutndy4vgf3nblh7e4i vite: 3.0.4 vite-node: 0.20.3 vite-plugin-checker: 0.4.9_vite@3.0.4 @@ -1187,8 +1189,8 @@ packages: slash: 3.0.0 dev: true - /@rollup/plugin-commonjs/22.0.1_rollup@2.77.2: - resolution: {integrity: sha512-dGfEZvdjDHObBiP5IvwTKMVeq/tBZGMBHZFMdIV1ClMM/YoWS34xrHFGfag9SN2ZtMgNZRFruqvxZQEa70O6nQ==} + /@rollup/plugin-commonjs/22.0.2_rollup@2.77.2: + resolution: {integrity: sha512-//NdP6iIwPbMTcazYsiBMbJW7gfmpHom33u1beiIoHDEM0Q9clvtQB1T0efvMqHeKsGohiHo97BCPCkBXdscwg==} engines: {node: '>= 12.0.0'} peerDependencies: rollup: ^2.68.0 @@ -1357,7 +1359,7 @@ packages: /@types/jsdom/16.2.15: resolution: {integrity: sha512-nwF87yjBKuX/roqGYerZZM0Nv1pZDMAT5YhOHYeM/72Fic+VEqJh4nyoqoapzJnW3pUlfxPY5FhgsJtM+dRnQQ==} dependencies: - '@types/node': 18.6.3 + '@types/node': 18.6.4 '@types/parse5': 6.0.3 '@types/tough-cookie': 4.0.2 dev: true @@ -1407,6 +1409,10 @@ packages: resolution: {integrity: sha512-6qKpDtoaYLM+5+AFChLhHermMQxc3TOEFIDzrZLPRGHPrLEwqFkkT5Kx3ju05g6X7uDPazz3jHbKPX0KzCjntg==} dev: true + /@types/node/18.6.4: + resolution: {integrity: sha512-I4BD3L+6AWiUobfxZ49DlU43gtI+FTHSv9pE2Zekg6KjMpre4ByusaljW3vYSLJrvQ1ck1hUaeVu8HVlY3vzHg==} + dev: true + /@types/node/8.10.66: resolution: {integrity: sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw==} dev: true @@ -1441,7 +1447,7 @@ packages: /@types/resolve/1.17.1: resolution: {integrity: sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==} dependencies: - '@types/node': 18.6.3 + '@types/node': 18.6.4 dev: true /@types/tailwindcss/3.1.0: @@ -1619,7 +1625,7 @@ packages: dependencies: '@babel/core': 7.18.10 '@babel/plugin-syntax-import-meta': 7.10.4_@babel+core@7.18.10 - '@babel/plugin-transform-typescript': 7.18.10_@babel+core@7.18.10 + '@babel/plugin-transform-typescript': 7.18.12_@babel+core@7.18.10 '@vue/babel-plugin-jsx': 1.1.1_@babel+core@7.18.10 vite: 3.0.4 vue: 3.2.37 @@ -1656,7 +1662,7 @@ packages: '@babel/helper-module-imports': 7.18.6 '@babel/plugin-syntax-jsx': 7.18.6_@babel+core@7.18.10 '@babel/template': 7.18.10 - '@babel/traverse': 7.18.10 + '@babel/traverse': 7.18.11 '@babel/types': 7.18.10 '@vue/babel-helper-vue-transform-on': 1.0.2 camelcase: 6.3.0 @@ -1670,7 +1676,7 @@ packages: /@vue/compiler-core/3.2.37: resolution: {integrity: sha512-81KhEjo7YAOh0vQJoSmAD68wLfYqJvoiD4ulyedzF+OEk/bk6/hx3fTNVfuzugIIaTrOx4PGx6pAiBRe5e9Zmg==} dependencies: - '@babel/parser': 7.18.10 + '@babel/parser': 7.18.11 '@vue/shared': 3.2.37 estree-walker: 2.0.2 source-map: 0.6.1 @@ -1686,7 +1692,7 @@ packages: /@vue/compiler-sfc/3.2.37: resolution: {integrity: sha512-+7i/2+9LYlpqDv+KTtWhOZH+pa8/HnX/905MdVmAcI/mPQOBwkHHIzrsEsucyOIZQYMkXUiTkmZq5am/NyXKkg==} dependencies: - '@babel/parser': 7.18.10 + '@babel/parser': 7.18.11 '@vue/compiler-core': 3.2.37 '@vue/compiler-dom': 3.2.37 '@vue/compiler-ssr': 3.2.37 @@ -1712,7 +1718,7 @@ packages: /@vue/reactivity-transform/3.2.37: resolution: {integrity: sha512-IWopkKEb+8qpu/1eMKVeXrK0NLw9HicGviJzhJDEyfxTR9e1WtpnnbYkJWurX6WwoFP0sz10xQg8yL8lgskAZg==} dependencies: - '@babel/parser': 7.18.10 + '@babel/parser': 7.18.11 '@vue/compiler-core': 3.2.37 '@vue/shared': 3.2.37 estree-walker: 2.0.2 @@ -2171,8 +2177,8 @@ packages: source-map: 0.7.4 dev: true - /c12/0.2.8: - resolution: {integrity: sha512-JomSyVwGnqndRdVVW6SGnHUeHIfJFQNe/4zPFK6zLKPQm8US+hNr4kZP7xeNnzjn3jnQUsBbPdT85fm8K5Pr4A==} + /c12/0.2.9: + resolution: {integrity: sha512-6jYdexgAKr+3kYoTmvC5eDtDHUg7GmFQSdeQqZzAKiPlFAN1heGUoXDbAYYwUCfefZy+WgVJbmAej5TTQpp3jA==} dependencies: defu: 6.0.0 dotenv: 16.0.1 @@ -2249,7 +2255,7 @@ packages: resolution: {integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==} dependencies: browserslist: 4.21.3 - caniuse-lite: 1.0.30001373 + caniuse-lite: 1.0.30001374 lodash.memoize: 4.1.2 lodash.uniq: 4.5.0 dev: true @@ -2257,6 +2263,10 @@ packages: /caniuse-lite/1.0.30001373: resolution: {integrity: sha512-pJYArGHrPp3TUqQzFYRmP/lwJlj8RCbVe3Gd3eJQkAV8SAC6b19XS9BjMvRdvaS8RMkaTN8ZhoHP6S1y8zzwEQ==} + /caniuse-lite/1.0.30001374: + resolution: {integrity: sha512-mWvzatRx3w+j5wx/mpFN5v5twlPrabG8NqX2c6e45LCpymdoGqNvRkRutFUqpRTXKFQFNQJasvK0YT7suW6/Hw==} + dev: true + /caseless/0.12.0: resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==} dev: true @@ -3941,7 +3951,6 @@ packages: /estree-walker/3.0.1: resolution: {integrity: sha512-woY0RUD87WzMBUiZLx8NsYr23N5BKsOMZHhu2hoNRVh6NXGfoiT1KOL8G3UHlJAnEDGmfa5ubNA/AacfG+Kb0g==} - dev: true /esutils/2.0.3: resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} @@ -5207,7 +5216,7 @@ packages: resolution: {integrity: sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==} engines: {node: '>= 10.13.0'} dependencies: - '@types/node': 18.6.3 + '@types/node': 18.6.4 merge-stream: 2.0.0 supports-color: 7.2.0 dev: true @@ -5609,6 +5618,21 @@ packages: dependencies: yallist: 4.0.0 + /magic-regexp/0.4.1: + resolution: {integrity: sha512-JNwUo8+mV7yYUz3z6YDac4qhKMKVYOiEMU1DkW+EwG+BADaXCZpdh0wNFk1+7B2wrMGF4V6jrARWBitFZW2gGw==} + dependencies: + estree-walker: 3.0.1 + magic-string: 0.26.2 + mlly: 0.5.7 + ufo: 0.8.5 + unplugin: 0.8.1 + transitivePeerDependencies: + - esbuild + - rollup + - vite + - webpack + dev: true + /magic-string/0.25.9: resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==} dependencies: @@ -6266,7 +6290,7 @@ packages: '@cloudflare/kv-asset-handler': 0.2.0 '@netlify/functions': 1.0.0 '@rollup/plugin-alias': 3.1.9_rollup@2.77.2 - '@rollup/plugin-commonjs': 22.0.1_rollup@2.77.2 + '@rollup/plugin-commonjs': 22.0.2_rollup@2.77.2 '@rollup/plugin-inject': 4.0.4_rollup@2.77.2 '@rollup/plugin-json': 4.1.0_rollup@2.77.2 '@rollup/plugin-node-resolve': 13.3.0_rollup@2.77.2 @@ -6276,7 +6300,7 @@ packages: '@types/jsdom': 16.2.15 '@vercel/nft': 0.20.1 archiver: 5.3.1 - c12: 0.2.8 + c12: 0.2.9 chalk: 5.0.1 chokidar: 3.5.3 consola: 2.15.3 @@ -6301,7 +6325,7 @@ packages: mlly: 0.5.7 mri: 1.2.0 node-fetch-native: 0.1.4 - ohash: 0.1.4 + ohash: 0.1.5 ohmyfetch: 0.4.18 pathe: 0.3.3 perfect-debounce: 0.1.3 @@ -6446,25 +6470,25 @@ packages: dependencies: boolbase: 1.0.0 - /nuxi-edge/3.0.0-rc.6-27658796.fbe2459: - resolution: {integrity: sha512-y4U1BCtLDewx+NFDJctO4B3Da8L0Ty0vOk72l1JsZlRvs7wlHz3aNXU75lfjm8xbBJGDdhifi9PkVhLKNvaLqQ==} + /nuxi-edge/3.0.0-rc.6-27661960.60656df: + resolution: {integrity: sha512-hy7O5IiVf1fGZko2pRFgULuwLCiC0Y/pLR2r7PJVW1k9Te+bdy2XhicdUqpu1LVnp99N8G4vfJhfY9FFh1I9aw==} engines: {node: ^14.16.0 || ^16.11.0 || ^17.0.0 || ^18.0.0} hasBin: true optionalDependencies: fsevents: 2.3.2 dev: true - /nuxt3/3.0.0-rc.6-27658796.fbe2459: - resolution: {integrity: sha512-I99tvQZPRNbOnllLG98e1/TILS+PFCtVBn15I0EwXsJCp/ZX8RQVPZ7BRsl9Y2wM16KUFSLhi/QXtS41KC8OwA==} + /nuxt3/3.0.0-rc.6-27661960.60656df: + resolution: {integrity: sha512-QSXhWox09tCaKbCg7RHtYn8Y3SNTiKEnrzruwtqcBIk206uITn3STVRWQx2TA4bw8GvNjTqN9CoWwKbB7lMrVw==} engines: {node: ^14.16.0 || ^16.11.0 || ^17.0.0 || ^18.0.0} hasBin: true dependencies: '@nuxt/devalue': 2.0.0 - '@nuxt/kit': /@nuxt/kit-edge/3.0.0-rc.6-27658796.fbe2459 - '@nuxt/schema': /@nuxt/schema-edge/3.0.0-rc.6-27658796.fbe2459 + '@nuxt/kit': /@nuxt/kit-edge/3.0.0-rc.6-27661960.60656df + '@nuxt/schema': /@nuxt/schema-edge/3.0.0-rc.6-27661960.60656df '@nuxt/telemetry': 2.1.3 '@nuxt/ui-templates': 0.3.0 - '@nuxt/vite-builder': /@nuxt/vite-builder-edge/3.0.0-rc.6-27658796.fbe2459_vue@3.2.37 + '@nuxt/vite-builder': /@nuxt/vite-builder-edge/3.0.0-rc.6-27661960.60656df_vue@3.2.37 '@vue/reactivity': 3.2.37 '@vue/shared': 3.2.37 '@vueuse/head': 0.7.9_vue@3.2.37 @@ -6482,19 +6506,19 @@ packages: magic-string: 0.26.2 mlly: 0.5.7 nitropack: 0.4.12 - nuxi: /nuxi-edge/3.0.0-rc.6-27658796.fbe2459 - ohash: 0.1.4 + nuxi: /nuxi-edge/3.0.0-rc.6-27661960.60656df + ohash: 0.1.5 ohmyfetch: 0.4.18 pathe: 0.3.3 perfect-debounce: 0.1.3 scule: 0.3.2 strip-literal: 0.4.0 ufo: 0.8.5 - unctx: 1.1.4 + unctx: 2.0.1 unenv: 0.5.2 - unimport: 0.6.4 - unplugin: 0.8.0 - untyped: 0.4.4 + unimport: 0.6.5 + unplugin: 0.8.1 + untyped: 0.4.5 vue: 3.2.37 vue-bundle-renderer: 0.3.9 vue-router: 4.1.3_vue@3.2.37 @@ -6552,8 +6576,8 @@ packages: es-abstract: 1.20.1 dev: true - /ohash/0.1.4: - resolution: {integrity: sha512-imsZ/lYOvZldyO6clK9uu6t2PIMr3bxCPAi6jJyPezKLU5/42UwMfGIlZML6GlpUxmSHxRoDo7VMWqI8VGllQQ==} + /ohash/0.1.5: + resolution: {integrity: sha512-qynly1AFIpGWEAW88p6DhMNqok/Swb52/KsiU+Toi7er058Ptvno3tkfTML6wYcEgFgp2GsUziW4Nqn62ciuyw==} /ohmyfetch/0.4.18: resolution: {integrity: sha512-MslzNrQzBLtZHmiZBI8QMOcMpdNFlK61OJ34nFNFynZ4v+4BonfCQ7VIN4EGXvGGq5zhDzgdJoY3o9S1l2T7KQ==} @@ -8834,8 +8858,8 @@ packages: through: 2.3.8 dev: false - /unctx/1.1.4: - resolution: {integrity: sha512-fQMML+GjUpIjQa0HBrrJezo2dFpTAbQbU0/KFKw4T5wpc9deGjLHSYthdfNAo2xSWM34csI6arzedezQkqtfGw==} + /unctx/1.2.0: + resolution: {integrity: sha512-r3p62XKSMvgttYu3fFf52rteqcguwQENJ863dOGM1xM3uUbSNbr+zAuTohMyKx2pcZLmjusgcnl1cAWaZbCzKg==} dependencies: acorn: 8.8.0 estree-walker: 2.0.2 @@ -8847,13 +8871,26 @@ packages: - vite - webpack - /unctx/1.1.4_ihdfoeqoutndy4vgf3nblh7e4i: - resolution: {integrity: sha512-fQMML+GjUpIjQa0HBrrJezo2dFpTAbQbU0/KFKw4T5wpc9deGjLHSYthdfNAo2xSWM34csI6arzedezQkqtfGw==} + /unctx/2.0.1: + resolution: {integrity: sha512-4VkJKSG+lh1yYkvdI0Xd3Gm7y7PU6F0mG5SoJqCI1j2jtIaHvTLAdBfbhDjbHxT93BsRkzcaxaeBtu8W/mX1Sg==} dependencies: acorn: 8.8.0 - estree-walker: 2.0.2 + estree-walker: 3.0.1 + magic-string: 0.26.2 + unplugin: 0.8.1 + transitivePeerDependencies: + - esbuild + - rollup + - vite + - webpack + + /unctx/2.0.1_ihdfoeqoutndy4vgf3nblh7e4i: + resolution: {integrity: sha512-4VkJKSG+lh1yYkvdI0Xd3Gm7y7PU6F0mG5SoJqCI1j2jtIaHvTLAdBfbhDjbHxT93BsRkzcaxaeBtu8W/mX1Sg==} + dependencies: + acorn: 8.8.0 + estree-walker: 3.0.1 magic-string: 0.26.2 - unplugin: 0.6.3_ihdfoeqoutndy4vgf3nblh7e4i + unplugin: 0.8.1_ihdfoeqoutndy4vgf3nblh7e4i transitivePeerDependencies: - esbuild - rollup @@ -8944,8 +8981,8 @@ packages: - webpack dev: true - /unimport/0.6.4: - resolution: {integrity: sha512-1cbSeTsC2EwzWeWAyQleajM354y+EYsymxE9p1wDbHKVTEe9XL6+e7vlEv2pj1Zk8YYFf+CBf9QG8My7aDKhag==} + /unimport/0.6.5: + resolution: {integrity: sha512-B8x6+GiYUzDphN6Iaoshu99mUo8n7QCq13QTY2Z8saj1QBmGKXf+vJJlptfL3MdOmzxpve2Ikx91UZ4Qoz4dVQ==} dependencies: '@rollup/pluginutils': 4.2.1 escape-string-regexp: 5.0.0 @@ -8956,15 +8993,15 @@ packages: pathe: 0.3.3 scule: 0.3.2 strip-literal: 0.4.0 - unplugin: 0.8.0 + unplugin: 0.8.1 transitivePeerDependencies: - esbuild - rollup - vite - webpack - /unimport/0.6.4_ihdfoeqoutndy4vgf3nblh7e4i: - resolution: {integrity: sha512-1cbSeTsC2EwzWeWAyQleajM354y+EYsymxE9p1wDbHKVTEe9XL6+e7vlEv2pj1Zk8YYFf+CBf9QG8My7aDKhag==} + /unimport/0.6.5_ihdfoeqoutndy4vgf3nblh7e4i: + resolution: {integrity: sha512-B8x6+GiYUzDphN6Iaoshu99mUo8n7QCq13QTY2Z8saj1QBmGKXf+vJJlptfL3MdOmzxpve2Ikx91UZ4Qoz4dVQ==} dependencies: '@rollup/pluginutils': 4.2.1 escape-string-regexp: 5.0.0 @@ -8975,7 +9012,7 @@ packages: pathe: 0.3.3 scule: 0.3.2 strip-literal: 0.4.0 - unplugin: 0.8.0_ihdfoeqoutndy4vgf3nblh7e4i + unplugin: 0.8.1_ihdfoeqoutndy4vgf3nblh7e4i transitivePeerDependencies: - esbuild - rollup @@ -9058,31 +9095,6 @@ packages: webpack-sources: 3.2.3 webpack-virtual-modules: 0.4.4 - /unplugin/0.6.3_ihdfoeqoutndy4vgf3nblh7e4i: - resolution: {integrity: sha512-CoW88FQfCW/yabVc4bLrjikN9HC8dEvMU4O7B6K2jsYMPK0l6iAnd9dpJwqGcmXJKRCU9vwSsy653qg+RK0G6A==} - peerDependencies: - esbuild: '>=0.13' - rollup: ^2.50.0 - vite: ^2.3.0 - webpack: 4 || 5 - peerDependenciesMeta: - esbuild: - optional: true - rollup: - optional: true - vite: - optional: true - webpack: - optional: true - dependencies: - chokidar: 3.5.3 - esbuild: 0.14.53 - rollup: 2.77.2 - vite: 3.0.4 - webpack-sources: 3.2.3 - webpack-virtual-modules: 0.4.4 - dev: true - /unplugin/0.7.2: resolution: {integrity: sha512-m7thX4jP8l5sETpLdUASoDOGOcHaOVtgNyrYlToyQUvILUtEzEnngRBrHnAX3IKqooJVmXpoa/CwQ/QqzvGaHQ==} peerDependencies: @@ -9130,8 +9142,8 @@ packages: webpack-virtual-modules: 0.4.4 dev: true - /unplugin/0.8.0: - resolution: {integrity: sha512-OzOkJ9XOPlD1Cph6qy/p4i/KSUbs76GToXjH/STHpfo6D7y+EqpfAL6G6HaoOw5QLkt9+KWwcxYUmPFkDf1upQ==} + /unplugin/0.8.1: + resolution: {integrity: sha512-o7rUZoPLG1fH4LKinWgb77gDtTE6mw/iry0Pq0Z5UPvZ9+HZ1/4+7fic7t58s8/CGkPrDpGq+RltO+DmswcR4g==} peerDependencies: esbuild: '>=0.13' rollup: ^2.50.0 @@ -9152,8 +9164,8 @@ packages: webpack-sources: 3.2.3 webpack-virtual-modules: 0.4.4 - /unplugin/0.8.0_ihdfoeqoutndy4vgf3nblh7e4i: - resolution: {integrity: sha512-OzOkJ9XOPlD1Cph6qy/p4i/KSUbs76GToXjH/STHpfo6D7y+EqpfAL6G6HaoOw5QLkt9+KWwcxYUmPFkDf1upQ==} + /unplugin/0.8.1_ihdfoeqoutndy4vgf3nblh7e4i: + resolution: {integrity: sha512-o7rUZoPLG1fH4LKinWgb77gDtTE6mw/iry0Pq0Z5UPvZ9+HZ1/4+7fic7t58s8/CGkPrDpGq+RltO+DmswcR4g==} peerDependencies: esbuild: '>=0.13' rollup: ^2.50.0 @@ -9196,13 +9208,13 @@ packages: - supports-color - utf-8-validate - /untyped/0.4.4: - resolution: {integrity: sha512-sY6u8RedwfLfBis0copfU/fzROieyAndqPs8Kn2PfyzTjtA88vCk81J1b5z+8/VJc+cwfGy23/AqOCpvAbkNVw==} + /untyped/0.4.5: + resolution: {integrity: sha512-buq9URfOj4xAnVfu6BYNKzHZLHAzsCbHsDc/kHy66ESMqRpj00oD9qWf2M2qm0pC0DigsVxRF3uhOa5HJtrwGA==} dependencies: '@babel/core': 7.18.10 - '@babel/standalone': 7.18.10 + '@babel/standalone': 7.18.12 '@babel/types': 7.18.10 - scule: 0.2.1 + scule: 0.3.2 transitivePeerDependencies: - supports-color @@ -9356,8 +9368,8 @@ packages: fsevents: 2.3.2 dev: true - /vitest/0.20.3_c8@7.12.0+happy-dom@6.0.4: - resolution: {integrity: sha512-cXMjTbZxBBUUuIF3PUzEGPLJWtIMeURBDXVxckSHpk7xss4JxkiiWh5cnIlfGyfJne2Ii3QpbiRuFL5dMJtljw==} + /vitest/0.21.0_c8@7.12.0+happy-dom@6.0.4: + resolution: {integrity: sha512-+BQB2swk4wQdw5loOoL8esIYh/1ifAliuwj2HWHNE2F8SAl/jF7/aoCJBoXGSf/Ws19k3pH4NrWeVtcSwM0j2w==} engines: {node: '>=v14.16.0'} hasBin: true peerDependencies: @@ -9383,7 +9395,7 @@ packages: dependencies: '@types/chai': 4.3.1 '@types/chai-subset': 1.3.3 - '@types/node': 18.6.3 + '@types/node': 18.6.4 c8: 7.12.0 chai: 4.3.6 debug: 4.3.4 diff --git a/scripts/publish.mjs b/scripts/publish.mjs index d8b0921b..d54f4be8 100644 --- a/scripts/publish.mjs +++ b/scripts/publish.mjs @@ -3,7 +3,6 @@ import { $fetch } from 'ohmyfetch' import { iterateOnDirectory } from './global.mjs' -import { getMatchOrReturn } from './api/_utils.js' const url = 'https://dev.to/api' const token = process.env.DEVTO_TOKEN || 'CYgR6zbcVgtKDRkawFYZKrCT' @@ -12,12 +11,12 @@ async function getMarkdownArticles() { const articles = [] await iterateOnDirectory('./src/content/blog', (path, contents) => { if (!/\.md$/.test(path)) return - const slug = getMatchOrReturn(path, /\/[^/]*$/, 0).slice(1, -3) + const slug = path.match(/\/[^/]*$/)?.[0].slice(1, -3) articles.push({ body_markdown: contents .replace(/\(\//g, '(https://roe.dev/') .replace(/ ---? /g, ' — '), - title: getMatchOrReturn(contents, /title: (.*)/, 1), + title: contents.match(/title: (.*)/)?.[1], slug, canonical_url: `https://roe.dev/blog/${slug}/`, }) diff --git a/src/app.vue b/src/app.vue index 26a56833..e587101e 100644 --- a/src/app.vue +++ b/src/app.vue @@ -1,18 +1,23 @@