@shivaedev/quality 0.29.0 → 0.30.0

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 (38) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/README.md +5 -5
  3. package/biome/declarations.json +1 -1
  4. package/biome/preset.json +1 -1
  5. package/dist/biome/exceptionConfig.d.ts.map +1 -1
  6. package/dist/biome/exceptionConfig.js +2 -1
  7. package/dist/biome/exceptionConfig.js.map +1 -1
  8. package/dist/biome/report.d.ts +1 -0
  9. package/dist/biome/report.d.ts.map +1 -1
  10. package/dist/biome/report.js +12 -4
  11. package/dist/biome/report.js.map +1 -1
  12. package/dist/domEnvironment.config.js +1 -1
  13. package/dist/domEnvironment.config.js.map +1 -1
  14. package/dist/rules/biome.d.ts +1 -1
  15. package/dist/rules/biome.d.ts.map +1 -1
  16. package/dist/rules/biome.js +2 -3
  17. package/dist/rules/biome.js.map +1 -1
  18. package/dist/rules/builtIn.d.ts +1 -1
  19. package/dist/rules/builtIn.d.ts.map +1 -1
  20. package/dist/rules/builtIn.js +2 -0
  21. package/dist/rules/builtIn.js.map +1 -1
  22. package/dist/rules/manifestsExportsShape.d.ts +2 -0
  23. package/dist/rules/manifestsExportsShape.d.ts.map +1 -0
  24. package/dist/rules/manifestsExportsShape.js +65 -0
  25. package/dist/rules/manifestsExportsShape.js.map +1 -0
  26. package/dist/rules/stories/origins.js +2 -2
  27. package/dist/rules/stories/origins.js.map +1 -1
  28. package/dist/rules/stories/specs.js +1 -1
  29. package/dist/rules/stories/specs.js.map +1 -1
  30. package/package.json +2 -2
  31. package/src/biome/exceptionConfig.ts +2 -1
  32. package/src/biome/report.ts +15 -4
  33. package/src/domEnvironment.config.ts +1 -1
  34. package/src/rules/biome.ts +2 -4
  35. package/src/rules/builtIn.ts +2 -0
  36. package/src/rules/manifestsExportsShape.ts +79 -0
  37. package/src/rules/stories/origins.ts +2 -2
  38. package/src/rules/stories/specs.ts +1 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,24 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.30.0 - 2026-10-19
4
+
5
+ ### Added
6
+
7
+ - Quality's `manifests/exports-shape` rule checks exports at the package root and in workspace members by default. Modules use one file-preserving TypeScript wildcard with matching source, types and runtime targets; root entries, exact non-code assets, package metadata and null blocks are allowed.
8
+
9
+ ### Breaking
10
+
11
+ - Quality's Biome preset moves from `@shivaedev/quality/biome` to `@shivaedev/quality/biome/preset.json`. Change the `extends` entry in your Biome config to the new path; the old alias is removed. TypeScript preset paths are unchanged.
12
+ - `@shivaedev/effect-pg-boss`, `@shivaedev/effect-test-sql`, `@shivaedev/local-postgres` and `@shivaedev/test-story` expose server modules at their file paths. Add `/server/` after the package name in imports, for example `@shivaedev/test-story/server/storyKit.ts`. The shortened paths are removed; internal server modules remain blocked.
13
+ - Work Board moves `@shivaedev/work-board/client/client.ts` to `@shivaedev/work-board/browserClient.ts`; change browser-client imports to that file path. `@shivaedev/work-board/client/document/View.ts` is removed: consume document queries with your own renderer, or use the bundled Board browser UI. The client bundle stays private and the old export overrides are removed.
14
+
15
+ ## 0.29.1 - 2026-10-19
16
+
17
+ ### Fixed
18
+
19
+ - Lint, fix and the pre-commit hook run Biome over every file of a linked worktree inside a `.worktrees` folder. The preset and the generated exception config exclude only the `.worktrees` folder at the root, because Biome also matched `!**/.worktrees` against the folders above the root and checked no file there.
20
+ - A Biome run that exits with a failure but reports no error finding, such as one whose config leaves no file to check, fails lint and fix with Biome's message instead of passing.
21
+
3
22
  ## 0.29.0 - 2026-10-19
4
23
 
5
24
  ### Breaking
package/README.md CHANGED
@@ -37,7 +37,7 @@ Create a root `biome.json`:
37
37
 
38
38
  ```json
39
39
  {
40
- "extends": ["@shivaedev/quality/biome"]
40
+ "extends": ["@shivaedev/quality/biome/preset.json"]
41
41
  }
42
42
  ```
43
43
 
@@ -130,7 +130,7 @@ Write setup in the domain kit under `test-support/` and keep each test specific
130
130
 
131
131
  Quality's `tests/story-specs` rule reports a test file that declares tests without a kit's `it`, including plain Vitest `it` and `test` declarations mixed with stories. Typecheck tests are exempt, as are test-story itself and its transitive workspace dependencies, including development, optional and peer dependencies: requiring those packages to depend on test-story would create a cycle. Pure-function tests are included: the baseline records existing files, and that debt should only go down.
132
132
 
133
- Every package tests its real engine through its own story kit, so setup and actions share the package's domain vocabulary. To repair a finding, build the kit with `storyKit` from `@shivaedev/test-story/storyKit.ts` in `src/test-support`, import it in the spec and replace plain registrations with `kit.it(name, traits, body)`. The rule follows imports, aliases and conditional registrars back to the kit; it checks declarations, while review and runtime tests establish whether the kit exercises the real engine.
133
+ Every package tests its real engine through its own story kit, so setup and actions share the package's domain vocabulary. To repair a finding, build the kit with `storyKit` from `@shivaedev/test-story/server/storyKit.ts` in `src/test-support`, import it in the spec and replace plain registrations with `kit.it(name, traits, body)`. The rule follows imports, aliases and conditional registrars back to the kit; it checks declarations, while review and runtime tests establish whether the kit exercises the real engine.
134
134
 
135
135
  Quality's `tests/story-setup` rule reports top-level test functions named with the words `seed`, `make`, `build` or `setup`, and fixture-writing calls imported from Node's `fs` or `fs/promises`. It leaves source and `test-support/` files alone. This is a check for those syntax patterns; a passing test file still needs review of what it tests.
136
136
 
