textlane 0.3.0 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/actions/addon/resolve.d.ts +1 -0
- package/build/actions/addon/resolve.js +3 -2
- package/build/actions/libc/detect.d.ts +5 -0
- package/build/actions/libc/detect.js +11 -0
- package/build/actions/run/finish.d.ts +1 -1
- package/build/actions/run/finish.js +7 -3
- package/build/generated/extensions/mdast-util-definition-list.d.ts +32 -0
- package/build/generated/extensions/mdast-util-definition-list.js +3 -0
- package/build/generated/extensions/mdast-util-directive.d.ts +167 -0
- package/build/generated/extensions/mdast-util-directive.js +3 -0
- package/build/generated/extensions/mdast-util-math.d.ts +53 -0
- package/build/generated/extensions/mdast-util-math.js +3 -0
- package/build/generated/extensions/mdast-util-mdx-expression.d.ts +137 -0
- package/build/generated/extensions/mdast-util-mdx-expression.js +3 -0
- package/build/generated/extensions/mdast-util-mdx-jsx.d.ts +270 -0
- package/build/generated/extensions/mdast-util-mdx-jsx.js +3 -0
- package/build/generated/extensions/mdast-util-mdxjs-esm.d.ts +69 -0
- package/build/generated/extensions/mdast-util-mdxjs-esm.js +3 -0
- package/build/generated/extensions/mdast-util-to-hast.d.ts +69 -0
- package/build/generated/extensions/mdast-util-to-hast.js +3 -0
- package/build/generated/extensions/toml.d.ts +21 -0
- package/build/generated/extensions/toml.js +3 -0
- package/build/generated/html.d.ts +110 -3
- package/build/generated/html.js +25 -1
- package/build/generated/md.d.ts +57 -4
- package/build/generated/md.js +15 -3
- package/build/generated/nl.d.ts +1 -1
- package/build/generated/nl.js +1 -1
- package/build/generated/trees/estree.d.ts +1 -0
- package/build/generated/trees/estree.js +3 -0
- package/build/generated/trees/hast.d.ts +5 -0
- package/build/generated/trees/hast.js +3 -0
- package/build/generated/trees/mdast.d.ts +8 -0
- package/build/generated/trees/mdast.js +3 -0
- package/build/generated/trees/nlcst.d.ts +1 -0
- package/build/generated/trees/nlcst.js +3 -0
- package/build/generated/trees/unist.d.ts +1 -0
- package/build/generated/trees/unist.js +3 -0
- package/build/index.d.ts +10 -0
- package/build/index.js +6 -1
- package/build/models/addon.d.ts +23 -17
- package/build/models/addon.js +1 -1
- package/build/models/file.d.ts +3 -2
- package/build/models/file.js +1 -1
- package/build/models/processor.d.ts +1 -1
- package/build/models/processor.js +35 -19
- package/build/settings.d.ts +3 -1
- package/build/settings.js +14 -3
- package/package.json +10 -7
- package/skills/textlane-usage/SKILL.md +19 -3
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
// Generated by `pnpm generate:bindings` from the npm package's @types; do not edit.
|
|
2
|
+
export {};
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5pc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9nZW5lcmF0ZWQvdHJlZXMvdW5pc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsb0ZBQW9GIiwic291cmNlc0NvbnRlbnQiOlsiLy8gR2VuZXJhdGVkIGJ5IGBwbnBtIGdlbmVyYXRlOmJpbmRpbmdzYCBmcm9tIHRoZSBucG0gcGFja2FnZSdzIEB0eXBlczsgZG8gbm90IGVkaXQuXG5cbmV4cG9ydCB0eXBlICogZnJvbSBcInVuaXN0XCJcbiJdfQ==
|
package/build/index.d.ts
CHANGED
|
@@ -2,6 +2,16 @@ import { Processor } from "./models/processor.ts";
|
|
|
2
2
|
export type { Compatible, Message, MessageOptions, Node, Place, Point, VFile, } from "./models/file.ts";
|
|
3
3
|
export type { Attacher, Pluggable, PluggableList, Parser, Plugin, Preset, Transformer, } from "./models/plugin.ts";
|
|
4
4
|
export type { HostFile, HostMessage } from "./models/vfile.ts";
|
|
5
|
+
/** The unist node, position and data types every syntax tree shares. */
|
|
6
|
+
export type * as unist from "./generated/trees/unist.ts";
|
|
7
|
+
/** The Markdown tree `md.parse` makes, with the nodes of textlane's syntax extensions. */
|
|
8
|
+
export type * as mdast from "./generated/trees/mdast.ts";
|
|
9
|
+
/** The HTML tree `html.parse` and `md.toHtml` make, with MDX's and raw nodes. */
|
|
10
|
+
export type * as hast from "./generated/trees/hast.ts";
|
|
11
|
+
/** The natural-language tree `nl.parse` makes. */
|
|
12
|
+
export type * as nlcst from "./generated/trees/nlcst.ts";
|
|
13
|
+
/** The JavaScript tree MDX's nodes carry in `data.estree`, JSX included. */
|
|
14
|
+
export type * as estree from "./generated/trees/estree.ts";
|
|
5
15
|
export { Processor } from "./models/processor.ts";
|
|
6
16
|
/** A new processor: add plugins with `use`, then `process` text. */
|
|
7
17
|
export declare function textlane(): Processor<import("./models/file.ts").Node>;
|
package/build/index.js
CHANGED
|
@@ -1,11 +1,16 @@
|
|
|
1
1
|
import { createRequire } from "node:module";
|
|
2
2
|
import { resolveAddon } from "./actions/addon/resolve.js";
|
|
3
|
+
import { detectLibc } from "./actions/libc/detect.js";
|
|
3
4
|
import { Processor } from "./models/processor.js";
|
|
4
5
|
export { Processor } from "./models/processor.js";
|
|
5
6
|
const require = createRequire(import.meta.url);
|
|
6
7
|
const addon = require(resolveAddon({
|
|
7
8
|
platform: process.platform,
|
|
8
9
|
arch: process.arch,
|
|
10
|
+
libc: detectLibc({
|
|
11
|
+
platform: process.platform,
|
|
12
|
+
report: () => process.report.getReport(),
|
|
13
|
+
}),
|
|
9
14
|
env: process.env,
|
|
10
15
|
resolvePackage: specifier => require.resolve(specifier),
|
|
11
16
|
}));
|
|
@@ -24,4 +29,4 @@ export const retainedMemory = addon.retainedMemory;
|
|
|
24
29
|
* default is 256 MB.
|
|
25
30
|
*/
|
|
26
31
|
export const setRetainedMemory = addon.setRetainedMemory;
|
|
27
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
32
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sYUFBYSxDQUFBO0FBQzNDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQTtBQUN6RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sMEJBQTBCLENBQUE7QUFFckQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHVCQUF1QixDQUFBO0FBK0JqRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sdUJBQXVCLENBQUE7QUFFakQsTUFBTSxPQUFPLEdBQUcsYUFBYSxDQUFDLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFBO0FBRTlDLE1BQU0sS0FBSyxHQUFVLE9BQU8sQ0FDMUIsWUFBWSxDQUFDO0lBQ1gsUUFBUSxFQUFFLE9BQU8sQ0FBQyxRQUFRO0lBQzFCLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSTtJQUNsQixJQUFJLEVBQUUsVUFBVSxDQUFDO1FBQ2YsUUFBUSxFQUFFLE9BQU8sQ0FBQyxRQUFRO1FBQzFCLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRTtLQUN6QyxDQUFDO0lBQ0YsR0FBRyxFQUFFLE9BQU8sQ0FBQyxHQUFHO0lBQ2hCLGNBQWMsRUFBRSxTQUFTLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDO0NBQ3hELENBQUMsQ0FDSCxDQUFBO0FBRUQsb0VBQW9FO0FBQ3BFLE1BQU0sVUFBVSxRQUFRO0lBQ3RCLE9BQU8sSUFBSSxTQUFTLENBQUMsSUFBSSxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQTtBQUM1QyxDQUFDO0FBRUQsMkRBQTJEO0FBQzNELE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFBO0FBRXBDLCtEQUErRDtBQUMvRCxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsS0FBSyxDQUFDLFdBQVcsQ0FBQTtBQUU1QywyRkFBMkY7QUFDM0YsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLEtBQUssQ0FBQyxjQUFjLENBQUE7QUFFbEQ7OztHQUdHO0FBQ0gsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsS0FBSyxDQUFDLGlCQUFpQixDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY3JlYXRlUmVxdWlyZSB9IGZyb20gXCJub2RlOm1vZHVsZVwiXG5pbXBvcnQgeyByZXNvbHZlQWRkb24gfSBmcm9tIFwiLi9hY3Rpb25zL2FkZG9uL3Jlc29sdmUudHNcIlxuaW1wb3J0IHsgZGV0ZWN0TGliYyB9IGZyb20gXCIuL2FjdGlvbnMvbGliYy9kZXRlY3QudHNcIlxuaW1wb3J0IHR5cGUgeyBBZGRvbiB9IGZyb20gXCIuL21vZGVscy9hZGRvbi50c1wiXG5pbXBvcnQgeyBQcm9jZXNzb3IgfSBmcm9tIFwiLi9tb2RlbHMvcHJvY2Vzc29yLnRzXCJcblxuZXhwb3J0IHR5cGUge1xuICBDb21wYXRpYmxlLFxuICBNZXNzYWdlLFxuICBNZXNzYWdlT3B0aW9ucyxcbiAgTm9kZSxcbiAgUGxhY2UsXG4gIFBvaW50LFxuICBWRmlsZSxcbn0gZnJvbSBcIi4vbW9kZWxzL2ZpbGUudHNcIlxuZXhwb3J0IHR5cGUge1xuICBBdHRhY2hlcixcbiAgUGx1Z2dhYmxlLFxuICBQbHVnZ2FibGVMaXN0LFxuICBQYXJzZXIsXG4gIFBsdWdpbixcbiAgUHJlc2V0LFxuICBUcmFuc2Zvcm1lcixcbn0gZnJvbSBcIi4vbW9kZWxzL3BsdWdpbi50c1wiXG5leHBvcnQgdHlwZSB7IEhvc3RGaWxlLCBIb3N0TWVzc2FnZSB9IGZyb20gXCIuL21vZGVscy92ZmlsZS50c1wiXG4vKiogVGhlIHVuaXN0IG5vZGUsIHBvc2l0aW9uIGFuZCBkYXRhIHR5cGVzIGV2ZXJ5IHN5bnRheCB0cmVlIHNoYXJlcy4gKi9cbmV4cG9ydCB0eXBlICogYXMgdW5pc3QgZnJvbSBcIi4vZ2VuZXJhdGVkL3RyZWVzL3VuaXN0LnRzXCJcbi8qKiBUaGUgTWFya2Rvd24gdHJlZSBgbWQucGFyc2VgIG1ha2VzLCB3aXRoIHRoZSBub2RlcyBvZiB0ZXh0bGFuZSdzIHN5bnRheCBleHRlbnNpb25zLiAqL1xuZXhwb3J0IHR5cGUgKiBhcyBtZGFzdCBmcm9tIFwiLi9nZW5lcmF0ZWQvdHJlZXMvbWRhc3QudHNcIlxuLyoqIFRoZSBIVE1MIHRyZWUgYGh0bWwucGFyc2VgIGFuZCBgbWQudG9IdG1sYCBtYWtlLCB3aXRoIE1EWCdzIGFuZCByYXcgbm9kZXMuICovXG5leHBvcnQgdHlwZSAqIGFzIGhhc3QgZnJvbSBcIi4vZ2VuZXJhdGVkL3RyZWVzL2hhc3QudHNcIlxuLyoqIFRoZSBuYXR1cmFsLWxhbmd1YWdlIHRyZWUgYG5sLnBhcnNlYCBtYWtlcy4gKi9cbmV4cG9ydCB0eXBlICogYXMgbmxjc3QgZnJvbSBcIi4vZ2VuZXJhdGVkL3RyZWVzL25sY3N0LnRzXCJcbi8qKiBUaGUgSmF2YVNjcmlwdCB0cmVlIE1EWCdzIG5vZGVzIGNhcnJ5IGluIGBkYXRhLmVzdHJlZWAsIEpTWCBpbmNsdWRlZC4gKi9cbmV4cG9ydCB0eXBlICogYXMgZXN0cmVlIGZyb20gXCIuL2dlbmVyYXRlZC90cmVlcy9lc3RyZWUudHNcIlxuZXhwb3J0IHsgUHJvY2Vzc29yIH0gZnJvbSBcIi4vbW9kZWxzL3Byb2Nlc3Nvci50c1wiXG5cbmNvbnN0IHJlcXVpcmUgPSBjcmVhdGVSZXF1aXJlKGltcG9ydC5tZXRhLnVybClcblxuY29uc3QgYWRkb246IEFkZG9uID0gcmVxdWlyZShcbiAgcmVzb2x2ZUFkZG9uKHtcbiAgICBwbGF0Zm9ybTogcHJvY2Vzcy5wbGF0Zm9ybSxcbiAgICBhcmNoOiBwcm9jZXNzLmFyY2gsXG4gICAgbGliYzogZGV0ZWN0TGliYyh7XG4gICAgICBwbGF0Zm9ybTogcHJvY2Vzcy5wbGF0Zm9ybSxcbiAgICAgIHJlcG9ydDogKCkgPT4gcHJvY2Vzcy5yZXBvcnQuZ2V0UmVwb3J0KCksXG4gICAgfSksXG4gICAgZW52OiBwcm9jZXNzLmVudixcbiAgICByZXNvbHZlUGFja2FnZTogc3BlY2lmaWVyID0+IHJlcXVpcmUucmVzb2x2ZShzcGVjaWZpZXIpLFxuICB9KSxcbilcblxuLyoqIEEgbmV3IHByb2Nlc3NvcjogYWRkIHBsdWdpbnMgd2l0aCBgdXNlYCwgdGhlbiBgcHJvY2Vzc2AgdGV4dC4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0ZXh0bGFuZSgpIHtcbiAgcmV0dXJuIG5ldyBQcm9jZXNzb3IobmV3IGFkZG9uLlBpcGVsaW5lKCkpXG59XG5cbi8qKiBUaGUgcGFja2FnZSB2ZXJzaW9uLCBhcyB0aGUgbmF0aXZlIGNyYXRlIHJlcG9ydHMgaXQuICovXG5leHBvcnQgY29uc3QgdmVyc2lvbiA9IGFkZG9uLnZlcnNpb25cblxuLyoqIFRoZSBuYW1lIG9mIGV2ZXJ5IG5hdGl2ZSBwbHVnaW4sIGFzIGEgcGlwZWxpbmUgbmFtZXMgaXQuICovXG5leHBvcnQgY29uc3QgcGx1Z2luTmFtZXMgPSBhZGRvbi5wbHVnaW5OYW1lc1xuXG4vKiogVGhlIG1vc3QgbWVtb3J5LCBpbiBieXRlcywgZWFjaCB0aHJlYWQga2VlcHMgYWZ0ZXIgYSBkb2N1bWVudCB0byByZXVzZSBmb3IgdGhlIG5leHQuICovXG5leHBvcnQgY29uc3QgcmV0YWluZWRNZW1vcnkgPSBhZGRvbi5yZXRhaW5lZE1lbW9yeVxuXG4vKipcbiAqIENhcCB0aGUgbWVtb3J5LCBpbiBieXRlcywgZWFjaCB0aHJlYWQga2VlcHMgYWZ0ZXIgYSBkb2N1bWVudDsgYDBgIGtlZXBzIG5vbmUuIFRoZVxuICogZGVmYXVsdCBpcyAyNTYgTUIuXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRSZXRhaW5lZE1lbW9yeSA9IGFkZG9uLnNldFJldGFpbmVkTWVtb3J5XG4iXX0=
|
package/build/models/addon.d.ts
CHANGED
|
@@ -1,38 +1,44 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
export interface NativePipeline<Tree extends UnistNode = Node> {
|
|
1
|
+
import type { Message } from "./file.ts";
|
|
2
|
+
/** The crate's pipeline as the addon exposes it: values cross as JSON, trees as JSON text. */
|
|
3
|
+
export interface NativePipeline {
|
|
5
4
|
use(value: unknown, options?: unknown): void;
|
|
6
5
|
data(key?: string): unknown;
|
|
7
6
|
setData(key: string, value: unknown): void;
|
|
8
7
|
replaceData(data: Record<string, unknown>): void;
|
|
9
8
|
freeze(): void;
|
|
10
|
-
parse(text: string):
|
|
11
|
-
run(tree:
|
|
12
|
-
runSync(tree:
|
|
13
|
-
stringify(tree:
|
|
9
|
+
parse(text: string): string;
|
|
10
|
+
run(tree: string, value?: string): string;
|
|
11
|
+
runSync(tree: string, value?: string): string;
|
|
12
|
+
stringify(tree: string): string;
|
|
14
13
|
process(text: string, path?: string): Promise<ProcessOutcome>;
|
|
15
|
-
processSync(text: string, path?: string):
|
|
14
|
+
processSync(text: string, path?: string): NativeFile;
|
|
16
15
|
hosts(): number[];
|
|
17
|
-
startRun(tree:
|
|
18
|
-
startProcess(text: string, sync: boolean, path?: string): NativeRun
|
|
16
|
+
startRun(tree: string, value: string | undefined, sync: boolean): NativeRun;
|
|
17
|
+
startProcess(text: string, sync: boolean, path?: string): NativeRun;
|
|
19
18
|
}
|
|
20
19
|
/** What an async `process` settles with: the file, or the error the crate raised. */
|
|
21
20
|
export interface ProcessOutcome {
|
|
22
|
-
file?:
|
|
21
|
+
file?: NativeFile;
|
|
23
22
|
error?: {
|
|
24
23
|
code: string;
|
|
25
24
|
message: string;
|
|
26
25
|
};
|
|
27
26
|
}
|
|
28
|
-
/**
|
|
29
|
-
export interface
|
|
27
|
+
/** The file a native `process` gives back, its messages as the crate holds them. */
|
|
28
|
+
export interface NativeFile {
|
|
29
|
+
value: string;
|
|
30
|
+
messages: Message[];
|
|
31
|
+
data: Record<string, unknown>;
|
|
32
|
+
}
|
|
33
|
+
/** A run paused before host plugins until `resume`, then finished with `result`, as JSON
|
|
34
|
+
* text: the tree for a run, the file for a process. */
|
|
35
|
+
export interface NativeRun {
|
|
30
36
|
hosts(): number[];
|
|
31
|
-
tree():
|
|
37
|
+
tree(): string;
|
|
32
38
|
value(): string | null;
|
|
33
39
|
messages(): Message[];
|
|
34
|
-
resume(tree:
|
|
35
|
-
result():
|
|
40
|
+
resume(tree: string, messages: Message[]): void;
|
|
41
|
+
result(): string;
|
|
36
42
|
}
|
|
37
43
|
/** What the napi addon exports. */
|
|
38
44
|
export interface Addon {
|
package/build/models/addon.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9tb2RlbHMvYWRkb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgTWVzc2FnZSB9IGZyb20gXCIuL2ZpbGUudHNcIlxuXG4vKiogVGhlIGNyYXRlJ3MgcGlwZWxpbmUgYXMgdGhlIGFkZG9uIGV4cG9zZXMgaXQ6IHZhbHVlcyBjcm9zcyBhcyBKU09OLCB0cmVlcyBhcyBKU09OIHRleHQuICovXG5leHBvcnQgaW50ZXJmYWNlIE5hdGl2ZVBpcGVsaW5lIHtcbiAgdXNlKHZhbHVlOiB1bmtub3duLCBvcHRpb25zPzogdW5rbm93bik6IHZvaWRcbiAgZGF0YShrZXk/OiBzdHJpbmcpOiB1bmtub3duXG4gIHNldERhdGEoa2V5OiBzdHJpbmcsIHZhbHVlOiB1bmtub3duKTogdm9pZFxuICByZXBsYWNlRGF0YShkYXRhOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IHZvaWRcbiAgZnJlZXplKCk6IHZvaWRcbiAgcGFyc2UodGV4dDogc3RyaW5nKTogc3RyaW5nXG4gIHJ1bih0cmVlOiBzdHJpbmcsIHZhbHVlPzogc3RyaW5nKTogc3RyaW5nXG4gIHJ1blN5bmModHJlZTogc3RyaW5nLCB2YWx1ZT86IHN0cmluZyk6IHN0cmluZ1xuICBzdHJpbmdpZnkodHJlZTogc3RyaW5nKTogc3RyaW5nXG4gIHByb2Nlc3ModGV4dDogc3RyaW5nLCBwYXRoPzogc3RyaW5nKTogUHJvbWlzZTxQcm9jZXNzT3V0Y29tZT5cbiAgcHJvY2Vzc1N5bmModGV4dDogc3RyaW5nLCBwYXRoPzogc3RyaW5nKTogTmF0aXZlRmlsZVxuICBob3N0cygpOiBudW1iZXJbXVxuICBzdGFydFJ1bih0cmVlOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQsIHN5bmM6IGJvb2xlYW4pOiBOYXRpdmVSdW5cbiAgc3RhcnRQcm9jZXNzKHRleHQ6IHN0cmluZywgc3luYzogYm9vbGVhbiwgcGF0aD86IHN0cmluZyk6IE5hdGl2ZVJ1blxufVxuXG4vKiogV2hhdCBhbiBhc3luYyBgcHJvY2Vzc2Agc2V0dGxlcyB3aXRoOiB0aGUgZmlsZSwgb3IgdGhlIGVycm9yIHRoZSBjcmF0ZSByYWlzZWQuICovXG5leHBvcnQgaW50ZXJmYWNlIFByb2Nlc3NPdXRjb21lIHtcbiAgZmlsZT86IE5hdGl2ZUZpbGVcbiAgZXJyb3I/OiB7IGNvZGU6IHN0cmluZzsgbWVzc2FnZTogc3RyaW5nIH1cbn1cblxuLyoqIFRoZSBmaWxlIGEgbmF0aXZlIGBwcm9jZXNzYCBnaXZlcyBiYWNrLCBpdHMgbWVzc2FnZXMgYXMgdGhlIGNyYXRlIGhvbGRzIHRoZW0uICovXG5leHBvcnQgaW50ZXJmYWNlIE5hdGl2ZUZpbGUge1xuICB2YWx1ZTogc3RyaW5nXG4gIG1lc3NhZ2VzOiBNZXNzYWdlW11cbiAgZGF0YTogUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbn1cblxuLyoqIEEgcnVuIHBhdXNlZCBiZWZvcmUgaG9zdCBwbHVnaW5zIHVudGlsIGByZXN1bWVgLCB0aGVuIGZpbmlzaGVkIHdpdGggYHJlc3VsdGAsIGFzIEpTT05cbiAqIHRleHQ6IHRoZSB0cmVlIGZvciBhIHJ1biwgdGhlIGZpbGUgZm9yIGEgcHJvY2Vzcy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTmF0aXZlUnVuIHtcbiAgaG9zdHMoKTogbnVtYmVyW11cbiAgdHJlZSgpOiBzdHJpbmdcbiAgdmFsdWUoKTogc3RyaW5nIHwgbnVsbFxuICBtZXNzYWdlcygpOiBNZXNzYWdlW11cbiAgcmVzdW1lKHRyZWU6IHN0cmluZywgbWVzc2FnZXM6IE1lc3NhZ2VbXSk6IHZvaWRcbiAgcmVzdWx0KCk6IHN0cmluZ1xufVxuXG4vKiogV2hhdCB0aGUgbmFwaSBhZGRvbiBleHBvcnRzLiAqL1xuZXhwb3J0IGludGVyZmFjZSBBZGRvbiB7XG4gIHZlcnNpb24oKTogc3RyaW5nXG4gIHBsdWdpbk5hbWVzKCk6IHN0cmluZ1tdXG4gIHJldGFpbmVkTWVtb3J5KCk6IG51bWJlclxuICBzZXRSZXRhaW5lZE1lbW9yeShieXRlczogbnVtYmVyKTogdm9pZFxuICBQaXBlbGluZTogbmV3ICgpID0+IE5hdGl2ZVBpcGVsaW5lXG59XG4iXX0=
|
package/build/models/file.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { HostMessage } from "./vfile.ts";
|
|
1
2
|
/** A unist node as JSON: what `parse` returns and `run` and `stringify` take. */
|
|
2
3
|
export interface Node {
|
|
3
4
|
type: string;
|
|
@@ -9,7 +10,7 @@ export interface Point {
|
|
|
9
10
|
column: number;
|
|
10
11
|
offset: number | null;
|
|
11
12
|
}
|
|
12
|
-
/** A diagnostic
|
|
13
|
+
/** A diagnostic as it crosses the addon: what a `HostMessage` is read from. */
|
|
13
14
|
export interface Message {
|
|
14
15
|
reason: string;
|
|
15
16
|
ruleId: string | null;
|
|
@@ -22,7 +23,7 @@ export interface Message {
|
|
|
22
23
|
/** What `process` gives back, as a vfile: the output, the messages and the file's data. */
|
|
23
24
|
export interface VFile {
|
|
24
25
|
value: string;
|
|
25
|
-
messages:
|
|
26
|
+
messages: HostMessage[];
|
|
26
27
|
data: Record<string, unknown>;
|
|
27
28
|
path?: string;
|
|
28
29
|
}
|
package/build/models/file.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL21vZGVscy9maWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEhvc3RNZXNzYWdlIH0gZnJvbSBcIi4vdmZpbGUudHNcIlxuXG4vKiogQSB1bmlzdCBub2RlIGFzIEpTT046IHdoYXQgYHBhcnNlYCByZXR1cm5zIGFuZCBgcnVuYCBhbmQgYHN0cmluZ2lmeWAgdGFrZS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTm9kZSB7XG4gIHR5cGU6IHN0cmluZ1xuICBba2V5OiBzdHJpbmddOiB1bmtub3duXG59XG5cbi8qKiBPbmUgcGxhY2UgaW4gYSBmaWxlOiBhIDEtaW5kZXhlZCBsaW5lIGFuZCBjb2x1bW4gYW5kIGEgMC1pbmRleGVkIG9mZnNldCwgd2hlbiBrbm93bi4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUG9pbnQge1xuICBsaW5lOiBudW1iZXJcbiAgY29sdW1uOiBudW1iZXJcbiAgb2Zmc2V0OiBudW1iZXIgfCBudWxsXG59XG5cbi8qKiBBIGRpYWdub3N0aWMgYXMgaXQgY3Jvc3NlcyB0aGUgYWRkb246IHdoYXQgYSBgSG9zdE1lc3NhZ2VgIGlzIHJlYWQgZnJvbS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWVzc2FnZSB7XG4gIHJlYXNvbjogc3RyaW5nXG4gIHJ1bGVJZDogc3RyaW5nIHwgbnVsbFxuICBzb3VyY2U6IHN0cmluZyB8IG51bGxcbiAgcGxhY2U6IHsgc3RhcnQ6IFBvaW50OyBlbmQ6IFBvaW50IH0gfCBudWxsXG59XG5cbi8qKiBXaGF0IGBwcm9jZXNzYCBnaXZlcyBiYWNrLCBhcyBhIHZmaWxlOiB0aGUgb3V0cHV0LCB0aGUgbWVzc2FnZXMgYW5kIHRoZSBmaWxlJ3MgZGF0YS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVkZpbGUge1xuICB2YWx1ZTogc3RyaW5nXG4gIG1lc3NhZ2VzOiBIb3N0TWVzc2FnZVtdXG4gIGRhdGE6IFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gIHBhdGg/OiBzdHJpbmdcbn1cblxuLyoqIEEgZG9jdW1lbnQ6IGl0cyB0ZXh0LCBvciBhIGZpbGUgaG9sZGluZyBpdCBhcyBgdmFsdWVgLCB3aXRoIGl0cyBwYXRoIHdoZW4ga25vd24uICovXG5leHBvcnQgdHlwZSBDb21wYXRpYmxlID0gc3RyaW5nIHwgeyB2YWx1ZTogc3RyaW5nOyBwYXRoPzogc3RyaW5nIH1cblxuLyoqIFdoZXJlIGEgbWVzc2FnZSBpczogYSBwb2ludCwgYSBwb3NpdGlvbiwgb3IgYSBub2RlIGhvbGRpbmcgb25lLiAqL1xuZXhwb3J0IHR5cGUgUGxhY2UgPVxuICB8IHsgbGluZTogbnVtYmVyOyBjb2x1bW46IG51bWJlcjsgb2Zmc2V0PzogbnVtYmVyIHwgbnVsbCB9XG4gIHwgeyBzdGFydDogUG9pbnQ7IGVuZDogUG9pbnQgfVxuICB8IHsgcG9zaXRpb24/OiB1bmtub3duIH1cblxuLyoqIFdoYXQgYG1lc3NhZ2VgIHRha2VzIGJlc2lkZXMgdGhlIHJlYXNvbiwgYXMgdmZpbGUtbWVzc2FnZSBuYW1lcyBpdC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWVzc2FnZU9wdGlvbnMge1xuICBhbmNlc3RvcnM/OiB1bmtub3duW11cbiAgY2F1c2U/OiB1bmtub3duXG4gIHBsYWNlPzogUGxhY2VcbiAgcnVsZUlkPzogc3RyaW5nXG4gIHNvdXJjZT86IHN0cmluZ1xufVxuIl19
|
|
@@ -8,7 +8,7 @@ import type { Parser, Pluggable, PluggableList, Preset } from "./plugin.ts";
|
|
|
8
8
|
*/
|
|
9
9
|
export declare class Processor<Tree extends UnistNode = Node> {
|
|
10
10
|
#private;
|
|
11
|
-
constructor(native: NativePipeline
|
|
11
|
+
constructor(native: NativePipeline);
|
|
12
12
|
/**
|
|
13
13
|
* Add a plugin, a list of them or a preset; a plugin used again is reconfigured. A
|
|
14
14
|
* JavaScript plugin is an attacher, called with the processor and its options at freeze.
|
|
@@ -3,7 +3,7 @@ import { isPlainObject, mergeOptions } from "../actions/options/merge.js";
|
|
|
3
3
|
import { mapPluggable } from "../actions/pluggable/map.js";
|
|
4
4
|
import { finishRun } from "../actions/run/finish.js";
|
|
5
5
|
import { isTransformer } from "../actions/transformer/check.js";
|
|
6
|
-
import { HostFile } from "./vfile.js";
|
|
6
|
+
import { HostFile, HostMessage } from "./vfile.js";
|
|
7
7
|
/**
|
|
8
8
|
* unified's processor over the native pipeline; every call is the crate's, except that
|
|
9
9
|
* JavaScript plugins run here when a run pauses before them.
|
|
@@ -47,7 +47,8 @@ export class Processor {
|
|
|
47
47
|
/** Parse a document into a tree. */
|
|
48
48
|
parse(document) {
|
|
49
49
|
this.#attach();
|
|
50
|
-
|
|
50
|
+
const tree = JSON.parse(this.#native.parse(readValue(document) ?? ""));
|
|
51
|
+
return tree;
|
|
51
52
|
}
|
|
52
53
|
/**
|
|
53
54
|
* Run the transforms, finishing asynchronous stages; `file`, the text `tree` was parsed
|
|
@@ -56,26 +57,26 @@ export class Processor {
|
|
|
56
57
|
async run(tree, file) {
|
|
57
58
|
const value = readValue(file);
|
|
58
59
|
if (!this.#attach())
|
|
59
|
-
return this.#native.run(tree, value);
|
|
60
|
-
const run = this.#native.startRun(tree, value, false);
|
|
60
|
+
return readNode(this.#native.run(JSON.stringify(tree), value));
|
|
61
|
+
const run = this.#native.startRun(JSON.stringify(tree), value, false);
|
|
61
62
|
const host = new HostFile({ value, path: readPath(file) });
|
|
62
63
|
await finishRun({ run, hosts: this.#hosts, file: host, sync: false, call: "run" });
|
|
63
|
-
return run.result();
|
|
64
|
+
return readNode(run.result());
|
|
64
65
|
}
|
|
65
66
|
/** Run the transforms; fails with `async-in-sync` on an asynchronous stage. */
|
|
66
67
|
runSync(tree, file) {
|
|
67
68
|
const value = readValue(file);
|
|
68
69
|
if (!this.#attach())
|
|
69
|
-
return this.#native.runSync(tree, value);
|
|
70
|
-
const run = this.#native.startRun(tree, value, true);
|
|
70
|
+
return readNode(this.#native.runSync(JSON.stringify(tree), value));
|
|
71
|
+
const run = this.#native.startRun(JSON.stringify(tree), value, true);
|
|
71
72
|
const host = new HostFile({ value, path: readPath(file) });
|
|
72
73
|
void finishRun({ run, hosts: this.#hosts, file: host, sync: true, call: "run" });
|
|
73
|
-
return run.result();
|
|
74
|
+
return readNode(run.result());
|
|
74
75
|
}
|
|
75
76
|
/** Compile a tree, running no transform. */
|
|
76
77
|
stringify(tree) {
|
|
77
78
|
this.#attach();
|
|
78
|
-
return this.#native.stringify(tree);
|
|
79
|
+
return this.#native.stringify(JSON.stringify(tree));
|
|
79
80
|
}
|
|
80
81
|
/** Parse, run and compile a document, finishing asynchronous stages. */
|
|
81
82
|
async process(document) {
|
|
@@ -87,22 +88,22 @@ export class Processor {
|
|
|
87
88
|
throw Object.assign(new Error(outcome.error.message), outcome.error);
|
|
88
89
|
if (!outcome.file)
|
|
89
90
|
throw new Error("process settled with neither a file nor an error");
|
|
90
|
-
return
|
|
91
|
+
return readResult(outcome.file, document);
|
|
91
92
|
}
|
|
92
93
|
const run = this.#native.startProcess(text, false, readPath(document));
|
|
93
94
|
const file = new HostFile({ value: run.value() ?? text, path: readPath(document) });
|
|
94
95
|
await finishRun({ run, hosts: this.#hosts, file, sync: false, call: "process" });
|
|
95
|
-
return
|
|
96
|
+
return readResult(readFile(run.result()), document, file);
|
|
96
97
|
}
|
|
97
98
|
/** Parse, run and compile a document; fails with `async-in-sync` on an asynchronous stage. */
|
|
98
99
|
processSync(document) {
|
|
99
100
|
const text = readValue(document) ?? "";
|
|
100
101
|
if (!this.#attach())
|
|
101
|
-
return
|
|
102
|
+
return readResult(this.#native.processSync(text, readPath(document)), document);
|
|
102
103
|
const run = this.#native.startProcess(text, true, readPath(document));
|
|
103
104
|
const file = new HostFile({ value: run.value() ?? text, path: readPath(document) });
|
|
104
105
|
void finishRun({ run, hosts: this.#hosts, file, sync: true, call: "process" });
|
|
105
|
-
return
|
|
106
|
+
return readResult(readFile(run.result()), document, file);
|
|
106
107
|
}
|
|
107
108
|
// Once only: `freeze` borrows the native pipeline mutably, which napi refuses while an
|
|
108
109
|
// async `process` still holds it
|
|
@@ -150,18 +151,33 @@ export class Processor {
|
|
|
150
151
|
return this.#native.hosts().length > 0;
|
|
151
152
|
}
|
|
152
153
|
}
|
|
154
|
+
function readNode(text) {
|
|
155
|
+
const node = JSON.parse(text);
|
|
156
|
+
return node;
|
|
157
|
+
}
|
|
158
|
+
function readFile(text) {
|
|
159
|
+
const file = JSON.parse(text);
|
|
160
|
+
return file;
|
|
161
|
+
}
|
|
153
162
|
function readValue(file) {
|
|
154
163
|
return typeof file === "string" ? file : file?.value;
|
|
155
164
|
}
|
|
156
165
|
function readPath(file) {
|
|
157
166
|
return typeof file === "string" ? undefined : file?.path;
|
|
158
167
|
}
|
|
159
|
-
//
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
}
|
|
163
|
-
function withPath(file, document) {
|
|
168
|
+
// The crate's messages start with the host file's, in order: the plugins' own objects
|
|
169
|
+
// stay, so `fatal`, `url` and `note` survive; native data first, plugins' data over it
|
|
170
|
+
function readResult(native, document, host) {
|
|
164
171
|
const path = readPath(document);
|
|
172
|
+
const known = host?.messages ?? [];
|
|
173
|
+
const reported = native.messages
|
|
174
|
+
.slice(known.length)
|
|
175
|
+
.map(message => HostMessage.fromMessage(message, path));
|
|
176
|
+
const file = {
|
|
177
|
+
value: native.value,
|
|
178
|
+
messages: [...known, ...reported],
|
|
179
|
+
data: { ...native.data, ...host?.data },
|
|
180
|
+
};
|
|
165
181
|
return path === undefined ? file : { ...file, path };
|
|
166
182
|
}
|
|
167
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvY2Vzc29yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vbW9kZWxzL3Byb2Nlc3Nvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sOEJBQThCLENBQUE7QUFDekQsT0FBTyxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQTtBQUN6RSxPQUFPLEVBQWtCLFlBQVksRUFBRSxNQUFNLDZCQUE2QixDQUFBO0FBQzFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQTtBQUNwRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUNBQWlDLENBQUE7QUFNL0QsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFlBQVksQ0FBQTtBQUVyQzs7O0dBR0c7QUFDSCxNQUFNLE9BQU8sU0FBUztJQUNwQixPQUFPLENBQXNCO0lBQzdCLElBQUksR0FBRyxJQUFJLEdBQUcsRUFBb0IsQ0FBQTtJQUNsQyxNQUFNLEdBQUcsSUFBSSxHQUFHLEVBQWdCLENBQUE7SUFDaEMsU0FBUyxHQUFHLEtBQUssQ0FBQTtJQUNqQixPQUFPLEdBQUcsS0FBSyxDQUFBO0lBRWYsWUFBWSxNQUE0QjtRQUN0QyxJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQTtJQUN2QixDQUFDO0lBV0QsbUZBQW1GO0lBQ25GLEdBQUcsQ0FDRCxLQUE0RCxFQUM1RCxHQUFHLE9BQWtCO1FBRXJCLElBQUksVUFBVSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDdEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUE7WUFDbEQsT0FBTyxJQUFJLENBQUE7UUFDYixDQUFDO1FBQ0QsTUFBTSxRQUFRLEdBQUcsQ0FBQyxRQUFrQixFQUFFLFVBQXFCLEVBQUUsRUFBRSxDQUM3RCxJQUFJ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ciB9IGZyb20gXCIuLi9hY3Rpb25zL2F0dGFjaGVyL2NoZWNrLnRzXCJcbmltcG9ydCB7IGlzUGxhaW5PYmplY3QsIG1lcmdlT3B0aW9ucyB9IGZyb20gXCIuLi9hY3Rpb25zL29wdGlvbnMvbWVyZ2UudHNcIlxuaW1wb3J0IHsgdHlwZSBIb3N0RW50cnksIG1hcFBsdWdnYWJsZSB9IGZyb20gXCIuLi9hY3Rpb25zL3BsdWdnYWJsZS9tYXAudHNcIlxuaW1wb3J0IHsgZmluaXNoUnVuIH0gZnJvbSBcIi4uL2FjdGlvbnMvcnVuL2ZpbmlzaC50c1wiXG5pbXBvcnQgeyBpc1RyYW5zZm9ybWVyIH0gZnJvbSBcIi4uL2FjdGlvbnMvdHJhbnNmb3JtZXIvY2hlY2sudHNcIlxuaW1wb3J0IHR5cGUgeyBOb2RlIGFzIFVuaXN0Tm9kZSB9IGZyb20gXCJ1bmlzdFwiXG5pbXBvcnQgdHlwZSB7IE5hdGl2ZVBpcGVsaW5lIH0gZnJvbSBcIi4vYWRkb24udHNcIlxuaW1wb3J0IHR5cGUgeyBDb21wYXRpYmxlLCBOb2RlLCBWRmlsZSB9IGZyb20gXCIuL2ZpbGUudHNcIlxuaW1wb3J0IHR5cGUgeyBIb3N0IH0gZnJvbSBcIi4vaG9zdC50c1wiXG5pbXBvcnQgdHlwZSB7IEF0dGFjaGVyLCBQYXJzZXIsIFBsdWdnYWJsZSwgUGx1Z2dhYmxlTGlzdCwgUHJlc2V0IH0gZnJvbSBcIi4vcGx1Z2luLnRzXCJcbmltcG9ydCB7IEhvc3RGaWxlIH0gZnJvbSBcIi4vdmZpbGUudHNcIlxuXG4vKipcbiAqIHVuaWZpZWQncyBwcm9jZXNzb3Igb3ZlciB0aGUgbmF0aXZlIHBpcGVsaW5lOyBldmVyeSBjYWxsIGlzIHRoZSBjcmF0ZSdzLCBleGNlcHQgdGhhdFxuICogSmF2YVNjcmlwdCBwbHVnaW5zIHJ1biBoZXJlIHdoZW4gYSBydW4gcGF1c2VzIGJlZm9yZSB0aGVtLlxuICovXG5leHBvcnQgY2xhc3MgUHJvY2Vzc29yPFRyZWUgZXh0ZW5kcyBVbmlzdE5vZGUgPSBOb2RlPiB7XG4gICNuYXRpdmU6IE5hdGl2ZVBpcGVsaW5lPFRyZWU+XG4gICNpZHMgPSBuZXcgTWFwPEF0dGFjaGVyLCBudW1iZXI+KClcbiAgI2hvc3RzID0gbmV3IE1hcDxudW1iZXIsIEhvc3Q+KClcbiAgI2F0dGFjaGVkID0gZmFsc2VcbiAgI2Zyb3plbiA9IGZhbHNlXG5cbiAgY29uc3RydWN0b3IobmF0aXZlOiBOYXRpdmVQaXBlbGluZTxUcmVlPikge1xuICAgIHRoaXMuI25hdGl2ZSA9IG5hdGl2ZVxuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIHBsdWdpbiwgYSBsaXN0IG9mIHRoZW0gb3IgYSBwcmVzZXQ7IGEgcGx1Z2luIHVzZWQgYWdhaW4gaXMgcmVjb25maWd1cmVkLiBBXG4gICAqIEphdmFTY3JpcHQgcGx1Z2luIGlzIGFuIGF0dGFjaGVyLCBjYWxsZWQgd2l0aCB0aGUgcHJvY2Vzc29yIGFuZCBpdHMgb3B0aW9ucyBhdCBmcmVlemUuXG4gICAqIEEgcGFyc2VyLCBzdWNoIGFzIGBtZC5wYXJzZSgpYCwgdHlwZXMgdGhlIHRyZWUgYHBhcnNlYCByZXR1cm5zLlxuICAgKi9cbiAgdXNlPFZhbHVlIGV4dGVuZHMgUGx1Z2dhYmxlIHwgUGx1Z2dhYmxlTGlzdCB8IFByZXNldCB8IG51bGwgfCB1bmRlZmluZWQ+KFxuICAgIHZhbHVlOiBWYWx1ZSxcbiAgICAuLi5vcHRpb25zOiB1bmtub3duW11cbiAgKTogUHJvY2Vzc29yPFBhcnNlZFRyZWU8VmFsdWUsIFRyZWU+PlxuICAvLyBhIHBhcnNlciByZXR5cGVzIHRoaXMgc2FtZSBwcm9jZXNzb3I6IHRoZSB0cmVlIGl0IHBhcnNlcyBsaXZlcyBpbiB0aGUgdHlwZSBhbG9uZVxuICB1c2UoXG4gICAgdmFsdWU6IFBsdWdnYWJsZSB8IFBsdWdnYWJsZUxpc3QgfCBQcmVzZXQgfCBudWxsIHwgdW5kZWZpbmVkLFxuICAgIC4uLm9wdGlvbnM6IHVua25vd25bXVxuICApOiBQcm9jZXNzb3I8VW5pc3ROb2RlPiB7XG4gICAgaWYgKGlzQXR0YWNoZXIodmFsdWUpKSB7XG4gICAgICB0aGlzLiNuYXRpdmUudXNlKFt0aGlzLiNyZWdpc3Rlcih2YWx1ZSwgb3B0aW9ucyldKVxuICAgICAgcmV0dXJuIHRoaXNcbiAgICB9XG4gICAgY29uc3QgcmVnaXN0ZXIgPSAoYXR0YWNoZXI6IEF0dGFjaGVyLCBwYXJhbWV0ZXJzOiB1bmtub3duW10pID0+XG4gICAgICB0aGlzLiNyZWdpc3RlcihhdHRhY2hlciwgcGFyYW1ldGVycylcbiAgICB0aGlzLiNuYXRpdmUudXNlKG1hcFBsdWdnYWJsZSh2YWx1ZSA/PyBudWxsLCByZWdpc3RlciksIG9wdGlvbnNbMF0pXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIC8qKiBBbGwgZGF0YSwgb3IgdGhlIHZhbHVlIHVuZGVyIGBrZXlgLiAqL1xuICBkYXRhKCk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gIGRhdGEoa2V5OiBzdHJpbmcpOiB1bmtub3duXG4gIC8qKiBTZXQgdGhlIHZhbHVlIHVuZGVyIGBrZXlgLCBvciByZXBsYWNlIGFsbCBkYXRhLiAqL1xuICBkYXRhKGtleTogc3RyaW5nLCB2YWx1ZTogdW5rbm93bik6IHRoaXNcbiAgZGF0YShkYXRhc2V0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IHRoaXNcbiAgZGF0YShrZXk/OiBzdHJpbmcgfCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgLi4udmFsdWU6IHVua25vd25bXSkge1xuICAgIGlmICh0eXBlb2Yga2V5ID09PSBcIm9iamVjdFwiKSB7XG4gICAgICB0aGlzLiNuYXRpdmUucmVwbGFjZURhdGEoa2V5KVxuICAgICAgcmV0dXJuIHRoaXNcbiAgICB9XG4gICAgaWYgKGtleSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuI25hdGl2ZS5zZXREYXRhKGtleSwgdmFsdWVbMF0pXG4gICAgICByZXR1cm4gdGhpc1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy4jbmF0aXZlLmRhdGEoa2V5KVxuICB9XG5cbiAgLyoqIEF0dGFjaCBldmVyeSBwbHVnaW47IGxhdGVyIGB1c2VgIGFuZCBgZGF0YWAgc2V0dGVycyBmYWlsLiAqL1xuICBmcmVlemUoKSB7XG4gICAgdGhpcy4jYXR0YWNoKClcbiAgICB0aGlzLiNmcmVlemVOYXRpdmUoKVxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICAvKiogUGFyc2UgYSBkb2N1bWVudCBpbnRvIGEgdHJlZS4gKi9cbiAgcGFyc2UoZG9jdW1lbnQ6IENvbXBhdGlibGUpIHtcbiAgICB0aGlzLiNhdHRhY2goKVxuICAgIHJldHVybiB0aGlzLiNuYXRpdmUucGFyc2UocmVhZFZhbHVlKGRvY3VtZW50KSA/PyBcIlwiKVxuICB9XG5cbiAgLyoqXG4gICAqIFJ1biB0aGUgdHJhbnNmb3JtcywgZmluaXNoaW5nIGFzeW5jaHJvbm91cyBzdGFnZXM7IGBmaWxlYCwgdGhlIHRleHQgYHRyZWVgIHdhcyBwYXJzZWRcbiAgICogZnJvbSwgbGV0cyBicmlkZ2VzIHJlYWQgaXQgYW5kIGtlZXBzIHBvc2l0aW9ucyBpbiB0aGUgcmVzdWx0LlxuICAgKi9cbiAgYXN5bmMgcnVuKHRyZWU6IFVuaXN0Tm9kZSwgZmlsZT86IENvbXBhdGlibGUpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHJlYWRWYWx1ZShmaWxlKVxuICAgIGlmICghdGhpcy4jYXR0YWNoKCkpIHJldHVybiB0aGlzLiNuYXRpdmUucnVuKHRyZWUsIHZhbHVlKVxuICAgIGNvbnN0IHJ1biA9IHRoaXMuI25hdGl2ZS5zdGFydFJ1bih0cmVlLCB2YWx1ZSwgZmFsc2UpXG4gICAgY29uc3QgaG9zdCA9IG5ldyBIb3N0RmlsZSh7IHZhbHVlLCBwYXRoOiByZWFkUGF0aChmaWxlKSB9KVxuICAgIGF3YWl0IGZpbmlzaFJ1bih7IHJ1biwgaG9zdHM6IHRoaXMuI2hvc3RzLCBmaWxlOiBob3N0LCBzeW5jOiBmYWxzZSwgY2FsbDogXCJydW5cIiB9KVxuICAgIHJldHVybiBydW4ucmVzdWx0KClcbiAgfVxuXG4gIC8qKiBSdW4gdGhlIHRyYW5zZm9ybXM7IGZhaWxzIHdpdGggYGFzeW5jLWluLXN5bmNgIG9uIGFuIGFzeW5jaHJvbm91cyBzdGFnZS4gKi9cbiAgcnVuU3luYyh0cmVlOiBVbmlzdE5vZGUsIGZpbGU/OiBDb21wYXRpYmxlKSB7XG4gICAgY29uc3QgdmFsdWUgPSByZWFkVmFsdWUoZmlsZSlcbiAgICBpZiAoIXRoaXMuI2F0dGFjaCgpKSByZXR1cm4gdGhpcy4jbmF0aXZlLnJ1blN5bmModHJlZSwgdmFsdWUpXG4gICAgY29uc3QgcnVuID0gdGhpcy4jbmF0aXZlLnN0YXJ0UnVuKHRyZWUsIHZhbHVlLCB0cnVlKVxuICAgIGNvbnN0IGhvc3QgPSBuZXcgSG9zdEZpbGUoeyB2YWx1ZSwgcGF0aDogcmVhZFBhdGgoZmlsZSkgfSlcbiAgICB2b2lkIGZpbmlzaFJ1bih7IHJ1biwgaG9zdHM6IHRoaXMuI2hvc3RzLCBmaWxlOiBob3N0LCBzeW5jOiB0cnVlLCBjYWxsOiBcInJ1blwiIH0pXG4gICAgcmV0dXJuIHJ1bi5yZXN1bHQoKVxuICB9XG5cbiAgLyoqIENvbXBpbGUgYSB0cmVlLCBydW5uaW5nIG5vIHRyYW5zZm9ybS4gKi9cbiAgc3RyaW5naWZ5KHRyZWU6IFVuaXN0Tm9kZSkge1xuICAgIHRoaXMuI2F0dGFjaCgpXG4gICAgcmV0dXJuIHRoaXMuI25hdGl2ZS5zdHJpbmdpZnkodHJlZSlcbiAgfVxuXG4gIC8qKiBQYXJzZSwgcnVuIGFuZCBjb21waWxlIGEgZG9jdW1lbnQsIGZpbmlzaGluZyBhc3luY2hyb25vdXMgc3RhZ2VzLiAqL1xuICBhc3luYyBwcm9jZXNzKGRvY3VtZW50OiBDb21wYXRpYmxlKTogUHJvbWlzZTxWRmlsZT4ge1xuICAgIGNvbnN0IHRleHQgPSByZWFkVmFsdWUoZG9jdW1lbnQpID8/IFwiXCJcbiAgICBpZiAoIXRoaXMuI2F0dGFjaCgpKSB7XG4gICAgICB0aGlzLiNmcmVlemVOYXRpdmUoKVxuICAgICAgY29uc3Qgb3V0Y29tZSA9IGF3YWl0IHRoaXMuI25hdGl2ZS5wcm9jZXNzKHRleHQsIHJlYWRQYXRoKGRvY3VtZW50KSlcbiAgICAgIGlmIChvdXRjb21lLmVycm9yKVxuICAgICAgICB0aHJvdyBPYmplY3QuYXNzaWduKG5ldyBFcnJvcihvdXRjb21lLmVycm9yLm1lc3NhZ2UpLCBvdXRjb21lLmVycm9yKVxuICAgICAgaWYgKCFvdXRjb21lLmZpbGUpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcInByb2Nlc3Mgc2V0dGxlZCB3aXRoIG5laXRoZXIgYSBmaWxlIG5vciBhbiBlcnJvclwiKVxuICAgICAgcmV0dXJuIHdpdGhQYXRoKG91dGNvbWUuZmlsZSwgZG9jdW1lbnQpXG4gICAgfVxuICAgIGNvbnN0IHJ1biA9IHRoaXMuI25hdGl2ZS5zdGFydFByb2Nlc3ModGV4dCwgZmFsc2UsIHJlYWRQYXRoKGRvY3VtZW50KSlcbiAgICBjb25zdCBmaWxlID0gbmV3IEhvc3RGaWxlKHsgdmFsdWU6IHJ1bi52YWx1ZSgpID8/IHRleHQsIHBhdGg6IHJlYWRQYXRoKGRvY3VtZW50KSB9KVxuICAgIGF3YWl0IGZpbmlzaFJ1bih7IHJ1biwgaG9zdHM6IHRoaXMuI2hvc3RzLCBmaWxlLCBzeW5jOiBmYWxzZSwgY2FsbDogXCJwcm9jZXNzXCIgfSlcbiAgICByZXR1cm4gd2l0aFBhdGgobWVyZ2VEYXRhKHJ1bi5yZXN1bHQoKSwgZmlsZS5kYXRhKSwgZG9jdW1lbnQpXG4gIH1cblxuICAvKiogUGFyc2UsIHJ1biBhbmQgY29tcGlsZSBhIGRvY3VtZW50OyBmYWlscyB3aXRoIGBhc3luYy1pbi1zeW5jYCBvbiBhbiBhc3luY2hyb25vdXMgc3RhZ2UuICovXG4gIHByb2Nlc3NTeW5jKGRvY3VtZW50OiBDb21wYXRpYmxlKTogVkZpbGUge1xuICAgIGNvbnN0IHRleHQgPSByZWFkVmFsdWUoZG9jdW1lbnQpID8/IFwiXCJcbiAgICBpZiAoIXRoaXMuI2F0dGFjaCgpKVxuICAgICAgcmV0dXJuIHdpdGhQYXRoKHRoaXMuI25hdGl2ZS5wcm9jZXNzU3luYyh0ZXh0LCByZWFkUGF0aChkb2N1bWVudCkpLCBkb2N1bWVudClcbiAgICBjb25zdCBydW4gPSB0aGlzLiNuYXRpdmUuc3RhcnRQcm9jZXNzKHRleHQsIHRydWUsIHJlYWRQYXRoKGRvY3VtZW50KSlcbiAgICBjb25zdCBmaWxlID0gbmV3IEhvc3RGaWxlKHsgdmFsdWU6IHJ1bi52YWx1ZSgpID8/IHRleHQsIHBhdGg6IHJlYWRQYXRoKGRvY3VtZW50KSB9KVxuICAgIHZvaWQgZmluaXNoUnVuKHsgcnVuLCBob3N0czogdGhpcy4jaG9zdHMsIGZpbGUsIHN5bmM6IHRydWUsIGNhbGw6IFwicHJvY2Vzc1wiIH0pXG4gICAgcmV0dXJuIHdpdGhQYXRoKG1lcmdlRGF0YShydW4ucmVzdWx0KCksIGZpbGUuZGF0YSksIGRvY3VtZW50KVxuICB9XG5cbiAgLy8gT25jZSBvbmx5OiBgZnJlZXplYCBib3Jyb3dzIHRoZSBuYXRpdmUgcGlwZWxpbmUgbXV0YWJseSwgd2hpY2ggbmFwaSByZWZ1c2VzIHdoaWxlIGFuXG4gIC8vIGFzeW5jIGBwcm9jZXNzYCBzdGlsbCBob2xkcyBpdFxuICAjZnJlZXplTmF0aXZlKCkge1xuICAgIGlmICh0aGlzLiNmcm96ZW4pIHJldHVyblxuICAgIHRoaXMuI2Zyb3plbiA9IHRydWVcbiAgICB0aGlzLiNuYXRpdmUuZnJlZXplKClcbiAgfVxuXG4gIC8vIHVuaWZpZWQncyBhZGRQbHVnaW46IHRoZSBzYW1lIGF0dGFjaGVyIGlzIG9uZSBwbHVnaW4sIGl0cyBvYmplY3Qgb3B0aW9ucyBtZXJnZWRcbiAgI3JlZ2lzdGVyKGF0dGFjaGVyOiBBdHRhY2hlciwgcGFyYW1ldGVyczogdW5rbm93bltdKTogSG9zdEVudHJ5IHtcbiAgICBsZXQgaWQgPSB0aGlzLiNpZHMuZ2V0KGF0dGFjaGVyKVxuICAgIGlmIChpZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZCA9IHRoaXMuI2lkcy5zaXplXG4gICAgICB0aGlzLiNpZHMuc2V0KGF0dGFjaGVyLCBpZClcbiAgICAgIHRoaXMuI2hvc3RzLnNldChpZCwgeyBhdHRhY2hlciwgcGFyYW1ldGVycyB9KVxuICAgICAgcmV0dXJuIFt7IGhvc3Q6IGlkIH0sIHBhcmFtZXRlcnNbMF0gIT09IGZhbHNlXVxuICAgIH1cbiAgICBjb25zdCBob3N0ID0gdGhpcy4jaG9zdHMuZ2V0KGlkKVxuICAgIGlmICghaG9zdCB8fCBwYXJhbWV0ZXJzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIFt7IGhvc3Q6IGlkIH1dXG4gICAgY29uc3QgW3ByaW1hcnksIC4uLnJlc3RdID0gcGFyYW1ldGVyc1xuICAgIGNvbnN0IG1lcmdlZCA9XG4gICAgICBpc1BsYWluT2JqZWN0KGhvc3QucGFyYW1ldGVyc1swXSkgJiYgaXNQbGFpbk9iamVjdChwcmltYXJ5KVxuICAgICAgICA/IG1lcmdlT3B0aW9ucyhob3N0LnBhcmFtZXRlcnNbMF0sIHByaW1hcnkpXG4gICAgICAgIDogcHJpbWFyeVxuICAgIGhvc3QucGFyYW1ldGVycyA9IFttZXJnZWQsIC4uLnJlc3RdXG4gICAgcmV0dXJuIFt7IGhvc3Q6IGlkIH0sIG1lcmdlZCAhPT0gZmFsc2VdXG4gIH1cblxuICAvLyBBdHRhY2hlcnMgcnVuIG9uY2UsIGJlZm9yZSB0aGUgbmF0aXZlIHBpcGVsaW5lIGZyZWV6ZXMsIHNvIHRoZXkgY2FuIHN0aWxsIHNldCBkYXRhO1xuICAvLyB3aGV0aGVyIGFueSBKYXZhU2NyaXB0IHBsdWdpbiBpcyBvbiBkZWNpZGVzIGlmIHJ1bnMgcGF1c2UgZm9yIHRoZW1cbiAgI2F0dGFjaCgpIHtcbiAgICBpZiAoIXRoaXMuI2F0dGFjaGVkKSB7XG4gICAgICB0aGlzLiNhdHRhY2hlZCA9IHRydWVcbiAgICAgIGZvciAoY29uc3QgaWQgb2YgdGhpcy4jbmF0aXZlLmhvc3RzKCkpIHtcbiAgICAgICAgY29uc3QgaG9zdCA9IHRoaXMuI2hvc3RzLmdldChpZClcbiAgICAgICAgaWYgKCFob3N0KSBjb250aW51ZVxuICAgICAgICBjb25zdCBbcHJpbWFyeSwgLi4ucmVzdF0gPSBob3N0LnBhcmFtZXRlcnNcbiAgICAgICAgY29uc3QgcGFyYW1ldGVycyA9IHByaW1hcnkgPT09IHRydWUgPyBbdW5kZWZpbmVkLCAuLi5yZXN0XSA6IGhvc3QucGFyYW1ldGVyc1xuICAgICAgICBjb25zdCB0cmFuc2Zvcm1lcjogdW5rbm93biA9IFJlZmxlY3QuYXBwbHkoaG9zdC5hdHRhY2hlciwgdGhpcywgcGFyYW1ldGVycylcbiAgICAgICAgaWYgKGlzVHJhbnNmb3JtZXIodHJhbnNmb3JtZXIpKSBob3N0LnRyYW5zZm9ybWVyID0gdHJhbnNmb3JtZXJcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuI25hdGl2ZS5ob3N0cygpLmxlbmd0aCA+IDBcbiAgfVxufVxuXG4vLyBBIHBsdWdpbiB3aXRob3V0IHRoZSBtYXJrZXIgaW5mZXJzIGB1bmtub3duYCBmcm9tIHRoZSBvcHRpb25hbCBrZXksIGtlZXBpbmcgdGhlIHRyZWVcbnR5cGUgUGFyc2VkVHJlZTxWYWx1ZSwgQ3VycmVudD4gPVxuICBWYWx1ZSBleHRlbmRzIFBhcnNlcjxpbmZlciBQYXJzZWQ+XG4gICAgPyBQYXJzZWQgZXh0ZW5kcyBVbmlzdE5vZGVcbiAgICAgID8gUGFyc2VkXG4gICAgICA6IEN1cnJlbnRcbiAgICA6IEN1cnJlbnRcblxuZnVuY3Rpb24gcmVhZFZhbHVlKGZpbGU6IENvbXBhdGlibGUgfCB1bmRlZmluZWQpIHtcbiAgcmV0dXJuIHR5cGVvZiBmaWxlID09PSBcInN0cmluZ1wiID8gZmlsZSA6IGZpbGU/LnZhbHVlXG59XG5cbmZ1bmN0aW9uIHJlYWRQYXRoKGZpbGU6IENvbXBhdGlibGUgfCB1bmRlZmluZWQpIHtcbiAgcmV0dXJuIHR5cGVvZiBmaWxlID09PSBcInN0cmluZ1wiID8gdW5kZWZpbmVkIDogZmlsZT8ucGF0aFxufVxuXG4vLyBOYXRpdmUgc3RhZ2VzJyBkYXRhIGZpcnN0LCB0aGVuIHdoYXQgSmF2YVNjcmlwdCBwbHVnaW5zIHN0b3JlZCBvdmVyIGl0XG5mdW5jdGlvbiBtZXJnZURhdGEocmVzdWx0OiBWRmlsZSwgZGF0YTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBWRmlsZSB7XG4gIHJldHVybiB7IC4uLnJlc3VsdCwgZGF0YTogeyAuLi5yZXN1bHQuZGF0YSwgLi4uZGF0YSB9IH1cbn1cblxuZnVuY3Rpb24gd2l0aFBhdGgoZmlsZTogVkZpbGUsIGRvY3VtZW50OiBDb21wYXRpYmxlKSB7XG4gIGNvbnN0IHBhdGggPSByZWFkUGF0aChkb2N1bWVudClcbiAgcmV0dXJuIHBhdGggPT09IHVuZGVmaW5lZCA/IGZpbGUgOiB7IC4uLmZpbGUsIHBhdGggfVxufVxuIl19
|
|
183
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvY2Vzc29yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vbW9kZWxzL3Byb2Nlc3Nvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sOEJBQThCLENBQUE7QUFDekQsT0FBTyxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQTtBQUN6RSxPQUFPLEVBQWtCLFlBQVksRUFBRSxNQUFNLDZCQUE2QixDQUFBO0FBQzFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQTtBQUNwRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUNBQWlDLENBQUE7QUFNL0QsT0FBTyxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsTUFBTSxZQUFZLENBQUE7QUFFbEQ7OztHQUdHO0FBQ0gsTUFBTSxPQUFPLFNBQVM7SUFDcEIsT0FBTyxDQUFnQjtJQUN2QixJQUFJLEdBQUcsSUFBSSxHQUFHLEVBQW9CLENBQUE7SUFDbEMsTUFBTSxHQUFHLElBQUksR0FBRyxFQUFnQixDQUFBO0lBQ2hDLFNBQVMsR0FBRyxLQUFLLENBQUE7SUFDakIsT0FBTyxHQUFHLEtBQUssQ0FBQTtJQUVmLFlBQVksTUFBc0I7UUFDaEMsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUE7SUFDdkIsQ0FBQztJQVdELG1GQUFtRjtJQUNuRixHQUFHLENBQ0QsS0FBNEQsRUFDNUQsR0FBRyxPQUFrQjtRQUVyQixJQUFJLFVBQVUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3RCLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFBO1lBQ2xELE9BQU8sSUFBSSxDQUFBO1FBQ2IsQ0FBQztRQUNELE1BQU0sUUFBUSxHQUFHLENBQUMsUUFBa0IsRUFBRSxVQUFxQixFQUFFLEVBQUUs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LFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFBO0FBQzFELENBQUM7QUFFRCxzRkFBc0Y7QUFDdEYsdUZBQXVGO0FBQ3ZGLFNBQVMsVUFBVSxDQUFDLE1BQWtCLEVBQUUsUUFBb0IsRUFBRSxJQUFlO0lBQzNFLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQTtJQUMvQixNQUFNLEtBQUssR0FBRyxJQUFJLEVBQUUsUUFBUSxJQUFJLEVBQUUsQ0FBQTtJQUNsQyxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUTtTQUM3QixLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQztTQUNuQixHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFBO0lBQ3pELE1BQU0sSUFBSSxHQUFVO1FBQ2xCLEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSztRQUNuQixRQUFRLEVBQUUsQ0FBQyxHQUFHLEtBQUssRUFBRSxHQUFHLFFBQVEsQ0FBQztRQUNqQyxJQUFJLEVBQUUsRUFBRSxHQUFHLE1BQU0sQ0FBQyxJQUFJLEVBQUUsR0FBRyxJQUFJLEVBQUUsSUFBSSxFQUFFO0tBQ3hDLENBQUE7SUFDRCxPQUFPLElBQUksS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQTtBQUN0RCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNBdHRhY2hlciB9IGZyb20gXCIuLi9hY3Rpb25zL2F0dGFjaGVyL2NoZWNrLnRzXCJcbmltcG9ydCB7IGlzUGxhaW5PYmplY3QsIG1lcmdlT3B0aW9ucyB9IGZyb20gXCIuLi9hY3Rpb25zL29wdGlvbnMvbWVyZ2UudHNcIlxuaW1wb3J0IHsgdHlwZSBIb3N0RW50cnksIG1hcFBsdWdnYWJsZSB9IGZyb20gXCIuLi9hY3Rpb25zL3BsdWdnYWJsZS9tYXAudHNcIlxuaW1wb3J0IHsgZmluaXNoUnVuIH0gZnJvbSBcIi4uL2FjdGlvbnMvcnVuL2ZpbmlzaC50c1wiXG5pbXBvcnQgeyBpc1RyYW5zZm9ybWVyIH0gZnJvbSBcIi4uL2FjdGlvbnMvdHJhbnNmb3JtZXIvY2hlY2sudHNcIlxuaW1wb3J0IHR5cGUgeyBOb2RlIGFzIFVuaXN0Tm9kZSB9IGZyb20gXCJ1bmlzdFwiXG5pbXBvcnQgdHlwZSB7IE5hdGl2ZUZpbGUsIE5hdGl2ZVBpcGVsaW5lIH0gZnJvbSBcIi4vYWRkb24udHNcIlxuaW1wb3J0IHR5cGUgeyBDb21wYXRpYmxlLCBOb2RlLCBWRmlsZSB9IGZyb20gXCIuL2ZpbGUudHNcIlxuaW1wb3J0IHR5cGUgeyBIb3N0IH0gZnJvbSBcIi4vaG9zdC50c1wiXG5pbXBvcnQgdHlwZSB7IEF0dGFjaGVyLCBQYXJzZXIsIFBsdWdnYWJsZSwgUGx1Z2dhYmxlTGlzdCwgUHJlc2V0IH0gZnJvbSBcIi4vcGx1Z2luLnRzXCJcbmltcG9ydCB7IEhvc3RGaWxlLCBIb3N0TWVzc2FnZSB9IGZyb20gXCIuL3ZmaWxlLnRzXCJcblxuLyoqXG4gKiB1bmlmaWVkJ3MgcHJvY2Vzc29yIG92ZXIgdGhlIG5hdGl2ZSBwaXBlbGluZTsgZXZlcnkgY2FsbCBpcyB0aGUgY3JhdGUncywgZXhjZXB0IHRoYXRcbiAqIEphdmFTY3JpcHQgcGx1Z2lucyBydW4gaGVyZSB3aGVuIGEgcnVuIHBhdXNlcyBiZWZvcmUgdGhlbS5cbiAqL1xuZXhwb3J0IGNsYXNzIFByb2Nlc3NvcjxUcmVlIGV4dGVuZHMgVW5pc3ROb2RlID0gTm9kZT4ge1xuICAjbmF0aXZlOiBOYXRpdmVQaXBlbGluZVxuICAjaWRzID0gbmV3IE1hcDxBdHRhY2hlciwgbnVtYmVyPigpXG4gICNob3N0cyA9IG5ldyBNYXA8bnVtYmVyLCBIb3N0PigpXG4gICNhdHRhY2hlZCA9IGZhbHNlXG4gICNmcm96ZW4gPSBmYWxzZVxuXG4gIGNvbnN0cnVjdG9yKG5hdGl2ZTogTmF0aXZlUGlwZWxpbmUpIHtcbiAgICB0aGlzLiNuYXRpdmUgPSBuYXRpdmVcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYSBwbHVnaW4sIGEgbGlzdCBvZiB0aGVtIG9yIGEgcHJlc2V0OyBhIHBsdWdpbiB1c2VkIGFnYWluIGlzIHJlY29uZmlndXJlZC4gQVxuICAgKiBKYXZhU2NyaXB0IHBsdWdpbiBpcyBhbiBhdHRhY2hlciwgY2FsbGVkIHdpdGggdGhlIHByb2Nlc3NvciBhbmQgaXRzIG9wdGlvbnMgYXQgZnJlZXplLlxuICAgKiBBIHBhcnNlciwgc3VjaCBhcyBgbWQucGFyc2UoKWAsIHR5cGVzIHRoZSB0cmVlIGBwYXJzZWAgcmV0dXJucy5cbiAgICovXG4gIHVzZTxWYWx1ZSBleHRlbmRzIFBsdWdnYWJsZSB8IFBsdWdnYWJsZUxpc3QgfCBQcmVzZXQgfCBudWxsIHwgdW5kZWZpbmVkPihcbiAgICB2YWx1ZTogVmFsdWUsXG4gICAgLi4ub3B0aW9uczogdW5rbm93bltdXG4gICk6IFByb2Nlc3NvcjxQYXJzZWRUcmVlPFZhbHVlLCBUcmVlPj5cbiAgLy8gYSBwYXJzZXIgcmV0eXBlcyB0aGlzIHNhbWUgcHJvY2Vzc29yOiB0aGUgdHJlZSBpdCBwYXJzZXMgbGl2ZXMgaW4gdGhlIHR5cGUgYWxvbmVcbiAgdXNlKFxuICAgIHZhbHVlOiBQbHVnZ2FibGUgfCBQbHVnZ2FibGVMaXN0IHwgUHJlc2V0IHwgbnVsbCB8IHVuZGVmaW5lZCxcbiAgICAuLi5vcHRpb25zOiB1bmtub3duW11cbiAgKTogUHJvY2Vzc29yPFVuaXN0Tm9kZT4ge1xuICAgIGlmIChpc0F0dGFjaGVyKHZhbHVlKSkge1xuICAgICAgdGhpcy4jbmF0aXZlLnVzZShbdGhpcy4jcmVnaXN0ZXIodmFsdWUsIG9wdGlvbnMpXSlcbiAgICAgIHJldHVybiB0aGlzXG4gICAgfVxuICAgIGNvbnN0IHJlZ2lzdGVyID0gKGF0dGFjaGVyOiBBdHRhY2hlciwgcGFyYW1ldGVyczogdW5rbm93bltdKSA9PlxuICAgICAgdGhpcy4jcmVnaXN0ZXIoYXR0YWNoZXIsIHBhcmFtZXRlcnMpXG4gICAgdGhpcy4jbmF0aXZlLnVzZShtYXBQbHVnZ2FibGUodmFsdWUgPz8gbnVsbCwgcmVnaXN0ZXIpLCBvcHRpb25zWzBdKVxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICAvKiogQWxsIGRhdGEsIG9yIHRoZSB2YWx1ZSB1bmRlciBga2V5YC4gKi9cbiAgZGF0YSgpOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICBkYXRhKGtleTogc3RyaW5nKTogdW5rbm93blxuICAvKiogU2V0IHRoZSB2YWx1ZSB1bmRlciBga2V5YCwgb3IgcmVwbGFjZSBhbGwgZGF0YS4gKi9cbiAgZGF0YShrZXk6IHN0cmluZywgdmFsdWU6IHVua25vd24pOiB0aGlzXG4gIGRhdGEoZGF0YXNldDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiB0aGlzXG4gIGRhdGEoa2V5Pzogc3RyaW5nIHwgUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIC4uLnZhbHVlOiB1bmtub3duW10pIHtcbiAgICBpZiAodHlwZW9mIGtleSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgdGhpcy4jbmF0aXZlLnJlcGxhY2VEYXRhKGtleSlcbiAgICAgIHJldHVybiB0aGlzXG4gICAgfVxuICAgIGlmIChrZXkgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZS5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLiNuYXRpdmUuc2V0RGF0YShrZXksIHZhbHVlWzBdKVxuICAgICAgcmV0dXJuIHRoaXNcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuI25hdGl2ZS5kYXRhKGtleSlcbiAgfVxuXG4gIC8qKiBBdHRhY2ggZXZlcnkgcGx1Z2luOyBsYXRlciBgdXNlYCBhbmQgYGRhdGFgIHNldHRlcnMgZmFpbC4gKi9cbiAgZnJlZXplKCkge1xuICAgIHRoaXMuI2F0dGFjaCgpXG4gICAgdGhpcy4jZnJlZXplTmF0aXZlKClcbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgLyoqIFBhcnNlIGEgZG9jdW1lbnQgaW50byBhIHRyZWUuICovXG4gIHBhcnNlKGRvY3VtZW50OiBDb21wYXRpYmxlKSB7XG4gICAgdGhpcy4jYXR0YWNoKClcbiAgICBjb25zdCB0cmVlOiBUcmVlID0gSlNPTi5wYXJzZSh0aGlzLiNuYXRpdmUucGFyc2UocmVhZFZhbHVlKGRvY3VtZW50KSA/PyBcIlwiKSlcbiAgICByZXR1cm4gdHJlZVxuICB9XG5cbiAgLyoqXG4gICAqIFJ1biB0aGUgdHJhbnNmb3JtcywgZmluaXNoaW5nIGFzeW5jaHJvbm91cyBzdGFnZXM7IGBmaWxlYCwgdGhlIHRleHQgYHRyZWVgIHdhcyBwYXJzZWRcbiAgICogZnJvbSwgbGV0cyBicmlkZ2VzIHJlYWQgaXQgYW5kIGtlZXBzIHBvc2l0aW9ucyBpbiB0aGUgcmVzdWx0LlxuICAgKi9cbiAgYXN5bmMgcnVuKHRyZWU6IFVuaXN0Tm9kZSwgZmlsZT86IENvbXBhdGlibGUpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHJlYWRWYWx1ZShmaWxlKVxuICAgIGlmICghdGhpcy4jYXR0YWNoKCkpIHJldHVybiByZWFkTm9kZSh0aGlzLiNuYXRpdmUucnVuKEpTT04uc3RyaW5naWZ5KHRyZWUpLCB2YWx1ZSkpXG4gICAgY29uc3QgcnVuID0gdGhpcy4jbmF0aXZlLnN0YXJ0UnVuKEpTT04uc3RyaW5naWZ5KHRyZWUpLCB2YWx1ZSwgZmFsc2UpXG4gICAgY29uc3QgaG9zdCA9IG5ldyBIb3N0RmlsZSh7IHZhbHVlLCBwYXRoOiByZWFkUGF0aChmaWxlKSB9KVxuICAgIGF3YWl0IGZpbmlzaFJ1bih7IHJ1biwgaG9zdHM6IHRoaXMuI2hvc3RzLCBmaWxlOiBob3N0LCBzeW5jOiBmYWxzZSwgY2FsbDogXCJydW5cIiB9KVxuICAgIHJldHVybiByZWFkTm9kZShydW4ucmVzdWx0KCkpXG4gIH1cblxuICAvKiogUnVuIHRoZSB0cmFuc2Zvcm1zOyBmYWlscyB3aXRoIGBhc3luYy1pbi1zeW5jYCBvbiBhbiBhc3luY2hyb25vdXMgc3RhZ2UuICovXG4gIHJ1blN5bmModHJlZTogVW5pc3ROb2RlLCBmaWxlPzogQ29tcGF0aWJsZSkge1xuICAgIGNvbnN0IHZhbHVlID0gcmVhZFZhbHVlKGZpbGUpXG4gICAgaWYgKCF0aGlzLiNhdHRhY2goKSlcbiAgICAgIHJldHVybiByZWFkTm9kZSh0aGlzLiNuYXRpdmUucnVuU3luYyhKU09OLnN0cmluZ2lmeSh0cmVlKSwgdmFsdWUpKVxuICAgIGNvbnN0IHJ1biA9IHRoaXMuI25hdGl2ZS5zdGFydFJ1bihKU09OLnN0cmluZ2lmeSh0cmVlKSwgdmFsdWUsIHRydWUpXG4gICAgY29uc3QgaG9zdCA9IG5ldyBIb3N0RmlsZSh7IHZhbHVlLCBwYXRoOiByZWFkUGF0aChmaWxlKSB9KVxuICAgIHZvaWQgZmluaXNoUnVuKHsgcnVuLCBob3N0czogdGhpcy4jaG9zdHMsIGZpbGU6IGhvc3QsIHN5bmM6IHRydWUsIGNhbGw6IFwicnVuXCIgfSlcbiAgICByZXR1cm4gcmVhZE5vZGUocnVuLnJlc3VsdCgpKVxuICB9XG5cbiAgLyoqIENvbXBpbGUgYSB0cmVlLCBydW5uaW5nIG5vIHRyYW5zZm9ybS4gKi9cbiAgc3RyaW5naWZ5KHRyZWU6IFVuaXN0Tm9kZSkge1xuICAgIHRoaXMuI2F0dGFjaCgpXG4gICAgcmV0dXJuIHRoaXMuI25hdGl2ZS5zdHJpbmdpZnkoSlNPTi5zdHJpbmdpZnkodHJlZSkpXG4gIH1cblxuICAvKiogUGFyc2UsIHJ1biBhbmQgY29tcGlsZSBhIGRvY3VtZW50LCBmaW5pc2hpbmcgYXN5bmNocm9ub3VzIHN0YWdlcy4gKi9cbiAgYXN5bmMgcHJvY2Vzcyhkb2N1bWVudDogQ29tcGF0aWJsZSk6IFByb21pc2U8VkZpbGU+IHtcbiAgICBjb25zdCB0ZXh0ID0gcmVhZFZhbHVlKGRvY3VtZW50KSA/PyBcIlwiXG4gICAgaWYgKCF0aGlzLiNhdHRhY2goKSkge1xuICAgICAgdGhpcy4jZnJlZXplTmF0aXZlKClcbiAgICAgIGNvbnN0IG91dGNvbWUgPSBhd2FpdCB0aGlzLiNuYXRpdmUucHJvY2Vzcyh0ZXh0LCByZWFkUGF0aChkb2N1bWVudCkpXG4gICAgICBpZiAob3V0Y29tZS5lcnJvcilcbiAgICAgICAgdGhyb3cgT2JqZWN0LmFzc2lnbihuZXcgRXJyb3Iob3V0Y29tZS5lcnJvci5tZXNzYWdlKSwgb3V0Y29tZS5lcnJvcilcbiAgICAgIGlmICghb3V0Y29tZS5maWxlKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJwcm9jZXNzIHNldHRsZWQgd2l0aCBuZWl0aGVyIGEgZmlsZSBub3IgYW4gZXJyb3JcIilcbiAgICAgIHJldHVybiByZWFkUmVzdWx0KG91dGNvbWUuZmlsZSwgZG9jdW1lbnQpXG4gICAgfVxuICAgIGNvbnN0IHJ1biA9IHRoaXMuI25hdGl2ZS5zdGFydFByb2Nlc3ModGV4dCwgZmFsc2UsIHJlYWRQYXRoKGRvY3VtZW50KSlcbiAgICBjb25zdCBmaWxlID0gbmV3IEhvc3RGaWxlKHsgdmFsdWU6IHJ1bi52YWx1ZSgpID8/IHRleHQsIHBhdGg6IHJlYWRQYXRoKGRvY3VtZW50KSB9KVxuICAgIGF3YWl0IGZpbmlzaFJ1bih7IHJ1biwgaG9zdHM6IHRoaXMuI2hvc3RzLCBmaWxlLCBzeW5jOiBmYWxzZSwgY2FsbDogXCJwcm9jZXNzXCIgfSlcbiAgICByZXR1cm4gcmVhZFJlc3VsdChyZWFkRmlsZShydW4ucmVzdWx0KCkpLCBkb2N1bWVudCwgZmlsZSlcbiAgfVxuXG4gIC8qKiBQYXJzZSwgcnVuIGFuZCBjb21waWxlIGEgZG9jdW1lbnQ7IGZhaWxzIHdpdGggYGFzeW5jLWluLXN5bmNgIG9uIGFuIGFzeW5jaHJvbm91cyBzdGFnZS4gKi9cbiAgcHJvY2Vzc1N5bmMoZG9jdW1lbnQ6IENvbXBhdGlibGUpOiBWRmlsZSB7XG4gICAgY29uc3QgdGV4dCA9IHJlYWRWYWx1ZShkb2N1bWVudCkgPz8gXCJcIlxuICAgIGlmICghdGhpcy4jYXR0YWNoKCkpXG4gICAgICByZXR1cm4gcmVhZFJlc3VsdCh0aGlzLiNuYXRpdmUucHJvY2Vzc1N5bmModGV4dCwgcmVhZFBhdGgoZG9jdW1lbnQpKSwgZG9jdW1lbnQpXG4gICAgY29uc3QgcnVuID0gdGhpcy4jbmF0aXZlLnN0YXJ0UHJvY2Vzcyh0ZXh0LCB0cnVlLCByZWFkUGF0aChkb2N1bWVudCkpXG4gICAgY29uc3QgZmlsZSA9IG5ldyBIb3N0RmlsZSh7IHZhbHVlOiBydW4udmFsdWUoKSA/PyB0ZXh0LCBwYXRoOiByZWFkUGF0aChkb2N1bWVudCkgfSlcbiAgICB2b2lkIGZpbmlzaFJ1bih7IHJ1biwgaG9zdHM6IHRoaXMuI2hvc3RzLCBmaWxlLCBzeW5jOiB0cnVlLCBjYWxsOiBcInByb2Nlc3NcIiB9KVxuICAgIHJldHVybiByZWFkUmVzdWx0KHJlYWRGaWxlKHJ1bi5yZXN1bHQoKSksIGRvY3VtZW50LCBmaWxlKVxuICB9XG5cbiAgLy8gT25jZSBvbmx5OiBgZnJlZXplYCBib3Jyb3dzIHRoZSBuYXRpdmUgcGlwZWxpbmUgbXV0YWJseSwgd2hpY2ggbmFwaSByZWZ1c2VzIHdoaWxlIGFuXG4gIC8vIGFzeW5jIGBwcm9jZXNzYCBzdGlsbCBob2xkcyBpdFxuICAjZnJlZXplTmF0aXZlKCkge1xuICAgIGlmICh0aGlzLiNmcm96ZW4pIHJldHVyblxuICAgIHRoaXMuI2Zyb3plbiA9IHRydWVcbiAgICB0aGlzLiNuYXRpdmUuZnJlZXplKClcbiAgfVxuXG4gIC8vIHVuaWZpZWQncyBhZGRQbHVnaW46IHRoZSBzYW1lIGF0dGFjaGVyIGlzIG9uZSBwbHVnaW4sIGl0cyBvYmplY3Qgb3B0aW9ucyBtZXJnZWRcbiAgI3JlZ2lzdGVyKGF0dGFjaGVyOiBBdHRhY2hlciwgcGFyYW1ldGVyczogdW5rbm93bltdKTogSG9zdEVudHJ5IHtcbiAgICBsZXQgaWQgPSB0aGlzLiNpZHMuZ2V0KGF0dGFjaGVyKVxuICAgIGlmIChpZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZCA9IHRoaXMuI2lkcy5zaXplXG4gICAgICB0aGlzLiNpZHMuc2V0KGF0dGFjaGVyLCBpZClcbiAgICAgIHRoaXMuI2hvc3RzLnNldChpZCwgeyBhdHRhY2hlciwgcGFyYW1ldGVycyB9KVxuICAgICAgcmV0dXJuIFt7IGhvc3Q6IGlkIH0sIHBhcmFtZXRlcnNbMF0gIT09IGZhbHNlXVxuICAgIH1cbiAgICBjb25zdCBob3N0ID0gdGhpcy4jaG9zdHMuZ2V0KGlkKVxuICAgIGlmICghaG9zdCB8fCBwYXJhbWV0ZXJzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIFt7IGhvc3Q6IGlkIH1dXG4gICAgY29uc3QgW3ByaW1hcnksIC4uLnJlc3RdID0gcGFyYW1ldGVyc1xuICAgIGNvbnN0IG1lcmdlZCA9XG4gICAgICBpc1BsYWluT2JqZWN0KGhvc3QucGFyYW1ldGVyc1swXSkgJiYgaXNQbGFpbk9iamVjdChwcmltYXJ5KVxuICAgICAgICA/IG1lcmdlT3B0aW9ucyhob3N0LnBhcmFtZXRlcnNbMF0sIHByaW1hcnkpXG4gICAgICAgIDogcHJpbWFyeVxuICAgIGhvc3QucGFyYW1ldGVycyA9IFttZXJnZWQsIC4uLnJlc3RdXG4gICAgcmV0dXJuIFt7IGhvc3Q6IGlkIH0sIG1lcmdlZCAhPT0gZmFsc2VdXG4gIH1cblxuICAvLyBBdHRhY2hlcnMgcnVuIG9uY2UsIGJlZm9yZSB0aGUgbmF0aXZlIHBpcGVsaW5lIGZyZWV6ZXMsIHNvIHRoZXkgY2FuIHN0aWxsIHNldCBkYXRhO1xuICAvLyB3aGV0aGVyIGFueSBKYXZhU2NyaXB0IHBsdWdpbiBpcyBvbiBkZWNpZGVzIGlmIHJ1bnMgcGF1c2UgZm9yIHRoZW1cbiAgI2F0dGFjaCgpIHtcbiAgICBpZiAoIXRoaXMuI2F0dGFjaGVkKSB7XG4gICAgICB0aGlzLiNhdHRhY2hlZCA9IHRydWVcbiAgICAgIGZvciAoY29uc3QgaWQgb2YgdGhpcy4jbmF0aXZlLmhvc3RzKCkpIHtcbiAgICAgICAgY29uc3QgaG9zdCA9IHRoaXMuI2hvc3RzLmdldChpZClcbiAgICAgICAgaWYgKCFob3N0KSBjb250aW51ZVxuICAgICAgICBjb25zdCBbcHJpbWFyeSwgLi4ucmVzdF0gPSBob3N0LnBhcmFtZXRlcnNcbiAgICAgICAgY29uc3QgcGFyYW1ldGVycyA9IHByaW1hcnkgPT09IHRydWUgPyBbdW5kZWZpbmVkLCAuLi5yZXN0XSA6IGhvc3QucGFyYW1ldGVyc1xuICAgICAgICBjb25zdCB0cmFuc2Zvcm1lcjogdW5rbm93biA9IFJlZmxlY3QuYXBwbHkoaG9zdC5hdHRhY2hlciwgdGhpcywgcGFyYW1ldGVycylcbiAgICAgICAgaWYgKGlzVHJhbnNmb3JtZXIodHJhbnNmb3JtZXIpKSBob3N0LnRyYW5zZm9ybWVyID0gdHJhbnNmb3JtZXJcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuI25hdGl2ZS5ob3N0cygpLmxlbmd0aCA+IDBcbiAgfVxufVxuXG4vLyBBIHBsdWdpbiB3aXRob3V0IHRoZSBtYXJrZXIgaW5mZXJzIGB1bmtub3duYCBmcm9tIHRoZSBvcHRpb25hbCBrZXksIGtlZXBpbmcgdGhlIHRyZWVcbnR5cGUgUGFyc2VkVHJlZTxWYWx1ZSwgQ3VycmVudD4gPVxuICBWYWx1ZSBleHRlbmRzIFBhcnNlcjxpbmZlciBQYXJzZWQ+XG4gICAgPyBQYXJzZWQgZXh0ZW5kcyBVbmlzdE5vZGVcbiAgICAgID8gUGFyc2VkXG4gICAgICA6IEN1cnJlbnRcbiAgICA6IEN1cnJlbnRcblxuZnVuY3Rpb24gcmVhZE5vZGUodGV4dDogc3RyaW5nKSB7XG4gIGNvbnN0IG5vZGU6IE5vZGUgPSBKU09OLnBhcnNlKHRleHQpXG4gIHJldHVybiBub2RlXG59XG5cbmZ1bmN0aW9uIHJlYWRGaWxlKHRleHQ6IHN0cmluZykge1xuICBjb25zdCBmaWxlOiBOYXRpdmVGaWxlID0gSlNPTi5wYXJzZSh0ZXh0KVxuICByZXR1cm4gZmlsZVxufVxuXG5mdW5jdGlvbiByZWFkVmFsdWUoZmlsZTogQ29tcGF0aWJsZSB8IHVuZGVmaW5lZCkge1xuICByZXR1cm4gdHlwZW9mIGZpbGUgPT09IFwic3RyaW5nXCIgPyBmaWxlIDogZmlsZT8udmFsdWVcbn1cblxuZnVuY3Rpb24gcmVhZFBhdGgoZmlsZTogQ29tcGF0aWJsZSB8IHVuZGVmaW5lZCkge1xuICByZXR1cm4gdHlwZW9mIGZpbGUgPT09IFwic3RyaW5nXCIgPyB1bmRlZmluZWQgOiBmaWxlPy5wYXRoXG59XG5cbi8vIFRoZSBjcmF0ZSdzIG1lc3NhZ2VzIHN0YXJ0IHdpdGggdGhlIGhvc3QgZmlsZSdzLCBpbiBvcmRlcjogdGhlIHBsdWdpbnMnIG93biBvYmplY3RzXG4vLyBzdGF5LCBzbyBgZmF0YWxgLCBgdXJsYCBhbmQgYG5vdGVgIHN1cnZpdmU7IG5hdGl2ZSBkYXRhIGZpcnN0LCBwbHVnaW5zJyBkYXRhIG92ZXIgaXRcbmZ1bmN0aW9uIHJlYWRSZXN1bHQobmF0aXZlOiBOYXRpdmVGaWxlLCBkb2N1bWVudDogQ29tcGF0aWJsZSwgaG9zdD86IEhvc3RGaWxlKTogVkZpbGUge1xuICBjb25zdCBwYXRoID0gcmVhZFBhdGgoZG9jdW1lbnQpXG4gIGNvbnN0IGtub3duID0gaG9zdD8ubWVzc2FnZXMgPz8gW11cbiAgY29uc3QgcmVwb3J0ZWQgPSBuYXRpdmUubWVzc2FnZXNcbiAgICAuc2xpY2Uoa25vd24ubGVuZ3RoKVxuICAgIC5tYXAobWVzc2FnZSA9PiBIb3N0TWVzc2FnZS5mcm9tTWVzc2FnZShtZXNzYWdlLCBwYXRoKSlcbiAgY29uc3QgZmlsZTogVkZpbGUgPSB7XG4gICAgdmFsdWU6IG5hdGl2ZS52YWx1ZSxcbiAgICBtZXNzYWdlczogWy4uLmtub3duLCAuLi5yZXBvcnRlZF0sXG4gICAgZGF0YTogeyAuLi5uYXRpdmUuZGF0YSwgLi4uaG9zdD8uZGF0YSB9LFxuICB9XG4gIHJldHVybiBwYXRoID09PSB1bmRlZmluZWQgPyBmaWxlIDogeyAuLi5maWxlLCBwYXRoIH1cbn1cbiJdfQ==
|
package/build/settings.d.ts
CHANGED
|
@@ -5,10 +5,12 @@ export interface Platform {
|
|
|
5
5
|
target: string;
|
|
6
6
|
/** The addon's file name at the package's root. */
|
|
7
7
|
addon: string;
|
|
8
|
+
/** The C library a Linux addon links against; npm skips the package on the other one. */
|
|
9
|
+
libc?: "glibc" | "musl";
|
|
8
10
|
}
|
|
9
11
|
/** The npm package users install; it pulls in the one platform package that matches. */
|
|
10
12
|
export declare const PACKAGE_NAME = "textlane";
|
|
11
13
|
/** An environment variable that points at an addon to load instead of the installed one. */
|
|
12
14
|
export declare const ADDON_ENV = "TEXTLANE_ADDON";
|
|
13
|
-
/** Every published platform, keyed by `${process.platform}-${process.arch}`. */
|
|
15
|
+
/** Every published platform, keyed by `${process.platform}-${process.arch}`, plus `-musl`. */
|
|
14
16
|
export declare const PLATFORMS: Record<string, Platform>;
|
package/build/settings.js
CHANGED
|
@@ -2,16 +2,27 @@
|
|
|
2
2
|
export const PACKAGE_NAME = "textlane";
|
|
3
3
|
/** An environment variable that points at an addon to load instead of the installed one. */
|
|
4
4
|
export const ADDON_ENV = "TEXTLANE_ADDON";
|
|
5
|
-
/** Every published platform, keyed by `${process.platform}-${process.arch}`. */
|
|
5
|
+
/** Every published platform, keyed by `${process.platform}-${process.arch}`, plus `-musl`. */
|
|
6
6
|
export const PLATFORMS = {
|
|
7
7
|
"linux-x64": createPlatform("linux-x64", "x86_64-unknown-linux-gnu"),
|
|
8
8
|
"linux-arm64": createPlatform("linux-arm64", "aarch64-unknown-linux-gnu"),
|
|
9
|
+
"linux-x64-musl": createPlatform("linux-x64-musl", "x86_64-unknown-linux-musl"),
|
|
10
|
+
"linux-arm64-musl": createPlatform("linux-arm64-musl", "aarch64-unknown-linux-musl"),
|
|
9
11
|
"darwin-x64": createPlatform("darwin-x64", "x86_64-apple-darwin"),
|
|
10
12
|
"darwin-arm64": createPlatform("darwin-arm64", "aarch64-apple-darwin"),
|
|
11
13
|
"win32-x64": createPlatform("win32-x64", "x86_64-pc-windows-msvc"),
|
|
12
14
|
"win32-arm64": createPlatform("win32-arm64", "aarch64-pc-windows-msvc"),
|
|
13
15
|
};
|
|
14
16
|
function createPlatform(key, target) {
|
|
15
|
-
|
|
17
|
+
const platform = {
|
|
18
|
+
packageName: `@textlane/${key}`,
|
|
19
|
+
target,
|
|
20
|
+
addon: "textlane.node",
|
|
21
|
+
};
|
|
22
|
+
if (target.endsWith("-linux-gnu"))
|
|
23
|
+
platform.libc = "glibc";
|
|
24
|
+
if (target.endsWith("-linux-musl"))
|
|
25
|
+
platform.libc = "musl";
|
|
26
|
+
return platform;
|
|
16
27
|
}
|
|
17
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
28
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0dGluZ3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zZXR0aW5ncy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFXQSx3RkFBd0Y7QUFDeEYsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLFVBQVUsQ0FBQTtBQUV0Qyw0RkFBNEY7QUFDNUYsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLGdCQUFnQixDQUFBO0FBRXpDLDhGQUE4RjtBQUM5RixNQUFNLENBQUMsTUFBTSxTQUFTLEdBQTZCO0lBQ2pELFdBQVcsRUFBRSxjQUFjLENBQUMsV0FBVyxFQUFFLDBCQUEwQixDQUFDO0lBQ3BFLGFBQWEsRUFBRSxjQUFjLENBQUMsYUFBYSxFQUFFLDJCQUEyQixDQUFDO0lBQ3pFLGdCQUFnQixFQUFFLGNBQWMsQ0FBQyxnQkFBZ0IsRUFBRSwyQkFBMkIsQ0FBQztJQUMvRSxrQkFBa0IsRUFBRSxjQUFjLENBQUMsa0JBQWtCLEVBQUUsNEJBQTRCLENBQUM7SUFDcEYsWUFBWSxFQUFFLGNBQWMsQ0FBQyxZQUFZLEVBQUUscUJBQXFCLENBQUM7SUFDakUsY0FBYyxFQUFFLGNBQWMsQ0FBQyxjQUFjLEVBQUUsc0JBQXNCLENBQUM7SUFDdEUsV0FBVyxFQUFFLGNBQWMsQ0FBQyxXQUFXLEVBQUUsd0JBQXdCLENBQUM7SUFDbEUsYUFBYSxFQUFFLGNBQWMsQ0FBQyxhQUFhLEVBQUUseUJBQXlCLENBQUM7Q0FDeEUsQ0FBQTtBQUVELFNBQVMsY0FBYyxDQUFDLEdBQVcsRUFBRSxNQUFjO0lBQ2pELE1BQU0sUUFBUSxHQUFhO1FBQ3pCLFdBQVcsRUFBRSxhQUFhLEdBQUcsRUFBRTtRQUMvQixNQUFNO1FBQ04sS0FBSyxFQUFFLGVBQWU7S0FDdkIsQ0FBQTtJQUNELElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUM7UUFBRSxRQUFRLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQTtJQUMxRCxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDO1FBQUUsUUFBUSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUE7SUFDMUQsT0FBTyxRQUFRLENBQUE7QUFDakIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBpbnRlcmZhY2UgUGxhdGZvcm0ge1xuICAvKiogVGhlIG5wbSBwYWNrYWdlIHRoYXQgY2FycmllcyB0aGlzIHBsYXRmb3JtJ3MgYWRkb24uICovXG4gIHBhY2thZ2VOYW1lOiBzdHJpbmdcbiAgLyoqIFRoZSBSdXN0IHRhcmdldCB0aGUgYWRkb24gaXMgY29tcGlsZWQgZm9yLiAqL1xuICB0YXJnZXQ6IHN0cmluZ1xuICAvKiogVGhlIGFkZG9uJ3MgZmlsZSBuYW1lIGF0IHRoZSBwYWNrYWdlJ3Mgcm9vdC4gKi9cbiAgYWRkb246IHN0cmluZ1xuICAvKiogVGhlIEMgbGlicmFyeSBhIExpbnV4IGFkZG9uIGxpbmtzIGFnYWluc3Q7IG5wbSBza2lwcyB0aGUgcGFja2FnZSBvbiB0aGUgb3RoZXIgb25lLiAqL1xuICBsaWJjPzogXCJnbGliY1wiIHwgXCJtdXNsXCJcbn1cblxuLyoqIFRoZSBucG0gcGFja2FnZSB1c2VycyBpbnN0YWxsOyBpdCBwdWxscyBpbiB0aGUgb25lIHBsYXRmb3JtIHBhY2thZ2UgdGhhdCBtYXRjaGVzLiAqL1xuZXhwb3J0IGNvbnN0IFBBQ0tBR0VfTkFNRSA9IFwidGV4dGxhbmVcIlxuXG4vKiogQW4gZW52aXJvbm1lbnQgdmFyaWFibGUgdGhhdCBwb2ludHMgYXQgYW4gYWRkb24gdG8gbG9hZCBpbnN0ZWFkIG9mIHRoZSBpbnN0YWxsZWQgb25lLiAqL1xuZXhwb3J0IGNvbnN0IEFERE9OX0VOViA9IFwiVEVYVExBTkVfQURET05cIlxuXG4vKiogRXZlcnkgcHVibGlzaGVkIHBsYXRmb3JtLCBrZXllZCBieSBgJHtwcm9jZXNzLnBsYXRmb3JtfS0ke3Byb2Nlc3MuYXJjaH1gLCBwbHVzIGAtbXVzbGAuICovXG5leHBvcnQgY29uc3QgUExBVEZPUk1TOiBSZWNvcmQ8c3RyaW5nLCBQbGF0Zm9ybT4gPSB7XG4gIFwibGludXgteDY0XCI6IGNyZWF0ZVBsYXRmb3JtKFwibGludXgteDY0XCIsIFwieDg2XzY0LXVua25vd24tbGludXgtZ251XCIpLFxuICBcImxpbnV4LWFybTY0XCI6IGNyZWF0ZVBsYXRmb3JtKFwibGludXgtYXJtNjRcIiwgXCJhYXJjaDY0LXVua25vd24tbGludXgtZ251XCIpLFxuICBcImxpbnV4LXg2NC1tdXNsXCI6IGNyZWF0ZVBsYXRmb3JtKFwibGludXgteDY0LW11c2xcIiwgXCJ4ODZfNjQtdW5rbm93bi1saW51eC1tdXNsXCIpLFxuICBcImxpbnV4LWFybTY0LW11c2xcIjogY3JlYXRlUGxhdGZvcm0oXCJsaW51eC1hcm02NC1tdXNsXCIsIFwiYWFyY2g2NC11bmtub3duLWxpbnV4LW11c2xcIiksXG4gIFwiZGFyd2luLXg2NFwiOiBjcmVhdGVQbGF0Zm9ybShcImRhcndpbi14NjRcIiwgXCJ4ODZfNjQtYXBwbGUtZGFyd2luXCIpLFxuICBcImRhcndpbi1hcm02NFwiOiBjcmVhdGVQbGF0Zm9ybShcImRhcndpbi1hcm02NFwiLCBcImFhcmNoNjQtYXBwbGUtZGFyd2luXCIpLFxuICBcIndpbjMyLXg2NFwiOiBjcmVhdGVQbGF0Zm9ybShcIndpbjMyLXg2NFwiLCBcIng4Nl82NC1wYy13aW5kb3dzLW1zdmNcIiksXG4gIFwid2luMzItYXJtNjRcIjogY3JlYXRlUGxhdGZvcm0oXCJ3aW4zMi1hcm02NFwiLCBcImFhcmNoNjQtcGMtd2luZG93cy1tc3ZjXCIpLFxufVxuXG5mdW5jdGlvbiBjcmVhdGVQbGF0Zm9ybShrZXk6IHN0cmluZywgdGFyZ2V0OiBzdHJpbmcpOiBQbGF0Zm9ybSB7XG4gIGNvbnN0IHBsYXRmb3JtOiBQbGF0Zm9ybSA9IHtcbiAgICBwYWNrYWdlTmFtZTogYEB0ZXh0bGFuZS8ke2tleX1gLFxuICAgIHRhcmdldCxcbiAgICBhZGRvbjogXCJ0ZXh0bGFuZS5ub2RlXCIsXG4gIH1cbiAgaWYgKHRhcmdldC5lbmRzV2l0aChcIi1saW51eC1nbnVcIikpIHBsYXRmb3JtLmxpYmMgPSBcImdsaWJjXCJcbiAgaWYgKHRhcmdldC5lbmRzV2l0aChcIi1saW51eC1tdXNsXCIpKSBwbGF0Zm9ybS5saWJjID0gXCJtdXNsXCJcbiAgcmV0dXJuIHBsYXRmb3JtXG59XG4iXX0=
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "textlane",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.6.0",
|
|
4
4
|
"description": "Rust-native text processing pipeline — a unified replacement with native and JavaScript plugins",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"ast",
|
|
@@ -32,6 +32,7 @@
|
|
|
32
32
|
"./nl": "./build/generated/nl.js"
|
|
33
33
|
},
|
|
34
34
|
"dependencies": {
|
|
35
|
+
"@types/estree-jsx": "^1.0.5",
|
|
35
36
|
"@types/hast": "^3.0.5",
|
|
36
37
|
"@types/mdast": "^4.0.4",
|
|
37
38
|
"@types/nlcst": "^2.0.3",
|
|
@@ -41,11 +42,13 @@
|
|
|
41
42
|
"node": ">=20"
|
|
42
43
|
},
|
|
43
44
|
"optionalDependencies": {
|
|
44
|
-
"@textlane/linux-x64": "0.
|
|
45
|
-
"@textlane/linux-arm64": "0.
|
|
46
|
-
"@textlane/
|
|
47
|
-
"@textlane/
|
|
48
|
-
"@textlane/
|
|
49
|
-
"@textlane/
|
|
45
|
+
"@textlane/linux-x64": "0.6.0",
|
|
46
|
+
"@textlane/linux-arm64": "0.6.0",
|
|
47
|
+
"@textlane/linux-x64-musl": "0.6.0",
|
|
48
|
+
"@textlane/linux-arm64-musl": "0.6.0",
|
|
49
|
+
"@textlane/darwin-x64": "0.6.0",
|
|
50
|
+
"@textlane/darwin-arm64": "0.6.0",
|
|
51
|
+
"@textlane/win32-x64": "0.6.0",
|
|
52
|
+
"@textlane/win32-arm64": "0.6.0"
|
|
50
53
|
}
|
|
51
54
|
}
|
|
@@ -59,7 +59,7 @@ const file = await textlane()
|
|
|
59
59
|
.use(html.stringify({ allowDangerousHtml: true }))
|
|
60
60
|
.process("# hi")
|
|
61
61
|
file.value // "<h1>hi</h1>"
|
|
62
|
-
file.messages //
|
|
62
|
+
file.messages // vfile-messages: reason, ruleId, source, place, line, column, fatal
|
|
63
63
|
```
|
|
64
64
|
|
|
65
65
|
A domain function returns a descriptor, `{ name: "md.toHtml", options }`, typed from the
|
|
@@ -68,7 +68,10 @@ crate. The processor follows unified: `use(plugin | [plugin, options] | preset |
|
|
|
68
68
|
`runSync(tree, file?)`, `stringify(tree)`, `process(text)` (Promise) and `processSync(text)`.
|
|
69
69
|
Trees are plain unist JSON objects: after `use(md.parse())`, `html.parse()` or `nl.parse()`,
|
|
70
70
|
`parse` is typed as `@types/mdast`, `hast` or `nlcst`'s `Root`, and `run` and `stringify` take
|
|
71
|
-
any unist node, so no cast is needed between them and unified utilities.
|
|
71
|
+
any unist node, so no cast is needed between them and unified utilities. Name node types
|
|
72
|
+
through `import type { mdast, hast, nlcst, unist, estree } from "textlane"` rather than
|
|
73
|
+
installing `@types/*`: `mdast.RootContent` there already includes MDX, directive, math,
|
|
74
|
+
definition-list and TOML nodes. Without
|
|
72
75
|
JavaScript plugins, `process` runs off the main thread: process many documents with
|
|
73
76
|
`Promise.all` over one frozen processor, not one by one.
|
|
74
77
|
|
|
@@ -91,7 +94,11 @@ file["value"] # "<h1>hi</h1>"
|
|
|
91
94
|
Functions are snake_case (`md.to_html`, `nl.indefinite_article`); their options stay the
|
|
92
95
|
camelCase keys the plugin takes, typed as `TypedDict`s. `process(text)` and `run(tree)`
|
|
93
96
|
return directly; `await processor.aprocess(text)` and `await processor.arun(tree)` are their
|
|
94
|
-
coroutines. A file and a tree are dicts
|
|
97
|
+
coroutines. A file and a tree are dicts: after `use(md.parse())`, `html.parse()` or
|
|
98
|
+
`nl.parse()`, `parse` is typed as the `Root` of `textlane.mdast`, `textlane.hast` or
|
|
99
|
+
`textlane.nlcst`, `TypedDict`s named as `@types/mdast`, `hast` and `nlcst` name them (MDX's
|
|
100
|
+
`data.estree` as `textlane.estree.Program`); narrow by comparing `node["type"]`, since a
|
|
101
|
+
checker does not narrow on `"key" in node`. Without Python plugins, `process` releases the GIL:
|
|
95
102
|
process many documents through one frozen processor from a thread pool, or `asyncio.gather`
|
|
96
103
|
their `aprocess` calls.
|
|
97
104
|
|
|
@@ -152,5 +159,14 @@ the case: `unknown-plugin`, `invalid-options`, `missing-parser`, `missing-compil
|
|
|
152
159
|
page whose title renders separately needs.
|
|
153
160
|
- Asset and page URLs relative to a Markdown file are `md.pathRewrite({ root, base, pages,
|
|
154
161
|
markdownLinks })`; pass the document as `{ value, path }` so it knows where the file lives.
|
|
162
|
+
`html.pathRewrite({ root, base, pages, attributes })` does the same for HTML attributes
|
|
163
|
+
(`href`, `src`, `srcset`, `poster`).
|
|
164
|
+
- For a site that ends in HTML, not MDX: `md.component` rules may name `component: "x-{name}"`
|
|
165
|
+
(one rule per family of directives) and `unknownDirectives: "error"` fails on a mistyped
|
|
166
|
+
`:::name` while prose like `a:b` stays text; `md.toHtml({ jsxElements: true })` then writes
|
|
167
|
+
the elements `md.component` and `md.packageCommand` make as plain HTML.
|
|
168
|
+
- HTML written by hand gets what Markdown syntax gives: `html.math` (`$…$` in text, for
|
|
169
|
+
`html.katex`), `html.linkify` (bare URLs and emails) and `html.gemoji` (`:rocket:`), each
|
|
170
|
+
leaving links, code and the elements `ignore` names alone.
|
|
155
171
|
- remark-stringify reads `settings` from processor data; textlane's `md.stringify` takes its
|
|
156
172
|
options directly.
|