textlane 0.0.0 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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 +250 -0
  18. package/build/generated/html.js +74 -0
  19. package/build/generated/md.d.ts +333 -0
  20. package/build/generated/md.js +94 -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 +146 -0
@@ -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): VFile;
14
+ processSync(text: string): VFile;
15
+ hosts(): number[];
16
+ startRun(tree: Node, value: string | undefined, sync: boolean): NativeRun<Node>;
17
+ startProcess(text: string, sync: boolean): 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+KTogdm9pZFxuICBmcmVlemUoKTogdm9pZFxuICBwYXJzZSh0ZXh0OiBzdHJpbmcpOiBOb2RlXG4gIHJ1bih0cmVlOiBOb2RlLCB2YWx1ZT86IHN0cmluZyk6IE5vZGVcbiAgcnVuU3luYyh0cmVlOiBOb2RlLCB2YWx1ZT86IHN0cmluZyk6IE5vZGVcbiAgc3RyaW5naWZ5KHRyZWU6IE5vZGUpOiBzdHJpbmdcbiAgcHJvY2Vzcyh0ZXh0OiBzdHJpbmcpOiBWRmlsZVxuICBwcm9jZXNzU3luYyh0ZXh0OiBzdHJpbmcpOiBWRmlsZVxuICBob3N0cygpOiBudW1iZXJbXVxuICBzdGFydFJ1bih0cmVlOiBOb2RlLCB2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkLCBzeW5jOiBib29sZWFuKTogTmF0aXZlUnVuPE5vZGU+XG4gIHN0YXJ0UHJvY2Vzcyh0ZXh0OiBzdHJpbmcsIHN5bmM6IGJvb2xlYW4pOiBOYXRpdmVSdW48VkZpbGU+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), document);
87
+ const run = this.#native.startProcess(text, false);
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), document);
97
+ const run = this.#native.startProcess(text, true);
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvY2Vzc29yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vbW9kZWxzL3Byb2Nlc3Nvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sOEJBQThCLENBQUE7QUFDekQsT0FBTyxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQTtBQUN6RSxPQUFPLEVBQWtCLFlBQVksRUFBRSxNQUFNLDZCQUE2QixDQUFBO0FBQzFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQTtBQUNwRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUNBQWlDLENBQUE7QUFLL0QsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFlBQVksQ0FBQTtBQUVyQzs7O0dBR0c7QUFDSCxNQUFNLE9BQU8sU0FBUztJQUNwQixPQUFPLENBQWdCO0lBQ3ZCLElBQUksR0FBRyxJQUFJLEdBQUcsRUFBb0IsQ0FBQTtJQUNsQyxNQUFNLEdBQUcsSUFBSSxHQUFHLEVBQWdCLENBQUE7SUFDaEMsU0FBUyxHQUFHLEtBQUssQ0FBQTtJQUVqQixZQUFZLE1BQXNCO1FBQ2hDLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFBO0lBQ3ZCLENBQUM7SUFFRDs7O09BR0c7SUFDSCxHQUFHLENBQ0QsS0FBNEQsRUFDNUQsR0FBRyxPQUFrQjtRQUVyQixJQUFJLFVBQVUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3RCLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFBO1lBQ2xELE9BQU8sSUFBSSxDQUFBO1FBQ2IsQ0FBQztRQUNELE1BQU0sUUFBUSxHQUFHLENBQUMsUUFBa0IsRUFBRSxVQUFxQixFQUFFLEVBQUUsQ0FDN0QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLENBQUE7UUFDdEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLEtBQUssSUFBSSxJQUFJLEVBQUUsUUFBUSxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDbkUsT0FBTyxJQUFJLENBQUE7SUFDYixDQUFDO0lBUUQsSUFBSSxDQUFDLEdBQXNDLEVBQUUsR0FBRyxLQUFnQjtRQUM5RCxJQUFJLE9BQU8sR0FBRyxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQzVCLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFBO1lBQzdCLE9BQU8sSUFBSSxDQUFBO1FBQ2IsQ0FBQztRQUNELElBQUksR0FBRyxLQUFLLFNBQVMsSUFBSSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQzFDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtZQUNuQyxPQUFPLElBQUksQ0FBQTtRQUNiLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBQy9CLENBQUM7SUFFRCxnRUFBZ0U7SUFDaEUsTUFBTTtRQUNKLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQTtRQUNkLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUE7UUFDckIsT0FBTyxJQUFJLENBQUE7SUFDYixDQUFDO0lBRUQsb0NBQW9DO0lBQ3BDLEtBQUssQ0FBQyxRQUFvQjtRQUN4QixJQUFJLENBQUMsT0FBTyxFQUFFLENBQUE7UUFDZCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQTtJQUN0RCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFVLEVBQUUsSUFBaUI7UUFDckMsTUFBTSxLQUFLLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQzdCLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQUUsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUE7UUFDekQsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQTtRQUNyRCxNQUFNLElBQUksR0FBRyxJQUFJLFFBQVEsQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQTtRQUMxRCxNQUFNLFNBQVMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUE7UUFDbEYsT0FBTyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUE7SUFDckIsQ0FBQztJQUVELCtFQUErRTtJQUMvRSxPQUFPLENBQUMsSUFBVSxFQUFFLElBQWlCO1FBQ25DLE1BQU0sS0FBSyxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUM3QixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUFFLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFBO1FBQzdELE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUE7UUFDcEQsTUFBTSxJQUFJLEdBQUcsSUFBSSxRQUFRLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUE7UUFDMUQsS0FBSyxTQUFTLENBQUMsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFBO1FBQ2hGLE9BQU8sR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFBO0lBQ3JCLENBQUM7SUFFRCw0Q0FBNEM7SUFDNUMsU0FBUyxDQUFDLElBQVU7UUFDbEIsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFBO1FBQ2QsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQTtJQUNyQyxDQUFDO0lBRUQsd0VBQXdFO0lBQ3hFLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBb0I7UUFDaEMsTUFBTSxJQUFJLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQTtRQUN0QyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUFFLE9BQU8sUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFBO1FBQzFFLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQTtRQUNsRCxNQUFNLElBQUksR0FBRyxJQUFJLFFBQVEsQ0FBQyxFQUFFLEtBQUssRUFBRSxHQUFHLENBQUMsS0FBSyxFQUFFLElBQUksSUFBSSxFQUFFLElBQUksRUFBRSxRQUFRLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFBO1FBQ25GLE1BQU0sU0FBUyxDQUFDLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFBO1FBQ2hGLE9BQU8sUUFBUSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFBO0lBQy9ELENBQUM7SUFFRCw4RkFBOEY7SUFDOUYsV0FBVyxDQUFDLFFBQW9CO1FBQzlCLE1BQU0sSUFBSSxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUE7UUFDdEMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFBRSxPQUFPLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQTtRQUM5RSxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUE7UUFDakQsTUFBTSxJQUFJLEdBQUcsSUFBSSxRQUFRLENBQUMsRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLEtBQUssRUFBRSxJQUFJLElBQUksRUFBRSxJQUFJLEVBQUUsUUFBUSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQTtRQUNuRixLQUFLLFNBQVMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQTtRQUM5RSxPQUFPLFFBQVEsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQTtJQUMvRCxDQUFDO0lBRUQsa0ZBQWtGO0lBQ2xGLFNBQVMsQ0FBQyxRQUFrQixFQUFFLFVBQXFCO1FBQ2pELElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFBO1FBQ2hDLElBQUksRUFBRSxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ3JCLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQTtZQUNuQixJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUE7WUFDM0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUE7WUFDN0MsT0FBTyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQTtRQUNoRCxDQUFDO1FBQ0QsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUE7UUFDaEMsSUFBSSxDQUFDLElBQUksSUFBSSxVQUFVLENBQUMsTUFBTSxLQUFLLENBQUM7WUFBRSxPQUFPLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQTtRQUMzRCxNQUFNLENBQUMsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsVUFBVSxDQUFBO1FBQ3JDLE1BQU0sTUFBTSxHQUNWLGFBQWEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksYUFBYSxDQUFDLE9BQU8sQ0FBQztZQUN6RCxDQUFDLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDO1lBQzNDLENBQUMsQ0FBQyxPQUFPLENBQUE7UUFDYixJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUE7UUFDbkMsT0FBTyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLE1BQU0sS0FBSyxLQUFLLENBQUMsQ0FBQTtJQUN6QyxDQUFDO0lBRUQsc0ZBQXNGO0lBQ3RGLHFFQUFxRTtJQUNyRSxPQUFPO1FBQ0wsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNwQixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQTtZQUNyQixLQUFLLE1BQU0sRUFBRSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQztnQkFDdEMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUE7Z0JBQ2hDLElBQUksQ0FBQyxJQUFJO29CQUFFLFNBQVE7Z0JBQ25CLE1BQU0sQ0FBQyxPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFBO2dCQUMxQyxNQUFNLFVBQVUsR0FBRyxPQUFPLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFBO2dCQUM1RSxNQUFNLFdBQVcsR0FBWSxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLFVBQVUsQ0FBQyxDQUFBO2dCQUMzRSxJQUFJLGFBQWEsQ0FBQyxXQUFXLENBQUM7b0JBQUUsSUFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUE7WUFDaEUsQ0FBQztRQUNILENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQTtJQUN4QyxDQUFDO0NBQ0Y7QUFFRCxTQUFTLFNBQVMsQ0FBQyxJQUE0QjtJQUM3QyxPQUFPLE9BQU8sSUFBSSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFBO0FBQ3RELENBQUM7QUFFRCxTQUFTLFFBQVEsQ0FBQyxJQUE0QjtJQUM1QyxPQUFPLE9BQU8sSUFBSSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFBO0FBQzFELENBQUM7QUFFRCx5RUFBeUU7QUFDekUsU0FBUyxTQUFTLENBQUMsTUFBYSxFQUFFLElBQTZCO0lBQzdELE9BQU8sRUFBRSxHQUFHLE1BQU0sRUFBRSxJQUFJLEVBQUUsRUFBRSxHQUFHLE1BQU0sQ0FBQyxJQUFJLEVBQUUsR0FBRyxJQUFJLEVBQUUsRUFBRSxDQUFBO0FBQ3pELENBQUM7QUFFRCxTQUFTLFFBQVEsQ0FBQyxJQUFXLEVBQUUsUUFBb0I7SUFDakQsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFBO0lBQy9CLE9BQU8sSUFBSSxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFBO0FBQ3RELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpc0F0dGFjaGVyIH0gZnJvbSBcIi4uL2FjdGlvbnMvYXR0YWNoZXIvY2hlY2sudHNcIlxuaW1wb3J0IHsgaXNQbGFpbk9iamVjdCwgbWVyZ2VPcHRpb25zIH0gZnJvbSBcIi4uL2FjdGlvbnMvb3B0aW9ucy9tZXJnZS50c1wiXG5pbXBvcnQgeyB0eXBlIEhvc3RFbnRyeSwgbWFwUGx1Z2dhYmxlIH0gZnJvbSBcIi4uL2FjdGlvbnMvcGx1Z2dhYmxlL21hcC50c1wiXG5pbXBvcnQgeyBmaW5pc2hSdW4gfSBmcm9tIFwiLi4vYWN0aW9ucy9ydW4vZmluaXNoLnRzXCJcbmltcG9ydCB7IGlzVHJhbnNmb3JtZXIgfSBmcm9tIFwiLi4vYWN0aW9ucy90cmFuc2Zvcm1lci9jaGVjay50c1wiXG5pbXBvcnQgdHlwZSB7IE5hdGl2ZVBpcGVsaW5lIH0gZnJvbSBcIi4vYWRkb24udHNcIlxuaW1wb3J0IHR5cGUgeyBDb21wYXRpYmxlLCBOb2RlLCBWRmlsZSB9IGZyb20gXCIuL2ZpbGUudHNcIlxuaW1wb3J0IHR5cGUgeyBIb3N0IH0gZnJvbSBcIi4vaG9zdC50c1wiXG5pbXBvcnQgdHlwZSB7IEF0dGFjaGVyLCBQbHVnZ2FibGUsIFBsdWdnYWJsZUxpc3QsIFByZXNldCB9IGZyb20gXCIuL3BsdWdpbi50c1wiXG5pbXBvcnQgeyBIb3N0RmlsZSB9IGZyb20gXCIuL3ZmaWxlLnRzXCJcblxuLyoqXG4gKiB1bmlmaWVkJ3MgcHJvY2Vzc29yIG92ZXIgdGhlIG5hdGl2ZSBwaXBlbGluZTsgZXZlcnkgY2FsbCBpcyB0aGUgY3JhdGUncywgZXhjZXB0IHRoYXRcbiAqIEphdmFTY3JpcHQgcGx1Z2lucyBydW4gaGVyZSB3aGVuIGEgcnVuIHBhdXNlcyBiZWZvcmUgdGhlbS5cbiAqL1xuZXhwb3J0IGNsYXNzIFByb2Nlc3NvciB7XG4gICNuYXRpdmU6IE5hdGl2ZVBpcGVsaW5lXG4gICNpZHMgPSBuZXcgTWFwPEF0dGFjaGVyLCBudW1iZXI+KClcbiAgI2hvc3RzID0gbmV3IE1hcDxudW1iZXIsIEhvc3Q+KClcbiAgI2F0dGFjaGVkID0gZmFsc2VcblxuICBjb25zdHJ1Y3RvcihuYXRpdmU6IE5hdGl2ZVBpcGVsaW5lKSB7XG4gICAgdGhpcy4jbmF0aXZlID0gbmF0aXZlXG4gIH1cblxuICAvKipcbiAgICogQWRkIGEgcGx1Z2luLCBhIGxpc3Qgb2YgdGhlbSBvciBhIHByZXNldDsgYSBwbHVnaW4gdXNlZCBhZ2FpbiBpcyByZWNvbmZpZ3VyZWQuIEFcbiAgICogSmF2YVNjcmlwdCBwbHVnaW4gaXMgYW4gYXR0YWNoZXIsIGNhbGxlZCB3aXRoIHRoZSBwcm9jZXNzb3IgYW5kIGl0cyBvcHRpb25zIGF0IGZyZWV6ZS5cbiAgICovXG4gIHVzZShcbiAgICB2YWx1ZTogUGx1Z2dhYmxlIHwgUGx1Z2dhYmxlTGlzdCB8IFByZXNldCB8IG51bGwgfCB1bmRlZmluZWQsXG4gICAgLi4ub3B0aW9uczogdW5rbm93bltdXG4gICkge1xuICAgIGlmIChpc0F0dGFjaGVyKHZhbHVlKSkge1xuICAgICAgdGhpcy4jbmF0aXZlLnVzZShbdGhpcy4jcmVnaXN0ZXIodmFsdWUsIG9wdGlvbnMpXSlcbiAgICAgIHJldHVybiB0aGlzXG4gICAgfVxuICAgIGNvbnN0IHJlZ2lzdGVyID0gKGF0dGFjaGVyOiBBdHRhY2hlciwgcGFyYW1ldGVyczogdW5rbm93bltdKSA9PlxuICAgICAgdGhpcy4jcmVnaXN0ZXIoYXR0YWNoZXIsIHBhcmFtZXRlcnMpXG4gICAgdGhpcy4jbmF0aXZlLnVzZShtYXBQbHVnZ2FibGUodmFsdWUgPz8gbnVsbCwgcmVnaXN0ZXIpLCBvcHRpb25zWzBdKVxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICAvKiogQWxsIGRhdGEsIG9yIHRoZSB2YWx1ZSB1bmRlciBga2V5YC4gKi9cbiAgZGF0YSgpOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICBkYXRhKGtleTogc3RyaW5nKTogdW5rbm93blxuICAvKiogU2V0IHRoZSB2YWx1ZSB1bmRlciBga2V5YCwgb3IgcmVwbGFjZSBhbGwgZGF0YS4gKi9cbiAgZGF0YShrZXk6IHN0cmluZywgdmFsdWU6IHVua25vd24pOiB0aGlzXG4gIGRhdGEoZGF0YXNldDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiB0aGlzXG4gIGRhdGEoa2V5Pzogc3RyaW5nIHwgUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIC4uLnZhbHVlOiB1bmtub3duW10pIHtcbiAgICBpZiAodHlwZW9mIGtleSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgdGhpcy4jbmF0aXZlLnJlcGxhY2VEYXRhKGtleSlcbiAgICAgIHJldHVybiB0aGlzXG4gICAgfVxuICAgIGlmIChrZXkgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZS5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLiNuYXRpdmUuc2V0RGF0YShrZXksIHZhbHVlWzBdKVxuICAgICAgcmV0dXJuIHRoaXNcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuI25hdGl2ZS5kYXRhKGtleSlcbiAgfVxuXG4gIC8qKiBBdHRhY2ggZXZlcnkgcGx1Z2luOyBsYXRlciBgdXNlYCBhbmQgYGRhdGFgIHNldHRlcnMgZmFpbC4gKi9cbiAgZnJlZXplKCkge1xuICAgIHRoaXMuI2F0dGFjaCgpXG4gICAgdGhpcy4jbmF0aXZlLmZyZWV6ZSgpXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIC8qKiBQYXJzZSBhIGRvY3VtZW50IGludG8gYSB0cmVlLiAqL1xuICBwYXJzZShkb2N1bWVudDogQ29tcGF0aWJsZSkge1xuICAgIHRoaXMuI2F0dGFjaCgpXG4gICAgcmV0dXJuIHRoaXMuI25hdGl2ZS5wYXJzZShyZWFkVmFsdWUoZG9jdW1lbnQpID8/IFwiXCIpXG4gIH1cblxuICAvKipcbiAgICogUnVuIHRoZSB0cmFuc2Zvcm1zLCBmaW5pc2hpbmcgYXN5bmNocm9ub3VzIHN0YWdlczsgYGZpbGVgLCB0aGUgdGV4dCBgdHJlZWAgd2FzIHBhcnNlZFxuICAgKiBmcm9tLCBsZXRzIGJyaWRnZXMgcmVhZCBpdCBhbmQga2VlcHMgcG9zaXRpb25zIGluIHRoZSByZXN1bHQuXG4gICAqL1xuICBhc3luYyBydW4odHJlZTogTm9kZSwgZmlsZT86IENvbXBhdGlibGUpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHJlYWRWYWx1ZShmaWxlKVxuICAgIGlmICghdGhpcy4jYXR0YWNoKCkpIHJldHVybiB0aGlzLiNuYXRpdmUucnVuKHRyZWUsIHZhbHVlKVxuICAgIGNvbnN0IHJ1biA9IHRoaXMuI25hdGl2ZS5zdGFydFJ1bih0cmVlLCB2YWx1ZSwgZmFsc2UpXG4gICAgY29uc3QgaG9zdCA9IG5ldyBIb3N0RmlsZSh7IHZhbHVlLCBwYXRoOiByZWFkUGF0aChmaWxlKSB9KVxuICAgIGF3YWl0IGZpbmlzaFJ1bih7IHJ1biwgaG9zdHM6IHRoaXMuI2hvc3RzLCBmaWxlOiBob3N0LCBzeW5jOiBmYWxzZSwgY2FsbDogXCJydW5cIiB9KVxuICAgIHJldHVybiBydW4ucmVzdWx0KClcbiAgfVxuXG4gIC8qKiBSdW4gdGhlIHRyYW5zZm9ybXM7IGZhaWxzIHdpdGggYGFzeW5jLWluLXN5bmNgIG9uIGFuIGFzeW5jaHJvbm91cyBzdGFnZS4gKi9cbiAgcnVuU3luYyh0cmVlOiBOb2RlLCBmaWxlPzogQ29tcGF0aWJsZSkge1xuICAgIGNvbnN0IHZhbHVlID0gcmVhZFZhbHVlKGZpbGUpXG4gICAgaWYgKCF0aGlzLiNhdHRhY2goKSkgcmV0dXJuIHRoaXMuI25hdGl2ZS5ydW5TeW5jKHRyZWUsIHZhbHVlKVxuICAgIGNvbnN0IHJ1biA9IHRoaXMuI25hdGl2ZS5zdGFydFJ1bih0cmVlLCB2YWx1ZSwgdHJ1ZSlcbiAgICBjb25zdCBob3N0ID0gbmV3IEhvc3RGaWxlKHsgdmFsdWUsIHBhdGg6IHJlYWRQYXRoKGZpbGUpIH0pXG4gICAgdm9pZCBmaW5pc2hSdW4oeyBydW4sIGhvc3RzOiB0aGlzLiNob3N0cywgZmlsZTogaG9zdCwgc3luYzogdHJ1ZSwgY2FsbDogXCJydW5cIiB9KVxuICAgIHJldHVybiBydW4ucmVzdWx0KClcbiAgfVxuXG4gIC8qKiBDb21waWxlIGEgdHJlZSwgcnVubmluZyBubyB0cmFuc2Zvcm0uICovXG4gIHN0cmluZ2lmeSh0cmVlOiBOb2RlKSB7XG4gICAgdGhpcy4jYXR0YWNoKClcbiAgICByZXR1cm4gdGhpcy4jbmF0aXZlLnN0cmluZ2lmeSh0cmVlKVxuICB9XG5cbiAgLyoqIFBhcnNlLCBydW4gYW5kIGNvbXBpbGUgYSBkb2N1bWVudCwgZmluaXNoaW5nIGFzeW5jaHJvbm91cyBzdGFnZXMuICovXG4gIGFzeW5jIHByb2Nlc3MoZG9jdW1lbnQ6IENvbXBhdGlibGUpOiBQcm9taXNlPFZGaWxlPiB7XG4gICAgY29uc3QgdGV4dCA9IHJlYWRWYWx1ZShkb2N1bWVudCkgPz8gXCJcIlxuICAgIGlmICghdGhpcy4jYXR0YWNoKCkpIHJldHVybiB3aXRoUGF0aCh0aGlzLiNuYXRpdmUucHJvY2Vzcyh0ZXh0KSwgZG9jdW1lbnQpXG4gICAgY29uc3QgcnVuID0gdGhpcy4jbmF0aXZlLnN0YXJ0UHJvY2Vzcyh0ZXh0LCBmYWxzZSlcbiAgICBjb25zdCBmaWxlID0gbmV3IEhvc3RGaWxlKHsgdmFsdWU6IHJ1bi52YWx1ZSgpID8/IHRleHQsIHBhdGg6IHJlYWRQYXRoKGRvY3VtZW50KSB9KVxuICAgIGF3YWl0IGZpbmlzaFJ1bih7IHJ1biwgaG9zdHM6IHRoaXMuI2hvc3RzLCBmaWxlLCBzeW5jOiBmYWxzZSwgY2FsbDogXCJwcm9jZXNzXCIgfSlcbiAgICByZXR1cm4gd2l0aFBhdGgobWVyZ2VEYXRhKHJ1bi5yZXN1bHQoKSwgZmlsZS5kYXRhKSwgZG9jdW1lbnQpXG4gIH1cblxuICAvKiogUGFyc2UsIHJ1biBhbmQgY29tcGlsZSBhIGRvY3VtZW50OyBmYWlscyB3aXRoIGBhc3luYy1pbi1zeW5jYCBvbiBhbiBhc3luY2hyb25vdXMgc3RhZ2UuICovXG4gIHByb2Nlc3NTeW5jKGRvY3VtZW50OiBDb21wYXRpYmxlKTogVkZpbGUge1xuICAgIGNvbnN0IHRleHQgPSByZWFkVmFsdWUoZG9jdW1lbnQpID8/IFwiXCJcbiAgICBpZiAoIXRoaXMuI2F0dGFjaCgpKSByZXR1cm4gd2l0aFBhdGgodGhpcy4jbmF0aXZlLnByb2Nlc3NTeW5jKHRleHQpLCBkb2N1bWVudClcbiAgICBjb25zdCBydW4gPSB0aGlzLiNuYXRpdmUuc3RhcnRQcm9jZXNzKHRleHQsIHRydWUpXG4gICAgY29uc3QgZmlsZSA9IG5ldyBIb3N0RmlsZSh7IHZhbHVlOiBydW4udmFsdWUoKSA/PyB0ZXh0LCBwYXRoOiByZWFkUGF0aChkb2N1bWVudCkgfSlcbiAgICB2b2lkIGZpbmlzaFJ1bih7IHJ1biwgaG9zdHM6IHRoaXMuI2hvc3RzLCBmaWxlLCBzeW5jOiB0cnVlLCBjYWxsOiBcInByb2Nlc3NcIiB9KVxuICAgIHJldHVybiB3aXRoUGF0aChtZXJnZURhdGEocnVuLnJlc3VsdCgpLCBmaWxlLmRhdGEpLCBkb2N1bWVudClcbiAgfVxuXG4gIC8vIHVuaWZpZWQncyBhZGRQbHVnaW46IHRoZSBzYW1lIGF0dGFjaGVyIGlzIG9uZSBwbHVnaW4sIGl0cyBvYmplY3Qgb3B0aW9ucyBtZXJnZWRcbiAgI3JlZ2lzdGVyKGF0dGFjaGVyOiBBdHRhY2hlciwgcGFyYW1ldGVyczogdW5rbm93bltdKTogSG9zdEVudHJ5IHtcbiAgICBsZXQgaWQgPSB0aGlzLiNpZHMuZ2V0KGF0dGFjaGVyKVxuICAgIGlmIChpZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZCA9IHRoaXMuI2lkcy5zaXplXG4gICAgICB0aGlzLiNpZHMuc2V0KGF0dGFjaGVyLCBpZClcbiAgICAgIHRoaXMuI2hvc3RzLnNldChpZCwgeyBhdHRhY2hlciwgcGFyYW1ldGVycyB9KVxuICAgICAgcmV0dXJuIFt7IGhvc3Q6IGlkIH0sIHBhcmFtZXRlcnNbMF0gIT09IGZhbHNlXVxuICAgIH1cbiAgICBjb25zdCBob3N0ID0gdGhpcy4jaG9zdHMuZ2V0KGlkKVxuICAgIGlmICghaG9zdCB8fCBwYXJhbWV0ZXJzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIFt7IGhvc3Q6IGlkIH1dXG4gICAgY29uc3QgW3ByaW1hcnksIC4uLnJlc3RdID0gcGFyYW1ldGVyc1xuICAgIGNvbnN0IG1lcmdlZCA9XG4gICAgICBpc1BsYWluT2JqZWN0KGhvc3QucGFyYW1ldGVyc1swXSkgJiYgaXNQbGFpbk9iamVjdChwcmltYXJ5KVxuICAgICAgICA/IG1lcmdlT3B0aW9ucyhob3N0LnBhcmFtZXRlcnNbMF0sIHByaW1hcnkpXG4gICAgICAgIDogcHJpbWFyeVxuICAgIGhvc3QucGFyYW1ldGVycyA9IFttZXJnZWQsIC4uLnJlc3RdXG4gICAgcmV0dXJuIFt7IGhvc3Q6IGlkIH0sIG1lcmdlZCAhPT0gZmFsc2VdXG4gIH1cblxuICAvLyBBdHRhY2hlcnMgcnVuIG9uY2UsIGJlZm9yZSB0aGUgbmF0aXZlIHBpcGVsaW5lIGZyZWV6ZXMsIHNvIHRoZXkgY2FuIHN0aWxsIHNldCBkYXRhO1xuICAvLyB3aGV0aGVyIGFueSBKYXZhU2NyaXB0IHBsdWdpbiBpcyBvbiBkZWNpZGVzIGlmIHJ1bnMgcGF1c2UgZm9yIHRoZW1cbiAgI2F0dGFjaCgpIHtcbiAgICBpZiAoIXRoaXMuI2F0dGFjaGVkKSB7XG4gICAgICB0aGlzLiNhdHRhY2hlZCA9IHRydWVcbiAgICAgIGZvciAoY29uc3QgaWQgb2YgdGhpcy4jbmF0aXZlLmhvc3RzKCkpIHtcbiAgICAgICAgY29uc3QgaG9zdCA9IHRoaXMuI2hvc3RzLmdldChpZClcbiAgICAgICAgaWYgKCFob3N0KSBjb250aW51ZVxuICAgICAgICBjb25zdCBbcHJpbWFyeSwgLi4ucmVzdF0gPSBob3N0LnBhcmFtZXRlcnNcbiAgICAgICAgY29uc3QgcGFyYW1ldGVycyA9IHByaW1hcnkgPT09IHRydWUgPyBbdW5kZWZpbmVkLCAuLi5yZXN0XSA6IGhvc3QucGFyYW1ldGVyc1xuICAgICAgICBjb25zdCB0cmFuc2Zvcm1lcjogdW5rbm93biA9IFJlZmxlY3QuYXBwbHkoaG9zdC5hdHRhY2hlciwgdGhpcywgcGFyYW1ldGVycylcbiAgICAgICAgaWYgKGlzVHJhbnNmb3JtZXIodHJhbnNmb3JtZXIpKSBob3N0LnRyYW5zZm9ybWVyID0gdHJhbnNmb3JtZXJcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuI25hdGl2ZS5ob3N0cygpLmxlbmd0aCA+IDBcbiAgfVxufVxuXG5mdW5jdGlvbiByZWFkVmFsdWUoZmlsZTogQ29tcGF0aWJsZSB8IHVuZGVmaW5lZCkge1xuICByZXR1cm4gdHlwZW9mIGZpbGUgPT09IFwic3RyaW5nXCIgPyBmaWxlIDogZmlsZT8udmFsdWVcbn1cblxuZnVuY3Rpb24gcmVhZFBhdGgoZmlsZTogQ29tcGF0aWJsZSB8IHVuZGVmaW5lZCkge1xuICByZXR1cm4gdHlwZW9mIGZpbGUgPT09IFwic3RyaW5nXCIgPyB1bmRlZmluZWQgOiBmaWxlPy5wYXRoXG59XG5cbi8vIE5hdGl2ZSBzdGFnZXMnIGRhdGEgZmlyc3QsIHRoZW4gd2hhdCBKYXZhU2NyaXB0IHBsdWdpbnMgc3RvcmVkIG92ZXIgaXRcbmZ1bmN0aW9uIG1lcmdlRGF0YShyZXN1bHQ6IFZGaWxlLCBkYXRhOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IFZGaWxlIHtcbiAgcmV0dXJuIHsgLi4ucmVzdWx0LCBkYXRhOiB7IC4uLnJlc3VsdC5kYXRhLCAuLi5kYXRhIH0gfVxufVxuXG5mdW5jdGlvbiB3aXRoUGF0aChmaWxlOiBWRmlsZSwgZG9jdW1lbnQ6IENvbXBhdGlibGUpIHtcbiAgY29uc3QgcGF0aCA9IHJlYWRQYXRoKGRvY3VtZW50KVxuICByZXR1cm4gcGF0aCA9PT0gdW5kZWZpbmVkID8gZmlsZSA6IHsgLi4uZmlsZSwgcGF0aCB9XG59XG4iXX0=
@@ -0,0 +1,52 @@
1
+ import type { Message, MessageOptions, Place } from "./file.ts";
2
+ /**
3
+ * The file a JavaScript plugin gets, as a vfile: the document, its path, data and messages.
4
+ * Only what plugins report here reaches the result; native stages report there directly.
5
+ */
6
+ export declare class HostFile {
7
+ value: string | undefined;
8
+ data: Record<string, unknown>;
9
+ messages: HostMessage[];
10
+ history: string[];
11
+ cwd: string;
12
+ constructor(options: {
13
+ value?: string;
14
+ path?: string;
15
+ });
16
+ /** The current path; setting it adds to `history`. */
17
+ get path(): string | undefined;
18
+ set path(path: string | undefined);
19
+ get dirname(): string | undefined;
20
+ get basename(): string | undefined;
21
+ get extname(): string | undefined;
22
+ get stem(): string | undefined;
23
+ /** Report a warning against the file, as vfile's `message`; `origin` is `source:ruleId`. */
24
+ message(reason: string | Error, options?: MessageOptions | Place | null, origin?: string): HostMessage;
25
+ /** Report a note against the file, neither a warning nor an error. */
26
+ info(reason: string | Error, options?: MessageOptions | Place | null, origin?: string): HostMessage;
27
+ /** Report an error against the file and throw it. */
28
+ fail(reason: string | Error, options?: MessageOptions | Place | null, origin?: string): never;
29
+ toString(): string;
30
+ }
31
+ /** A diagnostic a JavaScript plugin reported, as vfile-message has it. */
32
+ export declare class HostMessage extends Error {
33
+ reason: string;
34
+ ruleId: string | null;
35
+ source: string | null;
36
+ place: Message["place"];
37
+ line: number | undefined;
38
+ column: number | undefined;
39
+ fatal: boolean | null | undefined;
40
+ file: string;
41
+ ancestors: unknown[] | undefined;
42
+ cause: unknown;
43
+ actual: string | undefined;
44
+ expected: string[] | undefined;
45
+ url: string | undefined;
46
+ note: string | undefined;
47
+ constructor(reason: string | Error, options?: MessageOptions | Place | null, origin?: string);
48
+ /** A message a native stage reported, as the file's other messages are. */
49
+ static fromMessage(message: Message, path: string | undefined): HostMessage;
50
+ /** The message as it crosses into the crate. */
51
+ toJSON(): Message;
52
+ }