@outfitter/tooling 0.3.3 → 0.3.5

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 (94) hide show
  1. package/.markdownlint-cli2.jsonc +55 -55
  2. package/README.md +33 -24
  3. package/dist/bun-version-compat.d.ts +2 -0
  4. package/dist/bun-version-compat.js +10 -0
  5. package/dist/cli/check-boundary-invocations.d.ts +34 -0
  6. package/dist/cli/check-boundary-invocations.js +14 -0
  7. package/dist/cli/check-bunup-registry.d.ts +36 -0
  8. package/dist/cli/check-bunup-registry.js +12 -0
  9. package/dist/cli/check-changeset.d.ts +82 -0
  10. package/dist/cli/check-changeset.js +24 -0
  11. package/dist/cli/check-clean-tree.d.ts +36 -0
  12. package/dist/cli/check-clean-tree.js +14 -0
  13. package/dist/cli/check-exports.d.ts +3 -0
  14. package/dist/cli/check-exports.js +17 -0
  15. package/dist/cli/check-home-paths.d.ts +31 -0
  16. package/dist/cli/check-home-paths.js +12 -0
  17. package/dist/cli/check-markdown-links.d.ts +42 -0
  18. package/dist/cli/check-markdown-links.js +13 -0
  19. package/dist/cli/check-readme-imports.d.ts +61 -0
  20. package/dist/{shared/chunk-7tdgbqb0.js → cli/check-readme-imports.js} +7 -6
  21. package/dist/cli/check-tsdoc.d.ts +5 -0
  22. package/dist/cli/check-tsdoc.js +42 -0
  23. package/dist/cli/check.d.ts +19 -0
  24. package/dist/cli/check.js +10 -0
  25. package/dist/cli/fix.d.ts +19 -0
  26. package/dist/cli/fix.js +10 -0
  27. package/dist/cli/index.js +61 -1218
  28. package/dist/cli/init.d.ts +31 -0
  29. package/dist/cli/init.js +12 -0
  30. package/dist/cli/internal/exports-analysis.d.ts +2 -0
  31. package/dist/cli/internal/exports-analysis.js +10 -0
  32. package/dist/cli/internal/exports-fs.d.ts +17 -0
  33. package/dist/cli/internal/exports-fs.js +9 -0
  34. package/dist/cli/internal/pre-push-checks.d.ts +2 -0
  35. package/dist/cli/internal/pre-push-checks.js +37 -0
  36. package/dist/cli/internal/tsdoc-analysis.d.ts +3 -0
  37. package/dist/cli/internal/tsdoc-analysis.js +26 -0
  38. package/dist/cli/internal/tsdoc-formatting.d.ts +3 -0
  39. package/dist/cli/internal/tsdoc-formatting.js +10 -0
  40. package/dist/cli/internal/tsdoc-types.d.ts +2 -0
  41. package/dist/cli/internal/tsdoc-types.js +16 -0
  42. package/dist/cli/pre-push.d.ts +7 -0
  43. package/dist/cli/pre-push.js +29 -0
  44. package/dist/cli/upgrade-bun.d.ts +8 -0
  45. package/dist/cli/upgrade-bun.js +9 -0
  46. package/dist/index.d.ts +9 -186
  47. package/dist/index.js +4 -42
  48. package/dist/registry/build.d.ts +4 -0
  49. package/dist/registry/build.js +279 -0
  50. package/dist/registry/index.d.ts +3 -0
  51. package/dist/registry/index.js +1 -0
  52. package/dist/registry/schema.d.ts +2 -0
  53. package/dist/registry/schema.js +28 -0
  54. package/dist/shared/@outfitter/tooling-0zjz8eg9.js +106 -0
  55. package/dist/shared/@outfitter/tooling-1hez6j9d.js +21 -0
  56. package/dist/shared/@outfitter/tooling-2vv5y3s4.js +145 -0
  57. package/dist/shared/{chunk-cmde0fwx.js → @outfitter/tooling-5xxctk9b.js} +12 -138
  58. package/dist/shared/@outfitter/tooling-5ynz680q.js +59 -0
  59. package/dist/shared/@outfitter/tooling-7437rmy6.js +39 -0
  60. package/dist/shared/@outfitter/tooling-8qcwr06t.d.ts +74 -0
  61. package/dist/shared/@outfitter/tooling-9ram55dd.js +69 -0
  62. package/dist/shared/@outfitter/tooling-9vs606gq.d.ts +3 -0
  63. package/dist/shared/@outfitter/tooling-a4bfx4be.js +21 -0
  64. package/dist/shared/@outfitter/tooling-a59br34g.js +32 -0
  65. package/dist/shared/@outfitter/tooling-a6q3zh7t.js +86 -0
  66. package/dist/shared/@outfitter/tooling-amrbp7cm.js +102 -0
  67. package/dist/shared/@outfitter/tooling-ayps7c4x.js +58 -0
  68. package/dist/shared/@outfitter/tooling-c8q6mj8z.js +228 -0
  69. package/dist/shared/@outfitter/tooling-cb0b8wsx.d.ts +57 -0
  70. package/dist/shared/@outfitter/tooling-ctmgnap5.js +19 -0
  71. package/dist/shared/@outfitter/tooling-f8q38e9z.d.ts +16 -0
  72. package/dist/shared/@outfitter/tooling-gcdvsqqp.js +73 -0
  73. package/dist/shared/@outfitter/tooling-h5dnevjw.js +139 -0
  74. package/dist/shared/@outfitter/tooling-j8d1h2zd.d.ts +10 -0
  75. package/dist/shared/@outfitter/tooling-ja1zg5yc.js +214 -0
  76. package/dist/shared/@outfitter/tooling-jnrs9rqd.js +4 -0
  77. package/dist/shared/@outfitter/tooling-mkynjra9.js +23 -0
  78. package/dist/shared/@outfitter/tooling-mq2xvz96.js +285 -0
  79. package/dist/shared/@outfitter/tooling-pq47jv6t.js +213 -0
  80. package/dist/shared/@outfitter/tooling-sjm8nebx.d.ts +109 -0
  81. package/dist/shared/@outfitter/tooling-stgnc2zx.d.ts +85 -0
  82. package/dist/shared/@outfitter/tooling-tj9p41vj.d.ts +55 -0
  83. package/dist/shared/@outfitter/tooling-vjmhvpjq.d.ts +29 -0
  84. package/dist/shared/@outfitter/tooling-wwm97f47.js +81 -0
  85. package/dist/shared/@outfitter/tooling-y43b117h.d.ts +13 -0
  86. package/dist/version.d.ts +2 -0
  87. package/dist/version.js +8 -0
  88. package/lefthook.yml +5 -1
  89. package/package.json +140 -131
  90. package/registry/registry.json +19 -12
  91. package/tsconfig.preset.bun.json +5 -5
  92. package/tsconfig.preset.json +33 -33
  93. package/biome.json +0 -81
  94. package/dist/shared/chunk-3s189drz.js +0 -4
