@ykdz/template 0.0.24 → 0.0.26

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.
Files changed (51) hide show
  1. package/node_modules/@ykdz/template-builtin-presets/dist/src/foundation.d.ts +3 -5
  2. package/node_modules/@ykdz/template-builtin-presets/dist/src/foundation.js +172 -165
  3. package/node_modules/@ykdz/template-builtin-presets/dist/src/rust-bin/definition.js +4 -24
  4. package/node_modules/@ykdz/template-builtin-presets/dist/src/shared/vue.d.ts +0 -3
  5. package/node_modules/@ykdz/template-builtin-presets/dist/src/shared/vue.js +8 -26
  6. package/node_modules/@ykdz/template-builtin-presets/dist/src/ts-lib/definition.js +5 -29
  7. package/node_modules/@ykdz/template-builtin-presets/dist/src/vike-app/definition.js +24 -50
  8. package/node_modules/@ykdz/template-builtin-presets/dist/src/vue-app/definition.js +2 -4
  9. package/node_modules/@ykdz/template-builtin-presets/dist/src/vue-hono-app/definition.js +9 -26
  10. package/node_modules/@ykdz/template-builtin-presets/package.json +2 -1
  11. package/node_modules/@ykdz/template-builtin-presets/templates/foundation/.github/workflows/check-playwright.yml +1 -1
  12. package/node_modules/@ykdz/template-builtin-presets/templates/foundation/.github/workflows/check-rust.yml +1 -1
  13. package/node_modules/@ykdz/template-builtin-presets/templates/foundation/.github/workflows/check.dynamic.template +1 -1
  14. package/node_modules/@ykdz/template-builtin-presets/templates/foundation/.github/workflows/check.yml +1 -1
  15. package/node_modules/@ykdz/template-builtin-presets/templates/foundation/pnpm-workspace.dynamic.txt +1 -5
  16. package/node_modules/@ykdz/template-builtin-presets/templates/foundation/pnpm-workspace.yaml +2 -3
  17. package/node_modules/@ykdz/template-builtin-presets/templates/foundation/scripts/check-boundaries.ts +12 -0
  18. package/node_modules/@ykdz/template-builtin-presets/templates/foundation/scripts/run-root-owned-task.ts +69 -0
  19. package/node_modules/@ykdz/template-builtin-presets/templates/foundation/tsconfig.json +6 -1
  20. package/node_modules/@ykdz/template-builtin-presets/templates/foundation/turbo.json +15 -8
  21. package/node_modules/@ykdz/template-builtin-presets/templates/rust-bin/.github/workflows/check.yml +1 -1
  22. package/node_modules/@ykdz/template-builtin-presets/templates/rust-bin/Cargo.lock +2 -2
  23. package/node_modules/@ykdz/template-builtin-presets/templates/rust-bin/Cargo.toml +1 -1
  24. package/node_modules/@ykdz/template-builtin-presets/templates/shared/devcontainer/node-pnpm.Dockerfile +5 -2
  25. package/node_modules/@ykdz/template-builtin-presets/templates/ts-lib/.github/workflows/check.yml +1 -1
  26. package/node_modules/@ykdz/template-builtin-presets/templates/vike-app/db/turbo.json +1 -1
  27. package/node_modules/@ykdz/template-builtin-presets/templates/vike-app/db-migrations/turbo.json +2 -2
  28. package/node_modules/@ykdz/template-builtin-presets/templates/vike-app/web/Dockerfile +5 -6
  29. package/node_modules/@ykdz/template-builtin-presets/templates/vike-app/web/scripts/check-standalone-deployment.ts +1 -1
  30. package/node_modules/@ykdz/template-builtin-presets/templates/vike-app/web/tsconfig.json +1 -1
  31. package/node_modules/@ykdz/template-builtin-presets/templates/vike-app/web/turbo.json +3 -3
  32. package/node_modules/@ykdz/template-builtin-presets/templates/vue-app/.github/workflows/check.yml +1 -1
  33. package/node_modules/@ykdz/template-builtin-presets/templates/vue-app/turbo.json +3 -3
  34. package/node_modules/@ykdz/template-builtin-presets/templates/vue-hono-app/api/turbo.json +1 -1
  35. package/node_modules/@ykdz/template-builtin-presets/templates/vue-hono-app/web/playwright.config.ts +1 -1
  36. package/node_modules/@ykdz/template-builtin-presets/templates/vue-hono-app/web/turbo.json +2 -2
  37. package/node_modules/@ykdz/template-core/dist/Cargo.lock +2 -2
  38. package/node_modules/@ykdz/template-core/dist/Cargo.toml +1 -1
  39. package/node_modules/@ykdz/template-core/dist/dependency-catalog.d.ts +0 -1
  40. package/node_modules/@ykdz/template-core/dist/dependency-catalog.js +2 -8
  41. package/node_modules/@ykdz/template-core/dist/module-graph.d.ts +39 -37
  42. package/node_modules/@ykdz/template-core/dist/module-graph.js +84 -142
  43. package/node_modules/@ykdz/template-core/dist/package-contribution.d.ts +3 -5
  44. package/node_modules/@ykdz/template-core/dist/package-contribution.js +7 -7
  45. package/node_modules/@ykdz/template-core/dist/pnpm-workspace.yaml +5 -7
  46. package/node_modules/@ykdz/template-core/dist/project-github.d.ts +11 -3
  47. package/node_modules/@ykdz/template-core/dist/project-github.js +31 -36
  48. package/node_modules/@ykdz/template-core/dist/project-linking-v2.d.ts +1 -1
  49. package/node_modules/@ykdz/template-core/dist/renderer.js +38 -21
  50. package/package.json +1 -1
  51. package/node_modules/@ykdz/template-builtin-presets/templates/foundation/.pnpmfile.cts +0 -14
