@shivaedev/quality 0.27.0 → 0.28.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 (129) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/README.md +26 -1
  3. package/dist/biome/run.d.ts.map +1 -1
  4. package/dist/biome/run.js +15 -2
  5. package/dist/biome/run.js.map +1 -1
  6. package/dist/cli/args.d.ts +3 -1
  7. package/dist/cli/args.d.ts.map +1 -1
  8. package/dist/cli/args.js +3 -0
  9. package/dist/cli/args.js.map +1 -1
  10. package/dist/cli/messages.d.ts +1 -1
  11. package/dist/cli/messages.d.ts.map +1 -1
  12. package/dist/cli/messages.js +3 -1
  13. package/dist/cli/messages.js.map +1 -1
  14. package/dist/cli/program.d.ts.map +1 -1
  15. package/dist/cli/program.js +3 -0
  16. package/dist/cli/program.js.map +1 -1
  17. package/dist/hooks/install.d.ts.map +1 -1
  18. package/dist/hooks/install.js +9 -8
  19. package/dist/hooks/install.js.map +1 -1
  20. package/dist/hooks/shim.d.ts.map +1 -1
  21. package/dist/hooks/shim.js +11 -1
  22. package/dist/hooks/shim.js.map +1 -1
  23. package/dist/hooks/status.d.ts +6 -0
  24. package/dist/hooks/status.d.ts.map +1 -0
  25. package/dist/hooks/status.js +45 -0
  26. package/dist/hooks/status.js.map +1 -0
  27. package/dist/hooks/uninstall.d.ts.map +1 -1
  28. package/dist/hooks/uninstall.js +6 -0
  29. package/dist/hooks/uninstall.js.map +1 -1
  30. package/dist/inventory/collect.d.ts.map +1 -1
  31. package/dist/inventory/collect.js +3 -0
  32. package/dist/inventory/collect.js.map +1 -1
  33. package/dist/inventory/shadcnAlias.d.ts +2 -0
  34. package/dist/inventory/shadcnAlias.d.ts.map +1 -0
  35. package/dist/inventory/shadcnAlias.js +73 -0
  36. package/dist/inventory/shadcnAlias.js.map +1 -0
  37. package/dist/inventory/shadcnFolders.d.ts +4 -0
  38. package/dist/inventory/shadcnFolders.d.ts.map +1 -0
  39. package/dist/inventory/shadcnFolders.js +25 -0
  40. package/dist/inventory/shadcnFolders.js.map +1 -0
  41. package/dist/naming/migrationFile.d.ts +4 -0
  42. package/dist/naming/migrationFile.d.ts.map +1 -0
  43. package/dist/naming/migrationFile.js +8 -0
  44. package/dist/naming/migrationFile.js.map +1 -0
  45. package/dist/rules/builtIn.d.ts +7 -1
  46. package/dist/rules/builtIn.d.ts.map +1 -1
  47. package/dist/rules/builtIn.js +16 -0
  48. package/dist/rules/builtIn.js.map +1 -1
  49. package/dist/rules/files/folderNames.d.ts.map +1 -1
  50. package/dist/rules/files/folderNames.js +1 -2
  51. package/dist/rules/files/folderNames.js.map +1 -1
  52. package/dist/rules/files/namedAfterExport.d.ts.map +1 -1
  53. package/dist/rules/files/namedAfterExport.js +4 -1
  54. package/dist/rules/files/namedAfterExport.js.map +1 -1
  55. package/dist/rules/files/otherNames.js +1 -1
  56. package/dist/rules/files/otherNames.js.map +1 -1
  57. package/dist/rules/stories/authSql.d.ts +4 -0
  58. package/dist/rules/stories/authSql.d.ts.map +1 -0
  59. package/dist/rules/stories/authSql.js +102 -0
  60. package/dist/rules/stories/authSql.js.map +1 -0
  61. package/dist/rules/stories/httpStatus.d.ts +4 -0
  62. package/dist/rules/stories/httpStatus.d.ts.map +1 -0
  63. package/dist/rules/stories/httpStatus.js +47 -0
  64. package/dist/rules/stories/httpStatus.js.map +1 -0
  65. package/dist/rules/stories/matchesAny.d.ts +2 -0
  66. package/dist/rules/stories/matchesAny.d.ts.map +1 -0
  67. package/dist/rules/stories/matchesAny.js +5 -0
  68. package/dist/rules/stories/matchesAny.js.map +1 -0
  69. package/dist/rules/stories/namedValues.d.ts +2 -0
  70. package/dist/rules/stories/namedValues.d.ts.map +1 -0
  71. package/dist/rules/stories/namedValues.js +15 -0
  72. package/dist/rules/stories/namedValues.js.map +1 -0
  73. package/dist/rules/stories/noExpect.d.ts +2 -0
  74. package/dist/rules/stories/noExpect.d.ts.map +1 -0
  75. package/dist/rules/stories/noExpect.js +33 -0
  76. package/dist/rules/stories/noExpect.js.map +1 -0
  77. package/dist/rules/stories/noLimitImports.d.ts +2 -0
  78. package/dist/rules/stories/noLimitImports.d.ts.map +1 -0
  79. package/dist/rules/stories/noLimitImports.js +66 -0
  80. package/dist/rules/stories/noLimitImports.js.map +1 -0
  81. package/dist/rules/stories/queueSql.d.ts +2 -0
  82. package/dist/rules/stories/queueSql.d.ts.map +1 -0
  83. package/dist/rules/stories/queueSql.js +15 -0
  84. package/dist/rules/stories/queueSql.js.map +1 -0
  85. package/dist/rules/stories/specHelpers.d.ts +2 -0
  86. package/dist/rules/stories/specHelpers.d.ts.map +1 -0
  87. package/dist/rules/stories/specHelpers.js +9 -0
  88. package/dist/rules/stories/specHelpers.js.map +1 -0
  89. package/dist/rules/stories/sqlText.d.ts +8 -0
  90. package/dist/rules/stories/sqlText.d.ts.map +1 -0
  91. package/dist/rules/stories/sqlText.js +86 -0
  92. package/dist/rules/stories/sqlText.js.map +1 -0
  93. package/dist/rules/stories/supportImports.d.ts +4 -0
  94. package/dist/rules/stories/supportImports.d.ts.map +1 -0
  95. package/dist/rules/stories/supportImports.js +28 -0
  96. package/dist/rules/stories/supportImports.js.map +1 -0
  97. package/dist/rules/stories/syntax.d.ts +11 -0
  98. package/dist/rules/stories/syntax.d.ts.map +1 -0
  99. package/dist/rules/stories/syntax.js +71 -0
  100. package/dist/rules/stories/syntax.js.map +1 -0
  101. package/docs/debt-and-hooks.md +4 -2
  102. package/package.json +5 -2
  103. package/src/biome/run.ts +16 -2
  104. package/src/cli/args.ts +4 -0
  105. package/src/cli/messages.ts +3 -1
  106. package/src/cli/program.ts +3 -0
  107. package/src/hooks/install.ts +11 -12
  108. package/src/hooks/shim.ts +11 -1
  109. package/src/hooks/status.ts +50 -0
  110. package/src/hooks/uninstall.ts +6 -0
  111. package/src/inventory/collect.ts +3 -0
  112. package/src/inventory/shadcnAlias.ts +88 -0
  113. package/src/inventory/shadcnFolders.ts +30 -0
  114. package/src/naming/migrationFile.ts +9 -0
  115. package/src/rules/builtIn.ts +16 -0
  116. package/src/rules/files/folderNames.ts +1 -3
  117. package/src/rules/files/namedAfterExport.ts +4 -1
  118. package/src/rules/files/otherNames.ts +1 -1
  119. package/src/rules/stories/authSql.ts +117 -0
  120. package/src/rules/stories/httpStatus.ts +56 -0
  121. package/src/rules/stories/matchesAny.ts +5 -0
  122. package/src/rules/stories/namedValues.ts +21 -0
  123. package/src/rules/stories/noExpect.ts +39 -0
  124. package/src/rules/stories/noLimitImports.ts +80 -0
  125. package/src/rules/stories/queueSql.ts +18 -0
  126. package/src/rules/stories/specHelpers.ts +10 -0
  127. package/src/rules/stories/sqlText.ts +100 -0
  128. package/src/rules/stories/supportImports.ts +31 -0
  129. package/src/rules/stories/syntax.ts +80 -0