package/package.json CHANGED
@@ -1,133 +1,142 @@
1
1
  {
2
- "name": "@outfitter/tooling",
3
- "description": "Dev tooling configuration presets for Outfitter projects (biome, typescript, lefthook, markdownlint)",
4
- "version": "0.3.3",
5
- "type": "module",
6
- "files": [
7
- "dist",
8
- "registry",
9
- "biome.json",
10
- "tsconfig.preset.json",
11
- "tsconfig.preset.bun.json",
12
- "lefthook.yml",
13
- ".markdownlint-cli2.jsonc"
14
- ],
15
- "module": "./dist/index.js",
16
- "types": "./dist/index.d.ts",
17
- "exports": {
18
- ".": {
19
- "import": {
20
- "types": "./dist/index.d.ts",
21
- "default": "./dist/index.js"
22
- }
23
- },
24
- "./.markdownlint-cli2": "./.markdownlint-cli2.jsonc",
25
- "./.markdownlint-cli2.jsonc": "./.markdownlint-cli2.jsonc",
26
- "./biome": "./biome.json",
27
- "./biome.json": "./biome.json",
28
- "./cli/check": {
29
- "import": {
30
- "types": "./dist/cli/check.d.ts",
31
- "default": "./dist/cli/check.js"
32
- }
33
- },
34
- "./cli/check-tsdoc": {
35
- "import": {
36
- "types": "./dist/cli/check-tsdoc.d.ts",
37
- "default": "./dist/cli/check-tsdoc.js"
38
- }
39
- },
40
- "./cli/fix": {
41
- "import": {
42
- "types": "./dist/cli/fix.d.ts",
43
- "default": "./dist/cli/fix.js"
44
- }
45
- },
46
- "./cli/init": {
47
- "import": {
48
- "types": "./dist/cli/init.d.ts",
49
- "default": "./dist/cli/init.js"
50
- }
51
- },
52
- "./lefthook": "./lefthook.yml",
53
- "./lefthook.yml": "./lefthook.yml",
54
- "./package.json": "./package.json",
55
- "./registry": {
56
- "import": {
57
- "types": "./dist/registry/index.d.ts",
58
- "default": "./dist/registry/index.js"
59
- }
60
- },
61
- "./tsconfig": "./tsconfig.preset.json",
62
- "./tsconfig-bun": "./tsconfig.preset.bun.json",
63
- "./tsconfig.preset.bun.json": "./tsconfig.preset.bun.json",
64
- "./tsconfig.preset.json": "./tsconfig.preset.json"
65
- },
66
- "bin": {
67
- "tooling": "./dist/cli/index.js"
68
- },
69
- "sideEffects": false,
70
- "scripts": {
71
- "build:registry": "bun run src/registry/build.ts",
72
- "sync:exports": "bun run scripts/sync-exports.ts",
73
- "sync:exports:check": "bun run scripts/sync-exports.ts --check",
74
- "prebuild": "bun run build:registry && bun run sync:exports:check",
75
- "build": "bunup --filter @outfitter/tooling",
76
- "prepack": "bun run sync:exports",
77
- "lint": "biome lint ./src",
78
- "lint:fix": "biome lint --write ./src",
79
- "test": "bun run build:registry && bun test",
80
- "typecheck": "tsc --noEmit",
81
- "clean": "rm -rf dist registry",
82
- "prepublishOnly": "bun ../../scripts/check-publish-manifest.ts"
83
- },
84
- "dependencies": {
85
- "@outfitter/cli": "0.5.2",
86
- "commander": "^14.0.2",
87
- "typescript": "^5.9.3",
88
- "zod": "^4.3.5"
89
- },
90
- "devDependencies": {
91
- "@outfitter/presets": "0.2.0",
92
- "@types/bun": "^1.3.9",
93
- "yaml": "^2.8.2"
94
- },
95
- "peerDependencies": {
96
- "ultracite": "^7.0.0",
97
- "lefthook": "^2.0.0",
98
- "markdownlint-cli2": ">=0.17.0"
99
- },
100
- "peerDependenciesMeta": {
101
- "ultracite": {
102
- "optional": true
103
- },
104
- "lefthook": {
105
- "optional": true
106
- },
107
- "markdownlint-cli2": {
108
- "optional": true
109
- }
110
- },
111
- "engines": {
112
- "bun": ">=1.3.9"
113
- },
114
- "keywords": [
115
- "outfitter",
116
- "tooling",
117
- "biome",
118
- "typescript",
119
- "lefthook",
120
- "markdownlint",
121
- "config",
122
- "presets"
123
- ],
124
- "license": "MIT",
125
- "repository": {
126
- "type": "git",
127
- "url": "https://github.com/outfitter-dev/outfitter.git",
128
- "directory": "packages/tooling"
129
- },
130
- "publishConfig": {
131
- "access": "public"
132
- }
2
+ "name": "@outfitter/tooling",
3
+ "description": "Dev tooling configuration presets for Outfitter projects (oxlint/oxfmt, typescript, lefthook, markdownlint)",
4
+ "version": "0.3.5",
5
+ "type": "module",
6
+ "files": [
7
+ "dist",
8
+ "registry",
9
+ "tsconfig.preset.json",
10
+ "tsconfig.preset.bun.json",
11
+ "lefthook.yml",
12
+ ".markdownlint-cli2.jsonc"
13
+ ],
14
+ "module": "./dist/index.js",
15
+ "types": "./dist/index.d.ts",
16
+ "exports": {
17
+ ".": {
18
+ "import": {
19
+ "types": "./dist/index.d.ts",
20
+ "default": "./dist/index.js"
21
+ }
22
+ },
23
+ "./.markdownlint-cli2": "./.markdownlint-cli2.jsonc",
24
+ "./.markdownlint-cli2.jsonc": "./.markdownlint-cli2.jsonc",
25
+ "./cli/check": {
26
+ "import": {
27
+ "types": "./dist/cli/check.d.ts",
28
+ "default": "./dist/cli/check.js"
29
+ }
30
+ },
31
+ "./cli/check-home-paths": {
32
+ "import": {
33
+ "types": "./dist/cli/check-home-paths.d.ts",
34
+ "default": "./dist/cli/check-home-paths.js"
35
+ }
36
+ },
37
+ "./cli/check-markdown-links": {
38
+ "import": {
39
+ "types": "./dist/cli/check-markdown-links.d.ts",
40
+ "default": "./dist/cli/check-markdown-links.js"
41
+ }
42
+ },
43
+ "./cli/check-tsdoc": {
44
+ "import": {
45
+ "types": "./dist/cli/check-tsdoc.d.ts",
46
+ "default": "./dist/cli/check-tsdoc.js"
47
+ }
48
+ },
49
+ "./cli/fix": {
50
+ "import": {
51
+ "types": "./dist/cli/fix.d.ts",
52
+ "default": "./dist/cli/fix.js"
53
+ }
54
+ },
55
+ "./cli/init": {
56
+ "import": {
57
+ "types": "./dist/cli/init.d.ts",
58
+ "default": "./dist/cli/init.js"
59
+ }
60
+ },
61
+ "./lefthook": "./lefthook.yml",
62
+ "./lefthook.yml": "./lefthook.yml",
63
+ "./package.json": "./package.json",
64
+ "./registry": {
65
+ "import": {
66
+ "types": "./dist/registry/index.d.ts",
67
+ "default": "./dist/registry/index.js"
68
+ }
69
+ },
70
+ "./tsconfig": "./tsconfig.preset.json",
71
+ "./tsconfig-bun": "./tsconfig.preset.bun.json",
72
+ "./tsconfig.preset.bun.json": "./tsconfig.preset.bun.json",
73
+ "./tsconfig.preset.json": "./tsconfig.preset.json"
74
+ },
75
+ "bin": {
76
+ "tooling": "./dist/cli/index.js"
77
+ },
78
+ "sideEffects": false,
79
+ "scripts": {
80
+ "build:registry": "bun run src/registry/build.ts",
81
+ "sync:exports": "bun run scripts/sync-exports.ts",
82
+ "sync:exports:check": "bun run scripts/sync-exports.ts --check",
83
+ "build": "bun run build:registry && bun run sync:exports:check && cd ../.. && bash ./scripts/run-bunup-with-lock.sh bunup --filter @outfitter/tooling",
84
+ "prepack": "bun run sync:exports",
85
+ "lint": "oxlint ./src",
86
+ "lint:fix": "oxlint --fix ./src",
87
+ "test": "bun run build:registry && bun test",
88
+ "typecheck": "tsc --noEmit",
89
+ "clean": "rm -rf dist registry",
90
+ "prepublishOnly": "bun ../../scripts/check-publish-manifest.ts"
91
+ },
92
+ "dependencies": {
93
+ "@outfitter/cli": "1.0.0",
94
+ "commander": "^14.0.2",
95
+ "typescript": "^5.9.3",
96
+ "zod": "^4.3.5"
97
+ },
98
+ "devDependencies": {
99
+ "@outfitter/presets": "0.3.0",
100
+ "@types/bun": "^1.3.9",
101
+ "yaml": "^2.8.2"
102
+ },
103
+ "peerDependencies": {
104
+ "ultracite": "^7.0.0",
105
+ "lefthook": "^2.0.0",
106
+ "markdownlint-cli2": ">=0.17.0"
107
+ },
108
+ "peerDependenciesMeta": {
109
+ "ultracite": {
110
+ "optional": true
111
+ },
112
+ "lefthook": {
113
+ "optional": true
114
+ },
115
+ "markdownlint-cli2": {
116
+ "optional": true
117
+ }
118
+ },
119
+ "engines": {
120
+ "bun": ">=1.3.10"
121
+ },
122
+ "keywords": [
123
+ "outfitter",
124
+ "tooling",
125
+ "oxlint",
126
+ "oxfmt",
127
+ "typescript",
128
+ "lefthook",
129
+ "markdownlint",
130
+ "config",
131
+ "presets"
132
+ ],
133
+ "license": "MIT",
134
+ "repository": {
135
+ "type": "git",
136
+ "url": "https://github.com/outfitter-dev/outfitter.git",
137
+ "directory": "packages/tooling"
138
+ },
139
+ "publishConfig": {
140
+ "access": "public"
141
+ }
133
142
  }