@@ -1,5 +1,5 @@
1
1
  import { fileURLToPath } from "node:url";
2
- import { playwrightBrowserAssetsEnvironmentNeed, shellCheckEnvironmentNeed, } from "@ykdz/template-core/module-graph";
2
+ import { dockerEngineEnvironmentNeed, playwrightBrowserAssetsEnvironmentNeed, shellCheckEnvironmentNeed, } from "@ykdz/template-core/module-graph";
3
3
  import { vueTypecheckRunnerSourceOperation } from "../shared/vue.js";
4
4
  import { templateSources } from "../template-sources.js";
5
5
  function definitions(context) {
@@ -34,57 +34,39 @@ function foundation() {
34
34
  workspacePackageGlobs: ["apps/*", "packages/*"],
35
35
  };
36
36
  }
37
- function checks(packagePath, options = {}) {
38
- const owner = { kind: "package-boundary", path: packagePath };
39
- return [
40
- { kind: "typescript-typecheck", owner },
41
- { kind: "oxc-lint", owner },
42
- { kind: "oxc-format-check", owner },
43
- { kind: "build", owner },
44
- ...((options.unit ?? true) ? [{ kind: "unit-test", owner }] : []),
45
- ...(options.browser ? [{ kind: "e2e-test", owner }] : []),
46
- ];
47
- }
48
- function fixes(packagePath) {
49
- const owner = { kind: "package-boundary", path: packagePath };
50
- return [
51
- { kind: "oxc-format-write", owner },
52
- { kind: "oxc-lint-fix", owner },
53
- ];
54
- }
55
37
  function webScripts() {
56
38
  const prepareDatabase = "DATABASE_FILE=../../apps/web/data/app.sqlite pnpm --dir ../../packages/db-migrations run db:prepare:dev";
57
39
  return {
58
- "build:run": "vike build",
59
- "check:deployment": "node scripts/check-standalone-deployment.ts",
40
+ build: "vike build",
41
+ deployment: "node scripts/check-standalone-deployment.ts",
60
42
  dev: `${prepareDatabase} && vike dev`,
61
- "format:check:run": "oxfmt --list-different --config ../../oxfmt.config.ts .",
62
- "format:write:run": "oxfmt --write --config ../../oxfmt.config.ts .",
63
- "lint:run": "shellcheck scripts/container-entrypoint.sh && oxlint --quiet --format=unix --type-aware --config ../../oxlint.config.ts .",
64
- "lint:fix:run": "oxlint --type-aware --format=unix --config ../../oxlint.config.ts . --fix",
43
+ "format:check": "oxfmt --list-different --config ../../oxfmt.config.ts .",
44
+ "format:write": "oxfmt --write --config ../../oxfmt.config.ts .",
45
+ lint: "shellcheck scripts/container-entrypoint.sh && oxlint --quiet --format=unix --type-aware --config ../../oxlint.config.ts .",
46
+ "lint:fix": "oxlint --type-aware --format=unix --config ../../oxlint.config.ts . --fix",
65
47
  preview: `${prepareDatabase} && vike preview`,
66
48
  start: "node ./dist/server/index.mjs",
67
- "test:run": "vitest run --reporter=agent --silent=passed-only --passWithNoTests",
68
- "test:e2e:run": "node scripts/run-playwright.ts",
69
- "typecheck:run": "node scripts/run-vue-tsc.ts --build --noEmit --pretty false",
49
+ test: "vitest run --reporter=agent --silent=passed-only --passWithNoTests",
50
+ "test:e2e": "node scripts/run-playwright.ts",
51
+ typecheck: "node scripts/run-vue-tsc.ts --build --noEmit --pretty false",
70
52
  };
71
53
  }
