@opencraw/core 0.1.2 → 0.1.4
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/README.md +1 -1
- package/dist/access/access-broker.use-case.d.ts +43 -0
- package/dist/access/access-config.error.d.ts +5 -0
- package/dist/access/access-config.repository.d.ts +11 -0
- package/dist/access/access-json-schema.mapper.d.ts +8 -0
- package/dist/access/access-plugin.contract.d.ts +48 -0
- package/dist/access/access-preset.store.d.ts +19 -0
- package/dist/access/access-profile.contract.d.ts +95 -0
- package/dist/access/index.d.ts +11 -0
- package/dist/access/render-access.mapper.d.ts +41 -0
- package/dist/access/session-id.algorithm.d.ts +8 -0
- package/dist/api-steps/extract-from-document.use-case.d.ts +41 -0
- package/dist/api-steps/index.d.ts +4 -0
- package/dist/api-steps/run-api-step.use-case.d.ts +20 -0
- package/dist/api-steps/send-request.use-case.d.ts +23 -0
- package/dist/browser-session/browser-profile.store.d.ts +52 -0
- package/dist/browser-session/browser-session.config.d.ts +21 -0
- package/dist/browser-session/browser.client.d.ts +75 -0
- package/dist/browser-session/index.d.ts +6 -0
- package/dist/captcha/captcha-budget.model.d.ts +21 -0
- package/dist/captcha/captcha-detection.client.d.ts +28 -0
- package/dist/captcha/captcha-guard.use-case.d.ts +64 -0
- package/dist/captcha/captcha-solver-registry.store.d.ts +19 -0
- package/dist/captcha/captcha-solver.contract.d.ts +47 -0
- package/dist/captcha/captcha.error.d.ts +13 -0
- package/dist/captcha/index.d.ts +10 -0
- package/dist/captcha/resolve-captcha.use-case.d.ts +40 -0
- package/dist/crawl-events/crawl-event.contract.d.ts +169 -0
- package/dist/crawl-events/event-bus.store.d.ts +10 -0
- package/dist/crawl-events/index.d.ts +4 -0
- package/dist/crawl-events/trace-line.mapper.d.ts +14 -0
- package/dist/crawl-execution/bootstrap-session.use-case.d.ts +79 -0
- package/dist/crawl-execution/crawl-options.config.d.ts +67 -0
- package/dist/crawl-execution/crawl-report.model.d.ts +33 -0
- package/dist/crawl-execution/create-crawler.use-case.d.ts +20 -0
- package/dist/crawl-execution/index.d.ts +8 -0
- package/dist/crawl-execution/rotating-runner.use-case.d.ts +66 -0
- package/dist/crawl-execution/run-crawl.use-case.d.ts +17 -0
- package/dist/crawl-execution/run-input-recipe.use-case.d.ts +51 -0
- package/dist/deck-document/deck-document.model.d.ts +58 -0
- package/dist/deck-document/deck-table.algorithm.d.ts +35 -0
- package/dist/deck-document/index.d.ts +6 -0
- package/dist/deck-document/read-pptx.client.d.ts +16 -0
- package/dist/docx-document/index.d.ts +2 -0
- package/dist/docx-document/read-docx-html.client.d.ts +23 -0
- package/dist/extraction-scope/extraction-scope.model.d.ts +77 -0
- package/dist/extraction-scope/index.d.ts +5 -0
- package/dist/extraction-scope/live-element.model.d.ts +28 -0
- package/dist/hooks/hook-registry.store.d.ts +16 -0
- package/dist/hooks/hook.contract.d.ts +17 -0
- package/dist/hooks/hook.error.d.ts +7 -0
- package/dist/hooks/index.d.ts +4 -0
- package/dist/http-session/http-response.contract.d.ts +58 -0
- package/dist/http-session/http.client.d.ts +42 -0
- package/dist/http-session/index.d.ts +5 -0
- package/dist/http-session/text-decoding.algorithm.d.ts +35 -0
- package/dist/index.esm.js +1410 -95
- package/dist/markdown-document/index.d.ts +3 -0
- package/dist/markdown-document/read-markdown.client.d.ts +39 -0
- package/dist/output-mapping/coerce-field.mapper.d.ts +19 -0
- package/dist/output-mapping/generated-field.mapper.d.ts +16 -0
- package/dist/output-mapping/index.d.ts +9 -0
- package/dist/output-mapping/map-record.use-case.d.ts +27 -0
- package/dist/output-mapping/mapping.error.d.ts +17 -0
- package/dist/output-mapping/missing-value.policy.d.ts +14 -0
- package/dist/output-mapping/output-field.validator.d.ts +10 -0
- package/dist/output-mapping/output-record.model.d.ts +20 -0
- package/dist/pdf-document/index.d.ts +7 -0
- package/dist/pdf-document/pdf-document.model.d.ts +51 -0
- package/dist/pdf-document/pdf-table.algorithm.d.ts +43 -0
- package/dist/pdf-document/read-pdf.client.d.ts +18 -0
- package/dist/pdf-document/row-assembly.algorithm.d.ts +26 -0
- package/dist/recipe-loading/index.d.ts +9 -0
- package/dist/recipe-loading/load-recipe-set.use-case.d.ts +45 -0
- package/dist/recipe-loading/read-recipe-source.use-case.d.ts +14 -0
- package/dist/recipe-loading/recipe-binding.error.d.ts +14 -0
- package/dist/recipe-loading/recipe-binding.validator.d.ts +34 -0
- package/dist/recipe-loading/recipe-file.repository.d.ts +11 -0
- package/dist/recipe-loading/recipe-set.model.d.ts +12 -0
- package/dist/recipe-loading/recipe-source.contract.d.ts +28 -0
- package/dist/recipe-loading/recipe-text.mapper.d.ts +14 -0
- package/dist/recipe-schema/index.d.ts +15 -0
- package/dist/recipe-schema/input-recipe.contract.d.ts +156 -0
- package/dist/recipe-schema/json-schema.mapper.d.ts +15 -0
- package/dist/recipe-schema/output-recipe.contract.d.ts +47 -0
- package/dist/recipe-schema/recipe-kind.enum.d.ts +35 -0
- package/dist/recipe-schema/recipe-validation.error.d.ts +17 -0
- package/dist/recipe-schema/recipe.validator.d.ts +28 -0
- package/dist/recipe-schema/step.contract.d.ts +206 -0
- package/dist/recipe-schema/transform-rule.contract.d.ts +120 -0
- package/dist/record-diff/index.d.ts +4 -0
- package/dist/record-diff/record-diff.algorithm.d.ts +82 -0
- package/dist/record-diff/records-file.repository.d.ts +10 -0
- package/dist/record-sink/dedupe.policy.d.ts +29 -0
- package/dist/record-sink/index.d.ts +9 -0
- package/dist/record-sink/json-lines-sink.repository.d.ts +19 -0
- package/dist/record-sink/memory-sink.repository.d.ts +9 -0
- package/dist/record-sink/record-sink.contract.d.ts +17 -0
- package/dist/selection/html-selector.algorithm.d.ts +19 -0
- package/dist/selection/index.d.ts +8 -0
- package/dist/selection/json-path.algorithm.d.ts +9 -0
- package/dist/selection/json-text.algorithm.d.ts +58 -0
- package/dist/selection/regex.algorithm.d.ts +12 -0
- package/dist/selection/take-value.mapper.d.ts +27 -0
- package/dist/src/access/access-profile.contract.d.ts +4 -0
- package/dist/src/access/index.d.ts +1 -1
- package/dist/src/api-steps/extract-from-document.use-case.d.ts +5 -5
- package/dist/src/api-steps/send-request.use-case.d.ts +3 -2
- package/dist/src/browser-session/browser-profile.store.d.ts +52 -0
- package/dist/src/browser-session/browser.client.d.ts +8 -0
- package/dist/src/browser-session/index.d.ts +1 -0
- package/dist/src/crawl-events/crawl-event.contract.d.ts +8 -0
- package/dist/src/crawl-execution/bootstrap-session.use-case.d.ts +23 -2
- package/dist/src/crawl-execution/crawl-options.config.d.ts +27 -0
- package/dist/src/crawl-execution/rotating-runner.use-case.d.ts +9 -0
- package/dist/src/crawl-execution/run-crawl.use-case.d.ts +6 -2
- package/dist/src/crawl-execution/run-input-recipe.use-case.d.ts +11 -3
- package/dist/src/docx-document/index.d.ts +2 -0
- package/dist/src/docx-document/read-docx-html.client.d.ts +23 -0
- package/dist/src/extraction-scope/extraction-scope.model.d.ts +2 -1
- package/dist/src/http-session/http-response.contract.d.ts +2 -1
- package/dist/src/index.d.ts +9 -4
- package/dist/src/markdown-document/index.d.ts +1 -1
- package/dist/src/markdown-document/read-markdown.client.d.ts +10 -0
- package/dist/src/recipe-schema/index.d.ts +2 -2
- package/dist/src/recipe-schema/input-recipe.contract.d.ts +24 -1
- package/dist/src/recipe-schema/recipe-kind.enum.d.ts +1 -1
- package/dist/src/recipe-schema/step.contract.d.ts +4 -0
- package/dist/src/record-diff/index.d.ts +4 -0
- package/dist/src/record-diff/record-diff.algorithm.d.ts +82 -0
- package/dist/src/record-diff/records-file.repository.d.ts +10 -0
- package/dist/src/record-sink/dedupe.policy.d.ts +19 -7
- package/dist/src/record-sink/index.d.ts +1 -0
- package/dist/src/selection/html-selector.algorithm.d.ts +2 -1
- package/dist/src/step-flow/for-each.use-case.d.ts +4 -2
- package/dist/src/step-flow/host-throttle.policy.d.ts +49 -0
- package/dist/src/step-flow/index.d.ts +5 -0
- package/dist/src/step-flow/run-gate.policy.d.ts +12 -1
- package/dist/src/step-flow/step-runner.contract.d.ts +13 -0
- package/dist/src/step-flow/transport-retry.policy.d.ts +76 -0
- package/dist/src/web-steps/navigate.use-case.d.ts +3 -2
- package/dist/src/web-steps/run-web-step.use-case.d.ts +8 -1
- package/dist/src/xml-document/index.d.ts +6 -0
- package/dist/src/xml-document/xml-document.model.d.ts +13 -0
- package/dist/src/xml-document/xml-parser.client.d.ts +49 -0
- package/dist/src/xml-document/xpath.algorithm.d.ts +30 -0
- package/dist/step-flow/block-rule.policy.d.ts +21 -0
- package/dist/step-flow/blocked.error.d.ts +9 -0
- package/dist/step-flow/for-each.use-case.d.ts +20 -0
- package/dist/step-flow/host-throttle.policy.d.ts +49 -0
- package/dist/step-flow/index.d.ts +15 -0
- package/dist/step-flow/paginate.use-case.d.ts +17 -0
- package/dist/step-flow/retry.policy.d.ts +21 -0
- package/dist/step-flow/run-gate.policy.d.ts +50 -0
- package/dist/step-flow/run-steps.use-case.d.ts +39 -0
- package/dist/step-flow/step-failure.error.d.ts +14 -0
- package/dist/step-flow/step-runner.contract.d.ts +52 -0
- package/dist/step-flow/transport-retry.policy.d.ts +76 -0
- package/dist/template/expression.algorithm.d.ts +53 -0
- package/dist/template/index.d.ts +7 -0
- package/dist/template/template.algorithm.d.ts +53 -0
- package/dist/template/value-path.algorithm.d.ts +29 -0
- package/dist/template/value-text.algorithm.d.ts +18 -0
- package/dist/transformation/apply-transform-chain.use-case.d.ts +17 -0
- package/dist/transformation/collection.algorithm.d.ts +15 -0
- package/dist/transformation/currency.algorithm.d.ts +15 -0
- package/dist/transformation/date.algorithm.d.ts +13 -0
- package/dist/transformation/index.d.ts +10 -0
- package/dist/transformation/lookup.algorithm.d.ts +24 -0
- package/dist/transformation/number.algorithm.d.ts +30 -0
- package/dist/transformation/string.algorithm.d.ts +18 -0
- package/dist/transformation/transform-registry.store.d.ts +36 -0
- package/dist/transformation/transform.error.d.ts +8 -0
- package/dist/transformation/url.algorithm.d.ts +20 -0
- package/dist/web-steps/evaluate-script.use-case.d.ts +10 -0
- package/dist/web-steps/extract-from-page.use-case.d.ts +10 -0
- package/dist/web-steps/index.d.ts +2 -0
- package/dist/web-steps/interact.use-case.d.ts +36 -0
- package/dist/web-steps/navigate.use-case.d.ts +15 -0
- package/dist/web-steps/run-web-step.use-case.d.ts +37 -0
- package/dist/web-steps/snapshot-elements.use-case.d.ts +13 -0
- package/dist/workbook-document/csv-parser.algorithm.d.ts +26 -0
- package/dist/workbook-document/csv-workbook.mapper.d.ts +24 -0
- package/dist/workbook-document/grid-table.algorithm.d.ts +53 -0
- package/dist/workbook-document/html-tables.mapper.d.ts +14 -0
- package/dist/workbook-document/index.d.ts +9 -0
- package/dist/workbook-document/read-xlsx.client.d.ts +18 -0
- package/dist/workbook-document/workbook-document.model.d.ts +51 -0
- package/dist/xml-document/index.d.ts +6 -0
- package/dist/xml-document/xml-document.model.d.ts +13 -0
- package/dist/xml-document/xml-parser.client.d.ts +49 -0
- package/dist/xml-document/xpath.algorithm.d.ts +30 -0
- package/dist/yaml-document/index.d.ts +3 -0
- package/dist/yaml-document/read-yaml.client.d.ts +25 -0
- package/package.json +4 -2
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/** Markdown, rendered. */
|
|
2
|
+
export interface MarkdownRead {
|
|
3
|
+
/** A full HTML document: front matter in the head, the rendered body wrapped in sections. */
|
|
4
|
+
html: string;
|
|
5
|
+
/** The front matter's data, when there is some. */
|
|
6
|
+
frontMatter: unknown;
|
|
7
|
+
warnings: string[];
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Renders Markdown (GitHub-flavoured: tables, task lists, strikethrough,
|
|
11
|
+
* autolinks) to HTML with `marked`, imported on first use, so every `css`
|
|
12
|
+
* selector works on it:
|
|
13
|
+
*
|
|
14
|
+
* - each heading and everything up to the next heading of the same or a higher
|
|
15
|
+
* level is wrapped in `<section data-heading="…" data-level="…">`, sections
|
|
16
|
+
* nesting, so "the table under *Prezzi*" is one selector;
|
|
17
|
+
* - headings get slug ids (`<h2 id="prezzi">`);
|
|
18
|
+
* - a leading `---` YAML block is parsed (YAML 1.2, as `as: "yaml"` reads it)
|
|
19
|
+
* and put in the head as `<script type="application/json" data-front-matter>`.
|
|
20
|
+
*
|
|
21
|
+
* Raw HTML in the Markdown is kept: it is data, parsed by cheerio, never run.
|
|
22
|
+
*
|
|
23
|
+
* @param text - The Markdown.
|
|
24
|
+
* @param source - Where it came from, for messages.
|
|
25
|
+
* @returns The HTML, the front matter's data and the YAML parser's warnings.
|
|
26
|
+
* @throws Error naming the source when the front matter is not YAML.
|
|
27
|
+
*/
|
|
28
|
+
export declare function readMarkdown(text: string, source: string): Promise<MarkdownRead>;
|
|
29
|
+
/**
|
|
30
|
+
* Wraps each heading and what follows it, up to the next heading of the same
|
|
31
|
+
* or a higher level, in `<section data-heading="…" data-level="…">`, sections
|
|
32
|
+
* nesting; headings get slug ids. Rendered Markdown and Word documents both go
|
|
33
|
+
* through it, so one selector finds "the table under *Prezzi*" in either.
|
|
34
|
+
*
|
|
35
|
+
* @param html - Top-level HTML: headings among paragraphs, lists, tables.
|
|
36
|
+
* @returns The same content, sectioned.
|
|
37
|
+
*/
|
|
38
|
+
export declare function sectioned(html: string): string;
|
|
39
|
+
//# sourceMappingURL=read-markdown.client.d.ts.map
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { FieldSpec } from '../recipe-schema/index.js';
|
|
2
|
+
/** A value that cannot become the field's type. */
|
|
3
|
+
export declare class CoercionError extends Error {
|
|
4
|
+
readonly path: string;
|
|
5
|
+
readonly name = "CoercionError";
|
|
6
|
+
constructor(path: string, reason: string);
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Converts a transformed value into the field's declared type.
|
|
10
|
+
* `null` and `undefined` pass through: missing-value policies decide about them.
|
|
11
|
+
*
|
|
12
|
+
* @param value - The value after its transform chain.
|
|
13
|
+
* @param field - The output field.
|
|
14
|
+
* @param path - Where the field is, for messages.
|
|
15
|
+
* @returns The coerced value.
|
|
16
|
+
* @throws CoercionError when the conversion is impossible.
|
|
17
|
+
*/
|
|
18
|
+
export declare function coerceValue(value: unknown, field: FieldSpec, path: string): unknown;
|
|
19
|
+
//# sourceMappingURL=coerce-field.mapper.d.ts.map
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { GeneratedValue } from '../recipe-schema/index.js';
|
|
2
|
+
/** What generated fields are produced from. */
|
|
3
|
+
export interface GenerationSource {
|
|
4
|
+
recipeId: string;
|
|
5
|
+
url: string;
|
|
6
|
+
emittedAt: string;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* The engine-supplied value of a generated field.
|
|
10
|
+
*
|
|
11
|
+
* @param kind - Which value.
|
|
12
|
+
* @param source - Where the record came from.
|
|
13
|
+
* @returns The value.
|
|
14
|
+
*/
|
|
15
|
+
export declare function generatedValue(kind: GeneratedValue, source: GenerationSource): unknown;
|
|
16
|
+
//# sourceMappingURL=generated-field.mapper.d.ts.map
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export { mapRecord } from './map-record.use-case.js';
|
|
2
|
+
export type { MapRecordRequest } from './map-record.use-case.js';
|
|
3
|
+
export type { OutputRecord } from './output-record.model.js';
|
|
4
|
+
export { recordKey } from './output-record.model.js';
|
|
5
|
+
export { RecordRejectedError, MappingFailedError } from './mapping.error.js';
|
|
6
|
+
export { coerceValue, CoercionError } from './coerce-field.mapper.js';
|
|
7
|
+
export { validateField } from './output-field.validator.js';
|
|
8
|
+
export { resolveMissingPolicy, isMissing } from './missing-value.policy.js';
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { HookRegistry } from '../hooks/index.js';
|
|
2
|
+
import type { InputRecipe, OutputRecipe } from '../recipe-schema/index.js';
|
|
3
|
+
import type { TransformContext } from '../transformation/index.js';
|
|
4
|
+
import type { OutputRecord } from './output-record.model.js';
|
|
5
|
+
/** Everything needed to turn one emitted scope snapshot into a record. */
|
|
6
|
+
export interface MapRecordRequest {
|
|
7
|
+
snapshot: Record<string, unknown>;
|
|
8
|
+
input: InputRecipe;
|
|
9
|
+
output: OutputRecipe;
|
|
10
|
+
hooks: HookRegistry;
|
|
11
|
+
/** The page URL at emit time. */
|
|
12
|
+
url: string;
|
|
13
|
+
emittedAt?: string;
|
|
14
|
+
log?: TransformContext['log'];
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Maps an emitted scope snapshot to a validated output record: resolves every
|
|
18
|
+
* mapping rule, runs its transform chain, fills generated fields, then coerces
|
|
19
|
+
* and validates each output field and applies the missing-value policy.
|
|
20
|
+
*
|
|
21
|
+
* @param request - The snapshot and the recipes.
|
|
22
|
+
* @returns The record.
|
|
23
|
+
* @throws RecordRejectedError when a field's policy is `skip-record`.
|
|
24
|
+
* @throws MappingFailedError when a field's policy is `fail`, or a transform throws.
|
|
25
|
+
*/
|
|
26
|
+
export declare function mapRecord(request: MapRecordRequest): Promise<OutputRecord>;
|
|
27
|
+
//# sourceMappingURL=map-record.use-case.d.ts.map
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/** A record that does not satisfy its output recipe and is dropped (policy `skip-record`). */
|
|
2
|
+
export declare class RecordRejectedError extends Error {
|
|
3
|
+
readonly field: string;
|
|
4
|
+
readonly reason: string;
|
|
5
|
+
readonly name = "RecordRejectedError";
|
|
6
|
+
constructor(field: string, reason: string);
|
|
7
|
+
}
|
|
8
|
+
/** A record that does not satisfy its output recipe under policy `fail`: the recipe stops. */
|
|
9
|
+
export declare class MappingFailedError extends Error {
|
|
10
|
+
readonly field: string;
|
|
11
|
+
readonly reason: string;
|
|
12
|
+
readonly name = "MappingFailedError";
|
|
13
|
+
constructor(field: string, reason: string, options?: {
|
|
14
|
+
cause?: unknown;
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=mapping.error.d.ts.map
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { FieldSpec, MappingRule, MissingPolicy, OutputRecipe } from '../recipe-schema/index.js';
|
|
2
|
+
/** Whether a mapped value counts as missing. An empty list is a value. */
|
|
3
|
+
export declare function isMissing(value: unknown): boolean;
|
|
4
|
+
/**
|
|
5
|
+
* The policy for a missing value: mapping rule, then field, then recipe, then
|
|
6
|
+
* `default` when the field has one, `fail` when it is required, `null` otherwise.
|
|
7
|
+
*
|
|
8
|
+
* @param field - The output field.
|
|
9
|
+
* @param recipe - The output recipe.
|
|
10
|
+
* @param rule - The mapping rule that produced the value, if any.
|
|
11
|
+
* @returns The policy to apply.
|
|
12
|
+
*/
|
|
13
|
+
export declare function resolveMissingPolicy(field: FieldSpec, recipe: OutputRecipe, rule?: MappingRule): MissingPolicy;
|
|
14
|
+
//# sourceMappingURL=missing-value.policy.d.ts.map
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { FieldSpec } from '../recipe-schema/index.js';
|
|
2
|
+
/**
|
|
3
|
+
* Checks a present, coerced value against the field's quality rules.
|
|
4
|
+
*
|
|
5
|
+
* @param value - A non-missing coerced value.
|
|
6
|
+
* @param field - The output field.
|
|
7
|
+
* @returns Every violated rule, as messages; empty when valid.
|
|
8
|
+
*/
|
|
9
|
+
export declare function validateField(value: unknown, field: FieldSpec): string[];
|
|
10
|
+
//# sourceMappingURL=output-field.validator.d.ts.map
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/** One record a crawl produced, validated against its output recipe. */
|
|
2
|
+
export interface OutputRecord {
|
|
3
|
+
data: Record<string, unknown>;
|
|
4
|
+
/** The identity from the output's `key` fields, `null` when the output declares none. */
|
|
5
|
+
key: string | null;
|
|
6
|
+
source: {
|
|
7
|
+
recipeId: string;
|
|
8
|
+
url: string;
|
|
9
|
+
emittedAt: string;
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* The identity of a record: its key field values, in output order, as one string.
|
|
14
|
+
*
|
|
15
|
+
* @param data - The validated record data.
|
|
16
|
+
* @param keyFields - The output fields marked `key`.
|
|
17
|
+
* @returns The key, or `null` when there are no key fields.
|
|
18
|
+
*/
|
|
19
|
+
export declare function recordKey(data: Record<string, unknown>, keyFields: readonly string[]): string | null;
|
|
20
|
+
//# sourceMappingURL=output-record.model.d.ts.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export { readPdf, PdfReadError } from './read-pdf.client.js';
|
|
2
|
+
export { pdfText, isPdfDocument } from './pdf-document.model.js';
|
|
3
|
+
export type { PdfDocument, PdfPage, PdfRow, PdfCell, PositionedText } from './pdf-document.model.js';
|
|
4
|
+
export { assembleRows, rowsOfCells } from './row-assembly.algorithm.js';
|
|
5
|
+
export { findTables } from './pdf-table.algorithm.js';
|
|
6
|
+
export type { PdfTable, TableQuery, TableAlign } from './pdf-table.algorithm.js';
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/** A run of text at a position on a page, in PDF points, y growing upwards from the bottom edge. */
|
|
2
|
+
export interface PositionedText {
|
|
3
|
+
x: number;
|
|
4
|
+
/** The baseline. */
|
|
5
|
+
y: number;
|
|
6
|
+
width: number;
|
|
7
|
+
/** The font size: the text spans roughly `y` to `y + height`. */
|
|
8
|
+
height: number;
|
|
9
|
+
text: string;
|
|
10
|
+
}
|
|
11
|
+
/** One or more text runs that sit side by side on one baseline: a table cell, a label, a value. */
|
|
12
|
+
export type PdfCell = PositionedText;
|
|
13
|
+
/** Cells whose vertical extents overlap: one visual line, which in a table is one row. */
|
|
14
|
+
export interface PdfRow {
|
|
15
|
+
/** The top of the highest cell. */
|
|
16
|
+
top: number;
|
|
17
|
+
/** The baseline of the lowest cell. */
|
|
18
|
+
bottom: number;
|
|
19
|
+
/** The cells, left to right. */
|
|
20
|
+
cells: PdfCell[];
|
|
21
|
+
/** The cells' texts joined by a tab, left to right. */
|
|
22
|
+
text: string;
|
|
23
|
+
}
|
|
24
|
+
export interface PdfPage {
|
|
25
|
+
number: number;
|
|
26
|
+
width: number;
|
|
27
|
+
height: number;
|
|
28
|
+
/** Top to bottom. Empty on a page with no text layer (a scan). */
|
|
29
|
+
rows: PdfRow[];
|
|
30
|
+
}
|
|
31
|
+
/** A PDF read into rows of positioned text: what `extract` works on. */
|
|
32
|
+
export interface PdfDocument {
|
|
33
|
+
kind: 'pdf';
|
|
34
|
+
pages: PdfPage[];
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* The text a `regex` extract reads: one line per row (cells separated by a
|
|
38
|
+
* tab), pages separated by a blank line.
|
|
39
|
+
*
|
|
40
|
+
* @param document - The PDF.
|
|
41
|
+
* @returns The text.
|
|
42
|
+
*/
|
|
43
|
+
export declare function pdfText(document: PdfDocument): string;
|
|
44
|
+
/**
|
|
45
|
+
* Whether a value bound in scope is a read PDF (so `extract … from` can take it).
|
|
46
|
+
*
|
|
47
|
+
* @param value - Anything.
|
|
48
|
+
* @returns Whether it is a {@link PdfDocument}.
|
|
49
|
+
*/
|
|
50
|
+
export declare function isPdfDocument(value: unknown): value is PdfDocument;
|
|
51
|
+
//# sourceMappingURL=pdf-document.model.d.ts.map
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import type { PdfDocument } from './pdf-document.model.js';
|
|
2
|
+
/** What a table extract looks for. */
|
|
3
|
+
export interface TableQuery {
|
|
4
|
+
/** Matches a table's header row, its cells joined by spaces (`^MODELLI`). */
|
|
5
|
+
header: RegExp;
|
|
6
|
+
/** Matches the row that ends a table (`^NOTA BENE`); a table also ends at the next header or the page's end. */
|
|
7
|
+
until?: RegExp;
|
|
8
|
+
/** Output key -> a pattern for the header cell of that column; unmatched columns are dropped. Without it, the header texts are the keys. */
|
|
9
|
+
columns?: Record<string, RegExp>;
|
|
10
|
+
/** How the table aligns a row's values against a cell wrapped over several lines; `auto` (the default) infers it. */
|
|
11
|
+
align?: TableAlign;
|
|
12
|
+
}
|
|
13
|
+
/** Where a row's values sit against a cell wrapped over several lines. */
|
|
14
|
+
export type TableAlign = 'auto' | 'top' | 'center' | 'bottom';
|
|
15
|
+
/** One table found in a PDF. */
|
|
16
|
+
export interface PdfTable {
|
|
17
|
+
page: number;
|
|
18
|
+
/** The first header cell: the table's name when it has one (`MODELLI FIAT`). */
|
|
19
|
+
title: string;
|
|
20
|
+
/** The header cells, left to right. */
|
|
21
|
+
header: string[];
|
|
22
|
+
/** One object per row, keyed by column; a cell's lines are joined by spaces. */
|
|
23
|
+
rows: Record<string, string>[];
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Finds every table whose header row matches, and reads its rows by column.
|
|
27
|
+
*
|
|
28
|
+
* Columns come from the body, not the header: a header is often centred over
|
|
29
|
+
* a column whose cells are left-aligned, so the header's position says little
|
|
30
|
+
* about where the column starts. The left edges of the body cells cluster into
|
|
31
|
+
* bands; each band belongs to the header cell that overlaps it most, or the
|
|
32
|
+
* nearest one when none does. A header spanning two columns reads both.
|
|
33
|
+
*
|
|
34
|
+
* A cell wrapped over several lines (a long name, a note, a list of versions)
|
|
35
|
+
* spreads one row over several lines, its values often centred beside it:
|
|
36
|
+
* the lines are regrouped into rows around the lines that carry values.
|
|
37
|
+
*
|
|
38
|
+
* @param document - The PDF.
|
|
39
|
+
* @param query - Which tables, and how to name their columns.
|
|
40
|
+
* @returns The tables, in page order.
|
|
41
|
+
*/
|
|
42
|
+
export declare function findTables(document: PdfDocument, query: TableQuery): PdfTable[];
|
|
43
|
+
//# sourceMappingURL=pdf-table.algorithm.d.ts.map
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { PdfDocument } from './pdf-document.model.js';
|
|
2
|
+
/** A PDF that cannot be read: not a PDF, encrypted, or with no text to read. */
|
|
3
|
+
export declare class PdfReadError extends Error {
|
|
4
|
+
readonly name = "PdfReadError";
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Reads a PDF's text layer into rows of positioned cells, with pdf.js. pdf.js
|
|
8
|
+
* is imported on first use, so recipes that never read a PDF never load it.
|
|
9
|
+
* Only text is read: no page is rendered, no script runs, no font is loaded.
|
|
10
|
+
*
|
|
11
|
+
* @param bytes - The file.
|
|
12
|
+
* @param source - Where it came from, for messages.
|
|
13
|
+
* @returns The document.
|
|
14
|
+
* @throws PdfReadError when the bytes are not a readable PDF, or no page has a
|
|
15
|
+
* text layer (a scan: OCR is not supported).
|
|
16
|
+
*/
|
|
17
|
+
export declare function readPdf(bytes: Uint8Array, source?: string): Promise<PdfDocument>;
|
|
18
|
+
//# sourceMappingURL=read-pdf.client.d.ts.map
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { PdfCell, PdfRow, PositionedText } from './pdf-document.model.js';
|
|
2
|
+
/**
|
|
3
|
+
* Turns a page's text runs into rows of cells, top to bottom.
|
|
4
|
+
*
|
|
5
|
+
* Runs on one baseline that nearly touch become one cell. Cells whose vertical
|
|
6
|
+
* extents overlap become one row, even when their baselines differ: a table
|
|
7
|
+
* that centres its cells vertically puts a one-line value a few points above
|
|
8
|
+
* or below its two-line label, and a row built from equal baselines would pair
|
|
9
|
+
* the value with the wrong label.
|
|
10
|
+
*
|
|
11
|
+
* @param runs - The page's text runs, in any order.
|
|
12
|
+
* @returns The rows.
|
|
13
|
+
*/
|
|
14
|
+
export declare function assembleRows(runs: readonly PositionedText[]): PdfRow[];
|
|
15
|
+
/**
|
|
16
|
+
* Groups finished cells into rows, top to bottom: cells whose vertical extents
|
|
17
|
+
* overlap share a row. For cells that need no joining, such as a slide's text
|
|
18
|
+
* boxes, each already a cell.
|
|
19
|
+
*
|
|
20
|
+
* @param cells - The cells, in any order.
|
|
21
|
+
* @returns The rows.
|
|
22
|
+
*/
|
|
23
|
+
export declare function rowsOfCells(cells: readonly PdfCell[]): PdfRow[];
|
|
24
|
+
/** `Array#findLast`, which the es2022 library does not declare. */
|
|
25
|
+
export declare function lastOf<T>(items: readonly T[], test: (item: T) => boolean): T | undefined;
|
|
26
|
+
//# sourceMappingURL=row-assembly.algorithm.d.ts.map
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export { loadRecipeSet, loadRecipes, bindRecipeSet } from './load-recipe-set.use-case.js';
|
|
2
|
+
export type { RecipeSetSource } from './load-recipe-set.use-case.js';
|
|
3
|
+
export { readRecipeSource } from './read-recipe-source.use-case.js';
|
|
4
|
+
export type { RecipeSource, RecipeBytes, RecipeDocument } from './recipe-source.contract.js';
|
|
5
|
+
export { RecipeSet } from './recipe-set.model.js';
|
|
6
|
+
export { validateBinding, fieldAt } from './recipe-binding.validator.js';
|
|
7
|
+
export { RecipeBindingError } from './recipe-binding.error.js';
|
|
8
|
+
export type { BindingIssue } from './recipe-binding.error.js';
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import type { InputRecipe, OutputRecipe } from '../recipe-schema/index.js';
|
|
2
|
+
import type { RecipeSource } from './recipe-source.contract.js';
|
|
3
|
+
import { RecipeSet } from './recipe-set.model.js';
|
|
4
|
+
/** What to load, with the output recipe kept apart from the inputs. */
|
|
5
|
+
export interface RecipeSetSource {
|
|
6
|
+
/** The output recipe, or a source holding exactly one output recipe among others. */
|
|
7
|
+
output: RecipeSource;
|
|
8
|
+
/**
|
|
9
|
+
* The input recipes. The output recipe itself is skipped when found here, so
|
|
10
|
+
* one directory or bundle holding both can be passed as both.
|
|
11
|
+
*/
|
|
12
|
+
inputs: readonly RecipeSource[];
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Loads, validates and binds one output recipe with its input recipes.
|
|
16
|
+
*
|
|
17
|
+
* @param source - Where the recipes are; each part takes any {@link RecipeSource}.
|
|
18
|
+
* @returns A bound set, inputs in the order given.
|
|
19
|
+
* @throws RecipeValidationError when a recipe does not match its contract.
|
|
20
|
+
* @throws RecipeBindingError when an input cannot feed the output.
|
|
21
|
+
*/
|
|
22
|
+
export declare function loadRecipeSet(source: RecipeSetSource): Promise<RecipeSet>;
|
|
23
|
+
/**
|
|
24
|
+
* Loads, validates and binds recipes from one source holding all of them, the
|
|
25
|
+
* output recipe told apart from the inputs by its `kind`: a directory, a JSON
|
|
26
|
+
* Lines file or string, a `Blob` or `Buffer` of either, or an array of recipe
|
|
27
|
+
* objects.
|
|
28
|
+
*
|
|
29
|
+
* @param source - Where the recipes are.
|
|
30
|
+
* @returns A bound set, inputs in the order found.
|
|
31
|
+
* @throws Error when the source does not hold exactly one output recipe.
|
|
32
|
+
* @throws RecipeValidationError when a recipe does not match its contract.
|
|
33
|
+
* @throws RecipeBindingError when an input cannot feed the output.
|
|
34
|
+
*/
|
|
35
|
+
export declare function loadRecipes(source: RecipeSource): Promise<RecipeSet>;
|
|
36
|
+
/**
|
|
37
|
+
* Binds already-parsed recipes into a set.
|
|
38
|
+
*
|
|
39
|
+
* @param output - The output recipe.
|
|
40
|
+
* @param inputs - The input recipes.
|
|
41
|
+
* @returns A bound set.
|
|
42
|
+
* @throws RecipeBindingError when an input cannot feed the output.
|
|
43
|
+
*/
|
|
44
|
+
export declare function bindRecipeSet(output: OutputRecipe, inputs: readonly InputRecipe[]): RecipeSet;
|
|
45
|
+
//# sourceMappingURL=load-recipe-set.use-case.d.ts.map
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { RecipeDocument, RecipeSource } from './recipe-source.contract.js';
|
|
2
|
+
/**
|
|
3
|
+
* Reads recipes from any {@link RecipeSource}: paths, JSON or JSON Lines text,
|
|
4
|
+
* bytes, decoded objects, or an array mixing them. Nothing is validated yet;
|
|
5
|
+
* the documents keep where they came from, for error messages.
|
|
6
|
+
*
|
|
7
|
+
* @param source - Where the recipes are.
|
|
8
|
+
* @param label - What to call recipes that did not come from a file.
|
|
9
|
+
* @returns The decoded recipes, in the order given.
|
|
10
|
+
* @throws Error naming the source when a path is missing, text does not
|
|
11
|
+
* decode, or a value is not a recipe source at all.
|
|
12
|
+
*/
|
|
13
|
+
export declare function readRecipeSource(source: RecipeSource, label?: string): Promise<RecipeDocument[]>;
|
|
14
|
+
//# sourceMappingURL=read-recipe-source.use-case.d.ts.map
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/** One problem in how an input recipe binds to its output recipe. */
|
|
2
|
+
export interface BindingIssue {
|
|
3
|
+
recipeId: string;
|
|
4
|
+
/** Where in the input recipe: `mapping.price`, `steps.1.steps.0`, `session.bootstrap.steps.2`. */
|
|
5
|
+
path: string;
|
|
6
|
+
message: string;
|
|
7
|
+
}
|
|
8
|
+
/** An input recipe that parses but cannot feed its output recipe. */
|
|
9
|
+
export declare class RecipeBindingError extends Error {
|
|
10
|
+
readonly issues: readonly BindingIssue[];
|
|
11
|
+
readonly name = "RecipeBindingError";
|
|
12
|
+
constructor(issues: readonly BindingIssue[]);
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=recipe-binding.error.d.ts.map
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { FieldSpec, InputRecipe, OutputRecipe } from '../recipe-schema/index.js';
|
|
2
|
+
import type { BindingIssue } from './recipe-binding.error.js';
|
|
3
|
+
/**
|
|
4
|
+
* Checks that an input recipe can actually feed its output recipe:
|
|
5
|
+
*
|
|
6
|
+
* - every mapping key names an output field (dotted for nested objects), and an
|
|
7
|
+
* `each` rule targets an array of objects;
|
|
8
|
+
* - every `from` / `each` / `over` root is a step id bound anywhere in the
|
|
9
|
+
* recipe, a `forEach` variable, a `paginate` `as` binding, or one of `page`,
|
|
10
|
+
* `start`, `vars` (`emit` snapshots the whole scope chain, so any id can feed
|
|
11
|
+
* the mapping);
|
|
12
|
+
* - every required output field is mapped, defaulted, or generated;
|
|
13
|
+
* - step ids are unique along any path;
|
|
14
|
+
* - web-only steps appear only in web recipes or inside a bootstrap, api-only
|
|
15
|
+
* steps only in api recipes, and `next.selector` only in web mode;
|
|
16
|
+
* - exactly one emitting construct exists on any path (the two branches of an
|
|
17
|
+
* `if` are separate paths);
|
|
18
|
+
* - a `captcha` step, and `onBlock.solve`, have a solver: their own or
|
|
19
|
+
* `session.captcha.solver`.
|
|
20
|
+
*
|
|
21
|
+
* @param input - A parsed input recipe.
|
|
22
|
+
* @param output - The parsed output recipe it names.
|
|
23
|
+
* @returns Every problem found; empty when the recipes bind.
|
|
24
|
+
*/
|
|
25
|
+
export declare function validateBinding(input: InputRecipe, output: OutputRecipe): BindingIssue[];
|
|
26
|
+
/**
|
|
27
|
+
* The output field at a dotted target, walking into `object` members.
|
|
28
|
+
*
|
|
29
|
+
* @param fields - The output recipe's fields.
|
|
30
|
+
* @param target - A mapping key.
|
|
31
|
+
* @returns The field, or `undefined`.
|
|
32
|
+
*/
|
|
33
|
+
export declare function fieldAt(fields: Record<string, FieldSpec>, target: string): FieldSpec | undefined;
|
|
34
|
+
//# sourceMappingURL=recipe-binding.validator.d.ts.map
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { RecipeDocument } from './recipe-source.contract.js';
|
|
2
|
+
/**
|
|
3
|
+
* Reads one recipe file, or every `.json` and `.jsonl` file directly inside a
|
|
4
|
+
* directory. A file holds one recipe, an array of them, or JSON Lines.
|
|
5
|
+
*
|
|
6
|
+
* @param location - A file or directory path.
|
|
7
|
+
* @returns The decoded recipes, files sorted by path.
|
|
8
|
+
* @throws When the path does not exist or a file is neither JSON nor JSON Lines.
|
|
9
|
+
*/
|
|
10
|
+
export declare function readRecipeFiles(location: string): Promise<RecipeDocument[]>;
|
|
11
|
+
//# sourceMappingURL=recipe-file.repository.d.ts.map
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { InputRecipe, OutputRecipe } from '../recipe-schema/index.js';
|
|
2
|
+
/**
|
|
3
|
+
* One output recipe and the input recipes that feed it. The invariant that
|
|
4
|
+
* every input names this output is checked on construction; deeper binding
|
|
5
|
+
* rules live in the binding validator.
|
|
6
|
+
*/
|
|
7
|
+
export declare class RecipeSet {
|
|
8
|
+
readonly output: OutputRecipe;
|
|
9
|
+
readonly inputs: readonly InputRecipe[];
|
|
10
|
+
constructor(output: OutputRecipe, inputs: readonly InputRecipe[]);
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=recipe-set.model.d.ts.map
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Raw bytes holding recipe JSON or JSON Lines, UTF-8: a `Buffer` or any other
|
|
3
|
+
* typed array, an `ArrayBuffer`, a `Blob` or `File`, or a stream of chunks (a
|
|
4
|
+
* Node `Readable`, a web `ReadableStream`, any async iterable of bytes or text).
|
|
5
|
+
*/
|
|
6
|
+
export type RecipeBytes = Blob | ArrayBuffer | ArrayBufferView | AsyncIterable<Uint8Array | string>;
|
|
7
|
+
/**
|
|
8
|
+
* Where recipes come from. Each form holds one recipe or many:
|
|
9
|
+
*
|
|
10
|
+
* - a string starting with `{` or `[` (after whitespace): JSON text (one recipe
|
|
11
|
+
* or an array of them) or JSON Lines text (one recipe per line);
|
|
12
|
+
* - any other string: a path to a `.json` or `.jsonl` file, or a directory whose
|
|
13
|
+
* `.json` and `.jsonl` files are read (sorted, not recursive);
|
|
14
|
+
* - {@link RecipeBytes}: the same text, still encoded;
|
|
15
|
+
* - an object: one recipe, already decoded;
|
|
16
|
+
* - an array: any mix of the above.
|
|
17
|
+
*/
|
|
18
|
+
export type RecipeSource = string | RecipeBytes | object | readonly RecipeSource[];
|
|
19
|
+
/** One decoded recipe before validation, with where it came from. */
|
|
20
|
+
export interface RecipeDocument {
|
|
21
|
+
/**
|
|
22
|
+
* A file path, `path:line` for a JSON Lines file, a `File`'s name, or a
|
|
23
|
+
* positional label (`recipes[2]`, `recipes:3`) for recipes that came from memory.
|
|
24
|
+
*/
|
|
25
|
+
source: string;
|
|
26
|
+
content: unknown;
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=recipe-source.contract.d.ts.map
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { RecipeDocument } from './recipe-source.contract.js';
|
|
2
|
+
/**
|
|
3
|
+
* Decodes recipe text: one JSON document (a recipe, or an array of recipes) or
|
|
4
|
+
* JSON Lines (one recipe per non-blank line).
|
|
5
|
+
*
|
|
6
|
+
* @param text - The text.
|
|
7
|
+
* @param label - Where it came from, prefixed to each document's source.
|
|
8
|
+
* @returns The decoded recipes: `label` for a single one, `label[i]` for array
|
|
9
|
+
* items, `label:line` for JSON Lines.
|
|
10
|
+
* @throws Error naming the label (and the line, for JSON Lines) when the text
|
|
11
|
+
* is neither.
|
|
12
|
+
*/
|
|
13
|
+
export declare function parseRecipeText(text: string, label: string): RecipeDocument[];
|
|
14
|
+
//# sourceMappingURL=recipe-text.mapper.d.ts.map
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export * from './recipe-kind.enum.js';
|
|
2
|
+
export { fieldSpecSchema, outputRecipeSchema } from './output-recipe.contract.js';
|
|
3
|
+
export type { FieldSpec, OutputRecipe } from './output-recipe.contract.js';
|
|
4
|
+
export { stepSchema, errorPolicySchema, paginateNextSchema } from './step.contract.js';
|
|
5
|
+
export type { Step, StepType, StepBaseFields, TargetFields, ErrorPolicy, PaginateNext, TakeKind, GotoStep, ClickStep, FillStep, PressStep, SelectStep, ScrollStep, WaitStep, EvaluateStep, ScreenshotStep, RequestStep, ExtractStep, SetStep, CollectStep, ForEachStep, IfStep, PaginateStep, EmitStep, HookStep, CaptchaStep, CaptchaCheck, } from './step.contract.js';
|
|
6
|
+
export { transformRuleSchema, mappingRuleSchema } from './transform-rule.contract.js';
|
|
7
|
+
export type { TransformRule, TransformOp, MappingRule, FromRule, EachRule } from './transform-rule.contract.js';
|
|
8
|
+
export { inputRecipeSchema, sessionSpecSchema, startPointSchema, retryRuleSchema } from './input-recipe.contract.js';
|
|
9
|
+
export type { InputRecipe, SessionSpec, SessionBootstrap, SessionAccess, BlockRule, BlockRotation, CaptchaSettings, RetryRule, StartPoint, CrawlLimits, RecipeCookie } from './input-recipe.contract.js';
|
|
10
|
+
export { parseInputRecipe, parseOutputRecipe, recipeKindOf } from './recipe.validator.js';
|
|
11
|
+
export { RecipeValidationError } from './recipe-validation.error.js';
|
|
12
|
+
export type { RecipeIssue } from './recipe-validation.error.js';
|
|
13
|
+
export { inputRecipeJsonSchema, outputRecipeJsonSchema } from './json-schema.mapper.js';
|
|
14
|
+
export type { JsonSchemaDocument } from './json-schema.mapper.js';
|
|
15
|
+
//# sourceMappingURL=index.d.ts.map
|