@@ -7,7 +7,7 @@
7
7
  "files": [
8
8
  {
9
9
  "path": ".claude/settings.json",
10
- "content": "{\n \"hooks\": {\n \"SessionStart\": [\n {\n \"matcher\": \"*\",\n \"hooks\": [\n {\n \"type\": \"command\",\n \"command\": \"bash \\\"$CLAUDE_PROJECT_DIR/scripts/bootstrap.sh\\\"\",\n \"timeout\": 120\n }\n ]\n }\n ],\n \"Stop\": [\n {\n \"matcher\": \"*\",\n \"hooks\": [\n {\n \"type\": \"command\",\n \"command\": \"bash \\\"$CLAUDE_PROJECT_DIR/.claude/hooks/format-code-on-stop.sh\\\"\",\n \"timeout\": 60\n }\n ]\n }\n ]\n },\n \"enabledPlugins\": {},\n \"extraKnownMarketplaces\": {}\n}\n"
10
+ "content": "{\n \"hooks\": {\n \"SessionStart\": [\n {\n \"matcher\": \"*\",\n \"hooks\": [\n {\n \"type\": \"command\",\n \"command\": \"bash \\\"$CLAUDE_PROJECT_DIR/scripts/bootstrap.sh\\\"\",\n \"timeout\": 120\n }\n ]\n }\n ],\n \"Stop\": [\n {\n \"matcher\": \"*\",\n \"hooks\": [\n {\n \"type\": \"command\",\n \"command\": \"bash \\\"$CLAUDE_PROJECT_DIR/.claude/hooks/format-code-on-stop.sh\\\"\",\n \"timeout\": 60\n }\n ]\n }\n ]\n },\n \"enabledPlugins\": {\n \"outfitter@outfitter\": true,\n \"fieldguides@outfitter\": true\n },\n \"extraKnownMarketplaces\": {\n \"outfitter\": {\n \"source\": {\n \"source\": \"github\",\n \"repo\": \"outfitter-dev/outfitter\",\n \"sparsePaths\": [\".claude-plugin\", \"plugins\"]\n }\n }\n }\n}\n"
11
11
  },
12
12
  {
13
13
  "path": ".claude/hooks/format-code-on-stop.sh",
@@ -16,17 +16,24 @@
16
16
  }
17
17
  ]
