textlane 0.0.0 → 0.2.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 (42) hide show
  1. package/LICENSE.md +9 -0
  2. package/README.md +80 -2
  3. package/build/actions/addon/resolve.d.ts +7 -0
  4. package/build/actions/addon/resolve.js +22 -0
  5. package/build/actions/attacher/check.d.ts +3 -0
  6. package/build/actions/attacher/check.js +5 -0
  7. package/build/actions/host/call.d.ts +13 -0
  8. package/build/actions/host/call.js +47 -0
  9. package/build/actions/options/merge.d.ts +5 -0
  10. package/build/actions/options/merge.js +29 -0
  11. package/build/actions/pluggable/map.d.ts +8 -0
  12. package/build/actions/pluggable/map.js +29 -0
  13. package/build/actions/run/finish.d.ts +12 -0
  14. package/build/actions/run/finish.js +52 -0
  15. package/build/actions/transformer/check.d.ts +3 -0
  16. package/build/actions/transformer/check.js +5 -0
  17. package/build/generated/html.d.ts +260 -0
  18. package/build/generated/html.js +76 -0
  19. package/build/generated/md.d.ts +367 -0
  20. package/build/generated/md.js +100 -0
  21. package/build/generated/mdx.d.ts +28 -0
  22. package/build/generated/mdx.js +8 -0
  23. package/build/generated/nl.d.ts +99 -0
  24. package/build/generated/nl.js +62 -0
  25. package/build/index.d.ts +18 -0
  26. package/build/index.js +27 -0
  27. package/build/models/addon.d.ts +35 -0
  28. package/build/models/addon.js +2 -0
  29. package/build/models/file.d.ts +52 -0
  30. package/build/models/file.js +2 -0
  31. package/build/models/host.d.ts +7 -0
  32. package/build/models/host.js +2 -0
  33. package/build/models/plugin.d.ts +26 -0
  34. package/build/models/plugin.js +2 -0
  35. package/build/models/processor.d.ts +39 -0
  36. package/build/models/processor.js +154 -0
  37. package/build/models/vfile.d.ts +52 -0
  38. package/build/models/vfile.js +164 -0
  39. package/build/settings.d.ts +14 -0
  40. package/build/settings.js +17 -0
  41. package/package.json +36 -3
  42. package/skills/textlane-usage/SKILL.md +148 -0
