@cleaver/breakcheck-core 0.2.4 → 0.3.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 (69) hide show
  1. package/README.md +134 -1
  2. package/dist/api/index.d.ts +23 -5
  3. package/dist/api/index.js +71 -10
  4. package/dist/api/index.js.map +1 -1
  5. package/dist/core/check/index.d.ts +9 -0
  6. package/dist/core/check/index.js +116 -0
  7. package/dist/core/check/index.js.map +1 -0
  8. package/dist/core/compare/classes/ComparisonRepository.d.ts +11 -0
  9. package/dist/core/compare/classes/ComparisonRepository.js +26 -4
  10. package/dist/core/compare/classes/ComparisonRepository.js.map +1 -1
  11. package/dist/core/compare/index.js +22 -6
  12. package/dist/core/compare/index.js.map +1 -1
  13. package/dist/core/crawler/implementations/cheerio.d.ts +1 -1
  14. package/dist/core/crawler/implementations/cheerio.js +2 -2
  15. package/dist/core/crawler/implementations/cheerio.js.map +1 -1
  16. package/dist/core/crawler/implementations/playwright.d.ts +1 -1
  17. package/dist/core/crawler/implementations/playwright.js +2 -2
  18. package/dist/core/crawler/implementations/playwright.js.map +1 -1
  19. package/dist/core/crawler/index.d.ts +13 -2
  20. package/dist/core/crawler/index.js +25 -6
  21. package/dist/core/crawler/index.js.map +1 -1
  22. package/dist/core/crawler/url-paths.d.ts +18 -0
  23. package/dist/core/crawler/url-paths.js +113 -0
  24. package/dist/core/crawler/url-paths.js.map +1 -0
  25. package/dist/core/rules/RulesDsl.js +273 -56
  26. package/dist/core/rules/RulesDsl.js.map +1 -1
  27. package/dist/core/rules/RulesEngine.js +56 -17
  28. package/dist/core/rules/RulesEngine.js.map +1 -1
  29. package/dist/core/snapshot/classes/SnapshotRepository.d.ts +15 -2
  30. package/dist/core/snapshot/classes/SnapshotRepository.js +110 -9
  31. package/dist/core/snapshot/classes/SnapshotRepository.js.map +1 -1
  32. package/dist/core/snapshot/index.d.ts +3 -2
  33. package/dist/core/snapshot/index.js +41 -3
  34. package/dist/core/snapshot/index.js.map +1 -1
  35. package/dist/core/snapshot/route-coverage.d.ts +3 -0
  36. package/dist/core/snapshot/route-coverage.js +18 -0
  37. package/dist/core/snapshot/route-coverage.js.map +1 -0
  38. package/dist/core/snapshot/update-routes.d.ts +4 -0
  39. package/dist/core/snapshot/update-routes.js +58 -0
  40. package/dist/core/snapshot/update-routes.js.map +1 -0
  41. package/dist/core/view/index.d.ts +2 -1
  42. package/dist/core/view/index.js +4 -4
  43. package/dist/core/view/index.js.map +1 -1
  44. package/dist/index.d.ts +7 -2
  45. package/dist/index.js +5 -1
  46. package/dist/index.js.map +1 -1
  47. package/dist/lib/config.d.ts +18 -0
  48. package/dist/lib/config.js +363 -0
  49. package/dist/lib/config.js.map +1 -0
  50. package/dist/lib/crawlee-logger.d.ts +2 -0
  51. package/dist/lib/crawlee-logger.js +43 -0
  52. package/dist/lib/crawlee-logger.js.map +1 -0
  53. package/dist/lib/logger.d.ts +8 -3
  54. package/dist/lib/logger.js +11 -1
  55. package/dist/lib/logger.js.map +1 -1
  56. package/dist/lib/root.d.ts +1 -1
  57. package/dist/lib/root.js +17 -6
  58. package/dist/lib/root.js.map +1 -1
  59. package/dist/lib/storage.d.ts +12 -0
  60. package/dist/lib/storage.js +76 -0
  61. package/dist/lib/storage.js.map +1 -0
  62. package/dist/types/api.d.ts +47 -0
  63. package/dist/types/compare.d.ts +5 -2
  64. package/dist/types/config.d.ts +72 -0
  65. package/dist/types/config.js +2 -0
  66. package/dist/types/config.js.map +1 -0
  67. package/dist/types/rules.d.ts +8 -3
  68. package/dist/types/rules.js.map +1 -1
  69. package/package.json +11 -10
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.js","sourceRoot":"","sources":["../../src/lib/storage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AASxC,qEAAqE;AACrE,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,UAAmB;IAEnB,MAAM,kBAAkB,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,IAAI,CAAC,MAAM,WAAW,EAAE,CAAC,CAAC,CAAC;IAC7E,OAAO;QACL,UAAU,EAAE,kBAAkB;QAC9B,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,WAAW,CAAC;QACxD,cAAc,EAAE,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,aAAa,CAAC;KAC7D,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAc;IACtC,OAAO,CACL,KAAK,YAAY,KAAK,IAAI,MAAM,IAAI,KAAK,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,CAC5E,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,UAAkB,EAClB,IAAY,EACZ,IAAY;IAEZ,IACE,IAAI,CAAC,MAAM,KAAK,CAAC;QACjB,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC;QACxB,IAAI,KAAK,GAAG;QACZ,IAAI,KAAK,IAAI;QACb,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;QAClB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EACnB,CAAC;QACD,MAAM,IAAI,KAAK,CACb,WAAW,IAAI,UAAU,IAAI,2CAA2C,CACzE,CAAC;IACJ,CAAC;IAED,MAAM,kBAAkB,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IACpD,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,kBAAkB,EAAE,IAAI,CAAC,CAAC;IAC7D,IAAI,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,kBAAkB,EAAE,CAAC;QACvD,MAAM,IAAI,KAAK,CACb,WAAW,IAAI,UAAU,IAAI,oDAAoD,CAClF,CAAC;IACJ,CAAC;IAED,OAAO,aAAa,CAAC;AACvB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,UAAkB,EAClB,IAAY,EACZ,IAAY;IAEZ,MAAM,SAAS,GAAG,mBAAmB,CAAC,UAAU,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IAE9D,IAAI,UAAU,CAAC;IACf,IAAI,CAAC;QACH,UAAU,GAAG,MAAM,KAAK,CAAC,SAAS,CAAC,CAAC;IACtC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,gBAAgB,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACvD,OAAO,KAAK,CAAC;QACf,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;IAED,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CAAC,iBAAiB,IAAI,KAAK,IAAI,2BAA2B,CAAC,CAAC;IAC7E,CAAC;IAED,MAAM,EAAE,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACzC,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,UAAkB;IAElB,IAAI,OAAO,CAAC;IACZ,IAAI,CAAC;QACH,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/D,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,gBAAgB,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACvD,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;IAED,OAAO,OAAO;SACX,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;SACtC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC;SAC1B,IAAI,EAAE,CAAC;AACZ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,UAAkB,EAClB,IAAY;IAEZ,MAAM,KAAK,GAAG,MAAM,sBAAsB,CAAC,UAAU,CAAC,CAAC;IACvD,MAAM,YAAY,GAAa,EAAE,CAAC;IAElC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,MAAM,kBAAkB,CAAC,UAAU,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC;YACrD,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC;IAED,OAAO,YAAY,CAAC;AACtB,CAAC"}
@@ -34,9 +34,56 @@ export interface SnapshotConfig {
34
34
  name: string;
35
35
  /** Crawler configuration to use */
36
36
  crawlSettings: CrawlerConfig;
37
+ /**
38
+ * Optional root-relative paths to crawl exactly. When provided, link
39
+ * discovery is disabled and the base URL is not added automatically.
40
+ */
41
+ urlPaths?: string[];
37
42
  /** Optional path to generate a URL list file */
38
43
  urlListPath?: string;
39
44
  }
