diff --git a/.gitignore b/.gitignore index 793cb00..adcb26d 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ /dist node_modules +/test diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 0000000..e17b023 --- /dev/null +++ b/.prettierignore @@ -0,0 +1,2 @@ +# Ignore artifacts: +dist diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/.prettierrc @@ -0,0 +1 @@ +{} diff --git a/mkd.json b/mkd.json new file mode 100644 index 0000000..ff8b809 --- /dev/null +++ b/mkd.json @@ -0,0 +1,4 @@ +// this is so that testing works locally +{ + "blogDir": "./test/src/blog" +} diff --git a/package.json b/package.json index f284f07..6761ff3 100644 --- a/package.json +++ b/package.json @@ -1,44 +1,46 @@ { - "name": "mkd", - "version": "1.0.0", - "description": "", - "scripts": { - "dev": "tsx src/index.ts", - "build": "tsc --build --clean && tsc --build" - }, - "type": "module", - "bin": { - "mkd": "dist/index.js" - }, - "files": [ - "dist", - "README.md", - "sequoia.schema.json" - ], - "main": "./dist/index.js", - "exports": { - ".": "./dist/index.js" - }, - "keywords": [], - "author": "", - "license": "MIT", - "devEngines": { - "packageManager": { - "name": "pnpm", - "version": "^11.2.1", - "onFail": "download" - } - }, - "devDependencies": { - "@types/node": "^25.9.1", - "tsx": "^4.22.3", - "typescript": "^6.0.3" - }, - "dependencies": { - "@clack/prompts": "^1.4.0", - "@sindresorhus/slugify": "^3.0.0", - "cmd-ts": "^0.15.0", - "filenamify": "^7.0.1", - "gray-matter": "^4.0.3" + "name": "mkd", + "version": "1.0.0", + "description": "", + "scripts": { + "dev": "tsx ./src/index.ts", + "build": "tsc --build --clean && tsc --build" + }, + "type": "module", + "bin": { + "mkd": "dist/index.js" + }, + "files": [ + "dist", + "README.md", + "src/index.ts" + ], + "main": "./dist/index.js", + "exports": { + ".": "./dist/index.js" + }, + "keywords": [], + "author": "", + "license": "MIT", + "devEngines": { + "packageManager": { + "name": "pnpm", + "version": "^11.2.1", + "onFail": "download" } + }, + "devDependencies": { + "@types/node": "^25.9.1", + "prettier": "3.8.3", + "tsx": "^4.22.3", + "typescript": "^6.0.3" + }, + "dependencies": { + "@clack/prompts": "^1.4.0", + "@sindresorhus/slugify": "^3.0.0", + "cmd-ts": "^0.15.0", + "filenamify": "^7.0.1", + "gray-matter": "^4.0.3", + "pwd-fs": "^3.5.4" + } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index dd2d1a6..9577ff9 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,12 +1,11 @@ --- -lockfileVersion: '9.0' +lockfileVersion: "9.0" importers: - .: configDependencies: {} packageManagerDependencies: - '@pnpm/exe': + "@pnpm/exe": specifier: ^11.2.1 version: 11.2.2 pnpm: @@ -14,203 +13,257 @@ importers: version: 11.2.2 packages: - - '@pnpm/exe@11.2.2': - resolution: {integrity: sha512-9AGho6f10GYF/XHvnpO6wnzDIAiHNSs2PyOTelrNNyUiHwfTVtnJoXwRz/6yPJAYOF3erhPauv5oxf62uh581w==} + "@pnpm/exe@11.2.2": + resolution: + { + integrity: sha512-9AGho6f10GYF/XHvnpO6wnzDIAiHNSs2PyOTelrNNyUiHwfTVtnJoXwRz/6yPJAYOF3erhPauv5oxf62uh581w==, + } hasBin: true - '@pnpm/linux-arm64@11.2.2': - resolution: {integrity: sha512-cMEqyEwpghHb1UggKuowTuGKvbWe1Ra6bK3SF9CWoIrz36mzQz3FXxYXx1Theo8lmkwWH2MZdUGHKgtUoqEGKg==} + "@pnpm/linux-arm64@11.2.2": + resolution: + { + integrity: sha512-cMEqyEwpghHb1UggKuowTuGKvbWe1Ra6bK3SF9CWoIrz36mzQz3FXxYXx1Theo8lmkwWH2MZdUGHKgtUoqEGKg==, + } cpu: [arm64] os: [linux] - '@pnpm/linux-x64@11.2.2': - resolution: {integrity: sha512-AShxDdan9wfAFbIGAO5YnbGRf3zuETOZVMuWqmx4mJLaAOR3kiA3Rwhzj3jyTsAoodn7Xdaxq9G1M3FpB92mkQ==} + "@pnpm/linux-x64@11.2.2": + resolution: + { + integrity: sha512-AShxDdan9wfAFbIGAO5YnbGRf3zuETOZVMuWqmx4mJLaAOR3kiA3Rwhzj3jyTsAoodn7Xdaxq9G1M3FpB92mkQ==, + } cpu: [x64] os: [linux] - '@pnpm/linuxstatic-arm64@11.2.2': - resolution: {integrity: sha512-m7BCdqFdMFo3fkiOpcOLa70c3Ppy5OKv78HXSIfzL4ajHBdPQfmv03VgC3U08l1ST/EeQFuSt+Za0azmOJyYqA==} + "@pnpm/linuxstatic-arm64@11.2.2": + resolution: + { + integrity: sha512-m7BCdqFdMFo3fkiOpcOLa70c3Ppy5OKv78HXSIfzL4ajHBdPQfmv03VgC3U08l1ST/EeQFuSt+Za0azmOJyYqA==, + } cpu: [arm64] os: [linux] libc: [musl] - '@pnpm/linuxstatic-x64@11.2.2': - resolution: {integrity: sha512-UABTQUhdn6eCx/IlGVrdwklKT00pTHrjLNXdviP4OReJa1trM5HDWcDnreIg89ghCFmee+UTBKDx1FYlLON8EQ==} + "@pnpm/linuxstatic-x64@11.2.2": + resolution: + { + integrity: sha512-UABTQUhdn6eCx/IlGVrdwklKT00pTHrjLNXdviP4OReJa1trM5HDWcDnreIg89ghCFmee+UTBKDx1FYlLON8EQ==, + } cpu: [x64] os: [linux] libc: [musl] - '@pnpm/macos-arm64@11.2.2': - resolution: {integrity: sha512-EakwHSWIxzza6fO6zQkmkUphoadjer9VXCsWRax1D4qNWmChKfn2muYFj6BOChS999lwb4fb42gc61Nbx0X6iw==} + "@pnpm/macos-arm64@11.2.2": + resolution: + { + integrity: sha512-EakwHSWIxzza6fO6zQkmkUphoadjer9VXCsWRax1D4qNWmChKfn2muYFj6BOChS999lwb4fb42gc61Nbx0X6iw==, + } cpu: [arm64] os: [darwin] - '@pnpm/win-arm64@11.2.2': - resolution: {integrity: sha512-eXzlXAnwRAI9Uff1U2pfTJxC78vL8aGxU/fsUt/RzWjS09xMQZ2qtAunKg869fAi6xfsquDbogkdTZA3163lIw==} + "@pnpm/win-arm64@11.2.2": + resolution: + { + integrity: sha512-eXzlXAnwRAI9Uff1U2pfTJxC78vL8aGxU/fsUt/RzWjS09xMQZ2qtAunKg869fAi6xfsquDbogkdTZA3163lIw==, + } cpu: [arm64] os: [win32] - '@pnpm/win-x64@11.2.2': - resolution: {integrity: sha512-X74bQ4bvjSCYapcupRsGrse8cAg7XhPKXRn1o1qOouux1nJquz9lh2h5uKz8GPx816OUsYo9FS8DV3N9W+L8QA==} + "@pnpm/win-x64@11.2.2": + resolution: + { + integrity: sha512-X74bQ4bvjSCYapcupRsGrse8cAg7XhPKXRn1o1qOouux1nJquz9lh2h5uKz8GPx816OUsYo9FS8DV3N9W+L8QA==, + } cpu: [x64] os: [win32] - '@reflink/reflink-darwin-arm64@0.1.19': - resolution: {integrity: sha512-ruy44Lpepdk1FqDz38vExBY/PVUsjxZA+chd9wozjUH9JjuDT/HEaQYA6wYN9mf041l0yLVar6BCZuWABJvHSA==} - engines: {node: '>= 10'} + "@reflink/reflink-darwin-arm64@0.1.19": + resolution: + { + integrity: sha512-ruy44Lpepdk1FqDz38vExBY/PVUsjxZA+chd9wozjUH9JjuDT/HEaQYA6wYN9mf041l0yLVar6BCZuWABJvHSA==, + } + engines: { node: ">= 10" } cpu: [arm64] os: [darwin] - '@reflink/reflink-darwin-x64@0.1.19': - resolution: {integrity: sha512-By85MSWrMZa+c26TcnAy8SDk0sTUkYlNnwknSchkhHpGXOtjNDUOxJE9oByBnGbeuIE1PiQsxDG3Ud+IVV9yuA==} - engines: {node: '>= 10'} + "@reflink/reflink-darwin-x64@0.1.19": + resolution: + { + integrity: sha512-By85MSWrMZa+c26TcnAy8SDk0sTUkYlNnwknSchkhHpGXOtjNDUOxJE9oByBnGbeuIE1PiQsxDG3Ud+IVV9yuA==, + } + engines: { node: ">= 10" } cpu: [x64] os: [darwin] - '@reflink/reflink-linux-arm64-gnu@0.1.19': - resolution: {integrity: sha512-7P+er8+rP9iNeN+bfmccM4hTAaLP6PQJPKWSA4iSk2bNvo6KU6RyPgYeHxXmzNKzPVRcypZQTpFgstHam6maVg==} - engines: {node: '>= 10'} + "@reflink/reflink-linux-arm64-gnu@0.1.19": + resolution: + { + integrity: sha512-7P+er8+rP9iNeN+bfmccM4hTAaLP6PQJPKWSA4iSk2bNvo6KU6RyPgYeHxXmzNKzPVRcypZQTpFgstHam6maVg==, + } + engines: { node: ">= 10" } cpu: [arm64] os: [linux] libc: [glibc] - '@reflink/reflink-linux-arm64-musl@0.1.19': - resolution: {integrity: sha512-37iO/Dp6m5DDaC2sf3zPtx/hl9FV3Xze4xoYidrxxS9bgP3S8ALroxRK6xBG/1TtfXKTvolvp+IjrUU6ujIGmA==} - engines: {node: '>= 10'} + "@reflink/reflink-linux-arm64-musl@0.1.19": + resolution: + { + integrity: sha512-37iO/Dp6m5DDaC2sf3zPtx/hl9FV3Xze4xoYidrxxS9bgP3S8ALroxRK6xBG/1TtfXKTvolvp+IjrUU6ujIGmA==, + } + engines: { node: ">= 10" } cpu: [arm64] os: [linux] libc: [musl] - '@reflink/reflink-linux-x64-gnu@0.1.19': - resolution: {integrity: sha512-jbI8jvuYCaA3MVUdu8vLoLAFqC+iNMpiSuLbxlAgg7x3K5bsS8nOpTRnkLF7vISJ+rVR8W+7ThXlXlUQ93ulkw==} - engines: {node: '>= 10'} + "@reflink/reflink-linux-x64-gnu@0.1.19": + resolution: + { + integrity: sha512-jbI8jvuYCaA3MVUdu8vLoLAFqC+iNMpiSuLbxlAgg7x3K5bsS8nOpTRnkLF7vISJ+rVR8W+7ThXlXlUQ93ulkw==, + } + engines: { node: ">= 10" } cpu: [x64] os: [linux] libc: [glibc] - '@reflink/reflink-linux-x64-musl@0.1.19': - resolution: {integrity: sha512-e9FBWDe+lv7QKAwtKOt6A2W/fyy/aEEfr0g6j/hWzvQcrzHCsz07BNQYlNOjTfeytrtLU7k449H1PI95jA4OjQ==} - engines: {node: '>= 10'} + "@reflink/reflink-linux-x64-musl@0.1.19": + resolution: + { + integrity: sha512-e9FBWDe+lv7QKAwtKOt6A2W/fyy/aEEfr0g6j/hWzvQcrzHCsz07BNQYlNOjTfeytrtLU7k449H1PI95jA4OjQ==, + } + engines: { node: ">= 10" } cpu: [x64] os: [linux] libc: [musl] - '@reflink/reflink-win32-arm64-msvc@0.1.19': - resolution: {integrity: sha512-09PxnVIQcd+UOn4WAW73WU6PXL7DwGS6wPlkMhMg2zlHHG65F3vHepOw06HFCq+N42qkaNAc8AKIabWvtk6cIQ==} - engines: {node: '>= 10'} + "@reflink/reflink-win32-arm64-msvc@0.1.19": + resolution: + { + integrity: sha512-09PxnVIQcd+UOn4WAW73WU6PXL7DwGS6wPlkMhMg2zlHHG65F3vHepOw06HFCq+N42qkaNAc8AKIabWvtk6cIQ==, + } + engines: { node: ">= 10" } cpu: [arm64] os: [win32] - '@reflink/reflink-win32-x64-msvc@0.1.19': - resolution: {integrity: sha512-E//yT4ni2SyhwP8JRjVGWr3cbnhWDiPLgnQ66qqaanjjnMiu3O/2tjCPQXlcGc/DEYofpDc9fvhv6tALQsMV9w==} - engines: {node: '>= 10'} + "@reflink/reflink-win32-x64-msvc@0.1.19": + resolution: + { + integrity: sha512-E//yT4ni2SyhwP8JRjVGWr3cbnhWDiPLgnQ66qqaanjjnMiu3O/2tjCPQXlcGc/DEYofpDc9fvhv6tALQsMV9w==, + } + engines: { node: ">= 10" } cpu: [x64] os: [win32] - '@reflink/reflink@0.1.19': - resolution: {integrity: sha512-DmCG8GzysnCZ15bres3N5AHCmwBwYgp0As6xjhQ47rAUTUXxJiK+lLUxaGsX3hd/30qUpVElh05PbGuxRPgJwA==} - engines: {node: '>= 10'} + "@reflink/reflink@0.1.19": + resolution: + { + integrity: sha512-DmCG8GzysnCZ15bres3N5AHCmwBwYgp0As6xjhQ47rAUTUXxJiK+lLUxaGsX3hd/30qUpVElh05PbGuxRPgJwA==, + } + engines: { node: ">= 10" } detect-libc@2.1.2: - resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==, + } + engines: { node: ">=8" } pnpm@11.2.2: - resolution: {integrity: sha512-NuZiH61QYXiTZFXnAke4gI707CV5ep9DepMoGgIEhOJgf2pGmiLpgph8PbuIZuMHFRSrEKShdJ4G7c0ewRhDbw==} - engines: {node: '>=22.13'} + resolution: + { + integrity: sha512-NuZiH61QYXiTZFXnAke4gI707CV5ep9DepMoGgIEhOJgf2pGmiLpgph8PbuIZuMHFRSrEKShdJ4G7c0ewRhDbw==, + } + engines: { node: ">=22.13" } hasBin: true snapshots: - - '@pnpm/exe@11.2.2': + "@pnpm/exe@11.2.2": dependencies: - '@reflink/reflink': 0.1.19 + "@reflink/reflink": 0.1.19 detect-libc: 2.1.2 optionalDependencies: - '@pnpm/linux-arm64': 11.2.2 - '@pnpm/linux-x64': 11.2.2 - '@pnpm/linuxstatic-arm64': 11.2.2 - '@pnpm/linuxstatic-x64': 11.2.2 - '@pnpm/macos-arm64': 11.2.2 - '@pnpm/win-arm64': 11.2.2 - '@pnpm/win-x64': 11.2.2 + "@pnpm/linux-arm64": 11.2.2 + "@pnpm/linux-x64": 11.2.2 + "@pnpm/linuxstatic-arm64": 11.2.2 + "@pnpm/linuxstatic-x64": 11.2.2 + "@pnpm/macos-arm64": 11.2.2 + "@pnpm/win-arm64": 11.2.2 + "@pnpm/win-x64": 11.2.2 - '@pnpm/linux-arm64@11.2.2': + "@pnpm/linux-arm64@11.2.2": optional: true - '@pnpm/linux-x64@11.2.2': + "@pnpm/linux-x64@11.2.2": optional: true - '@pnpm/linuxstatic-arm64@11.2.2': + "@pnpm/linuxstatic-arm64@11.2.2": optional: true - '@pnpm/linuxstatic-x64@11.2.2': + "@pnpm/linuxstatic-x64@11.2.2": optional: true - '@pnpm/macos-arm64@11.2.2': + "@pnpm/macos-arm64@11.2.2": optional: true - '@pnpm/win-arm64@11.2.2': + "@pnpm/win-arm64@11.2.2": optional: true - '@pnpm/win-x64@11.2.2': + "@pnpm/win-x64@11.2.2": optional: true - '@reflink/reflink-darwin-arm64@0.1.19': + "@reflink/reflink-darwin-arm64@0.1.19": optional: true - '@reflink/reflink-darwin-x64@0.1.19': + "@reflink/reflink-darwin-x64@0.1.19": optional: true - '@reflink/reflink-linux-arm64-gnu@0.1.19': + "@reflink/reflink-linux-arm64-gnu@0.1.19": optional: true - '@reflink/reflink-linux-arm64-musl@0.1.19': + "@reflink/reflink-linux-arm64-musl@0.1.19": optional: true - '@reflink/reflink-linux-x64-gnu@0.1.19': + "@reflink/reflink-linux-x64-gnu@0.1.19": optional: true - '@reflink/reflink-linux-x64-musl@0.1.19': + "@reflink/reflink-linux-x64-musl@0.1.19": optional: true - '@reflink/reflink-win32-arm64-msvc@0.1.19': + "@reflink/reflink-win32-arm64-msvc@0.1.19": optional: true - '@reflink/reflink-win32-x64-msvc@0.1.19': + "@reflink/reflink-win32-x64-msvc@0.1.19": optional: true - '@reflink/reflink@0.1.19': + "@reflink/reflink@0.1.19": optionalDependencies: - '@reflink/reflink-darwin-arm64': 0.1.19 - '@reflink/reflink-darwin-x64': 0.1.19 - '@reflink/reflink-linux-arm64-gnu': 0.1.19 - '@reflink/reflink-linux-arm64-musl': 0.1.19 - '@reflink/reflink-linux-x64-gnu': 0.1.19 - '@reflink/reflink-linux-x64-musl': 0.1.19 - '@reflink/reflink-win32-arm64-msvc': 0.1.19 - '@reflink/reflink-win32-x64-msvc': 0.1.19 + "@reflink/reflink-darwin-arm64": 0.1.19 + "@reflink/reflink-darwin-x64": 0.1.19 + "@reflink/reflink-linux-arm64-gnu": 0.1.19 + "@reflink/reflink-linux-arm64-musl": 0.1.19 + "@reflink/reflink-linux-x64-gnu": 0.1.19 + "@reflink/reflink-linux-x64-musl": 0.1.19 + "@reflink/reflink-win32-arm64-msvc": 0.1.19 + "@reflink/reflink-win32-x64-msvc": 0.1.19 detect-libc@2.1.2: {} pnpm@11.2.2: {} --- -lockfileVersion: '9.0' +lockfileVersion: "9.0" settings: autoInstallPeers: true excludeLinksFromLockfile: false importers: - .: dependencies: - '@clack/prompts': + "@clack/prompts": specifier: ^1.4.0 version: 1.4.0 - '@sindresorhus/slugify': + "@sindresorhus/slugify": specifier: ^3.0.0 version: 3.0.0 cmd-ts: @@ -222,10 +275,16 @@ importers: gray-matter: specifier: ^4.0.3 version: 4.0.3 + pwd-fs: + specifier: ^3.5.4 + version: 3.5.4 devDependencies: - '@types/node': + "@types/node": specifier: ^25.9.1 version: 25.9.1 + prettier: + specifier: 3.8.3 + version: 3.8.3 tsx: specifier: ^4.22.3 version: 4.22.3 @@ -234,398 +293,591 @@ importers: version: 6.0.3 packages: - - '@clack/core@1.3.1': - resolution: {integrity: sha512-fT1qHVGAag4IEkrupZ6lRRbNCs1vS9P01KB/sG8zKgvUztbYtFBtQpjSITNwooDZ83tpsPzP0mRNs1/KVszCRA==} - engines: {node: '>= 20.12.0'} - - '@clack/prompts@1.4.0': - resolution: {integrity: sha512-S0My7XPGIgpRWMDG8uRqalbgT+a6FmCUdOW+HaIOVVpUPHOb7RrpvjTjiODadKp06fsrVDJZlIzc6yCTp4AnxA==} - engines: {node: '>= 20.12.0'} - - '@esbuild/aix-ppc64@0.28.0': - resolution: {integrity: sha512-lhRUCeuOyJQURhTxl4WkpFTjIsbDayJHih5kZC1giwE+MhIzAb7mEsQMqMf18rHLsrb5qI1tafG20mLxEWcWlA==} - engines: {node: '>=18'} + "@clack/core@1.3.1": + resolution: + { + integrity: sha512-fT1qHVGAag4IEkrupZ6lRRbNCs1vS9P01KB/sG8zKgvUztbYtFBtQpjSITNwooDZ83tpsPzP0mRNs1/KVszCRA==, + } + engines: { node: ">= 20.12.0" } + + "@clack/prompts@1.4.0": + resolution: + { + integrity: sha512-S0My7XPGIgpRWMDG8uRqalbgT+a6FmCUdOW+HaIOVVpUPHOb7RrpvjTjiODadKp06fsrVDJZlIzc6yCTp4AnxA==, + } + engines: { node: ">= 20.12.0" } + + "@esbuild/aix-ppc64@0.28.0": + resolution: + { + integrity: sha512-lhRUCeuOyJQURhTxl4WkpFTjIsbDayJHih5kZC1giwE+MhIzAb7mEsQMqMf18rHLsrb5qI1tafG20mLxEWcWlA==, + } + engines: { node: ">=18" } cpu: [ppc64] os: [aix] - '@esbuild/android-arm64@0.28.0': - resolution: {integrity: sha512-+WzIXQOSaGs33tLEgYPYe/yQHf0WTU0X42Jca3y8NWMbUVhp7rUnw+vAsRC/QiDrdD31IszMrZy+qwPOPjd+rw==} - engines: {node: '>=18'} + "@esbuild/android-arm64@0.28.0": + resolution: + { + integrity: sha512-+WzIXQOSaGs33tLEgYPYe/yQHf0WTU0X42Jca3y8NWMbUVhp7rUnw+vAsRC/QiDrdD31IszMrZy+qwPOPjd+rw==, + } + engines: { node: ">=18" } cpu: [arm64] os: [android] - '@esbuild/android-arm@0.28.0': - resolution: {integrity: sha512-wqh0ByljabXLKHeWXYLqoJ5jKC4XBaw6Hk08OfMrCRd2nP2ZQ5eleDZC41XHyCNgktBGYMbqnrJKq/K/lzPMSQ==} - engines: {node: '>=18'} + "@esbuild/android-arm@0.28.0": + resolution: + { + integrity: sha512-wqh0ByljabXLKHeWXYLqoJ5jKC4XBaw6Hk08OfMrCRd2nP2ZQ5eleDZC41XHyCNgktBGYMbqnrJKq/K/lzPMSQ==, + } + engines: { node: ">=18" } cpu: [arm] os: [android] - '@esbuild/android-x64@0.28.0': - resolution: {integrity: sha512-+VJggoaKhk2VNNqVL7f6S189UzShHC/mR9EE8rDdSkdpN0KflSwWY/gWjDrNxxisg8Fp1ZCD9jLMo4m0OUfeUA==} - engines: {node: '>=18'} + "@esbuild/android-x64@0.28.0": + resolution: + { + integrity: sha512-+VJggoaKhk2VNNqVL7f6S189UzShHC/mR9EE8rDdSkdpN0KflSwWY/gWjDrNxxisg8Fp1ZCD9jLMo4m0OUfeUA==, + } + engines: { node: ">=18" } cpu: [x64] os: [android] - '@esbuild/darwin-arm64@0.28.0': - resolution: {integrity: sha512-0T+A9WZm+bZ84nZBtk1ckYsOvyA3x7e2Acj1KdVfV4/2tdG4fzUp91YHx+GArWLtwqp77pBXVCPn2We7Letr0Q==} - engines: {node: '>=18'} + "@esbuild/darwin-arm64@0.28.0": + resolution: + { + integrity: sha512-0T+A9WZm+bZ84nZBtk1ckYsOvyA3x7e2Acj1KdVfV4/2tdG4fzUp91YHx+GArWLtwqp77pBXVCPn2We7Letr0Q==, + } + engines: { node: ">=18" } cpu: [arm64] os: [darwin] - '@esbuild/darwin-x64@0.28.0': - resolution: {integrity: sha512-fyzLm/DLDl/84OCfp2f/XQ4flmORsjU7VKt8HLjvIXChJoFFOIL6pLJPH4Yhd1n1gGFF9mPwtlN5Wf82DZs+LQ==} - engines: {node: '>=18'} + "@esbuild/darwin-x64@0.28.0": + resolution: + { + integrity: sha512-fyzLm/DLDl/84OCfp2f/XQ4flmORsjU7VKt8HLjvIXChJoFFOIL6pLJPH4Yhd1n1gGFF9mPwtlN5Wf82DZs+LQ==, + } + engines: { node: ">=18" } cpu: [x64] os: [darwin] - '@esbuild/freebsd-arm64@0.28.0': - resolution: {integrity: sha512-l9GeW5UZBT9k9brBYI+0WDffcRxgHQD8ShN2Ur4xWq/NFzUKm3k5lsH4PdaRgb2w7mI9u61nr2gI2mLI27Nh3Q==} - engines: {node: '>=18'} + "@esbuild/freebsd-arm64@0.28.0": + resolution: + { + integrity: sha512-l9GeW5UZBT9k9brBYI+0WDffcRxgHQD8ShN2Ur4xWq/NFzUKm3k5lsH4PdaRgb2w7mI9u61nr2gI2mLI27Nh3Q==, + } + engines: { node: ">=18" } cpu: [arm64] os: [freebsd] - '@esbuild/freebsd-x64@0.28.0': - resolution: {integrity: sha512-BXoQai/A0wPO6Es3yFJ7APCiKGc1tdAEOgeTNy3SsB491S3aHn4S4r3e976eUnPdU+NbdtmBuLncYir2tMU9Nw==} - engines: {node: '>=18'} + "@esbuild/freebsd-x64@0.28.0": + resolution: + { + integrity: sha512-BXoQai/A0wPO6Es3yFJ7APCiKGc1tdAEOgeTNy3SsB491S3aHn4S4r3e976eUnPdU+NbdtmBuLncYir2tMU9Nw==, + } + engines: { node: ">=18" } cpu: [x64] os: [freebsd] - '@esbuild/linux-arm64@0.28.0': - resolution: {integrity: sha512-RVyzfb3FWsGA55n6WY0MEIEPURL1FcbhFE6BffZEMEekfCzCIMtB5yyDcFnVbTnwk+CLAgTujmV/Lgvih56W+A==} - engines: {node: '>=18'} + "@esbuild/linux-arm64@0.28.0": + resolution: + { + integrity: sha512-RVyzfb3FWsGA55n6WY0MEIEPURL1FcbhFE6BffZEMEekfCzCIMtB5yyDcFnVbTnwk+CLAgTujmV/Lgvih56W+A==, + } + engines: { node: ">=18" } cpu: [arm64] os: [linux] - '@esbuild/linux-arm@0.28.0': - resolution: {integrity: sha512-CjaaREJagqJp7iTaNQjjidaNbCKYcd4IDkzbwwxtSvjI7NZm79qiHc8HqciMddQ6CKvJT6aBd8lO9kN/ZudLlw==} - engines: {node: '>=18'} + "@esbuild/linux-arm@0.28.0": + resolution: + { + integrity: sha512-CjaaREJagqJp7iTaNQjjidaNbCKYcd4IDkzbwwxtSvjI7NZm79qiHc8HqciMddQ6CKvJT6aBd8lO9kN/ZudLlw==, + } + engines: { node: ">=18" } cpu: [arm] os: [linux] - '@esbuild/linux-ia32@0.28.0': - resolution: {integrity: sha512-KBnSTt1kxl9x70q+ydterVdl+Cn0H18ngRMRCEQfrbqdUuntQQ0LoMZv47uB97NljZFzY6HcfqEZ2SAyIUTQBQ==} - engines: {node: '>=18'} + "@esbuild/linux-ia32@0.28.0": + resolution: + { + integrity: sha512-KBnSTt1kxl9x70q+ydterVdl+Cn0H18ngRMRCEQfrbqdUuntQQ0LoMZv47uB97NljZFzY6HcfqEZ2SAyIUTQBQ==, + } + engines: { node: ">=18" } cpu: [ia32] os: [linux] - '@esbuild/linux-loong64@0.28.0': - resolution: {integrity: sha512-zpSlUce1mnxzgBADvxKXX5sl8aYQHo2ezvMNI8I0lbblJtp8V4odlm3Yzlj7gPyt3T8ReksE6bK+pT3WD+aJRg==} - engines: {node: '>=18'} + "@esbuild/linux-loong64@0.28.0": + resolution: + { + integrity: sha512-zpSlUce1mnxzgBADvxKXX5sl8aYQHo2ezvMNI8I0lbblJtp8V4odlm3Yzlj7gPyt3T8ReksE6bK+pT3WD+aJRg==, + } + engines: { node: ">=18" } cpu: [loong64] os: [linux] - '@esbuild/linux-mips64el@0.28.0': - resolution: {integrity: sha512-2jIfP6mmjkdmeTlsX/9vmdmhBmKADrWqN7zcdtHIeNSCH1SqIoNI63cYsjQR8J+wGa4Y5izRcSHSm8K3QWmk3w==} - engines: {node: '>=18'} + "@esbuild/linux-mips64el@0.28.0": + resolution: + { + integrity: sha512-2jIfP6mmjkdmeTlsX/9vmdmhBmKADrWqN7zcdtHIeNSCH1SqIoNI63cYsjQR8J+wGa4Y5izRcSHSm8K3QWmk3w==, + } + engines: { node: ">=18" } cpu: [mips64el] os: [linux] - '@esbuild/linux-ppc64@0.28.0': - resolution: {integrity: sha512-bc0FE9wWeC0WBm49IQMPSPILRocGTQt3j5KPCA8os6VprfuJ7KD+5PzESSrJ6GmPIPJK965ZJHTUlSA6GNYEhg==} - engines: {node: '>=18'} + "@esbuild/linux-ppc64@0.28.0": + resolution: + { + integrity: sha512-bc0FE9wWeC0WBm49IQMPSPILRocGTQt3j5KPCA8os6VprfuJ7KD+5PzESSrJ6GmPIPJK965ZJHTUlSA6GNYEhg==, + } + engines: { node: ">=18" } cpu: [ppc64] os: [linux] - '@esbuild/linux-riscv64@0.28.0': - resolution: {integrity: sha512-SQPZOwoTTT/HXFXQJG/vBX8sOFagGqvZyXcgLA3NhIqcBv1BJU1d46c0rGcrij2B56Z2rNiSLaZOYW5cUk7yLQ==} - engines: {node: '>=18'} + "@esbuild/linux-riscv64@0.28.0": + resolution: + { + integrity: sha512-SQPZOwoTTT/HXFXQJG/vBX8sOFagGqvZyXcgLA3NhIqcBv1BJU1d46c0rGcrij2B56Z2rNiSLaZOYW5cUk7yLQ==, + } + engines: { node: ">=18" } cpu: [riscv64] os: [linux] - '@esbuild/linux-s390x@0.28.0': - resolution: {integrity: sha512-SCfR0HN8CEEjnYnySJTd2cw0k9OHB/YFzt5zgJEwa+wL/T/raGWYMBqwDNAC6dqFKmJYZoQBRfHjgwLHGSrn3Q==} - engines: {node: '>=18'} + "@esbuild/linux-s390x@0.28.0": + resolution: + { + integrity: sha512-SCfR0HN8CEEjnYnySJTd2cw0k9OHB/YFzt5zgJEwa+wL/T/raGWYMBqwDNAC6dqFKmJYZoQBRfHjgwLHGSrn3Q==, + } + engines: { node: ">=18" } cpu: [s390x] os: [linux] - '@esbuild/linux-x64@0.28.0': - resolution: {integrity: sha512-us0dSb9iFxIi8srnpl931Nvs65it/Jd2a2K3qs7fz2WfGPHqzfzZTfec7oxZJRNPXPnNYZtanmRc4AL/JwVzHQ==} - engines: {node: '>=18'} + "@esbuild/linux-x64@0.28.0": + resolution: + { + integrity: sha512-us0dSb9iFxIi8srnpl931Nvs65it/Jd2a2K3qs7fz2WfGPHqzfzZTfec7oxZJRNPXPnNYZtanmRc4AL/JwVzHQ==, + } + engines: { node: ">=18" } cpu: [x64] os: [linux] - '@esbuild/netbsd-arm64@0.28.0': - resolution: {integrity: sha512-CR/RYotgtCKwtftMwJlUU7xCVNg3lMYZ0RzTmAHSfLCXw3NtZtNpswLEj/Kkf6kEL3Gw+BpOekRX0BYCtklhUw==} - engines: {node: '>=18'} + "@esbuild/netbsd-arm64@0.28.0": + resolution: + { + integrity: sha512-CR/RYotgtCKwtftMwJlUU7xCVNg3lMYZ0RzTmAHSfLCXw3NtZtNpswLEj/Kkf6kEL3Gw+BpOekRX0BYCtklhUw==, + } + engines: { node: ">=18" } cpu: [arm64] os: [netbsd] - '@esbuild/netbsd-x64@0.28.0': - resolution: {integrity: sha512-nU1yhmYutL+fQ71Kxnhg8uEOdC0pwEW9entHykTgEbna2pw2dkbFSMeqjjyHZoCmt8SBkOSvV+yNmm94aUrrqw==} - engines: {node: '>=18'} + "@esbuild/netbsd-x64@0.28.0": + resolution: + { + integrity: sha512-nU1yhmYutL+fQ71Kxnhg8uEOdC0pwEW9entHykTgEbna2pw2dkbFSMeqjjyHZoCmt8SBkOSvV+yNmm94aUrrqw==, + } + engines: { node: ">=18" } cpu: [x64] os: [netbsd] - '@esbuild/openbsd-arm64@0.28.0': - resolution: {integrity: sha512-cXb5vApOsRsxsEl4mcZ1XY3D4DzcoMxR/nnc4IyqYs0rTI8ZKmW6kyyg+11Z8yvgMfAEldKzP7AdP64HnSC/6g==} - engines: {node: '>=18'} + "@esbuild/openbsd-arm64@0.28.0": + resolution: + { + integrity: sha512-cXb5vApOsRsxsEl4mcZ1XY3D4DzcoMxR/nnc4IyqYs0rTI8ZKmW6kyyg+11Z8yvgMfAEldKzP7AdP64HnSC/6g==, + } + engines: { node: ">=18" } cpu: [arm64] os: [openbsd] - '@esbuild/openbsd-x64@0.28.0': - resolution: {integrity: sha512-8wZM2qqtv9UP3mzy7HiGYNH/zjTA355mpeuA+859TyR+e+Tc08IHYpLJuMsfpDJwoLo1ikIJI8jC3GFjnRClzA==} - engines: {node: '>=18'} + "@esbuild/openbsd-x64@0.28.0": + resolution: + { + integrity: sha512-8wZM2qqtv9UP3mzy7HiGYNH/zjTA355mpeuA+859TyR+e+Tc08IHYpLJuMsfpDJwoLo1ikIJI8jC3GFjnRClzA==, + } + engines: { node: ">=18" } cpu: [x64] os: [openbsd] - '@esbuild/openharmony-arm64@0.28.0': - resolution: {integrity: sha512-FLGfyizszcef5C3YtoyQDACyg95+dndv79i2EekILBofh5wpCa1KuBqOWKrEHZg3zrL3t5ouE5jgr94vA+Wb2w==} - engines: {node: '>=18'} + "@esbuild/openharmony-arm64@0.28.0": + resolution: + { + integrity: sha512-FLGfyizszcef5C3YtoyQDACyg95+dndv79i2EekILBofh5wpCa1KuBqOWKrEHZg3zrL3t5ouE5jgr94vA+Wb2w==, + } + engines: { node: ">=18" } cpu: [arm64] os: [openharmony] - '@esbuild/sunos-x64@0.28.0': - resolution: {integrity: sha512-1ZgjUoEdHZZl/YlV76TSCz9Hqj9h9YmMGAgAPYd+q4SicWNX3G5GCyx9uhQWSLcbvPW8Ni7lj4gDa1T40akdlw==} - engines: {node: '>=18'} + "@esbuild/sunos-x64@0.28.0": + resolution: + { + integrity: sha512-1ZgjUoEdHZZl/YlV76TSCz9Hqj9h9YmMGAgAPYd+q4SicWNX3G5GCyx9uhQWSLcbvPW8Ni7lj4gDa1T40akdlw==, + } + engines: { node: ">=18" } cpu: [x64] os: [sunos] - '@esbuild/win32-arm64@0.28.0': - resolution: {integrity: sha512-Q9StnDmQ/enxnpxCCLSg0oo4+34B9TdXpuyPeTedN/6+iXBJ4J+zwfQI28u/Jl40nOYAxGoNi7mFP40RUtkmUA==} - engines: {node: '>=18'} + "@esbuild/win32-arm64@0.28.0": + resolution: + { + integrity: sha512-Q9StnDmQ/enxnpxCCLSg0oo4+34B9TdXpuyPeTedN/6+iXBJ4J+zwfQI28u/Jl40nOYAxGoNi7mFP40RUtkmUA==, + } + engines: { node: ">=18" } cpu: [arm64] os: [win32] - '@esbuild/win32-ia32@0.28.0': - resolution: {integrity: sha512-zF3ag/gfiCe6U2iczcRzSYJKH1DCI+ByzSENHlM2FcDbEeo5Zd2C86Aq0tKUYAJJ1obRP84ymxIAksZUcdztHA==} - engines: {node: '>=18'} + "@esbuild/win32-ia32@0.28.0": + resolution: + { + integrity: sha512-zF3ag/gfiCe6U2iczcRzSYJKH1DCI+ByzSENHlM2FcDbEeo5Zd2C86Aq0tKUYAJJ1obRP84ymxIAksZUcdztHA==, + } + engines: { node: ">=18" } cpu: [ia32] os: [win32] - '@esbuild/win32-x64@0.28.0': - resolution: {integrity: sha512-pEl1bO9mfAmIC+tW5btTmrKaujg3zGtUmWNdCw/xs70FBjwAL3o9OEKNHvNmnyylD6ubxUERiEhdsL0xBQ9efw==} - engines: {node: '>=18'} + "@esbuild/win32-x64@0.28.0": + resolution: + { + integrity: sha512-pEl1bO9mfAmIC+tW5btTmrKaujg3zGtUmWNdCw/xs70FBjwAL3o9OEKNHvNmnyylD6ubxUERiEhdsL0xBQ9efw==, + } + engines: { node: ">=18" } cpu: [x64] os: [win32] - '@sindresorhus/slugify@3.0.0': - resolution: {integrity: sha512-SCrKh1zS96q+CuH5GumHcyQEVPsM4Ve8oE0E6tw7AAhGq50K8ojbTUOQnX/j9Mhcv/AXiIsbCfquovyGOo5fGw==} - engines: {node: '>=20'} - - '@sindresorhus/transliterate@2.3.1': - resolution: {integrity: sha512-gVaaGtKYMYAMmI8buULVH3A2TXVJ98QiwGwI7ddrWGuGidGC2uRt4FHs22+8iROJ0QTzju9CuMjlVsrvpqsdhA==} - engines: {node: '>=20'} - - '@types/node@25.9.1': - resolution: {integrity: sha512-xfrlY7UD5rMJk3ZVJP8BNzS28J36YJg+xp+LPXV1TdWxr8uMH5A860QNxYDGQe/ylDSgjxE52Q9VnO7p75tJxg==} + "@sindresorhus/slugify@3.0.0": + resolution: + { + integrity: sha512-SCrKh1zS96q+CuH5GumHcyQEVPsM4Ve8oE0E6tw7AAhGq50K8ojbTUOQnX/j9Mhcv/AXiIsbCfquovyGOo5fGw==, + } + engines: { node: ">=20" } + + "@sindresorhus/transliterate@2.3.1": + resolution: + { + integrity: sha512-gVaaGtKYMYAMmI8buULVH3A2TXVJ98QiwGwI7ddrWGuGidGC2uRt4FHs22+8iROJ0QTzju9CuMjlVsrvpqsdhA==, + } + engines: { node: ">=20" } + + "@types/node@25.9.1": + resolution: + { + integrity: sha512-xfrlY7UD5rMJk3ZVJP8BNzS28J36YJg+xp+LPXV1TdWxr8uMH5A860QNxYDGQe/ylDSgjxE52Q9VnO7p75tJxg==, + } ansi-regex@6.2.2: - resolution: {integrity: sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==, + } + engines: { node: ">=12" } argparse@1.0.10: - resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} + resolution: + { + integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==, + } chalk@5.6.2: - resolution: {integrity: sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==} - engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + resolution: + { + integrity: sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==, + } + engines: { node: ^12.17.0 || ^14.13 || >=16.0.0 } cmd-ts@0.15.0: - resolution: {integrity: sha512-ASyAx+P6DNzNEZ6OYmvjjaLAQeI3L+4lm5rX2Jg8tondXdj06o9JTxi9mfC92KoVbrVFKhZ+j2TfBF8fcura6g==} + resolution: + { + integrity: sha512-ASyAx+P6DNzNEZ6OYmvjjaLAQeI3L+4lm5rX2Jg8tondXdj06o9JTxi9mfC92KoVbrVFKhZ+j2TfBF8fcura6g==, + } debug@4.4.3: - resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} - engines: {node: '>=6.0'} + resolution: + { + integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==, + } + engines: { node: ">=6.0" } peerDependencies: - supports-color: '*' + supports-color: "*" peerDependenciesMeta: supports-color: optional: true didyoumean@1.2.2: - resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} + resolution: + { + integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==, + } esbuild@0.28.0: - resolution: {integrity: sha512-sNR9MHpXSUV/XB4zmsFKN+QgVG82Cc7+/aaxJ8Adi8hyOac+EXptIp45QBPaVyX3N70664wRbTcLTOemCAnyqw==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-sNR9MHpXSUV/XB4zmsFKN+QgVG82Cc7+/aaxJ8Adi8hyOac+EXptIp45QBPaVyX3N70664wRbTcLTOemCAnyqw==, + } + engines: { node: ">=18" } hasBin: true escape-string-regexp@5.0.0: - resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==, + } + engines: { node: ">=12" } esprima@4.0.1: - resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} - engines: {node: '>=4'} + resolution: + { + integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==, + } + engines: { node: ">=4" } hasBin: true extend-shallow@2.0.1: - resolution: {integrity: sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==} - engines: {node: '>=0.10.0'} + resolution: + { + integrity: sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==, + } + engines: { node: ">=0.10.0" } fast-string-truncated-width@3.0.3: - resolution: {integrity: sha512-0jjjIEL6+0jag3l2XWWizO64/aZVtpiGE3t0Zgqxv0DPuxiMjvB3M24fCyhZUO4KomJQPj3LTSUnDP3GpdwC0g==} + resolution: + { + integrity: sha512-0jjjIEL6+0jag3l2XWWizO64/aZVtpiGE3t0Zgqxv0DPuxiMjvB3M24fCyhZUO4KomJQPj3LTSUnDP3GpdwC0g==, + } fast-string-width@3.0.2: - resolution: {integrity: sha512-gX8LrtNEI5hq8DVUfRQMbr5lpaS4nMIWV+7XEbXk2b8kiQIizgnlr12B4dA3ZEx3308ze0O4Q1R+cHts8kyUJg==} + resolution: + { + integrity: sha512-gX8LrtNEI5hq8DVUfRQMbr5lpaS4nMIWV+7XEbXk2b8kiQIizgnlr12B4dA3ZEx3308ze0O4Q1R+cHts8kyUJg==, + } fast-wrap-ansi@0.2.2: - resolution: {integrity: sha512-7F2Fl+TjRSenLqlU3UjSH0iyqopqoZIu7eZVpEirP2g1GtWa2G/ecEmBdgz31+Mxr+ELclgg6sokpSFIQiZ02Q==} + resolution: + { + integrity: sha512-7F2Fl+TjRSenLqlU3UjSH0iyqopqoZIu7eZVpEirP2g1GtWa2G/ecEmBdgz31+Mxr+ELclgg6sokpSFIQiZ02Q==, + } filename-reserved-regex@4.0.0: - resolution: {integrity: sha512-9ZT504KxEQDamsOogZImAWGEN24R1uFAxU3ZS4AZqn2ooidmN68Olh7n4/RcA4lLatZztjA0ZSuxeLHVoCc8JA==} - engines: {node: '>=20'} + resolution: + { + integrity: sha512-9ZT504KxEQDamsOogZImAWGEN24R1uFAxU3ZS4AZqn2ooidmN68Olh7n4/RcA4lLatZztjA0ZSuxeLHVoCc8JA==, + } + engines: { node: ">=20" } filenamify@7.0.1: - resolution: {integrity: sha512-9b4rfnaX2MkJCgp27wypV6DAMvj4WMOSgJ+TdcpJIO84Dql+Cv6iJjdG4XDTLubOWkfNiBv3joO59sau/TXw+Q==} - engines: {node: '>=20'} + resolution: + { + integrity: sha512-9b4rfnaX2MkJCgp27wypV6DAMvj4WMOSgJ+TdcpJIO84Dql+Cv6iJjdG4XDTLubOWkfNiBv3joO59sau/TXw+Q==, + } + engines: { node: ">=20" } fsevents@2.3.3: - resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} - engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + resolution: + { + integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==, + } + engines: { node: ^8.16.0 || ^10.6.0 || >=11.0.0 } os: [darwin] gray-matter@4.0.3: - resolution: {integrity: sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==} - engines: {node: '>=6.0'} + resolution: + { + integrity: sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==, + } + engines: { node: ">=6.0" } is-extendable@0.1.1: - resolution: {integrity: sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==} - engines: {node: '>=0.10.0'} + resolution: + { + integrity: sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==, + } + engines: { node: ">=0.10.0" } js-yaml@3.14.2: - resolution: {integrity: sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==} + resolution: + { + integrity: sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==, + } hasBin: true kind-of@6.0.3: - resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} - engines: {node: '>=0.10.0'} + resolution: + { + integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==, + } + engines: { node: ">=0.10.0" } ms@2.1.3: - resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + resolution: + { + integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==, + } + + prettier@3.8.3: + resolution: + { + integrity: sha512-7igPTM53cGHMW8xWuVTydi2KO233VFiTNyF5hLJqpilHfmn8C8gPf+PS7dUT64YcXFbiMGZxS9pCSxL/Dxm/Jw==, + } + engines: { node: ">=14" } + hasBin: true + + pwd-fs@3.5.4: + resolution: + { + integrity: sha512-VLvaxqHcZC4+eCOBGnCKprIT7B2XGbdH2TusJF3z4CiAiHKB6l0D43b0hgZ5NzdstPTduapa0Hg7EuX0Lwu9/g==, + } + engines: { node: ">=18" } section-matter@1.0.0: - resolution: {integrity: sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==} - engines: {node: '>=4'} + resolution: + { + integrity: sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==, + } + engines: { node: ">=4" } sisteransi@1.0.5: - resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} + resolution: + { + integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==, + } sprintf-js@1.0.3: - resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} + resolution: + { + integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==, + } strip-ansi@7.2.0: - resolution: {integrity: sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==, + } + engines: { node: ">=12" } strip-bom-string@1.0.0: - resolution: {integrity: sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==} - engines: {node: '>=0.10.0'} + resolution: + { + integrity: sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==, + } + engines: { node: ">=0.10.0" } tsx@4.22.3: - resolution: {integrity: sha512-mdoNxBC/cSQObGGVQ5Bpn5i+yv7j68gk3Nfm3wFjcJg3Z0Mix9jzAFfP12prmm5eVGmDKtp0yyArrs0Q+8gZHg==} - engines: {node: '>=18.0.0'} + resolution: + { + integrity: sha512-mdoNxBC/cSQObGGVQ5Bpn5i+yv7j68gk3Nfm3wFjcJg3Z0Mix9jzAFfP12prmm5eVGmDKtp0yyArrs0Q+8gZHg==, + } + engines: { node: ">=18.0.0" } hasBin: true typescript@6.0.3: - resolution: {integrity: sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw==} - engines: {node: '>=14.17'} + resolution: + { + integrity: sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw==, + } + engines: { node: ">=14.17" } hasBin: true undici-types@7.24.6: - resolution: {integrity: sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg==} + resolution: + { + integrity: sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg==, + } snapshots: - - '@clack/core@1.3.1': + "@clack/core@1.3.1": dependencies: fast-wrap-ansi: 0.2.2 sisteransi: 1.0.5 - '@clack/prompts@1.4.0': + "@clack/prompts@1.4.0": dependencies: - '@clack/core': 1.3.1 + "@clack/core": 1.3.1 fast-string-width: 3.0.2 fast-wrap-ansi: 0.2.2 sisteransi: 1.0.5 - '@esbuild/aix-ppc64@0.28.0': + "@esbuild/aix-ppc64@0.28.0": optional: true - '@esbuild/android-arm64@0.28.0': + "@esbuild/android-arm64@0.28.0": optional: true - '@esbuild/android-arm@0.28.0': + "@esbuild/android-arm@0.28.0": optional: true - '@esbuild/android-x64@0.28.0': + "@esbuild/android-x64@0.28.0": optional: true - '@esbuild/darwin-arm64@0.28.0': + "@esbuild/darwin-arm64@0.28.0": optional: true - '@esbuild/darwin-x64@0.28.0': + "@esbuild/darwin-x64@0.28.0": optional: true - '@esbuild/freebsd-arm64@0.28.0': + "@esbuild/freebsd-arm64@0.28.0": optional: true - '@esbuild/freebsd-x64@0.28.0': + "@esbuild/freebsd-x64@0.28.0": optional: true - '@esbuild/linux-arm64@0.28.0': + "@esbuild/linux-arm64@0.28.0": optional: true - '@esbuild/linux-arm@0.28.0': + "@esbuild/linux-arm@0.28.0": optional: true - '@esbuild/linux-ia32@0.28.0': + "@esbuild/linux-ia32@0.28.0": optional: true - '@esbuild/linux-loong64@0.28.0': + "@esbuild/linux-loong64@0.28.0": optional: true - '@esbuild/linux-mips64el@0.28.0': + "@esbuild/linux-mips64el@0.28.0": optional: true - '@esbuild/linux-ppc64@0.28.0': + "@esbuild/linux-ppc64@0.28.0": optional: true - '@esbuild/linux-riscv64@0.28.0': + "@esbuild/linux-riscv64@0.28.0": optional: true - '@esbuild/linux-s390x@0.28.0': + "@esbuild/linux-s390x@0.28.0": optional: true - '@esbuild/linux-x64@0.28.0': + "@esbuild/linux-x64@0.28.0": optional: true - '@esbuild/netbsd-arm64@0.28.0': + "@esbuild/netbsd-arm64@0.28.0": optional: true - '@esbuild/netbsd-x64@0.28.0': + "@esbuild/netbsd-x64@0.28.0": optional: true - '@esbuild/openbsd-arm64@0.28.0': + "@esbuild/openbsd-arm64@0.28.0": optional: true - '@esbuild/openbsd-x64@0.28.0': + "@esbuild/openbsd-x64@0.28.0": optional: true - '@esbuild/openharmony-arm64@0.28.0': + "@esbuild/openharmony-arm64@0.28.0": optional: true - '@esbuild/sunos-x64@0.28.0': + "@esbuild/sunos-x64@0.28.0": optional: true - '@esbuild/win32-arm64@0.28.0': + "@esbuild/win32-arm64@0.28.0": optional: true - '@esbuild/win32-ia32@0.28.0': + "@esbuild/win32-ia32@0.28.0": optional: true - '@esbuild/win32-x64@0.28.0': + "@esbuild/win32-x64@0.28.0": optional: true - '@sindresorhus/slugify@3.0.0': + "@sindresorhus/slugify@3.0.0": dependencies: - '@sindresorhus/transliterate': 2.3.1 + "@sindresorhus/transliterate": 2.3.1 escape-string-regexp: 5.0.0 - '@sindresorhus/transliterate@2.3.1': {} + "@sindresorhus/transliterate@2.3.1": {} - '@types/node@25.9.1': + "@types/node@25.9.1": dependencies: undici-types: 7.24.6 @@ -654,32 +906,32 @@ snapshots: esbuild@0.28.0: optionalDependencies: - '@esbuild/aix-ppc64': 0.28.0 - '@esbuild/android-arm': 0.28.0 - '@esbuild/android-arm64': 0.28.0 - '@esbuild/android-x64': 0.28.0 - '@esbuild/darwin-arm64': 0.28.0 - '@esbuild/darwin-x64': 0.28.0 - '@esbuild/freebsd-arm64': 0.28.0 - '@esbuild/freebsd-x64': 0.28.0 - '@esbuild/linux-arm': 0.28.0 - '@esbuild/linux-arm64': 0.28.0 - '@esbuild/linux-ia32': 0.28.0 - '@esbuild/linux-loong64': 0.28.0 - '@esbuild/linux-mips64el': 0.28.0 - '@esbuild/linux-ppc64': 0.28.0 - '@esbuild/linux-riscv64': 0.28.0 - '@esbuild/linux-s390x': 0.28.0 - '@esbuild/linux-x64': 0.28.0 - '@esbuild/netbsd-arm64': 0.28.0 - '@esbuild/netbsd-x64': 0.28.0 - '@esbuild/openbsd-arm64': 0.28.0 - '@esbuild/openbsd-x64': 0.28.0 - '@esbuild/openharmony-arm64': 0.28.0 - '@esbuild/sunos-x64': 0.28.0 - '@esbuild/win32-arm64': 0.28.0 - '@esbuild/win32-ia32': 0.28.0 - '@esbuild/win32-x64': 0.28.0 + "@esbuild/aix-ppc64": 0.28.0 + "@esbuild/android-arm": 0.28.0 + "@esbuild/android-arm64": 0.28.0 + "@esbuild/android-x64": 0.28.0 + "@esbuild/darwin-arm64": 0.28.0 + "@esbuild/darwin-x64": 0.28.0 + "@esbuild/freebsd-arm64": 0.28.0 + "@esbuild/freebsd-x64": 0.28.0 + "@esbuild/linux-arm": 0.28.0 + "@esbuild/linux-arm64": 0.28.0 + "@esbuild/linux-ia32": 0.28.0 + "@esbuild/linux-loong64": 0.28.0 + "@esbuild/linux-mips64el": 0.28.0 + "@esbuild/linux-ppc64": 0.28.0 + "@esbuild/linux-riscv64": 0.28.0 + "@esbuild/linux-s390x": 0.28.0 + "@esbuild/linux-x64": 0.28.0 + "@esbuild/netbsd-arm64": 0.28.0 + "@esbuild/netbsd-x64": 0.28.0 + "@esbuild/openbsd-arm64": 0.28.0 + "@esbuild/openbsd-x64": 0.28.0 + "@esbuild/openharmony-arm64": 0.28.0 + "@esbuild/sunos-x64": 0.28.0 + "@esbuild/win32-arm64": 0.28.0 + "@esbuild/win32-ia32": 0.28.0 + "@esbuild/win32-x64": 0.28.0 escape-string-regexp@5.0.0: {} @@ -726,6 +978,10 @@ snapshots: ms@2.1.3: {} + prettier@3.8.3: {} + + pwd-fs@3.5.4: {} + section-matter@1.0.0: dependencies: extend-shallow: 2.0.1 diff --git a/src/commands/new.ts b/src/commands/new.ts index 6b56f07..76962d0 100644 --- a/src/commands/new.ts +++ b/src/commands/new.ts @@ -2,20 +2,37 @@ import { command, restPositionals, string } from "cmd-ts"; import path from "node:path"; import slugify from "@sindresorhus/slugify"; import filenamify from "filenamify"; +import matter from "gray-matter"; +import type { Deps } from "../deps"; -export const newCommand = command({ +export function makeNewCommand({ config, pfs }: Deps) { + return command({ name: "new", description: "Create a new markdown file", args: { - new: restPositionals({ - type: string, - displayName: "file", - description: "name of the new post", - }), + new: restPositionals({ + type: string, + displayName: "file", + description: "name of the new post", + }), }, - handler: ({ new: titleArray }) => { - const title = titleArray.join(" "); - const slug = slugify(title); - console.log(slug); + handler: async ({ new: titleArray }) => { + const title = titleArray.join(" "); + const slug = slugify(title); + const fileName = filenamify(slug); + const frontmatter = generateFrontmatter(title); + const filePath = path.join(config.blogDir, `${fileName}.md`); + + await pfs.write(filePath, frontmatter); }, -}); + }); +} + +function generateFrontmatter(title: string): string { + const data = { + title, + date: new Date().toISOString(), + }; + + return matter.stringify("", data); +} diff --git a/src/deps.ts b/src/deps.ts new file mode 100644 index 0000000..f469d33 --- /dev/null +++ b/src/deps.ts @@ -0,0 +1,31 @@ +import type { PoweredFileSystem } from "pwd-fs"; + +export type Config = { + blogDir: string; +}; + +export type Deps = { + config: Config; + pfs: PoweredFileSystem; +}; + +const defaultConfig: Config = { + blogDir: "./src/blog", +}; + +export async function loadConfig(pfs: PoweredFileSystem): Promise { + try { + const raw = await pfs.read("./mkd.json"); + + if (!raw.trim()) { + return defaultConfig; + } + + return { + ...defaultConfig, + ...JSON.parse(raw), + }; + } catch { + return defaultConfig; + } +} diff --git a/src/index.ts b/src/index.ts index 53493bc..851c800 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,12 +1,25 @@ #!/usr/bin/env node import { run, subcommands } from "cmd-ts"; -import { newCommand } from "./commands/new"; +import { PoweredFileSystem } from "pwd-fs"; +import { loadConfig } from "./deps"; +import { makeNewCommand } from "./commands/new"; -const app = subcommands({ +async function main() { + const pfs = new PoweredFileSystem(); + const config = await loadConfig(pfs); + const deps = { config, pfs }; + + const app = subcommands({ name: "mkd", cmds: { - new: newCommand, + new: makeNewCommand(deps), }, -}); + }); -run(app, process.argv.slice(2)); + await run(app, process.argv.slice(2)); +} + +main().catch((error) => { + console.error(error); + process.exit(1); +}); diff --git a/test.md b/test.md deleted file mode 100644 index 653fe16..0000000 --- a/test.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -author: Jack Platten -createdAt: 2025-11-24T06:18:20.000Z -modifiedAt: null -title: Self hosting your PDS with Podman -featured: true -draft: false -tags: - - atproto - - server -description: A writeup of gotchas and other fun stuff along the way of deploying a PDS -atUri: 'at://did:plc:cwdkf4xxjpznceembuuspt3d/site.standard.document/3mdrs3mtops2m' ---- - -Bluesky is great (as evidenced by my multiple posts on it), but I wanted to own -my data more than it living on the Bluesky servers. Now I could have just used -the standard deployment as shown [in the PDS repo](https://github.com/bluesky-social/pds), -but I wanted to do something a little more fitting my deployment practices. diff --git a/tsconfig.json b/tsconfig.json index 035274c..cf8d90e 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,23 +1,23 @@ { - "compilerOptions": { - "lib": ["ES2022", "DOM"], - "target": "ES2022", - "module": "ESNext", - "moduleResolution": "bundler", - "outDir": "./dist", - "rootDir": "./src", - "declaration": true, - "sourceMap": true, - "strict": true, - "skipLibCheck": true, - "esModuleInterop": true, - "resolveJsonModule": true, - "forceConsistentCasingInFileNames": true, - "noFallthroughCasesInSwitch": true, - "noUncheckedIndexedAccess": true, - "noUnusedLocals": false, - "noUnusedParameters": false, - "types": ["node"], - }, - "include": ["src/**/*"], + "compilerOptions": { + "lib": ["ES2022", "DOM"], + "target": "ES2022", + "module": "ESNext", + "moduleResolution": "bundler", + "outDir": "./dist", + "rootDir": "./src", + "declaration": true, + "sourceMap": true, + "strict": true, + "skipLibCheck": true, + "esModuleInterop": true, + "resolveJsonModule": true, + "forceConsistentCasingInFileNames": true, + "noFallthroughCasesInSwitch": true, + "noUncheckedIndexedAccess": true, + "noUnusedLocals": false, + "noUnusedParameters": false, + "types": ["node"], + }, + "include": ["src/**/*"], } diff --git a/tsconfig.tsbuildinfo b/tsconfig.tsbuildinfo index 0b88e78..c495260 100644 --- a/tsconfig.tsbuildinfo +++ b/tsconfig.tsbuildinfo @@ -1 +1 @@ -{"root":["./src/index.ts","./src/commands/new.ts"],"version":"6.0.3"} \ No newline at end of file +{"root":["./src/deps.ts","./src/index.ts","./src/commands/new.ts"],"version":"6.0.3"} \ No newline at end of file