@de-otio/bibcheck 0.1.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 (127) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +147 -0
  3. package/dist/cache/fs-cache.d.ts +55 -0
  4. package/dist/cache/fs-cache.d.ts.map +1 -0
  5. package/dist/cache/fs-cache.js +264 -0
  6. package/dist/cache/fs-cache.js.map +1 -0
  7. package/dist/canonical.d.ts +29 -0
  8. package/dist/canonical.d.ts.map +1 -0
  9. package/dist/canonical.js +132 -0
  10. package/dist/canonical.js.map +1 -0
  11. package/dist/check.d.ts +140 -0
  12. package/dist/check.d.ts.map +1 -0
  13. package/dist/check.js +646 -0
  14. package/dist/check.js.map +1 -0
  15. package/dist/cli.d.ts +19 -0
  16. package/dist/cli.d.ts.map +1 -0
  17. package/dist/cli.js +357 -0
  18. package/dist/cli.js.map +1 -0
  19. package/dist/config.d.ts +175 -0
  20. package/dist/config.d.ts.map +1 -0
  21. package/dist/config.js +180 -0
  22. package/dist/config.js.map +1 -0
  23. package/dist/databases/crossref.d.ts +53 -0
  24. package/dist/databases/crossref.d.ts.map +1 -0
  25. package/dist/databases/crossref.js +138 -0
  26. package/dist/databases/crossref.js.map +1 -0
  27. package/dist/databases/index.d.ts +12 -0
  28. package/dist/databases/index.d.ts.map +1 -0
  29. package/dist/databases/index.js +9 -0
  30. package/dist/databases/index.js.map +1 -0
  31. package/dist/databases/openalex.d.ts +29 -0
  32. package/dist/databases/openalex.d.ts.map +1 -0
  33. package/dist/databases/openalex.js +117 -0
  34. package/dist/databases/openalex.js.map +1 -0
  35. package/dist/databases/openlibrary.d.ts +26 -0
  36. package/dist/databases/openlibrary.d.ts.map +1 -0
  37. package/dist/databases/openlibrary.js +79 -0
  38. package/dist/databases/openlibrary.js.map +1 -0
  39. package/dist/databases/worldcat.d.ts +33 -0
  40. package/dist/databases/worldcat.d.ts.map +1 -0
  41. package/dist/databases/worldcat.js +145 -0
  42. package/dist/databases/worldcat.js.map +1 -0
  43. package/dist/doctor.d.ts +44 -0
  44. package/dist/doctor.d.ts.map +1 -0
  45. package/dist/doctor.js +386 -0
  46. package/dist/doctor.js.map +1 -0
  47. package/dist/existence.d.ts +70 -0
  48. package/dist/existence.d.ts.map +1 -0
  49. package/dist/existence.js +308 -0
  50. package/dist/existence.js.map +1 -0
  51. package/dist/http.d.ts +97 -0
  52. package/dist/http.d.ts.map +1 -0
  53. package/dist/http.js +543 -0
  54. package/dist/http.js.map +1 -0
  55. package/dist/identifiers.d.ts +44 -0
  56. package/dist/identifiers.d.ts.map +1 -0
  57. package/dist/identifiers.js +111 -0
  58. package/dist/identifiers.js.map +1 -0
  59. package/dist/index.d.ts +9 -0
  60. package/dist/index.d.ts.map +1 -0
  61. package/dist/index.js +8 -0
  62. package/dist/index.js.map +1 -0
  63. package/dist/linkage.d.ts +29 -0
  64. package/dist/linkage.d.ts.map +1 -0
  65. package/dist/linkage.js +73 -0
  66. package/dist/linkage.js.map +1 -0
  67. package/dist/markdown/blocks.d.ts +19 -0
  68. package/dist/markdown/blocks.d.ts.map +1 -0
  69. package/dist/markdown/blocks.js +69 -0
  70. package/dist/markdown/blocks.js.map +1 -0
  71. package/dist/markdown/citekeys.d.ts +22 -0
  72. package/dist/markdown/citekeys.d.ts.map +1 -0
  73. package/dist/markdown/citekeys.js +100 -0
  74. package/dist/markdown/citekeys.js.map +1 -0
  75. package/dist/markdown/glob.d.ts +18 -0
  76. package/dist/markdown/glob.d.ts.map +1 -0
  77. package/dist/markdown/glob.js +26 -0
  78. package/dist/markdown/glob.js.map +1 -0
  79. package/dist/markdown/prose.d.ts +19 -0
  80. package/dist/markdown/prose.d.ts.map +1 -0
  81. package/dist/markdown/prose.js +81 -0
  82. package/dist/markdown/prose.js.map +1 -0
  83. package/dist/output/json.d.ts +21 -0
  84. package/dist/output/json.d.ts.map +1 -0
  85. package/dist/output/json.js +24 -0
  86. package/dist/output/json.js.map +1 -0
  87. package/dist/output/markdown.d.ts +21 -0
  88. package/dist/output/markdown.d.ts.map +1 -0
  89. package/dist/output/markdown.js +194 -0
  90. package/dist/output/markdown.js.map +1 -0
  91. package/dist/output/sarif.d.ts +31 -0
  92. package/dist/output/sarif.d.ts.map +1 -0
  93. package/dist/output/sarif.js +322 -0
  94. package/dist/output/sarif.js.map +1 -0
  95. package/dist/output/text.d.ts +27 -0
  96. package/dist/output/text.d.ts.map +1 -0
  97. package/dist/output/text.js +212 -0
  98. package/dist/output/text.js.map +1 -0
  99. package/dist/phrases/load.d.ts +34 -0
  100. package/dist/phrases/load.d.ts.map +1 -0
  101. package/dist/phrases/load.js +148 -0
  102. package/dist/phrases/load.js.map +1 -0
  103. package/dist/phrases.d.ts +27 -0
  104. package/dist/phrases.d.ts.map +1 -0
  105. package/dist/phrases.js +116 -0
  106. package/dist/phrases.js.map +1 -0
  107. package/dist/schema/csl.d.ts +429 -0
  108. package/dist/schema/csl.d.ts.map +1 -0
  109. package/dist/schema/csl.js +101 -0
  110. package/dist/schema/csl.js.map +1 -0
  111. package/dist/schema/output.d.ts +1116 -0
  112. package/dist/schema/output.d.ts.map +1 -0
  113. package/dist/schema/output.js +419 -0
  114. package/dist/schema/output.js.map +1 -0
  115. package/dist/suppression.d.ts +106 -0
  116. package/dist/suppression.d.ts.map +1 -0
  117. package/dist/suppression.js +134 -0
  118. package/dist/suppression.js.map +1 -0
  119. package/dist/version.d.ts +11 -0
  120. package/dist/version.d.ts.map +1 -0
  121. package/dist/version.js +14 -0
  122. package/dist/version.js.map +1 -0
  123. package/dist/worklist.d.ts +32 -0
  124. package/dist/worklist.d.ts.map +1 -0
  125. package/dist/worklist.js +211 -0
  126. package/dist/worklist.js.map +1 -0
  127. package/package.json +82 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canonical.js","sourceRoot":"","sources":["../src/canonical.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,140 @@
