@mnaoumov/typescript-lib 0.0.0 → 1.0.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/@types/debug/package.json +4 -0
- package/LICENSE +21 -0
- package/README.md +7 -1
- package/dist/lib/cjs/@types/debug.d.cts +21 -0
- package/dist/lib/cjs/abort-controller.cjs +202 -0
- package/dist/lib/cjs/abort-controller.d.cts +135 -0
- package/dist/lib/cjs/aggregate-error.cjs +98 -0
- package/dist/lib/cjs/aggregate-error.d.cts +24 -0
- package/dist/lib/cjs/array-buffer.cjs +96 -0
- package/dist/lib/cjs/array-buffer.d.cts +16 -0
- package/dist/lib/cjs/array.cjs +134 -0
- package/dist/lib/cjs/array.d.cts +46 -0
- package/dist/lib/cjs/async-events.cjs +466 -0
- package/dist/lib/cjs/async-events.d.cts +456 -0
- package/dist/lib/cjs/async-operation-hook.cjs +113 -0
- package/dist/lib/cjs/async-operation-hook.d.cts +59 -0
- package/dist/lib/cjs/async.cjs +521 -0
- package/dist/lib/cjs/async.d.cts +414 -0
- package/dist/lib/cjs/beeper.cjs +126 -0
- package/dist/lib/cjs/beeper.d.cts +21 -0
- package/dist/lib/cjs/blob.cjs +160 -0
- package/dist/lib/cjs/blob.d.cts +59 -0
- package/dist/lib/cjs/bytes.cjs +114 -0
- package/dist/lib/cjs/bytes.d.cts +17 -0
- package/dist/lib/cjs/debug-controller.cjs +80 -0
- package/dist/lib/cjs/debug-controller.d.cts +87 -0
- package/dist/lib/cjs/debug.cjs +235 -0
- package/dist/lib/cjs/debug.d.cts +66 -0
- package/dist/lib/cjs/desktop-zip-extractor.cjs +215 -0
- package/dist/lib/cjs/desktop-zip-extractor.d.cts +95 -0
- package/dist/lib/cjs/disposable.cjs +414 -0
- package/dist/lib/cjs/disposable.d.cts +387 -0
- package/dist/lib/cjs/enum.cjs +100 -0
- package/dist/lib/cjs/enum.d.cts +24 -0
- package/dist/lib/cjs/error.cjs +297 -0
- package/dist/lib/cjs/error.d.cts +181 -0
- package/dist/lib/cjs/function.cjs +141 -0
- package/dist/lib/cjs/function.d.cts +128 -0
- package/dist/lib/cjs/html-element.cjs +341 -0
- package/dist/lib/cjs/html-element.d.cts +199 -0
- package/dist/lib/cjs/index.cjs +195 -0
- package/dist/lib/cjs/index.d.cts +33 -0
- package/dist/lib/cjs/jpeg-metadata.cjs +228 -0
- package/dist/lib/cjs/jpeg-metadata.d.cts +42 -0
- package/dist/lib/cjs/library.cjs +158 -0
- package/dist/lib/cjs/library.d.cts +96 -0
- package/dist/lib/cjs/object-utils.cjs +617 -0
- package/dist/lib/cjs/object-utils.d.cts +298 -0
- package/dist/lib/cjs/path.cjs +202 -0
- package/dist/lib/cjs/path.d.cts +154 -0
- package/dist/lib/cjs/reg-exp.cjs +254 -0
- package/dist/lib/cjs/reg-exp.d.cts +87 -0
- package/dist/lib/cjs/string.cjs +326 -0
- package/dist/lib/cjs/string.d.cts +361 -0
- package/dist/lib/cjs/transformers/date-transformer.cjs +129 -0
- package/dist/lib/cjs/transformers/date-transformer.d.cts +39 -0
- package/dist/lib/cjs/transformers/group-transformer.cjs +173 -0
- package/dist/lib/cjs/transformers/group-transformer.d.cts +70 -0
- package/dist/lib/cjs/transformers/index.cjs +123 -0
- package/dist/lib/cjs/transformers/index.d.cts +9 -0
- package/dist/lib/cjs/transformers/map-transformer.cjs +129 -0
- package/dist/lib/cjs/transformers/map-transformer.d.cts +41 -0
- package/dist/lib/cjs/transformers/set-transformer.cjs +129 -0
- package/dist/lib/cjs/transformers/set-transformer.d.cts +39 -0
- package/dist/lib/cjs/transformers/skip-private-property-transformer.cjs +127 -0
- package/dist/lib/cjs/transformers/skip-private-property-transformer.d.cts +36 -0
- package/dist/lib/cjs/transformers/transformer.cjs +170 -0
- package/dist/lib/cjs/transformers/transformer.d.cts +70 -0
- package/dist/lib/cjs/transformers/two-way-map-transformer.cjs +130 -0
- package/dist/lib/cjs/transformers/two-way-map-transformer.d.cts +42 -0
- package/dist/lib/cjs/transformers/typed-transformer.cjs +94 -0
- package/dist/lib/cjs/transformers/typed-transformer.d.cts +39 -0
- package/dist/lib/cjs/two-way-map.cjs +208 -0
- package/dist/lib/cjs/two-way-map.d.cts +101 -0
- package/dist/lib/cjs/type-guards.cjs +128 -0
- package/dist/lib/cjs/type-guards.d.cts +84 -0
- package/dist/lib/cjs/type.cjs +121 -0
- package/dist/lib/cjs/type.d.cts +122 -0
- package/dist/lib/cjs/typescript-lib-state.cjs +126 -0
- package/dist/lib/cjs/typescript-lib-state.d.cts +56 -0
- package/dist/lib/cjs/url.cjs +136 -0
- package/dist/lib/cjs/url.d.cts +74 -0
- package/dist/lib/cjs/value-provider.cjs +100 -0
- package/dist/lib/cjs/value-provider.d.cts +28 -0
- package/dist/lib/cjs/value-wrapper.cjs +144 -0
- package/dist/lib/cjs/value-wrapper.d.cts +47 -0
- package/dist/lib/esm/@types/debug.d.mts +21 -0
- package/dist/lib/esm/abort-controller.d.mts +135 -0
- package/dist/lib/esm/abort-controller.mjs +159 -0
- package/dist/lib/esm/aggregate-error.d.mts +24 -0
- package/dist/lib/esm/aggregate-error.mjs +60 -0
- package/dist/lib/esm/array-buffer.d.mts +16 -0
- package/dist/lib/esm/array-buffer.mjs +58 -0
- package/dist/lib/esm/array.d.mts +46 -0
- package/dist/lib/esm/array.mjs +93 -0
- package/dist/lib/esm/async-events.d.mts +456 -0
- package/dist/lib/esm/async-events.mjs +427 -0
- package/dist/lib/esm/async-operation-hook.d.mts +59 -0
- package/dist/lib/esm/async-operation-hook.mjs +71 -0
- package/dist/lib/esm/async.d.mts +414 -0
- package/dist/lib/esm/async.mjs +479 -0
- package/dist/lib/esm/beeper.d.mts +21 -0
- package/dist/lib/esm/beeper.mjs +88 -0
- package/dist/lib/esm/blob.d.mts +59 -0
- package/dist/lib/esm/blob.mjs +121 -0
- package/dist/lib/esm/bytes.d.mts +17 -0
- package/dist/lib/esm/bytes.mjs +76 -0
- package/dist/lib/esm/debug-controller.d.mts +87 -0
- package/dist/lib/esm/debug-controller.mjs +50 -0
- package/dist/lib/esm/debug.d.mts +66 -0
- package/dist/lib/esm/debug.mjs +185 -0
- package/dist/lib/esm/desktop-zip-extractor.d.mts +95 -0
- package/dist/lib/esm/desktop-zip-extractor.mjs +180 -0
- package/dist/lib/esm/disposable.d.mts +387 -0
- package/dist/lib/esm/disposable.mjs +360 -0
- package/dist/lib/esm/enum.d.mts +24 -0
- package/dist/lib/esm/enum.mjs +61 -0
- package/dist/lib/esm/error.d.mts +181 -0
- package/dist/lib/esm/error.mjs +248 -0
- package/dist/lib/esm/function.d.mts +128 -0
- package/dist/lib/esm/function.mjs +96 -0
- package/dist/lib/esm/html-element.d.mts +199 -0
- package/dist/lib/esm/html-element.mjs +291 -0
- package/dist/lib/esm/index.d.mts +33 -0
- package/dist/lib/esm/index.mjs +116 -0
- package/dist/lib/esm/jpeg-metadata.d.mts +42 -0
- package/dist/lib/esm/jpeg-metadata.mjs +189 -0
- package/dist/lib/esm/library.d.mts +96 -0
- package/dist/lib/esm/library.mjs +118 -0
- package/dist/lib/esm/object-utils.d.mts +298 -0
- package/dist/lib/esm/object-utils.mjs +567 -0
- package/dist/lib/esm/path.d.mts +154 -0
- package/dist/lib/esm/path.mjs +139 -0
- package/dist/lib/esm/reg-exp.d.mts +87 -0
- package/dist/lib/esm/reg-exp.mjs +213 -0
- package/dist/lib/esm/string.d.mts +361 -0
- package/dist/lib/esm/string.mjs +274 -0
- package/dist/lib/esm/transformers/date-transformer.d.mts +39 -0
- package/dist/lib/esm/transformers/date-transformer.mjs +91 -0
- package/dist/lib/esm/transformers/group-transformer.d.mts +70 -0
- package/dist/lib/esm/transformers/group-transformer.mjs +138 -0
- package/dist/lib/esm/transformers/index.d.mts +9 -0
- package/dist/lib/esm/transformers/index.mjs +68 -0
- package/dist/lib/esm/transformers/map-transformer.d.mts +41 -0
- package/dist/lib/esm/transformers/map-transformer.mjs +91 -0
- package/dist/lib/esm/transformers/set-transformer.d.mts +39 -0
- package/dist/lib/esm/transformers/set-transformer.mjs +91 -0
- package/dist/lib/esm/transformers/skip-private-property-transformer.d.mts +36 -0
- package/dist/lib/esm/transformers/skip-private-property-transformer.mjs +89 -0
- package/dist/lib/esm/transformers/transformer.d.mts +70 -0
- package/dist/lib/esm/transformers/transformer.mjs +132 -0
- package/dist/lib/esm/transformers/two-way-map-transformer.d.mts +42 -0
- package/dist/lib/esm/transformers/two-way-map-transformer.mjs +92 -0
- package/dist/lib/esm/transformers/typed-transformer.d.mts +39 -0
- package/dist/lib/esm/transformers/typed-transformer.mjs +56 -0
- package/dist/lib/esm/two-way-map.d.mts +101 -0
- package/dist/lib/esm/two-way-map.mjs +170 -0
- package/dist/lib/esm/type-guards.d.mts +84 -0
- package/dist/lib/esm/type-guards.mjs +85 -0
- package/dist/lib/esm/type.d.mts +122 -0
- package/dist/lib/esm/type.mjs +83 -0
- package/dist/lib/esm/typescript-lib-state.d.mts +56 -0
- package/dist/lib/esm/typescript-lib-state.mjs +84 -0
- package/dist/lib/esm/url.d.mts +74 -0
- package/dist/lib/esm/url.mjs +94 -0
- package/dist/lib/esm/value-provider.d.mts +28 -0
- package/dist/lib/esm/value-provider.mjs +62 -0
- package/dist/lib/esm/value-wrapper.d.mts +47 -0
- package/dist/lib/esm/value-wrapper.mjs +106 -0
- package/package.json +111 -13
- package/transformers/date-transformer/package.json +6 -0
- package/transformers/group-transformer/package.json +6 -0
- package/transformers/index/package.json +6 -0
- package/transformers/map-transformer/package.json +6 -0
- package/transformers/package.json +6 -0
- package/transformers/set-transformer/package.json +6 -0
- package/transformers/skip-private-property-transformer/package.json +6 -0
- package/transformers/transformer/package.json +6 -0
- package/transformers/two-way-map-transformer/package.json +6 -0
- package/transformers/typed-transformer/package.json +6 -0
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
/// <reference path="./library.d.mts" />
|
|
2
|
+
/**
|
|
3
|
+
* @file
|
|
4
|
+
*
|
|
5
|
+
* Contains utility functions for handling paths.
|
|
6
|
+
*/
|
|
7
|
+
import pathBrowserify from 'path-browserify';
|
|
8
|
+
/**
|
|
9
|
+
* Provides methods for handling POSIX paths.
|
|
10
|
+
*/
|
|
11
|
+
export declare const posix: pathBrowserify.Path;
|
|
12
|
+
/**
|
|
13
|
+
* A POSIX path delimiter.
|
|
14
|
+
*/
|
|
15
|
+
export declare const delimiter: string;
|
|
16
|
+
/**
|
|
17
|
+
* A POSIX segment separator.
|
|
18
|
+
*/
|
|
19
|
+
export declare const separator: string;
|
|
20
|
+
/**
|
|
21
|
+
* Returns the base name of a file, optionally removing the file extension.
|
|
22
|
+
*
|
|
23
|
+
* @param path - The path to get the base name from.
|
|
24
|
+
* @param ext - An optional extension to remove from the base name.
|
|
25
|
+
* @returns The base name of the file.
|
|
26
|
+
*/
|
|
27
|
+
export declare const basename: (this: void, path: string, ext?: string) => string;
|
|
28
|
+
/**
|
|
29
|
+
* Returns the directory name of a path.
|
|
30
|
+
*
|
|
31
|
+
* `directory` is used instead of `folder` to preserve compatibility with `node:path` module.
|
|
32
|
+
*
|
|
33
|
+
* @param path - The path to get the directory name from.
|
|
34
|
+
* @returns The directory name of the path.
|
|
35
|
+
*/
|
|
36
|
+
export declare const dirname: (this: void, path: string) => string;
|
|
37
|
+
/**
|
|
38
|
+
* Returns the file extension of a path.
|
|
39
|
+
*
|
|
40
|
+
* @param path - The path to get the extension from.
|
|
41
|
+
* @returns The file extension of the path.
|
|
42
|
+
*/
|
|
43
|
+
export declare const extname: (this: void, path: string) => string;
|
|
44
|
+
/**
|
|
45
|
+
* Formats a path object into a path string.
|
|
46
|
+
*
|
|
47
|
+
* @param pathObject - The path object to format.
|
|
48
|
+
* @returns The formatted path string.
|
|
49
|
+
*/
|
|
50
|
+
export declare const format: (this: void, pathObject: Partial<pathBrowserify.PathObject>) => string;
|
|
51
|
+
/**
|
|
52
|
+
* Determines if a path is absolute.
|
|
53
|
+
*
|
|
54
|
+
* @param path - The path to check.
|
|
55
|
+
* @returns `true` if the path is absolute, `false` otherwise.
|
|
56
|
+
*/
|
|
57
|
+
export declare function isAbsolute(path: string): boolean;
|
|
58
|
+
/**
|
|
59
|
+
* Joins multiple path segments into a single path.
|
|
60
|
+
*
|
|
61
|
+
* @param paths - The path segments to join.
|
|
62
|
+
* @returns The joined path.
|
|
63
|
+
*/
|
|
64
|
+
export declare const join: (this: void, ...paths: string[]) => string;
|
|
65
|
+
/**
|
|
66
|
+
* Normalizes a path, resolving '..' and '.' segments.
|
|
67
|
+
*
|
|
68
|
+
* @param path - The path to normalize.
|
|
69
|
+
* @returns The normalized path.
|
|
70
|
+
*/
|
|
71
|
+
export declare const normalizePath: (this: void, path: string) => string;
|
|
72
|
+
/**
|
|
73
|
+
* Parses a path string into a path object.
|
|
74
|
+
*
|
|
75
|
+
* @param path - The path string to parse.
|
|
76
|
+
* @returns The parsed path object.
|
|
77
|
+
*/
|
|
78
|
+
export declare const parse: (this: void, path: string) => pathBrowserify.PathObject;
|
|
79
|
+
/**
|
|
80
|
+
* Parameters for {@link makeFileName}.
|
|
81
|
+
*/
|
|
82
|
+
export interface MakeFileNameParams {
|
|
83
|
+
/**
|
|
84
|
+
* The file name to append the extension to.
|
|
85
|
+
*/
|
|
86
|
+
readonly fileBaseName: string;
|
|
87
|
+
/**
|
|
88
|
+
* The extension to append to the file name.
|
|
89
|
+
*/
|
|
90
|
+
readonly fileExtension: string;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Gets the file name from the `import(dot)meta(dot)url`, converting it to a POSIX-style path.
|
|
94
|
+
*
|
|
95
|
+
* @param importMetaUrl - The `import(dot)meta(dot)url` from which to extract the file name.
|
|
96
|
+
* @returns The POSIX-style file name.
|
|
97
|
+
*/
|
|
98
|
+
export declare function getFileName(importMetaUrl: string): string;
|
|
99
|
+
/**
|
|
100
|
+
* Gets the folder name from the `import(dot)meta(dot)url`, converting it to a POSIX-style path.
|
|
101
|
+
*
|
|
102
|
+
* @param importMetaUrl - The `import(dot)meta(dot)url` from which to extract the folder name.
|
|
103
|
+
* @returns The POSIX-style folder name.
|
|
104
|
+
*/
|
|
105
|
+
export declare function getFolderName(importMetaUrl: string): string;
|
|
106
|
+
/**
|
|
107
|
+
* Makes a file name by appending an extension to a given file name.
|
|
108
|
+
* If the extension is empty, the file name is returned as is.
|
|
109
|
+
*
|
|
110
|
+
* @param params - The parameters for making the file name.
|
|
111
|
+
* @returns The file name with the extension appended.
|
|
112
|
+
*/
|
|
113
|
+
export declare function makeFileName(params: MakeFileNameParams): string;
|
|
114
|
+
/**
|
|
115
|
+
* Normalizes a given path by ensuring it is relative, adding "./" if necessary.
|
|
116
|
+
*
|
|
117
|
+
* @param path - The path to normalize.
|
|
118
|
+
* @returns The normalized path, starting with "./" if it was relative.
|
|
119
|
+
*/
|
|
120
|
+
export declare function normalizeIfRelative(path: string): string;
|
|
121
|
+
/**
|
|
122
|
+
* Returns the relative path from one path to another.
|
|
123
|
+
*
|
|
124
|
+
* `path-browserify`'s own `relative` cannot be used directly: it resolves a relative argument against
|
|
125
|
+
* `process.cwd()`, which on Windows is `F:\...` rather than a POSIX absolute path, and its slicing then assumes a
|
|
126
|
+
* leading `/` - so `relative('src', '../x')` came back as `'../..x'`. Both arguments are resolved through
|
|
127
|
+
* {@link resolve} here instead, and rooted at `/` before the POSIX comparison.
|
|
128
|
+
*
|
|
129
|
+
* @param from - The starting path.
|
|
130
|
+
* @param to - The destination path.
|
|
131
|
+
* @returns The relative path from `from` to `to`.
|
|
132
|
+
*/
|
|
133
|
+
export declare function relative(from: string, to: string): string;
|
|
134
|
+
/**
|
|
135
|
+
* Resolves a sequence of paths or path segments into an absolute path.
|
|
136
|
+
*
|
|
137
|
+
* @param pathSegments - The sequence of path segments to resolve.
|
|
138
|
+
* @returns The resolved absolute path.
|
|
139
|
+
*/
|
|
140
|
+
export declare function resolve(...pathSegments: string[]): string;
|
|
141
|
+
/**
|
|
142
|
+
* Converts a buffer containing a path to a POSIX-style buffer by replacing backslashes with forward slashes.
|
|
143
|
+
*
|
|
144
|
+
* @param buffer - The buffer to convert.
|
|
145
|
+
* @returns A new buffer containing the POSIX-style path.
|
|
146
|
+
*/
|
|
147
|
+
export declare function toPosixBuffer(buffer: Buffer): Buffer;
|
|
148
|
+
/**
|
|
149
|
+
* Converts a given path to a POSIX-style path by replacing backslashes with forward slashes.
|
|
150
|
+
*
|
|
151
|
+
* @param path - The path to convert.
|
|
152
|
+
* @returns The POSIX-style path.
|
|
153
|
+
*/
|
|
154
|
+
export declare function toPosixPath(path: string): string;
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
/*
|
|
2
|
+
THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
|
|
3
|
+
if you want to view the source, please visit the github repository of this plugin
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
(function () {
|
|
7
|
+
function ensureDisposeSymbols(symbolConstructor = Symbol) {
|
|
8
|
+
symbolConstructor.asyncDispose ??= symbolConstructor.for('Symbol.asyncDispose');
|
|
9
|
+
symbolConstructor.dispose ??= symbolConstructor.for('Symbol.dispose');
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
function ensureBrowserProcess() {
|
|
13
|
+
const browserProcess = {
|
|
14
|
+
browser: true,
|
|
15
|
+
cwd() {
|
|
16
|
+
return '/';
|
|
17
|
+
},
|
|
18
|
+
env: {},
|
|
19
|
+
platform: 'android'
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
// eslint-disable-next-line obsidianmd/no-global-this, unicorn/no-unnecessary-global-this -- Must stay `globalThis`-qualified: in the emitted banner a bare `process` is a free identifier, so reading it where the host has none throws a ReferenceError instead of yielding `undefined`. That is the very case this function exists to handle.
|
|
23
|
+
const existingProcess = globalThis.process;
|
|
24
|
+
|
|
25
|
+
if (!existingProcess) {
|
|
26
|
+
// eslint-disable-next-line obsidianmd/no-global-this -- Actively use globalThis.
|
|
27
|
+
globalThis.process = browserProcess;
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
if (existingProcess.versions?.node) {
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
const existingProcessRecord = existingProcess;
|
|
36
|
+
|
|
37
|
+
for (const [key, value] of Object.entries(browserProcess)) {
|
|
38
|
+
existingProcessRecord[key] ??= value;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
existingProcessRecord['browser'] = true;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
(function initEsm() {
|
|
45
|
+
ensureDisposeSymbols();
|
|
46
|
+
ensureBrowserProcess();
|
|
47
|
+
})();
|
|
48
|
+
})();
|
|
49
|
+
|
|
50
|
+
import pathBrowserify from "path-browserify";
|
|
51
|
+
import {
|
|
52
|
+
ensureStartsWith,
|
|
53
|
+
replaceAll
|
|
54
|
+
} from "./string.mjs";
|
|
55
|
+
const WINDOWS_DRIVE_REG_EXP = /^[a-zA-Z]:\//;
|
|
56
|
+
const WINDOWS_POSIX_LIKE_PATH_REG_EXP = /[a-zA-Z]:\/[^:]*$/;
|
|
57
|
+
const posix = pathBrowserify.posix;
|
|
58
|
+
const delimiter = posix.delimiter;
|
|
59
|
+
const separator = pathBrowserify.posix.sep;
|
|
60
|
+
const basename = posix.basename;
|
|
61
|
+
const dirname = posix.dirname;
|
|
62
|
+
const extname = posix.extname;
|
|
63
|
+
const format = posix.format;
|
|
64
|
+
function isAbsolute(path) {
|
|
65
|
+
return posix.isAbsolute(path) || WINDOWS_POSIX_LIKE_PATH_REG_EXP.exec(path)?.[0] === path;
|
|
66
|
+
}
|
|
67
|
+
const join = posix.join;
|
|
68
|
+
const normalizePath = posix.normalize;
|
|
69
|
+
const parse = posix.parse;
|
|
70
|
+
function getFileName(importMetaUrl) {
|
|
71
|
+
return resolve(decodeURI(new URL(importMetaUrl).pathname));
|
|
72
|
+
}
|
|
73
|
+
function getFolderName(importMetaUrl) {
|
|
74
|
+
return dirname(getFileName(importMetaUrl));
|
|
75
|
+
}
|
|
76
|
+
function makeFileName(params) {
|
|
77
|
+
return params.fileExtension ? `${params.fileBaseName}.${params.fileExtension}` : params.fileBaseName;
|
|
78
|
+
}
|
|
79
|
+
function normalizeIfRelative(path) {
|
|
80
|
+
return path.startsWith("/") || path.includes(":") ? path : ensureStartsWith({
|
|
81
|
+
$string: path,
|
|
82
|
+
prefix: "./"
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
function relative(from, to) {
|
|
86
|
+
const resolvedFrom = resolve(from);
|
|
87
|
+
const resolvedTo = resolve(to);
|
|
88
|
+
const fromDrive = WINDOWS_DRIVE_REG_EXP.exec(resolvedFrom)?.[0].toUpperCase();
|
|
89
|
+
const toDrive = WINDOWS_DRIVE_REG_EXP.exec(resolvedTo)?.[0].toUpperCase();
|
|
90
|
+
return fromDrive === toDrive ? posix.relative(toRootedPosixPath(upperCaseDrive(resolvedFrom)), toRootedPosixPath(upperCaseDrive(resolvedTo))) : resolvedTo;
|
|
91
|
+
}
|
|
92
|
+
function resolve(...pathSegments) {
|
|
93
|
+
const rootedSegments = pathSegments.map((segment) => toRootedPosixPath(segment));
|
|
94
|
+
if (rootedSegments.every((segment) => !segment.startsWith("/"))) {
|
|
95
|
+
rootedSegments.unshift(toRootedPosixPath(process.cwd()));
|
|
96
|
+
}
|
|
97
|
+
const path = posix.resolve(...rootedSegments);
|
|
98
|
+
const match = WINDOWS_POSIX_LIKE_PATH_REG_EXP.exec(path);
|
|
99
|
+
return match?.[0] ?? path;
|
|
100
|
+
}
|
|
101
|
+
function toPosixBuffer(buffer) {
|
|
102
|
+
return Buffer.from(toPosixPath(String(buffer)));
|
|
103
|
+
}
|
|
104
|
+
function toPosixPath(path) {
|
|
105
|
+
return replaceAll({
|
|
106
|
+
$string: path,
|
|
107
|
+
replacer: "/",
|
|
108
|
+
searchValue: "\\"
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
function toRootedPosixPath(path) {
|
|
112
|
+
const posixPath = toPosixPath(path);
|
|
113
|
+
return WINDOWS_DRIVE_REG_EXP.test(posixPath) ? `/${posixPath}` : posixPath;
|
|
114
|
+
}
|
|
115
|
+
function upperCaseDrive(path) {
|
|
116
|
+
return path.replace(WINDOWS_DRIVE_REG_EXP, (drive) => drive.toUpperCase());
|
|
117
|
+
}
|
|
118
|
+
export {
|
|
119
|
+
basename,
|
|
120
|
+
delimiter,
|
|
121
|
+
dirname,
|
|
122
|
+
extname,
|
|
123
|
+
format,
|
|
124
|
+
getFileName,
|
|
125
|
+
getFolderName,
|
|
126
|
+
isAbsolute,
|
|
127
|
+
join,
|
|
128
|
+
makeFileName,
|
|
129
|
+
normalizeIfRelative,
|
|
130
|
+
normalizePath,
|
|
131
|
+
parse,
|
|
132
|
+
posix,
|
|
133
|
+
relative,
|
|
134
|
+
resolve,
|
|
135
|
+
separator,
|
|
136
|
+
toPosixBuffer,
|
|
137
|
+
toPosixPath
|
|
138
|
+
};
|
|
139
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL3BhdGgudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBDb250YWlucyB1dGlsaXR5IGZ1bmN0aW9ucyBmb3IgaGFuZGxpbmcgcGF0aHMuXG4gKi9cblxuaW1wb3J0IHBhdGhCcm93c2VyaWZ5IGZyb20gJ3BhdGgtYnJvd3NlcmlmeSc7XG5cbmltcG9ydCB7XG4gIGVuc3VyZVN0YXJ0c1dpdGgsXG4gIHJlcGxhY2VBbGxcbn0gZnJvbSAnLi9zdHJpbmcudHMnO1xuXG5jb25zdCBXSU5ET1dTX0RSSVZFX1JFR19FWFAgPSAvXlthLXpBLVpdOlxcLy87XG5jb25zdCBXSU5ET1dTX1BPU0lYX0xJS0VfUEFUSF9SRUdfRVhQID0gL1thLXpBLVpdOlxcL1teOl0qJC87XG5cbi8qKlxuICogUHJvdmlkZXMgbWV0aG9kcyBmb3IgaGFuZGxpbmcgUE9TSVggcGF0aHMuXG4gKi9cbmV4cG9ydCBjb25zdCBwb3NpeCA9IHBhdGhCcm93c2VyaWZ5LnBvc2l4O1xuXG4vKipcbiAqIEEgUE9TSVggcGF0aCBkZWxpbWl0ZXIuXG4gKi9cbmV4cG9ydCBjb25zdCBkZWxpbWl0ZXIgPSBwb3NpeC5kZWxpbWl0ZXI7XG5cbi8qKlxuICogQSBQT1NJWCBzZWdtZW50IHNlcGFyYXRvci5cbiAqL1xuZXhwb3J0IGNvbnN0IHNlcGFyYXRvciA9IHBhdGhCcm93c2VyaWZ5LnBvc2l4LnNlcDtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBiYXNlIG5hbWUgb2YgYSBmaWxlLCBvcHRpb25hbGx5IHJlbW92aW5nIHRoZSBmaWxlIGV4dGVuc2lvbi5cbiAqXG4gKiBAcGFyYW0gcGF0aCAtIFRoZSBwYXRoIHRvIGdldCB0aGUgYmFzZSBuYW1lIGZyb20uXG4gKiBAcGFyYW0gZXh0IC0gQW4gb3B0aW9uYWwgZXh0ZW5zaW9uIHRvIHJlbW92ZSBmcm9tIHRoZSBiYXNlIG5hbWUuXG4gKiBAcmV0dXJucyBUaGUgYmFzZSBuYW1lIG9mIHRoZSBmaWxlLlxuICovXG5leHBvcnQgY29uc3QgYmFzZW5hbWUgPSBwb3NpeC5iYXNlbmFtZTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBkaXJlY3RvcnkgbmFtZSBvZiBhIHBhdGguXG4gKlxuICogYGRpcmVjdG9yeWAgaXMgdXNlZCBpbnN0ZWFkIG9mIGBmb2xkZXJgIHRvIHByZXNlcnZlIGNvbXBhdGliaWxpdHkgd2l0aCBgbm9kZTpwYXRoYCBtb2R1bGUuXG4gKlxuICogQHBhcmFtIHBhdGggLSBUaGUgcGF0aCB0byBnZXQgdGhlIGRpcmVjdG9yeSBuYW1lIGZyb20uXG4gKiBAcmV0dXJucyBUaGUgZGlyZWN0b3J5IG5hbWUgb2YgdGhlIHBhdGguXG4gKi9cbmV4cG9ydCBjb25zdCBkaXJuYW1lID0gcG9zaXguZGlybmFtZTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBmaWxlIGV4dGVuc2lvbiBvZiBhIHBhdGguXG4gKlxuICogQHBhcmFtIHBhdGggLSBUaGUgcGF0aCB0byBnZXQgdGhlIGV4dGVuc2lvbiBmcm9tLlxuICogQHJldHVybnMgVGhlIGZpbGUgZXh0ZW5zaW9uIG9mIHRoZSBwYXRoLlxuICovXG5leHBvcnQgY29uc3QgZXh0bmFtZSA9IHBvc2l4LmV4dG5hbWU7XG5cbi8qKlxuICogRm9ybWF0cyBhIHBhdGggb2JqZWN0IGludG8gYSBwYXRoIHN0cmluZy5cbiAqXG4gKiBAcGFyYW0gcGF0aE9iamVjdCAtIFRoZSBwYXRoIG9iamVjdCB0byBmb3JtYXQuXG4gKiBAcmV0dXJucyBUaGUgZm9ybWF0dGVkIHBhdGggc3RyaW5nLlxuICovXG5leHBvcnQgY29uc3QgZm9ybWF0ID0gcG9zaXguZm9ybWF0O1xuXG4vKipcbiAqIERldGVybWluZXMgaWYgYSBwYXRoIGlzIGFic29sdXRlLlxuICpcbiAqIEBwYXJhbSBwYXRoIC0gVGhlIHBhdGggdG8gY2hlY2suXG4gKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHBhdGggaXMgYWJzb2x1dGUsIGBmYWxzZWAgb3RoZXJ3aXNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNBYnNvbHV0ZShwYXRoOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIHBvc2l4LmlzQWJzb2x1dGUocGF0aCkgfHwgV0lORE9XU19QT1NJWF9MSUtFX1BBVEhfUkVHX0VYUC5leGVjKHBhdGgpPy5bMF0gPT09IHBhdGg7XG59XG5cbi8qKlxuICogSm9pbnMgbXVsdGlwbGUgcGF0aCBzZWdtZW50cyBpbnRvIGEgc2luZ2xlIHBhdGguXG4gKlxuICogQHBhcmFtIHBhdGhzIC0gVGhlIHBhdGggc2VnbWVudHMgdG8gam9pbi5cbiAqIEByZXR1cm5zIFRoZSBqb2luZWQgcGF0aC5cbiAqL1xuZXhwb3J0IGNvbnN0IGpvaW4gPSBwb3NpeC5qb2luO1xuXG4vKipcbiAqIE5vcm1hbGl6ZXMgYSBwYXRoLCByZXNvbHZpbmcgJy4uJyBhbmQgJy4nIHNlZ21lbnRzLlxuICpcbiAqIEBwYXJhbSBwYXRoIC0gVGhlIHBhdGggdG8gbm9ybWFsaXplLlxuICogQHJldHVybnMgVGhlIG5vcm1hbGl6ZWQgcGF0aC5cbiAqL1xuZXhwb3J0IGNvbnN0IG5vcm1hbGl6ZVBhdGggPSBwb3NpeC5ub3JtYWxpemU7XG5cbi8qKlxuICogUGFyc2VzIGEgcGF0aCBzdHJpbmcgaW50byBhIHBhdGggb2JqZWN0LlxuICpcbiAqIEBwYXJhbSBwYXRoIC0gVGhlIHBhdGggc3RyaW5nIHRvIHBhcnNlLlxuICogQHJldHVybnMgVGhlIHBhcnNlZCBwYXRoIG9iamVjdC5cbiAqL1xuZXhwb3J0IGNvbnN0IHBhcnNlID0gcG9zaXgucGFyc2U7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIG1ha2VGaWxlTmFtZX0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWFrZUZpbGVOYW1lUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBmaWxlIG5hbWUgdG8gYXBwZW5kIHRoZSBleHRlbnNpb24gdG8uXG4gICAqL1xuICByZWFkb25seSBmaWxlQmFzZU5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGV4dGVuc2lvbiB0byBhcHBlbmQgdG8gdGhlIGZpbGUgbmFtZS5cbiAgICovXG4gIHJlYWRvbmx5IGZpbGVFeHRlbnNpb246IHN0cmluZztcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBmaWxlIG5hbWUgZnJvbSB0aGUgYGltcG9ydChkb3QpbWV0YShkb3QpdXJsYCwgY29udmVydGluZyBpdCB0byBhIFBPU0lYLXN0eWxlIHBhdGguXG4gKlxuICogQHBhcmFtIGltcG9ydE1ldGFVcmwgLSBUaGUgYGltcG9ydChkb3QpbWV0YShkb3QpdXJsYCBmcm9tIHdoaWNoIHRvIGV4dHJhY3QgdGhlIGZpbGUgbmFtZS5cbiAqIEByZXR1cm5zIFRoZSBQT1NJWC1zdHlsZSBmaWxlIG5hbWUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRGaWxlTmFtZShpbXBvcnRNZXRhVXJsOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gcmVzb2x2ZShkZWNvZGVVUkkobmV3IFVSTChpbXBvcnRNZXRhVXJsKS5wYXRobmFtZSkpO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIGZvbGRlciBuYW1lIGZyb20gdGhlIGBpbXBvcnQoZG90KW1ldGEoZG90KXVybGAsIGNvbnZlcnRpbmcgaXQgdG8gYSBQT1NJWC1zdHlsZSBwYXRoLlxuICpcbiAqIEBwYXJhbSBpbXBvcnRNZXRhVXJsIC0gVGhlIGBpbXBvcnQoZG90KW1ldGEoZG90KXVybGAgZnJvbSB3aGljaCB0byBleHRyYWN0IHRoZSBmb2xkZXIgbmFtZS5cbiAqIEByZXR1cm5zIFRoZSBQT1NJWC1zdHlsZSBmb2xkZXIgbmFtZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEZvbGRlck5hbWUoaW1wb3J0TWV0YVVybDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGRpcm5hbWUoZ2V0RmlsZU5hbWUoaW1wb3J0TWV0YVVybCkpO1xufVxuXG4vKipcbiAqIE1ha2VzIGEgZmlsZSBuYW1lIGJ5IGFwcGVuZGluZyBhbiBleHRlbnNpb24gdG8gYSBnaXZlbiBmaWxlIG5hbWUuXG4gKiBJZiB0aGUgZXh0ZW5zaW9uIGlzIGVtcHR5LCB0aGUgZmlsZSBuYW1lIGlzIHJldHVybmVkIGFzIGlzLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3IgbWFraW5nIHRoZSBmaWxlIG5hbWUuXG4gKiBAcmV0dXJucyBUaGUgZmlsZSBuYW1lIHdpdGggdGhlIGV4dGVuc2lvbiBhcHBlbmRlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1ha2VGaWxlTmFtZShwYXJhbXM6IE1ha2VGaWxlTmFtZVBhcmFtcyk6IHN0cmluZyB7XG4gIHJldHVybiBwYXJhbXMuZmlsZUV4dGVuc2lvbiA/IGAke3BhcmFtcy5maWxlQmFzZU5hbWV9LiR7cGFyYW1zLmZpbGVFeHRlbnNpb259YCA6IHBhcmFtcy5maWxlQmFzZU5hbWU7XG59XG5cbi8qKlxuICogTm9ybWFsaXplcyBhIGdpdmVuIHBhdGggYnkgZW5zdXJpbmcgaXQgaXMgcmVsYXRpdmUsIGFkZGluZyBcIi4vXCIgaWYgbmVjZXNzYXJ5LlxuICpcbiAqIEBwYXJhbSBwYXRoIC0gVGhlIHBhdGggdG8gbm9ybWFsaXplLlxuICogQHJldHVybnMgVGhlIG5vcm1hbGl6ZWQgcGF0aCwgc3RhcnRpbmcgd2l0aCBcIi4vXCIgaWYgaXQgd2FzIHJlbGF0aXZlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplSWZSZWxhdGl2ZShwYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gcGF0aC5zdGFydHNXaXRoKCcvJykgfHwgcGF0aC5pbmNsdWRlcygnOicpXG4gICAgPyBwYXRoXG4gICAgOiBlbnN1cmVTdGFydHNXaXRoKHtcbiAgICAgICRzdHJpbmc6IHBhdGgsXG4gICAgICBwcmVmaXg6ICcuLydcbiAgICB9KTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSByZWxhdGl2ZSBwYXRoIGZyb20gb25lIHBhdGggdG8gYW5vdGhlci5cbiAqXG4gKiBgcGF0aC1icm93c2VyaWZ5YCdzIG93biBgcmVsYXRpdmVgIGNhbm5vdCBiZSB1c2VkIGRpcmVjdGx5OiBpdCByZXNvbHZlcyBhIHJlbGF0aXZlIGFyZ3VtZW50IGFnYWluc3RcbiAqIGBwcm9jZXNzLmN3ZCgpYCwgd2hpY2ggb24gV2luZG93cyBpcyBgRjpcXC4uLmAgcmF0aGVyIHRoYW4gYSBQT1NJWCBhYnNvbHV0ZSBwYXRoLCBhbmQgaXRzIHNsaWNpbmcgdGhlbiBhc3N1bWVzIGFcbiAqIGxlYWRpbmcgYC9gIC0gc28gYHJlbGF0aXZlKCdzcmMnLCAnLi4veCcpYCBjYW1lIGJhY2sgYXMgYCcuLi8uLngnYC4gQm90aCBhcmd1bWVudHMgYXJlIHJlc29sdmVkIHRocm91Z2hcbiAqIHtAbGluayByZXNvbHZlfSBoZXJlIGluc3RlYWQsIGFuZCByb290ZWQgYXQgYC9gIGJlZm9yZSB0aGUgUE9TSVggY29tcGFyaXNvbi5cbiAqXG4gKiBAcGFyYW0gZnJvbSAtIFRoZSBzdGFydGluZyBwYXRoLlxuICogQHBhcmFtIHRvIC0gVGhlIGRlc3RpbmF0aW9uIHBhdGguXG4gKiBAcmV0dXJucyBUaGUgcmVsYXRpdmUgcGF0aCBmcm9tIGBmcm9tYCB0byBgdG9gLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVsYXRpdmUoZnJvbTogc3RyaW5nLCB0bzogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgcmVzb2x2ZWRGcm9tID0gcmVzb2x2ZShmcm9tKTtcbiAgY29uc3QgcmVzb2x2ZWRUbyA9IHJlc29sdmUodG8pO1xuICBjb25zdCBmcm9tRHJpdmUgPSBXSU5ET1dTX0RSSVZFX1JFR19FWFAuZXhlYyhyZXNvbHZlZEZyb20pPy5bMF0udG9VcHBlckNhc2UoKTtcbiAgY29uc3QgdG9Ecml2ZSA9IFdJTkRPV1NfRFJJVkVfUkVHX0VYUC5leGVjKHJlc29sdmVkVG8pPy5bMF0udG9VcHBlckNhc2UoKTtcbiAgcmV0dXJuIGZyb21Ecml2ZSA9PT0gdG9Ecml2ZVxuICAgID8gcG9zaXgucmVsYXRpdmUodG9Sb290ZWRQb3NpeFBhdGgodXBwZXJDYXNlRHJpdmUocmVzb2x2ZWRGcm9tKSksIHRvUm9vdGVkUG9zaXhQYXRoKHVwcGVyQ2FzZURyaXZlKHJlc29sdmVkVG8pKSlcbiAgICA6IHJlc29sdmVkVG87XG59XG5cbi8qKlxuICogUmVzb2x2ZXMgYSBzZXF1ZW5jZSBvZiBwYXRocyBvciBwYXRoIHNlZ21lbnRzIGludG8gYW4gYWJzb2x1dGUgcGF0aC5cbiAqXG4gKiBAcGFyYW0gcGF0aFNlZ21lbnRzIC0gVGhlIHNlcXVlbmNlIG9mIHBhdGggc2VnbWVudHMgdG8gcmVzb2x2ZS5cbiAqIEByZXR1cm5zIFRoZSByZXNvbHZlZCBhYnNvbHV0ZSBwYXRoLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZSguLi5wYXRoU2VnbWVudHM6IHN0cmluZ1tdKTogc3RyaW5nIHtcbiAgLypcbiAgICogYHBhdGgtYnJvd3NlcmlmeWAgdHJlYXRzIG9ubHkgYSBsZWFkaW5nIGAvYCBhcyBhYnNvbHV0ZSBhbmQgam9pbnMgYHByb2Nlc3MuY3dkKClgIGluIGFzIGFuIG9wYXF1ZSBzZWdtZW50LCBzbyBvblxuICAgKiBXaW5kb3dzIGEgYC4uYCBjbGltYmluZyBvdXQgb2YgdGhlIHdvcmtpbmcgZm9sZGVyIGNhbmNlbGxlZCB0aGUgd2hvbGUgYEY6XFwuLi5gIGN3ZC4gRXZlcnkgc2VnbWVudCBpcyBtYWRlIFBPU0lYXG4gICAqIGFuZCBhIGRyaXZlIHJvb3QgaXMgZ2l2ZW4gYSBsZWFkaW5nIGAvYCwgd2hpY2ggbWFrZXMgaXQgYSByb290IGBwYXRoLWJyb3dzZXJpZnlgIHVuZGVyc3RhbmRzOyB0aGUgYC9gIGlzIGRyb3BwZWRcbiAgICogYWdhaW4gYmVsb3cuXG4gICAqL1xuICBjb25zdCByb290ZWRTZWdtZW50cyA9IHBhdGhTZWdtZW50cy5tYXAoKHNlZ21lbnQpID0+IHRvUm9vdGVkUG9zaXhQYXRoKHNlZ21lbnQpKTtcbiAgaWYgKHJvb3RlZFNlZ21lbnRzLmV2ZXJ5KChzZWdtZW50KSA9PiAhc2VnbWVudC5zdGFydHNXaXRoKCcvJykpKSB7XG4gICAgcm9vdGVkU2VnbWVudHMudW5zaGlmdCh0b1Jvb3RlZFBvc2l4UGF0aChwcm9jZXNzLmN3ZCgpKSk7XG4gIH1cbiAgY29uc3QgcGF0aCA9IHBvc2l4LnJlc29sdmUoLi4ucm9vdGVkU2VnbWVudHMpO1xuICBjb25zdCBtYXRjaCA9IFdJTkRPV1NfUE9TSVhfTElLRV9QQVRIX1JFR19FWFAuZXhlYyhwYXRoKTtcbiAgcmV0dXJuIG1hdGNoPy5bMF0gPz8gcGF0aDtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhIGJ1ZmZlciBjb250YWluaW5nIGEgcGF0aCB0byBhIFBPU0lYLXN0eWxlIGJ1ZmZlciBieSByZXBsYWNpbmcgYmFja3NsYXNoZXMgd2l0aCBmb3J3YXJkIHNsYXNoZXMuXG4gKlxuICogQHBhcmFtIGJ1ZmZlciAtIFRoZSBidWZmZXIgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIEEgbmV3IGJ1ZmZlciBjb250YWluaW5nIHRoZSBQT1NJWC1zdHlsZSBwYXRoLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9Qb3NpeEJ1ZmZlcihidWZmZXI6IEJ1ZmZlcik6IEJ1ZmZlciB7XG4gIHJldHVybiBCdWZmZXIuZnJvbSh0b1Bvc2l4UGF0aChTdHJpbmcoYnVmZmVyKSkpO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGEgZ2l2ZW4gcGF0aCB0byBhIFBPU0lYLXN0eWxlIHBhdGggYnkgcmVwbGFjaW5nIGJhY2tzbGFzaGVzIHdpdGggZm9yd2FyZCBzbGFzaGVzLlxuICpcbiAqIEBwYXJhbSBwYXRoIC0gVGhlIHBhdGggdG8gY29udmVydC5cbiAqIEByZXR1cm5zIFRoZSBQT1NJWC1zdHlsZSBwYXRoLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9Qb3NpeFBhdGgocGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJlcGxhY2VBbGwoe1xuICAgICRzdHJpbmc6IHBhdGgsXG4gICAgcmVwbGFjZXI6ICcvJyxcbiAgICBzZWFyY2hWYWx1ZTogJ1xcXFwnXG4gIH0pO1xufVxuXG5mdW5jdGlvbiB0b1Jvb3RlZFBvc2l4UGF0aChwYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBwb3NpeFBhdGggPSB0b1Bvc2l4UGF0aChwYXRoKTtcbiAgcmV0dXJuIFdJTkRPV1NfRFJJVkVfUkVHX0VYUC50ZXN0KHBvc2l4UGF0aCkgPyBgLyR7cG9zaXhQYXRofWAgOiBwb3NpeFBhdGg7XG59XG5cbmZ1bmN0aW9uIHVwcGVyQ2FzZURyaXZlKHBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBwYXRoLnJlcGxhY2UoV0lORE9XU19EUklWRV9SRUdfRVhQLCAoZHJpdmUpID0+IGRyaXZlLnRvVXBwZXJDYXNlKCkpO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQU1BLE9BQU8sb0JBQW9CO0FBRTNCO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBRVAsTUFBTSx3QkFBd0I7QUFDOUIsTUFBTSxrQ0FBa0M7QUFLakMsTUFBTSxRQUFRLGVBQWU7QUFLN0IsTUFBTSxZQUFZLE1BQU07QUFLeEIsTUFBTSxZQUFZLGVBQWUsTUFBTTtBQVN2QyxNQUFNLFdBQVcsTUFBTTtBQVV2QixNQUFNLFVBQVUsTUFBTTtBQVF0QixNQUFNLFVBQVUsTUFBTTtBQVF0QixNQUFNLFNBQVMsTUFBTTtBQVFyQixTQUFTLFdBQVcsTUFBdUI7QUFDaEQsU0FBTyxNQUFNLFdBQVcsSUFBSSxLQUFLLGdDQUFnQyxLQUFLLElBQUksSUFBSSxDQUFDLE1BQU07QUFDdkY7QUFRTyxNQUFNLE9BQU8sTUFBTTtBQVFuQixNQUFNLGdCQUFnQixNQUFNO0FBUTVCLE1BQU0sUUFBUSxNQUFNO0FBdUJwQixTQUFTLFlBQVksZUFBK0I7QUFDekQsU0FBTyxRQUFRLFVBQVUsSUFBSSxJQUFJLGFBQWEsRUFBRSxRQUFRLENBQUM7QUFDM0Q7QUFRTyxTQUFTLGNBQWMsZUFBK0I7QUFDM0QsU0FBTyxRQUFRLFlBQVksYUFBYSxDQUFDO0FBQzNDO0FBU08sU0FBUyxhQUFhLFFBQW9DO0FBQy9ELFNBQU8sT0FBTyxnQkFBZ0IsR0FBRyxPQUFPLFlBQVksSUFBSSxPQUFPLGFBQWEsS0FBSyxPQUFPO0FBQzFGO0FBUU8sU0FBUyxvQkFBb0IsTUFBc0I7QUFDeEQsU0FBTyxLQUFLLFdBQVcsR0FBRyxLQUFLLEtBQUssU0FBUyxHQUFHLElBQzVDLE9BQ0EsaUJBQWlCO0FBQUEsSUFDakIsU0FBUztBQUFBLElBQ1QsUUFBUTtBQUFBLEVBQ1YsQ0FBQztBQUNMO0FBY08sU0FBUyxTQUFTLE1BQWMsSUFBb0I7QUFDekQsUUFBTSxlQUFlLFFBQVEsSUFBSTtBQUNqQyxRQUFNLGFBQWEsUUFBUSxFQUFFO0FBQzdCLFFBQU0sWUFBWSxzQkFBc0IsS0FBSyxZQUFZLElBQUksQ0FBQyxFQUFFLFlBQVk7QUFDNUUsUUFBTSxVQUFVLHNCQUFzQixLQUFLLFVBQVUsSUFBSSxDQUFDLEVBQUUsWUFBWTtBQUN4RSxTQUFPLGNBQWMsVUFDakIsTUFBTSxTQUFTLGtCQUFrQixlQUFlLFlBQVksQ0FBQyxHQUFHLGtCQUFrQixlQUFlLFVBQVUsQ0FBQyxDQUFDLElBQzdHO0FBQ047QUFRTyxTQUFTLFdBQVcsY0FBZ0M7QUFPekQsUUFBTSxpQkFBaUIsYUFBYSxJQUFJLENBQUMsWUFBWSxrQkFBa0IsT0FBTyxDQUFDO0FBQy9FLE1BQUksZUFBZSxNQUFNLENBQUMsWUFBWSxDQUFDLFFBQVEsV0FBVyxHQUFHLENBQUMsR0FBRztBQUMvRCxtQkFBZSxRQUFRLGtCQUFrQixRQUFRLElBQUksQ0FBQyxDQUFDO0FBQUEsRUFDekQ7QUFDQSxRQUFNLE9BQU8sTUFBTSxRQUFRLEdBQUcsY0FBYztBQUM1QyxRQUFNLFFBQVEsZ0NBQWdDLEtBQUssSUFBSTtBQUN2RCxTQUFPLFFBQVEsQ0FBQyxLQUFLO0FBQ3ZCO0FBUU8sU0FBUyxjQUFjLFFBQXdCO0FBQ3BELFNBQU8sT0FBTyxLQUFLLFlBQVksT0FBTyxNQUFNLENBQUMsQ0FBQztBQUNoRDtBQVFPLFNBQVMsWUFBWSxNQUFzQjtBQUNoRCxTQUFPLFdBQVc7QUFBQSxJQUNoQixTQUFTO0FBQUEsSUFDVCxVQUFVO0FBQUEsSUFDVixhQUFhO0FBQUEsRUFDZixDQUFDO0FBQ0g7QUFFQSxTQUFTLGtCQUFrQixNQUFzQjtBQUMvQyxRQUFNLFlBQVksWUFBWSxJQUFJO0FBQ2xDLFNBQU8sc0JBQXNCLEtBQUssU0FBUyxJQUFJLElBQUksU0FBUyxLQUFLO0FBQ25FO0FBRUEsU0FBUyxlQUFlLE1BQXNCO0FBQzVDLFNBQU8sS0FBSyxRQUFRLHVCQUF1QixDQUFDLFVBQVUsTUFBTSxZQUFZLENBQUM7QUFDM0U7IiwKICAibmFtZXMiOiBbXQp9Cg==
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/// <reference path="./library.d.mts" />
|
|
2
|
+
/**
|
|
3
|
+
* @file
|
|
4
|
+
*
|
|
5
|
+
* Contains utility functions for regular expressions.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* A strategy to use when merging multiple regex flags into one alternation.
|
|
9
|
+
*/
|
|
10
|
+
export declare enum RegExpMergeFlagsConflictStrategy {
|
|
11
|
+
/**
|
|
12
|
+
* Keep only the flags present in all regexes.
|
|
13
|
+
*/
|
|
14
|
+
Intersect = "Intersect",
|
|
15
|
+
/**
|
|
16
|
+
* Throw an error if the regexes have conflicting flags.
|
|
17
|
+
*/
|
|
18
|
+
Throw = "Throw",
|
|
19
|
+
/**
|
|
20
|
+
* Keep only the flags present in any regex.
|
|
21
|
+
*/
|
|
22
|
+
Union = "Union"
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Escapes special characters in a string to safely use it within a regular expression.
|
|
26
|
+
*
|
|
27
|
+
* @param $string - The string to escape.
|
|
28
|
+
* @returns The escaped string with special characters prefixed with a backslash.
|
|
29
|
+
*/
|
|
30
|
+
export declare function escapeRegExp($string: string): string;
|
|
31
|
+
/**
|
|
32
|
+
* Reads a mandatory named capture group from a regex match.
|
|
33
|
+
*
|
|
34
|
+
* Use this for a named group that is ALWAYS present when the pattern matches — not wrapped in an optional
|
|
35
|
+
* `(?:…)?` / `(…)?`. Returns the captured string (which may be `''` for a zero-width match such as `\w*`),
|
|
36
|
+
* throwing if the group — or the match's `groups` object — is absent, so a pattern change that drops the
|
|
37
|
+
* group fails loudly instead of silently yielding a wrong value.
|
|
38
|
+
*
|
|
39
|
+
* Prefer this over `match.groups?.[name] ?? ''`: for a mandatory group that fallback is a never-taken (dead)
|
|
40
|
+
* branch that fails a 100%-branch coverage gate, whereas the throw here lives inside `ensureNonNullable`
|
|
41
|
+
* (already covered), leaving no inline branch at the call site. For a group that may legitimately be absent,
|
|
42
|
+
* use {@link getOptionalNamedGroup} and default its `null` with `?? …`.
|
|
43
|
+
*
|
|
44
|
+
* @param match - The match returned by `RegExp.exec`, `String.matchAll`, or `String.match`.
|
|
45
|
+
* @param groupName - The name of the capture group to read.
|
|
46
|
+
* @returns The captured string.
|
|
47
|
+
* @throws When the named group is absent.
|
|
48
|
+
*/
|
|
49
|
+
export declare function getMandatoryNamedGroup(match: RegExpMatchArray, groupName: string): string;
|
|
50
|
+
/**
|
|
51
|
+
* Reads an optional named capture group from a regex match, distinguishing an absent group from a present
|
|
52
|
+
* empty one.
|
|
53
|
+
*
|
|
54
|
+
* Returns the captured string when the group participated in the match — which may be `''` for a zero-width
|
|
55
|
+
* match such as `\w*` — or `null` when the group, or the match's `groups` object, is absent (e.g. an optional
|
|
56
|
+
* `(?:…)?` group that did not match). Because `null` is returned only for a genuinely-absent group, a
|
|
57
|
+
* caller's `?? <default>` is a live branch rather than the dead one that `match.groups?.[name] ?? ''` leaves
|
|
58
|
+
* for a mandatory group. For a group that must always be present, use {@link getMandatoryNamedGroup}.
|
|
59
|
+
*
|
|
60
|
+
* @param match - The match returned by `RegExp.exec`, `String.matchAll`, or `String.match`.
|
|
61
|
+
* @param groupName - The name of the capture group to read.
|
|
62
|
+
* @returns The captured string, or `null` when the group is absent.
|
|
63
|
+
*/
|
|
64
|
+
export declare function getOptionalNamedGroup(match: RegExpMatchArray, groupName: string): null | string;
|
|
65
|
+
/**
|
|
66
|
+
* Checks if a string is a valid regular expression.
|
|
67
|
+
*
|
|
68
|
+
* @param $string - The string to check.
|
|
69
|
+
* @returns `true` if the string is a valid regular expression, `false` otherwise.
|
|
70
|
+
*/
|
|
71
|
+
export declare function isValidRegExp($string: string): boolean;
|
|
72
|
+
/**
|
|
73
|
+
* A regular expression that always matches.
|
|
74
|
+
*/
|
|
75
|
+
export declare const ALWAYS_MATCH_REG_EXP: RegExp;
|
|
76
|
+
/**
|
|
77
|
+
* A regular expression that never matches.
|
|
78
|
+
*/
|
|
79
|
+
export declare const NEVER_MATCH_REG_EXP: RegExp;
|
|
80
|
+
/**
|
|
81
|
+
* Combine multiple regexes into one alternation, handling flags.
|
|
82
|
+
*
|
|
83
|
+
* @param regExps - The regexes to combine.
|
|
84
|
+
* @param strategy - The strategy to use when merging flags (default: `RegExpMergeFlagsConflictStrategy.Throw`).
|
|
85
|
+
* @returns The combined regex.
|
|
86
|
+
*/
|
|
87
|
+
export declare function oneOf(regExps: RegExp[], strategy?: RegExpMergeFlagsConflictStrategy): RegExp;
|
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
/*
|
|
2
|
+
THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
|
|
3
|
+
if you want to view the source, please visit the github repository of this plugin
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
(function () {
|
|
7
|
+
function ensureDisposeSymbols(symbolConstructor = Symbol) {
|
|
8
|
+
symbolConstructor.asyncDispose ??= symbolConstructor.for('Symbol.asyncDispose');
|
|
9
|
+
symbolConstructor.dispose ??= symbolConstructor.for('Symbol.dispose');
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
function ensureBrowserProcess() {
|
|
13
|
+
const browserProcess = {
|
|
14
|
+
browser: true,
|
|
15
|
+
cwd() {
|
|
16
|
+
return '/';
|
|
17
|
+
},
|
|
18
|
+
env: {},
|
|
19
|
+
platform: 'android'
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
// eslint-disable-next-line obsidianmd/no-global-this, unicorn/no-unnecessary-global-this -- Must stay `globalThis`-qualified: in the emitted banner a bare `process` is a free identifier, so reading it where the host has none throws a ReferenceError instead of yielding `undefined`. That is the very case this function exists to handle.
|
|
23
|
+
const existingProcess = globalThis.process;
|
|
24
|
+
|
|
25
|
+
if (!existingProcess) {
|
|
26
|
+
// eslint-disable-next-line obsidianmd/no-global-this -- Actively use globalThis.
|
|
27
|
+
globalThis.process = browserProcess;
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
if (existingProcess.versions?.node) {
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
const existingProcessRecord = existingProcess;
|
|
36
|
+
|
|
37
|
+
for (const [key, value] of Object.entries(browserProcess)) {
|
|
38
|
+
existingProcessRecord[key] ??= value;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
existingProcessRecord['browser'] = true;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
(function initEsm() {
|
|
45
|
+
ensureDisposeSymbols();
|
|
46
|
+
ensureBrowserProcess();
|
|
47
|
+
})();
|
|
48
|
+
})();
|
|
49
|
+
|
|
50
|
+
import {
|
|
51
|
+
assert,
|
|
52
|
+
assertNever,
|
|
53
|
+
ensureNonNullable
|
|
54
|
+
} from "./type-guards.mjs";
|
|
55
|
+
var RegExpMergeFlagsConflictStrategy = /* @__PURE__ */ ((RegExpMergeFlagsConflictStrategy2) => {
|
|
56
|
+
RegExpMergeFlagsConflictStrategy2["Intersect"] = "Intersect";
|
|
57
|
+
RegExpMergeFlagsConflictStrategy2["Throw"] = "Throw";
|
|
58
|
+
RegExpMergeFlagsConflictStrategy2["Union"] = "Union";
|
|
59
|
+
return RegExpMergeFlagsConflictStrategy2;
|
|
60
|
+
})(RegExpMergeFlagsConflictStrategy || {});
|
|
61
|
+
function escapeRegExp($string) {
|
|
62
|
+
return $string.replaceAll(/[.*+?^${}()|[\]\\]/g, String.raw`\$&`);
|
|
63
|
+
}
|
|
64
|
+
function getMandatoryNamedGroup(match, groupName) {
|
|
65
|
+
return ensureNonNullable(getOptionalNamedGroup(match, groupName));
|
|
66
|
+
}
|
|
67
|
+
function getOptionalNamedGroup(match, groupName) {
|
|
68
|
+
return match.groups?.[groupName] ?? null;
|
|
69
|
+
}
|
|
70
|
+
function isValidRegExp($string) {
|
|
71
|
+
try {
|
|
72
|
+
new RegExp($string);
|
|
73
|
+
return true;
|
|
74
|
+
} catch {
|
|
75
|
+
return false;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
function hasFlag(regExp, flag) {
|
|
79
|
+
return regExp.flags.includes(flag);
|
|
80
|
+
}
|
|
81
|
+
const ALWAYS_MATCH_REG_EXP = /(?:)/;
|
|
82
|
+
const NEVER_MATCH_REG_EXP = /.^/;
|
|
83
|
+
class RegExpFlagMerger {
|
|
84
|
+
/**
|
|
85
|
+
* Creates a new merger.
|
|
86
|
+
*
|
|
87
|
+
* @param regExps - The regexes whose flags are merged.
|
|
88
|
+
* @param strategy - The strategy to use when flags conflict.
|
|
89
|
+
*/
|
|
90
|
+
constructor(regExps, strategy) {
|
|
91
|
+
this.regExps = regExps;
|
|
92
|
+
this.strategy = strategy;
|
|
93
|
+
}
|
|
94
|
+
regExps;
|
|
95
|
+
strategy;
|
|
96
|
+
finalFlags = /* @__PURE__ */ new Set();
|
|
97
|
+
/**
|
|
98
|
+
* Computes the merged flag string for the configured regexes.
|
|
99
|
+
*
|
|
100
|
+
* @returns The merged flags joined into a single string.
|
|
101
|
+
*/
|
|
102
|
+
computeFlags() {
|
|
103
|
+
this.addSemanticFlags();
|
|
104
|
+
this.addUnicodeFlags();
|
|
105
|
+
this.addMetaFlags();
|
|
106
|
+
return [...this.finalFlags].join("");
|
|
107
|
+
}
|
|
108
|
+
addMetaFlags() {
|
|
109
|
+
const META_FLAGS = ["g", "d"];
|
|
110
|
+
for (const flag of META_FLAGS) {
|
|
111
|
+
if (this.regExps.some((regExp) => hasFlag(regExp, flag))) {
|
|
112
|
+
this.finalFlags.add(flag);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
addSemanticFlags() {
|
|
117
|
+
const SEMANTIC_FLAGS = ["i", "m", "s", "y"];
|
|
118
|
+
for (const flag of SEMANTIC_FLAGS) {
|
|
119
|
+
if (this.shouldPickFlag(flag)) {
|
|
120
|
+
this.finalFlags.add(flag);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
addUnicodeFlags() {
|
|
125
|
+
const countU = this.regExps.filter((regExp) => hasFlag(regExp, "u")).length;
|
|
126
|
+
const countV = this.regExps.filter((regExp) => hasFlag(regExp, "v")).length;
|
|
127
|
+
let shouldUseUFlag;
|
|
128
|
+
let shouldUseVFlag;
|
|
129
|
+
switch (this.strategy) {
|
|
130
|
+
/* v8 ignore stop */
|
|
131
|
+
case "Intersect" /* Intersect */: {
|
|
132
|
+
shouldUseUFlag = countU === this.regExps.length;
|
|
133
|
+
shouldUseVFlag = countV === this.regExps.length;
|
|
134
|
+
break;
|
|
135
|
+
}
|
|
136
|
+
case "Throw" /* Throw */: {
|
|
137
|
+
const haveAllUFlag = countU === this.regExps.length;
|
|
138
|
+
const haveNoUFlag = countU === 0;
|
|
139
|
+
const haveAllVFlag = countV === this.regExps.length;
|
|
140
|
+
const haveNoVFlag = countV === 0;
|
|
141
|
+
if (!(haveAllUFlag || haveNoUFlag) || !(haveAllVFlag || haveNoVFlag)) {
|
|
142
|
+
throw new Error("Conflicting 'u'/'v' flags across patterns.");
|
|
143
|
+
}
|
|
144
|
+
shouldUseUFlag = haveAllUFlag;
|
|
145
|
+
shouldUseVFlag = haveAllVFlag;
|
|
146
|
+
break;
|
|
147
|
+
}
|
|
148
|
+
case "Union" /* Union */: {
|
|
149
|
+
shouldUseUFlag = countU > 0;
|
|
150
|
+
shouldUseVFlag = countV > 0;
|
|
151
|
+
break;
|
|
152
|
+
}
|
|
153
|
+
default: {
|
|
154
|
+
assertNever(this.strategy);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
if (shouldUseUFlag && shouldUseVFlag) {
|
|
158
|
+
assert(this.strategy !== "Throw" /* Throw */, "Cannot combine both 'u'/'v' flags in one RegExp.");
|
|
159
|
+
shouldUseUFlag = false;
|
|
160
|
+
}
|
|
161
|
+
if (shouldUseUFlag) {
|
|
162
|
+
this.finalFlags.add("u");
|
|
163
|
+
}
|
|
164
|
+
if (shouldUseVFlag) {
|
|
165
|
+
this.finalFlags.add("v");
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
shouldPickFlag(flag) {
|
|
169
|
+
const count = this.regExps.filter((regExp) => hasFlag(regExp, flag)).length;
|
|
170
|
+
switch (this.strategy) {
|
|
171
|
+
/* v8 ignore stop */
|
|
172
|
+
case "Intersect" /* Intersect */: {
|
|
173
|
+
return count === this.regExps.length;
|
|
174
|
+
}
|
|
175
|
+
case "Throw" /* Throw */: {
|
|
176
|
+
break;
|
|
177
|
+
}
|
|
178
|
+
case "Union" /* Union */: {
|
|
179
|
+
return count > 0;
|
|
180
|
+
}
|
|
181
|
+
default: {
|
|
182
|
+
assertNever(this.strategy);
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
const haveAllSameFlag = count === 0 || count === this.regExps.length;
|
|
186
|
+
if (!haveAllSameFlag) {
|
|
187
|
+
throw new Error(`Conflicting flag '${flag}' across patterns.`);
|
|
188
|
+
}
|
|
189
|
+
return count === this.regExps.length;
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
function oneOf(regExps, strategy = "Throw" /* Throw */) {
|
|
193
|
+
if (regExps.length === 0) {
|
|
194
|
+
return ALWAYS_MATCH_REG_EXP;
|
|
195
|
+
}
|
|
196
|
+
if (regExps.length === 1 && regExps[0] !== void 0) {
|
|
197
|
+
return regExps[0];
|
|
198
|
+
}
|
|
199
|
+
const source = regExps.map((regExp) => `(?:${regExp.source})`).join("|");
|
|
200
|
+
const flags = new RegExpFlagMerger(regExps, strategy).computeFlags();
|
|
201
|
+
return new RegExp(source, flags);
|
|
202
|
+
}
|
|
203
|
+
export {
|
|
204
|
+
ALWAYS_MATCH_REG_EXP,
|
|
205
|
+
NEVER_MATCH_REG_EXP,
|
|
206
|
+
RegExpMergeFlagsConflictStrategy,
|
|
207
|
+
escapeRegExp,
|
|
208
|
+
getMandatoryNamedGroup,
|
|
209
|
+
getOptionalNamedGroup,
|
|
210
|
+
isValidRegExp,
|
|
211
|
+
oneOf
|
|
212
|
+
};
|
|
213
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL3JlZy1leHAudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBDb250YWlucyB1dGlsaXR5IGZ1bmN0aW9ucyBmb3IgcmVndWxhciBleHByZXNzaW9ucy5cbiAqL1xuXG5pbXBvcnQge1xuICBhc3NlcnQsXG4gIGFzc2VydE5ldmVyLFxuICBlbnN1cmVOb25OdWxsYWJsZVxufSBmcm9tICcuL3R5cGUtZ3VhcmRzLnRzJztcblxuLyoqXG4gKiBBIHN0cmF0ZWd5IHRvIHVzZSB3aGVuIG1lcmdpbmcgbXVsdGlwbGUgcmVnZXggZmxhZ3MgaW50byBvbmUgYWx0ZXJuYXRpb24uXG4gKi9cbmV4cG9ydCBlbnVtIFJlZ0V4cE1lcmdlRmxhZ3NDb25mbGljdFN0cmF0ZWd5IHtcbiAgLyoqXG4gICAqIEtlZXAgb25seSB0aGUgZmxhZ3MgcHJlc2VudCBpbiBhbGwgcmVnZXhlcy5cbiAgICovXG4gIEludGVyc2VjdCA9ICdJbnRlcnNlY3QnLFxuICAvKipcbiAgICogVGhyb3cgYW4gZXJyb3IgaWYgdGhlIHJlZ2V4ZXMgaGF2ZSBjb25mbGljdGluZyBmbGFncy5cbiAgICovXG4gIFRocm93ID0gJ1Rocm93JyxcbiAgLyoqXG4gICAqIEtlZXAgb25seSB0aGUgZmxhZ3MgcHJlc2VudCBpbiBhbnkgcmVnZXguXG4gICAqL1xuICBVbmlvbiA9ICdVbmlvbidcbn1cblxuLyoqXG4gKiBFc2NhcGVzIHNwZWNpYWwgY2hhcmFjdGVycyBpbiBhIHN0cmluZyB0byBzYWZlbHkgdXNlIGl0IHdpdGhpbiBhIHJlZ3VsYXIgZXhwcmVzc2lvbi5cbiAqXG4gKiBAcGFyYW0gJHN0cmluZyAtIFRoZSBzdHJpbmcgdG8gZXNjYXBlLlxuICogQHJldHVybnMgVGhlIGVzY2FwZWQgc3RyaW5nIHdpdGggc3BlY2lhbCBjaGFyYWN0ZXJzIHByZWZpeGVkIHdpdGggYSBiYWNrc2xhc2guXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlc2NhcGVSZWdFeHAoJHN0cmluZzogc3RyaW5nKTogc3RyaW5nIHtcbiAgLy8gTk9URTogV2UgY2FuJ3QgdXNlIGByZXBsYWNlQWxsKClgIGZyb20gYFN0cmluZy50c2AgaGVyZSBiZWNhdXNlIGl0IGludHJvZHVjZXMgYSBjaXJjdWxhciBkZXBlbmRlbmN5LlxuICByZXR1cm4gJHN0cmluZy5yZXBsYWNlQWxsKC9bLiorP14ke30oKXxbXFxdXFxcXF0vZywgU3RyaW5nLnJhd2BcXCQmYCk7XG59XG5cbi8qKlxuICogUmVhZHMgYSBtYW5kYXRvcnkgbmFtZWQgY2FwdHVyZSBncm91cCBmcm9tIGEgcmVnZXggbWF0Y2guXG4gKlxuICogVXNlIHRoaXMgZm9yIGEgbmFtZWQgZ3JvdXAgdGhhdCBpcyBBTFdBWVMgcHJlc2VudCB3aGVuIHRoZSBwYXR0ZXJuIG1hdGNoZXMgXHUyMDE0IG5vdCB3cmFwcGVkIGluIGFuIG9wdGlvbmFsXG4gKiBgKD86XHUyMDI2KT9gIC8gYChcdTIwMjYpP2AuIFJldHVybnMgdGhlIGNhcHR1cmVkIHN0cmluZyAod2hpY2ggbWF5IGJlIGAnJ2AgZm9yIGEgemVyby13aWR0aCBtYXRjaCBzdWNoIGFzIGBcXHcqYCksXG4gKiB0aHJvd2luZyBpZiB0aGUgZ3JvdXAgXHUyMDE0IG9yIHRoZSBtYXRjaCdzIGBncm91cHNgIG9iamVjdCBcdTIwMTQgaXMgYWJzZW50LCBzbyBhIHBhdHRlcm4gY2hhbmdlIHRoYXQgZHJvcHMgdGhlXG4gKiBncm91cCBmYWlscyBsb3VkbHkgaW5zdGVhZCBvZiBzaWxlbnRseSB5aWVsZGluZyBhIHdyb25nIHZhbHVlLlxuICpcbiAqIFByZWZlciB0aGlzIG92ZXIgYG1hdGNoLmdyb3Vwcz8uW25hbWVdID8/ICcnYDogZm9yIGEgbWFuZGF0b3J5IGdyb3VwIHRoYXQgZmFsbGJhY2sgaXMgYSBuZXZlci10YWtlbiAoZGVhZClcbiAqIGJyYW5jaCB0aGF0IGZhaWxzIGEgMTAwJS1icmFuY2ggY292ZXJhZ2UgZ2F0ZSwgd2hlcmVhcyB0aGUgdGhyb3cgaGVyZSBsaXZlcyBpbnNpZGUgYGVuc3VyZU5vbk51bGxhYmxlYFxuICogKGFscmVhZHkgY292ZXJlZCksIGxlYXZpbmcgbm8gaW5saW5lIGJyYW5jaCBhdCB0aGUgY2FsbCBzaXRlLiBGb3IgYSBncm91cCB0aGF0IG1heSBsZWdpdGltYXRlbHkgYmUgYWJzZW50LFxuICogdXNlIHtAbGluayBnZXRPcHRpb25hbE5hbWVkR3JvdXB9IGFuZCBkZWZhdWx0IGl0cyBgbnVsbGAgd2l0aCBgPz8gXHUyMDI2YC5cbiAqXG4gKiBAcGFyYW0gbWF0Y2ggLSBUaGUgbWF0Y2ggcmV0dXJuZWQgYnkgYFJlZ0V4cC5leGVjYCwgYFN0cmluZy5tYXRjaEFsbGAsIG9yIGBTdHJpbmcubWF0Y2hgLlxuICogQHBhcmFtIGdyb3VwTmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBjYXB0dXJlIGdyb3VwIHRvIHJlYWQuXG4gKiBAcmV0dXJucyBUaGUgY2FwdHVyZWQgc3RyaW5nLlxuICogQHRocm93cyBXaGVuIHRoZSBuYW1lZCBncm91cCBpcyBhYnNlbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRNYW5kYXRvcnlOYW1lZEdyb3VwKG1hdGNoOiBSZWdFeHBNYXRjaEFycmF5LCBncm91cE5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBlbnN1cmVOb25OdWxsYWJsZShnZXRPcHRpb25hbE5hbWVkR3JvdXAobWF0Y2gsIGdyb3VwTmFtZSkpO1xufVxuXG4vKipcbiAqIFJlYWRzIGFuIG9wdGlvbmFsIG5hbWVkIGNhcHR1cmUgZ3JvdXAgZnJvbSBhIHJlZ2V4IG1hdGNoLCBkaXN0aW5ndWlzaGluZyBhbiBhYnNlbnQgZ3JvdXAgZnJvbSBhIHByZXNlbnRcbiAqIGVtcHR5IG9uZS5cbiAqXG4gKiBSZXR1cm5zIHRoZSBjYXB0dXJlZCBzdHJpbmcgd2hlbiB0aGUgZ3JvdXAgcGFydGljaXBhdGVkIGluIHRoZSBtYXRjaCBcdTIwMTQgd2hpY2ggbWF5IGJlIGAnJ2AgZm9yIGEgemVyby13aWR0aFxuICogbWF0Y2ggc3VjaCBhcyBgXFx3KmAgXHUyMDE0IG9yIGBudWxsYCB3aGVuIHRoZSBncm91cCwgb3IgdGhlIG1hdGNoJ3MgYGdyb3Vwc2Agb2JqZWN0LCBpcyBhYnNlbnQgKGUuZy4gYW4gb3B0aW9uYWxcbiAqIGAoPzpcdTIwMjYpP2AgZ3JvdXAgdGhhdCBkaWQgbm90IG1hdGNoKS4gQmVjYXVzZSBgbnVsbGAgaXMgcmV0dXJuZWQgb25seSBmb3IgYSBnZW51aW5lbHktYWJzZW50IGdyb3VwLCBhXG4gKiBjYWxsZXIncyBgPz8gPGRlZmF1bHQ+YCBpcyBhIGxpdmUgYnJhbmNoIHJhdGhlciB0aGFuIHRoZSBkZWFkIG9uZSB0aGF0IGBtYXRjaC5ncm91cHM/LltuYW1lXSA/PyAnJ2AgbGVhdmVzXG4gKiBmb3IgYSBtYW5kYXRvcnkgZ3JvdXAuIEZvciBhIGdyb3VwIHRoYXQgbXVzdCBhbHdheXMgYmUgcHJlc2VudCwgdXNlIHtAbGluayBnZXRNYW5kYXRvcnlOYW1lZEdyb3VwfS5cbiAqXG4gKiBAcGFyYW0gbWF0Y2ggLSBUaGUgbWF0Y2ggcmV0dXJuZWQgYnkgYFJlZ0V4cC5leGVjYCwgYFN0cmluZy5tYXRjaEFsbGAsIG9yIGBTdHJpbmcubWF0Y2hgLlxuICogQHBhcmFtIGdyb3VwTmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBjYXB0dXJlIGdyb3VwIHRvIHJlYWQuXG4gKiBAcmV0dXJucyBUaGUgY2FwdHVyZWQgc3RyaW5nLCBvciBgbnVsbGAgd2hlbiB0aGUgZ3JvdXAgaXMgYWJzZW50LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0T3B0aW9uYWxOYW1lZEdyb3VwKG1hdGNoOiBSZWdFeHBNYXRjaEFycmF5LCBncm91cE5hbWU6IHN0cmluZyk6IG51bGwgfCBzdHJpbmcge1xuICByZXR1cm4gbWF0Y2guZ3JvdXBzPy5bZ3JvdXBOYW1lXSA/PyBudWxsO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBhIHN0cmluZyBpcyBhIHZhbGlkIHJlZ3VsYXIgZXhwcmVzc2lvbi5cbiAqXG4gKiBAcGFyYW0gJHN0cmluZyAtIFRoZSBzdHJpbmcgdG8gY2hlY2suXG4gKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHN0cmluZyBpcyBhIHZhbGlkIHJlZ3VsYXIgZXhwcmVzc2lvbiwgYGZhbHNlYCBvdGhlcndpc2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1ZhbGlkUmVnRXhwKCRzdHJpbmc6IHN0cmluZyk6IGJvb2xlYW4ge1xuICB0cnkge1xuICAgIG5ldyBSZWdFeHAoJHN0cmluZyk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBoYXNGbGFnKHJlZ0V4cDogUmVnRXhwLCBmbGFnOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIHJlZ0V4cC5mbGFncy5pbmNsdWRlcyhmbGFnKTtcbn1cblxuLyoqXG4gKiBBIHJlZ3VsYXIgZXhwcmVzc2lvbiB0aGF0IGFsd2F5cyBtYXRjaGVzLlxuICovXG5leHBvcnQgY29uc3QgQUxXQVlTX01BVENIX1JFR19FWFAgPSAvKD86KS87XG5cbi8qKlxuICogQSByZWd1bGFyIGV4cHJlc3Npb24gdGhhdCBuZXZlciBtYXRjaGVzLlxuICovXG5leHBvcnQgY29uc3QgTkVWRVJfTUFUQ0hfUkVHX0VYUCA9IC8uXi87XG5cbi8qKlxuICogTWVyZ2VzIHRoZSBmbGFncyBvZiBtdWx0aXBsZSByZWdleGVzIGludG8gYSBzaW5nbGUgZmxhZyBzdHJpbmcsIGFwcGx5aW5nIGEgY29uZmxpY3Qgc3RyYXRlZ3kuXG4gKlxuICogVGhlIGNvb3BlcmF0aW5nIHBlci1mbGFnIGhlbHBlcnMgc2hhcmUgdGhlIHNhbWUgcmVnZXhlcywgc3RyYXRlZ3ksIGFuZCBhY2N1bXVsYXRlZCBmbGFnIHNldCwgc29cbiAqIHRoZXkgYXJlIGdyb3VwZWQgaGVyZSBhcyBtZXRob2RzIG92ZXIgdGhvc2UgZmllbGRzIHJhdGhlciB0aGFuIHRocmVhZGluZyB0aGUgc3RhdGUgdGhyb3VnaFxuICogcG9zaXRpb25hbCBhcmd1bWVudHMuXG4gKi9cbmNsYXNzIFJlZ0V4cEZsYWdNZXJnZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IGZpbmFsRmxhZ3MgPSBuZXcgU2V0PHN0cmluZz4oKTtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBtZXJnZXIuXG4gICAqXG4gICAqIEBwYXJhbSByZWdFeHBzIC0gVGhlIHJlZ2V4ZXMgd2hvc2UgZmxhZ3MgYXJlIG1lcmdlZC5cbiAgICogQHBhcmFtIHN0cmF0ZWd5IC0gVGhlIHN0cmF0ZWd5IHRvIHVzZSB3aGVuIGZsYWdzIGNvbmZsaWN0LlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgcmVnRXhwczogUmVnRXhwW10sIHByaXZhdGUgcmVhZG9ubHkgc3RyYXRlZ3k6IFJlZ0V4cE1lcmdlRmxhZ3NDb25mbGljdFN0cmF0ZWd5KSB7fVxuXG4gIC8qKlxuICAgKiBDb21wdXRlcyB0aGUgbWVyZ2VkIGZsYWcgc3RyaW5nIGZvciB0aGUgY29uZmlndXJlZCByZWdleGVzLlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgbWVyZ2VkIGZsYWdzIGpvaW5lZCBpbnRvIGEgc2luZ2xlIHN0cmluZy5cbiAgICovXG4gIHB1YmxpYyBjb21wdXRlRmxhZ3MoKTogc3RyaW5nIHtcbiAgICB0aGlzLmFkZFNlbWFudGljRmxhZ3MoKTtcbiAgICB0aGlzLmFkZFVuaWNvZGVGbGFncygpO1xuICAgIHRoaXMuYWRkTWV0YUZsYWdzKCk7XG4gICAgcmV0dXJuIFsuLi50aGlzLmZpbmFsRmxhZ3NdLmpvaW4oJycpO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRNZXRhRmxhZ3MoKTogdm9pZCB7XG4gICAgY29uc3QgTUVUQV9GTEFHUyA9IFsnZycsICdkJ107XG4gICAgZm9yIChjb25zdCBmbGFnIG9mIE1FVEFfRkxBR1MpIHtcbiAgICAgIGlmICh0aGlzLnJlZ0V4cHMuc29tZSgocmVnRXhwKSA9PiBoYXNGbGFnKHJlZ0V4cCwgZmxhZykpKSB7XG4gICAgICAgIHRoaXMuZmluYWxGbGFncy5hZGQoZmxhZyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhZGRTZW1hbnRpY0ZsYWdzKCk6IHZvaWQge1xuICAgIGNvbnN0IFNFTUFOVElDX0ZMQUdTID0gWydpJywgJ20nLCAncycsICd5J107XG4gICAgZm9yIChjb25zdCBmbGFnIG9mIFNFTUFOVElDX0ZMQUdTKSB7XG4gICAgICBpZiAodGhpcy5zaG91bGRQaWNrRmxhZyhmbGFnKSkge1xuICAgICAgICB0aGlzLmZpbmFsRmxhZ3MuYWRkKGZsYWcpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYWRkVW5pY29kZUZsYWdzKCk6IHZvaWQge1xuICAgIGNvbnN0IGNvdW50VSA9IHRoaXMucmVnRXhwcy5maWx0ZXIoKHJlZ0V4cCkgPT4gaGFzRmxhZyhyZWdFeHAsICd1JykpLmxlbmd0aDtcbiAgICBjb25zdCBjb3VudFYgPSB0aGlzLnJlZ0V4cHMuZmlsdGVyKChyZWdFeHApID0+IGhhc0ZsYWcocmVnRXhwLCAndicpKS5sZW5ndGg7XG5cbiAgICBsZXQgc2hvdWxkVXNlVUZsYWc6IGJvb2xlYW47XG4gICAgbGV0IHNob3VsZFVzZVZGbGFnOiBib29sZWFuO1xuXG4gICAgLyogdjggaWdub3JlIHN0YXJ0IC0tIHY4IGNvdW50cyB0aGUgaW1wbGljaXQgZGVmYXVsdCBicmFuY2ggYXMgdW5jb3ZlcmVkIGV2ZW4gd2hlbiBhbGwgZW51bSBjYXNlcyBhcmUgaGFuZGxlZC4gKi9cbiAgICBzd2l0Y2ggKHRoaXMuc3RyYXRlZ3kpIHtcbiAgICAgIC8qIHY4IGlnbm9yZSBzdG9wICovXG4gICAgICBjYXNlIFJlZ0V4cE1lcmdlRmxhZ3NDb25mbGljdFN0cmF0ZWd5LkludGVyc2VjdDoge1xuICAgICAgICBzaG91bGRVc2VVRmxhZyA9IGNvdW50VSA9PT0gdGhpcy5yZWdFeHBzLmxlbmd0aDtcbiAgICAgICAgc2hvdWxkVXNlVkZsYWcgPSBjb3VudFYgPT09IHRoaXMucmVnRXhwcy5sZW5ndGg7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSBSZWdFeHBNZXJnZUZsYWdzQ29uZmxpY3RTdHJhdGVneS5UaHJvdzoge1xuICAgICAgICBjb25zdCBoYXZlQWxsVUZsYWcgPSBjb3VudFUgPT09IHRoaXMucmVnRXhwcy5sZW5ndGg7XG4gICAgICAgIGNvbnN0IGhhdmVOb1VGbGFnID0gY291bnRVID09PSAwO1xuICAgICAgICBjb25zdCBoYXZlQWxsVkZsYWcgPSBjb3VudFYgPT09IHRoaXMucmVnRXhwcy5sZW5ndGg7XG4gICAgICAgIGNvbnN0IGhhdmVOb1ZGbGFnID0gY291bnRWID09PSAwO1xuXG4gICAgICAgIGlmICghKGhhdmVBbGxVRmxhZyB8fCBoYXZlTm9VRmxhZykgfHwgIShoYXZlQWxsVkZsYWcgfHwgaGF2ZU5vVkZsYWcpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb25mbGljdGluZyBcXCd1XFwnL1xcJ3ZcXCcgZmxhZ3MgYWNyb3NzIHBhdHRlcm5zLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgc2hvdWxkVXNlVUZsYWcgPSBoYXZlQWxsVUZsYWc7XG4gICAgICAgIHNob3VsZFVzZVZGbGFnID0gaGF2ZUFsbFZGbGFnO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgUmVnRXhwTWVyZ2VGbGFnc0NvbmZsaWN0U3RyYXRlZ3kuVW5pb246IHtcbiAgICAgICAgc2hvdWxkVXNlVUZsYWcgPSBjb3VudFUgPiAwO1xuICAgICAgICBzaG91bGRVc2VWRmxhZyA9IGNvdW50ViA+IDA7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgZGVmYXVsdDoge1xuICAgICAgICAvKiB2OCBpZ25vcmUgc3RhcnQgLS0gRXhoYXVzdGl2ZSBzd2l0Y2ggZ3VhcmQuICovXG4gICAgICAgIGFzc2VydE5ldmVyKHRoaXMuc3RyYXRlZ3kpO1xuICAgICAgfVxuICAgICAgICAvKiB2OCBpZ25vcmUgc3RvcCAqL1xuICAgIH1cblxuICAgIGlmIChzaG91bGRVc2VVRmxhZyAmJiBzaG91bGRVc2VWRmxhZykge1xuICAgICAgYXNzZXJ0KHRoaXMuc3RyYXRlZ3kgIT09IFJlZ0V4cE1lcmdlRmxhZ3NDb25mbGljdFN0cmF0ZWd5LlRocm93LCAnQ2Fubm90IGNvbWJpbmUgYm90aCBcXCd1XFwnL1xcJ3ZcXCcgZmxhZ3MgaW4gb25lIFJlZ0V4cC4nKTtcbiAgICAgIHNob3VsZFVzZVVGbGFnID0gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHNob3VsZFVzZVVGbGFnKSB7XG4gICAgICB0aGlzLmZpbmFsRmxhZ3MuYWRkKCd1Jyk7XG4gICAgfVxuICAgIGlmIChzaG91bGRVc2VWRmxhZykge1xuICAgICAgdGhpcy5maW5hbEZsYWdzLmFkZCgndicpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2hvdWxkUGlja0ZsYWcoZmxhZzogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgY29uc3QgY291bnQgPSB0aGlzLnJlZ0V4cHMuZmlsdGVyKChyZWdFeHApID0+IGhhc0ZsYWcocmVnRXhwLCBmbGFnKSkubGVuZ3RoO1xuICAgIC8qIHY4IGlnbm9yZSBzdGFydCAtLSB2OCBjb3VudHMgdGhlIGltcGxpY2l0IGRlZmF1bHQgYnJhbmNoIGFzIHVuY292ZXJlZCBldmVuIHdoZW4gYWxsIGVudW0gY2FzZXMgYXJlIGhhbmRsZWQuICovXG4gICAgc3dpdGNoICh0aGlzLnN0cmF0ZWd5KSB7XG4gICAgICAvKiB2OCBpZ25vcmUgc3RvcCAqL1xuICAgICAgY2FzZSBSZWdFeHBNZXJnZUZsYWdzQ29uZmxpY3RTdHJhdGVneS5JbnRlcnNlY3Q6IHtcbiAgICAgICAgcmV0dXJuIGNvdW50ID09PSB0aGlzLnJlZ0V4cHMubGVuZ3RoO1xuICAgICAgfVxuICAgICAgY2FzZSBSZWdFeHBNZXJnZUZsYWdzQ29uZmxpY3RTdHJhdGVneS5UaHJvdzoge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgUmVnRXhwTWVyZ2VGbGFnc0NvbmZsaWN0U3RyYXRlZ3kuVW5pb246IHtcbiAgICAgICAgcmV0dXJuIGNvdW50ID4gMDtcbiAgICAgIH1cbiAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgLyogdjggaWdub3JlIHN0YXJ0IC0tIEV4aGF1c3RpdmUgc3dpdGNoIGd1YXJkLiAqL1xuICAgICAgICBhc3NlcnROZXZlcih0aGlzLnN0cmF0ZWd5KTtcbiAgICAgIH1cbiAgICAgICAgLyogdjggaWdub3JlIHN0b3AgKi9cbiAgICB9XG5cbiAgICBjb25zdCBoYXZlQWxsU2FtZUZsYWcgPSBjb3VudCA9PT0gMCB8fCBjb3VudCA9PT0gdGhpcy5yZWdFeHBzLmxlbmd0aDtcbiAgICBpZiAoIWhhdmVBbGxTYW1lRmxhZykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb25mbGljdGluZyBmbGFnICcke2ZsYWd9JyBhY3Jvc3MgcGF0dGVybnMuYCk7XG4gICAgfVxuICAgIHJldHVybiBjb3VudCA9PT0gdGhpcy5yZWdFeHBzLmxlbmd0aDtcbiAgfVxufVxuXG4vKipcbiAqIENvbWJpbmUgbXVsdGlwbGUgcmVnZXhlcyBpbnRvIG9uZSBhbHRlcm5hdGlvbiwgaGFuZGxpbmcgZmxhZ3MuXG4gKlxuICogQHBhcmFtIHJlZ0V4cHMgLSBUaGUgcmVnZXhlcyB0byBjb21iaW5lLlxuICogQHBhcmFtIHN0cmF0ZWd5IC0gVGhlIHN0cmF0ZWd5IHRvIHVzZSB3aGVuIG1lcmdpbmcgZmxhZ3MgKGRlZmF1bHQ6IGBSZWdFeHBNZXJnZUZsYWdzQ29uZmxpY3RTdHJhdGVneS5UaHJvd2ApLlxuICogQHJldHVybnMgVGhlIGNvbWJpbmVkIHJlZ2V4LlxuICovXG5leHBvcnQgZnVuY3Rpb24gb25lT2YoXG4gIHJlZ0V4cHM6IFJlZ0V4cFtdLFxuICBzdHJhdGVneTogUmVnRXhwTWVyZ2VGbGFnc0NvbmZsaWN0U3RyYXRlZ3kgPSBSZWdFeHBNZXJnZUZsYWdzQ29uZmxpY3RTdHJhdGVneS5UaHJvd1xuKTogUmVnRXhwIHtcbiAgaWYgKHJlZ0V4cHMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIEFMV0FZU19NQVRDSF9SRUdfRVhQO1xuICB9XG5cbiAgaWYgKHJlZ0V4cHMubGVuZ3RoID09PSAxICYmIHJlZ0V4cHNbMF0gIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiByZWdFeHBzWzBdO1xuICB9XG5cbiAgY29uc3Qgc291cmNlID0gcmVnRXhwcy5tYXAoKHJlZ0V4cCkgPT4gYCg/OiR7cmVnRXhwLnNvdXJjZX0pYCkuam9pbignfCcpO1xuICBjb25zdCBmbGFncyA9IG5ldyBSZWdFeHBGbGFnTWVyZ2VyKHJlZ0V4cHMsIHN0cmF0ZWd5KS5jb21wdXRlRmxhZ3MoKTtcbiAgcmV0dXJuIG5ldyBSZWdFeHAoc291cmNlLCBmbGFncyk7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBTUE7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBS0EsSUFBSyxtQ0FBTCxrQkFBS0Esc0NBQUw7QUFJTCxFQUFBQSxrQ0FBQSxlQUFZO0FBSVosRUFBQUEsa0NBQUEsV0FBUTtBQUlSLEVBQUFBLGtDQUFBLFdBQVE7QUFaRSxTQUFBQTtBQUFBLEdBQUE7QUFxQkwsU0FBUyxhQUFhLFNBQXlCO0FBRXBELFNBQU8sUUFBUSxXQUFXLHVCQUF1QixPQUFPLFFBQVE7QUFDbEU7QUFvQk8sU0FBUyx1QkFBdUIsT0FBeUIsV0FBMkI7QUFDekYsU0FBTyxrQkFBa0Isc0JBQXNCLE9BQU8sU0FBUyxDQUFDO0FBQ2xFO0FBZ0JPLFNBQVMsc0JBQXNCLE9BQXlCLFdBQWtDO0FBQy9GLFNBQU8sTUFBTSxTQUFTLFNBQVMsS0FBSztBQUN0QztBQVFPLFNBQVMsY0FBYyxTQUEwQjtBQUN0RCxNQUFJO0FBQ0YsUUFBSSxPQUFPLE9BQU87QUFDbEIsV0FBTztBQUFBLEVBQ1QsUUFBUTtBQUNOLFdBQU87QUFBQSxFQUNUO0FBQ0Y7QUFFQSxTQUFTLFFBQVEsUUFBZ0IsTUFBdUI7QUFDdEQsU0FBTyxPQUFPLE1BQU0sU0FBUyxJQUFJO0FBQ25DO0FBS08sTUFBTSx1QkFBdUI7QUFLN0IsTUFBTSxzQkFBc0I7QUFTbkMsTUFBTSxpQkFBaUI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQVNkLFlBQTZCLFNBQW9DLFVBQTRDO0FBQWhGO0FBQW9DO0FBQUEsRUFBNkM7QUFBQSxFQUFqRjtBQUFBLEVBQW9DO0FBQUEsRUFSdkQsYUFBYSxvQkFBSSxJQUFZO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBZXZDLGVBQXVCO0FBQzVCLFNBQUssaUJBQWlCO0FBQ3RCLFNBQUssZ0JBQWdCO0FBQ3JCLFNBQUssYUFBYTtBQUNsQixXQUFPLENBQUMsR0FBRyxLQUFLLFVBQVUsRUFBRSxLQUFLLEVBQUU7QUFBQSxFQUNyQztBQUFBLEVBRVEsZUFBcUI7QUFDM0IsVUFBTSxhQUFhLENBQUMsS0FBSyxHQUFHO0FBQzVCLGVBQVcsUUFBUSxZQUFZO0FBQzdCLFVBQUksS0FBSyxRQUFRLEtBQUssQ0FBQyxXQUFXLFFBQVEsUUFBUSxJQUFJLENBQUMsR0FBRztBQUN4RCxhQUFLLFdBQVcsSUFBSSxJQUFJO0FBQUEsTUFDMUI7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUFBLEVBRVEsbUJBQXlCO0FBQy9CLFVBQU0saUJBQWlCLENBQUMsS0FBSyxLQUFLLEtBQUssR0FBRztBQUMxQyxlQUFXLFFBQVEsZ0JBQWdCO0FBQ2pDLFVBQUksS0FBSyxlQUFlLElBQUksR0FBRztBQUM3QixhQUFLLFdBQVcsSUFBSSxJQUFJO0FBQUEsTUFDMUI7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUFBLEVBRVEsa0JBQXdCO0FBQzlCLFVBQU0sU0FBUyxLQUFLLFFBQVEsT0FBTyxDQUFDLFdBQVcsUUFBUSxRQUFRLEdBQUcsQ0FBQyxFQUFFO0FBQ3JFLFVBQU0sU0FBUyxLQUFLLFFBQVEsT0FBTyxDQUFDLFdBQVcsUUFBUSxRQUFRLEdBQUcsQ0FBQyxFQUFFO0FBRXJFLFFBQUk7QUFDSixRQUFJO0FBR0osWUFBUSxLQUFLLFVBQVU7QUFBQTtBQUFBLE1BRXJCLEtBQUssNkJBQTRDO0FBQy9DLHlCQUFpQixXQUFXLEtBQUssUUFBUTtBQUN6Qyx5QkFBaUIsV0FBVyxLQUFLLFFBQVE7QUFDekM7QUFBQSxNQUNGO0FBQUEsTUFDQSxLQUFLLHFCQUF3QztBQUMzQyxjQUFNLGVBQWUsV0FBVyxLQUFLLFFBQVE7QUFDN0MsY0FBTSxjQUFjLFdBQVc7QUFDL0IsY0FBTSxlQUFlLFdBQVcsS0FBSyxRQUFRO0FBQzdDLGNBQU0sY0FBYyxXQUFXO0FBRS9CLFlBQUksRUFBRSxnQkFBZ0IsZ0JBQWdCLEVBQUUsZ0JBQWdCLGNBQWM7QUFDcEUsZ0JBQU0sSUFBSSxNQUFNLDRDQUFnRDtBQUFBLFFBQ2xFO0FBRUEseUJBQWlCO0FBQ2pCLHlCQUFpQjtBQUNqQjtBQUFBLE1BQ0Y7QUFBQSxNQUNBLEtBQUsscUJBQXdDO0FBQzNDLHlCQUFpQixTQUFTO0FBQzFCLHlCQUFpQixTQUFTO0FBQzFCO0FBQUEsTUFDRjtBQUFBLE1BQ0EsU0FBUztBQUVQLG9CQUFZLEtBQUssUUFBUTtBQUFBLE1BQzNCO0FBQUEsSUFFRjtBQUVBLFFBQUksa0JBQWtCLGdCQUFnQjtBQUNwQyxhQUFPLEtBQUssYUFBYSxxQkFBd0Msa0RBQXNEO0FBQ3ZILHVCQUFpQjtBQUFBLElBQ25CO0FBRUEsUUFBSSxnQkFBZ0I7QUFDbEIsV0FBSyxXQUFXLElBQUksR0FBRztBQUFBLElBQ3pCO0FBQ0EsUUFBSSxnQkFBZ0I7QUFDbEIsV0FBSyxXQUFXLElBQUksR0FBRztBQUFBLElBQ3pCO0FBQUEsRUFDRjtBQUFBLEVBRVEsZUFBZSxNQUF1QjtBQUM1QyxVQUFNLFFBQVEsS0FBSyxRQUFRLE9BQU8sQ0FBQyxXQUFXLFFBQVEsUUFBUSxJQUFJLENBQUMsRUFBRTtBQUVyRSxZQUFRLEtBQUssVUFBVTtBQUFBO0FBQUEsTUFFckIsS0FBSyw2QkFBNEM7QUFDL0MsZUFBTyxVQUFVLEtBQUssUUFBUTtBQUFBLE1BQ2hDO0FBQUEsTUFDQSxLQUFLLHFCQUF3QztBQUMzQztBQUFBLE1BQ0Y7QUFBQSxNQUNBLEtBQUsscUJBQXdDO0FBQzNDLGVBQU8sUUFBUTtBQUFBLE1BQ2pCO0FBQUEsTUFDQSxTQUFTO0FBRVAsb0JBQVksS0FBSyxRQUFRO0FBQUEsTUFDM0I7QUFBQSxJQUVGO0FBRUEsVUFBTSxrQkFBa0IsVUFBVSxLQUFLLFVBQVUsS0FBSyxRQUFRO0FBQzlELFFBQUksQ0FBQyxpQkFBaUI7QUFDcEIsWUFBTSxJQUFJLE1BQU0scUJBQXFCLElBQUksb0JBQW9CO0FBQUEsSUFDL0Q7QUFDQSxXQUFPLFVBQVUsS0FBSyxRQUFRO0FBQUEsRUFDaEM7QUFDRjtBQVNPLFNBQVMsTUFDZCxTQUNBLFdBQTZDLHFCQUNyQztBQUNSLE1BQUksUUFBUSxXQUFXLEdBQUc7QUFDeEIsV0FBTztBQUFBLEVBQ1Q7QUFFQSxNQUFJLFFBQVEsV0FBVyxLQUFLLFFBQVEsQ0FBQyxNQUFNLFFBQVc7QUFDcEQsV0FBTyxRQUFRLENBQUM7QUFBQSxFQUNsQjtBQUVBLFFBQU0sU0FBUyxRQUFRLElBQUksQ0FBQyxXQUFXLE1BQU0sT0FBTyxNQUFNLEdBQUcsRUFBRSxLQUFLLEdBQUc7QUFDdkUsUUFBTSxRQUFRLElBQUksaUJBQWlCLFNBQVMsUUFBUSxFQUFFLGFBQWE7QUFDbkUsU0FBTyxJQUFJLE9BQU8sUUFBUSxLQUFLO0FBQ2pDOyIsCiAgIm5hbWVzIjogWyJSZWdFeHBNZXJnZUZsYWdzQ29uZmxpY3RTdHJhdGVneSJdCn0K
|