@@ -190,8 +190,8 @@ Keep the default error level. The command replaces that rule's entries and leave
190
190
  - **Imports:** cycles, unresolvable imports, workspace imports missing from the manifest, relative imports that leave their folder, production imports of test code, runtime folders and fences, as described above.
191
191
  - **Names and files:** the Biome preset's naming rules and plugins, and the `files/*` rules, which name a file after its main export with its folders as the prefix. No naming rule renames anything; the author picks the name. A name an outside system owns, such as a query parameter or an environment variable, is written as a quoted key, which the naming rules skip. A `Schema.Struct` field stays camelCase even when quoted and maps to the outside name with `Schema.encodeKeys`. Biome's naming messages print only a pattern: spell acronyms as words (`HttpClient`, `userId`, `parseUrl`) rather than turning off `strictCase` as its hint suggests, give a type no `I` prefix, and name a type parameter `T`, `T` plus a PascalCase name (`TItem`), or Effect's `A`, `E` and `R`. No rule checks these, so review does: a boolean reads as a question (`isOpen`, `canRetry`) unless the DOM or React names it (`open`, `disabled`); a schema shares its name with its type (`type Item = typeof Item.Type`); an unused parameter is removed rather than renamed with the `_` prefix TypeScript accepts. The naming rules take repository facts: `toolOwned` lists `.gitignore` patterns whose names a tool fixes, and a configured list extends the rule's defaults, so list only repository-specific additions; `content` lists snake_case content folders and files; `tests/follow` and `tests/colocated` take `suites` for test folders with their own layout, such as a Playwright suite.
192
192
  - **Tests:** `tests/follow` and `tests/colocated` keep a test beside the code it covers, named `<file>[.<environment>].test.ts` or `<behaviour>[.<environment>].spec.ts`, and the story rules above keep setup in the kit.
193
- - **Manifests:** `manifests/sorted` keeps every `package.json` in sort-package-json order, and `manifests/source-first` puts the `source` condition first in `exports` and `imports`.
194
- - **Biome:** the `biome` rule reports Biome's error findings as `biome/<category>`. The preset's plugins ban ambient time, randomness, `console` and `process.env` in favour of Effect's services.
193
+ - **Manifests:** `manifests/sorted` keeps every `package.json` in sort-package-json order, and `manifests/source-first` puts the `source` condition first in `exports` and `imports`. `manifests/exports-shape` checks the package root and workspace members with exports. They use one file-preserving TypeScript wildcard: for example, `./*.ts` maps to `./src/*.ts`, `./dist/*.d.ts` and `./dist/*.js` under `source`, `types` and `default`. A subtree pattern such as `./server/*.ts` keeps that same subtree in its targets. An optional root entry, exact-path non-code assets such as JSON presets, `./package.json` and `null` blocks are allowed. Import each module at its path under `src/`; named aliases, flattened paths, per-file module lists and additional non-null wildcards fail.
194
+ - **Biome:** the `biome` rule reports Biome's error findings as `biome/<category>`. A Biome run that fails without an error finding, such as one whose config leaves no file to check, fails lint and fix with Biome's message. The preset leaves out the `.worktrees` folder at the root, so a checkout does not lint its linked worktrees, while a worktree inside it lints all of its own files. The preset's plugins ban ambient time, randomness, `console` and `process.env` in favour of Effect's services.
195
195
 
196
196
  ### API
197
197
 
@@ -271,7 +271,7 @@ pnpm add --save-dev @shivaedev/quality @effect/platform-node@4.0.4 @effect/platf
271
271
 
272
272
  Node 24 or later is required. The CLI loads the TypeScript config through Node's native import; use erasable syntax and `.ts` extensions for relative TypeScript imports.
273
273
 
274
- The package includes `@shivaedev/quality/biome`, `@shivaedev/quality/tsconfig/base.json` for type-checking with `noEmit`, and `@shivaedev/quality/tsconfig/package.json` for package builds, which adds declarations, maps and `rewriteRelativeImportExtensions` so relative `.ts` imports are emitted as `.js`. Read the preset files for their settings. The preset's plugins load from `./node_modules/@shivaedev/quality/biome/plugins`, so install the package at the repository root. Biome sorts a specifier that starts with `#`, `@/`, `~`, `$` or `%` as an alias; a tsconfig path such as `@app/*` sorts with the packages and Biome's `noUndeclaredDependencies` takes it for one, so name aliases in a form Biome recognizes.
274
+ The package includes `@shivaedev/quality/biome/preset.json`, `@shivaedev/quality/tsconfig/base.json` for type-checking with `noEmit`, and `@shivaedev/quality/tsconfig/package.json` for package builds, which adds declarations, maps and `rewriteRelativeImportExtensions` so relative `.ts` imports are emitted as `.js`. Read the preset files for their settings. The preset's plugins load from `./node_modules/@shivaedev/quality/biome/preset.json/plugins`, so install the package at the repository root. Biome sorts a specifier that starts with `#`, `@/`, `~`, `$` or `%` as an alias; a tsconfig path such as `@app/*` sorts with the packages and Biome's `noUndeclaredDependencies` takes it for one, so name aliases in a form Biome recognizes.
275
275
 
276
276
  The TypeScript base leaves `types`, `jsx`, `paths`, `include` and output directories to each project. A project that needs more built-ins, such as the DOM, sets `lib` itself and keeps `ESNext` in it. A package that type-checks its tests with one config and builds `src` with another extends both, the package preset last:
277
277
 
@@ -1,6 +1,6 @@
1
1
  [
2
2
  {
3
- "includes": ["**", "!**/.worktrees"],
3
+ "includes": ["**", "!.worktrees"],
4
4
  "reason": "Worktrees are independent checkouts checked from their own roots; walking them from the parent repeats findings and fixes.",
5
5
  "rule": "files/includes"
6
6
  },
package/biome/preset.json CHANGED
@@ -39,7 +39,7 @@
39
39
  }
40
40
  },
41
41
  "files": {
42
- "includes": ["**", "!**/.worktrees"]
42
+ "includes": ["**", "!.worktrees"]
43
43
  },