72
54
  function databaseScripts() {
73
55
  return {
74
- "build:run": "tsc -p tsconfig.json --noEmit",
56
+ build: "tsc -p tsconfig.json --noEmit",
75
57
  "db:seed:example": "node scripts/seed-example.ts",
76
- "format:check:run": "oxfmt --list-different --config ../../oxfmt.config.ts .",
77
- "format:write:run": "oxfmt --write --config ../../oxfmt.config.ts .",
78
- "lint:run": "oxlint --quiet --format=unix --config ../../oxlint.config.ts .",
79
- "lint:fix:run": "oxlint --format=unix --config ../../oxlint.config.ts . --fix",
80
- "test:run": 'DATABASE_FILE="$(pwd)/node_modules/.tmp/test.sqlite" pnpm --dir ../db-migrations run db:prepare:test && DATABASE_FILE="$(pwd)/node_modules/.tmp/test.sqlite" vitest run --reporter=agent --silent=passed-only; status=$?; rm -f ./node_modules/.tmp/test.sqlite; exit $status',
81
- "typecheck:run": "tsc -p tsconfig.json --noEmit --pretty false",
58
+ "format:check": "oxfmt --list-different --config ../../oxfmt.config.ts .",
59
+ "format:write": "oxfmt --write --config ../../oxfmt.config.ts .",
60
+ lint: "oxlint --quiet --format=unix --config ../../oxlint.config.ts .",
61
+ "lint:fix": "oxlint --format=unix --config ../../oxlint.config.ts . --fix",
62
+ test: 'DATABASE_FILE="$(pwd)/node_modules/.tmp/test.sqlite" pnpm --dir ../db-migrations run db:prepare:test && DATABASE_FILE="$(pwd)/node_modules/.tmp/test.sqlite" vitest run --reporter=agent --silent=passed-only; status=$?; rm -f ./node_modules/.tmp/test.sqlite; exit $status',
63
+ typecheck: "tsc -p tsconfig.json --noEmit --pretty false",
82
64
  };
83
65
  }
84
66
  function migrationScripts(databasePackageName) {
85
67
  const withDatabasePackage = (command) => `DATABASE_PACKAGE_NAME=${databasePackageName} ${command}`;
86
68
  return {
87
- "build:run": "tsc -p tsconfig.json --noEmit",
69
+ build: "tsc -p tsconfig.json --noEmit",
88
70
  "db:generate": withDatabasePackage("drizzle-kit generate"),
89
71
  "db:migrate": withDatabasePackage("drizzle-kit migrate"),
90
72
  "db:prepare:deploy": "pnpm run db:migrate",
@@ -92,11 +74,11 @@ function migrationScripts(databasePackageName) {
92
74
  "db:prepare:test": `DATABASE_PACKAGE_NAME=${databasePackageName} node scripts/prepare-database.ts test`,
93
75
  "db:push": withDatabasePackage("mkdir -p data node_modules/.tmp && drizzle-kit push"),
94
76
  "db:studio": withDatabasePackage("drizzle-kit studio"),
95
- "format:check:run": "oxfmt --list-different --config ../../oxfmt.config.ts .",
96
- "format:write:run": "oxfmt --write --config ../../oxfmt.config.ts .",
97
- "lint:run": "oxlint --quiet --format=unix --config ../../oxlint.config.ts .",
98
- "lint:fix:run": "oxlint --format=unix --config ../../oxlint.config.ts . --fix",
99
- "typecheck:run": "tsc -p tsconfig.json --noEmit --pretty false",
77
+ "format:check": "oxfmt --list-different --config ../../oxfmt.config.ts .",
78
+ "format:write": "oxfmt --write --config ../../oxfmt.config.ts .",
79
+ lint: "oxlint --quiet --format=unix --config ../../oxlint.config.ts .",
80
+ "lint:fix": "oxlint --format=unix --config ../../oxlint.config.ts . --fix",
81
+ typecheck: "tsc -p tsconfig.json --noEmit --pretty false",
100
82
  };
101
83
  }
102
84
  function copyOperations(packagePath, sourceFiles) {
@@ -256,13 +238,11 @@ function webContribution(context) {
256
238
  packageManager: context.toolchain.packageManagerPin,
257
239
  },
258
240
  operations,
259
- checks: checks(web.path, { browser: true }),
260
- fixes: fixes(web.path),
261
241
  environmentNeeds: [
262
242
  playwrightBrowserAssetsEnvironmentNeed({ browser: "chromium", owner }),
263
243
  shellCheckEnvironmentNeed(owner),
264
244
  ],
265
- deploymentChecks: [{ kind: "deployment-image", owner }],
245
+ deploymentEnvironmentNeeds: [dockerEngineEnvironmentNeed()],
266
246
  foundation: foundation(),
267
247
  };
268
248
  }
@@ -322,8 +302,6 @@ function databaseContribution(context) {
322
302
  { kind: "writeJson", to: `${db.path}/package.json`, value: {} },
323
303
  ...copyOperations(db.path, sourceFiles),
324
304
  ],