45
+ /** Configuration for an exact-route regression check against a baseline. */
46
+ export interface SiteCheckConfig {
47
+ /** Base URL for the site being checked. */
48
+ baseUrl: string;
49
+ /** Unique name used for the after snapshot and saved comparison. */
50
+ name: string;
51
+ /** Snapshot id containing the checked-in baseline. */
52
+ baselineSnapshotId: string;
53
+ /** Exact root-relative routes to request. */
54
+ routes: string[];
55
+ /** Crawler settings; URL filters are not used for exact route checks. */
56
+ crawlSettings: CrawlerConfig;
57
+ /** Optional rules directory or inline ruleset. */
58
+ ruleset?: ComparisonConfig["ruleset"];
59
+ }
60
+ export type SiteCheckStatus = "passed" | "differences" | "failed";
61
+ /** Structured result returned by the public site-check API. */
62
+ export interface SiteCheckResult {
63
+ status: SiteCheckStatus;
64
+ baseUrl: string;
65
+ baselineSnapshotId: string;
66
+ snapshotId?: string;
67
+ routes: string[];
68
+ crawlErrors: CrawlError[];
69
+ errors: string[];
70
+ comparison?: ComparisonSummary;
71
+ }
72
+ /** Result of updating selected routes in an existing baseline snapshot. */
73
+ export interface SnapshotRouteUpdateResult {
74
+ snapshotId: string;
75
+ updatedRoutes: string[];
76
+ pageCount: number;
77
+ }
78
+ /** Optional artifact-storage context for public operations. */
79
+ export interface StorageOptions {
80
+ /** Directory containing the `snapshots/` and `comparisons/` stores. */
81
+ storageDir?: string;
82
+ }
83
+ /** Storage settings and cooperative cancellation for long-running operations. */
84
+ export interface OperationOptions extends StorageOptions {
85
+ signal?: AbortSignal;
86
+ }
40
87
  interface SnapshotJobBase {
41
88
  snapshotId: string;
42
89
  }