@@ -0,0 +1,73 @@
1
+ import { dirname, isAbsolute, join, resolve } from "node:path";
2
+ import ts from "typescript";
3
+ const PROBE = "__quality_shadcn__.tsx";
4
+ function capture(pattern, alias) {
5
+ const star = pattern.indexOf("*");
6
+ if (star === -1) {
7
+ return pattern === alias ? "" : undefined;
8
+ }
9
+ const prefix = pattern.slice(0, star);
10
+ const suffix = pattern.slice(star + 1);
11
+ return alias.startsWith(prefix) && alias.endsWith(suffix)
12
+ ? alias.slice(prefix.length, suffix.length === 0 ? undefined : -suffix.length)
13
+ : undefined;
14
+ }
15
+ function pathTarget(alias, options, directory) {
16
+ const pathsBase = Reflect.get(options, "pathsBasePath");
17
+ const base = options.baseUrl ?? (typeof pathsBase === "string" ? pathsBase : directory);
18
+ const patterns = Object.entries(options.paths ?? {}).toSorted(([left], [right]) => right.indexOf("*") - left.indexOf("*"));
19
+ const exact = options.paths?.[alias]?.[0];
20
+ if (exact !== undefined) {
21
+ return resolve(base, exact);
22
+ }
23
+ for (const [pattern, targets] of patterns) {
24
+ const captured = capture(pattern, alias);
25
+ const target = targets[0];
26
+ if (captured !== undefined && target !== undefined) {
27
+ return resolve(base, target.replace("*", captured));
28
+ }
29
+ }
30
+ return undefined;
31
+ }
32
+ export function shadcnAlias(directory, alias) {
33
+ if (alias.startsWith(".") || isAbsolute(alias)) {
34
+ return resolve(directory, alias);
35
+ }
36
+ const config = ts.findConfigFile(directory, ts.sys.fileExists);
37
+ const parsed = config === undefined
38
+ ? undefined
39
+ : ts.getParsedCommandLineOfConfigFile(config, {}, {
40
+ ...ts.sys,
41
+ onUnRecoverableConfigFileDiagnostic: () => undefined,
42
+ });
43
+ if (parsed?.errors.length) {
44
+ throw new Error(ts.formatDiagnostics(parsed.errors, {
45
+ getCanonicalFileName: (file) => file,
46
+ getCurrentDirectory: () => directory,
47
+ getNewLine: () => "\n",
48
+ }));
49
+ }
50
+ const options = parsed?.options ?? {};
51
+ const target = pathTarget(alias, options, config === undefined ? directory : dirname(config));
52
+ if (target !== undefined) {
53
+ return target;
54
+ }
55
+ if (!alias.startsWith("#")) {
56
+ throw new Error(`Cannot resolve shadcn UI alias "${alias}" from ${directory}. Check tsconfig paths.`);
57
+ }
58
+ // A synthetic child lets TypeScript resolve directory aliases through package imports without requiring a stock component to exist.
59
+ const resolved = ts.resolveModuleName(`${alias}/${PROBE}`, join(directory, "components.tsx"), {
60
+ ...options,
61
+ customConditions: ["source", ...(options.customConditions ?? [])],
62
+ moduleResolution: ts.ModuleResolutionKind.Bundler,
63
+ }, {
64
+ ...ts.sys,
65
+ directoryExists: () => true,
66
+ fileExists: (file) => file.endsWith(`/${PROBE}`) || ts.sys.fileExists(file),
67
+ }).resolvedModule;
68
+ if (resolved === undefined) {
69
+ throw new Error(`Cannot resolve shadcn UI alias "${alias}" from ${directory}. Check tsconfig paths or package imports.`);
70
+ }
71
+ return dirname(resolved.resolvedFileName);
72
+ }
73
+ //# sourceMappingURL=shadcnAlias.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shadcnAlias.js","sourceRoot":"","sources":["../../src/inventory/shadcnAlias.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { Effect, type FileSystem } from "effect";
2
+ import { FilesystemFailure } from "./filesystem.ts";
3
+ export declare const shadcnFolders: (root: string) => Effect.Effect<readonly string[], FilesystemFailure, FileSystem.FileSystem>;
4
+ //# sourceMappingURL=shadcnFolders.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shadcnFolders.d.ts","sourceRoot":"","sources":["../../src/inventory/shadcnFolders.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,KAAK,UAAU,EAAU,MAAM,QAAQ,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAoB,MAAM,iBAAiB,CAAC;AAOtE,eAAO,MAAM,aAAa,8FAoBxB,CAAC"}
@@ -0,0 +1,25 @@
1
+ import { basename, dirname, relative } from "node:path";
2
+ import { Effect, Schema } from "effect";
3
+ import { FilesystemFailure, readRequiredText } from "./filesystem.js";
4
+ import { posix } from "./ignoreScope.js";
5
+ import { shadcnAlias } from "./shadcnAlias.js";
6
+ import { walk } from "./walk.js";
7
+ const Components = Schema.fromJsonString(Schema.Struct({ aliases: Schema.Struct({ ui: Schema.NonEmptyString }) }));
8
+ export const shadcnFolders = Effect.fn("Inventory.shadcnFolders")(function* (root) {
9
+ const paths = (yield* walk(root)).filter((path) => basename(path) === "components.json");
10
+ return yield* Effect.forEach(paths, (path) => Effect.gen(function* () {
11
+ const text = yield* readRequiredText(path);
12
+ return yield* Effect.try({
13
+ catch: (cause) => new FilesystemFailure({ message: `cannot resolve ${path}: ${String(cause)}`, path }),
14
+ try: () => {
15
+ const { aliases } = Schema.decodeUnknownSync(Components)(text);
16
+ const folder = posix(relative(root, shadcnAlias(dirname(path), aliases.ui)));
17
+ if (folder === "" || folder === ".." || folder.startsWith("../")) {
18
+ throw new Error("the shadcn UI folder must be inside the repository and cannot be its root");
19
+ }
20
+ return folder;
21
+ },
22
+ });
23
+ }));
24
+ });
25
+ //# sourceMappingURL=shadcnFolders.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shadcnFolders.js","sourceRoot":"","sources":["../../src/inventory/shadcnFolders.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACxD,OAAO,EAAE,MAAM,EAAmB,MAAM,EAAE,MAAM,QAAQ,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACtE,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,MAAM,UAAU,GAAG,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,cAAc,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAEnH,MAAM,CAAC,MAAM,aAAa,GAAG,MAAM,CAAC,EAAE,CAAC,yBAAyB,CAAC,CAAC,QAAQ,CAAC,EAC1E,IAAY;IAEZ,MAAM,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,iBAAiB,CAAC,CAAC;IACzF,OAAO,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,EAAE,CAC5C,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QACnB,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;QAC3C,OAAO,KAAK,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;YACxB,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,iBAAiB,CAAC,EAAE,OAAO,EAAE,kBAAkB,IAAI,KAAK,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC;YACtG,GAAG,EAAE,GAAG,EAAE;gBACT,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC;gBAC/D,MAAM,MAAM,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;gBAC7E,IAAI,MAAM,KAAK,EAAE,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;oBAClE,MAAM,IAAI,KAAK,CAAC,2EAA2E,CAAC,CAAC;gBAC9F,CAAC;gBACD,OAAO,MAAM,CAAC;YACf,CAAC;SACD,CAAC,CAAC;IACJ,CAAC,CAAC,CACF,CAAC;AACH,CAAC,CAAC,CAAC"}
@@ -0,0 +1,4 @@
1
+ export declare const MIGRATIONS_DIRECTORY = "src/server/migrations";
2
+ export declare const MIGRATION_FILE_PATTERN: RegExp;
3
+ export declare function isMigrationFile(path: string): boolean;
4
+ //# sourceMappingURL=migrationFile.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrationFile.d.ts","sourceRoot":"","sources":["../../src/naming/migrationFile.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,oBAAoB,0BAA0B,CAAC;AAC5D,eAAO,MAAM,sBAAsB,QAAkD,CAAC;AAEtF,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAGrD"}
@@ -0,0 +1,8 @@
1
+ import { posix } from "node:path";
2
+ export const MIGRATIONS_DIRECTORY = "src/server/migrations";
3
+ export const MIGRATION_FILE_PATTERN = /^[0-9]{4}_[a-z][a-z0-9]*(?:_[a-z0-9]+)*\.ts$/u;
4
+ export function isMigrationFile(path) {
5
+ const directory = posix.dirname(path);
6
+ return (directory === MIGRATIONS_DIRECTORY || directory.endsWith(`/${MIGRATIONS_DIRECTORY}`)) && MIGRATION_FILE_PATTERN.test(posix.basename(path));
7
+ }
8
+ //# sourceMappingURL=migrationFile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrationFile.js","sourceRoot":"","sources":["../../src/naming/migrationFile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AAElC,MAAM,CAAC,MAAM,oBAAoB,GAAG,uBAAuB,CAAC;AAC5D,MAAM,CAAC,MAAM,sBAAsB,GAAG,+CAA+C,CAAC;AAEtF,MAAM,UAAU,eAAe,CAAC,IAAY;IAC3C,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACtC,OAAO,CAAC,SAAS,KAAK,oBAAoB,IAAI,SAAS,CAAC,QAAQ,CAAC,IAAI,oBAAoB,EAAE,CAAC,CAAC,IAAI,sBAAsB,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;AACpJ,CAAC"}
@@ -28,5 +28,11 @@ export declare const builtInRules: readonly [import("../rule.ts").Rule<"structur
28
28
  readonly suites?: readonly string[];
29
29
  }>, import("../rule.ts").Rule<"tests/colocated", {
30
30
  readonly suites?: readonly string[];
31
- }>, import("../rule.ts").Rule<"tests/story-setup", undefined>, import("../rule.ts").Rule<"tests/story-specs", undefined>];
31
+ }>, import("../rule.ts").Rule<"tests/story-setup", undefined>, import("../rule.ts").Rule<"tests/story-specs", undefined>, import("../rule.ts").Rule<"boundaries/queue-sql", undefined>, import("../rule.ts").Rule<"boundaries/auth-sql", {
32
+ readonly owners?: readonly string[];
33
+ }>, import("../rule.ts").Rule<"tests/no-expect-in-support", undefined>, import("../rule.ts").Rule<"tests/spec-helpers", undefined>, import("../rule.ts").Rule<"tests/support-imports", {
34
+ readonly modules?: readonly string[];
35
+ }>, import("../rule.ts").Rule<"boundaries/http-status", {
36
+ readonly edge?: readonly string[];
37
+ }>, import("../rule.ts").Rule<"tests/named-values", undefined>, import("../rule.ts").Rule<"tests/no-limit-imports", undefined>];
32
38
  //# sourceMappingURL=builtIn.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"builtIn.d.ts","sourceRoot":"","sources":["../../src/rules/builtIn.ts"],"names":[],"mappings":"AAkCA,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;yHAkCf,CAAC"}