325
- checks: checks(db.path),
326
- fixes: fixes(db.path),
327
305
  environmentNeeds: [],
328
306
  foundation: foundation(),
329
307
  };
@@ -367,10 +345,6 @@ function migrationsContribution(context) {
367
345
  },
368
346
  ...copyOperations(migrations.path, sourceFiles),
369
347
  ],
370
- // This package has no test:run manifest script, so the durable
371
- // contribution reconstruction must not invent a unit-test check for it.
372
- checks: checks(migrations.path, { unit: false }),
373
- fixes: fixes(migrations.path),
374
348
  environmentNeeds: [],
375
349
  foundation: foundation(),
376
350
  };
@@ -1,9 +1,9 @@
1
- import { sharedVueSourceOperations, vueApplicationChecks, vueApplicationEnvironmentNeeds, vueApplicationExposure, vueApplicationFixes, vueApplicationManifest, vueApplicationScripts, } from "../shared/vue.js";
1
+ import { sharedVueSourceOperations, vueApplicationEnvironmentNeeds, vueApplicationExposure, vueApplicationManifest, vueApplicationScripts, } from "../shared/vue.js";
2
2
  import { templateSources } from "../template-sources.js";
3
3
  function packageScripts() {
4
4
  return {
5
5
  ...vueApplicationScripts(),
6
- "typecheck:run": "node scripts/run-vue-tsc.ts --build --noEmit --pretty false",
6
+ typecheck: "node scripts/run-vue-tsc.ts --build --noEmit --pretty false",
7
7
  };
8
8
  }
9
9
  function appContribution(options) {
@@ -43,8 +43,6 @@ function appContribution(options) {
43
43
  scripts: packageScripts(),
44
44
  }),
45
45
  operations,
46
- checks: vueApplicationChecks(definition.path),
47
- fixes: vueApplicationFixes(definition.path),
48
46
  environmentNeeds: vueApplicationEnvironmentNeeds(definition.path),
49
47
  foundation: {
50
48
  toolchains: {},
@@ -1,23 +1,22 @@
1
- import {} from "@ykdz/template-core/module-graph";
2
- import { sharedVueSourceOperations, vueApplicationChecks, vueApplicationEnvironmentNeeds, vueApplicationExposure, vueApplicationFixes, vueApplicationManifest, vueApplicationScripts, } from "../shared/vue.js";
1
+ import { sharedVueSourceOperations, vueApplicationEnvironmentNeeds, vueApplicationExposure, vueApplicationManifest, vueApplicationScripts, } from "../shared/vue.js";
3
2
  import { templateSources } from "../template-sources.js";
4
3
  function apiScripts() {
5
4
  return {
6
- "build:run": "tsc -p tsconfig.build.json && tsc-alias -p tsconfig.build.json",
5
+ build: "tsc -p tsconfig.build.json && tsc-alias -p tsconfig.build.json",
7
6
  dev: "node --watch src/server.ts",
8
- "format:check:run": "oxfmt --list-different --config ../../oxfmt.config.ts .",
9
- "format:write:run": "oxfmt --write --config ../../oxfmt.config.ts .",
10
- "lint:run": "oxlint --quiet --format=unix --config ../../oxlint.config.ts .",
11
- "lint:fix:run": "oxlint --format=unix --config ../../oxlint.config.ts . --fix",
7
+ "format:check": "oxfmt --list-different --config ../../oxfmt.config.ts .",
8
+ "format:write": "oxfmt --write --config ../../oxfmt.config.ts .",
9
+ lint: "oxlint --quiet --format=unix --config ../../oxlint.config.ts .",
10
+ "lint:fix": "oxlint --format=unix --config ../../oxlint.config.ts . --fix",
12
11
  start: "node dist/server.js",
13
- "test:run": "vitest run --reporter=agent --silent=passed-only",
14
- "typecheck:run": "tsc -p tsconfig.json --noEmit --pretty false",
12
+ test: "vitest run --reporter=agent --silent=passed-only",
13
+ typecheck: "tsc -p tsconfig.json --noEmit --pretty false",
15
14
  };
16
15
  }
17
16
  function webScripts() {
18
17
  return {
19
18
  ...vueApplicationScripts(),
20
- "typecheck:run": "node scripts/run-vue-tsc.ts --build --pretty false",
19
+ typecheck: "node scripts/run-vue-tsc.ts --build --pretty false",
21
20
  };
22
21
  }
23
22
  function packageFoundation() {
@@ -43,18 +42,6 @@ function apiContribution(context) {
43
42
  },
44
43
  imports: { "#/*": { default: "./dist/*.js", types: "./src/*.ts" } },
45
44
  };
46
- const owner = { kind: "package-boundary", path: definition.path };
47
- const checks = [
48
- { kind: "typescript-typecheck", owner },
49
- { kind: "oxc-lint", owner },
50
- { kind: "oxc-format-check", owner },
51
- { kind: "build", owner },
52
- { kind: "unit-test", owner },
53
- ];
54
- const fixes = [
55
- { kind: "oxc-format-write", owner },
56
- { kind: "oxc-lint-fix", owner },
57
- ];
58
45
  const sourceFiles = [
59
46
  "turbo.json",
60
47
  "vitest.config.ts",
@@ -97,8 +84,6 @@ function apiContribution(context) {
97
84
  engines: { node: context.toolchain.nodeLtsMajor },
98
85
  },
99
86
  operations,
100
- checks,
101
- fixes,
102
87
  environmentNeeds: [],
103
88
  foundation: packageFoundation(),
104
89
  };
@@ -141,8 +126,6 @@ function webContribution(context) {
141
126
  scripts: webScripts(),
142
127
  }),
