@ykdz/template 0.0.23 → 0.0.25
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 +83 -0
- package/node_modules/@ykdz/template-builtin-presets/dist/src/foundation.js +804 -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 +114 -0
- package/node_modules/@ykdz/template-builtin-presets/dist/src/shared/vue.d.ts +33 -0
- package/node_modules/@ykdz/template-builtin-presets/dist/src/shared/vue.js +88 -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 +114 -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 +382 -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 +92 -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 +162 -0
- package/node_modules/@ykdz/template-builtin-presets/package.json +68 -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/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 +19 -0
- package/node_modules/@ykdz/template-builtin-presets/templates/foundation/pnpm-workspace.yaml +28 -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/scripts/check-boundaries.ts +12 -0
- package/node_modules/@ykdz/template-builtin-presets/templates/foundation/scripts/run-root-owned-task.ts +69 -0
- package/node_modules/@ykdz/template-builtin-presets/templates/foundation/tsconfig.json +9 -0
- package/node_modules/@ykdz/template-builtin-presets/templates/foundation/turbo.json +25 -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-source → template-builtin-presets}/templates/vike-app/db/turbo.json +1 -1
- 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 +20 -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 +84 -22
- 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 +3 -2
- 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 +4 -3
- 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-builtin-source → template-builtin-presets}/templates/vue-hono-app/api/turbo.json +1 -1
- package/node_modules/@ykdz/{template-builtin-source → template-builtin-presets}/templates/vue-hono-app/web/playwright.config.ts +1 -1
- package/node_modules/@ykdz/{template-builtin-source/templates/vike-app → template-builtin-presets/templates/vue-hono-app}/web/turbo.json +2 -2
- package/node_modules/@ykdz/template-core/dist/Cargo.toml +1 -1
- package/node_modules/@ykdz/template-core/dist/dependency-catalog.d.ts +8 -0
- package/node_modules/@ykdz/template-core/dist/dependency-catalog.js +48 -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 +64 -33
- package/node_modules/@ykdz/template-core/dist/module-graph.js +117 -135
- package/node_modules/@ykdz/template-core/dist/package-contribution.d.ts +41 -0
- package/node_modules/@ykdz/template-core/dist/package-contribution.js +24 -0
- package/node_modules/@ykdz/template-core/dist/pnpm-workspace.yaml +22 -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 +17 -2
- package/node_modules/@ykdz/template-core/dist/project-github.js +87 -14
- 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/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/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/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 → 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,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";
|
|
@@ -2,7 +2,7 @@ export const nodeReleaseIndexUrl = "https://nodejs.org/dist/index.json";
|
|
|
2
2
|
export const pnpmRegistryUrl = "https://registry.npmjs.org/pnpm";
|
|
3
3
|
const bundledFallbackToolchain = {
|
|
4
4
|
nodeLtsMajor: nodeLtsMajor("24"),
|
|
5
|
-
packageManagerPin: packageManagerPin("
|
|
5
|
+
packageManagerPin: packageManagerPin("11.11.0"),
|
|
6
6
|
};
|
|
7
7
|
export async function resolveToolchainVersions(options = {}) {
|
|
8
8
|
const source = options.source ?? "online";
|
|
@@ -14,7 +14,8 @@ export async function resolveToolchainVersions(options = {}) {
|
|
|
14
14
|
const nodeReleases = parseNodeReleaseIndex(await fetchJson(options.nodeReleaseIndexUrl ?? nodeReleaseIndexUrl));
|
|
15
15
|
const nodeMajor = latestLtsMajor(nodeReleases);
|
|
16
16
|
const pnpmMetadata = parsePnpmRegistryMetadata(await fetchJson(options.pnpmRegistryUrl ?? pnpmRegistryUrl));
|
|
17
|
-
const
|
|
17
|
+
const nodeVersion = latestLtsVersion(nodeReleases, nodeMajor);
|
|
18
|
+
const pnpmVersion = latestCompatiblePnpmVersion(pnpmMetadata, nodeVersion, instant(options.now ?? new Date()));
|
|
18
19
|
return {
|
|
19
20
|
nodeLtsMajor: nodeMajor,
|
|
20
21
|
packageManagerPin: packageManagerPin(pnpmVersion),
|
|
@@ -31,19 +32,20 @@ export async function resolveToolchainVersions(options = {}) {
|
|
|
31
32
|
}
|
|
32
33
|
export async function checkOnlineToolchainResolutionContract(options = {}) {
|
|
33
34
|
const fetchJson = options.fetchJson ?? fetchOfficialJson;
|
|
34
|
-
const
|
|
35
|
-
const
|
|
36
|
-
|
|
35
|
+
const nodeSource = await contractPhase("Node source parsing", async () => {
|
|
36
|
+
const releases = parseNodeReleaseIndex(await fetchJson(nodeReleaseIndexUrl));
|
|
37
|
+
const major = latestLtsMajor(releases);
|
|
38
|
+
return { major, version: latestLtsVersion(releases, major) };
|
|
37
39
|
});
|
|
38
40
|
const pnpmMetadata = await contractPhase("pnpm source parsing", async () => parsePnpmRegistryMetadata(await fetchJson(pnpmRegistryUrl)));
|
|
39
|
-
const pnpmVersion = await contractPhase("compatibility selection", async () => latestCompatiblePnpmVersion(pnpmMetadata,
|
|
41
|
+
const pnpmVersion = await contractPhase("compatibility selection", async () => latestCompatiblePnpmVersion(pnpmMetadata, nodeSource.version));
|
|
40
42
|
return {
|
|
41
|
-
nodeLtsMajor:
|
|
43
|
+
nodeLtsMajor: nodeSource.major,
|
|
42
44
|
packageManagerPin: packageManagerPin(pnpmVersion),
|
|
43
45
|
diagnostics: [
|
|
44
|
-
`Node source parsing succeeded; latest LTS major is ${
|
|
46
|
+
`Node source parsing succeeded; latest LTS major is ${nodeSource.major.value}.`,
|
|
45
47
|
`pnpm source parsing succeeded; latest compatible pnpm release is ${pnpmVersion}.`,
|
|
46
|
-
`Compatibility selection succeeded for pnpm@${pnpmVersion} on Node ${
|
|
48
|
+
`Compatibility selection succeeded for pnpm@${pnpmVersion} on Node ${nodeSource.major.value}.`,
|
|
47
49
|
],
|
|
48
50
|
};
|
|
49
51
|
}
|
|
@@ -113,9 +115,21 @@ function latestLtsMajor(releases) {
|
|
|
113
115
|
}
|
|
114
116
|
return nodeLtsMajor(String(Math.max(...majors)));
|
|
115
117
|
}
|
|
118
|
+
function latestLtsVersion(releases, major) {
|
|
119
|
+
const versions = releases
|
|
120
|
+
.filter((release) => release.lts !== false)
|
|
121
|
+
.map((release) => release.version.replace(/^v/, ""))
|
|
122
|
+
.filter((version) => valid(version) !== null && version.startsWith(`${major.value}.`))
|
|
123
|
+
.toSorted(compare);
|
|
124
|
+
const latest = versions.at(-1);
|
|
125
|
+
if (!latest) {
|
|
126
|
+
throw new Error(`Node release index did not contain Node ${major.value}`);
|
|
127
|
+
}
|
|
128
|
+
return latest;
|
|
129
|
+
}
|
|
116
130
|
function parsePnpmRegistryMetadata(value) {
|
|
117
|
-
if (!isRecord(value) || !isRecord(value.versions)) {
|
|
118
|
-
throw new Error("pnpm registry metadata is missing versions");
|
|
131
|
+
if (!isRecord(value) || !isRecord(value.versions) || !isRecord(value.time)) {
|
|
132
|
+
throw new Error("pnpm registry metadata is missing versions or time");
|
|
119
133
|
}
|
|
120
134
|
const versions = {};
|
|
121
135
|
for (const [version, metadata] of Object.entries(value.versions)) {
|
|
@@ -131,61 +145,45 @@ function parsePnpmRegistryMetadata(value) {
|
|
|
131
145
|
}
|
|
132
146
|
: {};
|
|
133
147
|
}
|
|
134
|
-
|
|
148
|
+
const time = Object.fromEntries(Object.entries(value.time).filter((entry) => typeof entry[1] === "string"));
|
|
149
|
+
return { time, versions };
|
|
135
150
|
}
|
|
136
|
-
function latestCompatiblePnpmVersion(metadata,
|
|
151
|
+
function latestCompatiblePnpmVersion(metadata, nodeVersion, now = Date.now()) {
|
|
137
152
|
const candidates = Object.entries(metadata.versions)
|
|
138
|
-
.filter(([version]) => /^\d+\.\d+\.\d
|
|
139
|
-
.filter(([, packageMetadata]) => nodeSatisfiesRange(
|
|
153
|
+
.filter(([version]) => /^\d+\.\d+\.\d+$/.test(version))
|
|
154
|
+
.filter(([, packageMetadata]) => nodeSatisfiesRange(nodeVersion, packageMetadata.engines?.node))
|
|
155
|
+
.filter(([version]) => isMatureRelease(metadata.time[version], now))
|
|
140
156
|
.map(([version]) => version)
|
|
141
|
-
.toSorted(
|
|
157
|
+
.toSorted(compare);
|
|
142
158
|
const latest = candidates.at(-1);
|
|
143
159
|
if (!latest) {
|
|
144
|
-
throw new Error(`pnpm registry metadata did not contain a release compatible with Node ${
|
|
160
|
+
throw new Error(`pnpm registry metadata did not contain a release compatible with Node ${nodeVersion}`);
|
|
145
161
|
}
|
|
146
162
|
return latest;
|
|
147
163
|
}
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
}
|
|
152
|
-
return range
|
|
153
|
-
.split(/\s+/)
|
|
154
|
-
.filter(Boolean)
|
|
155
|
-
.every((comparator) => nodeSatisfiesComparator(nodeMajor, comparator));
|
|
156
|
-
}
|
|
157
|
-
function nodeSatisfiesComparator(nodeMajor, comparator) {
|
|
158
|
-
const match = comparator.match(/^(>=|>|<=|<|=)?(\d+)(?:\.\d+){0,2}$/);
|
|
159
|
-
if (!match) {
|
|
164
|
+
const pnpmMaturityWindowMilliseconds = 24 * 60 * 60 * 1_000;
|
|
165
|
+
function isMatureRelease(publishedAt, now) {
|
|
166
|
+
if (publishedAt === undefined) {
|
|
160
167
|
return false;
|
|
161
168
|
}
|
|
162
|
-
const
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
if (operator === "<=") {
|
|
171
|
-
return nodeMajor <= major;
|
|
172
|
-
}
|
|
173
|
-
if (operator === "<") {
|
|
174
|
-
return nodeMajor < major;
|
|
169
|
+
const publishedAtMilliseconds = Date.parse(publishedAt);
|
|
170
|
+
return (Number.isFinite(publishedAtMilliseconds) &&
|
|
171
|
+
now - publishedAtMilliseconds >= pnpmMaturityWindowMilliseconds);
|
|
172
|
+
}
|
|
173
|
+
function instant(value) {
|
|
174
|
+
const milliseconds = value instanceof Date ? value.getTime() : Date.parse(value);
|
|
175
|
+
if (!Number.isFinite(milliseconds)) {
|
|
176
|
+
throw new Error(`Invalid resolution time: ${String(value)}`);
|
|
175
177
|
}
|
|
176
|
-
return
|
|
178
|
+
return milliseconds;
|
|
177
179
|
}
|
|
178
|
-
function
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
for (let index = 0; index < 3; index += 1) {
|
|
182
|
-
const difference = (leftParts[index] ?? 0) - (rightParts[index] ?? 0);
|
|
183
|
-
if (difference !== 0) {
|
|
184
|
-
return difference;
|
|
185
|
-
}
|
|
180
|
+
function nodeSatisfiesRange(nodeVersion, range) {
|
|
181
|
+
if (!range) {
|
|
182
|
+
return true;
|
|
186
183
|
}
|
|
187
|
-
return
|
|
184
|
+
return satisfies(nodeVersion, range, { includePrerelease: false });
|
|
188
185
|
}
|
|
189
186
|
function isRecord(value) {
|
|
190
187
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
191
188
|
}
|
|
189
|
+
import { compare, satisfies, valid } from "semver";
|
|
@@ -8,10 +8,6 @@
|
|
|
8
8
|
"type": "module",
|
|
9
9
|
"exports": {
|
|
10
10
|
"./*": {
|
|
11
|
-
"source": {
|
|
12
|
-
"types": "./src/*.ts",
|
|
13
|
-
"default": "./src/*.ts"
|
|
14
|
-
},
|
|
15
11
|
"types": "./dist/*.d.ts",
|
|
16
12
|
"default": "./dist/*.js"
|
|
17
13
|
}
|
|
@@ -25,16 +21,22 @@
|
|
|
25
21
|
"typecheck": "tsc -p tsconfig.json --noEmit --pretty false"
|
|
26
22
|
},
|
|
27
23
|
"dependencies": {
|
|
28
|
-
"
|
|
29
|
-
"
|
|
24
|
+
"semver": "catalog:",
|
|
25
|
+
"typescript": "catalog:",
|
|
30
26
|
"valibot": "catalog:"
|
|
31
27
|
},
|
|
32
28
|
"devDependencies": {
|
|
33
29
|
"@types/node": "catalog:",
|
|
34
|
-
"@
|
|
30
|
+
"@types/semver": "catalog:",
|
|
35
31
|
"execa": "catalog:",
|
|
36
32
|
"oxfmt": "catalog:",
|
|
37
33
|
"oxlint": "catalog:",
|
|
38
|
-
"oxlint-tsgolint": "catalog:"
|
|
34
|
+
"oxlint-tsgolint": "catalog:",
|
|
35
|
+
"typescript-7": "catalog:"
|
|
36
|
+
},
|
|
37
|
+
"turbo": {
|
|
38
|
+
"tags": [
|
|
39
|
+
"template-core"
|
|
40
|
+
]
|
|
39
41
|
}
|
|
40
42
|
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
The ISC License
|
|
2
|
+
|
|
3
|
+
Copyright (c) Isaac Z. Schlueter and Contributors
|
|
4
|
+
|
|
5
|
+
Permission to use, copy, modify, and/or distribute this software for any
|
|
6
|
+
purpose with or without fee is hereby granted, provided that the above
|
|
7
|
+
copyright notice and this permission notice appear in all copies.
|
|
8
|
+
|
|
9
|
+
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
|
10
|
+
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
|
11
|
+
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
|
12
|
+
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
|
13
|
+
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
|
14
|
+
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
|
|
15
|
+
IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|