18
18
  },
19
- "biome": {
20
- "name": "biome",
21
- "description": "Biome linter/formatter configuration via Ultracite",
19
+ "linter": {
20
+ "name": "linter",
21
+ "description": "Linter and formatter configuration (oxlint/oxfmt) via Ultracite",
22
22
  "files": [
23
23
  {
24
- "path": "biome.json",
25
- "content": "{\n\t\"$schema\": \"https://biomejs.dev/schemas/2.4.4/schema.json\",\n\t\"root\": false,\n\t\"javascript\": {\n\t\t\"globals\": [\"Bun\"]\n\t},\n\t\"linter\": {\n\t\t\"rules\": {\n\t\t\t\"complexity\": {\n\t\t\t\t\"useLiteralKeys\": \"off\",\n\t\t\t\t\"noVoid\": \"off\",\n\t\t\t\t\"noExcessiveCognitiveComplexity\": \"off\"\n\t\t\t},\n\t\t\t\"performance\": {\n\t\t\t\t\"useTopLevelRegex\": \"off\"\n\t\t\t},\n\t\t\t\"style\": {\n\t\t\t\t\"useBlockStatements\": \"off\"\n\t\t\t},\n\t\t\t\"suspicious\": {\n\t\t\t\t\"noConsole\": \"error\"\n\t\t\t}\n\t\t}\n\t},\n\t\"vcs\": {\n\t\t\"enabled\": true,\n\t\t\"clientKind\": \"git\",\n\t\t\"useIgnoreFile\": true\n\t},\n\t\"files\": {\n\t\t\"ignoreUnknown\": true,\n\t\t\"includes\": [\n\t\t\t\"**\",\n\t\t\t\"!**/node_modules\",\n\t\t\t\"!**/dist\",\n\t\t\t\"!**/.turbo\",\n\t\t\t\"!**/*.gen.ts\",\n\t\t\t\"!registry/registry.json\"\n\t\t]\n\t},\n\t\"overrides\": [\n\t\t{\n\t\t\t\"includes\": [\n\t\t\t\t\"packages/*/src/index.ts\",\n\t\t\t\t\"apps/*/src/index.ts\",\n\t\t\t\t\"**/index.ts\"\n\t\t\t],\n\t\t\t\"linter\": {\n\t\t\t\t\"rules\": {\n\t\t\t\t\t\"performance\": {\n\t\t\t\t\t\t\"noBarrelFile\": \"off\"\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"includes\": [\"**/*.test.ts\", \"**/__tests__/**/*\"],\n\t\t\t\"linter\": {\n\t\t\t\t\"rules\": {\n\t\t\t\t\t\"suspicious\": {\n\t\t\t\t\t\t\"useAwait\": \"off\",\n\t\t\t\t\t\t\"noConsole\": \"off\"\n\t\t\t\t\t},\n\t\t\t\t\t\"performance\": {\n\t\t\t\t\t\t\"noDelete\": \"off\"\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"includes\": [\"apps/**/*.ts\", \"scripts/**/*.ts\", \"**/scripts/**/*.ts\"],\n\t\t\t\"linter\": {\n\t\t\t\t\"rules\": {\n\t\t\t\t\t\"suspicious\": {\n\t\t\t\t\t\t\"noConsole\": \"off\"\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t]\n}\n"
24
+ "path": ".oxlintrc.json",
25
+ "content": "{\n \"$schema\": \"./node_modules/oxlint/configuration_schema.json\",\n \"plugins\": [\"eslint\"],\n \"jsPlugins\": [\n {\n \"name\": \"outfitter\",\n \"specifier\": \"@outfitter/oxlint-plugin\"\n }\n ],\n \"globals\": { \"Bun\": \"readonly\" },\n \"categories\": {\n \"correctness\": \"error\",\n \"suspicious\": \"error\",\n \"pedantic\": \"off\",\n \"perf\": \"off\",\n \"style\": \"off\",\n \"restriction\": \"off\"\n },\n \"ignorePatterns\": [\n \"**/node_modules/**\",\n \"**/dist/**\",\n \"**/.turbo/**\",\n \"**/*.gen.ts\",\n \"**/__tests__/fixtures/**\"\n ],\n \"rules\": {\n \"no-void\": \"off\",\n \"outfitter/action-must-register\": \"warn\",\n \"outfitter/handler-must-return-result\": \"error\",\n \"outfitter/max-file-lines\": [\"error\", { \"warn\": 200, \"error\": 400 }],\n \"outfitter/no-console-in-packages\": \"error\",\n \"outfitter/no-cross-tier-import\": \"error\",\n \"outfitter/no-deep-relative-import\": \"warn\",\n \"outfitter/no-nested-barrel\": \"warn\",\n \"outfitter/no-process-env-in-packages\": [\n \"warn\",\n { \"allowedPackages\": [\"config\"] }\n ],\n \"outfitter/no-process-exit-in-packages\": \"error\",\n \"outfitter/no-throw-in-handler\": \"error\",\n \"outfitter/prefer-bun-api\": \"warn\",\n \"outfitter/snapshot-location\": \"warn\",\n \"outfitter/test-file-naming\": \"warn\",\n \"outfitter/use-error-taxonomy\": \"warn\"\n }\n}\n"
26
+ },
27
+ {
28
+ "path": ".oxfmtrc.jsonc",
29
+ "content": "{\n \"$schema\": \"./node_modules/oxfmt/configuration_schema.json\",\n \"printWidth\": 80,\n \"tabWidth\": 2,\n \"useTabs\": false,\n \"semi\": true,\n \"singleQuote\": false,\n \"quoteProps\": \"as-needed\",\n \"jsxSingleQuote\": false,\n \"trailingComma\": \"es5\",\n \"bracketSpacing\": true,\n \"bracketSameLine\": false,\n \"arrowParens\": \"always\",\n \"endOfLine\": \"lf\",\n \"experimentalSortImports\": {\n \"ignoreCase\": true,\n \"newlinesBetween\": true,\n \"order\": \"asc\",\n },\n}\n"
26
30
  }
27
31
  ],
28
32
  "devDependencies": {
29
- "ultracite": "7.2.3"
33
+ "@outfitter/oxlint-plugin": "^0.2.0",
34
+ "ultracite": "7.2.3",
35
+ "oxlint": "1.50.0",
36
+ "oxfmt": "0.35.0"
30
37
  }
31
38
  },
32
39
  "lefthook": {
@@ -35,11 +42,11 @@
35
42
  "files": [
36
43
  {
37
44
  "path": ".lefthook.yml",
38
- "content": "# Lefthook configuration preset for Outfitter projects\n# https://github.com/evilmartians/lefthook\n#\n# Usage: In your project's .lefthook.yml, add:\n# extends:\n# - node_modules/@outfitter/tooling/lefthook.yml\n\npre-commit:\n parallel: true\n commands:\n ultracite:\n glob: \"*.{js,jsx,ts,tsx,json,jsonc,css}\"\n run: bun x ultracite fix {staged_files}\n stage_fixed: true\n\n typecheck:\n glob: \"*.{ts,tsx}\"\n run: bun run typecheck\n\npre-push:\n parallel: false\n commands:\n verify:\n # TDD-aware: skips strict verification on explicit RED phase branches\n # (*-tests, */tests, *_tests). Otherwise runs verify:ci (or a strict\n # fallback: typecheck/check-or-lint/build/test).\n # Requires: @outfitter/tooling as a dev dependency.\n run: bunx @outfitter/tooling pre-push\n"
45
+ "content": "# Lefthook configuration preset for Outfitter projects\n# https://github.com/evilmartians/lefthook\n#\n# Usage: In your project's .lefthook.yml, add:\n# extends:\n# - node_modules/@outfitter/tooling/lefthook.yml\n\npre-commit:\n parallel: true\n commands:\n ultracite:\n glob: \"*.{js,jsx,ts,tsx,json,jsonc,css}\"\n run: bun x ultracite fix {staged_files}\n stage_fixed: true\n\n home-paths:\n glob: \"*.{js,jsx,json,jsonc,css,md,ts,tsx,yaml,yml}\"\n run: bun x @outfitter/tooling check-home-paths {staged_files}\n\n typecheck:\n glob: \"*.{ts,tsx}\"\n run: bun run typecheck\n\npre-push:\n parallel: false\n commands:\n verify:\n # TDD-aware: skips strict verification on explicit RED phase branches\n # (*-tests, */tests, *_tests). Otherwise runs verify:ci (or a strict\n # fallback: typecheck/check-or-lint/build/test).\n # Requires: @outfitter/tooling as a dev dependency.\n run: bun x @outfitter/tooling pre-push\n"
39
46
  }
40
47
  ],
41
48
  "devDependencies": {
42
- "@outfitter/tooling": "^0.3.3",
49
+ "@outfitter/tooling": "^0.3.5",
43
50
  "lefthook": "^2.1.1",
44
51
  "ultracite": "7.2.3"
45
52
  }
@@ -50,7 +57,7 @@
50
57
  "files": [
51
58
  {
52
59
  "path": ".markdownlint-cli2.jsonc",
53
- "content": "{\n\t// Outfitter markdownlint preset\n\t// https://github.com/DavidAnson/markdownlint\n\n\t\"config\": {\n\t\t// Headings\n\t\t\"MD003\": { \"style\": \"atx\" }, // ATX-style headings (# Heading)\n\t\t\"MD022\": { \"lines_above\": 1, \"lines_below\": 1 }, // Blank lines around headings\n\t\t\"MD024\": { \"siblings_only\": true }, // Allow duplicate headings in different sections\n\t\t\"MD041\": false, // First line doesn't need to be h1 (frontmatter, etc.)\n\n\t\t// Line length - disabled for prose flexibility\n\t\t\"MD013\": false,\n\n\t\t// Lists\n\t\t\"MD004\": { \"style\": \"dash\" }, // Unordered list style: dash (-)\n\t\t\"MD007\": { \"indent\": 2 }, // List indentation: 2 spaces\n\t\t\"MD032\": true, // Blank lines around lists\n\n\t\t// Code blocks\n\t\t\"MD040\": true, // Fenced code blocks should have a language\n\t\t\"MD046\": { \"style\": \"fenced\" }, // Code block style: fenced (```)\n\t\t\"MD048\": { \"style\": \"backtick\" }, // Code fence style: backticks\n\n\t\t// Links\n\t\t\"MD034\": true, // No bare URLs (use <url> or [text](url))\n\n\t\t// Whitespace\n\t\t\"MD009\": { \"br_spaces\": 2 }, // Allow 2 trailing spaces for <br>\n\t\t\"MD010\": { \"spaces_per_tab\": 2 }, // Tabs to spaces\n\t\t\"MD012\": { \"maximum\": 1 }, // Max 1 consecutive blank line\n\t\t\"MD047\": true, // Files should end with newline\n\n\t\t// HTML - allow for GitHub-specific elements\n\t\t\"MD033\": {\n\t\t\t\"allowed_elements\": [\n\t\t\t\t\"details\",\n\t\t\t\t\"summary\",\n\t\t\t\t\"kbd\",\n\t\t\t\t\"br\",\n\t\t\t\t\"sup\",\n\t\t\t\t\"sub\",\n\t\t\t\t\"img\",\n\t\t\t\t\"picture\",\n\t\t\t\t\"source\",\n\t\t\t\t\"a\"\n\t\t\t]\n\t\t},\n\n\t\t// Emphasis\n\t\t\"MD049\": { \"style\": \"asterisk\" }, // Emphasis style: *italic*\n\t\t\"MD050\": { \"style\": \"asterisk\" } // Strong style: **bold**\n\t},\n\n\t// Ignore patterns\n\t\"ignores\": [\n\t\t\"node_modules/**\",\n\t\t\"**/node_modules/**\",\n\t\t\"dist/**\",\n\t\t\"**/dist/**\",\n\t\t\".turbo/**\",\n\t\t\"**/.turbo/**\",\n\t\t\"CHANGELOG.md\",\n\t\t\"**/CHANGELOG.md\"\n\t]\n}\n"
60
+ "content": "{\n // Outfitter markdownlint preset\n // https://github.com/DavidAnson/markdownlint\n\n \"config\": {\n // Headings\n \"MD003\": { \"style\": \"atx\" }, // ATX-style headings (# Heading)\n \"MD022\": { \"lines_above\": 1, \"lines_below\": 1 }, // Blank lines around headings\n \"MD024\": { \"siblings_only\": true }, // Allow duplicate headings in different sections\n \"MD041\": false, // First line doesn't need to be h1 (frontmatter, etc.)\n\n // Line length - disabled for prose flexibility\n \"MD013\": false,\n\n // Lists\n \"MD004\": { \"style\": \"dash\" }, // Unordered list style: dash (-)\n \"MD007\": { \"indent\": 2 }, // List indentation: 2 spaces\n \"MD032\": true, // Blank lines around lists\n\n // Code blocks\n \"MD040\": true, // Fenced code blocks should have a language\n \"MD046\": { \"style\": \"fenced\" }, // Code block style: fenced (```)\n \"MD048\": { \"style\": \"backtick\" }, // Code fence style: backticks\n\n // Links\n \"MD034\": true, // No bare URLs (use <url> or [text](url))\n\n // Whitespace\n \"MD009\": { \"br_spaces\": 2 }, // Allow 2 trailing spaces for <br>\n \"MD010\": { \"spaces_per_tab\": 2 }, // Tabs to spaces\n \"MD012\": { \"maximum\": 1 }, // Max 1 consecutive blank line\n \"MD047\": true, // Files should end with newline\n\n // HTML - allow for GitHub-specific elements\n \"MD033\": {\n \"allowed_elements\": [\n \"details\",\n \"summary\",\n \"kbd\",\n \"br\",\n \"sup\",\n \"sub\",\n \"img\",\n \"picture\",\n \"source\",\n \"a\",\n ],\n },\n\n // Emphasis\n \"MD049\": { \"style\": \"asterisk\" }, // Emphasis style: *italic*\n \"MD050\": { \"style\": \"asterisk\" }, // Strong style: **bold**\n },\n\n // Ignore patterns\n \"ignores\": [\n \"node_modules/**\",\n \"**/node_modules/**\",\n \"dist/**\",\n \"**/dist/**\",\n \".turbo/**\",\n \"**/.turbo/**\",\n \"CHANGELOG.md\",\n \"**/CHANGELOG.md\",\n ],\n}\n"
54
61
  }
55
62
  ]
56
63
  },
@@ -67,10 +74,10 @@
67
74
  },