@@ -2,9 +2,12 @@
2
2
  import { Change } from "diff";
3
3
  /**
4
4
  * Represents a single difference found between two page snapshots
5
- * This is equivalent to the Change type from the diff package
5
+ * This retains the optional change flags exposed by earlier diff releases.
6
6
  */
7
- export type LineDiff = Change;
7
+ export type LineDiff = Omit<Change, "added" | "removed"> & {
8
+ added?: boolean;
9
+ removed?: boolean;
10
+ };
8
11
  /**
9
12
  * Represents the complete diff result for a single page
10
13
  */
@@ -0,0 +1,72 @@
1
+ import type { CrawlerType } from "./api.js";
2
+ /** The supported project configuration schema versions. */
3
+ export type ProjectConfigVersion = 1 | 2;
4
+ /** Crawl defaults that may be persisted in a project configuration file. */
5
+ export interface ProjectCrawlConfig {
6
+ crawlerType?: CrawlerType;
7
+ maxDepth?: number;
8
+ maxConcurrency?: number;
9
+ includePatterns?: string[];
10
+ excludePatterns?: string[];
11
+ }
12
+ /** Comparison defaults that may be persisted in a project configuration file. */
13
+ export interface ProjectComparisonConfig {
14
+ rulesDir?: string;
15
+ }
16
+ /** A command passed to Node's process launcher without shell interpretation. */
17
+ export type ProjectCommand = string[];
18
+ /** Local site lifecycle settings for `breakcheck check`. */
19
+ export interface ProjectCheckServerConfig {
20
+ start: ProjectCommand;
21
+ stop?: ProjectCommand;
22
+ cwd?: string;
23
+ env?: Record<string, string>;
24
+ readyPath?: string;
25
+ timeoutMs?: number;
26
+ }
27
+ /** Settings for a repeatable exact-route regression check. */
28
+ export interface ProjectCheckConfig {
29
+ routesFile: string;
30
+ baselineSnapshot: string;
31
+ prepare?: ProjectCommand[];
32
+ server?: ProjectCheckServerConfig;
33
+ reportDir?: string;
34
+ }
35
+ /** The JSON shape accepted by `breakcheck.config.json`. */
36
+ export interface ProjectConfig {
37
+ version: ProjectConfigVersion;
38
+ baseUrl?: string;
39
+ storageDir?: string;
40
+ crawl?: ProjectCrawlConfig;
41
+ comparison?: ProjectComparisonConfig;
42
+ check?: ProjectCheckConfig;
43
+ }
44
+ /** A validated project configuration together with the file that supplied it. */
45
+ export interface LoadedProjectConfig {
46
+ configPath: string;
47
+ config: ProjectConfig;
48
+ }
49
+ /** Options controlling explicit configuration selection and discovery. */
50
+ export interface ProjectConfigLoadOptions {
51
+ cwd?: string;
52
+ configPath?: string;
53
+ noConfig?: boolean;
54
+ }
55
+ /** A validated configuration with paths resolved for downstream operations. */
56
+ export interface ResolvedProjectConfig {
57
+ configPath?: string;
58
+ storageDir: string;
59
+ baseUrl?: string;
60
+ crawl: ProjectCrawlConfig;
61
+ rulesDir?: string;
62
+ check?: ResolvedProjectCheckConfig;
63
+ }
64
+ /** Check configuration with filesystem paths resolved from the config file. */
65
+ export interface ResolvedProjectCheckConfig extends Omit<ProjectCheckConfig, "routesFile" | "reportDir" | "server"> {
66
+ configDirectory: string;
67
+ routesFile: string;
68
+ reportDir: string;
69
+ server?: Omit<ProjectCheckServerConfig, "cwd"> & {
70
+ cwd: string;
71
+ };
72
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/types/config.ts"],"names":[],"mappings":""}
@@ -72,11 +72,16 @@ export interface Region {
72
72
  name: string;
73
73
  }
74
74
  /**
75
- * The root structure of the JSON rules document
75
+ * The serialized JSON document produced from the rules DSL.
76
76
  */
77
- export interface Ruleset {
78
- name: string;
77
+ export interface RulesDocument {
79
78
  rules: Rule[];
80
79
  /** Named regions are optional for backwards-compatible inline rulesets. */
81
80
  regions?: Region[];
82
81
  }
82
+ /**
83
+ * A named runtime ruleset used by comparisons.
84
+ */
85
+ export interface Ruleset extends RulesDocument {
86
+ name: string;
87
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"rules.js","sourceRoot":"","sources":["../../src/types/rules.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAYH;;GAEG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,0BAA0B,CAAC"}
1
+ {"version":3,"file":"rules.js","sourceRoot":"","sources":["../../src/types/rules.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAQH;;GAEG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,0BAA0B,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cleaver/breakcheck-core",
3
- "version": "0.2.4",
3
+ "version": "0.3.0",
4
4
  "type": "module",
5
5
  "engines": {
6
6
  "node": ">=22"
@@ -32,16 +32,17 @@
32
32
  "dev": "tsc -w"
33
33
  },
34
34
  "dependencies": {
35
- "cheerio": "1.0.0-rc.12",
35
+ "cheerio": "^1.2.0",
36
36
  "chevrotain": "^13.2.0",
37
- "crawlee": "^3.18.1",
38
- "diff": "^5.2.2",
37
+ "crawlee": "^3.18.2",
38
+ "diff": "^9.0.0",
39
39
  "diff2html": "^3.4.56",
40
- "express": "^5.2.1",
41
- "find-up": "^7.0.0",
42
- "js-beautify": "^1.15.4",
43
- "pino": "^9.14.0",
44
- "pino-pretty": "^11.2.1",
45
- "playwright": "^1.62.1"
40
+ "domhandler": "^5.0.3",
41
+ "express": "^5.3.0",
42
+ "find-up": "^8.0.0",
43
+ "js-beautify": "^2.0.3",
44
+ "pino": "^10.4.0",
45
+ "pino-pretty": "^13.2.0",
46
+ "playwright": "^1.64.0"
46
47
  }
47
48
  }