1
+ {"version":3,"file":"builtIn.d.ts","sourceRoot":"","sources":["../../src/rules/builtIn.ts"],"names":[],"mappings":"AA0CA,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+HA0Cf,CAAC"}
@@ -16,8 +16,16 @@ import { importsManifest } from "#rules/imports/manifest.ts";
16
16
  import { noTestCode } from "#rules/imports/noTestCode.ts";
17
17
  import { importsResolvable } from "#rules/imports/resolvable.ts";
18
18
  import { importsRuntime } from "#rules/imports/runtime.ts";
19
+ import { authSql } from "#rules/stories/authSql.ts";
20
+ import { httpStatus } from "#rules/stories/httpStatus.ts";
21
+ import { namedValues } from "#rules/stories/namedValues.ts";
22
+ import { noExpect } from "#rules/stories/noExpect.ts";
23
+ import { noLimitImports } from "#rules/stories/noLimitImports.ts";
24
+ import { queueSql } from "#rules/stories/queueSql.ts";
19
25
  import { storySetup } from "#rules/stories/setup.ts";
26
+ import { specHelpers } from "#rules/stories/specHelpers.ts";
20
27
  import { storySpecs } from "#rules/stories/specs.ts";
28
+ import { supportImports } from "#rules/stories/supportImports.ts";
21
29
  import { biomeOverrides } from "#rules/suppressions/biomeOverrides.ts";