143
128
  operations,
144
- checks: vueApplicationChecks(definition.path),
145
- fixes: vueApplicationFixes(definition.path),
146
129
  environmentNeeds: vueApplicationEnvironmentNeeds(definition.path),
147
130
  foundation: packageFoundation(),
148
131
  };
@@ -19,12 +19,13 @@
19
19
  },
20
20
  "scripts": {
21
21
  "build": "rm -rf dist && tsc -p tsconfig.build.json",
22
- "check:templates": "pnpm run check:templates:boundary && node src/check-template-source.ts && node src/check-registry-contract.ts && node src/check-publication-source.ts",
22
+ "check:templates": "node src/check-template-source.ts && node src/check-registry-contract.ts && node src/check-publication-source.ts",
23
23
  "check:templates:boundary": "node src/check-template-boundary.ts",
24
24
  "format:check": "oxfmt --list-different --config ../../oxfmt.config.ts .",
25
25
  "format:write": "oxfmt --write --config ../../oxfmt.config.ts .",
26
26
  "lint": "oxlint --quiet --format=unix --config ../../oxlint.config.ts --ignore-pattern dist --ignore-pattern templates .",
27
27
  "lint:fix": "oxlint --format=unix --config ../../oxlint.config.ts --ignore-pattern dist --ignore-pattern templates . --fix",
28
+ "test": "vitest run --config vitest.config.ts --reporter=agent --silent=passed-only",
28
29
  "typecheck": "tsc -p tsconfig.json --noEmit --pretty false"
29
30
  },