44
44
  "formatter": {
45
45
  "attributePosition": "auto",
@@ -1 +1 @@
1
- {"version":3,"file":"exceptionConfig.d.ts","sourceRoot":"","sources":["../../src/biome/exceptionConfig.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AASvE,wBAAgB,eAAe,CAAC,YAAY,EAAE,SAAS,oBAAoB,EAAE,GAAG;IAC/E,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC,QAAQ,CAAC,SAAS,EAAE,SAAS,OAAO,EAAE,CAAC;CACvC,CAQA;AAED,wBAAsB,mBAAmB,CAAC,MAAM,EAC/C,IAAI,EAAE,MAAM,EACZ,YAAY,EAAE,SAAS,oBAAoB,EAAE,EAC7C,GAAG,EAAE,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,KAAK,OAAO,CAAC,MAAM,CAAC,GAC/C,OAAO,CAAC,MAAM,CAAC,CAsCjB"}
1
+ {"version":3,"file":"exceptionConfig.d.ts","sourceRoot":"","sources":["../../src/biome/exceptionConfig.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AASvE,wBAAgB,eAAe,CAAC,YAAY,EAAE,SAAS,oBAAoB,EAAE,GAAG;IAC/E,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC,QAAQ,CAAC,SAAS,EAAE,SAAS,OAAO,EAAE,CAAC;CACvC,CAQA;AAED,wBAAsB,mBAAmB,CAAC,MAAM,EAC/C,IAAI,EAAE,MAAM,EACZ,YAAY,EAAE,SAAS,oBAAoB,EAAE,EAC7C,GAAG,EAAE,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,KAAK,OAAO,CAAC,MAAM,CAAC,GAC/C,OAAO,CAAC,MAAM,CAAC,CAuCjB"}
@@ -38,9 +38,10 @@ export async function withExceptionConfig(root, declarations, run) {
38
38
  }
39
39
  const previousIncludes = Array.isArray(files.includes) ? files.includes : ["**"];
40
40
  const previousOverrides = Array.isArray(own.overrides) ? own.overrides : [];
41
+ // Biome also matches a wildcard-led glob such as `!**/.worktrees` against the folders above the root, which ignores a whole linked worktree.
41
42
  const generated = {
42
43
  ...own,
43
- files: { ...files, includes: [...previousIncludes, ...includes.filter((pattern) => pattern !== "**"), "!**/.worktrees", `!${name}`] },
44
+ files: { ...files, includes: [...previousIncludes, ...includes.filter((pattern) => pattern !== "**"), "!.worktrees", `!${name}`] },
44
45
  overrides: [...previousOverrides, ...overrides],
45
46
  };
46
47
  try {
@@ -1 +1 @@
1
- {"version":3,"file":"exceptionConfig.js","sourceRoot":"","sources":["../../src/biome/exceptionConfig.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"exceptionConfig.js","sourceRoot":"","sources":["../../src/biome/exceptionConfig.ts"],"names":[],"mappings":"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"}
@@ -39,6 +39,7 @@ declare const Report: Schema.Struct<{
39
39
  }>;
40
40
  }>;
41
41
  export type Report = typeof Report.Type;
42
+ export declare const FAILING: ReadonlySet<string>;
42
43
  export declare function biomeReport(root: string, args: readonly string[], exceptions?: readonly ExceptionDeclaration[]): Promise<Report>;
43
44
  export {};
44
45
  //# sourceMappingURL=report.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"report.d.ts","sourceRoot":"","sources":["../../src/biome/report.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAOvE,QAAA,MAAM,UAAU;;;;;;;;;;;;;;;EAKd,CAAC;AAEH,MAAM,MAAM,UAAU,GAAG,OAAO,UAAU,CAAC,IAAI,CAAC;AAEhD,QAAA,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;EAGV,CAAC;AAEH,MAAM,MAAM,MAAM,GAAG,OAAO,MAAM,CAAC,IAAI,CAAC;AAuBxC,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,MAAM,EAAE,EAAE,UAAU,GAAE,SAAS,oBAAoB,EAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAY1I"}
1
+ {"version":3,"file":"report.d.ts","sourceRoot":"","sources":["../../src/biome/report.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAOvE,QAAA,MAAM,UAAU;;;;;;;;;;;;;;;EAKd,CAAC;AAEH,MAAM,MAAM,UAAU,GAAG,OAAO,UAAU,CAAC,IAAI,CAAC;AAEhD,QAAA,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;EAGV,CAAC;AAEH,MAAM,MAAM,MAAM,GAAG,OAAO,MAAM,CAAC,IAAI,CAAC;AAIxC,eAAO,MAAM,OAAO,EAAE,WAAW,CAAC,MAAM,CAA+B,CAAC;AA6BxE,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,MAAM,EAAE,EAAE,UAAU,GAAE,SAAS,oBAAoB,EAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAa1I"}
@@ -15,15 +15,23 @@ const Report = Schema.Struct({
15
15
  summary: Schema.Struct({ changed: Schema.Int }),
16
16
  });
17
17
  const decodeReport = Schema.decodeUnknownOption(Schema.fromJsonString(Report));
18
- function failure(args, run) {
19
- return new Error(`biome ${args.join(" ")} exited ${run.code} without a report:\n${[run.stdout, run.stderr].join("\n").trim()}`);
18
+ export const FAILING = new Set(["error", "fatal"]);
19
+ function failure(args, run, missing, output) {
20
+ return new Error(`biome ${args.join(" ")} exited ${run.code} without ${missing}:\n${output.trim()}`);
21
+ }
22
+ // Biome exits with an error but prints an empty report when no file was processed, so only a failing diagnostic explains a failed run.
23
+ function unexplained(run, report) {
24
+ return run.code !== 0 && !report.diagnostics.some((diagnostic) => FAILING.has(diagnostic.severity));
20
25
  }
21
26
  async function reportFor(root, args, paths, exceptions) {
22
27
  const command = [...args, "--reporter=json", "--max-diagnostics=none", ...paths];
23
28
  const run = await runBiome(root, command, exceptions);
24
29
  const report = decodeReport(run.stdout.trim());
25
30
  if (report._tag === "None") {
26
- throw failure(command, run);
31
+ throw failure(command, run, "a report", [run.stdout, run.stderr].join("\n"));
32
+ }
33
+ if (unexplained(run, report.value)) {
34
+ throw failure(command, run, "a failing diagnostic", run.stderr);
27
35
  }
28
36
  return report.value;
29
37
  }
@@ -32,7 +40,7 @@ export async function biomeReport(root, args, exceptions = []) {
32
40
  const paths = tracked
33
41
  .map((path) => relative(root, path))
34
42
  .filter((path) => !path.split(sep).some((part) => part === ".git" || part === ".worktrees" || part === "node_modules"));
35
- const extra = paths.length === 0 ? undefined : await reportFor(root, [...args, "--vcs-enabled=false"], paths, exceptions);
43
+ const extra = paths.length === 0 ? undefined : await reportFor(root, [...args, "--vcs-enabled=false", "--no-errors-on-unmatched"], paths, exceptions);
36
44
  const diagnostics = [...report.diagnostics, ...(extra?.diagnostics ?? [])];
37
45
  const unique = [...new Map(diagnostics.map((diagnostic) => [JSON.stringify(diagnostic), diagnostic])).values()];
38
46
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"report.js","sourceRoot":"","sources":["../../src/biome/report.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"report.js","sourceRoot":"","sources":["../../src/biome/report.ts"],"names":[],"mappings":"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"}
@@ -12,6 +12,6 @@ import process from "node:process";
12
12
  import { pathToFileURL } from "node:url";
13
13
  // Resolve the DOM plugin from the consumer; depending on test-story would cycle through its Quality tooling.
14
14
  const consumer = createRequire(join(process.cwd(), "package.json"));
15
- const { default: environment } = await import(__rewriteRelativeImportExtension(pathToFileURL(consumer.resolve("@shivaedev/test-story/domEnvironment.config.ts")).href));
15
+ const { default: environment } = await import(__rewriteRelativeImportExtension(pathToFileURL(consumer.resolve("@shivaedev/test-story/server/domEnvironment.config.ts")).href));
16
16
  export default environment;
17
17
  //# sourceMappingURL=domEnvironment.config.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"domEnvironment.config.js","sourceRoot":"","sources":["../src/domEnvironment.config.ts"],"names":[],"mappings":";;;;;;;;AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,OAAO,MAAM,cAAc,CAAC;AACnC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAGzC,6GAA6G;AAC7G,MAAM,QAAQ,GAAG,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,cAAc,CAAC,CAAC,CAAC;AACpE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,GAAsC,MAAM,MAAM,kCAC/E,aAAa,CAAC,QAAQ,CAAC,OAAO,CAAC,gDAAgD,CAAC,CAAC,CAAC,IAAI,EACtF,CAAC;AAEF,eAAe,WAAW,CAAC"}
1
+ {"version":3,"file":"domEnvironment.config.js","sourceRoot":"","sources":["../src/domEnvironment.config.ts"],"names":[],"mappings":";;;;;;;;AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,OAAO,MAAM,cAAc,CAAC;AACnC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAGzC,6GAA6G;AAC7G,MAAM,QAAQ,GAAG,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,cAAc,CAAC,CAAC,CAAC;AACpE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,GAAsC,MAAM,MAAM,kCAC/E,aAAa,CAAC,QAAQ,CAAC,OAAO,CAAC,uDAAuD,CAAC,CAAC,CAAC,IAAI,EAC7F,CAAC;AAEF,eAAe,WAAW,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import { type Rule, type RuleInputs } from "#rule.ts";
2
- export declare const PRESET = "@shivaedev/quality/biome";
2
+ export declare const PRESET = "@shivaedev/quality/biome/preset.json";
3
3
  interface RootConfig {
4
4
  readonly extendsPreset: boolean;
5
5
  readonly path: string;
@@ -1 +1 @@
1
- {"version":3,"file":"biome.d.ts","sourceRoot":"","sources":["../../src/rules/biome.ts"],"names":[],"mappings":"AACA,OAAO,EAA4B,KAAK,IAAI,EAAE,KAAK,UAAU,EAAE,MAAM,UAAU,CAAC;AAGhF,eAAO,MAAM,MAAM,6BAA6B,CAAC;AAsBjD,UAAU,UAAU;IACnB,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;IAChC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACtB;AAED,wBAAsB,UAAU,CAAC,QAAQ,EAAE,UAAU,CAAC,UAAU,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC,CAMtF;AAkBD,eAAO,MAAM,KAAK,EAAE,IAAI,CAAC,OAAO,EAAE,SAAS,CAA+B,CAAC"}
1
+ {"version":3,"file":"biome.d.ts","sourceRoot":"","sources":["../../src/rules/biome.ts"],"names":[],"mappings":"AACA,OAAO,EAA4B,KAAK,IAAI,EAAE,KAAK,UAAU,EAAE,MAAM,UAAU,CAAC;AAGhF,eAAO,MAAM,MAAM,yCAAyC,CAAC;AAoB7D,UAAU,UAAU;IACnB,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;IAChC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACtB;AAED,wBAAsB,UAAU,CAAC,QAAQ,EAAE,UAAU,CAAC,UAAU,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC,CAMtF;AAkBD,eAAO,MAAM,KAAK,EAAE,IAAI,CAAC,OAAO,EAAE,SAAS,CAA+B,CAAC"}
@@ -1,9 +1,8 @@
1
- import { biomeReport } from "#biome/report.ts";
1
+ import { biomeReport, FAILING } from "#biome/report.ts";
2
2
  import { defineRule } from "#rule.ts";
3
3
  import { itemsOf, member, parseJsonc, textOf } from "#rules/suppressions/biome/json.ts";
4
- export const PRESET = "@shivaedev/quality/biome";
4
+ export const PRESET = "@shivaedev/quality/biome/preset.json";
5
5
  const ROOT_CONFIGS = ["biome.json", "biome.jsonc"];
6
- const FAILING = new Set(["error", "fatal"]);
7
6
  function messageOf(diagnostic) {
8
7
  return diagnostic.category === "format" && diagnostic.message.startsWith("Formatter would have printed")
9
8
  ? "Is not formatted. Run `quality fix`."
@@ -1 +1 @@
1
- {"version":3,"file":"biome.js","sourceRoot":"","sources":["../../src/rules/biome.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"biome.js","sourceRoot":"","sources":["../../src/rules/biome.ts"],"names":[],"mappings":"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"}
@@ -16,7 +16,7 @@ export declare const builtInRules: readonly [import("../rule.ts").Rule<"structur
16
16
  readonly fences?: readonly import("../imports/fences/model.ts").Fence[];
17
17
  }>, import("../rule.ts").Rule<"imports/runtime", undefined>, import("../rule.ts").Rule<"imports/resolvable", {
18
18
  readonly generated?: readonly string[];
19
- }>, import("../rule.ts").Rule<"imports/manifest", undefined>, import("../rule.ts").Rule<"imports/aliased", undefined>, import("../rule.ts").Rule<"imports/no-test-code", undefined>, import("../rule.ts").Rule<"manifests/sorted", undefined>, import("../rule.ts").Rule<"manifests/source-first", undefined>, import("../rule.ts").Rule<"files/named-after-export", {
19
+ }>, import("../rule.ts").Rule<"imports/manifest", undefined>, import("../rule.ts").Rule<"imports/aliased", undefined>, import("../rule.ts").Rule<"imports/no-test-code", undefined>, import("../rule.ts").Rule<"manifests/sorted", undefined>, import("../rule.ts").Rule<"manifests/source-first", undefined>, import("../rule.ts").Rule<"manifests/exports-shape", undefined>, import("../rule.ts").Rule<"files/named-after-export", {
20
20
  readonly toolOwned?: readonly string[];
21
21
  }>, import("../rule.ts").Rule<"files/folder-names", {
22
22
  readonly content?: readonly string[];
@@ -1 +1 @@
1
- {"version":3,"file":"builtIn.d.ts","sourceRoot":"","sources":["../../src/rules/builtIn.ts"],"names":[],"mappings":"AA0CA,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+HA0Cf,CAAC"}
1
+ {"version":3,"file":"builtIn.d.ts","sourceRoot":"","sources":["../../src/rules/builtIn.ts"],"names":[],"mappings":"AA2CA,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+HA2Cf,CAAC"}
@@ -34,6 +34,7 @@ import { noInline } from "#rules/suppressions/noInline.ts";
34
34
  import { testsColocated } from "#rules/test-names/colocated.ts";
35
35
  import { testsFollow } from "#rules/test-names/follow.ts";
36
36
  import { biome } from "./biome.js";
37
+ import { manifestsExportsShape } from "./manifestsExportsShape.js";
37
38
  import { manifestsSorted } from "./manifestsSorted.js";
38
39
  import { manifestsSourceFirst } from "./manifestsSourceFirst.js";
39
40
  import { maxDepth } from "./maxDepth.js";
@@ -65,6 +66,7 @@ export const builtInRules = [
65
66
  noTestCode,
66
67
  manifestsSorted,
67
68
  manifestsSourceFirst,
69
+ manifestsExportsShape,
68
70
  namedAfterExport,
69
71
  folderNames,
70
72
  distinctCase,
@@ -1 +1 @@
1
- {"version":3,"file":"builtIn.js","sourceRoot":"","sources":["../../src/rules/builtIn.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"builtIn.js","sourceRoot":"","sources":["../../src/rules/builtIn.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare const manifestsExportsShape: import("#rule.ts").Rule<"manifests/exports-shape", undefined>;
2
+ //# sourceMappingURL=manifestsExportsShape.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifestsExportsShape.d.ts","sourceRoot":"","sources":["../../src/rules/manifestsExportsShape.ts"],"names":[],"mappings":"AA2DA,eAAO,MAAM,qBAAqB,+DAmBhC,CAAC"}
@@ -0,0 +1,65 @@
1
+ import { posix } from "node:path";
2
+ import { workspacePackages } from "#imports/workspace.ts";
3
+ import { defineRule } from "#rule.ts";
4
+ const PATTERN = "./*.ts";
5
+ const CODE_EXTENSIONS = new Set([".ts", ".tsx", ".mts", ".cts", ".js", ".jsx", ".mjs", ".cjs"]);
6
+ function isMap(value) {
7
+ return typeof value === "object" && value !== null && !Array.isArray(value);
8
+ }
9
+ function standardPattern(key, value) {
10
+ if (!(key.startsWith("./") && key.endsWith(".ts")) || key.split("*").length !== 2 || !isMap(value)) {
11
+ return false;
12
+ }
13
+ const subpath = key.slice("./".length);
14
+ const stem = subpath.slice(0, -".ts".length);
15
+ const conditions = { default: `./dist/${stem}.js`, source: `./src/${subpath}`, types: `./dist/${stem}.d.ts` };
16
+ return (Object.keys(value).length === Object.keys(conditions).length
17
+ && Object.entries(conditions).every(([condition, target]) => value[condition] === target));
18
+ }
19
+ function exactAsset(key, value) {
20
+ const extension = posix.extname(key);
21
+ return key.startsWith("./") && !key.includes("*") && value === key && extension !== "" && !CODE_EXTENSIONS.has(extension);
22
+ }
23
+ function finding(file, subject, reason) {
24
+ return {
25
+ file,
26
+ message: `${reason} Import the module at its file path through the single "${PATTERN}" wildcard (for example, "./server/better-auth/mount.ts" for "./src/server/better-auth/mount.ts"). Map it to source "./src/*.ts", types "./dist/*.d.ts" and default "./dist/*.js"; remove aliases and per-file module exports. Non-code assets must use their exact file paths.`,
27
+ subject,
28
+ };
29
+ }
30
+ function findingsIn(file, exports) {
31
+ if (exports === undefined) {
32
+ return [];
33
+ }
34
+ if (!isMap(exports)) {
35
+ return [finding(file, "exports", "The exports field must be a subpath map.")];
36
+ }
37
+ const entries = Object.entries(exports);
38
+ const patterns = entries.filter(([key, value]) => key.includes("*") && value !== null);
39
+ const count = patterns.length === 1 ? [] : [finding(file, "exports", `The exports field needs exactly one non-null wildcard; found ${patterns.length}.`)];
40
+ return [
41
+ ...count,
42
+ ...entries.flatMap(([key, value]) => value === null || key === "." || exactAsset(key, value) || standardPattern(key, value)
43
+ ? []
44
+ : [finding(file, key, `Export "${key}" does not preserve the module's file path.`)]),
45
+ ];
46
+ }
47
+ export const manifestsExportsShape = defineRule({
48
+ check: async (inputs) => {
49
+ const packages = await workspacePackages(inputs);
50
+ const files = ["package.json", ...packages.map((owner) => posix.join(owner.directory, "package.json"))];
51
+ const findings = await Promise.all(files.map(async (file) => {
52
+ const text = await inputs.readText(file);
53
+ if (file === "package.json" && text === undefined) {
54
+ return [];
55
+ }
56
+ const manifest = JSON.parse(text ?? "");
57
+ return findingsIn(file, isMap(manifest) ? manifest.exports : undefined);
58
+ }));
59
+ return findings.flat();
60
+ },
61
+ description: "Workspace packages export modules through one file-preserving wildcard, with optional root, exact non-code assets and null blocks.",
62
+ id: "manifests/exports-shape",
63
+ registrable: false,
64
+ });
65
+ //# sourceMappingURL=manifestsExportsShape.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifestsExportsShape.js","sourceRoot":"","sources":["../../src/rules/manifestsExportsShape.ts"],"names":[],"mappings":"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"}
@@ -13,7 +13,7 @@ function moduleOrigin(from) {
13
13
  if (from === "vitest" || from === "@effect/vitest") {
14
14
  return "vitest";
15
15
  }
16
- return from === "@shivaedev/test-story" || from === "@shivaedev/test-story/storyKit.ts" ? "stories" : undefined;
16
+ return from === "@shivaedev/test-story" || from === "@shivaedev/test-story/server/storyKit.ts" ? "stories" : undefined;
17
17
  }
18
18
  function imported(name, from) {
19
19
  const namespace = moduleOrigin(from);
@@ -83,7 +83,7 @@ export function storyOrigins(inputs, graph) {
83
83
  return receiver;
84
84
  }
85
85
  const from = receiver === "vitest" ? "vitest" : undefined;
86
- return imported(name, receiver === "stories" ? "@shivaedev/test-story/storyKit.ts" : from);
86
+ return imported(name, receiver === "stories" ? "@shivaedev/test-story/server/storyKit.ts" : from);
87
87
  }
88
88
  function identifier(node) {
89
89
  if (node.text === "describe" || node.text === "suite") {
@@ -1 +1 @@
1
- {"version":3,"file":"origins.js","sourceRoot":"","sources":["../../../src/rules/stories/origins.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"origins.js","sourceRoot":"","sources":["../../../src/rules/stories/origins.ts"],"names":[],"mappings":"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"}
@@ -69,7 +69,7 @@ export const storySpecs = defineRule({
69
69
  {
70
70
  file: file.path,
71
71
  line: source.getLineAndCharacterOfPosition(plain.getStart(source)).line + 1,
72
- message: "Declares tests without a test-story story kit. Build the package's kit with storyKit from @shivaedev/test-story/storyKit.ts in src/test-support, and declare every test through the kit's it. See https://github.com/ShivaeDev/platform/tree/main/packages/quality#story-tests.",
72
+ message: "Declares tests without a test-story story kit. Build the package's kit with storyKit from @shivaedev/test-story/server/storyKit.ts in src/test-support, and declare every test through the kit's it. See https://github.com/ShivaeDev/platform/tree/main/packages/quality#story-tests.",
73
73
  },
74
74
  ];
75
75
  });
@@ -1 +1 @@
1
- {"version":3,"file":"specs.js","sourceRoot":"","sources":["../../../src/rules/stories/specs.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"specs.js","sourceRoot":"","sources":["../../../src/rules/stories/specs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAExD,SAAS,SAAS,CAAC,IAAmB;IACrC,IAAI,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;QAC3B,OAAO,IAAI,CAAC,IAAI,KAAK,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC;IACnD,CAAC;IACD,IAAI,EAAE,CAAC,0BAA0B,CAAC,IAAI,CAAC,EAAE,CAAC;QACzC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,IAAI,IAAI,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC9D,CAAC;IACD,OAAO,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AAChE,CAAC;AAID,SAAS,QAAQ,CAAC,IAAa,EAAE,MAAgB;IAChD,OAAO,CACN,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC;WACrB,EAAE,CAAC,oBAAoB,CAAC,IAAI,CAAC;WAC7B,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,0BAA0B,CAAC,IAAI,CAAC,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,UAAU,CAAC,CAClG,CAAC;AACH,CAAC;AAED,SAAS,UAAU,CAAC,IAAuB,EAAE,MAAgB;IAC5D,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IAChC,OAAO,CACN,KAAK,KAAK,SAAS;WAChB,CAAC,EAAE,CAAC,mBAAmB,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;WACjE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CACzE,CAAC;AACH,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAa,EAAE,MAAgB;IACxD,KAAK,IAAI,OAAO,GAAG,IAAI,CAAC,MAAM,EAAE,OAAO,KAAK,SAAS,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;QACjF,IAAI,EAAE,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,gBAAgB,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,OAAO,CAAC,EAAE,CAAC;YAC3H,OAAO,KAAK,CAAC;QACd,CAAC;IACF,CAAC;IACD,OAAO,IAAI,CAAC;AACb,CAAC;AAED,SAAS,qBAAqB,CAAC,IAAuB,EAAE,QAAkB;IACzE,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACzC,IAAI,MAAM,KAAK,OAAO,IAAI,MAAM,KAAK,OAAO,EAAE,CAAC;QAC9C,OAAO,KAAK,CAAC;IACd,CAAC;IACD,OAAO,MAAM,KAAK,OAAO,IAAI,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,UAAU,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,IAAI,gBAAgB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC;AAC/H,CAAC;AAED,MAAM,CAAC,MAAM,UAAU,GAAG,UAAU,CAAC;IACpC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;QACvB,MAAM,KAAK,GAAG,MAAM,WAAW,CAAC,MAAM,CAAC,CAAC;QACxC,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;QAChE,MAAM,OAAO,GAAG,YAAY,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QAC5C,OAAO,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;YACtC,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACjC,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;YACnD,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,SAAS,IAAI,EAAE,CAAC,EAAE,CAAC;gBACtG,OAAO,EAAE,CAAC;YACX,CAAC;YACD,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACzC,IAAI,KAAoC,CAAC;YACzC,SAAS,KAAK,CAAC,IAAa;gBAC3B,IAAI,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,qBAAqB,CAAC,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;oBAC9E,KAAK,KAAK,IAAI,CAAC;gBAChB,CAAC;gBACD,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YAC9B,CAAC;YACD,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;gBAC1B,KAAK,CAAC,MAAM,CAAC,CAAC;YACf,CAAC;YACD,IAAI,MAAM,KAAK,SAAS,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBACjD,OAAO,EAAE,CAAC;YACX,CAAC;YACD,OAAO;gBACN;oBACC,IAAI,EAAE,IAAI,CAAC,IAAI;oBACf,IAAI,EAAE,MAAM,CAAC,6BAA6B,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC;oBAC3E,OAAO,EACN,wRAAwR;iBACzR;aACD,CAAC;QACH,CAAC,CAAC,CAAC;IACJ,CAAC;IACD,WAAW,EACV,0IAA0I;IAC3I,EAAE,EAAE,mBAAmB;CACvB,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@shivaedev/quality",
3
- "version": "0.29.0",
3
+ "version": "0.30.0",
4
4
  "description": "Repository quality gate with typed rules, a baseline of existing debt and a registry of reasoned exceptions",
5
5
  "homepage": "https://github.com/ShivaeDev/platform/tree/main/packages/quality#readme",
6
6
  "bugs": {
@@ -28,7 +28,7 @@
28
28
  "types": "./dist/*.d.ts",
29
29
  "default": "./dist/*.js"
30
30
  },
31
- "./biome": "./biome/preset.json",
31
+ "./biome/preset.json": "./biome/preset.json",
32
32
  "./tsconfig/base.json": "./tsconfig/base.json",
33
33
  "./tsconfig/package.json": "./tsconfig/package.json",
34
34
  "./package.json": "./package.json",
@@ -56,9 +56,10 @@ export async function withExceptionConfig<TValue>(
56
56
  }
57
57
  const previousIncludes = Array.isArray(files.includes) ? files.includes : ["**"];
58
58
  const previousOverrides = Array.isArray(own.overrides) ? own.overrides : [];
59
+ // Biome also matches a wildcard-led glob such as `!**/.worktrees` against the folders above the root, which ignores a whole linked worktree.
59
60
  const generated = {
60
61
  ...own,
61
- files: { ...files, includes: [...previousIncludes, ...includes.filter((pattern) => pattern !== "**"), "!**/.worktrees", `!${name}`] },
62
+ files: { ...files, includes: [...previousIncludes, ...includes.filter((pattern) => pattern !== "**"), "!.worktrees", `!${name}`] },
62
63
  overrides: [...previousOverrides, ...overrides],
63
64
  };
64
65
  try {
@@ -25,8 +25,15 @@ export type Report = typeof Report.Type;
25
25
 
26
26
  const decodeReport = Schema.decodeUnknownOption(Schema.fromJsonString(Report));
27
27
 
28
- function failure(args: readonly string[], run: BiomeRun): Error {
29
- return new Error(`biome ${args.join(" ")} exited ${run.code} without a report:\n${[run.stdout, run.stderr].join("\n").trim()}`);
28
+ export const FAILING: ReadonlySet<string> = new Set(["error", "fatal"]);
29
+
30
+ function failure(args: readonly string[], run: BiomeRun, missing: string, output: string): Error {
31
+ return new Error(`biome ${args.join(" ")} exited ${run.code} without ${missing}:\n${output.trim()}`);
32
+ }
33
+
34
+ // Biome exits with an error but prints an empty report when no file was processed, so only a failing diagnostic explains a failed run.
35
+ function unexplained(run: BiomeRun, report: Report): boolean {
36
+ return run.code !== 0 && !report.diagnostics.some((diagnostic) => FAILING.has(diagnostic.severity));
30
37
  }
31
38
 
32
39
  async function reportFor(
@@ -39,7 +46,10 @@ async function reportFor(
39
46
  const run = await runBiome(root, command, exceptions);
40
47
  const report = decodeReport(run.stdout.trim());
41
48
  if (report._tag === "None") {
42
- throw failure(command, run);
49
+ throw failure(command, run, "a report", [run.stdout, run.stderr].join("\n"));
50
+ }
51
+ if (unexplained(run, report.value)) {
52
+ throw failure(command, run, "a failing diagnostic", run.stderr);
43
53
  }
44
54
  return report.value;
45
55
  }
@@ -49,7 +59,8 @@ export async function biomeReport(root: string, args: readonly string[], excepti
49
59
  const paths = tracked
50
60
  .map((path) => relative(root, path))
51
61
  .filter((path) => !path.split(sep).some((part) => part === ".git" || part === ".worktrees" || part === "node_modules"));
52
- const extra = paths.length === 0 ? undefined : await reportFor(root, [...args, "--vcs-enabled=false"], paths, exceptions);
62
+ const extra =
63
+ paths.length === 0 ? undefined : await reportFor(root, [...args, "--vcs-enabled=false", "--no-errors-on-unmatched"], paths, exceptions);
53
64
  const diagnostics = [...report.diagnostics, ...(extra?.diagnostics ?? [])];
54
65
  const unique = [...new Map(diagnostics.map((diagnostic) => [JSON.stringify(diagnostic), diagnostic])).values()];
55
66
  return {
@@ -7,7 +7,7 @@ import type { Environment } from "vitest/runtime";
7
7
  // Resolve the DOM plugin from the consumer; depending on test-story would cycle through its Quality tooling.
8
8
  const consumer = createRequire(join(process.cwd(), "package.json"));
9
9
  const { default: environment }: { readonly default: Environment } = await import(
10
- pathToFileURL(consumer.resolve("@shivaedev/test-story/domEnvironment.config.ts")).href
10
+ pathToFileURL(consumer.resolve("@shivaedev/test-story/server/domEnvironment.config.ts")).href
11
11
  );
12
12
 
13
13
  export default environment;
@@ -1,13 +1,11 @@
1
- import { biomeReport, type Diagnostic } from "#biome/report.ts";
1
+ import { biomeReport, type Diagnostic, FAILING } from "#biome/report.ts";
2
2
  import { defineRule, type Finding, type Rule, type RuleInputs } from "#rule.ts";
3
3
  import { itemsOf, member, parseJsonc, textOf } from "#rules/suppressions/biome/json.ts";
4
4
 
5
- export const PRESET = "@shivaedev/quality/biome";
5
+ export const PRESET = "@shivaedev/quality/biome/preset.json";
6
6
 
7
7
  const ROOT_CONFIGS: readonly string[] = ["biome.json", "biome.jsonc"];
8
8
 
9
- const FAILING: ReadonlySet<string> = new Set(["error", "fatal"]);
10
-
11
9
  function messageOf(diagnostic: Diagnostic): string {
12
10
  return diagnostic.category === "format" && diagnostic.message.startsWith("Formatter would have printed")
13
11
  ? "Is not formatted. Run `quality fix`."
@@ -34,6 +34,7 @@ import { noInline } from "#rules/suppressions/noInline.ts";
34
34
  import { testsColocated } from "#rules/test-names/colocated.ts";
35
35
  import { testsFollow } from "#rules/test-names/follow.ts";
36
36
  import { biome } from "./biome.ts";
37
+ import { manifestsExportsShape } from "./manifestsExportsShape.ts";
37
38
  import { manifestsSorted } from "./manifestsSorted.ts";
38
39
  import { manifestsSourceFirst } from "./manifestsSourceFirst.ts";
39
40
  import { maxDepth } from "./maxDepth.ts";
@@ -66,6 +67,7 @@ export const builtInRules = [
66
67
  noTestCode,
67
68
  manifestsSorted,
68
69
  manifestsSourceFirst,
70
+ manifestsExportsShape,
69
71
  namedAfterExport,
70
72
  folderNames,
71
73
  distinctCase,
@@ -0,0 +1,79 @@
1
+ import { posix } from "node:path";
2
+ import { workspacePackages } from "#imports/workspace.ts";
3
+ import { defineRule, type Finding } from "#rule.ts";
4
+
5
+ const PATTERN = "./*.ts";
6
+
7
+ const CODE_EXTENSIONS = new Set([".ts", ".tsx", ".mts", ".cts", ".js", ".jsx", ".mjs", ".cjs"]);
8
+
9
+ function isMap(value: unknown): value is Readonly<Record<string, unknown>> {
10
+ return typeof value === "object" && value !== null && !Array.isArray(value);
11
+ }
12
+
13
+ function standardPattern(key: string, value: unknown): boolean {
14
+ if (!(key.startsWith("./") && key.endsWith(".ts")) || key.split("*").length !== 2 || !isMap(value)) {
15
+ return false;
16
+ }
17
+ const subpath = key.slice("./".length);
18
+ const stem = subpath.slice(0, -".ts".length);
19
+ const conditions = { default: `./dist/${stem}.js`, source: `./src/${subpath}`, types: `./dist/${stem}.d.ts` };
20
+ return (
21
+ Object.keys(value).length === Object.keys(conditions).length
22
+ && Object.entries(conditions).every(([condition, target]) => value[condition] === target)
23
+ );
24
+ }
25
+
26
+ function exactAsset(key: string, value: unknown): boolean {
27
+ const extension = posix.extname(key);
28
+ return key.startsWith("./") && !key.includes("*") && value === key && extension !== "" && !CODE_EXTENSIONS.has(extension);
29
+ }
30
+
31
+ function finding(file: string, subject: string, reason: string): Finding {
32
+ return {
33
+ file,
34
+ message: `${reason} Import the module at its file path through the single "${PATTERN}" wildcard (for example, "./server/better-auth/mount.ts" for "./src/server/better-auth/mount.ts"). Map it to source "./src/*.ts", types "./dist/*.d.ts" and default "./dist/*.js"; remove aliases and per-file module exports. Non-code assets must use their exact file paths.`,
35
+ subject,
36
+ };
37
+ }
38
+
39
+ function findingsIn(file: string, exports: unknown): readonly Finding[] {
40
+ if (exports === undefined) {
41
+ return [];
42
+ }
43
+ if (!isMap(exports)) {
44
+ return [finding(file, "exports", "The exports field must be a subpath map.")];
45
+ }
46
+ const entries = Object.entries(exports);
47
+ const patterns = entries.filter(([key, value]) => key.includes("*") && value !== null);
48
+ const count =
49
+ patterns.length === 1 ? [] : [finding(file, "exports", `The exports field needs exactly one non-null wildcard; found ${patterns.length}.`)];
50
+ return [
51
+ ...count,
52
+ ...entries.flatMap(([key, value]) =>
53
+ value === null || key === "." || exactAsset(key, value) || standardPattern(key, value)
54
+ ? []
55
+ : [finding(file, key, `Export "${key}" does not preserve the module's file path.`)],
56
+ ),
57
+ ];
58
+ }
59
+
60
+ export const manifestsExportsShape = defineRule({
61
+ check: async (inputs) => {
62
+ const packages = await workspacePackages(inputs);
63
+ const files = ["package.json", ...packages.map((owner) => posix.join(owner.directory, "package.json"))];
64
+ const findings = await Promise.all(
65
+ files.map(async (file) => {
66
+ const text = await inputs.readText(file);
67
+ if (file === "package.json" && text === undefined) {
68
+ return [];
69
+ }
70
+ const manifest: unknown = JSON.parse(text ?? "");
71
+ return findingsIn(file, isMap(manifest) ? manifest.exports : undefined);
72
+ }),
73
+ );
74
+ return findings.flat();
75
+ },
76
+ description: "Workspace packages export modules through one file-preserving wildcard, with optional root, exact non-code assets and null blocks.",
77
+ id: "manifests/exports-shape",
78
+ registrable: false,
79
+ });
@@ -19,7 +19,7 @@ function moduleOrigin(from: string | undefined): Origin {
19
19
  if (from === "vitest" || from === "@effect/vitest") {
20
20
  return "vitest";
21
21
  }
22
- return from === "@shivaedev/test-story" || from === "@shivaedev/test-story/storyKit.ts" ? "stories" : undefined;
22
+ return from === "@shivaedev/test-story" || from === "@shivaedev/test-story/server/storyKit.ts" ? "stories" : undefined;
23
23
  }
24
24
 
25
25
  function imported(name: string, from: string | undefined): Origin {
@@ -97,7 +97,7 @@ export function storyOrigins(inputs: RuleInputs, graph: ImportGraph) {
97
97
  return receiver;
98
98
  }
99
99
  const from = receiver === "vitest" ? "vitest" : undefined;
100
- return imported(name, receiver === "stories" ? "@shivaedev/test-story/storyKit.ts" : from);
100
+ return imported(name, receiver === "stories" ? "@shivaedev/test-story/server/storyKit.ts" : from);
101
101
  }
102
102
 
103
103
  function identifier(node: ts.Identifier): Origin {
@@ -82,7 +82,7 @@ export const storySpecs = defineRule({
82
82
  file: file.path,
83
83
  line: source.getLineAndCharacterOfPosition(plain.getStart(source)).line + 1,
84
84
  message:
85
- "Declares tests without a test-story story kit. Build the package's kit with storyKit from @shivaedev/test-story/storyKit.ts in src/test-support, and declare every test through the kit's it. See https://github.com/ShivaeDev/platform/tree/main/packages/quality#story-tests.",
85
+ "Declares tests without a test-story story kit. Build the package's kit with storyKit from @shivaedev/test-story/server/storyKit.ts in src/test-support, and declare every test through the kit's it. See https://github.com/ShivaeDev/platform/tree/main/packages/quality#story-tests.",
86
86
  },
87
87
  ];
88
88
  });