law4devs 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.
package/dist/index.js ADDED
@@ -0,0 +1,546 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/index.ts
21
+ var index_exports = {};
22
+ __export(index_exports, {
23
+ DEFAULT_BASE_URL: () => DEFAULT_BASE_URL,
24
+ HTTPClient: () => HTTPClient,
25
+ Law4DevsClient: () => Law4DevsClient,
26
+ Law4DevsError: () => Law4DevsError,
27
+ NotFoundError: () => NotFoundError,
28
+ RateLimitError: () => RateLimitError,
29
+ ServerError: () => ServerError,
30
+ VERSION: () => VERSION,
31
+ ValidationError: () => ValidationError
32
+ });
33
+ module.exports = __toCommonJS(index_exports);
34
+
35
+ // src/version.ts
36
+ var VERSION = "0.1.0";
37
+
38
+ // src/errors.ts
39
+ var Law4DevsError = class extends Error {
40
+ constructor(message, statusCode) {
41
+ super(message);
42
+ this.statusCode = statusCode;
43
+ this.name = "Law4DevsError";
44
+ Object.setPrototypeOf(this, new.target.prototype);
45
+ }
46
+ };
47
+ var NotFoundError = class extends Law4DevsError {
48
+ constructor(msg, sc) {
49
+ super(msg, sc);
50
+ this.name = "NotFoundError";
51
+ Object.setPrototypeOf(this, new.target.prototype);
52
+ }
53
+ };
54
+ var ValidationError = class extends Law4DevsError {
55
+ constructor(msg, sc) {
56
+ super(msg, sc);
57
+ this.name = "ValidationError";
58
+ Object.setPrototypeOf(this, new.target.prototype);
59
+ }
60
+ };
61
+ var RateLimitError = class extends Law4DevsError {
62
+ constructor(msg, sc) {
63
+ super(msg, sc);
64
+ this.name = "RateLimitError";
65
+ Object.setPrototypeOf(this, new.target.prototype);
66
+ }
67
+ };
68
+ var ServerError = class extends Law4DevsError {
69
+ constructor(msg, sc) {
70
+ super(msg, sc);
71
+ this.name = "ServerError";
72
+ Object.setPrototypeOf(this, new.target.prototype);
73
+ }
74
+ };
75
+
76
+ // src/http.ts
77
+ var DEFAULT_BASE_URL = "https://api.law4devs.eu/api/v1";
78
+ var HTTPClient = class {
79
+ baseUrl;
80
+ timeout;
81
+ maxRetries;
82
+ _headers;
83
+ constructor(options = {}) {
84
+ this.baseUrl = (options.baseUrl ?? DEFAULT_BASE_URL).replace(/\/$/, "");
85
+ this.timeout = options.timeout ?? 3e4;
86
+ this.maxRetries = options.maxRetries ?? 3;
87
+ this._headers = {
88
+ "Accept": "application/json",
89
+ "User-Agent": `law4devs-typescript/${VERSION}`
90
+ };
91
+ if (options.apiKey) this._headers["X-API-Key"] = options.apiKey;
92
+ }
93
+ async get(path, params) {
94
+ let url = this.baseUrl + path;
95
+ if (params) {
96
+ const qs = Object.entries(params).filter(([, v]) => v !== void 0 && v !== null).map(([k, v]) => `${encodeURIComponent(k)}=${encodeURIComponent(String(v))}`).join("&");
97
+ if (qs) url += "?" + qs;
98
+ }
99
+ for (let attempt = 0; attempt < this.maxRetries; attempt++) {
100
+ const controller = new AbortController();
101
+ const timer = setTimeout(() => controller.abort(), this.timeout);
102
+ try {
103
+ const resp = await fetch(url, { headers: this._headers, signal: controller.signal });
104
+ clearTimeout(timer);
105
+ if (resp.ok) return await resp.json();
106
+ let body = {};
107
+ try {
108
+ body = await resp.json();
109
+ } catch {
110
+ }
111
+ const errObj = body["error"];
112
+ const msg = errObj?.["message"] ?? resp.statusText;
113
+ const status = resp.status;
114
+ if (status === 404) throw new NotFoundError(msg, status);
115
+ if (status === 400) throw new ValidationError(msg, status);
116
+ if (status === 429 || status >= 500) {
117
+ if (attempt < this.maxRetries - 1) {
118
+ await sleep(2 ** attempt * 1e3);
119
+ continue;
120
+ }
121
+ if (status === 429) throw new RateLimitError(msg, status);
122
+ throw new ServerError(msg, status);
123
+ }
124
+ throw new Law4DevsError(msg, status);
125
+ } catch (err) {
126
+ clearTimeout(timer);
127
+ if (err instanceof Law4DevsError) throw err;
128
+ if (attempt < this.maxRetries - 1) {
129
+ await sleep(2 ** attempt * 1e3);
130
+ continue;
131
+ }
132
+ throw new Law4DevsError(`Request failed: ${err}`);
133
+ }
134
+ }
135
+ throw new Law4DevsError("Max retries exceeded");
136
+ }
137
+ };
138
+ function sleep(ms) {
139
+ return new Promise((resolve) => setTimeout(resolve, ms));
140
+ }
141
+
142
+ // src/pagination.ts
143
+ function parsePage(raw, fromDict) {
144
+ const meta = raw["meta"] ?? {};
145
+ const links = raw["links"] ?? {};
146
+ return {
147
+ data: (raw["data"] ?? []).map((item) => fromDict(item)),
148
+ meta: {
149
+ apiVersion: meta["api_version"] ?? "1.0",
150
+ total: meta["total"] ?? 0,
151
+ page: meta["page"] ?? 1,
152
+ perPage: meta["per_page"] ?? 20,
153
+ pages: meta["pages"] ?? 0
154
+ },
155
+ links: {
156
+ next: links["next"] || null,
157
+ prev: links["prev"] || null
158
+ }
159
+ };
160
+ }
161
+
162
+ // src/resources/base.ts
163
+ var BaseResource = class {
164
+ constructor(_http) {
165
+ this._http = _http;
166
+ }
167
+ parsePage(raw, fromDict) {
168
+ return parsePage(raw, fromDict);
169
+ }
170
+ pageParams(page, perPage) {
171
+ const params = {};
172
+ if (page !== void 0) params["page"] = page;
173
+ if (perPage !== void 0) params["per_page"] = perPage;
174
+ return params;
175
+ }
176
+ async *_iterPages(listFn, perPage = 20) {
177
+ let page = 1;
178
+ while (true) {
179
+ const result = await listFn({ page, perPage });
180
+ yield* result.data;
181
+ if (!result.links.next) break;
182
+ page++;
183
+ }
184
+ }
185
+ };
186
+
187
+ // src/types/framework.ts
188
+ function frameworkFromDict(d) {
189
+ return {
190
+ id: d["id"] ?? 0,
191
+ slug: d["slug"] ?? "",
192
+ name: d["name"] ?? "",
193
+ shortName: d["short_name"] ?? "",
194
+ celexNumber: d["celex_number"] ?? "",
195
+ description: d["description"] ?? null,
196
+ isActive: d["is_active"] ?? false,
197
+ status: d["status"] ?? "",
198
+ expectedArticles: d["expected_articles"] ?? 0,
199
+ expectedRecitals: d["expected_recitals"] ?? 0,
200
+ lastSyncedAt: d["last_synced_at"] ?? null,
201
+ createdAt: d["created_at"] ?? "",
202
+ articleCount: d["article_count"] ?? 0,
203
+ recitalCount: d["recital_count"] ?? 0
204
+ };
205
+ }
206
+ function frameworkDetailFromDict(d) {
207
+ return {
208
+ ...frameworkFromDict(d),
209
+ eurLexUrl: d["eurlex_url"] ?? "",
210
+ requirementCount: d["requirement_count"] ?? 0,
211
+ annexCount: d["annex_count"] ?? 0,
212
+ tagCount: d["tag_count"] ?? 0,
213
+ coverage: d["coverage"] ?? null
214
+ };
215
+ }
216
+
217
+ // src/resources/frameworks.ts
218
+ var FrameworksResource = class extends BaseResource {
219
+ async list(opts = {}) {
220
+ const raw = await this._http.get(
221
+ "/frameworks",
222
+ this.pageParams(opts.page, opts.perPage)
223
+ );
224
+ return this.parsePage(raw, frameworkFromDict);
225
+ }
226
+ async get(slug) {
227
+ const raw = await this._http.get(`/frameworks/${slug}`);
228
+ return frameworkDetailFromDict(raw["data"]);
229
+ }
230
+ async *iter(opts = {}) {
231
+ yield* this._iterPages(
232
+ ({ page, perPage }) => this.list({ page, perPage }),
233
+ opts.perPage
234
+ );
235
+ }
236
+ };
237
+
238
+ // src/types/tag.ts
239
+ function tagFromDict(d) {
240
+ return {
241
+ id: d["id"] ?? 0,
242
+ slug: d["slug"] ?? "",
243
+ name: d["name"] ?? "",
244
+ description: d["description"] ?? null,
245
+ keywords: d["keywords"] ?? [],
246
+ color: d["color"] ?? null,
247
+ createdAt: d["created_at"] ?? ""
248
+ };
249
+ }
250
+
251
+ // src/types/article.ts
252
+ function articleParagraphFromDict(d) {
253
+ return {
254
+ paragraphRef: d["paragraph_ref"] ?? "",
255
+ content: d["content"] ?? "",
256
+ position: d["position"] ?? 0
257
+ };
258
+ }
259
+ function articleSummaryFromDict(d) {
260
+ const fw = d["framework_slug"] ?? d["framework"]?.["slug"] ?? "";
261
+ return {
262
+ id: d["id"] ?? 0,
263
+ frameworkSlug: fw,
264
+ articleNumber: Number(d["article_number"] ?? 0),
265
+ title: d["title"] ?? "",
266
+ position: d["position"] ?? 0,
267
+ paragraphCount: d["paragraph_count"] ?? 0,
268
+ tags: (d["tags"] ?? []).map((t) => tagFromDict(t))
269
+ };
270
+ }
271
+ function articleFromDict(d) {
272
+ return {
273
+ ...articleSummaryFromDict(d),
274
+ content: d["content"] ?? "",
275
+ paragraphs: (d["paragraphs"] ?? []).map((p) => articleParagraphFromDict(p))
276
+ };
277
+ }
278
+
279
+ // src/resources/articles.ts
280
+ var ArticlesResource = class extends BaseResource {
281
+ async list(frameworkSlug, opts = {}) {
282
+ const raw = await this._http.get(
283
+ `/frameworks/${frameworkSlug}/articles`,
284
+ this.pageParams(opts.page, opts.perPage)
285
+ );
286
+ return this.parsePage(raw, articleSummaryFromDict);
287
+ }
288
+ async get(frameworkSlug, articleNumber) {
289
+ const raw = await this._http.get(
290
+ `/frameworks/${frameworkSlug}/articles/${articleNumber}`
291
+ );
292
+ return articleFromDict(raw["data"]);
293
+ }
294
+ async related(frameworkSlug, articleNumber, opts = {}) {
295
+ const raw = await this._http.get(
296
+ `/frameworks/${frameworkSlug}/articles/${articleNumber}/related`,
297
+ this.pageParams(opts.page, opts.perPage)
298
+ );
299
+ return this.parsePage(raw, articleSummaryFromDict);
300
+ }
301
+ async *iter(frameworkSlug, opts = {}) {
302
+ yield* this._iterPages(
303
+ ({ page, perPage }) => this.list(frameworkSlug, { page, perPage }),
304
+ opts.perPage
305
+ );
306
+ }
307
+ };
308
+
309
+ // src/types/recital.ts
310
+ function recitalFromDict(d) {
311
+ const fw = d["framework_slug"] ?? d["framework"]?.["slug"] ?? "";
312
+ return {
313
+ id: d["id"] ?? 0,
314
+ frameworkSlug: fw,
315
+ recitalNumber: Number(d["recital_number"] ?? 0),
316
+ content: d["content"] ?? "",
317
+ position: d["position"] ?? 0
318
+ };
319
+ }
320
+
321
+ // src/resources/recitals.ts
322
+ var RecitalsResource = class extends BaseResource {
323
+ async list(frameworkSlug, opts = {}) {
324
+ const raw = await this._http.get(
325
+ `/frameworks/${frameworkSlug}/recitals`,
326
+ this.pageParams(opts.page, opts.perPage)
327
+ );
328
+ return this.parsePage(raw, recitalFromDict);
329
+ }
330
+ async get(frameworkSlug, recitalNumber) {
331
+ const raw = await this._http.get(
332
+ `/frameworks/${frameworkSlug}/recitals/${recitalNumber}`
333
+ );
334
+ return recitalFromDict(raw["data"]);
335
+ }
336
+ async *iter(frameworkSlug, opts = {}) {
337
+ yield* this._iterPages(
338
+ ({ page, perPage }) => this.list(frameworkSlug, { page, perPage }),
339
+ opts.perPage
340
+ );
341
+ }
342
+ };
343
+
344
+ // src/types/requirement.ts
345
+ function requirementFromDict(d) {
346
+ const fw = d["framework_slug"] ?? d["framework"]?.["slug"] ?? "";
347
+ return {
348
+ id: d["id"] ?? 0,
349
+ frameworkSlug: fw,
350
+ articleNumber: d["article_number"] ?? null,
351
+ paragraphRef: d["paragraph_ref"] ?? null,
352
+ paragraphContent: d["paragraph_content"] ?? null,
353
+ requirementText: d["requirement_text"] ?? "",
354
+ requirementType: d["requirement_type"] ?? "",
355
+ complianceDeadline: d["compliance_deadline"] ?? null,
356
+ linkedArticleNumbers: d["linked_article_numbers"] ?? [],
357
+ stakeholderRoles: d["stakeholder_roles"] ?? [],
358
+ tags: (d["tags"] ?? []).map((t) => tagFromDict(t)),
359
+ createdAt: d["created_at"] ?? ""
360
+ };
361
+ }
362
+
363
+ // src/resources/requirements.ts
364
+ var RequirementsResource = class extends BaseResource {
365
+ async list(opts = {}) {
366
+ const params = {
367
+ ...this.pageParams(opts.page, opts.perPage)
368
+ };
369
+ if (opts.frameworkSlug) params["framework"] = opts.frameworkSlug;
370
+ const raw = await this._http.get("/requirements", params);
371
+ return this.parsePage(raw, requirementFromDict);
372
+ }
373
+ async *iter(opts = {}) {
374
+ yield* this._iterPages(
375
+ ({ page, perPage }) => this.list({ page, perPage, frameworkSlug: opts.frameworkSlug }),
376
+ opts.perPage
377
+ );
378
+ }
379
+ };
380
+
381
+ // src/resources/tags.ts
382
+ var TagsResource = class extends BaseResource {
383
+ async list(opts = {}) {
384
+ const raw = await this._http.get(
385
+ "/tags",
386
+ this.pageParams(opts.page, opts.perPage)
387
+ );
388
+ return this.parsePage(raw, tagFromDict);
389
+ }
390
+ async get(slug) {
391
+ const raw = await this._http.get(`/tags/${slug}`);
392
+ return tagFromDict(raw["data"]);
393
+ }
394
+ async *iter(opts = {}) {
395
+ yield* this._iterPages(
396
+ ({ page, perPage }) => this.list({ page, perPage }),
397
+ opts.perPage
398
+ );
399
+ }
400
+ };
401
+
402
+ // src/types/compliance.ts
403
+ function complianceDeadlineFromDict(d) {
404
+ const fw = d["framework_slug"] ?? d["framework"]?.["slug"] ?? "";
405
+ return {
406
+ id: d["id"] ?? 0,
407
+ frameworkSlug: fw,
408
+ articleNumber: d["article_number"] ?? null,
409
+ paragraphRef: d["paragraph_ref"] ?? null,
410
+ deadlineDate: d["deadline_date"] ?? "",
411
+ deadlineType: d["deadline_type"] ?? "",
412
+ description: d["description"] ?? null
413
+ };
414
+ }
415
+
416
+ // src/resources/compliance.ts
417
+ var ComplianceResource = class extends BaseResource {
418
+ async deadlines(opts = {}) {
419
+ const params = {
420
+ ...this.pageParams(opts.page, opts.perPage)
421
+ };
422
+ if (opts.frameworkSlug) params["framework"] = opts.frameworkSlug;
423
+ const raw = await this._http.get("/compliance/deadlines", params);
424
+ return this.parsePage(raw, complianceDeadlineFromDict);
425
+ }
426
+ async *iterDeadlines(opts = {}) {
427
+ yield* this._iterPages(
428
+ ({ page, perPage }) => this.deadlines({ page, perPage, frameworkSlug: opts.frameworkSlug }),
429
+ opts.perPage
430
+ );
431
+ }
432
+ };
433
+
434
+ // src/types/annex.ts
435
+ function annexSummaryFromDict(d) {
436
+ const fw = d["framework_slug"] ?? d["framework"]?.["slug"] ?? "";
437
+ return {
438
+ id: d["id"] ?? 0,
439
+ frameworkSlug: fw,
440
+ annexNumber: String(d["annex_number"] ?? ""),
441
+ title: d["title"] ?? ""
442
+ };
443
+ }
444
+ function annexFromDict(d) {
445
+ return {
446
+ ...annexSummaryFromDict(d),
447
+ content: d["content"] ?? ""
448
+ };
449
+ }
450
+
451
+ // src/resources/annexes.ts
452
+ var AnnexesResource = class extends BaseResource {
453
+ async list(frameworkSlug, opts = {}) {
454
+ const raw = await this._http.get(
455
+ `/frameworks/${frameworkSlug}/annexes`,
456
+ this.pageParams(opts.page, opts.perPage)
457
+ );
458
+ return this.parsePage(raw, annexSummaryFromDict);
459
+ }
460
+ async get(frameworkSlug, annexNumber) {
461
+ const raw = await this._http.get(
462
+ `/frameworks/${frameworkSlug}/annexes/${annexNumber}`
463
+ );
464
+ return annexFromDict(raw);
465
+ }
466
+ async *iter(frameworkSlug, opts = {}) {
467
+ yield* this._iterPages(
468
+ ({ page, perPage }) => this.list(frameworkSlug, { page, perPage }),
469
+ opts.perPage
470
+ );
471
+ }
472
+ };
473
+
474
+ // src/types/search.ts
475
+ function searchResultFromDict(d) {
476
+ const fw = d["framework"] ?? {};
477
+ return {
478
+ type: d["type"] ?? "",
479
+ frameworkSlug: d["framework_slug"] ?? "",
480
+ frameworkName: d["framework_name"] ?? fw["name"] ?? "",
481
+ articleNumber: d["article_number"] ?? null,
482
+ recitalNumber: d["recital_number"] ?? null,
483
+ paragraphRef: d["paragraph_ref"] ?? null,
484
+ title: d["title"] ?? null,
485
+ requirementType: d["requirement_type"] ?? null,
486
+ matchContext: d["match_context"] ?? "",
487
+ url: d["url"] ?? ""
488
+ };
489
+ }
490
+
491
+ // src/resources/search.ts
492
+ var SearchResource = class extends BaseResource {
493
+ async query(q, opts = {}) {
494
+ const params = {
495
+ q,
496
+ ...this.pageParams(opts.page, opts.perPage)
497
+ };
498
+ if (opts.framework) params["framework"] = opts.framework;
499
+ if (opts.resultType) params["type"] = opts.resultType;
500
+ const raw = await this._http.get("/search", params);
501
+ return this.parsePage(raw, searchResultFromDict);
502
+ }
503
+ async *iter(q, opts = {}) {
504
+ yield* this._iterPages(
505
+ ({ page, perPage }) => this.query(q, { page, perPage, framework: opts.framework, resultType: opts.resultType }),
506
+ opts.perPage
507
+ );
508
+ }
509
+ };
510
+
511
+ // src/client.ts
512
+ var Law4DevsClient = class {
513
+ _http;
514
+ frameworks;
515
+ articles;
516
+ recitals;
517
+ requirements;
518
+ tags;
519
+ compliance;
520
+ annexes;
521
+ search;
522
+ constructor(options = {}) {
523
+ this._http = new HTTPClient(options);
524
+ this.frameworks = new FrameworksResource(this._http);
525
+ this.articles = new ArticlesResource(this._http);
526
+ this.recitals = new RecitalsResource(this._http);
527
+ this.requirements = new RequirementsResource(this._http);
528
+ this.tags = new TagsResource(this._http);
529
+ this.compliance = new ComplianceResource(this._http);
530
+ this.annexes = new AnnexesResource(this._http);
531
+ this.search = new SearchResource(this._http);
532
+ }
533
+ };
534
+ // Annotate the CommonJS export names for ESM import in node:
535
+ 0 && (module.exports = {
536
+ DEFAULT_BASE_URL,
537
+ HTTPClient,
538
+ Law4DevsClient,
539
+ Law4DevsError,
540
+ NotFoundError,
541
+ RateLimitError,
542
+ ServerError,
543
+ VERSION,
544
+ ValidationError
545
+ });
546
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/index.ts","../src/version.ts","../src/errors.ts","../src/http.ts","../src/pagination.ts","../src/resources/base.ts","../src/types/framework.ts","../src/resources/frameworks.ts","../src/types/tag.ts","../src/types/article.ts","../src/resources/articles.ts","../src/types/recital.ts","../src/resources/recitals.ts","../src/types/requirement.ts","../src/resources/requirements.ts","../src/resources/tags.ts","../src/types/compliance.ts","../src/resources/compliance.ts","../src/types/annex.ts","../src/resources/annexes.ts","../src/types/search.ts","../src/resources/search.ts","../src/client.ts"],"sourcesContent":["// Client\nexport { Law4DevsClient } from './client.js';\nexport type { Law4DevsClientOptions } from './client.js';\n\n// HTTP\nexport { HTTPClient, DEFAULT_BASE_URL } from './http.js';\nexport type { HTTPClientOptions } from './http.js';\n\n// Errors\nexport { Law4DevsError, NotFoundError, ValidationError, RateLimitError, ServerError } from './errors.js';\n\n// Pagination\nexport type { Page, PageMeta, PageLinks } from './pagination.js';\n\n// Types\nexport type {\n Framework, FrameworkDetail,\n Tag,\n ArticleParagraph, ArticleSummary, Article,\n Recital,\n Requirement,\n ComplianceDeadline,\n AnnexSummary, Annex,\n SearchResult,\n} from './types/index.js';\n\n// Resources\nexport type {\n FrameworksResource,\n ArticlesResource,\n RecitalsResource,\n RequirementsResource,\n TagsResource,\n ComplianceResource,\n AnnexesResource,\n SearchResource,\n} from './resources/index.js';\n\n// Version\nexport { VERSION } from './version.js';\n","export const VERSION = '0.1.0';\n","export class Law4DevsError extends Error {\n constructor(message: string, public readonly statusCode?: number) {\n super(message);\n this.name = 'Law4DevsError';\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\nexport class NotFoundError extends Law4DevsError {\n constructor(msg: string, sc?: number) {\n super(msg, sc);\n this.name = 'NotFoundError';\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\nexport class ValidationError extends Law4DevsError {\n constructor(msg: string, sc?: number) {\n super(msg, sc);\n this.name = 'ValidationError';\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\nexport class RateLimitError extends Law4DevsError {\n constructor(msg: string, sc?: number) {\n super(msg, sc);\n this.name = 'RateLimitError';\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\nexport class ServerError extends Law4DevsError {\n constructor(msg: string, sc?: number) {\n super(msg, sc);\n this.name = 'ServerError';\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n","import { VERSION } from './version.js';\nimport { Law4DevsError, NotFoundError, ValidationError, RateLimitError, ServerError } from './errors.js';\n\nexport const DEFAULT_BASE_URL = 'https://api.law4devs.eu/api/v1';\n\nexport interface HTTPClientOptions {\n baseUrl?: string;\n apiKey?: string;\n timeout?: number; // milliseconds, default 30000\n maxRetries?: number; // default 3\n}\n\nexport class HTTPClient {\n readonly baseUrl: string;\n readonly timeout: number;\n readonly maxRetries: number;\n readonly _headers: Record<string, string>;\n\n constructor(options: HTTPClientOptions = {}) {\n this.baseUrl = (options.baseUrl ?? DEFAULT_BASE_URL).replace(/\\/$/, '');\n this.timeout = options.timeout ?? 30_000;\n this.maxRetries = options.maxRetries ?? 3;\n this._headers = {\n 'Accept': 'application/json',\n 'User-Agent': `law4devs-typescript/${VERSION}`,\n };\n if (options.apiKey) this._headers['X-API-Key'] = options.apiKey;\n }\n\n async get<T = unknown>(\n path: string,\n params?: Record<string, string | number | undefined>,\n ): Promise<T> {\n let url = this.baseUrl + path;\n if (params) {\n const qs = Object.entries(params)\n .filter(([, v]) => v !== undefined && v !== null)\n .map(([k, v]) => `${encodeURIComponent(k)}=${encodeURIComponent(String(v))}`)\n .join('&');\n if (qs) url += '?' + qs;\n }\n\n for (let attempt = 0; attempt < this.maxRetries; attempt++) {\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), this.timeout);\n try {\n const resp = await fetch(url, { headers: this._headers, signal: controller.signal });\n clearTimeout(timer);\n if (resp.ok) return await resp.json() as T;\n\n let body: Record<string, unknown> = {};\n try { body = await resp.json() as Record<string, unknown>; } catch { /* ignore */ }\n const errObj = body['error'] as Record<string, unknown> | undefined;\n const msg = (errObj?.['message'] as string) ?? resp.statusText;\n const status = resp.status;\n\n if (status === 404) throw new NotFoundError(msg, status);\n if (status === 400) throw new ValidationError(msg, status);\n if (status === 429 || status >= 500) {\n if (attempt < this.maxRetries - 1) { await sleep(2 ** attempt * 1000); continue; }\n if (status === 429) throw new RateLimitError(msg, status);\n throw new ServerError(msg, status);\n }\n throw new Law4DevsError(msg, status);\n } catch (err) {\n clearTimeout(timer);\n if (err instanceof Law4DevsError) throw err;\n if (attempt < this.maxRetries - 1) { await sleep(2 ** attempt * 1000); continue; }\n throw new Law4DevsError(`Request failed: ${err}`);\n }\n }\n throw new Law4DevsError('Max retries exceeded');\n }\n}\n\nfunction sleep(ms: number): Promise<void> {\n return new Promise(resolve => setTimeout(resolve, ms));\n}\n","export interface PageMeta {\n apiVersion: string;\n total: number;\n page: number;\n perPage: number;\n pages: number;\n}\n\nexport interface PageLinks {\n next: string | null;\n prev: string | null;\n}\n\nexport interface Page<T> {\n data: T[];\n meta: PageMeta;\n links: PageLinks;\n}\n\nexport function parsePage<T>(\n raw: Record<string, unknown>,\n fromDict: (d: Record<string, unknown>) => T,\n): Page<T> {\n const meta = (raw['meta'] as Record<string, unknown>) ?? {};\n const links = (raw['links'] as Record<string, unknown>) ?? {};\n return {\n data: ((raw['data'] as unknown[]) ?? []).map(item => fromDict(item as Record<string, unknown>)),\n meta: {\n apiVersion: (meta['api_version'] as string) ?? '1.0',\n total: (meta['total'] as number) ?? 0,\n page: (meta['page'] as number) ?? 1,\n perPage: (meta['per_page'] as number) ?? 20,\n pages: (meta['pages'] as number) ?? 0,\n },\n links: {\n next: (links['next'] as string | null) || null,\n prev: (links['prev'] as string | null) || null,\n },\n };\n}\n","import type { HTTPClient } from '../http.js';\nimport { parsePage, type Page } from '../pagination.js';\n\nexport abstract class BaseResource {\n constructor(protected readonly _http: HTTPClient) {}\n\n protected parsePage<T>(\n raw: Record<string, unknown>,\n fromDict: (d: Record<string, unknown>) => T,\n ): Page<T> {\n return parsePage(raw, fromDict);\n }\n\n protected pageParams(\n page?: number,\n perPage?: number,\n ): Record<string, number | undefined> {\n const params: Record<string, number | undefined> = {};\n if (page !== undefined) params['page'] = page;\n if (perPage !== undefined) params['per_page'] = perPage;\n return params;\n }\n\n protected async *_iterPages<T>(\n listFn: (opts: { page: number; perPage: number }) => Promise<Page<T>>,\n perPage: number = 20,\n ): AsyncGenerator<T> {\n let page = 1;\n while (true) {\n const result = await listFn({ page, perPage });\n yield* result.data;\n if (!result.links.next) break;\n page++;\n }\n }\n}\n","export interface Framework {\n id: number;\n slug: string;\n name: string;\n shortName: string;\n celexNumber: string;\n description: string | null;\n isActive: boolean;\n status: string;\n expectedArticles: number;\n expectedRecitals: number;\n lastSyncedAt: string | null;\n createdAt: string;\n articleCount: number;\n recitalCount: number;\n}\n\nexport interface FrameworkDetail extends Framework {\n eurLexUrl: string;\n requirementCount: number;\n annexCount: number;\n tagCount: number;\n coverage: Record<string, unknown> | null;\n}\n\nexport function frameworkFromDict(d: Record<string, unknown>): Framework {\n return {\n id: (d['id'] as number) ?? 0,\n slug: (d['slug'] as string) ?? '',\n name: (d['name'] as string) ?? '',\n shortName: (d['short_name'] as string) ?? '',\n celexNumber: (d['celex_number'] as string) ?? '',\n description: (d['description'] as string | null) ?? null,\n isActive: (d['is_active'] as boolean) ?? false,\n status: (d['status'] as string) ?? '',\n expectedArticles: (d['expected_articles'] as number) ?? 0,\n expectedRecitals: (d['expected_recitals'] as number) ?? 0,\n lastSyncedAt: (d['last_synced_at'] as string | null) ?? null,\n createdAt: (d['created_at'] as string) ?? '',\n articleCount: (d['article_count'] as number) ?? 0,\n recitalCount: (d['recital_count'] as number) ?? 0,\n };\n}\n\nexport function frameworkDetailFromDict(d: Record<string, unknown>): FrameworkDetail {\n return {\n ...frameworkFromDict(d),\n eurLexUrl: (d['eurlex_url'] as string) ?? '',\n requirementCount: (d['requirement_count'] as number) ?? 0,\n annexCount: (d['annex_count'] as number) ?? 0,\n tagCount: (d['tag_count'] as number) ?? 0,\n coverage: (d['coverage'] as Record<string, unknown> | null) ?? null,\n };\n}\n","import { BaseResource } from './base.js';\nimport { frameworkFromDict, frameworkDetailFromDict, type Framework, type FrameworkDetail } from '../types/framework.js';\nimport type { Page } from '../pagination.js';\n\nexport class FrameworksResource extends BaseResource {\n async list(opts: { page?: number; perPage?: number } = {}): Promise<Page<Framework>> {\n const raw = await this._http.get<Record<string, unknown>>(\n '/frameworks',\n this.pageParams(opts.page, opts.perPage),\n );\n return this.parsePage(raw, frameworkFromDict);\n }\n\n async get(slug: string): Promise<FrameworkDetail> {\n const raw = await this._http.get<Record<string, unknown>>(`/frameworks/${slug}`);\n return frameworkDetailFromDict(raw['data'] as Record<string, unknown>);\n }\n\n async *iter(opts: { perPage?: number } = {}): AsyncGenerator<Framework> {\n yield* this._iterPages(\n ({ page, perPage }) => this.list({ page, perPage }),\n opts.perPage,\n );\n }\n}\n","export interface Tag {\n id: number;\n slug: string;\n name: string;\n description: string | null;\n keywords: string[];\n color: string | null;\n createdAt: string;\n}\n\nexport function tagFromDict(d: Record<string, unknown>): Tag {\n return {\n id: (d['id'] as number) ?? 0,\n slug: (d['slug'] as string) ?? '',\n name: (d['name'] as string) ?? '',\n description: (d['description'] as string | null) ?? null,\n keywords: (d['keywords'] as string[]) ?? [],\n color: (d['color'] as string | null) ?? null,\n createdAt: (d['created_at'] as string) ?? '',\n };\n}\n","import { tagFromDict, type Tag } from './tag.js';\n\nexport interface ArticleParagraph {\n paragraphRef: string;\n content: string;\n position: number;\n}\n\nexport interface ArticleSummary {\n id: number;\n frameworkSlug: string;\n articleNumber: number;\n title: string;\n position: number;\n paragraphCount: number;\n tags: Tag[];\n}\n\nexport interface Article extends ArticleSummary {\n content: string;\n paragraphs: ArticleParagraph[];\n}\n\nexport function articleParagraphFromDict(d: Record<string, unknown>): ArticleParagraph {\n return {\n paragraphRef: (d['paragraph_ref'] as string) ?? '',\n content: (d['content'] as string) ?? '',\n position: (d['position'] as number) ?? 0,\n };\n}\n\nexport function articleSummaryFromDict(d: Record<string, unknown>): ArticleSummary {\n const fw = d['framework_slug'] ?? (d['framework'] as Record<string, unknown> | undefined)?.['slug'] ?? '';\n return {\n id: (d['id'] as number) ?? 0,\n frameworkSlug: fw as string,\n articleNumber: Number(d['article_number'] ?? 0),\n title: (d['title'] as string) ?? '',\n position: (d['position'] as number) ?? 0,\n paragraphCount: (d['paragraph_count'] as number) ?? 0,\n tags: ((d['tags'] as unknown[]) ?? []).map(t => tagFromDict(t as Record<string, unknown>)),\n };\n}\n\nexport function articleFromDict(d: Record<string, unknown>): Article {\n return {\n ...articleSummaryFromDict(d),\n content: (d['content'] as string) ?? '',\n paragraphs: ((d['paragraphs'] as unknown[]) ?? []).map(p => articleParagraphFromDict(p as Record<string, unknown>)),\n };\n}\n","import { BaseResource } from './base.js';\nimport { articleSummaryFromDict, articleFromDict, type ArticleSummary, type Article } from '../types/article.js';\nimport type { Page } from '../pagination.js';\n\nexport class ArticlesResource extends BaseResource {\n async list(frameworkSlug: string, opts: { page?: number; perPage?: number } = {}): Promise<Page<ArticleSummary>> {\n const raw = await this._http.get<Record<string, unknown>>(\n `/frameworks/${frameworkSlug}/articles`,\n this.pageParams(opts.page, opts.perPage),\n );\n return this.parsePage(raw, articleSummaryFromDict);\n }\n\n async get(frameworkSlug: string, articleNumber: number | string): Promise<Article> {\n const raw = await this._http.get<Record<string, unknown>>(\n `/frameworks/${frameworkSlug}/articles/${articleNumber}`,\n );\n return articleFromDict(raw['data'] as Record<string, unknown>);\n }\n\n async related(frameworkSlug: string, articleNumber: number | string, opts: { page?: number; perPage?: number } = {}): Promise<Page<ArticleSummary>> {\n const raw = await this._http.get<Record<string, unknown>>(\n `/frameworks/${frameworkSlug}/articles/${articleNumber}/related`,\n this.pageParams(opts.page, opts.perPage),\n );\n return this.parsePage(raw, articleSummaryFromDict);\n }\n\n async *iter(frameworkSlug: string, opts: { perPage?: number } = {}): AsyncGenerator<ArticleSummary> {\n yield* this._iterPages(\n ({ page, perPage }) => this.list(frameworkSlug, { page, perPage }),\n opts.perPage,\n );\n }\n}\n","export interface Recital {\n id: number;\n frameworkSlug: string;\n recitalNumber: number;\n content: string;\n position: number;\n}\n\nexport function recitalFromDict(d: Record<string, unknown>): Recital {\n const fw = d['framework_slug'] ?? (d['framework'] as Record<string, unknown> | undefined)?.['slug'] ?? '';\n return {\n id: (d['id'] as number) ?? 0,\n frameworkSlug: fw as string,\n recitalNumber: Number(d['recital_number'] ?? 0),\n content: (d['content'] as string) ?? '',\n position: (d['position'] as number) ?? 0,\n };\n}\n","import { BaseResource } from './base.js';\nimport { recitalFromDict, type Recital } from '../types/recital.js';\nimport type { Page } from '../pagination.js';\n\nexport class RecitalsResource extends BaseResource {\n async list(frameworkSlug: string, opts: { page?: number; perPage?: number } = {}): Promise<Page<Recital>> {\n const raw = await this._http.get<Record<string, unknown>>(\n `/frameworks/${frameworkSlug}/recitals`,\n this.pageParams(opts.page, opts.perPage),\n );\n return this.parsePage(raw, recitalFromDict);\n }\n\n async get(frameworkSlug: string, recitalNumber: number | string): Promise<Recital> {\n const raw = await this._http.get<Record<string, unknown>>(\n `/frameworks/${frameworkSlug}/recitals/${recitalNumber}`,\n );\n return recitalFromDict(raw['data'] as Record<string, unknown>);\n }\n\n async *iter(frameworkSlug: string, opts: { perPage?: number } = {}): AsyncGenerator<Recital> {\n yield* this._iterPages(\n ({ page, perPage }) => this.list(frameworkSlug, { page, perPage }),\n opts.perPage,\n );\n }\n}\n","import { tagFromDict, type Tag } from './tag.js';\n\nexport interface Requirement {\n id: number;\n frameworkSlug: string;\n articleNumber: number | null;\n paragraphRef: string | null;\n paragraphContent: string | null;\n requirementText: string;\n requirementType: string;\n complianceDeadline: string | null;\n linkedArticleNumbers: number[];\n stakeholderRoles: string[];\n tags: Tag[];\n createdAt: string;\n}\n\nexport function requirementFromDict(d: Record<string, unknown>): Requirement {\n const fw = d['framework_slug'] ?? (d['framework'] as Record<string, unknown> | undefined)?.['slug'] ?? '';\n return {\n id: (d['id'] as number) ?? 0,\n frameworkSlug: fw as string,\n articleNumber: (d['article_number'] as number | null) ?? null,\n paragraphRef: (d['paragraph_ref'] as string | null) ?? null,\n paragraphContent: (d['paragraph_content'] as string | null) ?? null,\n requirementText: (d['requirement_text'] as string) ?? '',\n requirementType: (d['requirement_type'] as string) ?? '',\n complianceDeadline: (d['compliance_deadline'] as string | null) ?? null,\n linkedArticleNumbers: (d['linked_article_numbers'] as number[]) ?? [],\n stakeholderRoles: (d['stakeholder_roles'] as string[]) ?? [],\n tags: ((d['tags'] as unknown[]) ?? []).map(t => tagFromDict(t as Record<string, unknown>)),\n createdAt: (d['created_at'] as string) ?? '',\n };\n}\n","import { BaseResource } from './base.js';\nimport { requirementFromDict, type Requirement } from '../types/requirement.js';\nimport type { Page } from '../pagination.js';\n\nexport class RequirementsResource extends BaseResource {\n async list(opts: { page?: number; perPage?: number; frameworkSlug?: string } = {}): Promise<Page<Requirement>> {\n const params: Record<string, string | number | undefined> = {\n ...this.pageParams(opts.page, opts.perPage),\n };\n if (opts.frameworkSlug) params['framework'] = opts.frameworkSlug;\n const raw = await this._http.get<Record<string, unknown>>('/requirements', params);\n return this.parsePage(raw, requirementFromDict);\n }\n\n async *iter(opts: { perPage?: number; frameworkSlug?: string } = {}): AsyncGenerator<Requirement> {\n yield* this._iterPages(\n ({ page, perPage }) => this.list({ page, perPage, frameworkSlug: opts.frameworkSlug }),\n opts.perPage,\n );\n }\n}\n","import { BaseResource } from './base.js';\nimport { tagFromDict, type Tag } from '../types/tag.js';\nimport type { Page } from '../pagination.js';\n\nexport class TagsResource extends BaseResource {\n async list(opts: { page?: number; perPage?: number } = {}): Promise<Page<Tag>> {\n const raw = await this._http.get<Record<string, unknown>>(\n '/tags',\n this.pageParams(opts.page, opts.perPage),\n );\n return this.parsePage(raw, tagFromDict);\n }\n\n async get(slug: string): Promise<Tag> {\n const raw = await this._http.get<Record<string, unknown>>(`/tags/${slug}`);\n return tagFromDict(raw['data'] as Record<string, unknown>);\n }\n\n async *iter(opts: { perPage?: number } = {}): AsyncGenerator<Tag> {\n yield* this._iterPages(\n ({ page, perPage }) => this.list({ page, perPage }),\n opts.perPage,\n );\n }\n}\n","export interface ComplianceDeadline {\n id: number;\n frameworkSlug: string;\n articleNumber: string | null;\n paragraphRef: string | null;\n deadlineDate: string;\n deadlineType: string;\n description: string | null;\n}\n\nexport function complianceDeadlineFromDict(d: Record<string, unknown>): ComplianceDeadline {\n const fw = d['framework_slug'] ?? (d['framework'] as Record<string, unknown> | undefined)?.['slug'] ?? '';\n return {\n id: (d['id'] as number) ?? 0,\n frameworkSlug: fw as string,\n articleNumber: (d['article_number'] as string | null) ?? null,\n paragraphRef: (d['paragraph_ref'] as string | null) ?? null,\n deadlineDate: (d['deadline_date'] as string) ?? '',\n deadlineType: (d['deadline_type'] as string) ?? '',\n description: (d['description'] as string | null) ?? null,\n };\n}\n","import { BaseResource } from './base.js';\nimport { complianceDeadlineFromDict, type ComplianceDeadline } from '../types/compliance.js';\nimport type { Page } from '../pagination.js';\n\nexport class ComplianceResource extends BaseResource {\n async deadlines(opts: { page?: number; perPage?: number; frameworkSlug?: string } = {}): Promise<Page<ComplianceDeadline>> {\n const params: Record<string, string | number | undefined> = {\n ...this.pageParams(opts.page, opts.perPage),\n };\n if (opts.frameworkSlug) params['framework'] = opts.frameworkSlug;\n const raw = await this._http.get<Record<string, unknown>>('/compliance/deadlines', params);\n return this.parsePage(raw, complianceDeadlineFromDict);\n }\n\n async *iterDeadlines(opts: { perPage?: number; frameworkSlug?: string } = {}): AsyncGenerator<ComplianceDeadline> {\n yield* this._iterPages(\n ({ page, perPage }) => this.deadlines({ page, perPage, frameworkSlug: opts.frameworkSlug }),\n opts.perPage,\n );\n }\n}\n","export interface AnnexSummary {\n id: number;\n frameworkSlug: string;\n annexNumber: string;\n title: string;\n}\n\nexport interface Annex extends AnnexSummary {\n content: string;\n}\n\nexport function annexSummaryFromDict(d: Record<string, unknown>): AnnexSummary {\n const fw = d['framework_slug'] ?? (d['framework'] as Record<string, unknown> | undefined)?.['slug'] ?? '';\n return {\n id: (d['id'] as number) ?? 0,\n frameworkSlug: fw as string,\n annexNumber: String(d['annex_number'] ?? ''),\n title: (d['title'] as string) ?? '',\n };\n}\n\nexport function annexFromDict(d: Record<string, unknown>): Annex {\n return {\n ...annexSummaryFromDict(d),\n content: (d['content'] as string) ?? '',\n };\n}\n","import { BaseResource } from './base.js';\nimport { annexSummaryFromDict, annexFromDict, type AnnexSummary, type Annex } from '../types/annex.js';\nimport type { Page } from '../pagination.js';\n\nexport class AnnexesResource extends BaseResource {\n async list(frameworkSlug: string, opts: { page?: number; perPage?: number } = {}): Promise<Page<AnnexSummary>> {\n const raw = await this._http.get<Record<string, unknown>>(\n `/frameworks/${frameworkSlug}/annexes`,\n this.pageParams(opts.page, opts.perPage),\n );\n return this.parsePage(raw, annexSummaryFromDict);\n }\n\n async get(frameworkSlug: string, annexNumber: string): Promise<Annex> {\n const raw = await this._http.get<Record<string, unknown>>(\n `/frameworks/${frameworkSlug}/annexes/${annexNumber}`,\n );\n return annexFromDict(raw);\n }\n\n async *iter(frameworkSlug: string, opts: { perPage?: number } = {}): AsyncGenerator<AnnexSummary> {\n yield* this._iterPages(\n ({ page, perPage }) => this.list(frameworkSlug, { page, perPage }),\n opts.perPage,\n );\n }\n}\n","export interface SearchResult {\n type: string;\n frameworkSlug: string;\n frameworkName: string;\n articleNumber: string | null;\n recitalNumber: string | null;\n paragraphRef: string | null;\n title: string | null;\n requirementType: string | null;\n matchContext: string;\n url: string;\n}\n\nexport function searchResultFromDict(d: Record<string, unknown>): SearchResult {\n const fw = (d['framework'] as Record<string, unknown> | undefined) ?? {};\n return {\n type: (d['type'] as string) ?? '',\n frameworkSlug: (d['framework_slug'] as string) ?? '',\n frameworkName: (d['framework_name'] as string) ?? (fw['name'] as string) ?? '',\n articleNumber: (d['article_number'] as string | null) ?? null,\n recitalNumber: (d['recital_number'] as string | null) ?? null,\n paragraphRef: (d['paragraph_ref'] as string | null) ?? null,\n title: (d['title'] as string | null) ?? null,\n requirementType: (d['requirement_type'] as string | null) ?? null,\n matchContext: (d['match_context'] as string) ?? '',\n url: (d['url'] as string) ?? '',\n };\n}\n","import { BaseResource } from './base.js';\nimport { searchResultFromDict, type SearchResult } from '../types/search.js';\nimport type { Page } from '../pagination.js';\n\nexport class SearchResource extends BaseResource {\n async query(\n q: string,\n opts: { framework?: string; resultType?: string; page?: number; perPage?: number } = {},\n ): Promise<Page<SearchResult>> {\n const params: Record<string, string | number | undefined> = {\n q,\n ...this.pageParams(opts.page, opts.perPage),\n };\n if (opts.framework) params['framework'] = opts.framework;\n if (opts.resultType) params['type'] = opts.resultType;\n const raw = await this._http.get<Record<string, unknown>>('/search', params);\n return this.parsePage(raw, searchResultFromDict);\n }\n\n async *iter(\n q: string,\n opts: { perPage?: number; framework?: string; resultType?: string } = {},\n ): AsyncGenerator<SearchResult> {\n yield* this._iterPages(\n ({ page, perPage }) => this.query(q, { page, perPage, framework: opts.framework, resultType: opts.resultType }),\n opts.perPage,\n );\n }\n}\n","import { HTTPClient, DEFAULT_BASE_URL, type HTTPClientOptions } from './http.js';\nimport { FrameworksResource } from './resources/frameworks.js';\nimport { ArticlesResource } from './resources/articles.js';\nimport { RecitalsResource } from './resources/recitals.js';\nimport { RequirementsResource } from './resources/requirements.js';\nimport { TagsResource } from './resources/tags.js';\nimport { ComplianceResource } from './resources/compliance.js';\nimport { AnnexesResource } from './resources/annexes.js';\nimport { SearchResource } from './resources/search.js';\n\nexport interface Law4DevsClientOptions {\n baseUrl?: string;\n apiKey?: string;\n timeout?: number;\n maxRetries?: number;\n}\n\nexport class Law4DevsClient {\n readonly _http: HTTPClient;\n readonly frameworks: FrameworksResource;\n readonly articles: ArticlesResource;\n readonly recitals: RecitalsResource;\n readonly requirements: RequirementsResource;\n readonly tags: TagsResource;\n readonly compliance: ComplianceResource;\n readonly annexes: AnnexesResource;\n readonly search: SearchResource;\n\n constructor(options: Law4DevsClientOptions = {}) {\n this._http = new HTTPClient(options);\n this.frameworks = new FrameworksResource(this._http);\n this.articles = new ArticlesResource(this._http);\n this.recitals = new RecitalsResource(this._http);\n this.requirements = new RequirementsResource(this._http);\n this.tags = new TagsResource(this._http);\n this.compliance = new ComplianceResource(this._http);\n this.annexes = new AnnexesResource(this._http);\n this.search = new SearchResource(this._http);\n }\n}\n"],"mappings":"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","names":[]}