30
31
  "dependencies": {
@@ -11,7 +11,7 @@ jobs:
11
11
  runs-on: ubuntu-latest
12
12
  steps:
13
13
  - uses: actions/checkout@v7
14
- - uses: actions/setup-node@v6
14
+ - uses: actions/setup-node@v7
15
15
  with:
16
16
  node-version-file: package.json
17
17
  - run: corepack enable
@@ -11,7 +11,7 @@ jobs:
11
11
  runs-on: ubuntu-latest
12
12
  steps:
13
13
  - uses: actions/checkout@v7
14
- - uses: actions/setup-node@v6
14
+ - uses: actions/setup-node@v7
15
15
  with:
16
16
  node-version-file: package.json
17
17
  - run: corepack enable
@@ -11,7 +11,7 @@ jobs:
11
11
  runs-on: ubuntu-latest{{DEPLOYMENT_MATRIX}}
12
12
  steps:
13
13
  - uses: actions/checkout@v7
14
- - uses: actions/setup-node@v6
14
+ - uses: actions/setup-node@v7
15
15
  with:
16
16
  node-version-file: package.json
17
17
  - run: corepack enable{{RUST_CI_PREPARATION}}{{DEPLOYMENT_DOCKER_PREPARATION}}
@@ -11,7 +11,7 @@ jobs:
11
11
  runs-on: ubuntu-latest
12
12
  steps:
13
13
  - uses: actions/checkout@v7
14
- - uses: actions/setup-node@v6
14
+ - uses: actions/setup-node@v7
15
15
  with:
16
16
  node-version-file: package.json
17
17
  - run: corepack enable
@@ -8,14 +8,10 @@ dedupeInjectedDeps: false
8
8
 
9
9
  syncInjectedDepsAfterScripts:
10
10
  - build
11
- - build:run
12
11
 
13
12
  minimumReleaseAge: 1440
14
13
  minimumReleaseAgeStrict: true
15
-
16
- overrides:
17
- {{DEPENDENCY_OVERRIDES}}
18
-
14
+ {{DEPENDENCY_OVERRIDES_SECTION}}
19
15
  allowBuilds:
20
16
  esbuild: true
21
17
 
@@ -1,4 +1,5 @@
1
1
  packages:
2
+ - apps/*
2
3
  - packages/*
3
4
 
4
5
  nodeLinker: isolated
@@ -8,13 +9,11 @@ dedupeInjectedDeps: false
8
9
 
9
10
  syncInjectedDepsAfterScripts:
10
11
  - build
11
- - build:run
12
12
 
13
13
  minimumReleaseAge: 1440
14
14
  minimumReleaseAgeStrict: true
15
15
 
16
16
  overrides:
17
- "valibot>typescript": "-"
18
17
 
19
18
  allowBuilds:
20
19
  esbuild: true
@@ -24,6 +23,6 @@ catalog:
24
23
  oxfmt: ^0.58.0
25
24
  oxlint: ^1.73.0
26
25
  oxlint-tsgolint: ^0.24.0
27
- turbo: 2.10.2
26
+ turbo: 2.10.5
28
27
  typescript-7: npm:typescript@^7.0.2
29
28
  valibot: ^1.4.2
@@ -0,0 +1,12 @@
1
+ import { spawnSync } from "node:child_process";
2
+
3
+ const result = spawnSync(
4
+ "pnpm",
5
+ ["exec", "turbo", "boundaries", "--no-color"],
6
+ {
7
+ stdio: "inherit",
8
+ },
9
+ );
10
+
11
+ if (result.error !== undefined) throw result.error;
12
+ process.exit(result.status ?? 1);
@@ -0,0 +1,69 @@
1
+ import { spawnSync } from "node:child_process";
2
+ import { existsSync } from "node:fs";
3
+
4
+ const rootOwnedFormatInputs = [
5
+ "package.json",
6
+ "pnpm-workspace.yaml",
7
+ "pnpm-lock.yaml",
8
+ "turbo.json",
9
+ "tsconfig.json",
10
+ "tsconfig.config.json",
11
+ "oxfmt.config.ts",
12
+ "oxlint.config.ts",
13
+ ".gitignore",
14
+ "TODO.md",
15
+ "rust-toolchain.toml",
16
+ ".vscode",
17
+ ".github",
18
+ ".devcontainer",
19
+ "scripts",
20
+ ] as const;
21
+
22
+ const rootOwnedLintInputs = [
23
+ "oxfmt.config.ts",
24
+ "oxlint.config.ts",
25
+ "scripts",
26
+ ] as const;
27
+
28
+ function existing(inputs: readonly string[]): string[] {
29
+ return inputs.filter((input) => existsSync(input));
30
+ }
31
+
32
+ const task = process.argv[2];
33
+ const command =
34
+ task === "format:check"
35
+ ? ["exec", "oxfmt", "--list-different", "--config", "oxfmt.config.ts"]
36
+ : task === "format:write"
37
+ ? ["exec", "oxfmt", "--write", "--config", "oxfmt.config.ts"]
38
+ : task === "lint"
39
+ ? [
40
+ "exec",
41
+ "oxlint",
42
+ "--quiet",
43
+ "--format=unix",
44
+ "--config",
45
+ "oxlint.config.ts",
46
+ ]
47
+ : task === "lint:fix"
48
+ ? [
49
+ "exec",
50
+ "oxlint",
51
+ "--format=unix",
52
+ "--config",
53
+ "oxlint.config.ts",
54
+ "--fix",
55
+ ]
56
+ : undefined;
57
+
58
+ if (command === undefined) {
59
+ throw new Error(`Unknown root-owned task: ${task ?? "(missing)"}`);
60
+ }
61
+
62
+ const inputs = existing(
63
+ task === "format:check" || task === "format:write"
64
+ ? rootOwnedFormatInputs
65
+ : rootOwnedLintInputs,
66
+ );
67
+ const result = spawnSync("pnpm", [...command, ...inputs], { stdio: "inherit" });
68
+ if (result.error) throw result.error;
69
+ process.exitCode = result.status ?? 1;
@@ -1,4 +1,9 @@
1
1
  {
2
2
  "extends": "./tsconfig.config.json",
3
- "files": ["oxfmt.config.ts", "oxlint.config.ts"]
3
+ "files": [
4
+ "oxfmt.config.ts",
5
+ "oxlint.config.ts",
6
+ "scripts/check-boundaries.ts",
7
+ "scripts/run-root-owned-task.ts"
8
+ ]
4
9
  }
@@ -6,13 +6,20 @@
6
6
  }
7
7
  },
8
8
  "tasks": {
9
- "format:check:run": {},
10
- "lint:run": {},
11
- "typecheck:run": { "dependsOn": ["^typecheck:run"] },
12
- "build:run": { "dependsOn": ["^build:run"] },
13
- "test:run": { "dependsOn": ["build:run"] },
14
- "test:e2e:run": { "dependsOn": ["build:run"] },
15
- "format:write:run": { "cache": false },
16
- "lint:fix:run": { "cache": false }
9
+ "//#boundaries": { "cache": false },
10
+ "//#format:check": { "outputs": [] },
11
+ "//#lint": { "outputs": [] },
12
+ "//#format:write": { "dependsOn": ["//#lint:fix"], "cache": false },
13
+ "//#lint:fix": { "cache": false },
14
+ "//#typecheck": { "outputs": [] },
15
+ "format:check": { "outputs": [] },
16
+ "lint": { "outputs": [] },
17
+ "typecheck": { "dependsOn": ["^typecheck"], "outputs": [] },
18
+ "build": { "dependsOn": ["^build"] },
19
+ "test": { "dependsOn": ["build"], "outputs": [] },
20
+ "test:e2e": { "dependsOn": ["build"], "cache": false },
21
+ "deployment": { "cache": false },
22
+ "format:write": { "dependsOn": ["lint:fix"], "cache": false },
23
+ "lint:fix": { "cache": false }
17
24
  }
18
25
  }
@@ -11,7 +11,7 @@ jobs:
11
11
  runs-on: ubuntu-latest
12
12
  steps:
13
13
  - uses: actions/checkout@v7
14
- - uses: actions/setup-node@v6
14
+ - uses: actions/setup-node@v7
15
15
  with:
16
16
  node-version-file: package.json
17
17
  - run: corepack enable
@@ -4,9 +4,9 @@ version = 4
4
4
 
5
5
  [[package]]
6
6
  name = "anyhow"
7
- version = "1.0.103"
7
+ version = "1.0.104"
8
8
  source = "registry+https://github.com/rust-lang/crates.io-index"
9
- checksum = "2a4385e2e34eb35d6b3efe798b9eb88096925d87726c0798709bf56d9ed84af3"
9
+ checksum = "330a5ed07fa54e4702c9d6c4174f74427fc0ef6e214bbd677ae50a5099946470"
10
10
 
11
11
  [[package]]
12
12
  name = "{{CARGO_PACKAGE_NAME}}"
@@ -4,7 +4,7 @@ version = "0.1.0"
4
4
  edition = "2024"
5
5
 
6
6
  [dependencies]
7
- anyhow = "1.0.100"
7
+ anyhow = "1.0.104"
8
8
 
9
9
  [lints]
10
10
  workspace = true
@@ -5,8 +5,11 @@ SHELL ["/bin/bash", "-o", "pipefail", "-c"]
5
5
  ARG PACKAGE_MANAGER_PIN
6
6
  ENV COREPACK_HOME="/corepack"
7
7
  ENV PNPM_HOME="/pnpm"
8
- ENV PATH="$PNPM_HOME:$PATH"
9
- RUN install -d -m 0755 "$COREPACK_HOME" "$PNPM_HOME" \
8
+ ENV PATH="$PNPM_HOME/bin:$PNPM_HOME:$PATH"
9
+ RUN apt-get update \
10
+ && apt-get install -y --no-install-recommends ca-certificates \
11
+ && rm -rf /var/lib/apt/lists/* \
12
+ && install -d -m 0755 "$COREPACK_HOME" "$PNPM_HOME" "$PNPM_HOME/bin" \
10
13
  && corepack enable --install-directory "$PNPM_HOME" \
11
14
  && corepack prepare "${PACKAGE_MANAGER_PIN}" --activate \
12
15
  && chmod -R a+rX "$COREPACK_HOME" "$PNPM_HOME"
@@ -11,7 +11,7 @@ jobs:
11
11
  runs-on: ubuntu-latest
12
12
  steps:
13
13
  - uses: actions/checkout@v7
14
- - uses: actions/setup-node@v6
14
+ - uses: actions/setup-node@v7
15
15
  with:
16
16
  node-version-file: package.json
17
17
  - run: corepack enable
@@ -2,7 +2,7 @@
2
2
  "extends": ["//"],
3
3
  "tags": ["library"],
4
4
  "tasks": {
5
- "build:run": {
5
+ "build": {
6
6
  "outputs": []
7
7
  }
8
8
  }
@@ -2,8 +2,8 @@
2
2
  "extends": ["//"],
3
3
  "tags": ["library"],
4
4
  "tasks": {
5
- "build:run": {
6
- "dependsOn": ["^build:run"],
5
+ "build": {
6
+ "dependsOn": ["^build"],
7
7
  "outputs": []
8
8
  }
9
9
  }
@@ -6,9 +6,9 @@ FROM node:{{NODE_VERSION}}-bookworm-slim AS base
6
6
  ARG PACKAGE_MANAGER_PIN="{{PACKAGE_MANAGER_PIN}}"
7
7
  ENV COREPACK_HOME="/corepack"
8
8
  ENV PNPM_HOME="/pnpm"
9
- ENV PATH="$PNPM_HOME:$PATH"
9
+ ENV PATH="$PNPM_HOME/bin:$PNPM_HOME:$PATH"
10
10
  WORKDIR /repo
11
- RUN install -d -m 0755 "$COREPACK_HOME" "$PNPM_HOME" \
11
+ RUN install -d -m 0755 "$COREPACK_HOME" "$PNPM_HOME" "$PNPM_HOME/bin" \
12
12
  && corepack enable --install-directory "$PNPM_HOME" \
13
13
  && for attempt in 1 2 3; do \
14
14
  if corepack prepare "$PACKAGE_MANAGER_PIN" --activate; then break; fi; \
@@ -18,7 +18,7 @@ RUN install -d -m 0755 "$COREPACK_HOME" "$PNPM_HOME" \
18
18
  && chmod -R a+rX "$COREPACK_HOME" "$PNPM_HOME"
19
19
 
20
20
  FROM base AS pruner
21
- COPY pnpm-lock.yaml pnpm-workspace.yaml .pnpmfile.cts ./
21
+ COPY pnpm-lock.yaml pnpm-workspace.yaml ./
22
22
  RUN pnpm fetch
23
23
  COPY package.json turbo.json ./
24
24
  COPY apps/web/package.json apps/web/package.json
@@ -31,13 +31,12 @@ RUN pnpm exec turbo prune {{WEB_PACKAGE_NAME}} {{DB_MIGRATIONS_PACKAGE_NAME}} --
31
31
  FROM base AS build
32
32
  COPY --from=pruner /repo/out/json/pnpm-lock.yaml ./pnpm-lock.yaml
33
33
  COPY --from=pruner /repo/out/json/pnpm-workspace.yaml ./pnpm-workspace.yaml
34
- COPY --from=pruner /repo/.pnpmfile.cts ./.pnpmfile.cts
35
34
  RUN pnpm fetch
36
35
  COPY --from=pruner /repo/out/json/ ./
37
36
  RUN pnpm install --offline --frozen-lockfile
38
37
  COPY --from=pruner /repo/out/full/ ./
39
- RUN pnpm --filter ./packages/db run build:run
40
- RUN pnpm --filter ./apps/web run build:run
38
+ RUN pnpm --filter ./packages/db run build
39
+ RUN pnpm --filter ./apps/web run build
41
40
  RUN pnpm --filter ./apps/web deploy --prod /runtime-deploy
42
41
  RUN pnpm --filter ./packages/db-migrations deploy --prod /migration-deploy
43
42
 
@@ -286,7 +286,7 @@ if (row.count !== 0) throw new Error(\`Fresh deployment must contain zero TODOs,
286
286
  }
287
287
 
288
288
  async function runPlaywright(baseUrl: string): Promise<void> {
289
- await runCommand("pnpm", ["--dir", "apps/web", "run", "test:e2e:run"], {
289
+ await runCommand("pnpm", ["--dir", "apps/web", "run", "test:e2e"], {
290
290
  cwd: repositoryRoot,
291
291
  env: {
292
292
  ...process.env,
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "files": [],
3
3
  "references": [
4
- { "path": "../../packages/db" },
4
+ { "path": "../../packages/db/tsconfig.json" },
5
5
  { "path": "./tsconfig.app.json" },
6
6
  { "path": "./tsconfig.test.json" },
7
7
  { "path": "./tsconfig.node.json" }
@@ -2,11 +2,11 @@
2
2
  "extends": ["//"],
3
3
  "tags": ["app"],
4
4
  "tasks": {
5
- "build:run": {
5
+ "build": {
6
6
  "outputs": ["dist/**"]
7
7
  },
8
- "test:e2e:run": {
9
- "dependsOn": ["build:run"],
8
+ "test:e2e": {
9
+ "dependsOn": ["build"],
10
10
  "cache": false
11
11
  }
12
12
  }
@@ -11,7 +11,7 @@ jobs:
11
11
  runs-on: ubuntu-latest
12
12
  steps:
13
13
  - uses: actions/checkout@v7
14
- - uses: actions/setup-node@v6
14
+ - uses: actions/setup-node@v7
15
15
  with:
16
16
  node-version-file: package.json
17
17
  - run: corepack enable
@@ -2,12 +2,12 @@
2
2
  "extends": ["//"],
3
3
  "tags": ["app"],
4
4
  "tasks": {
5
- "build:run": {
5
+ "build": {
6
6
  "outputs": ["dist/**"]
7
7
  },
8
- "test:e2e:run": {
8
+ "test:e2e": {
9
9
  "cache": false,
10
- "dependsOn": ["build:run"]
10
+ "dependsOn": ["build"]
11
11
  }
12
12
  }
13
13
  }
@@ -2,7 +2,7 @@
2
2
  "extends": ["//"],
3
3
  "tags": ["app"],
4
4
  "tasks": {
5
- "build:run": {
5
+ "build": {
6
6
  "outputs": ["dist/**"]
7
7
  }
8
8
  }