@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,429 @@
1
+ /**
2
+ * Minimal CSL-JSON entry schema for bibcheck.
3
+ *
4
+ * CSL JSON is a large spec; bibcheck only consumes a small subset (citekey,
5
+ * identifiers, title, authors, year, URL, note, page). This schema validates
6
+ * that subset at the bibliography-load boundary so subcommand modules
7
+ * (existence, canonical, linkage, worklist) can rely on a typed `CslEntry`.
8
+ *
9
+ * Unknown fields are passed through (CSL JSON producers are diverse), so this
10
+ * uses `.passthrough()` and lets consumers ignore what they don't need.
11
+ *
12
+ * Field-name policy: CSL JSON conventionally uses `URL` (uppercase). bibcheck
13
+ * accepts both `URL` and `url`; the schema normalizes to the lowercase `url`
14
+ * during parse.
15
+ */
16
+ import { z } from 'zod';
17
+ export declare const CslAuthorSchema: z.ZodObject<{
18
+ family: z.ZodOptional<z.ZodString>;
19
+ given: z.ZodOptional<z.ZodString>;
20
+ literal: z.ZodOptional<z.ZodString>;
21
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
22
+ family: z.ZodOptional<z.ZodString>;
23
+ given: z.ZodOptional<z.ZodString>;
24
+ literal: z.ZodOptional<z.ZodString>;
25
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
26
+ family: z.ZodOptional<z.ZodString>;
27
+ given: z.ZodOptional<z.ZodString>;
28
+ literal: z.ZodOptional<z.ZodString>;
29
+ }, z.ZodTypeAny, "passthrough">>;
30
+ export type CslAuthor = z.infer<typeof CslAuthorSchema>;
31
+ export declare const CslDateSchema: z.ZodObject<{
32
+ 'date-parts': z.ZodOptional<z.ZodArray<z.ZodArray<z.ZodUnion<[z.ZodNumber, z.ZodString]>, "many">, "many">>;
33
+ literal: z.ZodOptional<z.ZodString>;
34
+ raw: z.ZodOptional<z.ZodString>;
35
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
36
+ 'date-parts': z.ZodOptional<z.ZodArray<z.ZodArray<z.ZodUnion<[z.ZodNumber, z.ZodString]>, "many">, "many">>;
37
+ literal: z.ZodOptional<z.ZodString>;
38
+ raw: z.ZodOptional<z.ZodString>;
39
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
40
+ 'date-parts': z.ZodOptional<z.ZodArray<z.ZodArray<z.ZodUnion<[z.ZodNumber, z.ZodString]>, "many">, "many">>;
41
+ literal: z.ZodOptional<z.ZodString>;
42
+ raw: z.ZodOptional<z.ZodString>;
43
+ }, z.ZodTypeAny, "passthrough">>;
44
+ export type CslDate = z.infer<typeof CslDateSchema>;
45
+ export declare const CslEntrySchema: z.ZodEffects<z.ZodObject<{
46
+ id: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodNumber]>>;
47
+ type: z.ZodOptional<z.ZodString>;
48
+ title: z.ZodOptional<z.ZodString>;
49
+ author: z.ZodOptional<z.ZodArray<z.ZodObject<{
50
+ family: z.ZodOptional<z.ZodString>;
51
+ given: z.ZodOptional<z.ZodString>;
52
+ literal: z.ZodOptional<z.ZodString>;
53
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
54
+ family: z.ZodOptional<z.ZodString>;
55
+ given: z.ZodOptional<z.ZodString>;
56
+ literal: z.ZodOptional<z.ZodString>;
57
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
58
+ family: z.ZodOptional<z.ZodString>;
59
+ given: z.ZodOptional<z.ZodString>;
60
+ literal: z.ZodOptional<z.ZodString>;
61
+ }, z.ZodTypeAny, "passthrough">>, "many">>;
62
+ DOI: z.ZodOptional<z.ZodString>;
63
+ doi: z.ZodOptional<z.ZodString>;
64
+ ISBN: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodArray<z.ZodString, "many">]>>;
65
+ isbn: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodArray<z.ZodString, "many">]>>;
66
+ URL: z.ZodOptional<z.ZodString>;
67
+ url: z.ZodOptional<z.ZodString>;
68
+ issued: z.ZodOptional<z.ZodObject<{
69
+ 'date-parts': z.ZodOptional<z.ZodArray<z.ZodArray<z.ZodUnion<[z.ZodNumber, z.ZodString]>, "many">, "many">>;
70
+ literal: z.ZodOptional<z.ZodString>;
71
+ raw: z.ZodOptional<z.ZodString>;
72
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
73
+ 'date-parts': z.ZodOptional<z.ZodArray<z.ZodArray<z.ZodUnion<[z.ZodNumber, z.ZodString]>, "many">, "many">>;
74
+ literal: z.ZodOptional<z.ZodString>;
75
+ raw: z.ZodOptional<z.ZodString>;
76
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
77
+ 'date-parts': z.ZodOptional<z.ZodArray<z.ZodArray<z.ZodUnion<[z.ZodNumber, z.ZodString]>, "many">, "many">>;
78
+ literal: z.ZodOptional<z.ZodString>;
79
+ raw: z.ZodOptional<z.ZodString>;
80
+ }, z.ZodTypeAny, "passthrough">>>;
81
+ note: z.ZodOptional<z.ZodString>;
82
+ page: z.ZodOptional<z.ZodString>;
83
+ publisher: z.ZodOptional<z.ZodString>;
84
+ 'container-title': z.ZodOptional<z.ZodString>;
85
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
86
+ id: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodNumber]>>;
87
+ type: z.ZodOptional<z.ZodString>;
88
+ title: z.ZodOptional<z.ZodString>;
89
+ author: z.ZodOptional<z.ZodArray<z.ZodObject<{
90
+ family: z.ZodOptional<z.ZodString>;
91
+ given: z.ZodOptional<z.ZodString>;
92
+ literal: z.ZodOptional<z.ZodString>;
93
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
94
+ family: z.ZodOptional<z.ZodString>;
95
+ given: z.ZodOptional<z.ZodString>;
96
+ literal: z.ZodOptional<z.ZodString>;
97
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
98
+ family: z.ZodOptional<z.ZodString>;
99
+ given: z.ZodOptional<z.ZodString>;
100
+ literal: z.ZodOptional<z.ZodString>;
101
+ }, z.ZodTypeAny, "passthrough">>, "many">>;
102
+ DOI: z.ZodOptional<z.ZodString>;
103
+ doi: z.ZodOptional<z.ZodString>;
104
+ ISBN: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodArray<z.ZodString, "many">]>>;
105
+ isbn: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodArray<z.ZodString, "many">]>>;
106
+ URL: z.ZodOptional<z.ZodString>;
107
+ url: z.ZodOptional<z.ZodString>;
108
+ issued: z.ZodOptional<z.ZodObject<{
109
+ 'date-parts': z.ZodOptional<z.ZodArray<z.ZodArray<z.ZodUnion<[z.ZodNumber, z.ZodString]>, "many">, "many">>;
110
+ literal: z.ZodOptional<z.ZodString>;
111
+ raw: z.ZodOptional<z.ZodString>;
112
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
113
+ 'date-parts': z.ZodOptional<z.ZodArray<z.ZodArray<z.ZodUnion<[z.ZodNumber, z.ZodString]>, "many">, "many">>;
114
+ literal: z.ZodOptional<z.ZodString>;
115
+ raw: z.ZodOptional<z.ZodString>;
116
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
117
+ 'date-parts': z.ZodOptional<z.ZodArray<z.ZodArray<z.ZodUnion<[z.ZodNumber, z.ZodString]>, "many">, "many">>;
118
+ literal: z.ZodOptional<z.ZodString>;
119
+ raw: z.ZodOptional<z.ZodString>;
120
+ }, z.ZodTypeAny, "passthrough">>>;
121
+ note: z.ZodOptional<z.ZodString>;
122
+ page: z.ZodOptional<z.ZodString>;
123
+ publisher: z.ZodOptional<z.ZodString>;
124
+ 'container-title': z.ZodOptional<z.ZodString>;
125
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
126
+ id: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodNumber]>>;
127
+ type: z.ZodOptional<z.ZodString>;
128
+ title: z.ZodOptional<z.ZodString>;
129
+ author: z.ZodOptional<z.ZodArray<z.ZodObject<{
130
+ family: z.ZodOptional<z.ZodString>;
131
+ given: z.ZodOptional<z.ZodString>;
132
+ literal: z.ZodOptional<z.ZodString>;
133
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
134
+ family: z.ZodOptional<z.ZodString>;
135
+ given: z.ZodOptional<z.ZodString>;
136
+ literal: z.ZodOptional<z.ZodString>;
137
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
138
+ family: z.ZodOptional<z.ZodString>;
139
+ given: z.ZodOptional<z.ZodString>;
140
+ literal: z.ZodOptional<z.ZodString>;
141
+ }, z.ZodTypeAny, "passthrough">>, "many">>;
142
+ DOI: z.ZodOptional<z.ZodString>;
143
+ doi: z.ZodOptional<z.ZodString>;
144
+ ISBN: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodArray<z.ZodString, "many">]>>;
145
+ isbn: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodArray<z.ZodString, "many">]>>;
146
+ URL: z.ZodOptional<z.ZodString>;
147
+ url: z.ZodOptional<z.ZodString>;
148
+ issued: z.ZodOptional<z.ZodObject<{
149
+ 'date-parts': z.ZodOptional<z.ZodArray<z.ZodArray<z.ZodUnion<[z.ZodNumber, z.ZodString]>, "many">, "many">>;
150
+ literal: z.ZodOptional<z.ZodString>;
151
+ raw: z.ZodOptional<z.ZodString>;
152
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
153
+ 'date-parts': z.ZodOptional<z.ZodArray<z.ZodArray<z.ZodUnion<[z.ZodNumber, z.ZodString]>, "many">, "many">>;
154
+ literal: z.ZodOptional<z.ZodString>;
155
+ raw: z.ZodOptional<z.ZodString>;
156
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
157
+ 'date-parts': z.ZodOptional<z.ZodArray<z.ZodArray<z.ZodUnion<[z.ZodNumber, z.ZodString]>, "many">, "many">>;
158
+ literal: z.ZodOptional<z.ZodString>;
159
+ raw: z.ZodOptional<z.ZodString>;
160
+ }, z.ZodTypeAny, "passthrough">>>;
161
+ note: z.ZodOptional<z.ZodString>;
162
+ page: z.ZodOptional<z.ZodString>;
163
+ publisher: z.ZodOptional<z.ZodString>;
164
+ 'container-title': z.ZodOptional<z.ZodString>;
165
+ }, z.ZodTypeAny, "passthrough">>, {
166
+ citekey: string;
167
+ doi: string | undefined;
168
+ isbn: string | undefined;
169
+ url: string | undefined;
170
+ id?: string | number | undefined;
171
+ type?: string | undefined;
172
+ title?: string | undefined;
173
+ author?: z.objectOutputType<{
174
+ family: z.ZodOptional<z.ZodString>;
175
+ given: z.ZodOptional<z.ZodString>;
176
+ literal: z.ZodOptional<z.ZodString>;
177
+ }, z.ZodTypeAny, "passthrough">[] | undefined;
178
+ DOI?: string | undefined;
179
+ ISBN?: string | string[] | undefined;
180
+ URL?: string | undefined;
181
+ issued?: z.objectOutputType<{
182
+ 'date-parts': z.ZodOptional<z.ZodArray<z.ZodArray<z.ZodUnion<[z.ZodNumber, z.ZodString]>, "many">, "many">>;
183
+ literal: z.ZodOptional<z.ZodString>;
184
+ raw: z.ZodOptional<z.ZodString>;
185
+ }, z.ZodTypeAny, "passthrough"> | undefined;
186
+ note?: string | undefined;
187
+ page?: string | undefined;
188
+ publisher?: string | undefined;
189
+ 'container-title'?: string | undefined;
190
+ }, z.objectInputType<{
191
+ id: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodNumber]>>;
192
+ type: z.ZodOptional<z.ZodString>;
193
+ title: z.ZodOptional<z.ZodString>;
194
+ author: z.ZodOptional<z.ZodArray<z.ZodObject<{
195
+ family: z.ZodOptional<z.ZodString>;
196
+ given: z.ZodOptional<z.ZodString>;
197
+ literal: z.ZodOptional<z.ZodString>;
198
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
199
+ family: z.ZodOptional<z.ZodString>;
200
+ given: z.ZodOptional<z.ZodString>;
201
+ literal: z.ZodOptional<z.ZodString>;
202
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
203
+ family: z.ZodOptional<z.ZodString>;
204
+ given: z.ZodOptional<z.ZodString>;
205
+ literal: z.ZodOptional<z.ZodString>;
206
+ }, z.ZodTypeAny, "passthrough">>, "many">>;
207
+ DOI: z.ZodOptional<z.ZodString>;
208
+ doi: z.ZodOptional<z.ZodString>;
209
+ ISBN: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodArray<z.ZodString, "many">]>>;
210
+ isbn: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodArray<z.ZodString, "many">]>>;
211
+ URL: z.ZodOptional<z.ZodString>;
212
+ url: z.ZodOptional<z.ZodString>;
213
+ issued: z.ZodOptional<z.ZodObject<{
214
+ 'date-parts': z.ZodOptional<z.ZodArray<z.ZodArray<z.ZodUnion<[z.ZodNumber, z.ZodString]>, "many">, "many">>;
215
+ literal: z.ZodOptional<z.ZodString>;
216
+ raw: z.ZodOptional<z.ZodString>;
217
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
218
+ 'date-parts': z.ZodOptional<z.ZodArray<z.ZodArray<z.ZodUnion<[z.ZodNumber, z.ZodString]>, "many">, "many">>;
219
+ literal: z.ZodOptional<z.ZodString>;
220
+ raw: z.ZodOptional<z.ZodString>;
221
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
222
+ 'date-parts': z.ZodOptional<z.ZodArray<z.ZodArray<z.ZodUnion<[z.ZodNumber, z.ZodString]>, "many">, "many">>;
223
+ literal: z.ZodOptional<z.ZodString>;
224
+ raw: z.ZodOptional<z.ZodString>;
225
+ }, z.ZodTypeAny, "passthrough">>>;
226
+ note: z.ZodOptional<z.ZodString>;
227
+ page: z.ZodOptional<z.ZodString>;
228
+ publisher: z.ZodOptional<z.ZodString>;
229
+ 'container-title': z.ZodOptional<z.ZodString>;
230
+ }, z.ZodTypeAny, "passthrough">>;
231
+ export type CslEntry = z.infer<typeof CslEntrySchema>;
232
+ export declare const CslBibliographySchema: z.ZodArray<z.ZodEffects<z.ZodObject<{
233
+ id: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodNumber]>>;
234
+ type: z.ZodOptional<z.ZodString>;
235
+ title: z.ZodOptional<z.ZodString>;
236
+ author: z.ZodOptional<z.ZodArray<z.ZodObject<{
237
+ family: z.ZodOptional<z.ZodString>;
238
+ given: z.ZodOptional<z.ZodString>;
239
+ literal: z.ZodOptional<z.ZodString>;
240
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
241
+ family: z.ZodOptional<z.ZodString>;
242
+ given: z.ZodOptional<z.ZodString>;
243
+ literal: z.ZodOptional<z.ZodString>;
244
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
245
+ family: z.ZodOptional<z.ZodString>;
246
+ given: z.ZodOptional<z.ZodString>;
247
+ literal: z.ZodOptional<z.ZodString>;
248
+ }, z.ZodTypeAny, "passthrough">>, "many">>;
249
+ DOI: z.ZodOptional<z.ZodString>;
250
+ doi: z.ZodOptional<z.ZodString>;
251
+ ISBN: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodArray<z.ZodString, "many">]>>;
252
+ isbn: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodArray<z.ZodString, "many">]>>;
253
+ URL: z.ZodOptional<z.ZodString>;
254
+ url: z.ZodOptional<z.ZodString>;
255
+ issued: z.ZodOptional<z.ZodObject<{
256
+ 'date-parts': z.ZodOptional<z.ZodArray<z.ZodArray<z.ZodUnion<[z.ZodNumber, z.ZodString]>, "many">, "many">>;
257
+ literal: z.ZodOptional<z.ZodString>;
258
+ raw: z.ZodOptional<z.ZodString>;
259
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
260
+ 'date-parts': z.ZodOptional<z.ZodArray<z.ZodArray<z.ZodUnion<[z.ZodNumber, z.ZodString]>, "many">, "many">>;
261
+ literal: z.ZodOptional<z.ZodString>;
262
+ raw: z.ZodOptional<z.ZodString>;
263
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
264
+ 'date-parts': z.ZodOptional<z.ZodArray<z.ZodArray<z.ZodUnion<[z.ZodNumber, z.ZodString]>, "many">, "many">>;
265
+ literal: z.ZodOptional<z.ZodString>;
266
+ raw: z.ZodOptional<z.ZodString>;
267
+ }, z.ZodTypeAny, "passthrough">>>;
268
+ note: z.ZodOptional<z.ZodString>;
269
+ page: z.ZodOptional<z.ZodString>;
270
+ publisher: z.ZodOptional<z.ZodString>;
271
+ 'container-title': z.ZodOptional<z.ZodString>;
272
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
273
+ id: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodNumber]>>;
274
+ type: z.ZodOptional<z.ZodString>;
275
+ title: z.ZodOptional<z.ZodString>;
276
+ author: z.ZodOptional<z.ZodArray<z.ZodObject<{
277
+ family: z.ZodOptional<z.ZodString>;
278
+ given: z.ZodOptional<z.ZodString>;
279
+ literal: z.ZodOptional<z.ZodString>;
280
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
281
+ family: z.ZodOptional<z.ZodString>;
282
+ given: z.ZodOptional<z.ZodString>;
283
+ literal: z.ZodOptional<z.ZodString>;
284
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
285
+ family: z.ZodOptional<z.ZodString>;
286
+ given: z.ZodOptional<z.ZodString>;
287
+ literal: z.ZodOptional<z.ZodString>;
288
+ }, z.ZodTypeAny, "passthrough">>, "many">>;
289
+ DOI: z.ZodOptional<z.ZodString>;
290
+ doi: z.ZodOptional<z.ZodString>;
291
+ ISBN: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodArray<z.ZodString, "many">]>>;
292
+ isbn: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodArray<z.ZodString, "many">]>>;
293
+ URL: z.ZodOptional<z.ZodString>;
294
+ url: z.ZodOptional<z.ZodString>;
295
+ issued: z.ZodOptional<z.ZodObject<{
296
+ 'date-parts': z.ZodOptional<z.ZodArray<z.ZodArray<z.ZodUnion<[z.ZodNumber, z.ZodString]>, "many">, "many">>;
297
+ literal: z.ZodOptional<z.ZodString>;
298
+ raw: z.ZodOptional<z.ZodString>;
299
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
300
+ 'date-parts': z.ZodOptional<z.ZodArray<z.ZodArray<z.ZodUnion<[z.ZodNumber, z.ZodString]>, "many">, "many">>;
301
+ literal: z.ZodOptional<z.ZodString>;
302
+ raw: z.ZodOptional<z.ZodString>;
303
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
304
+ 'date-parts': z.ZodOptional<z.ZodArray<z.ZodArray<z.ZodUnion<[z.ZodNumber, z.ZodString]>, "many">, "many">>;
305
+ literal: z.ZodOptional<z.ZodString>;
306
+ raw: z.ZodOptional<z.ZodString>;
307
+ }, z.ZodTypeAny, "passthrough">>>;
308
+ note: z.ZodOptional<z.ZodString>;
309
+ page: z.ZodOptional<z.ZodString>;
310
+ publisher: z.ZodOptional<z.ZodString>;
311
+ 'container-title': z.ZodOptional<z.ZodString>;
312
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
313
+ id: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodNumber]>>;
314
+ type: z.ZodOptional<z.ZodString>;
315
+ title: z.ZodOptional<z.ZodString>;
316
+ author: z.ZodOptional<z.ZodArray<z.ZodObject<{
317
+ family: z.ZodOptional<z.ZodString>;
318
+ given: z.ZodOptional<z.ZodString>;
319
+ literal: z.ZodOptional<z.ZodString>;
320
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
321
+ family: z.ZodOptional<z.ZodString>;
322
+ given: z.ZodOptional<z.ZodString>;
323
+ literal: z.ZodOptional<z.ZodString>;
324
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
325
+ family: z.ZodOptional<z.ZodString>;
326
+ given: z.ZodOptional<z.ZodString>;
327
+ literal: z.ZodOptional<z.ZodString>;
328
+ }, z.ZodTypeAny, "passthrough">>, "many">>;
329
+ DOI: z.ZodOptional<z.ZodString>;
330
+ doi: z.ZodOptional<z.ZodString>;
331
+ ISBN: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodArray<z.ZodString, "many">]>>;
332
+ isbn: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodArray<z.ZodString, "many">]>>;
333
+ URL: z.ZodOptional<z.ZodString>;
334
+ url: z.ZodOptional<z.ZodString>;
335
+ issued: z.ZodOptional<z.ZodObject<{
336
+ 'date-parts': z.ZodOptional<z.ZodArray<z.ZodArray<z.ZodUnion<[z.ZodNumber, z.ZodString]>, "many">, "many">>;
337
+ literal: z.ZodOptional<z.ZodString>;
338
+ raw: z.ZodOptional<z.ZodString>;
339
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
340
+ 'date-parts': z.ZodOptional<z.ZodArray<z.ZodArray<z.ZodUnion<[z.ZodNumber, z.ZodString]>, "many">, "many">>;
341
+ literal: z.ZodOptional<z.ZodString>;
342
+ raw: z.ZodOptional<z.ZodString>;
343
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
344
+ 'date-parts': z.ZodOptional<z.ZodArray<z.ZodArray<z.ZodUnion<[z.ZodNumber, z.ZodString]>, "many">, "many">>;
345
+ literal: z.ZodOptional<z.ZodString>;
346
+ raw: z.ZodOptional<z.ZodString>;
347
+ }, z.ZodTypeAny, "passthrough">>>;
348
+ note: z.ZodOptional<z.ZodString>;
349
+ page: z.ZodOptional<z.ZodString>;
350
+ publisher: z.ZodOptional<z.ZodString>;
351
+ 'container-title': z.ZodOptional<z.ZodString>;
352
+ }, z.ZodTypeAny, "passthrough">>, {
353
+ citekey: string;
354
+ doi: string | undefined;
355
+ isbn: string | undefined;
356
+ url: string | undefined;
357
+ id?: string | number | undefined;
358
+ type?: string | undefined;
359
+ title?: string | undefined;
360
+ author?: z.objectOutputType<{
361
+ family: z.ZodOptional<z.ZodString>;
362
+ given: z.ZodOptional<z.ZodString>;
363
+ literal: z.ZodOptional<z.ZodString>;
364
+ }, z.ZodTypeAny, "passthrough">[] | undefined;
365
+ DOI?: string | undefined;
366
+ ISBN?: string | string[] | undefined;
367
+ URL?: string | undefined;
368
+ issued?: z.objectOutputType<{
369
+ 'date-parts': z.ZodOptional<z.ZodArray<z.ZodArray<z.ZodUnion<[z.ZodNumber, z.ZodString]>, "many">, "many">>;
370
+ literal: z.ZodOptional<z.ZodString>;
371
+ raw: z.ZodOptional<z.ZodString>;
372
+ }, z.ZodTypeAny, "passthrough"> | undefined;
373
+ note?: string | undefined;
374
+ page?: string | undefined;
375
+ publisher?: string | undefined;
376
+ 'container-title'?: string | undefined;
377
+ }, z.objectInputType<{
378
+ id: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodNumber]>>;
379
+ type: z.ZodOptional<z.ZodString>;
380
+ title: z.ZodOptional<z.ZodString>;
381
+ author: z.ZodOptional<z.ZodArray<z.ZodObject<{
382
+ family: z.ZodOptional<z.ZodString>;
383
+ given: z.ZodOptional<z.ZodString>;
384
+ literal: z.ZodOptional<z.ZodString>;
385
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
386
+ family: z.ZodOptional<z.ZodString>;
387
+ given: z.ZodOptional<z.ZodString>;
388
+ literal: z.ZodOptional<z.ZodString>;
389
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
390
+ family: z.ZodOptional<z.ZodString>;
391
+ given: z.ZodOptional<z.ZodString>;
392
+ literal: z.ZodOptional<z.ZodString>;
393
+ }, z.ZodTypeAny, "passthrough">>, "many">>;
394
+ DOI: z.ZodOptional<z.ZodString>;
395
+ doi: z.ZodOptional<z.ZodString>;
396
+ ISBN: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodArray<z.ZodString, "many">]>>;
397
+ isbn: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodArray<z.ZodString, "many">]>>;
398
+ URL: z.ZodOptional<z.ZodString>;
399
+ url: z.ZodOptional<z.ZodString>;
400
+ issued: z.ZodOptional<z.ZodObject<{
401
+ 'date-parts': z.ZodOptional<z.ZodArray<z.ZodArray<z.ZodUnion<[z.ZodNumber, z.ZodString]>, "many">, "many">>;
402
+ literal: z.ZodOptional<z.ZodString>;
403
+ raw: z.ZodOptional<z.ZodString>;
404
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
405
+ 'date-parts': z.ZodOptional<z.ZodArray<z.ZodArray<z.ZodUnion<[z.ZodNumber, z.ZodString]>, "many">, "many">>;
406
+ literal: z.ZodOptional<z.ZodString>;
407
+ raw: z.ZodOptional<z.ZodString>;
408
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
409
+ 'date-parts': z.ZodOptional<z.ZodArray<z.ZodArray<z.ZodUnion<[z.ZodNumber, z.ZodString]>, "many">, "many">>;
410
+ literal: z.ZodOptional<z.ZodString>;
411
+ raw: z.ZodOptional<z.ZodString>;
412
+ }, z.ZodTypeAny, "passthrough">>>;
413
+ note: z.ZodOptional<z.ZodString>;
414
+ page: z.ZodOptional<z.ZodString>;
415
+ publisher: z.ZodOptional<z.ZodString>;
416
+ 'container-title': z.ZodOptional<z.ZodString>;
417
+ }, z.ZodTypeAny, "passthrough">>, "many">;
418
+ export type CslBibliography = z.infer<typeof CslBibliographySchema>;
419
+ export declare class BibliographyParseError extends Error {
420
+ readonly cause?: unknown | undefined;
421
+ name: "BibliographyParseError";
422
+ constructor(message: string, cause?: unknown | undefined);
423
+ }
424
+ export interface LoadBibliographyOptions {
425
+ path: string;
426
+ cwd?: string;
427
+ }
428
+ export declare function loadBibliography(opts: LoadBibliographyOptions): Promise<CslBibliography>;
429
+ //# sourceMappingURL=csl.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"csl.d.ts","sourceRoot":"","sources":["../../src/schema/csl.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,eAAe;;;;;;;;;;;;gCAIZ,CAAC;AACjB,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AAExD,eAAO,MAAM,aAAa;;;;;;;;;;;;gCAIV,CAAC;AACjB,MAAM,MAAM,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC;AAoBpD,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gCAUzB,CAAC;AACH,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AAEtD,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;yCAA0B,CAAC;AAC7D,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAEpE,qBAAa,sBAAuB,SAAQ,KAAK;aAEO,KAAK,CAAC,EAAE,OAAO;IAD5D,IAAI,EAAG,wBAAwB,CAAU;gBACtC,OAAO,EAAE,MAAM,EAA2B,KAAK,CAAC,EAAE,OAAO,YAAA;CAMtE;AAED,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,uBAAuB,GAC5B,OAAO,CAAC,eAAe,CAAC,CA0C1B"}
@@ -0,0 +1,101 @@
1
+ /**
2
+ * Minimal CSL-JSON entry schema for bibcheck.
3
+ *
4
+ * CSL JSON is a large spec; bibcheck only consumes a small subset (citekey,
5
+ * identifiers, title, authors, year, URL, note, page). This schema validates
6
+ * that subset at the bibliography-load boundary so subcommand modules
7
+ * (existence, canonical, linkage, worklist) can rely on a typed `CslEntry`.
8
+ *
9
+ * Unknown fields are passed through (CSL JSON producers are diverse), so this
10
+ * uses `.passthrough()` and lets consumers ignore what they don't need.
11
+ *
12
+ * Field-name policy: CSL JSON conventionally uses `URL` (uppercase). bibcheck
13
+ * accepts both `URL` and `url`; the schema normalizes to the lowercase `url`
14
+ * during parse.
15
+ */
16
+ import { z } from 'zod';
17
+ export const CslAuthorSchema = z.object({
18
+ family: z.string().optional(),
19
+ given: z.string().optional(),
20
+ literal: z.string().optional(),
21
+ }).passthrough();
22
+ export const CslDateSchema = z.object({
23
+ 'date-parts': z.array(z.array(z.union([z.number(), z.string()]))).optional(),
24
+ literal: z.string().optional(),
25
+ raw: z.string().optional(),
26
+ }).passthrough();
27
+ const CslEntryRawSchema = z.object({
28
+ id: z.union([z.string(), z.number()]).optional(),
29
+ type: z.string().optional(),
30
+ title: z.string().optional(),
31
+ author: z.array(CslAuthorSchema).optional(),
32
+ DOI: z.string().optional(),
33
+ doi: z.string().optional(),
34
+ ISBN: z.union([z.string(), z.array(z.string())]).optional(),
35
+ isbn: z.union([z.string(), z.array(z.string())]).optional(),
36
+ URL: z.string().optional(),
37
+ url: z.string().optional(),
38
+ issued: CslDateSchema.optional(),
39
+ note: z.string().optional(),
40
+ page: z.string().optional(),
41
+ publisher: z.string().optional(),
42
+ 'container-title': z.string().optional(),
43
+ }).passthrough();
44
+ export const CslEntrySchema = CslEntryRawSchema.transform((raw) => {
45
+ const isbnRaw = raw.ISBN ?? raw.isbn;
46
+ const isbn = Array.isArray(isbnRaw) ? isbnRaw[0] : isbnRaw;
47
+ return {
48
+ ...raw,
49
+ citekey: typeof raw.id === 'number' ? String(raw.id) : raw.id ?? '',
50
+ doi: raw.DOI ?? raw.doi,
51
+ isbn,
52
+ url: raw.URL ?? raw.url,
53
+ };
54
+ });
55
+ export const CslBibliographySchema = z.array(CslEntrySchema);
56
+ export class BibliographyParseError extends Error {
57
+ cause;
58
+ name = 'BibliographyParseError';
59
+ constructor(message, cause) {
60
+ super(message);
61
+ this.cause = cause;
62
+ if (typeof Error.captureStackTrace === 'function') {
63
+ Error.captureStackTrace(this, BibliographyParseError);
64
+ }
65
+ }
66
+ }
67
+ export async function loadBibliography(opts) {
68
+ const { readFile } = await import('node:fs/promises');
69
+ const { resolve } = await import('node:path');
70
+ const cwd = opts.cwd ?? process.cwd();
71
+ const fullPath = resolve(cwd, opts.path);
72
+ let raw;
73
+ try {
74
+ raw = await readFile(fullPath, 'utf-8');
75
+ }
76
+ catch (err) {
77
+ if (err.code === 'ENOENT') {
78
+ throw new BibliographyParseError(`bibliography file not found: ${fullPath}`, err);
79
+ }
80
+ throw new BibliographyParseError(`failed to read bibliography: ${err.message}`, err);
81
+ }
82
+ let parsed;
83
+ try {
84
+ parsed = JSON.parse(raw);
85
+ }
86
+ catch (err) {
87
+ throw new BibliographyParseError(`bibliography is not valid JSON: ${err.message}`, err);
88
+ }
89
+ if (!Array.isArray(parsed)) {
90
+ throw new BibliographyParseError('bibliography must be a JSON array of CSL-JSON entries');
91
+ }
92
+ const result = CslBibliographySchema.safeParse(parsed);
93
+ if (!result.success) {
94
+ const issue = result.error.issues[0];
95
+ const path = issue?.path?.join('.') ?? '<root>';
96
+ const message = issue?.message ?? 'invalid CSL-JSON entry';
97
+ throw new BibliographyParseError(`${path}: ${message}`, result.error);
98
+ }
99
+ return result.data;
100
+ }
101
+ //# sourceMappingURL=csl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"csl.js","sourceRoot":"","sources":["../../src/schema/csl.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC;IACtC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC7B,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC5B,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC/B,CAAC,CAAC,WAAW,EAAE,CAAC;AAGjB,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,CAAC;IACpC,YAAY,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IAC5E,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC9B,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC3B,CAAC,CAAC,WAAW,EAAE,CAAC;AAGjB,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACjC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE;IAChD,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC3B,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC5B,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,QAAQ,EAAE;IAC3C,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC1B,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC1B,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IAC3D,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IAC3D,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC1B,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC1B,MAAM,EAAE,aAAa,CAAC,QAAQ,EAAE;IAChC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC3B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC3B,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAChC,iBAAiB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CACzC,CAAC,CAAC,WAAW,EAAE,CAAC;AAEjB,MAAM,CAAC,MAAM,cAAc,GAAG,iBAAiB,CAAC,SAAS,CAAC,CAAC,GAAG,EAAE,EAAE;IAChE,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,CAAC;IACrC,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;IAC3D,OAAO;QACL,GAAG,GAAG;QACN,OAAO,EAAE,OAAO,GAAG,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE;QACnE,GAAG,EAAE,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG;QACvB,IAAI;QACJ,GAAG,EAAE,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG;KACxB,CAAC;AACJ,CAAC,CAAC,CAAC;AAGH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;AAG7D,MAAM,OAAO,sBAAuB,SAAQ,KAAK;IAEO;IAD7C,IAAI,GAAG,wBAAiC,CAAC;IAClD,YAAY,OAAe,EAA2B,KAAe;QACnE,KAAK,CAAC,OAAO,CAAC,CAAC;QADqC,UAAK,GAAL,KAAK,CAAU;QAEnE,IAAI,OAAO,KAAK,CAAC,iBAAiB,KAAK,UAAU,EAAE,CAAC;YAClD,KAAK,CAAC,iBAAiB,CAAC,IAAI,EAAE,sBAAsB,CAAC,CAAC;QACxD,CAAC;IACH,CAAC;CACF;AAOD,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,IAA6B;IAE7B,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAC;IACtD,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,CAAC;IAC9C,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IACtC,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;IACzC,IAAI,GAAW,CAAC;IAChB,IAAI,CAAC;QACH,GAAG,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC1C,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAK,GAA6B,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACrD,MAAM,IAAI,sBAAsB,CAC9B,gCAAgC,QAAQ,EAAE,EAC1C,GAAG,CACJ,CAAC;QACJ,CAAC;QACD,MAAM,IAAI,sBAAsB,CAC9B,gCAAiC,GAAa,CAAC,OAAO,EAAE,EACxD,GAAG,CACJ,CAAC;IACJ,CAAC;IACD,IAAI,MAAe,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,sBAAsB,CAC9B,mCAAoC,GAAa,CAAC,OAAO,EAAE,EAC3D,GAAG,CACJ,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3B,MAAM,IAAI,sBAAsB,CAC9B,uDAAuD,CACxD,CAAC;IACJ,CAAC;IACD,MAAM,MAAM,GAAG,qBAAqB,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IACvD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACrC,MAAM,IAAI,GAAG,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,QAAQ,CAAC;QAChD,MAAM,OAAO,GAAG,KAAK,EAAE,OAAO,IAAI,wBAAwB,CAAC;QAC3D,MAAM,IAAI,sBAAsB,CAAC,GAAG,IAAI,KAAK,OAAO,EAAE,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;IACxE,CAAC;IACD,OAAO,MAAM,CAAC,IAAI,CAAC;AACrB,CAAC"}