22
30
  import { biomeRecommended } from "#rules/suppressions/biomeRecommended.ts";
23
31
  import { noDoubleCast } from "#rules/suppressions/noDoubleCast.ts";
@@ -65,5 +73,13 @@ export const builtInRules = [
65
73
  testsColocated,
66
74
  storySetup,
67
75
  storySpecs,
76
+ queueSql,
77
+ authSql,
78
+ noExpect,
79
+ specHelpers,
80
+ supportImports,
81
+ httpStatus,
82
+ namedValues,
83
+ noLimitImports,
68
84
  ];
69
85
  //# sourceMappingURL=builtIn.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"builtIn.js","sourceRoot":"","sources":["../../src/rules/builtIn.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AACvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,wCAAwC,CAAC;AAC7E,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,oCAAoC,CAAC;AACrE,OAAO,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AACjE,OAAO,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC;AACvE,OAAO,EAAE,gBAAgB,EAAE,MAAM,yCAAyC,CAAC;AAC3E,OAAO,EAAE,YAAY,EAAE,MAAM,qCAAqC,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,6CAA6C,CAAC;AACnF,OAAO,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC1D,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,MAAM,CAAC,MAAM,YAAY,GAAG;IAC3B,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,OAAO;IACP,eAAe;IACf,aAAa;IACb,QAAQ;IACR,MAAM;IACN,mBAAmB;IACnB,UAAU;IACV,QAAQ;IACR,YAAY;IACZ,oBAAoB;IACpB,cAAc;IACd,gBAAgB;IAChB,KAAK;IACL,YAAY;IACZ,YAAY;IACZ,cAAc;IACd,iBAAiB;IACjB,eAAe;IACf,cAAc;IACd,UAAU;IACV,eAAe;IACf,oBAAoB;IACpB,gBAAgB;IAChB,WAAW;IACX,YAAY;IACZ,UAAU;IACV,WAAW;IACX,cAAc;IACd,UAAU;IACV,UAAU;CACD,CAAC"}