1
+ /**
2
+ * `bibcheck check` orchestrator.
3
+ *
4
+ * Composes all five subcommands (existence, canonical, linkage, phrases,
5
+ * worklist) and assembles the top-level Output.
6
+ *
7
+ * Design notes:
8
+ * - Subcommands run sequentially for deterministic log output.
9
+ * - Each subcommand runs with its own 5-minute deadline.
10
+ * - If a subcommand throws, the error is caught, logged, and a degraded
11
+ * (error-flavored) result is emitted for that layer; the run continues.
12
+ * - The final Output is validated against OutputSchema before return.
13
+ */
14
+ import { type ParsedAllow, type FindingType } from './suppression.js';
15
+ import type { Config } from './config.js';
16
+ import type { CslEntry } from './schema/csl.js';
17
+ import type { CompiledPattern } from './phrases/load.js';
18
+ import type { HttpClient } from './http.js';
19
+ import type { Cache } from './cache/fs-cache.js';
20
+ import type { Output } from './schema/output.js';
21
+ import type { RunExistenceDeps, RunExistenceResult } from './existence.js';
22
+ import type { RunCanonicalDeps, RunCanonicalResult } from './canonical.js';
23
+ import type { RunLinkageDeps, RunLinkageResult } from './linkage.js';
24
+ import type { RunPhrasesDeps, RunPhrasesResult } from './phrases.js';
25
+ import type { RunWorklistDeps, RunWorklistResult } from './worklist.js';
26
+ export interface Logger {
27
+ info(event: string, ctx?: Record<string, unknown>): void;
28
+ warn(event: string, ctx?: Record<string, unknown>): void;
29
+ error(event: string, ctx?: Record<string, unknown>): void;
30
+ }
31
+ export interface RunCheckDeps {
32
+ config: Config;
33
+ cwd: string;
34
+ bibliography: CslEntry[];
35
+ patterns: CompiledPattern[];
36
+ http: HttpClient;
37
+ cache: Cache;
38
+ logger: Logger;
39
+ signal: AbortSignal;
40
+ skip?: ReadonlySet<'existence' | 'canonical' | 'linkage' | 'phrases' | 'worklist'>;
41
+ readFile?: (path: string) => Promise<string>;
42
+ _runExistence?: (deps: RunExistenceDeps) => Promise<RunExistenceResult>;
43
+ _runCanonical?: (deps: RunCanonicalDeps) => Promise<RunCanonicalResult>;
44
+ _runLinkage?: (deps: RunLinkageDeps) => Promise<RunLinkageResult>;
45
+ _runPhrases?: (deps: RunPhrasesDeps) => Promise<RunPhrasesResult>;
46
+ _runWorklist?: (deps: RunWorklistDeps) => Promise<RunWorklistResult>;
47
+ }
48
+ export interface BuildCheckDepsOptions {
49
+ config: Config;
50
+ cwd: string;
51
+ signal: AbortSignal;
52
+ logger?: Logger;
53
+ userAgent?: string;
54
+ }
55
+ export declare function buildCheckDeps(opts: BuildCheckDepsOptions): Promise<RunCheckDeps>;
56
+ /**
57
+ * Orchestrates all five subcommands and assembles the validated Output.
58
+ *
59
+ * Subcommands run sequentially. Each has a 5-minute deadline via
60
+ * `AbortSignal.any([deps.signal, AbortSignal.timeout(300_000)])`.
61
+ *
62
+ * If a subcommand throws (including timeout), the error is caught, logged,
63
+ * and a degraded result is emitted for that layer. The run continues with
64
+ * remaining subcommands.
65
+ */
66
+ export declare function runCheck(deps: RunCheckDeps): Promise<Output>;
67
+ export declare const CHECK_NON_ZERO_REASON: {
68
+ readonly flagged_phrase: "flagged_phrase";
69
+ readonly unresolved_linkage: "unresolved_linkage";
70
+ readonly canonical_issue: "canonical_issue";
71
+ readonly metadata_mismatch: "metadata_mismatch";
72
+ readonly not_found_in_databases: "not_found_in_databases";
73
+ readonly malformed_identifier: "malformed_identifier";
74
+ };
75
+ /**
76
+ * T23 suppression context, passed through from `runCheck` to
77
+ * `checkExitReasons`. Carries the per-entry CSL `type` (not present on the
78
+ * frozen Output schema, but needed to resolve source-type exemptions) plus the
79
+ * parsed per-entry `bibcheck-allow` directives and the config. Pure data.
80
+ */
81
+ export interface SuppressionContext {
82
+ config: Config;
83
+ /** citekey → CSL `type` (undefined when the entry has no type). */
84
+ cslTypeByCitekey: ReadonlyMap<string, string | undefined>;
85
+ allows: readonly ParsedAllow[];
86
+ }
87
+ /** A finding that gated by default would have, but was suppressed (T23). */
88
+ export interface AcknowledgedFinding {
89
+ citekey: string;
90
+ findingType: FindingType;
91
+ /** Why it was suppressed: a source-type rule or a per-entry allow. */
92
+ reason: 'source-type' | 'allow';
93
+ }
94
+ /**
95
+ * Returns the list of finding kinds that should cause a non-zero exit.
96
+ * Empty array → exit 0.
97
+ *
98
+ * Rules:
99
+ * - 'flagged_phrase' if any phraseFlags[].status === 'flagged'
100
+ * - 'unresolved_linkage' if any linkage[].status === 'unresolved'
101
+ * - 'canonical_issue' if any entry's canonical.status is in the problem set
102
+ * - 'metadata_mismatch' if any entry's existence.status === 'metadata-mismatch'
103
+ * - 'not_found_in_databases' if any (non-suppressed) entry's existence.status
104
+ * === 'not-found-in-databases' (B1 fix — absence is a fabrication signal
105
+ * and gates by default per Q1)
106
+ * - 'malformed_identifier' if any (non-suppressed) entry has a malformed
107
+ * DOI/ISBN/URL (a cheap fabrication signal; gates by default)
108
+ *
109
+ * Does NOT trigger non-zero exit:
110
+ * - acknowledged phrases
111
+ * - worklist items
112
+ * - unverifiable existence (graceful degradation)
113
+ *
114
+ * T23: the optional `ctx` filters WHICH entries reach the gate. A not-found or
115
+ * malformed finding does NOT gate when `isGated` resolves it to a source-type
116
+ * exemption or a valid per-entry allow — the gate itself is unchanged, only the
117
+ * per-entry predicate is narrowed. Suppressed findings remain in the Output
118
+ * document (entries + summary counts) and are NOT removed; they are surfaced as
119
+ * informational acknowledgements (see `collectAcknowledgedFindings`). When
120
+ * `ctx` is omitted, every not-found / malformed finding gates unconditionally
121
+ * (the pre-T23 secure default).
122
+ */
123
+ export declare function checkExitReasons(output: Output, ctx?: SuppressionContext): string[];
124
+ /**
125
+ * Collect the not-found / malformed findings that WOULD have gated but were
126
+ * suppressed by a source-type exemption or a per-entry allow. These stay in the
127
+ * Output document (totals are unchanged); this list drives the informational
128
+ * `check.acknowledged_finding` log entries, mirroring how an acknowledged
129
+ * phrase is reported rather than dropped. Pure.
130
+ */
131
+ export declare function collectAcknowledgedFindings(output: Output, ctx: SuppressionContext): AcknowledgedFinding[];
132
+ /**
133
+ * Build the T23 suppression context from the config and the loaded
134
+ * bibliography: the citekey → CSL-type map (the frozen Output schema does not
135
+ * carry `type`, but it is needed to resolve source-type exemptions) and the
136
+ * parsed per-entry `bibcheck-allow` directives. Pure. The CLI calls this and
137
+ * passes the result to `checkExitReasons`.
138
+ */
139
+ export declare function buildSuppressionContext(config: Config, bibliography: CslEntry[]): SuppressionContext;
140
+ //# sourceMappingURL=check.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../src/check.ts"],"names":[],"mappings":"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"}