68
75
  "scaffolding": {
69
76
  "name": "scaffolding",
70
- "description": "Full starter kit: Claude settings, Biome, Lefthook, markdownlint, and bootstrap script",
77
+ "description": "Full starter kit: Claude settings, oxlint/oxfmt, Lefthook, markdownlint, and bootstrap script",
71
78
  "extends": [
72
79
  "claude",
73
- "biome",
80
+ "linter",
74
81
  "lefthook",
75
82
  "markdownlint",
76
83
  "bootstrap"
@@ -1,7 +1,7 @@
1
1
  {
2
- "$schema": "https://json.schemastore.org/tsconfig",
3
- "extends": "./tsconfig.preset.json",
4
- "compilerOptions": {
5
- "types": ["@types/bun"]
6
- }
2
+ "$schema": "https://json.schemastore.org/tsconfig",
3
+ "extends": "./tsconfig.preset.json",
4
+ "compilerOptions": {
5
+ "types": ["@types/bun"]
6
+ }
7
7
  }
@@ -1,40 +1,40 @@
1
1
  {
2
- "$schema": "https://json.schemastore.org/tsconfig",
3
- "compilerOptions": {
4
- "target": "ESNext",
5
- "module": "ESNext",
6
- "moduleResolution": "bundler",
7
- "lib": ["ESNext"],
2
+ "$schema": "https://json.schemastore.org/tsconfig",
3
+ "compilerOptions": {
4
+ "target": "ESNext",
5
+ "module": "ESNext",
6
+ "moduleResolution": "bundler",
7
+ "lib": ["ESNext"],
8
8
 
9
- "strict": true,
10
- "noImplicitAny": true,
11
- "strictNullChecks": true,
12
- "strictFunctionTypes": true,
13
- "strictBindCallApply": true,
14
- "strictPropertyInitialization": true,
15
- "noImplicitThis": true,
16
- "useUnknownInCatchVariables": true,
17
- "alwaysStrict": true,
9
+ "strict": true,
10
+ "noImplicitAny": true,
11
+ "strictNullChecks": true,
12
+ "strictFunctionTypes": true,
13
+ "strictBindCallApply": true,
14
+ "strictPropertyInitialization": true,
15
+ "noImplicitThis": true,
16
+ "useUnknownInCatchVariables": true,
17
+ "alwaysStrict": true,
18
18
 
19
- "noUncheckedIndexedAccess": true,
20
- "noImplicitReturns": true,
21
- "noFallthroughCasesInSwitch": true,
22
- "noUnusedLocals": true,
23
- "noUnusedParameters": true,
24
- "exactOptionalPropertyTypes": true,
25
- "noPropertyAccessFromIndexSignature": true,
19
+ "noUncheckedIndexedAccess": true,
20
+ "noImplicitReturns": true,
21
+ "noFallthroughCasesInSwitch": true,
22
+ "noUnusedLocals": true,
23
+ "noUnusedParameters": true,
24
+ "exactOptionalPropertyTypes": true,
25
+ "noPropertyAccessFromIndexSignature": true,
26
26
 
27
- "declaration": true,
28
- "declarationMap": true,
29
- "sourceMap": true,
27
+ "declaration": true,
28
+ "declarationMap": true,
29
+ "sourceMap": true,
30
30
 
31
- "esModuleInterop": true,
32
- "forceConsistentCasingInFileNames": true,
33
- "isolatedModules": true,
34
- "verbatimModuleSyntax": true,
35
- "skipLibCheck": true,
31
+ "esModuleInterop": true,
32
+ "forceConsistentCasingInFileNames": true,
33
+ "isolatedModules": true,
34
+ "verbatimModuleSyntax": true,
35
+ "skipLibCheck": true,
36
36
 
37
- "resolveJsonModule": true,
38
- "allowSyntheticDefaultImports": true
39
- }
37
+ "resolveJsonModule": true,
38
+ "allowSyntheticDefaultImports": true
39
+ }
40
40
  }
package/biome.json DELETED
@@ -1,81 +0,0 @@
1
- {
2
- "$schema": "https://biomejs.dev/schemas/2.4.4/schema.json",
3
- "root": false,
4
- "javascript": {
5
- "globals": ["Bun"]
6
- },
7
- "linter": {
8
- "rules": {
9
- "complexity": {
10
- "useLiteralKeys": "off",
11
- "noVoid": "off",
12
- "noExcessiveCognitiveComplexity": "off"
13
- },
14
- "performance": {
15
- "useTopLevelRegex": "off"
16
- },
17
- "style": {
18
- "useBlockStatements": "off"
19
- },
20
- "suspicious": {
21
- "noConsole": "error"
22
- }
23
- }
24
- },
25
- "vcs": {
26
- "enabled": true,
27
- "clientKind": "git",
28
- "useIgnoreFile": true
29
- },
30
- "files": {
31
- "ignoreUnknown": true,
32
- "includes": [
33
- "**",
34
- "!**/node_modules",
35
- "!**/dist",
36
- "!**/.turbo",
37
- "!**/*.gen.ts",
38
- "!registry/registry.json"
39
- ]
40
- },
41
- "overrides": [
42
- {
43
- "includes": [
44
- "packages/*/src/index.ts",
45
- "apps/*/src/index.ts",
46
- "**/index.ts"
47
- ],
48
- "linter": {
49
- "rules": {
50
- "performance": {
51
- "noBarrelFile": "off"
52
- }
53
- }
54
- }
55
- },
56
- {
57
- "includes": ["**/*.test.ts", "**/__tests__/**/*"],
58
- "linter": {
59
- "rules": {
60
- "suspicious": {
61
- "useAwait": "off",
62
- "noConsole": "off"
63
- },
64
- "performance": {
65
- "noDelete": "off"
66
- }
67
- }
68
- }
69
- },
70
- {
71
- "includes": ["apps/**/*.ts", "scripts/**/*.ts", "**/scripts/**/*.ts"],
72
- "linter": {
73
- "rules": {
74
- "suspicious": {
75
- "noConsole": "off"
76
- }
77
- }
78
- }
79
- }
80
- ]
81
- }
@@ -1,4 +0,0 @@
1
- import { createRequire } from "node:module";
2
- var __require = /* @__PURE__ */ createRequire(import.meta.url);
3
-
4
- export { __require };