1
+ {"version":3,"file":"builtIn.js","sourceRoot":"","sources":["../../src/rules/builtIn.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"folderNames.d.ts","sourceRoot":"","sources":["../../../src/rules/files/folderNames.ts"],"names":[],"mappings":"AAyEA,eAAO,MAAM,WAAW;;;EAkBtB,CAAC"}
1
+ {"version":3,"file":"folderNames.d.ts","sourceRoot":"","sources":["../../../src/rules/files/folderNames.ts"],"names":[],"mappings":"AAuEA,eAAO,MAAM,WAAW;;;EAkBtB,CAAC"}
@@ -4,12 +4,11 @@ import ignore, {} from "ignore";
4
4
  import { packageLayout } from "#naming/packageLayout.ts";
5
5
  import { KEBAB, PASCAL } from "#naming/words.ts";
6
6
  import { defineRule } from "#rule.ts";
7
- const DEFAULT_TOOL_OWNED = ["migrations/"];
8
7
  const SNAKE = /^[a-z0-9]+(?:_[a-z0-9]+)*$/u;
9
8
  const CODE = /\.[cm]?[jt]sx?$/u;
10
9
  const FolderNamesOptions = Schema.Struct({
11
10
  content: Schema.Array(Schema.String).pipe(Schema.withDecodingDefaultKey(Effect.succeed([]))),
12
- toolOwned: Schema.Array(Schema.String).pipe(Schema.withDecodingDefaultKey(Effect.succeed(DEFAULT_TOOL_OWNED))),
11
+ toolOwned: Schema.Array(Schema.String).pipe(Schema.withDecodingDefaultKey(Effect.succeed([]))),
13
12
  });
14
13
  function foldersIn(files) {
15
14
  const folders = new Set();
@@ -1 +1 @@
1
- {"version":3,"file":"folderNames.js","sourceRoot":"","sources":["../../../src/rules/files/folderNames.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"folderNames.js","sourceRoot":"","sources":["../../../src/rules/files/folderNames.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"namedAfterExport.d.ts","sourceRoot":"","sources":["../../../src/rules/files/namedAfterExport.ts"],"names":[],"mappings":"AAoFA,eAAO,MAAM,gBAAgB;;EAU3B,CAAC"}
1
+ {"version":3,"file":"namedAfterExport.d.ts","sourceRoot":"","sources":["../../../src/rules/files/namedAfterExport.ts"],"names":[],"mappings":"AAqFA,eAAO,MAAM,gBAAgB;;EAY3B,CAAC"}
@@ -3,6 +3,7 @@ import { Effect, Schema } from "effect";
3
3
  import ignore from "ignore";
4
4
  import { exportFits } from "#naming/exportFits.ts";
5
5
  import { mainExport } from "#naming/mainExport.ts";
6
+ import { isMigrationFile } from "#naming/migrationFile.ts";
6
7
  import { ownExports } from "#naming/ownExports.ts";
7
8
  import { packageLayout } from "#naming/packageLayout.ts";
8
9
  import { CAMEL, KEBAB, sameWord, wordsOf } from "#naming/words.ts";
@@ -75,7 +76,9 @@ export const namedAfterExport = defineRule({
75
76
  check: async ({ files, options, readText, sources }) => {
76
77
  const layout = await packageLayout({ files, readText });
77
78
  const toolOwned = ignore().add([...options.toolOwned]);
78
- return sources.filter((file) => !(TEST.test(file.path) || toolOwned.ignores(file.path))).flatMap((file) => findingsOf(file, layout));
79
+ return sources
80
+ .filter((file) => !(TEST.test(file.path) || isMigrationFile(file.path) || toolOwned.ignores(file.path)))
81
+ .flatMap((file) => findingsOf(file, layout));
79
82
  },
80
83
  description: "A file is named after its main export, with its folders as the prefix; a file of several exports is a camelCase topic file, and a script is kebab-case. Rename the file or the export; nothing renames them for you.",
81
84
  id: "files/named-after-export",
@@ -1 +1 @@
1
- {"version":3,"file":"namedAfterExport.js","sourceRoot":"","sources":["../../../src/rules/files/namedAfterExport.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"namedAfterExport.js","sourceRoot":"","sources":["../../../src/rules/files/namedAfterExport.ts"],"names":[],"mappings":"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"}
@@ -4,7 +4,7 @@ import ignore, {} from "ignore";
4
4
  import { CAMEL, KEBAB } from "#naming/words.ts";
5
5
  import { defineRule } from "#rule.ts";
6
6
  import { stylesheetImporters } from "./stylesheetImporters.js";
7
- const DEFAULT_TOOL_OWNED = [".*", "package.json", "tsconfig*.json", "biome.json", "biome.jsonc", "*.config.*", "migrations/"];
7
+ const DEFAULT_TOOL_OWNED = [".*", "package.json", "tsconfig*.json", "biome.json", "biome.jsonc", "*.config.*"];
8
8
  const CONVENTIONAL = new Set(["AGENTS", "CHANGELOG", "CLAUDE", "CONTRIBUTING", "LICENSE", "README", "SECURITY", "SKILL"]);
9
9
  const KEBAB_KINDS = new Set([
10
10
  "avif",
@@ -1 +1 @@
1
- {"version":3,"file":"otherNames.js","sourceRoot":"","sources":["../../../src/rules/files/otherNames.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"otherNames.js","sourceRoot":"","sources":["../../../src/rules/files/otherNames.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export declare const authSql: import("#rule.ts").Rule<"boundaries/auth-sql", {
2
+ readonly owners?: readonly string[];
3
+ }>;
4
+ //# sourceMappingURL=authSql.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authSql.d.ts","sourceRoot":"","sources":["../../../src/rules/stories/authSql.ts"],"names":[],"mappings":"AAuGA,eAAO,MAAM,OAAO;;EAalB,CAAC"}
@@ -0,0 +1,102 @@
1
+ import { Effect, Schema } from "effect";
2
+ import { defineRule } from "#rule.ts";
3
+ import { matchesAny } from "./matchesAny.js";
4
+ import { sqlTexts } from "./sqlText.js";
5
+ const AuthSqlOptions = Schema.Struct({
6
+ owners: Schema.Array(Schema.String).pipe(Schema.withDecodingDefaultKey(Effect.succeed([]))),
7
+ });
8
+ const TOKENS = /--[^\n]*|\/\*[\s\S]*?\*\/|'(?:''|[^'])*'|"(?:""|[^"])*"|[\w$]+|[.,;()]/gu;
9
+ const TABLE_START = new Set(["from", "join", "update", "into", "table", "truncate", "references", "using"]);
10
+ const TABLE_END = new Set(["where", "group", "order", "having", "limit", "returning", "set", "values", "on", ";"]);
11
+ const SKIP = new Set(["if", "not", "exists", "only", "table"]);
12
+ const AUTH_TABLES = new Set(["user", "account", "session", "verification"]);
13
+ const EXPRESSION_FROM = new Set(["extract", "overlay", "substring", "trim"]);
14
+ const NON_TABLE_TARGETS = new Set([
15
+ "all",
16
+ "database",
17
+ "domain",
18
+ "foreign",
19
+ "function",
20
+ "language",
21
+ "large",
22
+ "parameter",
23
+ "procedure",
24
+ "routine",
25
+ "schema",
26
+ "sequence",
27
+ "tablespace",
28
+ "type",
29
+ ]);
30
+ function tableAt(tokens, index) {
31
+ let next = index;
32
+ while (SKIP.has(tokens[next]?.toLowerCase() ?? "")) {
33
+ const only = tokens[next]?.toLowerCase() === "only";
34
+ next += 1;
35
+ if (only && tokens[next] === "(") {
36
+ next += 1;
37
+ }
38
+ }
39
+ while (tokens[next + 1] === ".") {
40
+ next += 2;
41
+ }
42
+ return (tokens[next] ?? "").replaceAll('"', "").toLowerCase();
43
+ }
44
+ function tableBoundary(tokens, index, statementStart, fromIsTable) {
45
+ const word = tokens[index]?.toLowerCase() ?? "";
46
+ const permissions = ["grant", "revoke"].includes(tokens[statementStart]?.toLowerCase() ?? "");
47
+ const roleTarget = permissions && (word === "to" || word === "from");
48
+ const permissionTarget = permissions && word === "on" && !NON_TABLE_TARGETS.has(tokens[index + 1]?.toLowerCase() ?? "");
49
+ const indexTarget = word === "on" && tokens.slice(statementStart, index).some((part) => part.toLowerCase() === "index");
50
+ const tableClause = TABLE_START.has(word) && (word !== "from" || fromIsTable);
51
+ return {
52
+ ends: TABLE_END.has(word) || roleTarget,
53
+ starts: !roleTarget && (tableClause || indexTarget || permissionTarget),
54
+ };
55
+ }
56
+ function advanceContext(context, token, index, previous) {
57
+ if (token === ";") {
58
+ context.statementStart = index + 1;
59
+ context.expressionFromDepths.clear();
60
+ }
61
+ if (token === "(") {
62
+ context.depth += 1;
63
+ if (EXPRESSION_FROM.has(previous?.toLowerCase() ?? "")) {
64
+ context.expressionFromDepths.add(context.depth);
65
+ }
66
+ }
67
+ if (token === ")") {
68
+ context.tablesAtDepth.delete(context.depth);
69
+ context.expressionFromDepths.delete(context.depth);
70
+ context.depth -= 1;
71
+ }
72
+ }
73
+ function authTableIn(text) {
74
+ const tokens = [...text.matchAll(TOKENS)]
75
+ .map(([token]) => token)
76
+ .filter((token) => !(token.startsWith("--") || token.startsWith("/*") || token.startsWith("'")));
77
+ const context = { depth: 0, expressionFromDepths: new Set(), statementStart: 0, tablesAtDepth: new Set() };
78
+ return tokens.some((token, index) => {
79
+ advanceContext(context, token, index, tokens[index - 1]);
80
+ const boundary = tableBoundary(tokens, index, context.statementStart, !context.expressionFromDepths.has(context.depth));
81
+ if (boundary.ends) {
82
+ context.tablesAtDepth.delete(context.depth);
83
+ }
84
+ if (boundary.starts) {
85
+ context.tablesAtDepth.add(context.depth);
86
+ }
87
+ return (boundary.starts || (token === "," && context.tablesAtDepth.has(context.depth))) && AUTH_TABLES.has(tableAt(tokens, index + 1));
88
+ });
89
+ }
90
+ export const authSql = defineRule({
91
+ check: async ({ options, ...inputs }) => (await sqlTexts(inputs))
92
+ .filter((query) => !matchesAny(query.file, options.owners) && authTableIn(query.text))
93
+ .map((query) => ({
94
+ file: query.file,
95
+ line: query.line,
96
+ message: "SQL accesses a Better Auth table (user, account, session or verification). Use platform's auth API; only platform's auth implementation and its migrations, named in the repository's auth-sql owners, own those tables.",
97
+ })),
98
+ description: "Apps use platform's auth API instead of querying or modifying Better Auth's tables.",
99
+ id: "boundaries/auth-sql",
100
+ options: Schema.toStandardSchemaV1(AuthSqlOptions, { parseOptions: { errors: "all", onExcessProperty: "error" } }),
101
+ });
102
+ //# sourceMappingURL=authSql.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authSql.js","sourceRoot":"","sources":["../../../src/rules/stories/authSql.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAExC,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC;IACpC,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,sBAAsB,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;CAC3F,CAAC,CAAC;AAEH,MAAM,MAAM,GAAG,0EAA0E,CAAC;AAC1F,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC,CAAC;AAC5G,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC;AACnH,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;AAC/D,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,cAAc,CAAC,CAAC,CAAC;AAC5E,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC,CAAC,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC;AAC7E,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAC;IACjC,KAAK;IACL,UAAU;IACV,QAAQ;IACR,SAAS;IACT,UAAU;IACV,UAAU;IACV,OAAO;IACP,WAAW;IACX,WAAW;IACX,SAAS;IACT,QAAQ;IACR,UAAU;IACV,YAAY;IACZ,MAAM;CACN,CAAC,CAAC;AAEH,SAAS,OAAO,CAAC,MAAyB,EAAE,KAAa;IACxD,IAAI,IAAI,GAAG,KAAK,CAAC;IACjB,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;QACpD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,EAAE,WAAW,EAAE,KAAK,MAAM,CAAC;QACpD,IAAI,IAAI,CAAC,CAAC;QACV,IAAI,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;YAClC,IAAI,IAAI,CAAC,CAAC;QACX,CAAC;IACF,CAAC;IACD,OAAO,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;QACjC,IAAI,IAAI,CAAC,CAAC;IACX,CAAC;IACD,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,UAAU,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;AAC/D,CAAC;AAED,SAAS,aAAa,CAAC,MAAyB,EAAE,KAAa,EAAE,cAAsB,EAAE,WAAoB;IAC5G,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;IAChD,MAAM,WAAW,GAAG,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,cAAc,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9F,MAAM,UAAU,GAAG,WAAW,IAAI,CAAC,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,MAAM,CAAC,CAAC;IACrE,MAAM,gBAAgB,GAAG,WAAW,IAAI,IAAI,KAAK,IAAI,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;IACxH,MAAM,WAAW,GAAG,IAAI,KAAK,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,OAAO,CAAC,CAAC;IACxH,MAAM,WAAW,GAAG,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,WAAW,CAAC,CAAC;IAC9E,OAAO;QACN,IAAI,EAAE,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,UAAU;QACvC,MAAM,EAAE,CAAC,UAAU,IAAI,CAAC,WAAW,IAAI,WAAW,IAAI,gBAAgB,CAAC;KACvE,CAAC;AACH,CAAC;AASD,SAAS,cAAc,CAAC,OAAmB,EAAE,KAAa,EAAE,KAAa,EAAE,QAA4B;IACtG,IAAI,KAAK,KAAK,GAAG,EAAE,CAAC;QACnB,OAAO,CAAC,cAAc,GAAG,KAAK,GAAG,CAAC,CAAC;QACnC,OAAO,CAAC,oBAAoB,CAAC,KAAK,EAAE,CAAC;IACtC,CAAC;IACD,IAAI,KAAK,KAAK,GAAG,EAAE,CAAC;QACnB,OAAO,CAAC,KAAK,IAAI,CAAC,CAAC;QACnB,IAAI,eAAe,CAAC,GAAG,CAAC,QAAQ,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;YACxD,OAAO,CAAC,oBAAoB,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACjD,CAAC;IACF,CAAC;IACD,IAAI,KAAK,KAAK,GAAG,EAAE,CAAC;QACnB,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAC5C,OAAO,CAAC,oBAAoB,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACnD,OAAO,CAAC,KAAK,IAAI,CAAC,CAAC;IACpB,CAAC;AACF,CAAC;AAED,SAAS,WAAW,CAAC,IAAY;IAChC,MAAM,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;SACvC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC;SACvB,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAClG,MAAM,OAAO,GAAe,EAAE,KAAK,EAAE,CAAC,EAAE,oBAAoB,EAAE,IAAI,GAAG,EAAE,EAAE,cAAc,EAAE,CAAC,EAAE,aAAa,EAAE,IAAI,GAAG,EAAE,EAAE,CAAC;IACvH,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;QACnC,cAAc,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;QACzD,MAAM,QAAQ,GAAG,aAAa,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,cAAc,EAAE,CAAC,OAAO,CAAC,oBAAoB,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;QACxH,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC;YACnB,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAC7C,CAAC;QACD,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC;YACrB,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAC1C,CAAC;QACD,OAAO,CAAC,QAAQ,CAAC,MAAM,IAAI,CAAC,KAAK,KAAK,GAAG,IAAI,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;IACxI,CAAC,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,OAAO,GAAG,UAAU,CAAC;IACjC,KAAK,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,GAAG,MAAM,EAAE,EAAE,EAAE,CACvC,CAAC,MAAM,QAAQ,CAAC,MAAM,CAAC,CAAC;SACtB,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,IAAI,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;SACrF,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAChB,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,OAAO,EACN,0NAA0N;KAC3N,CAAC,CAAC;IACL,WAAW,EAAE,qFAAqF;IAClG,EAAE,EAAE,qBAAqB;IACzB,OAAO,EAAE,MAAM,CAAC,kBAAkB,CAAC,cAAc,EAAE,EAAE,YAAY,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,gBAAgB,EAAE,OAAO,EAAE,EAAE,CAAC;CAClH,CAAC,CAAC"}
@@ -0,0 +1,4 @@
1
+ export declare const httpStatus: import("#rule.ts").Rule<"boundaries/http-status", {
2
+ readonly edge?: readonly string[];
3
+ }>;
4
+ //# sourceMappingURL=httpStatus.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"httpStatus.d.ts","sourceRoot":"","sources":["../../../src/rules/stories/httpStatus.ts"],"names":[],"mappings":"AA+CA,eAAO,MAAM,UAAU;;EAQrB,CAAC"}
@@ -0,0 +1,47 @@
1
+ import { Effect, Schema } from "effect";
2
+ import ts from "typescript";
3
+ import { defineRule } from "#rule.ts";
4
+ import { matchesAny } from "./matchesAny.js";
5
+ import { memberName, nodesWhere, numericValue, syntaxFindings, unwrapped } from "./syntax.js";
6
+ const MESSAGE = "Branches on an HTTP error status outside the HTTP edge. Handle the typed domain error here and translate it to an HTTP status in the configured edge module.";
7
+ const HttpStatusOptions = Schema.Struct({
8
+ edge: Schema.Array(Schema.String).pipe(Schema.withDecodingDefaultKey(Effect.succeed([]))),
9
+ });
10
+ const COMPARISONS = new Set([
11
+ ts.SyntaxKind.EqualsEqualsToken,
12
+ ts.SyntaxKind.EqualsEqualsEqualsToken,
13
+ ts.SyntaxKind.ExclamationEqualsToken,
14
+ ts.SyntaxKind.ExclamationEqualsEqualsToken,
15
+ ts.SyntaxKind.LessThanToken,
16
+ ts.SyntaxKind.LessThanEqualsToken,
17
+ ts.SyntaxKind.GreaterThanToken,
18
+ ts.SyntaxKind.GreaterThanEqualsToken,
19
+ ]);
20
+ function isErrorStatus(node) {
21
+ const number = numericValue(node);
22
+ return number !== undefined && number >= 400 && number <= 599;
23
+ }
24
+ function statusBranch(node) {
25
+ if (ts.isBinaryExpression(node) && COMPARISONS.has(node.operatorToken.kind)) {
26
+ return (memberName(node.left) === "status" && isErrorStatus(node.right)) || (memberName(node.right) === "status" && isErrorStatus(node.left));
27
+ }
28
+ if (ts.isCaseClause(node) && isErrorStatus(node.expression) && ts.isCaseBlock(node.parent) && ts.isSwitchStatement(node.parent.parent)) {
29
+ return memberName(node.parent.parent.expression) === "status";
30
+ }
31
+ if (ts.isCallExpression(node) && ts.isPropertyAccessExpression(node.expression) && node.expression.name.text === "includes") {
32
+ const receiver = unwrapped(node.expression.expression);
33
+ return (ts.isArrayLiteralExpression(receiver)
34
+ && receiver.elements.some(isErrorStatus)
35
+ && node.arguments.some((argument) => memberName(argument) === "status"));
36
+ }
37
+ return false;
38
+ }
39
+ export const httpStatus = defineRule({
40
+ check: ({ sources, options }) => sources
41
+ .filter((file) => !matchesAny(file.path, options.edge))
42
+ .flatMap((file) => syntaxFindings(file, (source) => nodesWhere(source, statusBranch), MESSAGE)),
43
+ description: "HTTP status numbers belong at the repository's HTTP edge; domain code handles typed errors.",
44
+ id: "boundaries/http-status",
45
+ options: Schema.toStandardSchemaV1(HttpStatusOptions, { parseOptions: { errors: "all", onExcessProperty: "error" } }),
46
+ });
47
+ //# sourceMappingURL=httpStatus.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"httpStatus.js","sourceRoot":"","sources":["../../../src/rules/stories/httpStatus.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function matchesAny(path: string, patterns: readonly string[]): boolean;
2
+ //# sourceMappingURL=matchesAny.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"matchesAny.d.ts","sourceRoot":"","sources":["../../../src/rules/stories/matchesAny.ts"],"names":[],"mappings":"AAEA,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAE7E"}
@@ -0,0 +1,5 @@
1
+ import { matchesGlob } from "node:path";
2
+ export function matchesAny(path, patterns) {
3
+ return patterns.some((pattern) => matchesGlob(path, pattern));
4
+ }
5
+ //# sourceMappingURL=matchesAny.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"matchesAny.js","sourceRoot":"","sources":["../../../src/rules/stories/matchesAny.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAExC,MAAM,UAAU,UAAU,CAAC,IAAY,EAAE,QAA2B;IACnE,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;AAC/D,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare const namedValues: import("#rule.ts").Rule<"tests/named-values", undefined>;
2
+ //# sourceMappingURL=namedValues.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"namedValues.d.ts","sourceRoot":"","sources":["../../../src/rules/stories/namedValues.ts"],"names":[],"mappings":"AAeA,eAAO,MAAM,WAAW,0DAKtB,CAAC"}
@@ -0,0 +1,15 @@
1
+ import ts from "typescript";
2
+ import { defineRule } from "#rule.ts";
3
+ import { isSpec, memberName, nodesWhere, numericValue, syntaxFindings } from "./syntax.js";
4
+ const MESSAGE = "Passes a numeric literal to toBe or toHaveLength. Assert the observed items, or give the expected value a domain name before asserting it.";
5
+ function numericAssertion(node) {
6
+ return (ts.isCallExpression(node)
7
+ && ["toBe", "toHaveLength"].includes(memberName(node.expression) ?? "")
8
+ && node.arguments.some((argument) => numericValue(argument) !== undefined));
9
+ }
10
+ export const namedValues = defineRule({
11
+ check: ({ sources }) => sources.filter((file) => isSpec(file.path)).flatMap((file) => syntaxFindings(file, (source) => nodesWhere(source, numericAssertion), MESSAGE)),
12
+ description: "Stories assert observed items or named values instead of bare counts and numbers.",
13
+ id: "tests/named-values",
14
+ });
15
+ //# sourceMappingURL=namedValues.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"namedValues.js","sourceRoot":"","sources":["../../../src/rules/stories/namedValues.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE3F,MAAM,OAAO,GACZ,4IAA4I,CAAC;AAE9I,SAAS,gBAAgB,CAAC,IAAa;IACtC,OAAO,CACN,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC;WACtB,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;WACpE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,KAAK,SAAS,CAAC,CAC1E,CAAC;AACH,CAAC;AAED,MAAM,CAAC,MAAM,WAAW,GAAG,UAAU,CAAC;IACrC,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CACtB,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,UAAU,CAAC,MAAM,EAAE,gBAAgB,CAAC,EAAE,OAAO,CAAC,CAAC;IAC/I,WAAW,EAAE,mFAAmF;IAChG,EAAE,EAAE,oBAAoB;CACxB,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare const noExpect: import("#rule.ts").Rule<"tests/no-expect-in-support", undefined>;
2
+ //# sourceMappingURL=noExpect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"noExpect.d.ts","sourceRoot":"","sources":["../../../src/rules/stories/noExpect.ts"],"names":[],"mappings":"AAkCA,eAAO,MAAM,QAAQ,kEAInB,CAAC"}