@@ -0,0 +1,99 @@
1
+ import type { Plugin } from "../models/plugin.ts";
2
+ /** `nl.parse`: natural language into nlcst. */
3
+ export interface ParseOptions {
4
+ /** The rules sentences and words are found by. */
5
+ language?: Language;
6
+ }
7
+ /** The language `nl.parse` reads: parse-latin's rules, or parse-english's on top of them. */
8
+ export type Language = "latin" | "english";
9
+ /** `nl.equality`: warnings about insensitive, inconsiderate wording, as retext-equality; options are retext-equality's. */
10
+ export interface EqualityOptions {
11
+ /** Phrases not to warn about. */
12
+ ignore?: string[] | null;
13
+ /** Whether a phrase used next to its counterpart (`he or she`) is fine. */
14
+ binary?: boolean | null;
15
+ }
16
+ /** `nl.passive`: warnings about the passive voice, as retext-passive; options are retext-passive's. */
17
+ export interface PassiveOptions {
18
+ /** Participles not to warn about. */
19
+ ignore?: string[] | null;
20
+ }
21
+ /** `nl.readability`: warnings about sentences too hard to read, as retext-readability; options are retext-readability's. */
22
+ export interface ReadabilityOptions {
23
+ /** The age of the target audience: 16 by default. */
24
+ age?: number | null;
25
+ /** The share of algorithms that must find a sentence too hard: 4/7 by default. */
26
+ threshold?: number | null;
27
+ /** The fewest words a sentence needs to be checked: 5 by default. */
28
+ minWords?: number | null;
29
+ }
30
+ /** `nl.sentenceSpacing`: warnings about the spaces between sentences, as retext-sentence-spacing; options are retext-sentence-spacing's. */
31
+ export interface SentenceSpacingOptions {
32
+ /** The spacing expected between sentences: `1` or `"space"` (the default), `2` or `"double-space"`, `0` or `"newline"`. */
33
+ preferred?: Spacing | null;
34
+ }
35
+ /** A spacing between sentences, as a count of spaces or by name. */
36
+ export type Spacing = number | string;
37
+ /** `nl.smartypants`: straight quotes, dashes, dots and backticks into typographic ones; options as retext-smartypants takes them. */
38
+ export interface SmartypantsOptions {
39
+ /** Turn double backticks and double straight single quotes into double quotes; `all` turns single ones into single quotes too, and needs `quotes: false`. */
40
+ backticks?: Backticks;
41
+ /** The closing quotes to use: `”` and `’` by default. */
42
+ closingQuotes?: QuoteCharacters | null;
43
+ /** Turn two dashes into an em dash; `oldschool` and `inverted` treat three too. */
44
+ dashes?: Dashes;
45
+ /** Turn three dots into an ellipsis, with spaces between them or without. */
46
+ ellipses?: Ellipses;
47
+ /** The opening quotes to use: `“` and `‘` by default. */
48
+ openingQuotes?: QuoteCharacters | null;
49
+ /** Turn straight quotes into smart ones. @default true */
50
+ quotes?: boolean | null;
51
+ }
52
+ export type Backticks = boolean | "all";
53
+ /** The quote characters to use for double and single quotes. */
54
+ export interface QuoteCharacters {
55
+ double: string;
56
+ single: string;
57
+ }
58
+ export type Dashes = boolean | "oldschool" | "inverted";
59
+ export type Ellipses = boolean | "spaced" | "unspaced";
60
+ /** `nl.quotes`: check that quotes and apostrophes are straight or smart, as preferred, at each level of nesting; options as retext-quotes takes them. */
61
+ export interface QuotesOptions {
62
+ /** The style of quotes and apostrophes to prefer: `smart` by default. */
63
+ preferred?: QuoteStyle | null;
64
+ /** Smart quotes by nesting level, each one character or an opening and closing pair: `["“”", "‘’"]` by default. */
65
+ smart?: string[] | null;
66
+ /** Straight quotes by nesting level: `["\"", "'"]` by default. */
67
+ straight?: string[] | null;
68
+ }
69
+ /** A style of quotes: straight (`"`) or smart (`“”`). */
70
+ export type QuoteStyle = "smart" | "straight";
71
+ /** `nl.contractions`: check apostrophes in contractions, such as `don’t`; options as retext-contractions takes them. */
72
+ export interface ContractionsOptions {
73
+ /** Also check contractions written as literals, such as `“hasnt”`. @default false */
74
+ allowLiterals?: boolean | null;
75
+ /** Expect straight apostrophes (`'`) instead of smart ones (`’`). @default false */
76
+ straight?: boolean | null;
77
+ }
78
+ /** The `nl.parse` plugin. */
79
+ export declare function parse(options?: ParseOptions): Plugin<"nl.parse", ParseOptions>;
80
+ /** The `nl.equality` plugin. */
81
+ export declare function equality(options?: EqualityOptions): Plugin<"nl.equality", EqualityOptions>;
82
+ /** The `nl.passive` plugin. */
83
+ export declare function passive(options?: PassiveOptions): Plugin<"nl.passive", PassiveOptions>;
84
+ /** The `nl.readability` plugin. */
85
+ export declare function readability(options?: ReadabilityOptions): Plugin<"nl.readability", ReadabilityOptions>;
86
+ /** The `nl.repeatedWords` plugin. */
87
+ export declare function repeatedWords(): Plugin<"nl.repeatedWords">;
88
+ /** The `nl.sentenceSpacing` plugin. */
89
+ export declare function sentenceSpacing(options?: SentenceSpacingOptions): Plugin<"nl.sentenceSpacing", SentenceSpacingOptions>;
90
+ /** The `nl.stringify` plugin. */
91
+ export declare function stringify(): Plugin<"nl.stringify">;
92
+ /** The `nl.smartypants` plugin. */
93
+ export declare function smartypants(options?: SmartypantsOptions): Plugin<"nl.smartypants", SmartypantsOptions>;
94
+ /** The `nl.quotes` plugin. */
95
+ export declare function quotes(options?: QuotesOptions): Plugin<"nl.quotes", QuotesOptions>;
96
+ /** The `nl.contractions` plugin. */
97
+ export declare function contractions(options?: ContractionsOptions): Plugin<"nl.contractions", ContractionsOptions>;
98
+ /** The `nl.indefiniteArticle` plugin. */
99
+ export declare function indefiniteArticle(): Plugin<"nl.indefiniteArticle">;
@@ -0,0 +1,62 @@
1
+ // Generated by `pnpm generate:bindings` from the crate's plugins; do not edit.
2
+ /** The `nl.parse` plugin. */
3
+ export function parse(options) {
4
+ if (options === undefined)
5
+ return { name: "nl.parse" };
6
+ return { name: "nl.parse", options };
7
+ }
8
+ /** The `nl.equality` plugin. */
9
+ export function equality(options) {
10
+ if (options === undefined)
11
+ return { name: "nl.equality" };
12
+ return { name: "nl.equality", options };
13
+ }
14
+ /** The `nl.passive` plugin. */
15
+ export function passive(options) {
16
+ if (options === undefined)
17
+ return { name: "nl.passive" };
18
+ return { name: "nl.passive", options };
19
+ }
20
+ /** The `nl.readability` plugin. */
21
+ export function readability(options) {
22
+ if (options === undefined)
23
+ return { name: "nl.readability" };
24
+ return { name: "nl.readability", options };
25
+ }
26
+ /** The `nl.repeatedWords` plugin. */
27
+ export function repeatedWords() {
28
+ return { name: "nl.repeatedWords" };
29
+ }
30
+ /** The `nl.sentenceSpacing` plugin. */
31
+ export function sentenceSpacing(options) {
32
+ if (options === undefined)
33
+ return { name: "nl.sentenceSpacing" };
34
+ return { name: "nl.sentenceSpacing", options };
35
+ }
36
+ /** The `nl.stringify` plugin. */
37
+ export function stringify() {
38
+ return { name: "nl.stringify" };
39
+ }
40
+ /** The `nl.smartypants` plugin. */
41
+ export function smartypants(options) {
42
+ if (options === undefined)
43
+ return { name: "nl.smartypants" };
44
+ return { name: "nl.smartypants", options };
45
+ }
46
+ /** The `nl.quotes` plugin. */
47
+ export function quotes(options) {
48
+ if (options === undefined)
49
+ return { name: "nl.quotes" };
50
+ return { name: "nl.quotes", options };
51
+ }
52
+ /** The `nl.contractions` plugin. */
53
+ export function contractions(options) {
54
+ if (options === undefined)
55
+ return { name: "nl.contractions" };
56
+ return { name: "nl.contractions", options };
57
+ }
58
+ /** The `nl.indefiniteArticle` plugin. */
59
+ export function indefiniteArticle() {
60
+ return { name: "nl.indefiniteArticle" };
61
+ }
62
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9nZW5lcmF0ZWQvbmwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0VBQStFO0FBK0YvRSw2QkFBNkI7QUFDN0IsTUFBTSxVQUFVLEtBQUssQ0FBQyxPQUFzQjtJQUMxQyxJQUFJLE9BQU8sS0FBSyxTQUFTO1FBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsQ0FBQTtJQUN0RCxPQUFPLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsQ0FBQTtBQUN0QyxDQUFDO0FBRUQsZ0NBQWdDO0FBQ2hDLE1BQU0sVUFBVSxRQUFRLENBQUMsT0FBeUI7SUFDaEQsSUFBSSxPQUFPLEtBQUssU0FBUztRQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFLENBQUE7SUFDekQsT0FBTyxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUUsT0FBTyxFQUFFLENBQUE7QUFDekMsQ0FBQztBQUVELCtCQUErQjtBQUMvQixNQUFNLFVBQVUsT0FBTyxDQUFDLE9BQXdCO0lBQzlDLElBQUksT0FBTyxLQUFLLFNBQVM7UUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxDQUFBO0lBQ3hELE9BQU8sRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLE9BQU8sRUFBRSxDQUFBO0FBQ3hDLENBQUM7QUFFRCxtQ0FBbUM7QUFDbkMsTUFBTSxVQUFVLFdBQVcsQ0FBQyxPQUE0QjtJQUN0RCxJQUFJLE9BQU8sS0FBSyxTQUFTO1FBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxDQUFBO0lBQzVELE9BQU8sRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUsT0FBTyxFQUFFLENBQUE7QUFDNUMsQ0FBQztBQUVELHFDQUFxQztBQUNyQyxNQUFNLFVBQVUsYUFBYTtJQUMzQixPQUFPLEVBQUUsSUFBSSxFQUFFLGtCQUFrQixFQUFFLENBQUE7QUFDckMsQ0FBQztBQUVELHVDQUF1QztBQUN2QyxNQUFNLFVBQVUsZUFBZSxDQUFDLE9BQWdDO0lBQzlELElBQUksT0FBTyxLQUFLLFNBQVM7UUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLG9CQUFvQixFQUFFLENBQUE7SUFDaEUsT0FBTyxFQUFFLElBQUksRUFBRSxvQkFBb0IsRUFBRSxPQUFPLEVBQUUsQ0FBQTtBQUNoRCxDQUFDO0FBRUQsaUNBQWlDO0FBQ2pDLE1BQU0sVUFBVSxTQUFTO0lBQ3ZCLE9BQU8sRUFBRSxJQUFJLEVBQUUsY0FBYyxFQUFFLENBQUE7QUFDakMsQ0FBQztBQUVELG1DQUFtQztBQUNuQyxNQUFNLFVBQVUsV0FBVyxDQUFDLE9BQTRCO0lBQ3RELElBQUksT0FBTyxLQUFLLFNBQVM7UUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFLENBQUE7SUFDNUQsT0FBTyxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxPQUFPLEVBQUUsQ0FBQTtBQUM1QyxDQUFDO0FBRUQsOEJBQThCO0FBQzlCLE1BQU0sVUFBVSxNQUFNLENBQUMsT0FBdUI7SUFDNUMsSUFBSSxPQUFPLEtBQUssU0FBUztRQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLENBQUE7SUFDdkQsT0FBTyxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLENBQUE7QUFDdkMsQ0FBQztBQUVELG9DQUFvQztBQUNwQyxNQUFNLFVBQVUsWUFBWSxDQUFDLE9BQTZCO0lBQ3hELElBQUksT0FBTyxLQUFLLFNBQVM7UUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLGlCQUFpQixFQUFFLENBQUE7SUFDN0QsT0FBTyxFQUFFLElBQUksRUFBRSxpQkFBaUIsRUFBRSxPQUFPLEVBQUUsQ0FBQTtBQUM3QyxDQUFDO0FBRUQseUNBQXlDO0FBQ3pDLE1BQU0sVUFBVSxpQkFBaUI7SUFDL0IsT0FBTyxFQUFFLElBQUksRUFBRSxzQkFBc0IsRUFBRSxDQUFBO0FBQ3pDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBHZW5lcmF0ZWQgYnkgYHBucG0gZ2VuZXJhdGU6YmluZGluZ3NgIGZyb20gdGhlIGNyYXRlJ3MgcGx1Z2luczsgZG8gbm90IGVkaXQuXG5cbmltcG9ydCB0eXBlIHsgUGx1Z2luIH0gZnJvbSBcIi4uL21vZGVscy9wbHVnaW4udHNcIlxuXG4vKiogYG5sLnBhcnNlYDogbmF0dXJhbCBsYW5ndWFnZSBpbnRvIG5sY3N0LiAqL1xuZXhwb3J0IGludGVyZmFjZSBQYXJzZU9wdGlvbnMge1xuICAvKiogVGhlIHJ1bGVzIHNlbnRlbmNlcyBhbmQgd29yZHMgYXJlIGZvdW5kIGJ5LiAqL1xuICBsYW5ndWFnZT86IExhbmd1YWdlXG59XG5cbi8qKiBUaGUgbGFuZ3VhZ2UgYG5sLnBhcnNlYCByZWFkczogcGFyc2UtbGF0aW4ncyBydWxlcywgb3IgcGFyc2UtZW5nbGlzaCdzIG9uIHRvcCBvZiB0aGVtLiAqL1xuZXhwb3J0IHR5cGUgTGFuZ3VhZ2UgPSBcImxhdGluXCIgfCBcImVuZ2xpc2hcIlxuXG4vKiogYG5sLmVxdWFsaXR5YDogd2FybmluZ3MgYWJvdXQgaW5zZW5zaXRpdmUsIGluY29uc2lkZXJhdGUgd29yZGluZywgYXMgcmV0ZXh0LWVxdWFsaXR5OyBvcHRpb25zIGFyZSByZXRleHQtZXF1YWxpdHkncy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXF1YWxpdHlPcHRpb25zIHtcbiAgLyoqIFBocmFzZXMgbm90IHRvIHdhcm4gYWJvdXQuICovXG4gIGlnbm9yZT86IHN0cmluZ1tdIHwgbnVsbFxuICAvKiogV2hldGhlciBhIHBocmFzZSB1c2VkIG5leHQgdG8gaXRzIGNvdW50ZXJwYXJ0IChgaGUgb3Igc2hlYCkgaXMgZmluZS4gKi9cbiAgYmluYXJ5PzogYm9vbGVhbiB8IG51bGxcbn1cblxuLyoqIGBubC5wYXNzaXZlYDogd2FybmluZ3MgYWJvdXQgdGhlIHBhc3NpdmUgdm9pY2UsIGFzIHJldGV4dC1wYXNzaXZlOyBvcHRpb25zIGFyZSByZXRleHQtcGFzc2l2ZSdzLiAqL1xuZXhwb3J0IGludGVyZmFjZSBQYXNzaXZlT3B0aW9ucyB7XG4gIC8qKiBQYXJ0aWNpcGxlcyBub3QgdG8gd2FybiBhYm91dC4gKi9cbiAgaWdub3JlPzogc3RyaW5nW10gfCBudWxsXG59XG5cbi8qKiBgbmwucmVhZGFiaWxpdHlgOiB3YXJuaW5ncyBhYm91dCBzZW50ZW5jZXMgdG9vIGhhcmQgdG8gcmVhZCwgYXMgcmV0ZXh0LXJlYWRhYmlsaXR5OyBvcHRpb25zIGFyZSByZXRleHQtcmVhZGFiaWxpdHkncy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVhZGFiaWxpdHlPcHRpb25zIHtcbiAgLyoqIFRoZSBhZ2Ugb2YgdGhlIHRhcmdldCBhdWRpZW5jZTogMTYgYnkgZGVmYXVsdC4gKi9cbiAgYWdlPzogbnVtYmVyIHwgbnVsbFxuICAvKiogVGhlIHNoYXJlIG9mIGFsZ29yaXRobXMgdGhhdCBtdXN0IGZpbmQgYSBzZW50ZW5jZSB0b28gaGFyZDogNC83IGJ5IGRlZmF1bHQuICovXG4gIHRocmVzaG9sZD86IG51bWJlciB8IG51bGxcbiAgLyoqIFRoZSBmZXdlc3Qgd29yZHMgYSBzZW50ZW5jZSBuZWVkcyB0byBiZSBjaGVja2VkOiA1IGJ5IGRlZmF1bHQuICovXG4gIG1pbldvcmRzPzogbnVtYmVyIHwgbnVsbFxufVxuXG4vKiogYG5sLnNlbnRlbmNlU3BhY2luZ2A6IHdhcm5pbmdzIGFib3V0IHRoZSBzcGFjZXMgYmV0d2VlbiBzZW50ZW5jZXMsIGFzIHJldGV4dC1zZW50ZW5jZS1zcGFjaW5nOyBvcHRpb25zIGFyZSByZXRleHQtc2VudGVuY2Utc3BhY2luZydzLiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZW50ZW5jZVNwYWNpbmdPcHRpb25zIHtcbiAgLyoqIFRoZSBzcGFjaW5nIGV4cGVjdGVkIGJldHdlZW4gc2VudGVuY2VzOiBgMWAgb3IgYFwic3BhY2VcImAgKHRoZSBkZWZhdWx0KSwgYDJgIG9yIGBcImRvdWJsZS1zcGFjZVwiYCwgYDBgIG9yIGBcIm5ld2xpbmVcImAuICovXG4gIHByZWZlcnJlZD86IFNwYWNpbmcgfCBudWxsXG59XG5cbi8qKiBBIHNwYWNpbmcgYmV0d2VlbiBzZW50ZW5jZXMsIGFzIGEgY291bnQgb2Ygc3BhY2VzIG9yIGJ5IG5hbWUuICovXG5leHBvcnQgdHlwZSBTcGFjaW5nID0gbnVtYmVyIHwgc3RyaW5nXG5cbi8qKiBgbmwuc21hcnR5cGFudHNgOiBzdHJhaWdodCBxdW90ZXMsIGRhc2hlcywgZG90cyBhbmQgYmFja3RpY2tzIGludG8gdHlwb2dyYXBoaWMgb25lczsgb3B0aW9ucyBhcyByZXRleHQtc21hcnR5cGFudHMgdGFrZXMgdGhlbS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU21hcnR5cGFudHNPcHRpb25zIHtcbiAgLyoqIFR1cm4gZG91YmxlIGJhY2t0aWNrcyBhbmQgZG91YmxlIHN0cmFpZ2h0IHNpbmdsZSBxdW90ZXMgaW50byBkb3VibGUgcXVvdGVzOyBgYWxsYCB0dXJucyBzaW5nbGUgb25lcyBpbnRvIHNpbmdsZSBxdW90ZXMgdG9vLCBhbmQgbmVlZHMgYHF1b3RlczogZmFsc2VgLiAqL1xuICBiYWNrdGlja3M/OiBCYWNrdGlja3NcbiAgLyoqIFRoZSBjbG9zaW5nIHF1b3RlcyB0byB1c2U6IGDigJ1gIGFuZCBg4oCZYCBieSBkZWZhdWx0LiAqL1xuICBjbG9zaW5nUXVvdGVzPzogUXVvdGVDaGFyYWN0ZXJzIHwgbnVsbFxuICAvKiogVHVybiB0d28gZGFzaGVzIGludG8gYW4gZW0gZGFzaDsgYG9sZHNjaG9vbGAgYW5kIGBpbnZlcnRlZGAgdHJlYXQgdGhyZWUgdG9vLiAqL1xuICBkYXNoZXM/OiBEYXNoZXNcbiAgLyoqIFR1cm4gdGhyZWUgZG90cyBpbnRvIGFuIGVsbGlwc2lzLCB3aXRoIHNwYWNlcyBiZXR3ZWVuIHRoZW0gb3Igd2l0aG91dC4gKi9cbiAgZWxsaXBzZXM/OiBFbGxpcHNlc1xuICAvKiogVGhlIG9wZW5pbmcgcXVvdGVzIHRvIHVzZTogYOKAnGAgYW5kIGDigJhgIGJ5IGRlZmF1bHQuICovXG4gIG9wZW5pbmdRdW90ZXM/OiBRdW90ZUNoYXJhY3RlcnMgfCBudWxsXG4gIC8qKiBUdXJuIHN0cmFpZ2h0IHF1b3RlcyBpbnRvIHNtYXJ0IG9uZXMuIEBkZWZhdWx0IHRydWUgKi9cbiAgcXVvdGVzPzogYm9vbGVhbiB8IG51bGxcbn1cblxuZXhwb3J0IHR5cGUgQmFja3RpY2tzID0gYm9vbGVhbiB8IFwiYWxsXCJcblxuLyoqIFRoZSBxdW90ZSBjaGFyYWN0ZXJzIHRvIHVzZSBmb3IgZG91YmxlIGFuZCBzaW5nbGUgcXVvdGVzLiAqL1xuZXhwb3J0IGludGVyZmFjZSBRdW90ZUNoYXJhY3RlcnMge1xuICBkb3VibGU6IHN0cmluZ1xuICBzaW5nbGU6IHN0cmluZ1xufVxuXG5leHBvcnQgdHlwZSBEYXNoZXMgPSBib29sZWFuIHwgXCJvbGRzY2hvb2xcIiB8IFwiaW52ZXJ0ZWRcIlxuXG5leHBvcnQgdHlwZSBFbGxpcHNlcyA9IGJvb2xlYW4gfCBcInNwYWNlZFwiIHwgXCJ1bnNwYWNlZFwiXG5cbi8qKiBgbmwucXVvdGVzYDogY2hlY2sgdGhhdCBxdW90ZXMgYW5kIGFwb3N0cm9waGVzIGFyZSBzdHJhaWdodCBvciBzbWFydCwgYXMgcHJlZmVycmVkLCBhdCBlYWNoIGxldmVsIG9mIG5lc3Rpbmc7IG9wdGlvbnMgYXMgcmV0ZXh0LXF1b3RlcyB0YWtlcyB0aGVtLiAqL1xuZXhwb3J0IGludGVyZmFjZSBRdW90ZXNPcHRpb25zIHtcbiAgLyoqIFRoZSBzdHlsZSBvZiBxdW90ZXMgYW5kIGFwb3N0cm9waGVzIHRvIHByZWZlcjogYHNtYXJ0YCBieSBkZWZhdWx0LiAqL1xuICBwcmVmZXJyZWQ/OiBRdW90ZVN0eWxlIHwgbnVsbFxuICAvKiogU21hcnQgcXVvdGVzIGJ5IG5lc3RpbmcgbGV2ZWwsIGVhY2ggb25lIGNoYXJhY3RlciBvciBhbiBvcGVuaW5nIGFuZCBjbG9zaW5nIHBhaXI6IGBbXCLigJzigJ1cIiwgXCLigJjigJlcIl1gIGJ5IGRlZmF1bHQuICovXG4gIHNtYXJ0Pzogc3RyaW5nW10gfCBudWxsXG4gIC8qKiBTdHJhaWdodCBxdW90ZXMgYnkgbmVzdGluZyBsZXZlbDogYFtcIlxcXCJcIiwgXCInXCJdYCBieSBkZWZhdWx0LiAqL1xuICBzdHJhaWdodD86IHN0cmluZ1tdIHwgbnVsbFxufVxuXG4vKiogQSBzdHlsZSBvZiBxdW90ZXM6IHN0cmFpZ2h0IChgXCJgKSBvciBzbWFydCAoYOKAnOKAnWApLiAqL1xuZXhwb3J0IHR5cGUgUXVvdGVTdHlsZSA9IFwic21hcnRcIiB8IFwic3RyYWlnaHRcIlxuXG4vKiogYG5sLmNvbnRyYWN0aW9uc2A6IGNoZWNrIGFwb3N0cm9waGVzIGluIGNvbnRyYWN0aW9ucywgc3VjaCBhcyBgZG9u4oCZdGA7IG9wdGlvbnMgYXMgcmV0ZXh0LWNvbnRyYWN0aW9ucyB0YWtlcyB0aGVtLiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb250cmFjdGlvbnNPcHRpb25zIHtcbiAgLyoqIEFsc28gY2hlY2sgY29udHJhY3Rpb25zIHdyaXR0ZW4gYXMgbGl0ZXJhbHMsIHN1Y2ggYXMgYOKAnGhhc2504oCdYC4gQGRlZmF1bHQgZmFsc2UgKi9cbiAgYWxsb3dMaXRlcmFscz86IGJvb2xlYW4gfCBudWxsXG4gIC8qKiBFeHBlY3Qgc3RyYWlnaHQgYXBvc3Ryb3BoZXMgKGAnYCkgaW5zdGVhZCBvZiBzbWFydCBvbmVzIChg4oCZYCkuIEBkZWZhdWx0IGZhbHNlICovXG4gIHN0cmFpZ2h0PzogYm9vbGVhbiB8IG51bGxcbn1cblxuLyoqIFRoZSBgbmwucGFyc2VgIHBsdWdpbi4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZShvcHRpb25zPzogUGFyc2VPcHRpb25zKTogUGx1Z2luPFwibmwucGFyc2VcIiwgUGFyc2VPcHRpb25zPiB7XG4gIGlmIChvcHRpb25zID09PSB1bmRlZmluZWQpIHJldHVybiB7IG5hbWU6IFwibmwucGFyc2VcIiB9XG4gIHJldHVybiB7IG5hbWU6IFwibmwucGFyc2VcIiwgb3B0aW9ucyB9XG59XG5cbi8qKiBUaGUgYG5sLmVxdWFsaXR5YCBwbHVnaW4uICovXG5leHBvcnQgZnVuY3Rpb24gZXF1YWxpdHkob3B0aW9ucz86IEVxdWFsaXR5T3B0aW9ucyk6IFBsdWdpbjxcIm5sLmVxdWFsaXR5XCIsIEVxdWFsaXR5T3B0aW9ucz4ge1xuICBpZiAob3B0aW9ucyA9PT0gdW5kZWZpbmVkKSByZXR1cm4geyBuYW1lOiBcIm5sLmVxdWFsaXR5XCIgfVxuICByZXR1cm4geyBuYW1lOiBcIm5sLmVxdWFsaXR5XCIsIG9wdGlvbnMgfVxufVxuXG4vKiogVGhlIGBubC5wYXNzaXZlYCBwbHVnaW4uICovXG5leHBvcnQgZnVuY3Rpb24gcGFzc2l2ZShvcHRpb25zPzogUGFzc2l2ZU9wdGlvbnMpOiBQbHVnaW48XCJubC5wYXNzaXZlXCIsIFBhc3NpdmVPcHRpb25zPiB7XG4gIGlmIChvcHRpb25zID09PSB1bmRlZmluZWQpIHJldHVybiB7IG5hbWU6IFwibmwucGFzc2l2ZVwiIH1cbiAgcmV0dXJuIHsgbmFtZTogXCJubC5wYXNzaXZlXCIsIG9wdGlvbnMgfVxufVxuXG4vKiogVGhlIGBubC5yZWFkYWJpbGl0eWAgcGx1Z2luLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlYWRhYmlsaXR5KG9wdGlvbnM/OiBSZWFkYWJpbGl0eU9wdGlvbnMpOiBQbHVnaW48XCJubC5yZWFkYWJpbGl0eVwiLCBSZWFkYWJpbGl0eU9wdGlvbnM+IHtcbiAgaWYgKG9wdGlvbnMgPT09IHVuZGVmaW5lZCkgcmV0dXJuIHsgbmFtZTogXCJubC5yZWFkYWJpbGl0eVwiIH1cbiAgcmV0dXJuIHsgbmFtZTogXCJubC5yZWFkYWJpbGl0eVwiLCBvcHRpb25zIH1cbn1cblxuLyoqIFRoZSBgbmwucmVwZWF0ZWRXb3Jkc2AgcGx1Z2luLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlcGVhdGVkV29yZHMoKTogUGx1Z2luPFwibmwucmVwZWF0ZWRXb3Jkc1wiPiB7XG4gIHJldHVybiB7IG5hbWU6IFwibmwucmVwZWF0ZWRXb3Jkc1wiIH1cbn1cblxuLyoqIFRoZSBgbmwuc2VudGVuY2VTcGFjaW5nYCBwbHVnaW4uICovXG5leHBvcnQgZnVuY3Rpb24gc2VudGVuY2VTcGFjaW5nKG9wdGlvbnM/OiBTZW50ZW5jZVNwYWNpbmdPcHRpb25zKTogUGx1Z2luPFwibmwuc2VudGVuY2VTcGFjaW5nXCIsIFNlbnRlbmNlU3BhY2luZ09wdGlvbnM+IHtcbiAgaWYgKG9wdGlvbnMgPT09IHVuZGVmaW5lZCkgcmV0dXJuIHsgbmFtZTogXCJubC5zZW50ZW5jZVNwYWNpbmdcIiB9XG4gIHJldHVybiB7IG5hbWU6IFwibmwuc2VudGVuY2VTcGFjaW5nXCIsIG9wdGlvbnMgfVxufVxuXG4vKiogVGhlIGBubC5zdHJpbmdpZnlgIHBsdWdpbi4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdHJpbmdpZnkoKTogUGx1Z2luPFwibmwuc3RyaW5naWZ5XCI+IHtcbiAgcmV0dXJuIHsgbmFtZTogXCJubC5zdHJpbmdpZnlcIiB9XG59XG5cbi8qKiBUaGUgYG5sLnNtYXJ0eXBhbnRzYCBwbHVnaW4uICovXG5leHBvcnQgZnVuY3Rpb24gc21hcnR5cGFudHMob3B0aW9ucz86IFNtYXJ0eXBhbnRzT3B0aW9ucyk6IFBsdWdpbjxcIm5sLnNtYXJ0eXBhbnRzXCIsIFNtYXJ0eXBhbnRzT3B0aW9ucz4ge1xuICBpZiAob3B0aW9ucyA9PT0gdW5kZWZpbmVkKSByZXR1cm4geyBuYW1lOiBcIm5sLnNtYXJ0eXBhbnRzXCIgfVxuICByZXR1cm4geyBuYW1lOiBcIm5sLnNtYXJ0eXBhbnRzXCIsIG9wdGlvbnMgfVxufVxuXG4vKiogVGhlIGBubC5xdW90ZXNgIHBsdWdpbi4gKi9cbmV4cG9ydCBmdW5jdGlvbiBxdW90ZXMob3B0aW9ucz86IFF1b3Rlc09wdGlvbnMpOiBQbHVnaW48XCJubC5xdW90ZXNcIiwgUXVvdGVzT3B0aW9ucz4ge1xuICBpZiAob3B0aW9ucyA9PT0gdW5kZWZpbmVkKSByZXR1cm4geyBuYW1lOiBcIm5sLnF1b3Rlc1wiIH1cbiAgcmV0dXJuIHsgbmFtZTogXCJubC5xdW90ZXNcIiwgb3B0aW9ucyB9XG59XG5cbi8qKiBUaGUgYG5sLmNvbnRyYWN0aW9uc2AgcGx1Z2luLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbnRyYWN0aW9ucyhvcHRpb25zPzogQ29udHJhY3Rpb25zT3B0aW9ucyk6IFBsdWdpbjxcIm5sLmNvbnRyYWN0aW9uc1wiLCBDb250cmFjdGlvbnNPcHRpb25zPiB7XG4gIGlmIChvcHRpb25zID09PSB1bmRlZmluZWQpIHJldHVybiB7IG5hbWU6IFwibmwuY29udHJhY3Rpb25zXCIgfVxuICByZXR1cm4geyBuYW1lOiBcIm5sLmNvbnRyYWN0aW9uc1wiLCBvcHRpb25zIH1cbn1cblxuLyoqIFRoZSBgbmwuaW5kZWZpbml0ZUFydGljbGVgIHBsdWdpbi4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbmRlZmluaXRlQXJ0aWNsZSgpOiBQbHVnaW48XCJubC5pbmRlZmluaXRlQXJ0aWNsZVwiPiB7XG4gIHJldHVybiB7IG5hbWU6IFwibmwuaW5kZWZpbml0ZUFydGljbGVcIiB9XG59XG4iXX0=
@@ -0,0 +1,18 @@
1
+ import { Processor } from "./models/processor.ts";
2
+ export type { Compatible, Message, MessageOptions, Node, Place, Point, VFile, } from "./models/file.ts";
3
+ export type { Attacher, Pluggable, PluggableList, Plugin, Preset, Transformer, } from "./models/plugin.ts";
4
+ export type { HostFile, HostMessage } from "./models/vfile.ts";
5
+ export { Processor } from "./models/processor.ts";
6
+ /** A new processor: add plugins with `use`, then `process` text. */
7
+ export declare function textlane(): Processor;
8
+ /** The package version, as the native crate reports it. */
9
+ export declare const version: () => string;
10
+ /** The name of every native plugin, as a pipeline names it. */
11
+ export declare const pluginNames: () => string[];
12
+ /** The most memory, in bytes, each thread keeps after a document to reuse for the next. */
13
+ export declare const retainedMemory: () => number;
14
+ /**
15
+ * Cap the memory, in bytes, each thread keeps after a document; `0` keeps none. The
16
+ * default is 256 MB.
17
+ */
18
+ export declare const setRetainedMemory: (bytes: number) => void;
package/build/index.js ADDED
@@ -0,0 +1,27 @@
1
+ import { createRequire } from "node:module";
2
+ import { resolveAddon } from "./actions/addon/resolve.js";
3
+ import { Processor } from "./models/processor.js";
4
+ export { Processor } from "./models/processor.js";
5
+ const require = createRequire(import.meta.url);
6
+ const addon = require(resolveAddon({
7
+ platform: process.platform,
8
+ arch: process.arch,
9
+ env: process.env,
10
+ resolvePackage: specifier => require.resolve(specifier),
11
+ }));
12
+ /** A new processor: add plugins with `use`, then `process` text. */
13
+ export function textlane() {
14
+ return new Processor(new addon.Pipeline());
15
+ }
16
+ /** The package version, as the native crate reports it. */
17
+ export const version = addon.version;
18
+ /** The name of every native plugin, as a pipeline names it. */
19
+ export const pluginNames = addon.pluginNames;
20
+ /** The most memory, in bytes, each thread keeps after a document to reuse for the next. */
21
+ export const retainedMemory = addon.retainedMemory;
22
+ /**
23
+ * Cap the memory, in bytes, each thread keeps after a document; `0` keeps none. The
24
+ * default is 256 MB.
25
+ */
26
+ export const setRetainedMemory = addon.setRetainedMemory;
27
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sYUFBYSxDQUFBO0FBQzNDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQTtBQUV6RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sdUJBQXVCLENBQUE7QUFvQmpELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQTtBQUVqRCxNQUFNLE9BQU8sR0FBRyxhQUFhLENBQUMsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUE7QUFFOUMsTUFBTSxLQUFLLEdBQVUsT0FBTyxDQUMxQixZQUFZLENBQUM7SUFDWCxRQUFRLEVBQUUsT0FBTyxDQUFDLFFBQVE7SUFDMUIsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJO0lBQ2xCLEdBQUcsRUFBRSxPQUFPLENBQUMsR0FBRztJQUNoQixjQUFjLEVBQUUsU0FBUyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQztDQUN4RCxDQUFDLENBQ0gsQ0FBQTtBQUVELG9FQUFvRTtBQUNwRSxNQUFNLFVBQVUsUUFBUTtJQUN0QixPQUFPLElBQUksU0FBUyxDQUFDLElBQUksS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUE7QUFDNUMsQ0FBQztBQUVELDJEQUEyRDtBQUMzRCxNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQTtBQUVwQywrREFBK0Q7QUFDL0QsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFHLEtBQUssQ0FBQyxXQUFXLENBQUE7QUFFNUMsMkZBQTJGO0FBQzNGLE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxLQUFLLENBQUMsY0FBYyxDQUFBO0FBRWxEOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNyZWF0ZVJlcXVpcmUgfSBmcm9tIFwibm9kZTptb2R1bGVcIlxuaW1wb3J0IHsgcmVzb2x2ZUFkZG9uIH0gZnJvbSBcIi4vYWN0aW9ucy9hZGRvbi9yZXNvbHZlLnRzXCJcbmltcG9ydCB0eXBlIHsgQWRkb24gfSBmcm9tIFwiLi9tb2RlbHMvYWRkb24udHNcIlxuaW1wb3J0IHsgUHJvY2Vzc29yIH0gZnJvbSBcIi4vbW9kZWxzL3Byb2Nlc3Nvci50c1wiXG5cbmV4cG9ydCB0eXBlIHtcbiAgQ29tcGF0aWJsZSxcbiAgTWVzc2FnZSxcbiAgTWVzc2FnZU9wdGlvbnMsXG4gIE5vZGUsXG4gIFBsYWNlLFxuICBQb2ludCxcbiAgVkZpbGUsXG59IGZyb20gXCIuL21vZGVscy9maWxlLnRzXCJcbmV4cG9ydCB0eXBlIHtcbiAgQXR0YWNoZXIsXG4gIFBsdWdnYWJsZSxcbiAgUGx1Z2dhYmxlTGlzdCxcbiAgUGx1Z2luLFxuICBQcmVzZXQsXG4gIFRyYW5zZm9ybWVyLFxufSBmcm9tIFwiLi9tb2RlbHMvcGx1Z2luLnRzXCJcbmV4cG9ydCB0eXBlIHsgSG9zdEZpbGUsIEhvc3RNZXNzYWdlIH0gZnJvbSBcIi4vbW9kZWxzL3ZmaWxlLnRzXCJcbmV4cG9ydCB7IFByb2Nlc3NvciB9IGZyb20gXCIuL21vZGVscy9wcm9jZXNzb3IudHNcIlxuXG5jb25zdCByZXF1aXJlID0gY3JlYXRlUmVxdWlyZShpbXBvcnQubWV0YS51cmwpXG5cbmNvbnN0IGFkZG9uOiBBZGRvbiA9IHJlcXVpcmUoXG4gIHJlc29sdmVBZGRvbih7XG4gICAgcGxhdGZvcm06IHByb2Nlc3MucGxhdGZvcm0sXG4gICAgYXJjaDogcHJvY2Vzcy5hcmNoLFxuICAgIGVudjogcHJvY2Vzcy5lbnYsXG4gICAgcmVzb2x2ZVBhY2thZ2U6IHNwZWNpZmllciA9PiByZXF1aXJlLnJlc29sdmUoc3BlY2lmaWVyKSxcbiAgfSksXG4pXG5cbi8qKiBBIG5ldyBwcm9jZXNzb3I6IGFkZCBwbHVnaW5zIHdpdGggYHVzZWAsIHRoZW4gYHByb2Nlc3NgIHRleHQuICovXG5leHBvcnQgZnVuY3Rpb24gdGV4dGxhbmUoKSB7XG4gIHJldHVybiBuZXcgUHJvY2Vzc29yKG5ldyBhZGRvbi5QaXBlbGluZSgpKVxufVxuXG4vKiogVGhlIHBhY2thZ2UgdmVyc2lvbiwgYXMgdGhlIG5hdGl2ZSBjcmF0ZSByZXBvcnRzIGl0LiAqL1xuZXhwb3J0IGNvbnN0IHZlcnNpb24gPSBhZGRvbi52ZXJzaW9uXG5cbi8qKiBUaGUgbmFtZSBvZiBldmVyeSBuYXRpdmUgcGx1Z2luLCBhcyBhIHBpcGVsaW5lIG5hbWVzIGl0LiAqL1xuZXhwb3J0IGNvbnN0IHBsdWdpbk5hbWVzID0gYWRkb24ucGx1Z2luTmFtZXNcblxuLyoqIFRoZSBtb3N0IG1lbW9yeSwgaW4gYnl0ZXMsIGVhY2ggdGhyZWFkIGtlZXBzIGFmdGVyIGEgZG9jdW1lbnQgdG8gcmV1c2UgZm9yIHRoZSBuZXh0LiAqL1xuZXhwb3J0IGNvbnN0IHJldGFpbmVkTWVtb3J5ID0gYWRkb24ucmV0YWluZWRNZW1vcnlcblxuLyoqXG4gKiBDYXAgdGhlIG1lbW9yeSwgaW4gYnl0ZXMsIGVhY2ggdGhyZWFkIGtlZXBzIGFmdGVyIGEgZG9jdW1lbnQ7IGAwYCBrZWVwcyBub25lLiBUaGVcbiAqIGRlZmF1bHQgaXMgMjU2IE1CLlxuICovXG5leHBvcnQgY29uc3Qgc2V0UmV0YWluZWRNZW1vcnkgPSBhZGRvbi5zZXRSZXRhaW5lZE1lbW9yeVxuIl19
@@ -0,0 +1,35 @@
1
+ import type { Message, Node, VFile } from "./file.ts";
2
+ /** The crate's pipeline as the addon exposes it: values cross as JSON. */
3
+ export interface NativePipeline {
4
+ use(value: unknown, options?: unknown): void;
5
+ data(key?: string): unknown;
6
+ setData(key: string, value: unknown): void;
7
+ replaceData(data: Record<string, unknown>): void;
8
+ freeze(): void;
9
+ parse(text: string): Node;
10
+ run(tree: Node, value?: string): Node;
11
+ runSync(tree: Node, value?: string): Node;
12
+ stringify(tree: Node): string;
13
+ process(text: string, path?: string): VFile;
14
+ processSync(text: string, path?: string): VFile;
15
+ hosts(): number[];
16
+ startRun(tree: Node, value: string | undefined, sync: boolean): NativeRun<Node>;
17
+ startProcess(text: string, sync: boolean, path?: string): NativeRun<VFile>;
18
+ }
19
+ /** A run paused before host plugins until `resume`, then finished with `result`. */
20
+ export interface NativeRun<Result> {
21
+ hosts(): number[];
22
+ tree(): Node;
23
+ value(): string | null;
24
+ messages(): Message[];
25
+ resume(tree: Node, messages: Message[]): void;
26
+ result(): Result;
27
+ }
28
+ /** What the napi addon exports. */
29
+ export interface Addon {
30
+ version(): string;
31
+ pluginNames(): string[];
32
+ retainedMemory(): number;
33
+ setRetainedMemory(bytes: number): void;
34
+ Pipeline: new () => NativePipeline;
35
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9tb2RlbHMvYWRkb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgTWVzc2FnZSwgTm9kZSwgVkZpbGUgfSBmcm9tIFwiLi9maWxlLnRzXCJcblxuLyoqIFRoZSBjcmF0ZSdzIHBpcGVsaW5lIGFzIHRoZSBhZGRvbiBleHBvc2VzIGl0OiB2YWx1ZXMgY3Jvc3MgYXMgSlNPTi4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTmF0aXZlUGlwZWxpbmUge1xuICB1c2UodmFsdWU6IHVua25vd24sIG9wdGlvbnM/OiB1bmtub3duKTogdm9pZFxuICBkYXRhKGtleT86IHN0cmluZyk6IHVua25vd25cbiAgc2V0RGF0YShrZXk6IHN0cmluZywgdmFsdWU6IHVua25vd24pOiB2b2lkXG4gIHJlcGxhY2VEYXRhKGRhdGE6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogdm9pZFxuICBmcmVlemUoKTogdm9pZFxuICBwYXJzZSh0ZXh0OiBzdHJpbmcpOiBOb2RlXG4gIHJ1bih0cmVlOiBOb2RlLCB2YWx1ZT86IHN0cmluZyk6IE5vZGVcbiAgcnVuU3luYyh0cmVlOiBOb2RlLCB2YWx1ZT86IHN0cmluZyk6IE5vZGVcbiAgc3RyaW5naWZ5KHRyZWU6IE5vZGUpOiBzdHJpbmdcbiAgcHJvY2Vzcyh0ZXh0OiBzdHJpbmcsIHBhdGg/OiBzdHJpbmcpOiBWRmlsZVxuICBwcm9jZXNzU3luYyh0ZXh0OiBzdHJpbmcsIHBhdGg/OiBzdHJpbmcpOiBWRmlsZVxuICBob3N0cygpOiBudW1iZXJbXVxuICBzdGFydFJ1bih0cmVlOiBOb2RlLCB2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkLCBzeW5jOiBib29sZWFuKTogTmF0aXZlUnVuPE5vZGU+XG4gIHN0YXJ0UHJvY2Vzcyh0ZXh0OiBzdHJpbmcsIHN5bmM6IGJvb2xlYW4sIHBhdGg/OiBzdHJpbmcpOiBOYXRpdmVSdW48VkZpbGU+XG59XG5cbi8qKiBBIHJ1biBwYXVzZWQgYmVmb3JlIGhvc3QgcGx1Z2lucyB1bnRpbCBgcmVzdW1lYCwgdGhlbiBmaW5pc2hlZCB3aXRoIGByZXN1bHRgLiAqL1xuZXhwb3J0IGludGVyZmFjZSBOYXRpdmVSdW48UmVzdWx0PiB7XG4gIGhvc3RzKCk6IG51bWJlcltdXG4gIHRyZWUoKTogTm9kZVxuICB2YWx1ZSgpOiBzdHJpbmcgfCBudWxsXG4gIG1lc3NhZ2VzKCk6IE1lc3NhZ2VbXVxuICByZXN1bWUodHJlZTogTm9kZSwgbWVzc2FnZXM6IE1lc3NhZ2VbXSk6IHZvaWRcbiAgcmVzdWx0KCk6IFJlc3VsdFxufVxuXG4vKiogV2hhdCB0aGUgbmFwaSBhZGRvbiBleHBvcnRzLiAqL1xuZXhwb3J0IGludGVyZmFjZSBBZGRvbiB7XG4gIHZlcnNpb24oKTogc3RyaW5nXG4gIHBsdWdpbk5hbWVzKCk6IHN0cmluZ1tdXG4gIHJldGFpbmVkTWVtb3J5KCk6IG51bWJlclxuICBzZXRSZXRhaW5lZE1lbW9yeShieXRlczogbnVtYmVyKTogdm9pZFxuICBQaXBlbGluZTogbmV3ICgpID0+IE5hdGl2ZVBpcGVsaW5lXG59XG4iXX0=
@@ -0,0 +1,52 @@
1
+ /** A unist node as JSON: what `parse` returns and `run` and `stringify` take. */
2
+ export interface Node {
3
+ type: string;
4
+ [key: string]: unknown;
5
+ }
6
+ /** One place in a file: a 1-indexed line and column and a 0-indexed offset, when known. */
7
+ export interface Point {
8
+ line: number;
9
+ column: number;
10
+ offset: number | null;
11
+ }
12
+ /** A diagnostic a plugin reported, as vfile-message has it. */
13
+ export interface Message {
14
+ reason: string;
15
+ ruleId: string | null;
16
+ source: string | null;
17
+ place: {
18
+ start: Point;
19
+ end: Point;
20
+ } | null;
21
+ }
22
+ /** What `process` gives back, as a vfile: the output, the messages and the file's data. */
23
+ export interface VFile {
24
+ value: string;
25
+ messages: Message[];
26
+ data: Record<string, unknown>;
27
+ path?: string;
28
+ }
29
+ /** A document: its text, or a file holding it as `value`, with its path when known. */
30
+ export type Compatible = string | {
31
+ value: string;
32
+ path?: string;
33
+ };
34
+ /** Where a message is: a point, a position, or a node holding one. */
35
+ export type Place = {
36
+ line: number;
37
+ column: number;
38
+ offset?: number | null;
39
+ } | {
40
+ start: Point;
41
+ end: Point;
42
+ } | {
43
+ position?: unknown;
44
+ };
45
+ /** What `message` takes besides the reason, as vfile-message names it. */
46
+ export interface MessageOptions {
47
+ ancestors?: unknown[];
48
+ cause?: unknown;
49
+ place?: Place;
50
+ ruleId?: string;
51
+ source?: string;
52
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL21vZGVscy9maWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIvKiogQSB1bmlzdCBub2RlIGFzIEpTT046IHdoYXQgYHBhcnNlYCByZXR1cm5zIGFuZCBgcnVuYCBhbmQgYHN0cmluZ2lmeWAgdGFrZS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTm9kZSB7XG4gIHR5cGU6IHN0cmluZ1xuICBba2V5OiBzdHJpbmddOiB1bmtub3duXG59XG5cbi8qKiBPbmUgcGxhY2UgaW4gYSBmaWxlOiBhIDEtaW5kZXhlZCBsaW5lIGFuZCBjb2x1bW4gYW5kIGEgMC1pbmRleGVkIG9mZnNldCwgd2hlbiBrbm93bi4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUG9pbnQge1xuICBsaW5lOiBudW1iZXJcbiAgY29sdW1uOiBudW1iZXJcbiAgb2Zmc2V0OiBudW1iZXIgfCBudWxsXG59XG5cbi8qKiBBIGRpYWdub3N0aWMgYSBwbHVnaW4gcmVwb3J0ZWQsIGFzIHZmaWxlLW1lc3NhZ2UgaGFzIGl0LiAqL1xuZXhwb3J0IGludGVyZmFjZSBNZXNzYWdlIHtcbiAgcmVhc29uOiBzdHJpbmdcbiAgcnVsZUlkOiBzdHJpbmcgfCBudWxsXG4gIHNvdXJjZTogc3RyaW5nIHwgbnVsbFxuICBwbGFjZTogeyBzdGFydDogUG9pbnQ7IGVuZDogUG9pbnQgfSB8IG51bGxcbn1cblxuLyoqIFdoYXQgYHByb2Nlc3NgIGdpdmVzIGJhY2ssIGFzIGEgdmZpbGU6IHRoZSBvdXRwdXQsIHRoZSBtZXNzYWdlcyBhbmQgdGhlIGZpbGUncyBkYXRhLiAqL1xuZXhwb3J0IGludGVyZmFjZSBWRmlsZSB7XG4gIHZhbHVlOiBzdHJpbmdcbiAgbWVzc2FnZXM6IE1lc3NhZ2VbXVxuICBkYXRhOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICBwYXRoPzogc3RyaW5nXG59XG5cbi8qKiBBIGRvY3VtZW50OiBpdHMgdGV4dCwgb3IgYSBmaWxlIGhvbGRpbmcgaXQgYXMgYHZhbHVlYCwgd2l0aCBpdHMgcGF0aCB3aGVuIGtub3duLiAqL1xuZXhwb3J0IHR5cGUgQ29tcGF0aWJsZSA9IHN0cmluZyB8IHsgdmFsdWU6IHN0cmluZzsgcGF0aD86IHN0cmluZyB9XG5cbi8qKiBXaGVyZSBhIG1lc3NhZ2UgaXM6IGEgcG9pbnQsIGEgcG9zaXRpb24sIG9yIGEgbm9kZSBob2xkaW5nIG9uZS4gKi9cbmV4cG9ydCB0eXBlIFBsYWNlID1cbiAgfCB7IGxpbmU6IG51bWJlcjsgY29sdW1uOiBudW1iZXI7IG9mZnNldD86IG51bWJlciB8IG51bGwgfVxuICB8IHsgc3RhcnQ6IFBvaW50OyBlbmQ6IFBvaW50IH1cbiAgfCB7IHBvc2l0aW9uPzogdW5rbm93biB9XG5cbi8qKiBXaGF0IGBtZXNzYWdlYCB0YWtlcyBiZXNpZGVzIHRoZSByZWFzb24sIGFzIHZmaWxlLW1lc3NhZ2UgbmFtZXMgaXQuICovXG5leHBvcnQgaW50ZXJmYWNlIE1lc3NhZ2VPcHRpb25zIHtcbiAgYW5jZXN0b3JzPzogdW5rbm93bltdXG4gIGNhdXNlPzogdW5rbm93blxuICBwbGFjZT86IFBsYWNlXG4gIHJ1bGVJZD86IHN0cmluZ1xuICBzb3VyY2U/OiBzdHJpbmdcbn1cbiJdfQ==
@@ -0,0 +1,7 @@
1
+ import type { Attacher, Transformer } from "./plugin.ts";
2
+ /** A JavaScript plugin a processor uses: its attacher, options and, once attached, its transformer. */
3
+ export interface Host {
4
+ attacher: Attacher;
5
+ parameters: unknown[];
6
+ transformer?: Transformer;
7
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG9zdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL21vZGVscy9ob3N0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEF0dGFjaGVyLCBUcmFuc2Zvcm1lciB9IGZyb20gXCIuL3BsdWdpbi50c1wiXG5cbi8qKiBBIEphdmFTY3JpcHQgcGx1Z2luIGEgcHJvY2Vzc29yIHVzZXM6IGl0cyBhdHRhY2hlciwgb3B0aW9ucyBhbmQsIG9uY2UgYXR0YWNoZWQsIGl0cyB0cmFuc2Zvcm1lci4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSG9zdCB7XG4gIGF0dGFjaGVyOiBBdHRhY2hlclxuICBwYXJhbWV0ZXJzOiB1bmtub3duW11cbiAgdHJhbnNmb3JtZXI/OiBUcmFuc2Zvcm1lclxufVxuIl19
@@ -0,0 +1,26 @@
1
+ import type { Node } from "./file.ts";
2
+ import type { HostFile } from "./vfile.ts";
3
+ /** A native plugin as a pipeline names it, with its options when given. */
4
+ export interface Plugin<Name extends string = string, Options = unknown> {
5
+ name: Name;
6
+ options?: Options;
7
+ }
8
+ /** Plugins and the settings they share, as unified's presets. */
9
+ export interface Preset {
10
+ plugins?: PluggableList;
11
+ settings?: Record<string, unknown>;
12
+ }
13
+ /**
14
+ * A JavaScript plugin, as unified's attachers: called with the processor as `this` and its
15
+ * options when the processor freezes, it returns the transformer the pipeline runs.
16
+ */
17
+ export type Attacher = (this: never, ...parameters: never[]) => unknown;
18
+ /**
19
+ * What an attacher returns: it changes the tree in place or returns a new one, directly,
20
+ * through a promise or through `next`.
21
+ */
22
+ export type Transformer = (tree: Node, file: HostFile, next: (error?: unknown, tree?: Node) => void) => unknown;
23
+ /** A plugin, by descriptor, name or attacher, with options, or a preset. */
24
+ export type Pluggable = Plugin | string | Attacher | [Plugin | string | Attacher, unknown?] | Preset;
25
+ /** Several pluggables, used in order. */
26
+ export type PluggableList = Pluggable[];
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vbW9kZWxzL3BsdWdpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBOb2RlIH0gZnJvbSBcIi4vZmlsZS50c1wiXG5pbXBvcnQgdHlwZSB7IEhvc3RGaWxlIH0gZnJvbSBcIi4vdmZpbGUudHNcIlxuXG4vKiogQSBuYXRpdmUgcGx1Z2luIGFzIGEgcGlwZWxpbmUgbmFtZXMgaXQsIHdpdGggaXRzIG9wdGlvbnMgd2hlbiBnaXZlbi4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGx1Z2luPE5hbWUgZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmcsIE9wdGlvbnMgPSB1bmtub3duPiB7XG4gIG5hbWU6IE5hbWVcbiAgb3B0aW9ucz86IE9wdGlvbnNcbn1cblxuLyoqIFBsdWdpbnMgYW5kIHRoZSBzZXR0aW5ncyB0aGV5IHNoYXJlLCBhcyB1bmlmaWVkJ3MgcHJlc2V0cy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUHJlc2V0IHtcbiAgcGx1Z2lucz86IFBsdWdnYWJsZUxpc3RcbiAgc2V0dGluZ3M/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxufVxuXG4vKipcbiAqIEEgSmF2YVNjcmlwdCBwbHVnaW4sIGFzIHVuaWZpZWQncyBhdHRhY2hlcnM6IGNhbGxlZCB3aXRoIHRoZSBwcm9jZXNzb3IgYXMgYHRoaXNgIGFuZCBpdHNcbiAqIG9wdGlvbnMgd2hlbiB0aGUgcHJvY2Vzc29yIGZyZWV6ZXMsIGl0IHJldHVybnMgdGhlIHRyYW5zZm9ybWVyIHRoZSBwaXBlbGluZSBydW5zLlxuICovXG5leHBvcnQgdHlwZSBBdHRhY2hlciA9ICh0aGlzOiBuZXZlciwgLi4ucGFyYW1ldGVyczogbmV2ZXJbXSkgPT4gdW5rbm93blxuXG4vKipcbiAqIFdoYXQgYW4gYXR0YWNoZXIgcmV0dXJuczogaXQgY2hhbmdlcyB0aGUgdHJlZSBpbiBwbGFjZSBvciByZXR1cm5zIGEgbmV3IG9uZSwgZGlyZWN0bHksXG4gKiB0aHJvdWdoIGEgcHJvbWlzZSBvciB0aHJvdWdoIGBuZXh0YC5cbiAqL1xuZXhwb3J0IHR5cGUgVHJhbnNmb3JtZXIgPSAoXG4gIHRyZWU6IE5vZGUsXG4gIGZpbGU6IEhvc3RGaWxlLFxuICBuZXh0OiAoZXJyb3I/OiB1bmtub3duLCB0cmVlPzogTm9kZSkgPT4gdm9pZCxcbikgPT4gdW5rbm93blxuXG4vKiogQSBwbHVnaW4sIGJ5IGRlc2NyaXB0b3IsIG5hbWUgb3IgYXR0YWNoZXIsIHdpdGggb3B0aW9ucywgb3IgYSBwcmVzZXQuICovXG5leHBvcnQgdHlwZSBQbHVnZ2FibGUgPVxuICB8IFBsdWdpblxuICB8IHN0cmluZ1xuICB8IEF0dGFjaGVyXG4gIHwgW1BsdWdpbiB8IHN0cmluZyB8IEF0dGFjaGVyLCB1bmtub3duP11cbiAgfCBQcmVzZXRcblxuLyoqIFNldmVyYWwgcGx1Z2dhYmxlcywgdXNlZCBpbiBvcmRlci4gKi9cbmV4cG9ydCB0eXBlIFBsdWdnYWJsZUxpc3QgPSBQbHVnZ2FibGVbXVxuIl19
@@ -0,0 +1,39 @@
1
+ import type { NativePipeline } from "./addon.ts";
2
+ import type { Compatible, Node, VFile } from "./file.ts";
3
+ import type { Pluggable, PluggableList, Preset } from "./plugin.ts";
4
+ /**
5
+ * unified's processor over the native pipeline; every call is the crate's, except that
6
+ * JavaScript plugins run here when a run pauses before them.
7
+ */
8
+ export declare class Processor {
9
+ #private;
10
+ constructor(native: NativePipeline);
11
+ /**
12
+ * Add a plugin, a list of them or a preset; a plugin used again is reconfigured. A
13
+ * JavaScript plugin is an attacher, called with the processor and its options at freeze.
14
+ */
15
+ use(value: Pluggable | PluggableList | Preset | null | undefined, ...options: unknown[]): this;
16
+ /** All data, or the value under `key`. */
17
+ data(): Record<string, unknown>;
18
+ data(key: string): unknown;
19
+ /** Set the value under `key`, or replace all data. */
20
+ data(key: string, value: unknown): this;
21
+ data(dataset: Record<string, unknown>): this;
22
+ /** Attach every plugin; later `use` and `data` setters fail. */
23
+ freeze(): this;
24
+ /** Parse a document into a tree. */
25
+ parse(document: Compatible): Node;
26
+ /**
27
+ * Run the transforms, finishing asynchronous stages; `file`, the text `tree` was parsed
28
+ * from, lets bridges read it and keeps positions in the result.
29
+ */
30
+ run(tree: Node, file?: Compatible): Promise<Node>;
31
+ /** Run the transforms; fails with `async-in-sync` on an asynchronous stage. */
32
+ runSync(tree: Node, file?: Compatible): Node;
33
+ /** Compile a tree, running no transform. */
34
+ stringify(tree: Node): string;
35
+ /** Parse, run and compile a document, finishing asynchronous stages. */
36
+ process(document: Compatible): Promise<VFile>;
37
+ /** Parse, run and compile a document; fails with `async-in-sync` on an asynchronous stage. */
38
+ processSync(document: Compatible): VFile;
39
+ }
@@ -0,0 +1,154 @@
1
+ import { isAttacher } from "../actions/attacher/check.js";
2
+ import { isPlainObject, mergeOptions } from "../actions/options/merge.js";
3
+ import { mapPluggable } from "../actions/pluggable/map.js";
4
+ import { finishRun } from "../actions/run/finish.js";
5
+ import { isTransformer } from "../actions/transformer/check.js";
6
+ import { HostFile } from "./vfile.js";
7
+ /**
8
+ * unified's processor over the native pipeline; every call is the crate's, except that
9
+ * JavaScript plugins run here when a run pauses before them.
10
+ */
11
+ export class Processor {
12
+ #native;
13
+ #ids = new Map();
14
+ #hosts = new Map();
15
+ #attached = false;
16
+ constructor(native) {
17
+ this.#native = native;
18
+ }
19
+ /**
20
+ * Add a plugin, a list of them or a preset; a plugin used again is reconfigured. A
21
+ * JavaScript plugin is an attacher, called with the processor and its options at freeze.
22
+ */
23
+ use(value, ...options) {
24
+ if (isAttacher(value)) {
25
+ this.#native.use([this.#register(value, options)]);
26
+ return this;
27
+ }
28
+ const register = (attacher, parameters) => this.#register(attacher, parameters);
29
+ this.#native.use(mapPluggable(value ?? null, register), options[0]);
30
+ return this;
31
+ }
32
+ data(key, ...value) {
33
+ if (typeof key === "object") {
34
+ this.#native.replaceData(key);
35
+ return this;
36
+ }
37
+ if (key !== undefined && value.length > 0) {
38
+ this.#native.setData(key, value[0]);
39
+ return this;
40
+ }
41
+ return this.#native.data(key);
42
+ }
43
+ /** Attach every plugin; later `use` and `data` setters fail. */
44
+ freeze() {
45
+ this.#attach();
46
+ this.#native.freeze();
47
+ return this;
48
+ }
49
+ /** Parse a document into a tree. */
50
+ parse(document) {
51
+ this.#attach();
52
+ return this.#native.parse(readValue(document) ?? "");
53
+ }
54
+ /**
55
+ * Run the transforms, finishing asynchronous stages; `file`, the text `tree` was parsed
56
+ * from, lets bridges read it and keeps positions in the result.
57
+ */
58
+ async run(tree, file) {
59
+ const value = readValue(file);
60
+ if (!this.#attach())
61
+ return this.#native.run(tree, value);
62
+ const run = this.#native.startRun(tree, value, false);
63
+ const host = new HostFile({ value, path: readPath(file) });
64
+ await finishRun({ run, hosts: this.#hosts, file: host, sync: false, call: "run" });
65
+ return run.result();
66
+ }
67
+ /** Run the transforms; fails with `async-in-sync` on an asynchronous stage. */
68
+ runSync(tree, file) {
69
+ const value = readValue(file);
70
+ if (!this.#attach())
71
+ return this.#native.runSync(tree, value);
72
+ const run = this.#native.startRun(tree, value, true);
73
+ const host = new HostFile({ value, path: readPath(file) });
74
+ void finishRun({ run, hosts: this.#hosts, file: host, sync: true, call: "run" });
75
+ return run.result();
76
+ }
77
+ /** Compile a tree, running no transform. */
78
+ stringify(tree) {
79
+ this.#attach();
80
+ return this.#native.stringify(tree);
81
+ }
82
+ /** Parse, run and compile a document, finishing asynchronous stages. */
83
+ async process(document) {
84
+ const text = readValue(document) ?? "";
85
+ if (!this.#attach())
86
+ return withPath(this.#native.process(text, readPath(document)), document);
87
+ const run = this.#native.startProcess(text, false, readPath(document));
88
+ const file = new HostFile({ value: run.value() ?? text, path: readPath(document) });
89
+ await finishRun({ run, hosts: this.#hosts, file, sync: false, call: "process" });
90
+ return withPath(mergeData(run.result(), file.data), document);
91
+ }
92
+ /** Parse, run and compile a document; fails with `async-in-sync` on an asynchronous stage. */
93
+ processSync(document) {
94
+ const text = readValue(document) ?? "";
95
+ if (!this.#attach())
96
+ return withPath(this.#native.processSync(text, readPath(document)), document);
97
+ const run = this.#native.startProcess(text, true, readPath(document));
98
+ const file = new HostFile({ value: run.value() ?? text, path: readPath(document) });
99
+ void finishRun({ run, hosts: this.#hosts, file, sync: true, call: "process" });
100
+ return withPath(mergeData(run.result(), file.data), document);
101
+ }
102
+ // unified's addPlugin: the same attacher is one plugin, its object options merged
103
+ #register(attacher, parameters) {
104
+ let id = this.#ids.get(attacher);
105
+ if (id === undefined) {
106
+ id = this.#ids.size;
107
+ this.#ids.set(attacher, id);
108
+ this.#hosts.set(id, { attacher, parameters });
109
+ return [{ host: id }, parameters[0] !== false];
110
+ }
111
+ const host = this.#hosts.get(id);
112
+ if (!host || parameters.length === 0)
113
+ return [{ host: id }];
114
+ const [primary, ...rest] = parameters;
115
+ const merged = isPlainObject(host.parameters[0]) && isPlainObject(primary)
116
+ ? mergeOptions(host.parameters[0], primary)
117
+ : primary;
118
+ host.parameters = [merged, ...rest];
119
+ return [{ host: id }, merged !== false];
120
+ }
121
+ // Attachers run once, before the native pipeline freezes, so they can still set data;
122
+ // whether any JavaScript plugin is on decides if runs pause for them
123
+ #attach() {
124
+ if (!this.#attached) {
125
+ this.#attached = true;
126
+ for (const id of this.#native.hosts()) {
127
+ const host = this.#hosts.get(id);
128
+ if (!host)
129
+ continue;
130
+ const [primary, ...rest] = host.parameters;
131
+ const parameters = primary === true ? [undefined, ...rest] : host.parameters;
132
+ const transformer = Reflect.apply(host.attacher, this, parameters);
133
+ if (isTransformer(transformer))
134
+ host.transformer = transformer;
135
+ }
136
+ }
137
+ return this.#native.hosts().length > 0;
138
+ }
139
+ }
140
+ function readValue(file) {
141
+ return typeof file === "string" ? file : file?.value;
142
+ }
143
+ function readPath(file) {
144
+ return typeof file === "string" ? undefined : file?.path;
145
+ }
146
+ // Native stages' data first, then what JavaScript plugins stored over it
147
+ function mergeData(result, data) {
148
+ return { ...result, data: { ...result.data, ...data } };
149
+ }
150
+ function withPath(file, document) {
151
+ const path = readPath(document);
152
+ return path === undefined ? file : { ...file, path };
153
+ }
154
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvY2Vzc29yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vbW9kZWxzL3Byb2Nlc3Nvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sOEJBQThCLENBQUE7QUFDekQsT0FBTyxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQTtBQUN6RSxPQUFPLEVBQWtCLFlBQVksRUFBRSxNQUFNLDZCQUE2QixDQUFBO0FBQzFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQTtBQUNwRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUNBQWlDLENBQUE7QUFLL0QsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFlBQVksQ0FBQTtBQUVyQzs7O0dBR0c7QUFDSCxNQUFNLE9BQU8sU0FBUztJQUNwQixPQUFPLENBQWdCO0lBQ3ZCLElBQUksR0FBRyxJQUFJLEdBQUcsRUFBb0IsQ0FBQTtJQUNsQyxNQUFNLEdBQUcsSUFBSSxHQUFHLEVBQWdCLENBQUE7SUFDaEMsU0FBUyxHQUFHLEtBQUssQ0FBQTtJQUVqQixZQUFZLE1BQXNCO1FBQ2hDLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFBO0lBQ3ZCLENBQUM7SUFFRDs7O09BR0c7SUFDSCxHQUFHLENBQ0QsS0FBNEQsRUFDNUQsR0FBRyxPQUFrQjtRQUVyQixJQUFJLFVBQVUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3RCLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFBO1lBQ2xELE9BQU8sSUFBSSxDQUFBO1FBQ2IsQ0FBQztRQUNELE1BQU0sUUFBUSxHQUFHLENBQUMsUUFBa0IsRUFBRSxVQUFxQixFQUFFLEVBQUUsQ0FDN0QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUs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QUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFBO0FBQzFELENBQUM7QUFFRCx5RUFBeUU7QUFDekUsU0FBUyxTQUFTLENBQUMsTUFBYSxFQUFFLElBQTZCO0lBQzdELE9BQU8sRUFBRSxHQUFHLE1BQU0sRUFBRSxJQUFJLEVBQUUsRUFBRSxHQUFHLE1BQU0sQ0FBQyxJQUFJLEVBQUUsR0FBRyxJQUFJLEVBQUUsRUFBRSxDQUFBO0FBQ3pELENBQUM7QUFFRCxTQUFTLFFBQVEsQ0FBQyxJQUFXLEVBQUUsUUFBb0I7SUFDakQsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFBO0lBQy9CLE9BQU8sSUFBSSxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFBO0FBQ3RELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpc0F0dGFjaGVyIH0gZnJvbSBcIi4uL2FjdGlvbnMvYXR0YWNoZXIvY2hlY2sudHNcIlxuaW1wb3J0IHsgaXNQbGFpbk9iamVjdCwgbWVyZ2VPcHRpb25zIH0gZnJvbSBcIi4uL2FjdGlvbnMvb3B0aW9ucy9tZXJnZS50c1wiXG5pbXBvcnQgeyB0eXBlIEhvc3RFbnRyeSwgbWFwUGx1Z2dhYmxlIH0gZnJvbSBcIi4uL2FjdGlvbnMvcGx1Z2dhYmxlL21hcC50c1wiXG5pbXBvcnQgeyBmaW5pc2hSdW4gfSBmcm9tIFwiLi4vYWN0aW9ucy9ydW4vZmluaXNoLnRzXCJcbmltcG9ydCB7IGlzVHJhbnNmb3JtZXIgfSBmcm9tIFwiLi4vYWN0aW9ucy90cmFuc2Zvcm1lci9jaGVjay50c1wiXG5pbXBvcnQgdHlwZSB7IE5hdGl2ZVBpcGVsaW5lIH0gZnJvbSBcIi4vYWRkb24udHNcIlxuaW1wb3J0IHR5cGUgeyBDb21wYXRpYmxlLCBOb2RlLCBWRmlsZSB9IGZyb20gXCIuL2ZpbGUudHNcIlxuaW1wb3J0IHR5cGUgeyBIb3N0IH0gZnJvbSBcIi4vaG9zdC50c1wiXG5pbXBvcnQgdHlwZSB7IEF0dGFjaGVyLCBQbHVnZ2FibGUsIFBsdWdnYWJsZUxpc3QsIFByZXNldCB9IGZyb20gXCIuL3BsdWdpbi50c1wiXG5pbXBvcnQgeyBIb3N0RmlsZSB9IGZyb20gXCIuL3ZmaWxlLnRzXCJcblxuLyoqXG4gKiB1bmlmaWVkJ3MgcHJvY2Vzc29yIG92ZXIgdGhlIG5hdGl2ZSBwaXBlbGluZTsgZXZlcnkgY2FsbCBpcyB0aGUgY3JhdGUncywgZXhjZXB0IHRoYXRcbiAqIEphdmFTY3JpcHQgcGx1Z2lucyBydW4gaGVyZSB3aGVuIGEgcnVuIHBhdXNlcyBiZWZvcmUgdGhlbS5cbiAqL1xuZXhwb3J0IGNsYXNzIFByb2Nlc3NvciB7XG4gICNuYXRpdmU6IE5hdGl2ZVBpcGVsaW5lXG4gICNpZHMgPSBuZXcgTWFwPEF0dGFjaGVyLCBudW1iZXI+KClcbiAgI2hvc3RzID0gbmV3IE1hcDxudW1iZXIsIEhvc3Q+KClcbiAgI2F0dGFjaGVkID0gZmFsc2VcblxuICBjb25zdHJ1Y3RvcihuYXRpdmU6IE5hdGl2ZVBpcGVsaW5lKSB7XG4gICAgdGhpcy4jbmF0aXZlID0gbmF0aXZlXG4gIH1cblxuICAvKipcbiAgICogQWRkIGEgcGx1Z2luLCBhIGxpc3Qgb2YgdGhlbSBvciBhIHByZXNldDsgYSBwbHVnaW4gdXNlZCBhZ2FpbiBpcyByZWNvbmZpZ3VyZWQuIEFcbiAgICogSmF2YVNjcmlwdCBwbHVnaW4gaXMgYW4gYXR0YWNoZXIsIGNhbGxlZCB3aXRoIHRoZSBwcm9jZXNzb3IgYW5kIGl0cyBvcHRpb25zIGF0IGZyZWV6ZS5cbiAgICovXG4gIHVzZShcbiAgICB2YWx1ZTogUGx1Z2dhYmxlIHwgUGx1Z2dhYmxlTGlzdCB8IFByZXNldCB8IG51bGwgfCB1bmRlZmluZWQsXG4gICAgLi4ub3B0aW9uczogdW5rbm93bltdXG4gICkge1xuICAgIGlmIChpc0F0dGFjaGVyKHZhbHVlKSkge1xuICAgICAgdGhpcy4jbmF0aXZlLnVzZShbdGhpcy4jcmVnaXN0ZXIodmFsdWUsIG9wdGlvbnMpXSlcbiAgICAgIHJldHVybiB0aGlzXG4gICAgfVxuICAgIGNvbnN0IHJlZ2lzdGVyID0gKGF0dGFjaGVyOiBBdHRhY2hlciwgcGFyYW1ldGVyczogdW5rbm93bltdKSA9PlxuICAgICAgdGhpcy4jcmVnaXN0ZXIoYXR0YWNoZXIsIHBhcmFtZXRlcnMpXG4gICAgdGhpcy4jbmF0aXZlLnVzZShtYXBQbHVnZ2FibGUodmFsdWUgPz8gbnVsbCwgcmVnaXN0ZXIpLCBvcHRpb25zWzBdKVxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICAvKiogQWxsIGRhdGEsIG9yIHRoZSB2YWx1ZSB1bmRlciBga2V5YC4gKi9cbiAgZGF0YSgpOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICBkYXRhKGtleTogc3RyaW5nKTogdW5rbm93blxuICAvKiogU2V0IHRoZSB2YWx1ZSB1bmRlciBga2V5YCwgb3IgcmVwbGFjZSBhbGwgZGF0YS4gKi9cbiAgZGF0YShrZXk6IHN0cmluZywgdmFsdWU6IHVua25vd24pOiB0aGlzXG4gIGRhdGEoZGF0YXNldDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiB0aGlzXG4gIGRhdGEoa2V5Pzogc3RyaW5nIHwgUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIC4uLnZhbHVlOiB1bmtub3duW10pIHtcbiAgICBpZiAodHlwZW9mIGtleSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgdGhpcy4jbmF0aXZlLnJlcGxhY2VEYXRhKGtleSlcbiAgICAgIHJldHVybiB0aGlzXG4gICAgfVxuICAgIGlmIChrZXkgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZS5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLiNuYXRpdmUuc2V0RGF0YShrZXksIHZhbHVlWzBdKVxuICAgICAgcmV0dXJuIHRoaXNcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuI25hdGl2ZS5kYXRhKGtleSlcbiAgfVxuXG4gIC8qKiBBdHRhY2ggZXZlcnkgcGx1Z2luOyBsYXRlciBgdXNlYCBhbmQgYGRhdGFgIHNldHRlcnMgZmFpbC4gKi9cbiAgZnJlZXplKCkge1xuICAgIHRoaXMuI2F0dGFjaCgpXG4gICAgdGhpcy4jbmF0aXZlLmZyZWV6ZSgpXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIC8qKiBQYXJzZSBhIGRvY3VtZW50IGludG8gYSB0cmVlLiAqL1xuICBwYXJzZShkb2N1bWVudDogQ29tcGF0aWJsZSkge1xuICAgIHRoaXMuI2F0dGFjaCgpXG4gICAgcmV0dXJuIHRoaXMuI25hdGl2ZS5wYXJzZShyZWFkVmFsdWUoZG9jdW1lbnQpID8/IFwiXCIpXG4gIH1cblxuICAvKipcbiAgICogUnVuIHRoZSB0cmFuc2Zvcm1zLCBmaW5pc2hpbmcgYXN5bmNocm9ub3VzIHN0YWdlczsgYGZpbGVgLCB0aGUgdGV4dCBgdHJlZWAgd2FzIHBhcnNlZFxuICAgKiBmcm9tLCBsZXRzIGJyaWRnZXMgcmVhZCBpdCBhbmQga2VlcHMgcG9zaXRpb25zIGluIHRoZSByZXN1bHQuXG4gICAqL1xuICBhc3luYyBydW4odHJlZTogTm9kZSwgZmlsZT86IENvbXBhdGlibGUpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHJlYWRWYWx1ZShmaWxlKVxuICAgIGlmICghdGhpcy4jYXR0YWNoKCkpIHJldHVybiB0aGlzLiNuYXRpdmUucnVuKHRyZWUsIHZhbHVlKVxuICAgIGNvbnN0IHJ1biA9IHRoaXMuI25hdGl2ZS5zdGFydFJ1bih0cmVlLCB2YWx1ZSwgZmFsc2UpXG4gICAgY29uc3QgaG9zdCA9IG5ldyBIb3N0RmlsZSh7IHZhbHVlLCBwYXRoOiByZWFkUGF0aChmaWxlKSB9KVxuICAgIGF3YWl0IGZpbmlzaFJ1bih7IHJ1biwgaG9zdHM6IHRoaXMuI2hvc3RzLCBmaWxlOiBob3N0LCBzeW5jOiBmYWxzZSwgY2FsbDogXCJydW5cIiB9KVxuICAgIHJldHVybiBydW4ucmVzdWx0KClcbiAgfVxuXG4gIC8qKiBSdW4gdGhlIHRyYW5zZm9ybXM7IGZhaWxzIHdpdGggYGFzeW5jLWluLXN5bmNgIG9uIGFuIGFzeW5jaHJvbm91cyBzdGFnZS4gKi9cbiAgcnVuU3luYyh0cmVlOiBOb2RlLCBmaWxlPzogQ29tcGF0aWJsZSkge1xuICAgIGNvbnN0IHZhbHVlID0gcmVhZFZhbHVlKGZpbGUpXG4gICAgaWYgKCF0aGlzLiNhdHRhY2goKSkgcmV0dXJuIHRoaXMuI25hdGl2ZS5ydW5TeW5jKHRyZWUsIHZhbHVlKVxuICAgIGNvbnN0IHJ1biA9IHRoaXMuI25hdGl2ZS5zdGFydFJ1bih0cmVlLCB2YWx1ZSwgdHJ1ZSlcbiAgICBjb25zdCBob3N0ID0gbmV3IEhvc3RGaWxlKHsgdmFsdWUsIHBhdGg6IHJlYWRQYXRoKGZpbGUpIH0pXG4gICAgdm9pZCBmaW5pc2hSdW4oeyBydW4sIGhvc3RzOiB0aGlzLiNob3N0cywgZmlsZTogaG9zdCwgc3luYzogdHJ1ZSwgY2FsbDogXCJydW5cIiB9KVxuICAgIHJldHVybiBydW4ucmVzdWx0KClcbiAgfVxuXG4gIC8qKiBDb21waWxlIGEgdHJlZSwgcnVubmluZyBubyB0cmFuc2Zvcm0uICovXG4gIHN0cmluZ2lmeSh0cmVlOiBOb2RlKSB7XG4gICAgdGhpcy4jYXR0YWNoKClcbiAgICByZXR1cm4gdGhpcy4jbmF0aXZlLnN0cmluZ2lmeSh0cmVlKVxuICB9XG5cbiAgLyoqIFBhcnNlLCBydW4gYW5kIGNvbXBpbGUgYSBkb2N1bWVudCwgZmluaXNoaW5nIGFzeW5jaHJvbm91cyBzdGFnZXMuICovXG4gIGFzeW5jIHByb2Nlc3MoZG9jdW1lbnQ6IENvbXBhdGlibGUpOiBQcm9taXNlPFZGaWxlPiB7XG4gICAgY29uc3QgdGV4dCA9IHJlYWRWYWx1ZShkb2N1bWVudCkgPz8gXCJcIlxuICAgIGlmICghdGhpcy4jYXR0YWNoKCkpXG4gICAgICByZXR1cm4gd2l0aFBhdGgodGhpcy4jbmF0aXZlLnByb2Nlc3ModGV4dCwgcmVhZFBhdGgoZG9jdW1lbnQpKSwgZG9jdW1lbnQpXG4gICAgY29uc3QgcnVuID0gdGhpcy4jbmF0aXZlLnN0YXJ0UHJvY2Vzcyh0ZXh0LCBmYWxzZSwgcmVhZFBhdGgoZG9jdW1lbnQpKVxuICAgIGNvbnN0IGZpbGUgPSBuZXcgSG9zdEZpbGUoeyB2YWx1ZTogcnVuLnZhbHVlKCkgPz8gdGV4dCwgcGF0aDogcmVhZFBhdGgoZG9jdW1lbnQpIH0pXG4gICAgYXdhaXQgZmluaXNoUnVuKHsgcnVuLCBob3N0czogdGhpcy4jaG9zdHMsIGZpbGUsIHN5bmM6IGZhbHNlLCBjYWxsOiBcInByb2Nlc3NcIiB9KVxuICAgIHJldHVybiB3aXRoUGF0aChtZXJnZURhdGEocnVuLnJlc3VsdCgpLCBmaWxlLmRhdGEpLCBkb2N1bWVudClcbiAgfVxuXG4gIC8qKiBQYXJzZSwgcnVuIGFuZCBjb21waWxlIGEgZG9jdW1lbnQ7IGZhaWxzIHdpdGggYGFzeW5jLWluLXN5bmNgIG9uIGFuIGFzeW5jaHJvbm91cyBzdGFnZS4gKi9cbiAgcHJvY2Vzc1N5bmMoZG9jdW1lbnQ6IENvbXBhdGlibGUpOiBWRmlsZSB7XG4gICAgY29uc3QgdGV4dCA9IHJlYWRWYWx1ZShkb2N1bWVudCkgPz8gXCJcIlxuICAgIGlmICghdGhpcy4jYXR0YWNoKCkpXG4gICAgICByZXR1cm4gd2l0aFBhdGgodGhpcy4jbmF0aXZlLnByb2Nlc3NTeW5jKHRleHQsIHJlYWRQYXRoKGRvY3VtZW50KSksIGRvY3VtZW50KVxuICAgIGNvbnN0IHJ1biA9IHRoaXMuI25hdGl2ZS5zdGFydFByb2Nlc3ModGV4dCwgdHJ1ZSwgcmVhZFBhdGgoZG9jdW1lbnQpKVxuICAgIGNvbnN0IGZpbGUgPSBuZXcgSG9zdEZpbGUoeyB2YWx1ZTogcnVuLnZhbHVlKCkgPz8gdGV4dCwgcGF0aDogcmVhZFBhdGgoZG9jdW1lbnQpIH0pXG4gICAgdm9pZCBmaW5pc2hSdW4oeyBydW4sIGhvc3RzOiB0aGlzLiNob3N0cywgZmlsZSwgc3luYzogdHJ1ZSwgY2FsbDogXCJwcm9jZXNzXCIgfSlcbiAgICByZXR1cm4gd2l0aFBhdGgobWVyZ2VEYXRhKHJ1bi5yZXN1bHQoKSwgZmlsZS5kYXRhKSwgZG9jdW1lbnQpXG4gIH1cblxuICAvLyB1bmlmaWVkJ3MgYWRkUGx1Z2luOiB0aGUgc2FtZSBhdHRhY2hlciBpcyBvbmUgcGx1Z2luLCBpdHMgb2JqZWN0IG9wdGlvbnMgbWVyZ2VkXG4gICNyZWdpc3RlcihhdHRhY2hlcjogQXR0YWNoZXIsIHBhcmFtZXRlcnM6IHVua25vd25bXSk6IEhvc3RFbnRyeSB7XG4gICAgbGV0IGlkID0gdGhpcy4jaWRzLmdldChhdHRhY2hlcilcbiAgICBpZiAoaWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgaWQgPSB0aGlzLiNpZHMuc2l6ZVxuICAgICAgdGhpcy4jaWRzLnNldChhdHRhY2hlciwgaWQpXG4gICAgICB0aGlzLiNob3N0cy5zZXQoaWQsIHsgYXR0YWNoZXIsIHBhcmFtZXRlcnMgfSlcbiAgICAgIHJldHVybiBbeyBob3N0OiBpZCB9LCBwYXJhbWV0ZXJzWzBdICE9PSBmYWxzZV1cbiAgICB9XG4gICAgY29uc3QgaG9zdCA9IHRoaXMuI2hvc3RzLmdldChpZClcbiAgICBpZiAoIWhvc3QgfHwgcGFyYW1ldGVycy5sZW5ndGggPT09IDApIHJldHVybiBbeyBob3N0OiBpZCB9XVxuICAgIGNvbnN0IFtwcmltYXJ5LCAuLi5yZXN0XSA9IHBhcmFtZXRlcnNcbiAgICBjb25zdCBtZXJnZWQgPVxuICAgICAgaXNQbGFpbk9iamVjdChob3N0LnBhcmFtZXRlcnNbMF0pICYmIGlzUGxhaW5PYmplY3QocHJpbWFyeSlcbiAgICAgICAgPyBtZXJnZU9wdGlvbnMoaG9zdC5wYXJhbWV0ZXJzWzBdLCBwcmltYXJ5KVxuICAgICAgICA6IHByaW1hcnlcbiAgICBob3N0LnBhcmFtZXRlcnMgPSBbbWVyZ2VkLCAuLi5yZXN0XVxuICAgIHJldHVybiBbeyBob3N0OiBpZCB9LCBtZXJnZWQgIT09IGZhbHNlXVxuICB9XG5cbiAgLy8gQXR0YWNoZXJzIHJ1biBvbmNlLCBiZWZvcmUgdGhlIG5hdGl2ZSBwaXBlbGluZSBmcmVlemVzLCBzbyB0aGV5IGNhbiBzdGlsbCBzZXQgZGF0YTtcbiAgLy8gd2hldGhlciBhbnkgSmF2YVNjcmlwdCBwbHVnaW4gaXMgb24gZGVjaWRlcyBpZiBydW5zIHBhdXNlIGZvciB0aGVtXG4gICNhdHRhY2goKSB7XG4gICAgaWYgKCF0aGlzLiNhdHRhY2hlZCkge1xuICAgICAgdGhpcy4jYXR0YWNoZWQgPSB0cnVlXG4gICAgICBmb3IgKGNvbnN0IGlkIG9mIHRoaXMuI25hdGl2ZS5ob3N0cygpKSB7XG4gICAgICAgIGNvbnN0IGhvc3QgPSB0aGlzLiNob3N0cy5nZXQoaWQpXG4gICAgICAgIGlmICghaG9zdCkgY29udGludWVcbiAgICAgICAgY29uc3QgW3ByaW1hcnksIC4uLnJlc3RdID0gaG9zdC5wYXJhbWV0ZXJzXG4gICAgICAgIGNvbnN0IHBhcmFtZXRlcnMgPSBwcmltYXJ5ID09PSB0cnVlID8gW3VuZGVmaW5lZCwgLi4ucmVzdF0gOiBob3N0LnBhcmFtZXRlcnNcbiAgICAgICAgY29uc3QgdHJhbnNmb3JtZXI6IHVua25vd24gPSBSZWZsZWN0LmFwcGx5KGhvc3QuYXR0YWNoZXIsIHRoaXMsIHBhcmFtZXRlcnMpXG4gICAgICAgIGlmIChpc1RyYW5zZm9ybWVyKHRyYW5zZm9ybWVyKSkgaG9zdC50cmFuc2Zvcm1lciA9IHRyYW5zZm9ybWVyXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzLiNuYXRpdmUuaG9zdHMoKS5sZW5ndGggPiAwXG4gIH1cbn1cblxuZnVuY3Rpb24gcmVhZFZhbHVlKGZpbGU6IENvbXBhdGlibGUgfCB1bmRlZmluZWQpIHtcbiAgcmV0dXJuIHR5cGVvZiBmaWxlID09PSBcInN0cmluZ1wiID8gZmlsZSA6IGZpbGU/LnZhbHVlXG59XG5cbmZ1bmN0aW9uIHJlYWRQYXRoKGZpbGU6IENvbXBhdGlibGUgfCB1bmRlZmluZWQpIHtcbiAgcmV0dXJuIHR5cGVvZiBmaWxlID09PSBcInN0cmluZ1wiID8gdW5kZWZpbmVkIDogZmlsZT8ucGF0aFxufVxuXG4vLyBOYXRpdmUgc3RhZ2VzJyBkYXRhIGZpcnN0LCB0aGVuIHdoYXQgSmF2YVNjcmlwdCBwbHVnaW5zIHN0b3JlZCBvdmVyIGl0XG5mdW5jdGlvbiBtZXJnZURhdGEocmVzdWx0OiBWRmlsZSwgZGF0YTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBWRmlsZSB7XG4gIHJldHVybiB7IC4uLnJlc3VsdCwgZGF0YTogeyAuLi5yZXN1bHQuZGF0YSwgLi4uZGF0YSB9IH1cbn1cblxuZnVuY3Rpb24gd2l0aFBhdGgoZmlsZTogVkZpbGUsIGRvY3VtZW50OiBDb21wYXRpYmxlKSB7XG4gIGNvbnN0IHBhdGggPSByZWFkUGF0aChkb2N1bWVudClcbiAgcmV0dXJuIHBhdGggPT09IHVuZGVmaW5lZCA/IGZpbGUgOiB7IC4uLmZpbGUsIHBhdGggfVxufVxuIl19