@ykdz/template 0.0.23 → 0.0.24
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.js +4 -575
- package/dist/main.d.ts +1 -0
- package/dist/main.js +370 -0
- package/node_modules/@typescript/old/LICENSE.txt +55 -0
- package/node_modules/@typescript/old/README.md +50 -0
- package/node_modules/@typescript/old/SECURITY.md +39 -0
- package/node_modules/@typescript/old/ThirdPartyNoticeText.txt +193 -0
- package/node_modules/@typescript/old/bin/tsc +2 -0
- package/node_modules/@typescript/old/bin/tsserver +2 -0
- package/node_modules/@typescript/old/lib/_tsc.js +134465 -0
- package/node_modules/@typescript/old/lib/_tsserver.js +659 -0
- package/node_modules/@typescript/old/lib/_typingsInstaller.js +222 -0
- package/node_modules/@typescript/old/lib/cs/diagnosticMessages.generated.json +2129 -0
- package/node_modules/@typescript/old/lib/de/diagnosticMessages.generated.json +2125 -0
- package/node_modules/@typescript/old/lib/es/diagnosticMessages.generated.json +2129 -0
- package/node_modules/@typescript/old/lib/fr/diagnosticMessages.generated.json +2129 -0
- package/node_modules/@typescript/old/lib/it/diagnosticMessages.generated.json +2125 -0
- package/node_modules/@typescript/old/lib/ja/diagnosticMessages.generated.json +2129 -0
- package/node_modules/@typescript/old/lib/ko/diagnosticMessages.generated.json +2129 -0
- package/node_modules/@typescript/old/lib/lib.d.ts +20 -0
- package/node_modules/@typescript/old/lib/lib.decorators.d.ts +382 -0
- package/node_modules/@typescript/old/lib/lib.decorators.legacy.d.ts +20 -0
- package/node_modules/@typescript/old/lib/lib.dom.asynciterable.d.ts +18 -0
- package/node_modules/@typescript/old/lib/lib.dom.d.ts +45125 -0
- package/node_modules/@typescript/old/lib/lib.dom.iterable.d.ts +18 -0
- package/node_modules/@typescript/old/lib/lib.es2015.collection.d.ts +150 -0
- package/node_modules/@typescript/old/lib/lib.es2015.core.d.ts +595 -0
- package/node_modules/@typescript/old/lib/lib.es2015.d.ts +26 -0
- package/node_modules/@typescript/old/lib/lib.es2015.generator.d.ts +75 -0
- package/node_modules/@typescript/old/lib/lib.es2015.iterable.d.ts +603 -0
- package/node_modules/@typescript/old/lib/lib.es2015.promise.d.ts +79 -0
- package/node_modules/@typescript/old/lib/lib.es2015.proxy.d.ts +126 -0
- package/node_modules/@typescript/old/lib/lib.es2015.reflect.d.ts +142 -0
- package/node_modules/@typescript/old/lib/lib.es2015.symbol.d.ts +44 -0
- package/node_modules/@typescript/old/lib/lib.es2015.symbol.wellknown.d.ts +324 -0
- package/node_modules/@typescript/old/lib/lib.es2016.array.include.d.ts +114 -0
- package/node_modules/@typescript/old/lib/lib.es2016.d.ts +19 -0
- package/node_modules/@typescript/old/lib/lib.es2016.full.d.ts +21 -0
- package/node_modules/@typescript/old/lib/lib.es2016.intl.d.ts +29 -0
- package/node_modules/@typescript/old/lib/lib.es2017.arraybuffer.d.ts +19 -0
- package/node_modules/@typescript/old/lib/lib.es2017.d.ts +24 -0
- package/node_modules/@typescript/old/lib/lib.es2017.date.d.ts +29 -0
- package/node_modules/@typescript/old/lib/lib.es2017.full.d.ts +21 -0
- package/node_modules/@typescript/old/lib/lib.es2017.intl.d.ts +42 -0
- package/node_modules/@typescript/old/lib/lib.es2017.object.d.ts +47 -0
- package/node_modules/@typescript/old/lib/lib.es2017.sharedmemory.d.ts +133 -0
- package/node_modules/@typescript/old/lib/lib.es2017.string.d.ts +43 -0
- package/node_modules/@typescript/old/lib/lib.es2017.typedarrays.d.ts +51 -0
- package/node_modules/@typescript/old/lib/lib.es2018.asyncgenerator.d.ts +75 -0
- package/node_modules/@typescript/old/lib/lib.es2018.asynciterable.d.ts +51 -0
- package/node_modules/@typescript/old/lib/lib.es2018.d.ts +22 -0
- package/node_modules/@typescript/old/lib/lib.es2018.full.d.ts +22 -0
- package/node_modules/@typescript/old/lib/lib.es2018.intl.d.ts +81 -0
- package/node_modules/@typescript/old/lib/lib.es2018.promise.d.ts +28 -0
- package/node_modules/@typescript/old/lib/lib.es2018.regexp.d.ts +35 -0
- package/node_modules/@typescript/old/lib/lib.es2019.array.d.ts +77 -0
- package/node_modules/@typescript/old/lib/lib.es2019.d.ts +22 -0
- package/node_modules/@typescript/old/lib/lib.es2019.full.d.ts +22 -0
- package/node_modules/@typescript/old/lib/lib.es2019.intl.d.ts +21 -0
- package/node_modules/@typescript/old/lib/lib.es2019.object.d.ts +31 -0
- package/node_modules/@typescript/old/lib/lib.es2019.string.d.ts +35 -0
- package/node_modules/@typescript/old/lib/lib.es2019.symbol.d.ts +22 -0
- package/node_modules/@typescript/old/lib/lib.es2020.bigint.d.ts +763 -0
- package/node_modules/@typescript/old/lib/lib.es2020.d.ts +25 -0
- package/node_modules/@typescript/old/lib/lib.es2020.date.d.ts +40 -0
- package/node_modules/@typescript/old/lib/lib.es2020.full.d.ts +22 -0
- package/node_modules/@typescript/old/lib/lib.es2020.intl.d.ts +472 -0
- package/node_modules/@typescript/old/lib/lib.es2020.number.d.ts +26 -0
- package/node_modules/@typescript/old/lib/lib.es2020.promise.d.ts +45 -0
- package/node_modules/@typescript/old/lib/lib.es2020.sharedmemory.d.ts +97 -0
- package/node_modules/@typescript/old/lib/lib.es2020.string.d.ts +42 -0
- package/node_modules/@typescript/old/lib/lib.es2020.symbol.wellknown.d.ts +39 -0
- package/node_modules/@typescript/old/lib/lib.es2021.d.ts +21 -0
- package/node_modules/@typescript/old/lib/lib.es2021.full.d.ts +22 -0
- package/node_modules/@typescript/old/lib/lib.es2021.intl.d.ts +164 -0
- package/node_modules/@typescript/old/lib/lib.es2021.promise.d.ts +46 -0
- package/node_modules/@typescript/old/lib/lib.es2021.string.d.ts +31 -0
- package/node_modules/@typescript/old/lib/lib.es2021.weakref.d.ts +76 -0
- package/node_modules/@typescript/old/lib/lib.es2022.array.d.ts +119 -0
- package/node_modules/@typescript/old/lib/lib.es2022.d.ts +23 -0
- package/node_modules/@typescript/old/lib/lib.es2022.error.d.ts +73 -0
- package/node_modules/@typescript/old/lib/lib.es2022.full.d.ts +22 -0
- package/node_modules/@typescript/old/lib/lib.es2022.intl.d.ts +143 -0
- package/node_modules/@typescript/old/lib/lib.es2022.object.d.ts +24 -0
- package/node_modules/@typescript/old/lib/lib.es2022.regexp.d.ts +37 -0
- package/node_modules/@typescript/old/lib/lib.es2022.string.d.ts +23 -0
- package/node_modules/@typescript/old/lib/lib.es2023.array.d.ts +922 -0
- package/node_modules/@typescript/old/lib/lib.es2023.collection.d.ts +19 -0
- package/node_modules/@typescript/old/lib/lib.es2023.d.ts +20 -0
- package/node_modules/@typescript/old/lib/lib.es2023.full.d.ts +22 -0
- package/node_modules/@typescript/old/lib/lib.es2023.intl.d.ts +62 -0
- package/node_modules/@typescript/old/lib/lib.es2024.arraybuffer.d.ts +63 -0
- package/node_modules/@typescript/old/lib/lib.es2024.collection.d.ts +27 -0
- package/node_modules/@typescript/old/lib/lib.es2024.d.ts +24 -0
- package/node_modules/@typescript/old/lib/lib.es2024.full.d.ts +22 -0
- package/node_modules/@typescript/old/lib/lib.es2024.object.d.ts +27 -0
- package/node_modules/@typescript/old/lib/lib.es2024.promise.d.ts +33 -0
- package/node_modules/@typescript/old/lib/lib.es2024.regexp.d.ts +23 -0
- package/node_modules/@typescript/old/lib/lib.es2024.sharedmemory.d.ts +66 -0
- package/node_modules/@typescript/old/lib/lib.es2024.string.d.ts +27 -0
- package/node_modules/@typescript/old/lib/lib.es2025.collection.d.ts +94 -0
- package/node_modules/@typescript/old/lib/lib.es2025.d.ts +23 -0
- package/node_modules/@typescript/old/lib/lib.es2025.float16.d.ts +443 -0
- package/node_modules/@typescript/old/lib/lib.es2025.full.d.ts +22 -0
- package/node_modules/@typescript/old/lib/lib.es2025.intl.d.ts +200 -0
- package/node_modules/@typescript/old/lib/lib.es2025.iterator.d.ts +146 -0
- package/node_modules/@typescript/old/lib/lib.es2025.promise.d.ts +32 -0
- package/node_modules/@typescript/old/lib/lib.es2025.regexp.d.ts +30 -0
- package/node_modules/@typescript/old/lib/lib.es5.d.ts +4599 -0
- package/node_modules/@typescript/old/lib/lib.es6.d.ts +21 -0
- package/node_modules/@typescript/old/lib/lib.esnext.array.d.ts +33 -0
- package/node_modules/@typescript/old/lib/lib.esnext.collection.d.ts +47 -0
- package/node_modules/@typescript/old/lib/lib.esnext.d.ts +27 -0
- package/node_modules/@typescript/old/lib/lib.esnext.date.d.ts +21 -0
- package/node_modules/@typescript/old/lib/lib.esnext.decorators.d.ts +26 -0
- package/node_modules/@typescript/old/lib/lib.esnext.disposable.d.ts +191 -0
- package/node_modules/@typescript/old/lib/lib.esnext.error.d.ts +22 -0
- package/node_modules/@typescript/old/lib/lib.esnext.full.d.ts +22 -0
- package/node_modules/@typescript/old/lib/lib.esnext.intl.d.ts +107 -0
- package/node_modules/@typescript/old/lib/lib.esnext.sharedmemory.d.ts +23 -0
- package/node_modules/@typescript/old/lib/lib.esnext.temporal.d.ts +485 -0
- package/node_modules/@typescript/old/lib/lib.esnext.typedarrays.d.ts +90 -0
- package/node_modules/@typescript/old/lib/lib.scripthost.d.ts +320 -0
- package/node_modules/@typescript/old/lib/lib.webworker.asynciterable.d.ts +18 -0
- package/node_modules/@typescript/old/lib/lib.webworker.d.ts +15606 -0
- package/node_modules/@typescript/old/lib/lib.webworker.importscripts.d.ts +21 -0
- package/node_modules/@typescript/old/lib/lib.webworker.iterable.d.ts +18 -0
- package/node_modules/@typescript/old/lib/pl/diagnosticMessages.generated.json +2129 -0
- package/node_modules/@typescript/old/lib/pt-br/diagnosticMessages.generated.json +2129 -0
- package/node_modules/@typescript/old/lib/ru/diagnosticMessages.generated.json +2125 -0
- package/node_modules/@typescript/old/lib/tr/diagnosticMessages.generated.json +2129 -0
- package/node_modules/@typescript/old/lib/tsc.js +8 -0
- package/node_modules/@typescript/old/lib/tsserver.js +8 -0
- package/node_modules/@typescript/old/lib/tsserverlibrary.d.ts +17 -0
- package/node_modules/@typescript/old/lib/tsserverlibrary.js +21 -0
- package/node_modules/@typescript/old/lib/typesMap.json +497 -0
- package/node_modules/@typescript/old/lib/typescript.d.ts +11448 -0
- package/node_modules/@typescript/old/lib/typescript.js +201039 -0
- package/node_modules/@typescript/old/lib/typingsInstaller.js +8 -0
- package/node_modules/@typescript/old/lib/watchGuard.js +53 -0
- package/node_modules/@typescript/old/lib/zh-cn/diagnosticMessages.generated.json +2129 -0
- package/node_modules/@typescript/old/lib/zh-tw/diagnosticMessages.generated.json +2125 -0
- package/node_modules/@typescript/old/package.json +118 -0
- package/node_modules/@ykdz/template-builtin-presets/dist/src/foundation.d.ts +85 -0
- package/node_modules/@ykdz/template-builtin-presets/dist/src/foundation.js +797 -0
- package/node_modules/@ykdz/template-builtin-presets/dist/src/index.d.ts +3 -0
- package/node_modules/@ykdz/template-builtin-presets/dist/src/index.js +2 -0
- package/node_modules/@ykdz/template-builtin-presets/dist/src/rust-bin/definition.d.ts +2 -0
- package/node_modules/@ykdz/template-builtin-presets/dist/src/rust-bin/definition.js +134 -0
- package/node_modules/@ykdz/template-builtin-presets/dist/src/shared/vue.d.ts +36 -0
- package/node_modules/@ykdz/template-builtin-presets/dist/src/shared/vue.js +106 -0
- package/node_modules/@ykdz/template-builtin-presets/dist/src/template-sources.d.ts +14 -0
- package/node_modules/@ykdz/template-builtin-presets/dist/src/template-sources.js +26 -0
- package/node_modules/@ykdz/template-builtin-presets/dist/src/ts-lib/definition.d.ts +2 -0
- package/node_modules/@ykdz/template-builtin-presets/dist/src/ts-lib/definition.js +138 -0
- package/node_modules/@ykdz/template-builtin-presets/dist/src/vike-app/definition.d.ts +2 -0
- package/node_modules/@ykdz/template-builtin-presets/dist/src/vike-app/definition.js +408 -0
- package/node_modules/@ykdz/template-builtin-presets/dist/src/vue-app/definition.d.ts +2 -0
- package/node_modules/@ykdz/template-builtin-presets/dist/src/vue-app/definition.js +94 -0
- package/node_modules/@ykdz/template-builtin-presets/dist/src/vue-hono-app/definition.d.ts +2 -0
- package/node_modules/@ykdz/template-builtin-presets/dist/src/vue-hono-app/definition.js +179 -0
- package/node_modules/@ykdz/template-builtin-presets/package.json +67 -0
- package/node_modules/@ykdz/{template-builtin-source/templates/vue-app/.github/dependabot.yml → template-builtin-presets/templates/foundation/.github/dependabot-rust.yml} +13 -0
- package/node_modules/@ykdz/template-builtin-presets/templates/foundation/.github/dependabot.dynamic.template +4 -0
- package/node_modules/@ykdz/{template-builtin-source/templates/ts-lib → template-builtin-presets/templates/foundation}/.github/dependabot.yml +5 -0
- package/node_modules/@ykdz/template-builtin-presets/templates/foundation/.github/workflows/check.dynamic.template +19 -0
- package/node_modules/@ykdz/template-builtin-presets/templates/foundation/.pnpmfile.cts +14 -0
- package/node_modules/@ykdz/template-builtin-presets/templates/foundation/TODO.md.template +5 -0
- package/node_modules/@ykdz/template-builtin-presets/templates/foundation/devcontainer.json +16 -0
- package/node_modules/@ykdz/template-builtin-presets/templates/foundation/gitignore +8 -0
- package/node_modules/@ykdz/template-builtin-presets/templates/foundation/pnpm-workspace.dynamic.txt +23 -0
- package/node_modules/@ykdz/template-builtin-presets/templates/foundation/pnpm-workspace.yaml +29 -0
- package/node_modules/@ykdz/template-builtin-presets/templates/foundation/rust/.vscode/extensions.json +3 -0
- package/node_modules/@ykdz/template-builtin-presets/templates/foundation/rust/.vscode/settings.json +5 -0
- package/node_modules/@ykdz/template-builtin-presets/templates/foundation/rust/devcontainer/devcontainer.json +21 -0
- package/node_modules/@ykdz/template-builtin-presets/templates/foundation/tsconfig.json +4 -0
- package/node_modules/@ykdz/template-builtin-presets/templates/foundation/turbo.json +18 -0
- package/node_modules/@ykdz/{template-builtin-source → template-builtin-presets}/templates/rust-bin/.github/dependabot.yml +5 -0
- package/node_modules/@ykdz/template-builtin-presets/templates/rust-bin/.github/workflows/check.yml +23 -0
- package/node_modules/@ykdz/template-builtin-presets/templates/rust-bin/.vscode/extensions.json +3 -0
- package/node_modules/@ykdz/template-builtin-presets/templates/rust-bin/.vscode/settings.json +5 -0
- package/node_modules/@ykdz/template-builtin-presets/templates/rust-bin/Cargo.lock +16 -0
- package/node_modules/@ykdz/template-builtin-presets/templates/rust-bin/Cargo.toml +27 -0
- package/node_modules/@ykdz/template-builtin-presets/templates/rust-bin/devcontainer/devcontainer.json +21 -0
- package/node_modules/@ykdz/template-builtin-presets/templates/rust-bin/devcontainer/rust.Dockerfile +16 -0
- package/node_modules/@ykdz/template-builtin-presets/templates/rust-bin/rust-toolchain.toml +3 -0
- package/node_modules/@ykdz/template-builtin-presets/templates/shared/devcontainer/node-pnpm.Dockerfile +12 -0
- package/node_modules/@ykdz/template-builtin-presets/templates/shared/devcontainer/shellcheck.Dockerfile +3 -0
- package/node_modules/@ykdz/template-builtin-presets/templates/shared/editor-customization/capabilities.json +38 -0
- package/node_modules/@ykdz/template-builtin-presets/templates/shared/oxc/node/oxlint.config.ts +6 -0
- package/node_modules/@ykdz/template-builtin-presets/templates/shared/oxc/oxfmt.config.ts +3 -0
- package/node_modules/@ykdz/{template-builtin-source → template-builtin-presets}/templates/shared/oxc/tsconfig.config.json +2 -2
- package/node_modules/@ykdz/template-builtin-presets/templates/shared/vue/tsconfig.app.json +25 -0
- package/node_modules/@ykdz/template-builtin-presets/templates/shared/vue/tsconfig.json +8 -0
- package/node_modules/@ykdz/template-builtin-presets/templates/shared/vue/tsconfig.node.json +30 -0
- package/node_modules/@ykdz/template-builtin-presets/templates/shared/vue/tsconfig.test.json +9 -0
- package/node_modules/@ykdz/template-builtin-presets/templates/shared/vue/typescript/run-vue-tsc.ts +12 -0
- package/node_modules/@ykdz/{template-builtin-source/templates/vue-hono-app → template-builtin-presets/templates/ts-lib}/.github/dependabot.yml +5 -0
- package/node_modules/@ykdz/template-builtin-presets/templates/ts-lib/.github/workflows/check.yml +19 -0
- package/node_modules/@ykdz/{template-builtin-source → template-builtin-presets}/templates/ts-lib/src/index.ts +1 -3
- package/node_modules/@ykdz/template-builtin-presets/templates/ts-lib/tsconfig.json +13 -0
- package/node_modules/@ykdz/{template-builtin-source → template-builtin-presets}/templates/vike-app/db/src/readiness.ts +2 -2
- package/node_modules/@ykdz/template-builtin-presets/templates/vike-app/db/src/types.d.ts +1 -0
- package/node_modules/@ykdz/template-builtin-presets/templates/vike-app/db/tsconfig.json +26 -0
- package/node_modules/@ykdz/template-builtin-presets/templates/vike-app/db-migrations/drizzle.config.ts +17 -0
- package/node_modules/@ykdz/template-builtin-presets/templates/vike-app/db-migrations/scripts/prepare-database.ts +45 -0
- package/node_modules/@ykdz/template-builtin-presets/templates/vike-app/db-migrations/tsconfig.json +22 -0
- package/node_modules/@ykdz/template-builtin-presets/templates/vike-app/db-migrations/turbo.json +10 -0
- package/node_modules/@ykdz/{template-builtin-source → template-builtin-presets}/templates/vike-app/web/Dockerfile +21 -30
- package/node_modules/@ykdz/{template-builtin-source → template-builtin-presets}/templates/vike-app/web/pages/index/+Page.telefunc.ts +0 -2
- package/node_modules/@ykdz/{template-builtin-source → template-builtin-presets}/templates/vike-app/web/pages/index/+Page.vue +2 -1
- package/node_modules/@ykdz/{template-builtin-source → template-builtin-presets}/templates/vike-app/web/playwright.config.ts +1 -1
- package/node_modules/@ykdz/{template-builtin-source → template-builtin-presets}/templates/vike-app/web/scripts/check-standalone-deployment.ts +83 -21
- package/node_modules/@ykdz/template-builtin-presets/templates/vike-app/web/scripts/container-entrypoint.sh +33 -0
- package/node_modules/@ykdz/{template-builtin-source → template-builtin-presets}/templates/vike-app/web/test/e2e/app.spec.ts +3 -1
- package/node_modules/@ykdz/template-builtin-presets/templates/vike-app/web/tsconfig.app.json +34 -0
- package/node_modules/@ykdz/template-builtin-presets/templates/vike-app/web/tsconfig.json +9 -0
- package/node_modules/@ykdz/template-builtin-presets/templates/vike-app/web/tsconfig.node.json +31 -0
- package/node_modules/@ykdz/template-builtin-presets/templates/vike-app/web/tsconfig.test.json +11 -0
- package/node_modules/@ykdz/{template-builtin-source/templates/vue-app → template-builtin-presets/templates/vike-app/web}/turbo.json +1 -0
- package/node_modules/@ykdz/{template-builtin-source/templates/vike-app → template-builtin-presets/templates/vue-app}/.github/dependabot.yml +5 -4
- package/node_modules/@ykdz/{template-builtin-source/templates/vue-hono-app/web → template-builtin-presets/templates/vue-app}/turbo.json +2 -1
- package/node_modules/@ykdz/template-builtin-presets/templates/vue-app/typescript/tsconfig.json +8 -0
- package/node_modules/@ykdz/template-builtin-presets/templates/vue-hono-app/api/src/index.ts +3 -0
- package/node_modules/@ykdz/{template-builtin-source → template-builtin-presets}/templates/vue-hono-app/api/src/server.ts +1 -1
- package/node_modules/@ykdz/{template-builtin-source → template-builtin-presets}/templates/vue-hono-app/api/test/app.test.ts +1 -1
- package/node_modules/@ykdz/template-builtin-presets/templates/vue-hono-app/api/tsconfig.build.json +9 -0
- package/node_modules/@ykdz/template-builtin-presets/templates/vue-hono-app/api/tsconfig.json +25 -0
- package/node_modules/@ykdz/template-core/dist/Cargo.toml +1 -1
- package/node_modules/@ykdz/template-core/dist/dependency-catalog.d.ts +9 -0
- package/node_modules/@ykdz/template-core/dist/dependency-catalog.js +54 -12
- package/node_modules/@ykdz/template-core/dist/devcontainer.d.ts +11 -3
- package/node_modules/@ykdz/template-core/dist/devcontainer.js +17 -3
- package/node_modules/@ykdz/template-core/dist/editor-customization.d.ts +5 -9
- package/node_modules/@ykdz/template-core/dist/editor-customization.js +8 -46
- package/node_modules/@ykdz/template-core/dist/module-graph.d.ts +31 -2
- package/node_modules/@ykdz/template-core/dist/module-graph.js +40 -0
- package/node_modules/@ykdz/template-core/dist/package-contribution.d.ts +43 -0
- package/node_modules/@ykdz/template-core/dist/package-contribution.js +24 -0
- package/node_modules/@ykdz/template-core/dist/pnpm-workspace.yaml +24 -8
- package/node_modules/@ykdz/template-core/dist/preset-definition.d.ts +42 -0
- package/node_modules/@ykdz/template-core/dist/preset-definition.js +1 -0
- package/node_modules/@ykdz/template-core/dist/project-blueprint-v2.d.ts +33 -0
- package/node_modules/@ykdz/template-core/dist/project-blueprint-v2.js +161 -0
- package/node_modules/@ykdz/template-core/dist/project-github.d.ts +8 -1
- package/node_modules/@ykdz/template-core/dist/project-github.js +86 -8
- package/node_modules/@ykdz/template-core/dist/project-linking-v2.d.ts +20 -0
- package/node_modules/@ykdz/template-core/dist/project-linking-v2.js +37 -0
- package/node_modules/@ykdz/template-core/dist/renderer.d.ts +40 -5
- package/node_modules/@ykdz/template-core/dist/renderer.js +115 -30
- package/node_modules/@ykdz/template-core/dist/template-boundary-check.d.ts +21 -15
- package/node_modules/@ykdz/template-core/dist/template-boundary-check.js +100 -50
- package/node_modules/@ykdz/template-core/dist/toolchain-baseline-update.d.ts +45 -0
- package/node_modules/@ykdz/template-core/dist/toolchain-baseline-update.js +27 -0
- package/node_modules/@ykdz/template-core/dist/toolchain-resolution.d.ts +1 -0
- package/node_modules/@ykdz/template-core/dist/toolchain-resolution.js +50 -52
- package/node_modules/@ykdz/template-core/package.json +10 -8
- package/node_modules/semver/LICENSE +15 -0
- package/node_modules/semver/README.md +680 -0
- package/node_modules/semver/bin/semver.js +195 -0
- package/node_modules/semver/classes/comparator.js +143 -0
- package/node_modules/semver/classes/index.js +7 -0
- package/node_modules/semver/classes/range.js +577 -0
- package/node_modules/semver/classes/semver.js +350 -0
- package/node_modules/semver/functions/clean.js +8 -0
- package/node_modules/semver/functions/cmp.js +54 -0
- package/node_modules/semver/functions/coerce.js +62 -0
- package/node_modules/semver/functions/compare-build.js +9 -0
- package/node_modules/semver/functions/compare-loose.js +5 -0
- package/node_modules/semver/functions/compare.js +7 -0
- package/node_modules/semver/functions/diff.js +60 -0
- package/node_modules/semver/functions/eq.js +5 -0
- package/node_modules/semver/functions/gt.js +5 -0
- package/node_modules/semver/functions/gte.js +5 -0
- package/node_modules/semver/functions/inc.js +21 -0
- package/node_modules/semver/functions/lt.js +5 -0
- package/node_modules/semver/functions/lte.js +5 -0
- package/node_modules/semver/functions/major.js +5 -0
- package/node_modules/semver/functions/minor.js +5 -0
- package/node_modules/semver/functions/neq.js +5 -0
- package/node_modules/semver/functions/parse.js +18 -0
- package/node_modules/semver/functions/patch.js +5 -0
- package/node_modules/semver/functions/prerelease.js +8 -0
- package/node_modules/semver/functions/rcompare.js +5 -0
- package/node_modules/semver/functions/rsort.js +5 -0
- package/node_modules/semver/functions/satisfies.js +12 -0
- package/node_modules/semver/functions/sort.js +5 -0
- package/node_modules/semver/functions/truncate.js +48 -0
- package/node_modules/semver/functions/valid.js +8 -0
- package/node_modules/semver/index.js +93 -0
- package/node_modules/semver/internal/constants.js +37 -0
- package/node_modules/semver/internal/debug.js +11 -0
- package/node_modules/semver/internal/identifiers.js +29 -0
- package/node_modules/semver/internal/lrucache.js +42 -0
- package/node_modules/semver/internal/parse-options.js +17 -0
- package/node_modules/semver/internal/re.js +223 -0
- package/node_modules/semver/package.json +78 -0
- package/node_modules/semver/preload.js +4 -0
- package/node_modules/semver/range.bnf +17 -0
- package/node_modules/semver/ranges/gtr.js +6 -0
- package/node_modules/semver/ranges/intersects.js +9 -0
- package/node_modules/semver/ranges/ltr.js +6 -0
- package/node_modules/semver/ranges/max-satisfying.js +27 -0
- package/node_modules/semver/ranges/min-satisfying.js +26 -0
- package/node_modules/semver/ranges/min-version.js +63 -0
- package/node_modules/semver/ranges/outside.js +82 -0
- package/node_modules/semver/ranges/simplify.js +49 -0
- package/node_modules/semver/ranges/subset.js +249 -0
- package/node_modules/semver/ranges/to-comparators.js +10 -0
- package/node_modules/semver/ranges/valid.js +13 -0
- package/node_modules/typescript/LICENSE.txt +55 -0
- package/node_modules/typescript/README.md +9 -0
- package/node_modules/typescript/bin/tsc6 +2 -0
- package/node_modules/typescript/lib/tsc.js +1 -0
- package/node_modules/typescript/lib/tsserverlibrary.d.ts +2 -0
- package/node_modules/typescript/lib/tsserverlibrary.js +1 -0
- package/node_modules/typescript/lib/typescript.d.ts +2 -0
- package/node_modules/typescript/lib/typescript.js +1 -0
- package/node_modules/typescript/package.json +39 -0
- package/node_modules/valibot/LICENSE.md +9 -0
- package/node_modules/valibot/README.md +94 -0
- package/node_modules/valibot/dist/index.cjs +7974 -0
- package/node_modules/valibot/dist/index.d.cts +16184 -0
- package/node_modules/valibot/dist/index.d.mts +16184 -0
- package/node_modules/valibot/dist/index.min.cjs +2 -0
- package/node_modules/valibot/dist/index.min.mjs +2 -0
- package/node_modules/valibot/dist/index.mjs +7663 -0
- package/node_modules/valibot/package.json +79 -0
- package/package.json +18 -12
- package/LICENSE +0 -21
- package/node_modules/@ykdz/template-builtin-source/dist/src/index.d.ts +0 -22
- package/node_modules/@ykdz/template-builtin-source/dist/src/index.js +0 -103
- package/node_modules/@ykdz/template-builtin-source/dist/templates/projection-plans.d.ts +0 -7
- package/node_modules/@ykdz/template-builtin-source/dist/templates/projection-plans.js +0 -98
- package/node_modules/@ykdz/template-builtin-source/dist/templates/registry.d.ts +0 -2
- package/node_modules/@ykdz/template-builtin-source/dist/templates/registry.js +0 -15
- package/node_modules/@ykdz/template-builtin-source/dist/templates/rust-bin/projection.d.ts +0 -9
- package/node_modules/@ykdz/template-builtin-source/dist/templates/rust-bin/projection.js +0 -105
- package/node_modules/@ykdz/template-builtin-source/dist/templates/ts-lib/projection.d.ts +0 -6
- package/node_modules/@ykdz/template-builtin-source/dist/templates/ts-lib/projection.js +0 -197
- package/node_modules/@ykdz/template-builtin-source/dist/templates/vike-app/projection.d.ts +0 -5
- package/node_modules/@ykdz/template-builtin-source/dist/templates/vike-app/projection.js +0 -71
- package/node_modules/@ykdz/template-builtin-source/dist/templates/vue-app/projection.d.ts +0 -6
- package/node_modules/@ykdz/template-builtin-source/dist/templates/vue-app/projection.js +0 -281
- package/node_modules/@ykdz/template-builtin-source/dist/templates/vue-hono-app/projection.d.ts +0 -8
- package/node_modules/@ykdz/template-builtin-source/dist/templates/vue-hono-app/projection.js +0 -154
- package/node_modules/@ykdz/template-builtin-source/package.json +0 -93
- package/node_modules/@ykdz/template-builtin-source/templates/preset-source.json +0 -524
- package/node_modules/@ykdz/template-builtin-source/templates/shared/devcontainer/node-pnpm.Dockerfile +0 -6
- package/node_modules/@ykdz/template-builtin-source/templates/shared/editor-customization/capabilities.json +0 -56
- package/node_modules/@ykdz/template-builtin-source/templates/shared/oxc/node/oxlint.config.ts +0 -34
- package/node_modules/@ykdz/template-builtin-source/templates/shared/oxc/oxfmt.config.ts +0 -8
- package/node_modules/@ykdz/template-builtin-source/templates/shared/oxc/vue/oxlint.config.ts +0 -36
- package/node_modules/@ykdz/template-builtin-source/templates/vike-app/.github/workflows/check.yml +0 -22
- package/node_modules/@ykdz/template-builtin-source/templates/vike-app/db/drizzle.config.ts +0 -10
- package/node_modules/@ykdz/template-builtin-source/templates/vike-app/web/scripts/container-entrypoint.sh +0 -52
- package/node_modules/@ykdz/template-builtin-source/templates/vike-app/web/scripts/prepare-database.sh +0 -6
- package/node_modules/@ykdz/template-builtin-source/templates/vue-hono-app/api/src/index.ts +0 -3
- package/node_modules/@ykdz/template-builtin-source/templates/vue-hono-app/web/src/main.ts +0 -8
- package/node_modules/@ykdz/template-builtin-source/templates/vue-hono-app/web/src/stores/counter.ts +0 -12
- package/node_modules/@ykdz/template-builtin-source/templates/vue-hono-app/web/src/style.css +0 -1
- package/node_modules/@ykdz/template-builtin-source/templates/vue-hono-app/web/test/app.test.ts +0 -14
- package/node_modules/@ykdz/template-core/dist/declarations.d.ts +0 -2
- package/node_modules/@ykdz/template-core/dist/declarations.js +0 -1
- package/node_modules/@ykdz/template-core/dist/generated-scenarios.d.ts +0 -76
- package/node_modules/@ykdz/template-core/dist/generated-scenarios.js +0 -658
- package/node_modules/@ykdz/template-core/dist/generation-context.d.ts +0 -23
- package/node_modules/@ykdz/template-core/dist/generation-context.js +0 -20
- package/node_modules/@ykdz/template-core/dist/next-step-instructions.d.ts +0 -30
- package/node_modules/@ykdz/template-core/dist/next-step-instructions.js +0 -181
- package/node_modules/@ykdz/template-core/dist/package-addition-support.d.ts +0 -6
- package/node_modules/@ykdz/template-core/dist/package-addition-support.js +0 -2
- package/node_modules/@ykdz/template-core/dist/package-addition.d.ts +0 -12
- package/node_modules/@ykdz/template-core/dist/package-addition.js +0 -665
- package/node_modules/@ykdz/template-core/dist/package-linking.d.ts +0 -75
- package/node_modules/@ykdz/template-core/dist/package-linking.js +0 -157
- package/node_modules/@ykdz/template-core/dist/preset-projection.d.ts +0 -68
- package/node_modules/@ykdz/template-core/dist/preset-projection.js +0 -8
- package/node_modules/@ykdz/template-core/dist/preset-source.d.ts +0 -14
- package/node_modules/@ykdz/template-core/dist/preset-source.js +0 -294
- package/node_modules/@ykdz/template-core/dist/projection-capabilities.d.ts +0 -31
- package/node_modules/@ykdz/template-core/dist/projection-capabilities.js +0 -2170
- package/node_modules/@ykdz/template-core/dist/runtime-paths.d.ts +0 -1
- package/node_modules/@ykdz/template-core/dist/runtime-paths.js +0 -13
- package/node_modules/@ykdz/template-shared/dist/index.d.ts +0 -645
- package/node_modules/@ykdz/template-shared/dist/index.js +0 -1408
- package/node_modules/@ykdz/template-shared/package.json +0 -37
- /package/node_modules/@ykdz/{template-builtin-source/templates/vue-app/.github/workflows/check.yml → template-builtin-presets/templates/foundation/.github/workflows/check-playwright.yml} +0 -0
- /package/node_modules/@ykdz/{template-builtin-source/templates/rust-bin/.github/workflows/check.yml → template-builtin-presets/templates/foundation/.github/workflows/check-rust.yml} +0 -0
- /package/node_modules/@ykdz/{template-builtin-source/templates/ts-lib → template-builtin-presets/templates/foundation}/.github/workflows/check.yml +0 -0
- /package/node_modules/@ykdz/{template-builtin-source/templates/shared → template-builtin-presets/templates/foundation/rust}/devcontainer/rust.Dockerfile +0 -0
- /package/node_modules/@ykdz/{template-builtin-source/templates/rust-bin → template-builtin-presets/templates/foundation/rust}/rust-toolchain.toml +0 -0
- /package/node_modules/@ykdz/{template-builtin-source → template-builtin-presets}/templates/rust-bin/rustfmt.toml +0 -0
- /package/node_modules/@ykdz/{template-builtin-source → template-builtin-presets}/templates/rust-bin/src/main.rs +0 -0
- /package/node_modules/@ykdz/{template-builtin-source → template-builtin-presets}/templates/rust-bin/turbo.json +0 -0
- /package/node_modules/@ykdz/{template-builtin-source → template-builtin-presets}/templates/shared/devcontainer/browser-test.Dockerfile +0 -0
- /package/node_modules/@ykdz/{template-builtin-source/templates/vue-app → template-builtin-presets/templates/shared/vue}/src/main.ts +0 -0
- /package/node_modules/@ykdz/{template-builtin-source/templates/vue-app → template-builtin-presets/templates/shared/vue}/src/stores/counter.ts +0 -0
- /package/node_modules/@ykdz/{template-builtin-source/templates/vue-app → template-builtin-presets/templates/shared/vue}/src/style.css +0 -0
- /package/node_modules/@ykdz/{template-builtin-source/templates/vue-app → template-builtin-presets/templates/shared/vue}/test/app.test.ts +0 -0
- /package/node_modules/@ykdz/{template-builtin-source → template-builtin-presets}/templates/ts-lib/src/name-schema.ts +0 -0
- /package/node_modules/@ykdz/{template-builtin-source → template-builtin-presets}/templates/ts-lib/turbo.json +0 -0
- /package/node_modules/@ykdz/{template-builtin-source → template-builtin-presets}/templates/vike-app/db/scripts/seed-example.ts +0 -0
- /package/node_modules/@ykdz/{template-builtin-source → template-builtin-presets}/templates/vike-app/db/src/db.ts +0 -0
- /package/node_modules/@ykdz/{template-builtin-source → template-builtin-presets}/templates/vike-app/db/src/index.ts +0 -0
- /package/node_modules/@ykdz/{template-builtin-source → template-builtin-presets}/templates/vike-app/db/src/queries/todos.ts +0 -0
- /package/node_modules/@ykdz/{template-builtin-source → template-builtin-presets}/templates/vike-app/db/src/schema.ts +0 -0
- /package/node_modules/@ykdz/{template-builtin-source → template-builtin-presets}/templates/vike-app/db/src/seed/example.ts +0 -0
- /package/node_modules/@ykdz/{template-builtin-source → template-builtin-presets}/templates/vike-app/db/test/todos.test.ts +0 -0
- /package/node_modules/@ykdz/{template-builtin-source → template-builtin-presets}/templates/vike-app/db/turbo.json +0 -0
- /package/node_modules/@ykdz/{template-builtin-source/templates/vike-app/db → template-builtin-presets/templates/vike-app/db-migrations}/drizzle/migrations/20260709120325_old_captain_flint/migration.sql +0 -0
- /package/node_modules/@ykdz/{template-builtin-source/templates/vike-app/db → template-builtin-presets/templates/vike-app/db-migrations}/drizzle/migrations/20260709120325_old_captain_flint/snapshot.json +0 -0
- /package/node_modules/@ykdz/{template-builtin-source → template-builtin-presets}/templates/vike-app/web/+server.ts +0 -0
- /package/node_modules/@ykdz/{template-builtin-source → template-builtin-presets}/templates/vike-app/web/.env.example +0 -0
- /package/node_modules/@ykdz/{template-builtin-source → template-builtin-presets}/templates/vike-app/web/Dockerfile.dockerignore +0 -0
- /package/node_modules/@ykdz/{template-builtin-source → template-builtin-presets}/templates/vike-app/web/assets/logo.svg +0 -0
- /package/node_modules/@ykdz/{template-builtin-source → template-builtin-presets}/templates/vike-app/web/components/CounterButton.vue +0 -0
- /package/node_modules/@ykdz/{template-builtin-source → template-builtin-presets}/templates/vike-app/web/components/PageShell.vue +0 -0
- /package/node_modules/@ykdz/{template-builtin-source → template-builtin-presets}/templates/vike-app/web/pages/+Head.vue +0 -0
- /package/node_modules/@ykdz/{template-builtin-source → template-builtin-presets}/templates/vike-app/web/pages/+Layout.vue +0 -0
- /package/node_modules/@ykdz/{template-builtin-source → template-builtin-presets}/templates/vike-app/web/pages/+config.ts +0 -0
- /package/node_modules/@ykdz/{template-builtin-source → template-builtin-presets}/templates/vike-app/web/pages/tailwind.css +0 -0
- /package/node_modules/@ykdz/{template-builtin-source → template-builtin-presets}/templates/vike-app/web/scripts/run-playwright.ts +0 -0
- /package/node_modules/@ykdz/{template-builtin-source → template-builtin-presets}/templates/vike-app/web/server/api.ts +0 -0
- /package/node_modules/@ykdz/{template-builtin-source → template-builtin-presets}/templates/vike-app/web/server/app.ts +0 -0
- /package/node_modules/@ykdz/{template-builtin-source → template-builtin-presets}/templates/vike-app/web/types/env.d.ts +0 -0
- /package/node_modules/@ykdz/{template-builtin-source → template-builtin-presets}/templates/vike-app/web/types/global.d.ts +0 -0
- /package/node_modules/@ykdz/{template-builtin-source → template-builtin-presets}/templates/vike-app/web/vite.config.ts +0 -0
- /package/node_modules/@ykdz/{template-builtin-source → template-builtin-presets}/templates/vike-app/web/vitest.config.ts +0 -0
- /package/node_modules/@ykdz/{template-builtin-source/templates/vue-hono-app → template-builtin-presets/templates/vue-app}/.github/workflows/check.yml +0 -0
- /package/node_modules/@ykdz/{template-builtin-source → template-builtin-presets}/templates/vue-app/env.d.ts +0 -0
- /package/node_modules/@ykdz/{template-builtin-source → template-builtin-presets}/templates/vue-app/index.html +0 -0
- /package/node_modules/@ykdz/{template-builtin-source → template-builtin-presets}/templates/vue-app/playwright.config.ts +0 -0
- /package/node_modules/@ykdz/{template-builtin-source → template-builtin-presets}/templates/vue-app/scripts/run-playwright.ts +0 -0
- /package/node_modules/@ykdz/{template-builtin-source → template-builtin-presets}/templates/vue-app/src/App.vue +0 -0
- /package/node_modules/@ykdz/{template-builtin-source → template-builtin-presets}/templates/vue-app/test/e2e/app.spec.ts +0 -0
- /package/node_modules/@ykdz/{template-builtin-source → template-builtin-presets}/templates/vue-app/vite.config.ts +0 -0
- /package/node_modules/@ykdz/{template-builtin-source → template-builtin-presets}/templates/vue-app/vitest.config.ts +0 -0
- /package/node_modules/@ykdz/{template-builtin-source → template-builtin-presets}/templates/vue-hono-app/api/src/runtime.ts +0 -0
- /package/node_modules/@ykdz/{template-builtin-source → template-builtin-presets}/templates/vue-hono-app/api/turbo.json +0 -0
- /package/node_modules/@ykdz/{template-builtin-source → template-builtin-presets}/templates/vue-hono-app/api/vitest.config.ts +0 -0
- /package/node_modules/@ykdz/{template-builtin-source → template-builtin-presets}/templates/vue-hono-app/web/env.d.ts +0 -0
- /package/node_modules/@ykdz/{template-builtin-source → template-builtin-presets}/templates/vue-hono-app/web/index.html +0 -0
- /package/node_modules/@ykdz/{template-builtin-source → template-builtin-presets}/templates/vue-hono-app/web/playwright.config.ts +0 -0
- /package/node_modules/@ykdz/{template-builtin-source → template-builtin-presets}/templates/vue-hono-app/web/scripts/run-playwright.ts +0 -0
- /package/node_modules/@ykdz/{template-builtin-source → template-builtin-presets}/templates/vue-hono-app/web/src/App.vue +0 -0
- /package/node_modules/@ykdz/{template-builtin-source → template-builtin-presets}/templates/vue-hono-app/web/src/api.ts +0 -0
- /package/node_modules/@ykdz/{template-builtin-source → template-builtin-presets}/templates/vue-hono-app/web/test/e2e/app.spec.ts +0 -0
- /package/node_modules/@ykdz/{template-builtin-source/templates/vike-app → template-builtin-presets/templates/vue-hono-app}/web/turbo.json +0 -0
- /package/node_modules/@ykdz/{template-builtin-source → template-builtin-presets}/templates/vue-hono-app/web/vite.config.ts +0 -0
- /package/node_modules/@ykdz/{template-builtin-source → template-builtin-presets}/templates/vue-hono-app/web/vitest.config.ts +0 -0
|
@@ -1,6 +1,29 @@
|
|
|
1
1
|
import { constants } from "node:fs";
|
|
2
|
-
import { chmod, copyFile, mkdir, mkdtemp, readFile, readdir, rename, rm, rmdir, stat, writeFile, } from "node:fs/promises";
|
|
2
|
+
import { chmod, cp, copyFile, mkdir, mkdtemp, readFile, readdir, rename, rm, rmdir, stat, writeFile, } from "node:fs/promises";
|
|
3
3
|
import path from "node:path";
|
|
4
|
+
/**
|
|
5
|
+
* An opaque, owned Template Source reference. A renderer operation carries
|
|
6
|
+
* this directly instead of selecting a root from a string-keyed side map.
|
|
7
|
+
*/
|
|
8
|
+
const templateSourceHandleBrand = Symbol("template-source");
|
|
9
|
+
const templateSourceRoots = new WeakMap();
|
|
10
|
+
export function createTemplateSourceHandle(root) {
|
|
11
|
+
const handle = Object.freeze({
|
|
12
|
+
[templateSourceHandleBrand]: true,
|
|
13
|
+
});
|
|
14
|
+
templateSourceRoots.set(handle, path.resolve(root));
|
|
15
|
+
return handle;
|
|
16
|
+
}
|
|
17
|
+
/** Resolves a handle-owned source path while enforcing containment. */
|
|
18
|
+
export function resolveTemplateSource(source, relativePath) {
|
|
19
|
+
const root = typeof source === "object" && source !== null
|
|
20
|
+
? templateSourceRoots.get(source)
|
|
21
|
+
: undefined;
|
|
22
|
+
if (root === undefined) {
|
|
23
|
+
throw new Error("Renderer received an unknown Template Source handle");
|
|
24
|
+
}
|
|
25
|
+
return resolveContainedPath(root, relativePath);
|
|
26
|
+
}
|
|
4
27
|
function expandTemplatePath(templatePath, variables) {
|
|
5
28
|
return templatePath.replaceAll(/\{\{([A-Za-z][A-Za-z0-9_]*)\}\}/g, (_, name) => {
|
|
6
29
|
const value = variables[name];
|
|
@@ -31,17 +54,11 @@ function expandOperationPath(relativePath, options) {
|
|
|
31
54
|
}
|
|
32
55
|
async function renderCopyFile(operation, options) {
|
|
33
56
|
const variables = options.variables ?? {};
|
|
34
|
-
const
|
|
35
|
-
? options.sourceRoot
|
|
36
|
-
: options.sourceRoots?.[operation.sourceRoot];
|
|
37
|
-
if (sourceRoot === undefined) {
|
|
38
|
-
throw new Error(`Unknown renderer source root: ${operation.sourceRoot}`);
|
|
39
|
-
}
|
|
40
|
-
const from = resolveContainedPath(sourceRoot, expandTemplatePath(operation.from, variables));
|
|
57
|
+
const from = resolveTemplateSource(operation.source, expandTemplatePath(operation.from, variables));
|
|
41
58
|
const to = resolveContainedPath(options.targetRoot, expandTemplatePath(operation.to, variables));
|
|
42
59
|
const sourceMode = (await stat(from)).mode;
|
|
43
60
|
await mkdir(path.dirname(to), { recursive: true });
|
|
44
|
-
await copyGeneratedFile(from, to);
|
|
61
|
+
await copyGeneratedFile(from, to, operation.overwrite ?? false);
|
|
45
62
|
await chmod(to, sourceMode & 0o777);
|
|
46
63
|
}
|
|
47
64
|
function isRecord(value) {
|
|
@@ -147,7 +164,7 @@ async function writeJsonFile(targetRoot, toPath, value, multilineArrays, overwri
|
|
|
147
164
|
await writeGeneratedFile(to, serializeJson(value, multilineArrays, rootKeyOrderForPath(toPath)), overwrite);
|
|
148
165
|
}
|
|
149
166
|
async function renderWriteJson(operation, options) {
|
|
150
|
-
await writeJsonFile(options.targetRoot, expandOperationPath(operation.to, options), operation.value, operation.multilineArrays);
|
|
167
|
+
await writeJsonFile(options.targetRoot, expandOperationPath(operation.to, options), operation.value, operation.multilineArrays, operation.overwrite);
|
|
151
168
|
}
|
|
152
169
|
async function renderMergeJson(operation, options) {
|
|
153
170
|
const toPath = expandOperationPath(operation.to, options);
|
|
@@ -161,7 +178,7 @@ async function renderMergeJson(operation, options) {
|
|
|
161
178
|
throw error;
|
|
162
179
|
}
|
|
163
180
|
}
|
|
164
|
-
await writeJsonFile(options.targetRoot, toPath, mergeJsonValue(existing, operation.value),
|
|
181
|
+
await writeJsonFile(options.targetRoot, toPath, mergeJsonValue(existing, operation.value), operation.multilineArrays, true);
|
|
165
182
|
}
|
|
166
183
|
const foundationTextFiles = new Set([
|
|
167
184
|
".dockerignore",
|
|
@@ -209,6 +226,9 @@ function assertFoundationTextPath(relativePath) {
|
|
|
209
226
|
if (normalizedPath === ".devcontainer/Dockerfile") {
|
|
210
227
|
return;
|
|
211
228
|
}
|
|
229
|
+
if (normalizedPath === ".devcontainer/devcontainer.json") {
|
|
230
|
+
return;
|
|
231
|
+
}
|
|
212
232
|
throw new Error(`Text output is limited to foundation files: ${relativePath}`);
|
|
213
233
|
}
|
|
214
234
|
function assertTextTemplatePath(relativePath) {
|
|
@@ -233,18 +253,12 @@ async function renderWriteTextFromFragments(operation, options) {
|
|
|
233
253
|
assertFoundationTextPath(toPath);
|
|
234
254
|
const to = resolveContainedPath(options.targetRoot, toPath);
|
|
235
255
|
const texts = await Promise.all(operation.fragments.map(async (fragment) => {
|
|
236
|
-
const sourceRoot = fragment.sourceRoot === undefined
|
|
237
|
-
? options.sourceRoot
|
|
238
|
-
: options.sourceRoots?.[fragment.sourceRoot];
|
|
239
|
-
if (sourceRoot === undefined) {
|
|
240
|
-
throw new Error(`Unknown renderer source root: ${fragment.sourceRoot}`);
|
|
241
|
-
}
|
|
242
256
|
const fromPath = expandTemplatePath(fragment.from, options.variables ?? {});
|
|
243
|
-
const from =
|
|
257
|
+
const from = resolveTemplateSource(fragment.source, fromPath);
|
|
244
258
|
return readFile(from, "utf8");
|
|
245
259
|
}));
|
|
246
260
|
await mkdir(path.dirname(to), { recursive: true });
|
|
247
|
-
await writeGeneratedFile(to, texts.map((text) => text.trimEnd()).join("\n\n") + "\n");
|
|
261
|
+
await writeGeneratedFile(to, texts.map((text) => text.trimEnd()).join("\n\n") + "\n", operation.overwrite ?? false);
|
|
248
262
|
}
|
|
249
263
|
function replaceTextTemplateVariables(sourceText, replacements) {
|
|
250
264
|
const used = new Set();
|
|
@@ -264,19 +278,13 @@ function replaceTextTemplateVariables(sourceText, replacements) {
|
|
|
264
278
|
return rendered;
|
|
265
279
|
}
|
|
266
280
|
async function renderWriteTextTemplate(operation, options) {
|
|
267
|
-
const sourceRoot = operation.sourceRoot === undefined
|
|
268
|
-
? options.sourceRoot
|
|
269
|
-
: options.sourceRoots?.[operation.sourceRoot];
|
|
270
|
-
if (sourceRoot === undefined) {
|
|
271
|
-
throw new Error(`Unknown renderer source root: ${operation.sourceRoot}`);
|
|
272
|
-
}
|
|
273
281
|
const toPath = expandOperationPath(operation.to, options);
|
|
274
282
|
assertTextTemplatePath(toPath);
|
|
275
|
-
const from =
|
|
283
|
+
const from = resolveTemplateSource(operation.source, expandTemplatePath(operation.from, options.variables ?? {}));
|
|
276
284
|
const to = resolveContainedPath(options.targetRoot, toPath);
|
|
277
285
|
const sourceText = await readFile(from, "utf8");
|
|
278
286
|
await mkdir(path.dirname(to), { recursive: true });
|
|
279
|
-
await writeGeneratedFile(to, replaceTextTemplateVariables(sourceText, operation.replacements));
|
|
287
|
+
await writeGeneratedFile(to, replaceTextTemplateVariables(sourceText, operation.replacements), operation.overwrite);
|
|
280
288
|
}
|
|
281
289
|
async function renderSetExecutable(operation, options) {
|
|
282
290
|
const filePath = resolveContainedPath(options.targetRoot, expandOperationPath(operation.path, options));
|
|
@@ -296,7 +304,7 @@ function parseAnchorComment(commentText) {
|
|
|
296
304
|
return multiline?.[1];
|
|
297
305
|
}
|
|
298
306
|
async function findTypeScriptAnchorRanges(sourceText) {
|
|
299
|
-
const ts = await import("
|
|
307
|
+
const ts = await import("typescript");
|
|
300
308
|
const sourceFile = ts.createSourceFile("template-anchor.ts", sourceText, ts.ScriptTarget.Latest, true, ts.ScriptKind.TS);
|
|
301
309
|
const anchors = [];
|
|
302
310
|
const seenRanges = new Set();
|
|
@@ -377,9 +385,9 @@ async function targetDirectoryStatus(targetRoot) {
|
|
|
377
385
|
}
|
|
378
386
|
return "empty";
|
|
379
387
|
}
|
|
380
|
-
async function copyGeneratedFile(from, to) {
|
|
388
|
+
async function copyGeneratedFile(from, to, overwrite = false) {
|
|
381
389
|
try {
|
|
382
|
-
await copyFile(from, to, constants.COPYFILE_EXCL);
|
|
390
|
+
await copyFile(from, to, overwrite ? 0 : constants.COPYFILE_EXCL);
|
|
383
391
|
}
|
|
384
392
|
catch (error) {
|
|
385
393
|
if (isNodeError(error) && error.code === "EEXIST") {
|
|
@@ -443,6 +451,83 @@ export async function renderProject(options) {
|
|
|
443
451
|
throw new Error(`Unsupported renderer operation: ${operation.kind}`);
|
|
444
452
|
}
|
|
445
453
|
}
|
|
454
|
+
/**
|
|
455
|
+
* Applies a follow-up plan in a sibling staging directory. In particular,
|
|
456
|
+
* metadata updates cannot become visible when a later source operation fails.
|
|
457
|
+
*/
|
|
458
|
+
export async function renderProjectAtomically(options) {
|
|
459
|
+
const targetRoot = path.resolve(options.targetRoot);
|
|
460
|
+
await stat(targetRoot);
|
|
461
|
+
const parent = path.dirname(targetRoot);
|
|
462
|
+
const stagingRoot = await mkdtemp(path.join(parent, `.${path.basename(targetRoot)}.template-update-`));
|
|
463
|
+
const backupRoot = await mkdtemp(path.join(parent, `.${path.basename(targetRoot)}.template-backup-`));
|
|
464
|
+
const changedEntries = changedRootEntries(options.operations);
|
|
465
|
+
let committed = false;
|
|
466
|
+
try {
|
|
467
|
+
await cp(targetRoot, stagingRoot, { recursive: true });
|
|
468
|
+
await renderProject({ ...options, targetRoot: stagingRoot });
|
|
469
|
+
// Commit only the entries changed by the staged plan. In particular, do
|
|
470
|
+
// not rename the target directory: callers commonly run `template add`
|
|
471
|
+
// from that directory, and renaming it leaves their shell on a deleted
|
|
472
|
+
// inode. Each entry has a rollback copy before it is made visible.
|
|
473
|
+
for (const entry of changedEntries) {
|
|
474
|
+
const current = path.join(targetRoot, entry);
|
|
475
|
+
try {
|
|
476
|
+
await cp(current, path.join(backupRoot, entry), { recursive: true });
|
|
477
|
+
}
|
|
478
|
+
catch (error) {
|
|
479
|
+
if (!isNodeError(error) || error.code !== "ENOENT")
|
|
480
|
+
throw error;
|
|
481
|
+
}
|
|
482
|
+
}
|
|
483
|
+
try {
|
|
484
|
+
for (const entry of changedEntries) {
|
|
485
|
+
await cp(path.join(stagingRoot, entry), path.join(targetRoot, entry), {
|
|
486
|
+
recursive: true,
|
|
487
|
+
force: true,
|
|
488
|
+
});
|
|
489
|
+
}
|
|
490
|
+
committed = true;
|
|
491
|
+
}
|
|
492
|
+
catch (error) {
|
|
493
|
+
await rollbackStagedEntries({ targetRoot, backupRoot, changedEntries });
|
|
494
|
+
throw error;
|
|
495
|
+
}
|
|
496
|
+
}
|
|
497
|
+
finally {
|
|
498
|
+
if (!committed)
|
|
499
|
+
await rm(stagingRoot, { recursive: true, force: true });
|
|
500
|
+
await rm(backupRoot, { recursive: true, force: true });
|
|
501
|
+
if (committed)
|
|
502
|
+
await rm(stagingRoot, { recursive: true, force: true });
|
|
503
|
+
}
|
|
504
|
+
}
|
|
505
|
+
function changedRootEntries(operations) {
|
|
506
|
+
const entries = new Set();
|
|
507
|
+
for (const operation of operations) {
|
|
508
|
+
const outputPath = operation.kind === "setExecutable" || operation.kind === "replaceAnchors"
|
|
509
|
+
? operation.path
|
|
510
|
+
: operation.to;
|
|
511
|
+
const entry = outputPath.split(/[\\/]/)[0];
|
|
512
|
+
if (entry !== undefined && entry.length > 0)
|
|
513
|
+
entries.add(entry);
|
|
514
|
+
}
|
|
515
|
+
return [...entries];
|
|
516
|
+
}
|
|
517
|
+
async function rollbackStagedEntries(options) {
|
|
518
|
+
for (const entry of options.changedEntries) {
|
|
519
|
+
const target = path.join(options.targetRoot, entry);
|
|
520
|
+
const backup = path.join(options.backupRoot, entry);
|
|
521
|
+
await rm(target, { recursive: true, force: true });
|
|
522
|
+
try {
|
|
523
|
+
await cp(backup, target, { recursive: true });
|
|
524
|
+
}
|
|
525
|
+
catch (error) {
|
|
526
|
+
if (!isNodeError(error) || error.code !== "ENOENT")
|
|
527
|
+
throw error;
|
|
528
|
+
}
|
|
529
|
+
}
|
|
530
|
+
}
|
|
446
531
|
async function commitStagedProject(stagingRoot, targetRoot) {
|
|
447
532
|
const targetStatus = await targetDirectoryStatus(targetRoot);
|
|
448
533
|
if (targetStatus === "empty") {
|
|
@@ -1,38 +1,44 @@
|
|
|
1
|
-
import type
|
|
2
|
-
export type TemplateBoundaryDebt = {
|
|
3
|
-
readonly preset: string;
|
|
4
|
-
readonly generatedPath: string;
|
|
5
|
-
readonly owningFunction: string;
|
|
6
|
-
readonly reason: string;
|
|
7
|
-
};
|
|
1
|
+
import { type RenderOperation } from "./renderer.ts";
|
|
8
2
|
export type TemplateBoundaryViolation = {
|
|
9
3
|
readonly preset: string;
|
|
10
4
|
readonly generatedPath: string;
|
|
11
5
|
readonly owningFunction: string;
|
|
12
6
|
readonly operationKind: RenderOperation["kind"];
|
|
13
7
|
readonly sourceFilePath: string;
|
|
14
|
-
|
|
8
|
+
/** Real registry plans retain their Definition and contribution provenance. */
|
|
9
|
+
readonly definitionName?: string;
|
|
10
|
+
readonly planningContribution?: string;
|
|
11
|
+
readonly ownershipRule?: string;
|
|
15
12
|
};
|
|
16
13
|
export type TemplateBoundaryCheckProjection = {
|
|
17
14
|
readonly name: string;
|
|
18
15
|
readonly sourceFilePath: string;
|
|
16
|
+
readonly definitionName?: string;
|
|
17
|
+
readonly planningContribution?: string;
|
|
19
18
|
readonly plan: {
|
|
20
|
-
readonly sourceRoot: string;
|
|
21
|
-
readonly sourceRoots?: Record<string, string> | undefined;
|
|
22
19
|
readonly operations: readonly RenderOperation[];
|
|
23
20
|
};
|
|
24
21
|
};
|
|
22
|
+
/** A Template Source root directly checked independently of any render plan. */
|
|
23
|
+
export type TemplateSourceContext = {
|
|
24
|
+
readonly name: string;
|
|
25
|
+
readonly root: string;
|
|
26
|
+
/** Every readable source file discovered by a direct Template Source check. */
|
|
27
|
+
readonly checkedFiles?: readonly string[];
|
|
28
|
+
};
|
|
25
29
|
export type TemplateBoundaryCheckResult = {
|
|
26
30
|
readonly ok: boolean;
|
|
27
31
|
readonly violations: readonly TemplateBoundaryViolation[];
|
|
28
|
-
readonly allowlistedDebt: readonly TemplateBoundaryViolation[];
|
|
29
|
-
readonly unusedAllowlistEntries: readonly TemplateBoundaryDebt[];
|
|
30
32
|
};
|
|
31
33
|
export type CheckTemplateSourceBoundaryOptions = {
|
|
32
34
|
readonly projections: readonly TemplateBoundaryCheckProjection[];
|
|
35
|
+
readonly templateSourceContexts?: readonly TemplateSourceContext[];
|
|
33
36
|
readonly manifestReferencedSourceFiles?: readonly string[];
|
|
34
|
-
readonly allowlist?: readonly TemplateBoundaryDebt[];
|
|
35
37
|
};
|
|
36
|
-
|
|
38
|
+
/**
|
|
39
|
+
* Reads each registered Template Source context before any plan is inspected.
|
|
40
|
+
* The resulting file sets are an independent proof consumed by the boundary check.
|
|
41
|
+
*/
|
|
42
|
+
export declare function checkTemplateSourceContexts(contexts: readonly Omit<TemplateSourceContext, "checkedFiles">[]): Promise<readonly TemplateSourceContext[]>;
|
|
37
43
|
export declare function isProtectedGeneratedPath(generatedPath: string): boolean;
|
|
38
|
-
export declare function checkTemplateSourceBoundary({ projections,
|
|
44
|
+
export declare function checkTemplateSourceBoundary({ projections, templateSourceContexts, manifestReferencedSourceFiles, }: CheckTemplateSourceBoundaryOptions): Promise<TemplateBoundaryCheckResult>;
|
|
@@ -1,12 +1,46 @@
|
|
|
1
|
-
import { readFile } from "node:fs/promises";
|
|
1
|
+
import { readdir, readFile, stat } from "node:fs/promises";
|
|
2
2
|
import path from "node:path";
|
|
3
|
-
import ts from "
|
|
3
|
+
import ts from "typescript";
|
|
4
|
+
import { resolveTemplateSource } from "./renderer.js";
|
|
4
5
|
const inlineOperationKinds = new Set([
|
|
5
6
|
"writeText",
|
|
6
7
|
"writeJson",
|
|
7
8
|
"mergeJson",
|
|
8
9
|
]);
|
|
9
|
-
|
|
10
|
+
async function listTemplateSourceFiles(root) {
|
|
11
|
+
const entries = await readdir(root, { withFileTypes: true });
|
|
12
|
+
const files = [];
|
|
13
|
+
for (const entry of entries) {
|
|
14
|
+
const entryPath = path.join(root, entry.name);
|
|
15
|
+
if (entry.isDirectory()) {
|
|
16
|
+
files.push(...(await listTemplateSourceFiles(entryPath)));
|
|
17
|
+
continue;
|
|
18
|
+
}
|
|
19
|
+
if (!entry.isFile())
|
|
20
|
+
continue;
|
|
21
|
+
await readFile(entryPath);
|
|
22
|
+
files.push(path.resolve(entryPath));
|
|
23
|
+
}
|
|
24
|
+
return files;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Reads each registered Template Source context before any plan is inspected.
|
|
28
|
+
* The resulting file sets are an independent proof consumed by the boundary check.
|
|
29
|
+
*/
|
|
30
|
+
export async function checkTemplateSourceContexts(contexts) {
|
|
31
|
+
return await Promise.all(contexts.map(async (context) => {
|
|
32
|
+
const root = path.resolve(context.root);
|
|
33
|
+
const rootStats = await stat(root);
|
|
34
|
+
if (!rootStats.isDirectory()) {
|
|
35
|
+
throw new Error(`Template Source context ${context.name} root is not a directory: ${root}`);
|
|
36
|
+
}
|
|
37
|
+
return {
|
|
38
|
+
...context,
|
|
39
|
+
root,
|
|
40
|
+
checkedFiles: await listTemplateSourceFiles(root),
|
|
41
|
+
};
|
|
42
|
+
}));
|
|
43
|
+
}
|
|
10
44
|
function operationTarget(operation) {
|
|
11
45
|
if ("to" in operation) {
|
|
12
46
|
return operation.to;
|
|
@@ -464,33 +498,46 @@ function isAllowedStructuralMachineDeclaration(sourceFile, operation) {
|
|
|
464
498
|
return value !== undefined && isDevelopmentContainerPlanValue(value);
|
|
465
499
|
}));
|
|
466
500
|
}
|
|
467
|
-
function allowlistKey(preset, generatedPath, owningFunction) {
|
|
468
|
-
return `${preset}\0${owningFunction}\0${generatedPath}`;
|
|
469
|
-
}
|
|
470
|
-
function resolveOperationSourceRoot(projection, sourceRootName) {
|
|
471
|
-
if (sourceRootName === undefined) {
|
|
472
|
-
return projection.plan.sourceRoot;
|
|
473
|
-
}
|
|
474
|
-
return projection.plan.sourceRoots?.[sourceRootName];
|
|
475
|
-
}
|
|
476
501
|
function sourceBackedOperationSourceFiles(projection, operation) {
|
|
477
502
|
if (operation.kind === "writeTextFromFragments") {
|
|
478
503
|
return operation.fragments.map((fragment) => {
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
504
|
+
try {
|
|
505
|
+
return resolveTemplateSource(fragment.source, fragment.from);
|
|
506
|
+
}
|
|
507
|
+
catch (error) {
|
|
508
|
+
return `invalid-source:${error instanceof Error ? error.message : String(error)}`;
|
|
509
|
+
}
|
|
483
510
|
});
|
|
484
511
|
}
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
512
|
+
try {
|
|
513
|
+
return [resolveTemplateSource(operation.source, operation.from)];
|
|
514
|
+
}
|
|
515
|
+
catch (error) {
|
|
516
|
+
return [
|
|
517
|
+
`invalid-source:${error instanceof Error ? error.message : String(error)}`,
|
|
518
|
+
];
|
|
519
|
+
}
|
|
491
520
|
}
|
|
492
|
-
function
|
|
493
|
-
|
|
521
|
+
async function operationUsesCheckedTemplateSource(projection, operation, templateSourceContexts, manifestReferencedSourceFiles) {
|
|
522
|
+
const sourceFiles = sourceBackedOperationSourceFiles(projection, operation);
|
|
523
|
+
const results = await Promise.all(sourceFiles.map(async (sourceFile) => {
|
|
524
|
+
const context = templateSourceContexts.find((candidate) => {
|
|
525
|
+
const root = path.resolve(candidate.root);
|
|
526
|
+
return (sourceFile.startsWith(`${root}${path.sep}`) || sourceFile === root);
|
|
527
|
+
});
|
|
528
|
+
if (context === undefined) {
|
|
529
|
+
return manifestReferencedSourceFiles.has(sourceFile);
|
|
530
|
+
}
|
|
531
|
+
const relativePath = path.relative(path.resolve(context.root), sourceFile);
|
|
532
|
+
if (relativePath.length === 0 ||
|
|
533
|
+
relativePath === ".." ||
|
|
534
|
+
relativePath.startsWith(`..${path.sep}`) ||
|
|
535
|
+
path.isAbsolute(relativePath)) {
|
|
536
|
+
return false;
|
|
537
|
+
}
|
|
538
|
+
return context.checkedFiles?.includes(sourceFile) ?? false;
|
|
539
|
+
}));
|
|
540
|
+
return results.every(Boolean);
|
|
494
541
|
}
|
|
495
542
|
function pushSourceBackedOperationViolations(options) {
|
|
496
543
|
const generatedPath = operationTarget(options.operation);
|
|
@@ -504,26 +551,31 @@ function pushSourceBackedOperationViolations(options) {
|
|
|
504
551
|
generatedPath,
|
|
505
552
|
owningFunction,
|
|
506
553
|
operationKind: options.operation.kind,
|
|
507
|
-
sourceFilePath: options.
|
|
554
|
+
sourceFilePath: options.operation.provenance?.plannerSourceFile ??
|
|
555
|
+
options.projection.sourceFilePath,
|
|
556
|
+
...(options.operation.provenance === undefined &&
|
|
557
|
+
options.projection.definitionName === undefined
|
|
558
|
+
? {}
|
|
559
|
+
: {
|
|
560
|
+
definitionName: options.operation.provenance?.definitionName ??
|
|
561
|
+
options.projection.definitionName,
|
|
562
|
+
planningContribution: options.operation.provenance?.planningContribution ??
|
|
563
|
+
options.projection.planningContribution,
|
|
564
|
+
ownershipRule: options.operation.provenance?.ownershipRule ??
|
|
565
|
+
"source-backed protected output must use declared, contained Template Source",
|
|
566
|
+
}),
|
|
508
567
|
});
|
|
509
568
|
}
|
|
510
569
|
}
|
|
511
|
-
export async function checkTemplateSourceBoundary({ projections,
|
|
570
|
+
export async function checkTemplateSourceBoundary({ projections, templateSourceContexts = [], manifestReferencedSourceFiles = [], }) {
|
|
512
571
|
const manifestReferencedSourceFileSet = new Set(manifestReferencedSourceFiles.map((sourceFile) => path.resolve(sourceFile)));
|
|
513
|
-
const allowed = new Map(allowlist.map((entry) => [
|
|
514
|
-
allowlistKey(entry.preset, entry.generatedPath, entry.owningFunction),
|
|
515
|
-
entry.reason,
|
|
516
|
-
]));
|
|
517
|
-
const checkedPresets = new Set(projections.map((projection) => projection.name));
|
|
518
|
-
const usedAllowlistKeys = new Set();
|
|
519
572
|
const violations = [];
|
|
520
|
-
const allowlistedDebt = [];
|
|
521
573
|
for (const projection of projections) {
|
|
522
574
|
const sourceText = await readFile(projection.sourceFilePath, "utf8");
|
|
523
575
|
const sourceFile = ts.createSourceFile(projection.sourceFilePath, sourceText, ts.ScriptTarget.Latest, true, ts.ScriptKind.TS);
|
|
524
576
|
for (const operation of projection.plan.operations) {
|
|
525
577
|
if (isProtectedSourceBackedOperation(operation)) {
|
|
526
|
-
if (!
|
|
578
|
+
if (!(await operationUsesCheckedTemplateSource(projection, operation, templateSourceContexts, manifestReferencedSourceFileSet))) {
|
|
527
579
|
pushSourceBackedOperationViolations({
|
|
528
580
|
projection,
|
|
529
581
|
sourceFile,
|
|
@@ -549,28 +601,26 @@ export async function checkTemplateSourceBoundary({ projections, manifestReferen
|
|
|
549
601
|
generatedPath: operation.to,
|
|
550
602
|
owningFunction,
|
|
551
603
|
operationKind: operation.kind,
|
|
552
|
-
sourceFilePath:
|
|
604
|
+
sourceFilePath: operation.provenance?.plannerSourceFile ??
|
|
605
|
+
projection.sourceFilePath,
|
|
606
|
+
...(operation.provenance === undefined &&
|
|
607
|
+
projection.definitionName === undefined
|
|
608
|
+
? {}
|
|
609
|
+
: {
|
|
610
|
+
definitionName: operation.provenance?.definitionName ??
|
|
611
|
+
projection.definitionName,
|
|
612
|
+
planningContribution: operation.provenance?.planningContribution ??
|
|
613
|
+
projection.planningContribution,
|
|
614
|
+
ownershipRule: operation.provenance?.ownershipRule ??
|
|
615
|
+
"protected generated output must be Template Source-backed",
|
|
616
|
+
}),
|
|
553
617
|
};
|
|
554
|
-
const allowlistReason = allowed.get(allowlistKey(projection.name, operation.to, owningFunction));
|
|
555
|
-
if (allowlistReason) {
|
|
556
|
-
usedAllowlistKeys.add(allowlistKey(projection.name, operation.to, owningFunction));
|
|
557
|
-
allowlistedDebt.push({ ...diagnostic, allowlistReason });
|
|
558
|
-
continue;
|
|
559
|
-
}
|
|
560
618
|
violations.push(diagnostic);
|
|
561
619
|
}
|
|
562
620
|
}
|
|
563
621
|
}
|
|
564
|
-
const unusedAllowlistEntries = allowlist.filter((entry) => {
|
|
565
|
-
if (!checkedPresets.has(entry.preset)) {
|
|
566
|
-
return false;
|
|
567
|
-
}
|
|
568
|
-
return !usedAllowlistKeys.has(allowlistKey(entry.preset, entry.generatedPath, entry.owningFunction));
|
|
569
|
-
});
|
|
570
622
|
return {
|
|
571
|
-
ok: violations.length === 0
|
|
623
|
+
ok: violations.length === 0,
|
|
572
624
|
violations,
|
|
573
|
-
allowlistedDebt,
|
|
574
|
-
unusedAllowlistEntries,
|
|
575
625
|
};
|
|
576
626
|
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
export type ToolchainBaseline = {
|
|
2
|
+
readonly nodeLtsMajor: string;
|
|
3
|
+
readonly packageManagerPin: `pnpm@${string}`;
|
|
4
|
+
};
|
|
5
|
+
export type ToolchainPullRequestCandidate = {
|
|
6
|
+
readonly kind: "absent";
|
|
7
|
+
} | {
|
|
8
|
+
readonly kind: "open";
|
|
9
|
+
readonly pullRequestNumber: number;
|
|
10
|
+
};
|
|
11
|
+
export type ToolchainRemoteBranch = {
|
|
12
|
+
readonly kind: "absent";
|
|
13
|
+
} | {
|
|
14
|
+
readonly kind: "present";
|
|
15
|
+
readonly sha: string;
|
|
16
|
+
};
|
|
17
|
+
export type ToolchainUpdateCandidate = {
|
|
18
|
+
readonly pullRequest: ToolchainPullRequestCandidate;
|
|
19
|
+
readonly remoteBranch: ToolchainRemoteBranch;
|
|
20
|
+
};
|
|
21
|
+
export type ToolchainBaselineUpdatePlan = {
|
|
22
|
+
readonly kind: "no-drift";
|
|
23
|
+
} | {
|
|
24
|
+
readonly kind: "cleanup-stale";
|
|
25
|
+
readonly pullRequestNumber?: number;
|
|
26
|
+
readonly deleteBranch: true;
|
|
27
|
+
} | {
|
|
28
|
+
readonly kind: "update";
|
|
29
|
+
readonly mode: "create";
|
|
30
|
+
readonly desired: ToolchainBaseline;
|
|
31
|
+
} | {
|
|
32
|
+
readonly kind: "update";
|
|
33
|
+
readonly mode: "replace";
|
|
34
|
+
readonly pullRequestNumber: number;
|
|
35
|
+
readonly desired: ToolchainBaseline;
|
|
36
|
+
};
|
|
37
|
+
type PlanToolchainBaselineUpdateOptions = {
|
|
38
|
+
readonly current: ToolchainBaseline & {
|
|
39
|
+
readonly materialConsistent?: boolean;
|
|
40
|
+
};
|
|
41
|
+
readonly desired: ToolchainBaseline;
|
|
42
|
+
readonly candidate: ToolchainUpdateCandidate;
|
|
43
|
+
};
|
|
44
|
+
export declare function planToolchainBaselineUpdate(options: PlanToolchainBaselineUpdateOptions): ToolchainBaselineUpdatePlan;
|
|
45
|
+
export {};
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
export function planToolchainBaselineUpdate(options) {
|
|
2
|
+
const hasDrift = options.current.materialConsistent === false ||
|
|
3
|
+
options.current.nodeLtsMajor !== options.desired.nodeLtsMajor ||
|
|
4
|
+
options.current.packageManagerPin !== options.desired.packageManagerPin;
|
|
5
|
+
if (!hasDrift) {
|
|
6
|
+
return options.candidate.pullRequest.kind === "absent" &&
|
|
7
|
+
options.candidate.remoteBranch.kind === "absent"
|
|
8
|
+
? { kind: "no-drift" }
|
|
9
|
+
: {
|
|
10
|
+
kind: "cleanup-stale",
|
|
11
|
+
...(options.candidate.pullRequest.kind === "open"
|
|
12
|
+
? {
|
|
13
|
+
pullRequestNumber: options.candidate.pullRequest.pullRequestNumber,
|
|
14
|
+
}
|
|
15
|
+
: {}),
|
|
16
|
+
deleteBranch: true,
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
return options.candidate.pullRequest.kind === "absent"
|
|
20
|
+
? { kind: "update", mode: "create", desired: options.desired }
|
|
21
|
+
: {
|
|
22
|
+
kind: "update",
|
|
23
|
+
mode: "replace",
|
|
24
|
+
pullRequestNumber: options.candidate.pullRequest.pullRequestNumber,
|
|
25
|
+
desired: options.desired,
|
|
26
|
+
};
|
|
27
|
+
}
|
|
@@ -18,6 +18,7 @@ export type ResolveToolchainVersionsOptions = {
|
|
|
18
18
|
readonly fetchJson?: ((url: string) => Promise<unknown>) | undefined;
|
|
19
19
|
readonly nodeReleaseIndexUrl?: string | undefined;
|
|
20
20
|
readonly pnpmRegistryUrl?: string | undefined;
|
|
21
|
+
readonly now?: Date | string | undefined;
|
|
21
22
|
};
|
|
22
23
|
export declare const nodeReleaseIndexUrl = "https://nodejs.org/dist/index.json";
|
|
23
24
|
export declare const pnpmRegistryUrl = "https://registry.npmjs.org/pnpm";
|