@mnaoumov/typescript-lib 0.0.0 → 1.0.1
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 +15 -1
- package/dist/lib/cjs/@types/debug.d.cts +21 -0
- package/dist/lib/cjs/abort-controller.cjs +144 -0
- package/dist/lib/cjs/abort-controller.d.cts +136 -0
- package/dist/lib/cjs/aggregate-error.cjs +40 -0
- package/dist/lib/cjs/aggregate-error.d.cts +24 -0
- package/dist/lib/cjs/array-buffer.cjs +38 -0
- package/dist/lib/cjs/array-buffer.d.cts +16 -0
- package/dist/lib/cjs/array.cjs +76 -0
- package/dist/lib/cjs/array.d.cts +46 -0
- package/dist/lib/cjs/async-events.cjs +408 -0
- package/dist/lib/cjs/async-events.d.cts +456 -0
- package/dist/lib/cjs/async-operation-hook.cjs +55 -0
- package/dist/lib/cjs/async-operation-hook.d.cts +59 -0
- package/dist/lib/cjs/async.cjs +463 -0
- package/dist/lib/cjs/async.d.cts +415 -0
- package/dist/lib/cjs/beeper.cjs +68 -0
- package/dist/lib/cjs/beeper.d.cts +21 -0
- package/dist/lib/cjs/blob.cjs +102 -0
- package/dist/lib/cjs/blob.d.cts +60 -0
- package/dist/lib/cjs/bytes.cjs +56 -0
- package/dist/lib/cjs/bytes.d.cts +17 -0
- package/dist/lib/cjs/debug-controller.cjs +22 -0
- package/dist/lib/cjs/debug-controller.d.cts +87 -0
- package/dist/lib/cjs/debug.cjs +204 -0
- package/dist/lib/cjs/debug.d.cts +66 -0
- package/dist/lib/cjs/desktop-zip-extractor.cjs +157 -0
- package/dist/lib/cjs/desktop-zip-extractor.d.cts +96 -0
- package/dist/lib/cjs/disposable.cjs +364 -0
- package/dist/lib/cjs/disposable.d.cts +387 -0
- package/dist/lib/cjs/enum.cjs +42 -0
- package/dist/lib/cjs/enum.d.cts +24 -0
- package/dist/lib/cjs/error.cjs +239 -0
- package/dist/lib/cjs/error.d.cts +182 -0
- package/dist/lib/cjs/function.cjs +83 -0
- package/dist/lib/cjs/function.d.cts +128 -0
- package/dist/lib/cjs/html-element.cjs +283 -0
- package/dist/lib/cjs/html-element.d.cts +200 -0
- package/dist/lib/cjs/index.cjs +137 -0
- package/dist/lib/cjs/index.d.cts +33 -0
- package/dist/lib/cjs/jpeg-metadata.cjs +170 -0
- package/dist/lib/cjs/jpeg-metadata.d.cts +42 -0
- package/dist/lib/cjs/library-references.d.cts +2 -0
- package/dist/lib/cjs/library.cjs +100 -0
- package/dist/lib/cjs/library.d.cts +96 -0
- package/dist/lib/cjs/object-utils.cjs +559 -0
- package/dist/lib/cjs/object-utils.d.cts +298 -0
- package/dist/lib/cjs/path.cjs +171 -0
- package/dist/lib/cjs/path.d.cts +155 -0
- package/dist/lib/cjs/reg-exp.cjs +196 -0
- package/dist/lib/cjs/reg-exp.d.cts +87 -0
- package/dist/lib/cjs/string.cjs +268 -0
- package/dist/lib/cjs/string.d.cts +362 -0
- package/dist/lib/cjs/transformers/date-transformer.cjs +71 -0
- package/dist/lib/cjs/transformers/date-transformer.d.cts +39 -0
- package/dist/lib/cjs/transformers/group-transformer.cjs +115 -0
- package/dist/lib/cjs/transformers/group-transformer.d.cts +70 -0
- package/dist/lib/cjs/transformers/index.cjs +65 -0
- package/dist/lib/cjs/transformers/index.d.cts +9 -0
- package/dist/lib/cjs/transformers/map-transformer.cjs +71 -0
- package/dist/lib/cjs/transformers/map-transformer.d.cts +41 -0
- package/dist/lib/cjs/transformers/set-transformer.cjs +71 -0
- package/dist/lib/cjs/transformers/set-transformer.d.cts +39 -0
- package/dist/lib/cjs/transformers/skip-private-property-transformer.cjs +69 -0
- package/dist/lib/cjs/transformers/skip-private-property-transformer.d.cts +36 -0
- package/dist/lib/cjs/transformers/transformer.cjs +112 -0
- package/dist/lib/cjs/transformers/transformer.d.cts +70 -0
- package/dist/lib/cjs/transformers/two-way-map-transformer.cjs +72 -0
- package/dist/lib/cjs/transformers/two-way-map-transformer.d.cts +42 -0
- package/dist/lib/cjs/transformers/typed-transformer.cjs +36 -0
- package/dist/lib/cjs/transformers/typed-transformer.d.cts +39 -0
- package/dist/lib/cjs/two-way-map.cjs +150 -0
- package/dist/lib/cjs/two-way-map.d.cts +101 -0
- package/dist/lib/cjs/type-guards.cjs +70 -0
- package/dist/lib/cjs/type-guards.d.cts +84 -0
- package/dist/lib/cjs/type.cjs +63 -0
- package/dist/lib/cjs/type.d.cts +122 -0
- package/dist/lib/cjs/typescript-lib-state.cjs +68 -0
- package/dist/lib/cjs/typescript-lib-state.d.cts +56 -0
- package/dist/lib/cjs/url.cjs +78 -0
- package/dist/lib/cjs/url.d.cts +74 -0
- package/dist/lib/cjs/value-provider.cjs +42 -0
- package/dist/lib/cjs/value-provider.d.cts +29 -0
- package/dist/lib/cjs/value-wrapper.cjs +86 -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 +136 -0
- package/dist/lib/esm/abort-controller.mjs +115 -0
- package/dist/lib/esm/aggregate-error.d.mts +24 -0
- package/dist/lib/esm/aggregate-error.mjs +16 -0
- package/dist/lib/esm/array-buffer.d.mts +16 -0
- package/dist/lib/esm/array-buffer.mjs +14 -0
- package/dist/lib/esm/array.d.mts +46 -0
- package/dist/lib/esm/array.mjs +49 -0
- package/dist/lib/esm/async-events.d.mts +456 -0
- package/dist/lib/esm/async-events.mjs +383 -0
- package/dist/lib/esm/async-operation-hook.d.mts +59 -0
- package/dist/lib/esm/async-operation-hook.mjs +27 -0
- package/dist/lib/esm/async.d.mts +415 -0
- package/dist/lib/esm/async.mjs +435 -0
- package/dist/lib/esm/beeper.d.mts +21 -0
- package/dist/lib/esm/beeper.mjs +44 -0
- package/dist/lib/esm/blob.d.mts +60 -0
- package/dist/lib/esm/blob.mjs +77 -0
- package/dist/lib/esm/bytes.d.mts +17 -0
- package/dist/lib/esm/bytes.mjs +32 -0
- package/dist/lib/esm/debug-controller.d.mts +87 -0
- package/dist/lib/esm/debug-controller.mjs +6 -0
- package/dist/lib/esm/debug.d.mts +66 -0
- package/dist/lib/esm/debug.mjs +168 -0
- package/dist/lib/esm/desktop-zip-extractor.d.mts +96 -0
- package/dist/lib/esm/desktop-zip-extractor.mjs +136 -0
- package/dist/lib/esm/disposable.d.mts +387 -0
- package/dist/lib/esm/disposable.mjs +324 -0
- package/dist/lib/esm/enum.d.mts +24 -0
- package/dist/lib/esm/enum.mjs +17 -0
- package/dist/lib/esm/error.d.mts +182 -0
- package/dist/lib/esm/error.mjs +204 -0
- package/dist/lib/esm/function.d.mts +128 -0
- package/dist/lib/esm/function.mjs +52 -0
- package/dist/lib/esm/html-element.d.mts +200 -0
- package/dist/lib/esm/html-element.mjs +247 -0
- package/dist/lib/esm/index.d.mts +33 -0
- package/dist/lib/esm/index.mjs +72 -0
- package/dist/lib/esm/jpeg-metadata.d.mts +42 -0
- package/dist/lib/esm/jpeg-metadata.mjs +145 -0
- package/dist/lib/esm/library-references.d.mts +2 -0
- package/dist/lib/esm/library.d.mts +96 -0
- package/dist/lib/esm/library.mjs +74 -0
- package/dist/lib/esm/object-utils.d.mts +298 -0
- package/dist/lib/esm/object-utils.mjs +523 -0
- package/dist/lib/esm/path.d.mts +155 -0
- package/dist/lib/esm/path.mjs +122 -0
- package/dist/lib/esm/reg-exp.d.mts +87 -0
- package/dist/lib/esm/reg-exp.mjs +169 -0
- package/dist/lib/esm/string.d.mts +362 -0
- package/dist/lib/esm/string.mjs +230 -0
- package/dist/lib/esm/transformers/date-transformer.d.mts +39 -0
- package/dist/lib/esm/transformers/date-transformer.mjs +47 -0
- package/dist/lib/esm/transformers/group-transformer.d.mts +70 -0
- package/dist/lib/esm/transformers/group-transformer.mjs +94 -0
- package/dist/lib/esm/transformers/index.d.mts +9 -0
- package/dist/lib/esm/transformers/index.mjs +24 -0
- package/dist/lib/esm/transformers/map-transformer.d.mts +41 -0
- package/dist/lib/esm/transformers/map-transformer.mjs +47 -0
- package/dist/lib/esm/transformers/set-transformer.d.mts +39 -0
- package/dist/lib/esm/transformers/set-transformer.mjs +47 -0
- package/dist/lib/esm/transformers/skip-private-property-transformer.d.mts +36 -0
- package/dist/lib/esm/transformers/skip-private-property-transformer.mjs +45 -0
- package/dist/lib/esm/transformers/transformer.d.mts +70 -0
- package/dist/lib/esm/transformers/transformer.mjs +88 -0
- package/dist/lib/esm/transformers/two-way-map-transformer.d.mts +42 -0
- package/dist/lib/esm/transformers/two-way-map-transformer.mjs +48 -0
- package/dist/lib/esm/transformers/typed-transformer.d.mts +39 -0
- package/dist/lib/esm/transformers/typed-transformer.mjs +12 -0
- package/dist/lib/esm/two-way-map.d.mts +101 -0
- package/dist/lib/esm/two-way-map.mjs +126 -0
- package/dist/lib/esm/type-guards.d.mts +84 -0
- package/dist/lib/esm/type-guards.mjs +41 -0
- package/dist/lib/esm/type.d.mts +122 -0
- package/dist/lib/esm/type.mjs +39 -0
- package/dist/lib/esm/typescript-lib-state.d.mts +56 -0
- package/dist/lib/esm/typescript-lib-state.mjs +40 -0
- package/dist/lib/esm/url.d.mts +74 -0
- package/dist/lib/esm/url.mjs +50 -0
- package/dist/lib/esm/value-provider.d.mts +29 -0
- package/dist/lib/esm/value-provider.mjs +18 -0
- package/dist/lib/esm/value-wrapper.d.mts +47 -0
- package/dist/lib/esm/value-wrapper.mjs +62 -0
- package/package.json +153 -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,122 @@
|
|
|
1
|
+
/// <reference path="./library-references.d.mts" />
|
|
2
|
+
/**
|
|
3
|
+
* @file
|
|
4
|
+
*
|
|
5
|
+
* Type utilities.
|
|
6
|
+
*/
|
|
7
|
+
import type { GenericFunction } from './function.mjs';
|
|
8
|
+
/**
|
|
9
|
+
* A type that represents the keys of an object as strings and asserts that all keys are present in a list of keys.
|
|
10
|
+
*
|
|
11
|
+
* @typeParam Type - The type of the object.
|
|
12
|
+
* @typeParam Keys - The list of keys to assert.
|
|
13
|
+
*/
|
|
14
|
+
export type ExactKeys<Type extends object, Keys extends readonly string[]> = ExactMembers<StringKeys<Type>, Keys>;
|
|
15
|
+
/**
|
|
16
|
+
* A type that represents the members of a type.
|
|
17
|
+
*
|
|
18
|
+
* @typeParam Type - The type to assert the members of.
|
|
19
|
+
* @typeParam Keys - The list of members to assert.
|
|
20
|
+
*/
|
|
21
|
+
export type ExactMembers<Type extends LiteralKey, Keys extends readonly LiteralKey[]> = Exclude<Keys[number], Type> extends never ? Exclude<Type, Keys[number]> extends never ? Duplicates<Keys> extends [] ? Keys : `ERROR: Duplicate members: ${TupleToCSV<Duplicates<Keys>>}` : `ERROR: Missing members: ${TupleToCSV<UnionToTuple<Exclude<Type, Keys[number]>>>}` : `ERROR: Invalid members: ${TupleToCSV<UnionToTuple<Exclude<Keys[number], Type>>>}`;
|
|
22
|
+
/**
|
|
23
|
+
* Derives an event map (`{ eventName: [callbackArgs] }`) from a type exposing an overloaded `on(name, callback)`
|
|
24
|
+
* method — e.g. Obsidian's `Workspace` / `Vault` / `MetadataCache`. Each `on` overload becomes one entry keyed by
|
|
25
|
+
* the event name, with the callback's parameters as a labeled tuple; the wide `on(name: string, …)` catch-all
|
|
26
|
+
* overload is dropped. The map auto-tracks upstream overloads (no hand-authoring). It cannot reconstruct
|
|
27
|
+
* genuinely generic overloads, but Obsidian's event overloads are all concrete string-literal ones.
|
|
28
|
+
*
|
|
29
|
+
* @typeParam T - A type exposing an `on(name, callback, …)` method (e.g. an Obsidian `Events` subclass).
|
|
30
|
+
*
|
|
31
|
+
* @example
|
|
32
|
+
* ```ts
|
|
33
|
+
* type WorkspaceEventMap = ExtractEventMap<Workspace>;
|
|
34
|
+
* // { 'file-menu': [menu: Menu, file: TAbstractFile, source: string, leaf?: WorkspaceLeaf]; … }
|
|
35
|
+
* ```
|
|
36
|
+
*/
|
|
37
|
+
export type ExtractEventMap<T extends EventsWithOn> = UnionToIntersection<EntryOfOverload<OverloadUnion<T['on']>>>;
|
|
38
|
+
/**
|
|
39
|
+
* A type that represents a return value that may be `void`.
|
|
40
|
+
*
|
|
41
|
+
* @typeParam T - The type of the value that may be returned.
|
|
42
|
+
*/
|
|
43
|
+
export type MaybeReturn<T> = T | void;
|
|
44
|
+
/**
|
|
45
|
+
* A type that represents the values of an object.
|
|
46
|
+
*
|
|
47
|
+
* @typeParam T - The type of the object.
|
|
48
|
+
*/
|
|
49
|
+
export type PropertyValues<T extends object> = T[StringKeys<T>];
|
|
50
|
+
/**
|
|
51
|
+
* A type that represents the keys of an object as strings.
|
|
52
|
+
*
|
|
53
|
+
* @typeParam T - The type of the object.
|
|
54
|
+
*/
|
|
55
|
+
export type StringKeys<T extends object> = Extract<keyof T, string>;
|
|
56
|
+
type Duplicates<T extends readonly unknown[], Seen extends readonly unknown[] = [], Added extends readonly unknown[] = [], Out extends readonly unknown[] = []> = T extends readonly [infer First, ...infer Rest] ? Includes<Seen, First> extends true ? Includes<Added, First> extends true ? Duplicates<Rest, Seen, Added, Out> : Duplicates<Rest, Seen, [...Added, First], [...Out, First]> : Duplicates<Rest, [...Seen, First], Added, Out> : Out;
|
|
57
|
+
type EntryOfOverload<TOverload> = TOverload extends (name: infer Name, callback: (...$arguments: infer Arguments) => unknown, ...rest: never[]) => unknown ? Name extends string ? string extends Name ? never : Record<Name, Arguments> : never : never;
|
|
58
|
+
type Equal<X, Y> = (<T>() => T extends X ? 1 : 2) extends (<T>() => T extends Y ? 1 : 2) ? true : false;
|
|
59
|
+
interface EventsWithOn {
|
|
60
|
+
on: GenericFunction;
|
|
61
|
+
}
|
|
62
|
+
type Includes<Type extends readonly unknown[], Member> = Type extends readonly [infer First, ...infer Rest] ? Equal<First, Member> extends true ? true : Includes<Rest, Member> : false;
|
|
63
|
+
type LastInUnion<Union> = UnionToIntersection<Union extends unknown ? () => Union : never> extends () => infer Last ? Last : never;
|
|
64
|
+
type LiteralKey = number | string;
|
|
65
|
+
type OverloadUnion<TOverload extends GenericFunction> = Exclude<OverloadUnionRecursive<(() => never) & TOverload>, TOverload extends () => never ? never : () => never>;
|
|
66
|
+
type OverloadUnionRecursive<TOverload, TPartialOverload = unknown> = TOverload extends (...$arguments: infer Arguments) => infer Return ? TPartialOverload extends TOverload ? never : OverloadUnionRecursive<TPartialOverload & TOverload, TPartialOverload & ((...$arguments: Arguments) => Return) & Pick<TOverload, keyof TOverload>> | ((...$arguments: Arguments) => Return) : never;
|
|
67
|
+
type ToString<T> = T extends number | string ? `${T}` : never;
|
|
68
|
+
type TupleToCSV<Tuple extends readonly unknown[]> = Tuple extends readonly [infer First, ...infer Rest] ? First extends LiteralKey ? Rest extends readonly unknown[] ? Rest['length'] extends 0 ? ToString<First> : `${ToString<First>},${TupleToCSV<Rest>}` : never : never : '';
|
|
69
|
+
/**
|
|
70
|
+
* Internal method shapes for {@link TypeAsserter}: a conditional type disables each method when the
|
|
71
|
+
* captured type does not support it.
|
|
72
|
+
*
|
|
73
|
+
* @typeParam Type - The captured type.
|
|
74
|
+
*/
|
|
75
|
+
interface TypeAssertions<Type> {
|
|
76
|
+
assertAllKeys: [Type] extends [object] ? <const Keys extends readonly string[]>(keys: ExactMembers<StringKeys<Type>, Keys>) => readonly (keyof Type)[] : never;
|
|
77
|
+
assertAllMembers: [Type] extends [LiteralKey] ? <const Keys extends readonly LiteralKey[]>(keys: ExactMembers<Type, Keys>) => readonly Type[] : never;
|
|
78
|
+
}
|
|
79
|
+
type UnionToIntersection<Union> = (Union extends unknown ? (key: Union) => void : never) extends (key: infer Intersection) => void ? Intersection : never;
|
|
80
|
+
type UnionToTuple<Union, Last = LastInUnion<Union>> = [Union] extends [never] ? [] : [...UnionToTuple<Exclude<Union, Last>>, Last];
|
|
81
|
+
/**
|
|
82
|
+
* A helper that captures a type parameter and provides methods for compile-time exhaustiveness checks.
|
|
83
|
+
*
|
|
84
|
+
* @typeParam Type - The captured type.
|
|
85
|
+
*
|
|
86
|
+
* @remarks
|
|
87
|
+
* - `assertAllKeys` is available when `Type` is an object type.
|
|
88
|
+
* - `assertAllMembers` is available when `Type` is a literal key union (`string | number`).
|
|
89
|
+
*
|
|
90
|
+
* @example
|
|
91
|
+
* ```ts
|
|
92
|
+
* type A = { a: 1, b: 2, c: 3 };
|
|
93
|
+
* new TypeAsserter<A>().assertAllKeys(['a', 'b', 'c']); // OK
|
|
94
|
+
* new TypeAsserter<A>().assertAllKeys(['c', 'a', 'b']); // OK, order is ignored
|
|
95
|
+
* new TypeAsserter<A>().assertAllKeys(['a', 'b', 'c', 'd']); // Error: Invalid members: d
|
|
96
|
+
* new TypeAsserter<A>().assertAllKeys(['a', 'b']); // Error: Missing members: c
|
|
97
|
+
*
|
|
98
|
+
* type B = 1 | 2 | 3 | 'a';
|
|
99
|
+
* new TypeAsserter<B>().assertAllMembers([1, 2, 3, 'a']); // OK
|
|
100
|
+
* new TypeAsserter<B>().assertAllMembers([1, 2, 3, 'a', 4]); // Error: Invalid members: 4
|
|
101
|
+
* new TypeAsserter<B>().assertAllMembers([1, 2, 3]); // Error: Missing members: a
|
|
102
|
+
* ```
|
|
103
|
+
*/
|
|
104
|
+
export declare class TypeAsserter<Type> {
|
|
105
|
+
/**
|
|
106
|
+
* Asserts that all keys of an object type are present in a list of keys.
|
|
107
|
+
*
|
|
108
|
+
* @remarks Only available when `[Type] extends [object]`.
|
|
109
|
+
*/
|
|
110
|
+
readonly assertAllKeys: TypeAssertions<Type>['assertAllKeys'];
|
|
111
|
+
/**
|
|
112
|
+
* Asserts that all members of a union type are present in a list of members.
|
|
113
|
+
*
|
|
114
|
+
* @remarks Only available when `[Type] extends [LiteralKey]`.
|
|
115
|
+
*/
|
|
116
|
+
readonly assertAllMembers: TypeAssertions<Type>['assertAllMembers'];
|
|
117
|
+
/**
|
|
118
|
+
* Creates a type asserter that captures {@link Type} for compile-time exhaustiveness checks.
|
|
119
|
+
*/
|
|
120
|
+
constructor();
|
|
121
|
+
}
|
|
122
|
+
export {};
|
|
@@ -0,0 +1,39 @@
|
|
|
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
|
+
import { castTo } from "./object-utils.mjs";
|
|
7
|
+
class TypeAsserter {
|
|
8
|
+
/**
|
|
9
|
+
* Asserts that all keys of an object type are present in a list of keys.
|
|
10
|
+
*
|
|
11
|
+
* @remarks Only available when `[Type] extends [object]`.
|
|
12
|
+
*/
|
|
13
|
+
assertAllKeys;
|
|
14
|
+
/**
|
|
15
|
+
* Asserts that all members of a union type are present in a list of members.
|
|
16
|
+
*
|
|
17
|
+
* @remarks Only available when `[Type] extends [LiteralKey]`.
|
|
18
|
+
*/
|
|
19
|
+
assertAllMembers;
|
|
20
|
+
/**
|
|
21
|
+
* Creates a type asserter that captures {@link Type} for compile-time exhaustiveness checks.
|
|
22
|
+
*/
|
|
23
|
+
constructor() {
|
|
24
|
+
const assertions = castTo({
|
|
25
|
+
assertAllKeys(keys) {
|
|
26
|
+
return Object.freeze(Array.from(keys));
|
|
27
|
+
},
|
|
28
|
+
assertAllMembers(keys) {
|
|
29
|
+
return Object.freeze(Array.from(keys));
|
|
30
|
+
}
|
|
31
|
+
});
|
|
32
|
+
this.assertAllKeys = assertions.assertAllKeys;
|
|
33
|
+
this.assertAllMembers = assertions.assertAllMembers;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
export {
|
|
37
|
+
TypeAsserter
|
|
38
|
+
};
|
|
39
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL3R5cGUudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBUeXBlIHV0aWxpdGllcy5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IEdlbmVyaWNGdW5jdGlvbiB9IGZyb20gJy4vZnVuY3Rpb24udHMnO1xuXG5pbXBvcnQgeyBjYXN0VG8gfSBmcm9tICcuL29iamVjdC11dGlscy50cyc7XG5cbi8qKlxuICogQSB0eXBlIHRoYXQgcmVwcmVzZW50cyB0aGUga2V5cyBvZiBhbiBvYmplY3QgYXMgc3RyaW5ncyBhbmQgYXNzZXJ0cyB0aGF0IGFsbCBrZXlzIGFyZSBwcmVzZW50IGluIGEgbGlzdCBvZiBrZXlzLlxuICpcbiAqIEB0eXBlUGFyYW0gVHlwZSAtIFRoZSB0eXBlIG9mIHRoZSBvYmplY3QuXG4gKiBAdHlwZVBhcmFtIEtleXMgLSBUaGUgbGlzdCBvZiBrZXlzIHRvIGFzc2VydC5cbiAqL1xuZXhwb3J0IHR5cGUgRXhhY3RLZXlzPFR5cGUgZXh0ZW5kcyBvYmplY3QsIEtleXMgZXh0ZW5kcyByZWFkb25seSBzdHJpbmdbXT4gPSBFeGFjdE1lbWJlcnM8U3RyaW5nS2V5czxUeXBlPiwgS2V5cz47XG5cbi8qKlxuICogQSB0eXBlIHRoYXQgcmVwcmVzZW50cyB0aGUgbWVtYmVycyBvZiBhIHR5cGUuXG4gKlxuICogQHR5cGVQYXJhbSBUeXBlIC0gVGhlIHR5cGUgdG8gYXNzZXJ0IHRoZSBtZW1iZXJzIG9mLlxuICogQHR5cGVQYXJhbSBLZXlzIC0gVGhlIGxpc3Qgb2YgbWVtYmVycyB0byBhc3NlcnQuXG4gKi9cbmV4cG9ydCB0eXBlIEV4YWN0TWVtYmVyczxcbiAgVHlwZSBleHRlbmRzIExpdGVyYWxLZXksXG4gIEtleXMgZXh0ZW5kcyByZWFkb25seSBMaXRlcmFsS2V5W11cbj4gPSBFeGNsdWRlPEtleXNbbnVtYmVyXSwgVHlwZT4gZXh0ZW5kcyBuZXZlciA/IEV4Y2x1ZGU8VHlwZSwgS2V5c1tudW1iZXJdPiBleHRlbmRzIG5ldmVyID8gRHVwbGljYXRlczxLZXlzPiBleHRlbmRzIFtdID8gS2V5c1xuICAgIDogYEVSUk9SOiBEdXBsaWNhdGUgbWVtYmVyczogJHtUdXBsZVRvQ1NWPER1cGxpY2F0ZXM8S2V5cz4+fWBcbiAgOiBgRVJST1I6IE1pc3NpbmcgbWVtYmVyczogJHtUdXBsZVRvQ1NWPFVuaW9uVG9UdXBsZTxFeGNsdWRlPFR5cGUsIEtleXNbbnVtYmVyXT4+Pn1gXG4gIDogYEVSUk9SOiBJbnZhbGlkIG1lbWJlcnM6ICR7VHVwbGVUb0NTVjxVbmlvblRvVHVwbGU8RXhjbHVkZTxLZXlzW251bWJlcl0sIFR5cGU+Pj59YDtcblxuLyoqXG4gKiBEZXJpdmVzIGFuIGV2ZW50IG1hcCAoYHsgZXZlbnROYW1lOiBbY2FsbGJhY2tBcmdzXSB9YCkgZnJvbSBhIHR5cGUgZXhwb3NpbmcgYW4gb3ZlcmxvYWRlZCBgb24obmFtZSwgY2FsbGJhY2spYFxuICogbWV0aG9kIFx1MjAxNCBlLmcuIE9ic2lkaWFuJ3MgYFdvcmtzcGFjZWAgLyBgVmF1bHRgIC8gYE1ldGFkYXRhQ2FjaGVgLiBFYWNoIGBvbmAgb3ZlcmxvYWQgYmVjb21lcyBvbmUgZW50cnkga2V5ZWQgYnlcbiAqIHRoZSBldmVudCBuYW1lLCB3aXRoIHRoZSBjYWxsYmFjaydzIHBhcmFtZXRlcnMgYXMgYSBsYWJlbGVkIHR1cGxlOyB0aGUgd2lkZSBgb24obmFtZTogc3RyaW5nLCBcdTIwMjYpYCBjYXRjaC1hbGxcbiAqIG92ZXJsb2FkIGlzIGRyb3BwZWQuIFRoZSBtYXAgYXV0by10cmFja3MgdXBzdHJlYW0gb3ZlcmxvYWRzIChubyBoYW5kLWF1dGhvcmluZykuIEl0IGNhbm5vdCByZWNvbnN0cnVjdFxuICogZ2VudWluZWx5IGdlbmVyaWMgb3ZlcmxvYWRzLCBidXQgT2JzaWRpYW4ncyBldmVudCBvdmVybG9hZHMgYXJlIGFsbCBjb25jcmV0ZSBzdHJpbmctbGl0ZXJhbCBvbmVzLlxuICpcbiAqIEB0eXBlUGFyYW0gVCAtIEEgdHlwZSBleHBvc2luZyBhbiBgb24obmFtZSwgY2FsbGJhY2ssIFx1MjAyNilgIG1ldGhvZCAoZS5nLiBhbiBPYnNpZGlhbiBgRXZlbnRzYCBzdWJjbGFzcykuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiB0eXBlIFdvcmtzcGFjZUV2ZW50TWFwID0gRXh0cmFjdEV2ZW50TWFwPFdvcmtzcGFjZT47XG4gKiAvLyB7ICdmaWxlLW1lbnUnOiBbbWVudTogTWVudSwgZmlsZTogVEFic3RyYWN0RmlsZSwgc291cmNlOiBzdHJpbmcsIGxlYWY/OiBXb3Jrc3BhY2VMZWFmXTsgXHUyMDI2IH1cbiAqIGBgYFxuICovXG5leHBvcnQgdHlwZSBFeHRyYWN0RXZlbnRNYXA8VCBleHRlbmRzIEV2ZW50c1dpdGhPbj4gPSBVbmlvblRvSW50ZXJzZWN0aW9uPEVudHJ5T2ZPdmVybG9hZDxPdmVybG9hZFVuaW9uPFRbJ29uJ10+Pj47XG5cbi8qKlxuICogQSB0eXBlIHRoYXQgcmVwcmVzZW50cyBhIHJldHVybiB2YWx1ZSB0aGF0IG1heSBiZSBgdm9pZGAuXG4gKlxuICogQHR5cGVQYXJhbSBUIC0gVGhlIHR5cGUgb2YgdGhlIHZhbHVlIHRoYXQgbWF5IGJlIHJldHVybmVkLlxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWludmFsaWQtdm9pZC10eXBlIC0tIFdlIG5lZWQgdG8gdXNlIHRoZSBgdm9pZGAgcmV0dXJuIHR5cGUuXG5leHBvcnQgdHlwZSBNYXliZVJldHVybjxUPiA9IFQgfCB2b2lkO1xuXG4vKipcbiAqIEEgdHlwZSB0aGF0IHJlcHJlc2VudHMgdGhlIHZhbHVlcyBvZiBhbiBvYmplY3QuXG4gKlxuICogQHR5cGVQYXJhbSBUIC0gVGhlIHR5cGUgb2YgdGhlIG9iamVjdC5cbiAqL1xuZXhwb3J0IHR5cGUgUHJvcGVydHlWYWx1ZXM8VCBleHRlbmRzIG9iamVjdD4gPSBUW1N0cmluZ0tleXM8VD5dO1xuXG4vKipcbiAqIEEgdHlwZSB0aGF0IHJlcHJlc2VudHMgdGhlIGtleXMgb2YgYW4gb2JqZWN0IGFzIHN0cmluZ3MuXG4gKlxuICogQHR5cGVQYXJhbSBUIC0gVGhlIHR5cGUgb2YgdGhlIG9iamVjdC5cbiAqL1xuZXhwb3J0IHR5cGUgU3RyaW5nS2V5czxUIGV4dGVuZHMgb2JqZWN0PiA9IEV4dHJhY3Q8a2V5b2YgVCwgc3RyaW5nPjtcblxudHlwZSBEdXBsaWNhdGVzPFxuICBUIGV4dGVuZHMgcmVhZG9ubHkgdW5rbm93bltdLFxuICBTZWVuIGV4dGVuZHMgcmVhZG9ubHkgdW5rbm93bltdID0gW10sXG4gIEFkZGVkIGV4dGVuZHMgcmVhZG9ubHkgdW5rbm93bltdID0gW10sXG4gIE91dCBleHRlbmRzIHJlYWRvbmx5IHVua25vd25bXSA9IFtdXG4+ID0gVCBleHRlbmRzIHJlYWRvbmx5IFtpbmZlciBGaXJzdCwgLi4uaW5mZXIgUmVzdF0gPyBJbmNsdWRlczxTZWVuLCBGaXJzdD4gZXh0ZW5kcyB0cnVlID8gSW5jbHVkZXM8QWRkZWQsIEZpcnN0PiBleHRlbmRzIHRydWUgPyBEdXBsaWNhdGVzPFJlc3QsIFNlZW4sIEFkZGVkLCBPdXQ+XG4gICAgOiBEdXBsaWNhdGVzPFJlc3QsIFNlZW4sIFsuLi5BZGRlZCwgRmlyc3RdLCBbLi4uT3V0LCBGaXJzdF0+XG4gIDogRHVwbGljYXRlczxSZXN0LCBbLi4uU2VlbiwgRmlyc3RdLCBBZGRlZCwgT3V0PlxuICA6IE91dDtcblxuLy8gTWFwcyBvbmUgYG9uKG5hbWUsIGNhbGxiYWNrLCBcdTIwMjYpYCBvdmVybG9hZCB0byBhIGB7IFtuYW1lXTogW2NhbGxiYWNrQXJnc10gfWAgZW50cnk7IGRyb3BzIHRoZSB3aWRlIGBuYW1lOiBzdHJpbmdgIGNhdGNoLWFsbC5cbnR5cGUgRW50cnlPZk92ZXJsb2FkPFRPdmVybG9hZD4gPSBUT3ZlcmxvYWQgZXh0ZW5kcyAobmFtZTogaW5mZXIgTmFtZSwgY2FsbGJhY2s6ICguLi4kYXJndW1lbnRzOiBpbmZlciBBcmd1bWVudHMpID0+IHVua25vd24sIC4uLnJlc3Q6IG5ldmVyW10pID0+IHVua25vd24gPyBOYW1lIGV4dGVuZHMgc3RyaW5nID8gc3RyaW5nIGV4dGVuZHMgTmFtZSA/IG5ldmVyIDogUmVjb3JkPE5hbWUsIEFyZ3VtZW50cz5cbiAgOiBuZXZlclxuICA6IG5ldmVyO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVubmVjZXNzYXJ5LXR5cGUtcGFyYW1ldGVycyxuby1tYWdpYy1udW1iZXJzIC0tIFdlIG5lZWQgdG8gdXNlIHRoZSBkdW1teSBwYXJhbWV0ZXIgdG8gZ2V0IHR5cGUgaW5mZXJlbmNlLlxudHlwZSBFcXVhbDxYLCBZPiA9ICg8VD4oKSA9PiBUIGV4dGVuZHMgWCA/IDEgOiAyKSBleHRlbmRzICg8VD4oKSA9PiBUIGV4dGVuZHMgWSA/IDEgOiAyKSA/IHRydWUgOiBmYWxzZTtcblxuLy8gVGhlIG1pbmltYWwgc2hhcGUge0BsaW5rIEV4dHJhY3RFdmVudE1hcH0gb3BlcmF0ZXMgb246IGEgdHlwZSBleHBvc2luZyBhbiBvdmVybG9hZGVkIGBvbmAgbWV0aG9kLlxuaW50ZXJmYWNlIEV2ZW50c1dpdGhPbiB7XG4gIG9uOiBHZW5lcmljRnVuY3Rpb247XG59XG5cbnR5cGUgSW5jbHVkZXM8VHlwZSBleHRlbmRzIHJlYWRvbmx5IHVua25vd25bXSwgTWVtYmVyPiA9IFR5cGUgZXh0ZW5kcyByZWFkb25seSBbaW5mZXIgRmlyc3QsIC4uLmluZmVyIFJlc3RdID8gRXF1YWw8Rmlyc3QsIE1lbWJlcj4gZXh0ZW5kcyB0cnVlID8gdHJ1ZSA6IEluY2x1ZGVzPFJlc3QsIE1lbWJlcj5cbiAgOiBmYWxzZTtcblxudHlwZSBMYXN0SW5VbmlvbjxVbmlvbj4gPSBVbmlvblRvSW50ZXJzZWN0aW9uPFVuaW9uIGV4dGVuZHMgdW5rbm93biA/ICgpID0+IFVuaW9uIDogbmV2ZXI+IGV4dGVuZHMgKCkgPT4gaW5mZXIgTGFzdCA/IExhc3QgOiBuZXZlcjtcblxudHlwZSBMaXRlcmFsS2V5ID0gbnVtYmVyIHwgc3RyaW5nO1xuXG4vLyBTcGxpdHMgYW4gb3ZlcmxvYWRlZCBjYWxsIHNpZ25hdHVyZSBpbnRvIGEgdW5pb24gb2YgaXRzIGluZGl2aWR1YWwgY2FsbCBzaWduYXR1cmVzIChhIHdlbGwta25vd24gb3ZlcmxvYWQtdG8tdW5pb24gdHJpY2spLlxuLyogZXNsaW50LWRpc2FibGUgcGVyZmVjdGlvbmlzdC9zb3J0LWludGVyc2VjdGlvbi10eXBlcywgcGVyZmVjdGlvbmlzdC9zb3J0LXVuaW9uLXR5cGVzLCBAc3R5bGlzdGljL29wZXJhdG9yLWxpbmVicmVhayAtLSBUaGUgT3ZlcmxvYWRVbmlvbiByZWN1cnNpb24gcmVsaWVzIG9uIHRoaXMgZXhhY3Qgb3BlcmFuZCBvcmRlcjsgcmVvcmRlcmluZyBicmVha3MgdGVybWluYXRpb24gKFRTMjU4OSksIGFuZCB0aGUgbGluZS1icmVhayBzaGFwZSBpcyBsZWZ0IHRvIGRwcmludC4gKi9cbnR5cGUgT3ZlcmxvYWRVbmlvbjxUT3ZlcmxvYWQgZXh0ZW5kcyBHZW5lcmljRnVuY3Rpb24+ID0gRXhjbHVkZTxcbiAgT3ZlcmxvYWRVbmlvblJlY3Vyc2l2ZTwoKCkgPT4gbmV2ZXIpICYgVE92ZXJsb2FkPixcbiAgVE92ZXJsb2FkIGV4dGVuZHMgKCkgPT4gbmV2ZXIgPyBuZXZlciA6ICgpID0+IG5ldmVyXG4+O1xuXG50eXBlIE92ZXJsb2FkVW5pb25SZWN1cnNpdmU8VE92ZXJsb2FkLCBUUGFydGlhbE92ZXJsb2FkID0gdW5rbm93bj4gPSBUT3ZlcmxvYWQgZXh0ZW5kcyAoLi4uJGFyZ3VtZW50czogaW5mZXIgQXJndW1lbnRzKSA9PiBpbmZlciBSZXR1cm4gPyBUUGFydGlhbE92ZXJsb2FkIGV4dGVuZHMgVE92ZXJsb2FkID8gbmV2ZXJcbiAgOlxuICAgIHwgT3ZlcmxvYWRVbmlvblJlY3Vyc2l2ZTxUUGFydGlhbE92ZXJsb2FkICYgVE92ZXJsb2FkLCBUUGFydGlhbE92ZXJsb2FkICYgKCguLi4kYXJndW1lbnRzOiBBcmd1bWVudHMpID0+IFJldHVybikgJiBQaWNrPFRPdmVybG9hZCwga2V5b2YgVE92ZXJsb2FkPj5cbiAgICB8ICgoLi4uJGFyZ3VtZW50czogQXJndW1lbnRzKSA9PiBSZXR1cm4pXG4gIDogbmV2ZXI7XG4vKiBlc2xpbnQtZW5hYmxlIHBlcmZlY3Rpb25pc3Qvc29ydC1pbnRlcnNlY3Rpb24tdHlwZXMsIHBlcmZlY3Rpb25pc3Qvc29ydC11bmlvbi10eXBlcywgQHN0eWxpc3RpYy9vcGVyYXRvci1saW5lYnJlYWsgLS0gVGhlIE92ZXJsb2FkVW5pb24gcmVjdXJzaW9uIHJlbGllcyBvbiB0aGlzIGV4YWN0IG9wZXJhbmQgb3JkZXI7IHJlb3JkZXJpbmcgYnJlYWtzIHRlcm1pbmF0aW9uIChUUzI1ODkpLCBhbmQgdGhlIGxpbmUtYnJlYWsgc2hhcGUgaXMgbGVmdCB0byBkcHJpbnQuICovXG5cbnR5cGUgVG9TdHJpbmc8VD4gPSBUIGV4dGVuZHMgbnVtYmVyIHwgc3RyaW5nID8gYCR7VH1gIDogbmV2ZXI7XG5cbnR5cGUgVHVwbGVUb0NTVjxUdXBsZSBleHRlbmRzIHJlYWRvbmx5IHVua25vd25bXT4gPSBUdXBsZSBleHRlbmRzIHJlYWRvbmx5IFtpbmZlciBGaXJzdCwgLi4uaW5mZXIgUmVzdF0gPyBGaXJzdCBleHRlbmRzIExpdGVyYWxLZXkgPyBSZXN0IGV4dGVuZHMgcmVhZG9ubHkgdW5rbm93bltdID8gUmVzdFsnbGVuZ3RoJ10gZXh0ZW5kcyAwID8gVG9TdHJpbmc8Rmlyc3Q+IDogYCR7VG9TdHJpbmc8Rmlyc3Q+fSwke1R1cGxlVG9DU1Y8UmVzdD59YFxuICAgIDogbmV2ZXJcbiAgOiBuZXZlclxuICA6ICcnO1xuXG4vKipcbiAqIEludGVybmFsIG1ldGhvZCBzaGFwZXMgZm9yIHtAbGluayBUeXBlQXNzZXJ0ZXJ9OiBhIGNvbmRpdGlvbmFsIHR5cGUgZGlzYWJsZXMgZWFjaCBtZXRob2Qgd2hlbiB0aGVcbiAqIGNhcHR1cmVkIHR5cGUgZG9lcyBub3Qgc3VwcG9ydCBpdC5cbiAqXG4gKiBAdHlwZVBhcmFtIFR5cGUgLSBUaGUgY2FwdHVyZWQgdHlwZS5cbiAqL1xuaW50ZXJmYWNlIFR5cGVBc3NlcnRpb25zPFR5cGU+IHtcbiAgYXNzZXJ0QWxsS2V5czogW1R5cGVdIGV4dGVuZHMgW29iamVjdF0gPyA8Y29uc3QgS2V5cyBleHRlbmRzIHJlYWRvbmx5IHN0cmluZ1tdPihcbiAgICAgIGtleXM6IEV4YWN0TWVtYmVyczxTdHJpbmdLZXlzPFR5cGU+LCBLZXlzPlxuICAgICkgPT4gcmVhZG9ubHkgKGtleW9mIFR5cGUpW11cbiAgICA6IG5ldmVyO1xuICBhc3NlcnRBbGxNZW1iZXJzOiBbVHlwZV0gZXh0ZW5kcyBbTGl0ZXJhbEtleV0gPyA8Y29uc3QgS2V5cyBleHRlbmRzIHJlYWRvbmx5IExpdGVyYWxLZXlbXT4oXG4gICAgICBrZXlzOiBFeGFjdE1lbWJlcnM8VHlwZSwgS2V5cz5cbiAgICApID0+IHJlYWRvbmx5IFR5cGVbXVxuICAgIDogbmV2ZXI7XG59XG5cbnR5cGUgVW5pb25Ub0ludGVyc2VjdGlvbjxVbmlvbj4gPSAoVW5pb24gZXh0ZW5kcyB1bmtub3duID8gKGtleTogVW5pb24pID0+IHZvaWQgOiBuZXZlcikgZXh0ZW5kcyAoa2V5OiBpbmZlciBJbnRlcnNlY3Rpb24pID0+IHZvaWQgPyBJbnRlcnNlY3Rpb24gOiBuZXZlcjtcblxudHlwZSBVbmlvblRvVHVwbGU8VW5pb24sIExhc3QgPSBMYXN0SW5VbmlvbjxVbmlvbj4+ID0gW1VuaW9uXSBleHRlbmRzIFtuZXZlcl0gPyBbXSA6IFsuLi5VbmlvblRvVHVwbGU8RXhjbHVkZTxVbmlvbiwgTGFzdD4+LCBMYXN0XTtcblxuLyoqXG4gKiBBIGhlbHBlciB0aGF0IGNhcHR1cmVzIGEgdHlwZSBwYXJhbWV0ZXIgYW5kIHByb3ZpZGVzIG1ldGhvZHMgZm9yIGNvbXBpbGUtdGltZSBleGhhdXN0aXZlbmVzcyBjaGVja3MuXG4gKlxuICogQHR5cGVQYXJhbSBUeXBlIC0gVGhlIGNhcHR1cmVkIHR5cGUuXG4gKlxuICogQHJlbWFya3NcbiAqIC0gYGFzc2VydEFsbEtleXNgIGlzIGF2YWlsYWJsZSB3aGVuIGBUeXBlYCBpcyBhbiBvYmplY3QgdHlwZS5cbiAqIC0gYGFzc2VydEFsbE1lbWJlcnNgIGlzIGF2YWlsYWJsZSB3aGVuIGBUeXBlYCBpcyBhIGxpdGVyYWwga2V5IHVuaW9uIChgc3RyaW5nIHwgbnVtYmVyYCkuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiB0eXBlIEEgPSB7IGE6IDEsIGI6IDIsIGM6IDMgfTtcbiAqIG5ldyBUeXBlQXNzZXJ0ZXI8QT4oKS5hc3NlcnRBbGxLZXlzKFsnYScsICdiJywgJ2MnXSk7IC8vIE9LXG4gKiBuZXcgVHlwZUFzc2VydGVyPEE+KCkuYXNzZXJ0QWxsS2V5cyhbJ2MnLCAnYScsICdiJ10pOyAvLyBPSywgb3JkZXIgaXMgaWdub3JlZFxuICogbmV3IFR5cGVBc3NlcnRlcjxBPigpLmFzc2VydEFsbEtleXMoWydhJywgJ2InLCAnYycsICdkJ10pOyAvLyBFcnJvcjogSW52YWxpZCBtZW1iZXJzOiBkXG4gKiBuZXcgVHlwZUFzc2VydGVyPEE+KCkuYXNzZXJ0QWxsS2V5cyhbJ2EnLCAnYiddKTsgLy8gRXJyb3I6IE1pc3NpbmcgbWVtYmVyczogY1xuICpcbiAqIHR5cGUgQiA9IDEgfCAyIHwgMyB8ICdhJztcbiAqIG5ldyBUeXBlQXNzZXJ0ZXI8Qj4oKS5hc3NlcnRBbGxNZW1iZXJzKFsxLCAyLCAzLCAnYSddKTsgLy8gT0tcbiAqIG5ldyBUeXBlQXNzZXJ0ZXI8Qj4oKS5hc3NlcnRBbGxNZW1iZXJzKFsxLCAyLCAzLCAnYScsIDRdKTsgLy8gRXJyb3I6IEludmFsaWQgbWVtYmVyczogNFxuICogbmV3IFR5cGVBc3NlcnRlcjxCPigpLmFzc2VydEFsbE1lbWJlcnMoWzEsIDIsIDNdKTsgLy8gRXJyb3I6IE1pc3NpbmcgbWVtYmVyczogYVxuICogYGBgXG4gKi9cbmV4cG9ydCBjbGFzcyBUeXBlQXNzZXJ0ZXI8VHlwZT4ge1xuICAvKipcbiAgICogQXNzZXJ0cyB0aGF0IGFsbCBrZXlzIG9mIGFuIG9iamVjdCB0eXBlIGFyZSBwcmVzZW50IGluIGEgbGlzdCBvZiBrZXlzLlxuICAgKlxuICAgKiBAcmVtYXJrcyBPbmx5IGF2YWlsYWJsZSB3aGVuIGBbVHlwZV0gZXh0ZW5kcyBbb2JqZWN0XWAuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgYXNzZXJ0QWxsS2V5czogVHlwZUFzc2VydGlvbnM8VHlwZT5bJ2Fzc2VydEFsbEtleXMnXTtcblxuICAvKipcbiAgICogQXNzZXJ0cyB0aGF0IGFsbCBtZW1iZXJzIG9mIGEgdW5pb24gdHlwZSBhcmUgcHJlc2VudCBpbiBhIGxpc3Qgb2YgbWVtYmVycy5cbiAgICpcbiAgICogQHJlbWFya3MgT25seSBhdmFpbGFibGUgd2hlbiBgW1R5cGVdIGV4dGVuZHMgW0xpdGVyYWxLZXldYC5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBhc3NlcnRBbGxNZW1iZXJzOiBUeXBlQXNzZXJ0aW9uczxUeXBlPlsnYXNzZXJ0QWxsTWVtYmVycyddO1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgdHlwZSBhc3NlcnRlciB0aGF0IGNhcHR1cmVzIHtAbGluayBUeXBlfSBmb3IgY29tcGlsZS10aW1lIGV4aGF1c3RpdmVuZXNzIGNoZWNrcy5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBhc3NlcnRpb25zID0gY2FzdFRvPFR5cGVBc3NlcnRpb25zPFR5cGU+Pih7XG4gICAgICBhc3NlcnRBbGxLZXlzPGNvbnN0IEtleXMgZXh0ZW5kcyByZWFkb25seSBzdHJpbmdbXT4oXG4gICAgICAgIGtleXM6IEV4YWN0TWVtYmVyczxTdHJpbmdLZXlzPG9iamVjdCAmIFR5cGU+LCBLZXlzPlxuICAgICAgKTogcmVhZG9ubHkgKGtleW9mIChvYmplY3QgJiBUeXBlKSlbXSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB1bmljb3JuL3ByZWZlci1zcHJlYWQgLS0gYFR5cGVgIG1heSBiZSBhIHN0cmluZywgYW5kIHNwcmVhZGluZyBvbmUgc3BsaXRzIHN1cnJvZ2F0ZSBwYWlycyAoYEB0eXBlc2NyaXB0LWVzbGludC9uby1taXN1c2VkLXNwcmVhZGApLlxuICAgICAgICByZXR1cm4gT2JqZWN0LmZyZWV6ZShBcnJheS5mcm9tKGtleXMpIGFzIChrZXlvZiAob2JqZWN0ICYgVHlwZSkpW10pO1xuICAgICAgfSxcbiAgICAgIGFzc2VydEFsbE1lbWJlcnM8Y29uc3QgS2V5cyBleHRlbmRzIHJlYWRvbmx5IExpdGVyYWxLZXlbXT4oXG4gICAgICAgIGtleXM6IEV4YWN0TWVtYmVyczxMaXRlcmFsS2V5ICYgVHlwZSwgS2V5cz5cbiAgICAgICk6IHJlYWRvbmx5IChMaXRlcmFsS2V5ICYgVHlwZSlbXSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB1bmljb3JuL3ByZWZlci1zcHJlYWQgLS0gYFR5cGVgIG1heSBiZSBhIHN0cmluZywgYW5kIHNwcmVhZGluZyBvbmUgc3BsaXRzIHN1cnJvZ2F0ZSBwYWlycyAoYEB0eXBlc2NyaXB0LWVzbGludC9uby1taXN1c2VkLXNwcmVhZGApLlxuICAgICAgICByZXR1cm4gT2JqZWN0LmZyZWV6ZShBcnJheS5mcm9tKGtleXMpIGFzIChMaXRlcmFsS2V5ICYgVHlwZSlbXSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5hc3NlcnRBbGxLZXlzID0gYXNzZXJ0aW9ucy5hc3NlcnRBbGxLZXlzO1xuICAgIHRoaXMuYXNzZXJ0QWxsTWVtYmVycyA9IGFzc2VydGlvbnMuYXNzZXJ0QWxsTWVtYmVycztcbiAgfVxufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7QUFRQSxTQUFTLGNBQWM7QUE4SmhCLE1BQU0sYUFBbUI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFNZDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU9BO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFLVCxjQUFjO0FBQ25CLFVBQU0sYUFBYSxPQUE2QjtBQUFBLE1BQzlDLGNBQ0UsTUFDb0M7QUFFcEMsZUFBTyxPQUFPLE9BQU8sTUFBTSxLQUFLLElBQUksQ0FBOEI7QUFBQSxNQUNwRTtBQUFBLE1BQ0EsaUJBQ0UsTUFDZ0M7QUFFaEMsZUFBTyxPQUFPLE9BQU8sTUFBTSxLQUFLLElBQUksQ0FBMEI7QUFBQSxNQUNoRTtBQUFBLElBQ0YsQ0FBQztBQUNELFNBQUssZ0JBQWdCLFdBQVc7QUFDaEMsU0FBSyxtQkFBbUIsV0FBVztBQUFBLEVBQ3JDO0FBQ0Y7IiwKICAibmFtZXMiOiBbXQp9Cg==
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/// <reference path="./library-references.d.mts" />
|
|
2
|
+
/**
|
|
3
|
+
* @file
|
|
4
|
+
*
|
|
5
|
+
* Provides access to the process-wide shared-state bag of the generic, non-Obsidian part of the library.
|
|
6
|
+
*
|
|
7
|
+
* The bag lives on `globalThis` under a `Symbol.for` key, so every copy of this module loaded in one realm shares
|
|
8
|
+
* it, whichever version it is. It holds what must exist once per realm: the debuggers, the `debug` instance and the
|
|
9
|
+
* shared abort controller. Obsidian-specific state stays in `obsidian-dev-utils-state.ts`.
|
|
10
|
+
*
|
|
11
|
+
* The slot is a cross-version wire format: its key and the {@link TypescriptLibStateSlot} shape only ever change
|
|
12
|
+
* additively.
|
|
13
|
+
*/
|
|
14
|
+
import { ValueWrapper } from './value-wrapper.mjs';
|
|
15
|
+
/**
|
|
16
|
+
* The version of the {@link TypescriptLibStateSlot} shape this copy writes.
|
|
17
|
+
*/
|
|
18
|
+
export declare const TYPESCRIPT_LIB_STATE_VERSION = 1;
|
|
19
|
+
/**
|
|
20
|
+
* The key of the global slot holding the {@link TypescriptLibStateSlot}.
|
|
21
|
+
*/
|
|
22
|
+
export declare const TYPESCRIPT_LIB_STATE_KEY: unique symbol;
|
|
23
|
+
/**
|
|
24
|
+
* The shared-state slot stored on `globalThis`.
|
|
25
|
+
*/
|
|
26
|
+
export interface TypescriptLibStateSlot {
|
|
27
|
+
/**
|
|
28
|
+
* The shared values, each in a {@link ValueWrapper} so a holder can replace the value in place.
|
|
29
|
+
*/
|
|
30
|
+
readonly values: Record<string, ValueWrapper>;
|
|
31
|
+
/**
|
|
32
|
+
* The version of the slot shape the creator wrote. Informational: the shape only changes additively.
|
|
33
|
+
*/
|
|
34
|
+
readonly version: number;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Retrieves or creates a shared-state {@link ValueWrapper} for a given key.
|
|
38
|
+
*
|
|
39
|
+
* @typeParam T - The type of the shared state value.
|
|
40
|
+
* @param key - The key to store or retrieve the shared state under.
|
|
41
|
+
* @param defaultValue - The default value to use if the shared state does not exist yet.
|
|
42
|
+
* @returns The {@link ValueWrapper} that stores the shared state.
|
|
43
|
+
*/
|
|
44
|
+
export declare function getTypescriptLibState<T>(key: string, defaultValue: T): ValueWrapper<T>;
|
|
45
|
+
/**
|
|
46
|
+
* Retrieves or creates the shared-state slot.
|
|
47
|
+
*
|
|
48
|
+
* @returns The {@link TypescriptLibStateSlot}.
|
|
49
|
+
*/
|
|
50
|
+
export declare function getTypescriptLibStateSlot(): TypescriptLibStateSlot;
|
|
51
|
+
/**
|
|
52
|
+
* Clears the shared-state bag.
|
|
53
|
+
*
|
|
54
|
+
* Intended for test isolation: call it before each test so accumulated state does not leak between tests.
|
|
55
|
+
*/
|
|
56
|
+
export declare function resetTypescriptLibState(): void;
|
|
@@ -0,0 +1,40 @@
|
|
|
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
|
+
import { ValueWrapper } from "./value-wrapper.mjs";
|
|
7
|
+
const TYPESCRIPT_LIB_STATE_VERSION = 1;
|
|
8
|
+
const TYPESCRIPT_LIB_STATE_KEY = /* @__PURE__ */ Symbol.for("@mnaoumov/typescript-lib/state");
|
|
9
|
+
function getTypescriptLibState(key, defaultValue) {
|
|
10
|
+
return getTypescriptLibStateSlot().values[key] ??= ValueWrapper.of(defaultValue);
|
|
11
|
+
}
|
|
12
|
+
function getTypescriptLibStateSlot() {
|
|
13
|
+
const global = getGlobal();
|
|
14
|
+
let slot = global[TYPESCRIPT_LIB_STATE_KEY];
|
|
15
|
+
if (!slot) {
|
|
16
|
+
slot = createSlot();
|
|
17
|
+
global[TYPESCRIPT_LIB_STATE_KEY] = slot;
|
|
18
|
+
}
|
|
19
|
+
return slot;
|
|
20
|
+
}
|
|
21
|
+
function resetTypescriptLibState() {
|
|
22
|
+
getGlobal()[TYPESCRIPT_LIB_STATE_KEY] = createSlot();
|
|
23
|
+
}
|
|
24
|
+
function createSlot() {
|
|
25
|
+
return {
|
|
26
|
+
values: {},
|
|
27
|
+
version: TYPESCRIPT_LIB_STATE_VERSION
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
function getGlobal() {
|
|
31
|
+
return globalThis;
|
|
32
|
+
}
|
|
33
|
+
export {
|
|
34
|
+
TYPESCRIPT_LIB_STATE_KEY,
|
|
35
|
+
TYPESCRIPT_LIB_STATE_VERSION,
|
|
36
|
+
getTypescriptLibState,
|
|
37
|
+
getTypescriptLibStateSlot,
|
|
38
|
+
resetTypescriptLibState
|
|
39
|
+
};
|
|
40
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL3R5cGVzY3JpcHQtbGliLXN0YXRlLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogUHJvdmlkZXMgYWNjZXNzIHRvIHRoZSBwcm9jZXNzLXdpZGUgc2hhcmVkLXN0YXRlIGJhZyBvZiB0aGUgZ2VuZXJpYywgbm9uLU9ic2lkaWFuIHBhcnQgb2YgdGhlIGxpYnJhcnkuXG4gKlxuICogVGhlIGJhZyBsaXZlcyBvbiBgZ2xvYmFsVGhpc2AgdW5kZXIgYSBgU3ltYm9sLmZvcmAga2V5LCBzbyBldmVyeSBjb3B5IG9mIHRoaXMgbW9kdWxlIGxvYWRlZCBpbiBvbmUgcmVhbG0gc2hhcmVzXG4gKiBpdCwgd2hpY2hldmVyIHZlcnNpb24gaXQgaXMuIEl0IGhvbGRzIHdoYXQgbXVzdCBleGlzdCBvbmNlIHBlciByZWFsbTogdGhlIGRlYnVnZ2VycywgdGhlIGBkZWJ1Z2AgaW5zdGFuY2UgYW5kIHRoZVxuICogc2hhcmVkIGFib3J0IGNvbnRyb2xsZXIuIE9ic2lkaWFuLXNwZWNpZmljIHN0YXRlIHN0YXlzIGluIGBvYnNpZGlhbi1kZXYtdXRpbHMtc3RhdGUudHNgLlxuICpcbiAqIFRoZSBzbG90IGlzIGEgY3Jvc3MtdmVyc2lvbiB3aXJlIGZvcm1hdDogaXRzIGtleSBhbmQgdGhlIHtAbGluayBUeXBlc2NyaXB0TGliU3RhdGVTbG90fSBzaGFwZSBvbmx5IGV2ZXIgY2hhbmdlXG4gKiBhZGRpdGl2ZWx5LlxuICovXG5cbmltcG9ydCB7IFZhbHVlV3JhcHBlciB9IGZyb20gJy4vdmFsdWUtd3JhcHBlci50cyc7XG5cbi8qKlxuICogVGhlIHZlcnNpb24gb2YgdGhlIHtAbGluayBUeXBlc2NyaXB0TGliU3RhdGVTbG90fSBzaGFwZSB0aGlzIGNvcHkgd3JpdGVzLlxuICovXG5leHBvcnQgY29uc3QgVFlQRVNDUklQVF9MSUJfU1RBVEVfVkVSU0lPTiA9IDE7XG5cbi8qKlxuICogVGhlIGtleSBvZiB0aGUgZ2xvYmFsIHNsb3QgaG9sZGluZyB0aGUge0BsaW5rIFR5cGVzY3JpcHRMaWJTdGF0ZVNsb3R9LlxuICovXG5leHBvcnQgY29uc3QgVFlQRVNDUklQVF9MSUJfU1RBVEVfS0VZOiB1bmlxdWUgc3ltYm9sID0gU3ltYm9sLmZvcignQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL3N0YXRlJyk7XG5cbi8qKlxuICogVGhlIHNoYXJlZC1zdGF0ZSBzbG90IHN0b3JlZCBvbiBgZ2xvYmFsVGhpc2AuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVHlwZXNjcmlwdExpYlN0YXRlU2xvdCB7XG4gIC8qKlxuICAgKiBUaGUgc2hhcmVkIHZhbHVlcywgZWFjaCBpbiBhIHtAbGluayBWYWx1ZVdyYXBwZXJ9IHNvIGEgaG9sZGVyIGNhbiByZXBsYWNlIHRoZSB2YWx1ZSBpbiBwbGFjZS5cbiAgICovXG4gIHJlYWRvbmx5IHZhbHVlczogUmVjb3JkPHN0cmluZywgVmFsdWVXcmFwcGVyPjtcblxuICAvKipcbiAgICogVGhlIHZlcnNpb24gb2YgdGhlIHNsb3Qgc2hhcGUgdGhlIGNyZWF0b3Igd3JvdGUuIEluZm9ybWF0aW9uYWw6IHRoZSBzaGFwZSBvbmx5IGNoYW5nZXMgYWRkaXRpdmVseS5cbiAgICovXG4gIHJlYWRvbmx5IHZlcnNpb246IG51bWJlcjtcbn1cblxudHlwZSBHbG9iYWxXaXRoVHlwZXNjcmlwdExpYlN0YXRlID0gUGFydGlhbDxSZWNvcmQ8dHlwZW9mIFRZUEVTQ1JJUFRfTElCX1NUQVRFX0tFWSwgVHlwZXNjcmlwdExpYlN0YXRlU2xvdD4+O1xuXG4vKipcbiAqIFJldHJpZXZlcyBvciBjcmVhdGVzIGEgc2hhcmVkLXN0YXRlIHtAbGluayBWYWx1ZVdyYXBwZXJ9IGZvciBhIGdpdmVuIGtleS5cbiAqXG4gKiBAdHlwZVBhcmFtIFQgLSBUaGUgdHlwZSBvZiB0aGUgc2hhcmVkIHN0YXRlIHZhbHVlLlxuICogQHBhcmFtIGtleSAtIFRoZSBrZXkgdG8gc3RvcmUgb3IgcmV0cmlldmUgdGhlIHNoYXJlZCBzdGF0ZSB1bmRlci5cbiAqIEBwYXJhbSBkZWZhdWx0VmFsdWUgLSBUaGUgZGVmYXVsdCB2YWx1ZSB0byB1c2UgaWYgdGhlIHNoYXJlZCBzdGF0ZSBkb2VzIG5vdCBleGlzdCB5ZXQuXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIFZhbHVlV3JhcHBlcn0gdGhhdCBzdG9yZXMgdGhlIHNoYXJlZCBzdGF0ZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFR5cGVzY3JpcHRMaWJTdGF0ZTxUPihrZXk6IHN0cmluZywgZGVmYXVsdFZhbHVlOiBUKTogVmFsdWVXcmFwcGVyPFQ+IHtcbiAgcmV0dXJuIChnZXRUeXBlc2NyaXB0TGliU3RhdGVTbG90KCkudmFsdWVzW2tleV0gPz89IFZhbHVlV3JhcHBlci5vZihkZWZhdWx0VmFsdWUpKSBhcyBWYWx1ZVdyYXBwZXI8VD47XG59XG5cbi8qKlxuICogUmV0cmlldmVzIG9yIGNyZWF0ZXMgdGhlIHNoYXJlZC1zdGF0ZSBzbG90LlxuICpcbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgVHlwZXNjcmlwdExpYlN0YXRlU2xvdH0uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRUeXBlc2NyaXB0TGliU3RhdGVTbG90KCk6IFR5cGVzY3JpcHRMaWJTdGF0ZVNsb3Qge1xuICBjb25zdCBnbG9iYWwgPSBnZXRHbG9iYWwoKTtcbiAgbGV0IHNsb3QgPSBnbG9iYWxbVFlQRVNDUklQVF9MSUJfU1RBVEVfS0VZXTtcbiAgaWYgKCFzbG90KSB7XG4gICAgc2xvdCA9IGNyZWF0ZVNsb3QoKTtcbiAgICBnbG9iYWxbVFlQRVNDUklQVF9MSUJfU1RBVEVfS0VZXSA9IHNsb3Q7XG4gIH1cbiAgcmV0dXJuIHNsb3Q7XG59XG5cbi8qKlxuICogQ2xlYXJzIHRoZSBzaGFyZWQtc3RhdGUgYmFnLlxuICpcbiAqIEludGVuZGVkIGZvciB0ZXN0IGlzb2xhdGlvbjogY2FsbCBpdCBiZWZvcmUgZWFjaCB0ZXN0IHNvIGFjY3VtdWxhdGVkIHN0YXRlIGRvZXMgbm90IGxlYWsgYmV0d2VlbiB0ZXN0cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc2V0VHlwZXNjcmlwdExpYlN0YXRlKCk6IHZvaWQge1xuICBnZXRHbG9iYWwoKVtUWVBFU0NSSVBUX0xJQl9TVEFURV9LRVldID0gY3JlYXRlU2xvdCgpO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVTbG90KCk6IFR5cGVzY3JpcHRMaWJTdGF0ZVNsb3Qge1xuICByZXR1cm4ge1xuICAgIHZhbHVlczoge30sXG4gICAgdmVyc2lvbjogVFlQRVNDUklQVF9MSUJfU1RBVEVfVkVSU0lPTlxuICB9O1xufVxuXG5mdW5jdGlvbiBnZXRHbG9iYWwoKTogR2xvYmFsV2l0aFR5cGVzY3JpcHRMaWJTdGF0ZSB7XG4gIHJldHVybiBnbG9iYWxUaGlzIGFzIEdsb2JhbFdpdGhUeXBlc2NyaXB0TGliU3RhdGU7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7OztBQWFBLFNBQVMsb0JBQW9CO0FBS3RCLE1BQU0sK0JBQStCO0FBS3JDLE1BQU0sMkJBQTBDLHVCQUFPLElBQUksZ0NBQWdDO0FBMkIzRixTQUFTLHNCQUF5QixLQUFhLGNBQWtDO0FBQ3RGLFNBQVEsMEJBQTBCLEVBQUUsT0FBTyxHQUFHLE1BQU0sYUFBYSxHQUFHLFlBQVk7QUFDbEY7QUFPTyxTQUFTLDRCQUFvRDtBQUNsRSxRQUFNLFNBQVMsVUFBVTtBQUN6QixNQUFJLE9BQU8sT0FBTyx3QkFBd0I7QUFDMUMsTUFBSSxDQUFDLE1BQU07QUFDVCxXQUFPLFdBQVc7QUFDbEIsV0FBTyx3QkFBd0IsSUFBSTtBQUFBLEVBQ3JDO0FBQ0EsU0FBTztBQUNUO0FBT08sU0FBUywwQkFBZ0M7QUFDOUMsWUFBVSxFQUFFLHdCQUF3QixJQUFJLFdBQVc7QUFDckQ7QUFFQSxTQUFTLGFBQXFDO0FBQzVDLFNBQU87QUFBQSxJQUNMLFFBQVEsQ0FBQztBQUFBLElBQ1QsU0FBUztBQUFBLEVBQ1g7QUFDRjtBQUVBLFNBQVMsWUFBMEM7QUFDakQsU0FBTztBQUNUOyIsCiAgIm5hbWVzIjogW10KfQo=
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/// <reference path="./library-references.d.mts" />
|
|
2
|
+
/**
|
|
3
|
+
* @file
|
|
4
|
+
*
|
|
5
|
+
* Contains utility functions for validating, encoding and normalizing URLs.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Percent-encodes the symbols that break a URL: backslashes, spaces and the control characters. Every
|
|
9
|
+
* other character — including non-ASCII ones and a literal `%` — is left as is, so the result stays
|
|
10
|
+
* readable.
|
|
11
|
+
*
|
|
12
|
+
* A literal `%` is only encoded when `shouldEncodePercent` is set. Leaving it alone is the default
|
|
13
|
+
* because it keeps the encoding idempotent for already-encoded input; the cost is that a path which
|
|
14
|
+
* genuinely contains `%` (a folder actually named `a%20b`) decodes back to something else. Turn the flag
|
|
15
|
+
* on whenever the input is a raw filesystem path that may contain `%`.
|
|
16
|
+
*
|
|
17
|
+
* @param url - The URL to encode.
|
|
18
|
+
* @param shouldEncodePercent - Whether to encode a literal `%` as `%25`. Defaults to `false`.
|
|
19
|
+
* @returns The encoded URL.
|
|
20
|
+
*
|
|
21
|
+
* @example
|
|
22
|
+
* ```ts
|
|
23
|
+
* encodeUrl(String.raw`path\to the\file.md`) // 'path%5Cto%20the%5Cfile.md'
|
|
24
|
+
* encodeUrl('a%20b') // 'a%20b'
|
|
25
|
+
* encodeUrl('a%20b', true) // 'a%2520b'
|
|
26
|
+
* ```
|
|
27
|
+
*/
|
|
28
|
+
export declare function encodeUrl(url: string, shouldEncodePercent?: boolean): string;
|
|
29
|
+
/**
|
|
30
|
+
* Determines whether a given string is a `file://` URL.
|
|
31
|
+
*
|
|
32
|
+
* @param $string - The string to check.
|
|
33
|
+
* @returns `true` if the string uses the `file:` scheme, otherwise `false`.
|
|
34
|
+
*/
|
|
35
|
+
export declare function isFileUrl($string: string): boolean;
|
|
36
|
+
/**
|
|
37
|
+
* Determines whether a given string is a valid URL
|
|
38
|
+
*
|
|
39
|
+
* @param $string - The string to validate as a URL.
|
|
40
|
+
* @returns `true` if the string is a valid URL, otherwise `false`.
|
|
41
|
+
*/
|
|
42
|
+
export declare function isUrl($string: string): boolean;
|
|
43
|
+
/**
|
|
44
|
+
* Normalizes a `file://` URL to a pretty form by converting backslashes to forward slashes. The URL is
|
|
45
|
+
* expected to already be decoded. Non-`file://` URLs are returned unchanged.
|
|
46
|
+
*
|
|
47
|
+
* @param url - The URL to normalize.
|
|
48
|
+
* @returns The normalized URL.
|
|
49
|
+
*/
|
|
50
|
+
export declare function normalizeFileUrl(url: string): string;
|
|
51
|
+
/**
|
|
52
|
+
* Converts a filesystem path into a `file:///` URL, percent-encoding it with {@link encodeUrl}.
|
|
53
|
+
*
|
|
54
|
+
* The backslashes are turned into forward slashes **after** the encoding, not before — a Windows path is
|
|
55
|
+
* encoded to `%5C` first and only then rewritten to `/`, which is what makes `C:\a b\c` produce the
|
|
56
|
+
* working `file:///C:/a%20b/c` rather than a link broken at the first space.
|
|
57
|
+
*
|
|
58
|
+
* The `file:///` prefix always ends up with exactly three slashes: any leading slashes the path already
|
|
59
|
+
* has are dropped first, because `file:////home/x` parses as the path `//home/x`, not `/home/x`. A
|
|
60
|
+
* Windows UNC path (`\\server\share`) is therefore rendered as `file:///server/share` rather than the
|
|
61
|
+
* canonical host form `file://server/share`, which this function deliberately does not produce.
|
|
62
|
+
*
|
|
63
|
+
* @param path - The filesystem path to convert.
|
|
64
|
+
* @param shouldEncodePercent - Whether to encode a literal `%` in the path as `%25`. Defaults to `false`.
|
|
65
|
+
* See {@link encodeUrl} for the trade-off.
|
|
66
|
+
* @returns The `file:///` URL.
|
|
67
|
+
*
|
|
68
|
+
* @example
|
|
69
|
+
* ```ts
|
|
70
|
+
* pathToFileUrl(String.raw`C:\a b\c.txt`) // 'file:///C:/a%20b/c.txt'
|
|
71
|
+
* pathToFileUrl('/home/user/a b.txt') // 'file:///home/user/a%20b.txt'
|
|
72
|
+
* ```
|
|
73
|
+
*/
|
|
74
|
+
export declare function pathToFileUrl(path: string, shouldEncodePercent?: boolean): string;
|
|
@@ -0,0 +1,50 @@
|
|
|
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
|
+
import { replaceAll } from "./string.mjs";
|
|
7
|
+
const SCHEME_REG_EXP = /^[A-Za-z][A-Za-z0-9+\-.]*:\S+$/;
|
|
8
|
+
const FILE_SCHEME_REG_EXP = /^file:/i;
|
|
9
|
+
const LEADING_SLASHES_REG_EXP = /^\/+/;
|
|
10
|
+
const SPECIAL_URL_SYMBOLS_REG_EXP = /[\\\x00\x08\x0B\x0C\x0E-\x1F ]/g;
|
|
11
|
+
const SPECIAL_URL_SYMBOLS_WITH_PERCENT_REG_EXP = /[%\\\x00\x08\x0B\x0C\x0E-\x1F ]/g;
|
|
12
|
+
function encodeUrl(url, shouldEncodePercent) {
|
|
13
|
+
return replaceAll({
|
|
14
|
+
$string: url,
|
|
15
|
+
replacer: ({ substring: specialUrlSymbol }) => encodeURIComponent(specialUrlSymbol),
|
|
16
|
+
searchValue: shouldEncodePercent ? SPECIAL_URL_SYMBOLS_WITH_PERCENT_REG_EXP : SPECIAL_URL_SYMBOLS_REG_EXP
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
function isFileUrl($string) {
|
|
20
|
+
return FILE_SCHEME_REG_EXP.test($string);
|
|
21
|
+
}
|
|
22
|
+
function isUrl($string) {
|
|
23
|
+
if (/\s/.test($string)) {
|
|
24
|
+
return false;
|
|
25
|
+
}
|
|
26
|
+
if ($string.includes("://")) {
|
|
27
|
+
try {
|
|
28
|
+
new URL($string);
|
|
29
|
+
return true;
|
|
30
|
+
} catch {
|
|
31
|
+
return false;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
return SCHEME_REG_EXP.test($string);
|
|
35
|
+
}
|
|
36
|
+
function normalizeFileUrl(url) {
|
|
37
|
+
return isFileUrl(url) ? url.replaceAll("\\", "/") : url;
|
|
38
|
+
}
|
|
39
|
+
function pathToFileUrl(path, shouldEncodePercent) {
|
|
40
|
+
const encodedPath = encodeUrl(path, shouldEncodePercent).replaceAll("%5C", "/");
|
|
41
|
+
return `file:///${encodedPath.replace(LEADING_SLASHES_REG_EXP, "")}`;
|
|
42
|
+
}
|
|
43
|
+
export {
|
|
44
|
+
encodeUrl,
|
|
45
|
+
isFileUrl,
|
|
46
|
+
isUrl,
|
|
47
|
+
normalizeFileUrl,
|
|
48
|
+
pathToFileUrl
|
|
49
|
+
};
|
|
50
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL3VybC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIENvbnRhaW5zIHV0aWxpdHkgZnVuY3Rpb25zIGZvciB2YWxpZGF0aW5nLCBlbmNvZGluZyBhbmQgbm9ybWFsaXppbmcgVVJMcy5cbiAqL1xuXG5pbXBvcnQgeyByZXBsYWNlQWxsIH0gZnJvbSAnLi9zdHJpbmcudHMnO1xuXG5jb25zdCBTQ0hFTUVfUkVHX0VYUCA9IC9eW0EtWmEtel1bQS1aYS16MC05K1xcLS5dKjpcXFMrJC87XG5cbmNvbnN0IEZJTEVfU0NIRU1FX1JFR19FWFAgPSAvXmZpbGU6L2k7XG5cbmNvbnN0IExFQURJTkdfU0xBU0hFU19SRUdfRVhQID0gL15cXC8rLztcblxuLyoqXG4gKiBSZWd1bGFyIGV4cHJlc3Npb24gZm9yIHRoZSBzeW1ib2xzIHRoYXQgaGF2ZSB0byBiZSBwZXJjZW50LWVuY29kZWQgaW4gYSBVUkwuXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb250cm9sLXJlZ2V4LCB1bmljb3JuL3ByZWZlci11bmljb2RlLWNvZGUtcG9pbnQtZXNjYXBlcyAtLSBUaGUgcmVndWxhciBleHByZXNzaW9uIGlzIHdyaXR0ZW4gdG8gY2FwdHVyZSBjb250cm9sIGNoYXJhY3RlcnMsIHdoaWNoIGFyZSBjb252ZW50aW9uYWxseSBzcGVsbGVkIGFzIGBcXHhgIGVzY2FwZXM7IGBcXHV7MH1gLXN0eWxlIGVzY2FwZXMgd291bGQgb2JzY3VyZSB0aGUgYFxceDBFLVxceDFGYCByYW5nZSB3aXRob3V0IGV4cHJlc3NpbmcgYW55dGhpbmcgdGhlIHR3by1kaWdpdCBmb3JtIGNhbm5vdC5cbmNvbnN0IFNQRUNJQUxfVVJMX1NZTUJPTFNfUkVHX0VYUCA9IC9bXFxcXFxceDAwXFx4MDhcXHgwQlxceDBDXFx4MEUtXFx4MUYgXS9nO1xuXG4vKipcbiAqIFNhbWUgYXMge0BsaW5rIFNQRUNJQUxfVVJMX1NZTUJPTFNfUkVHX0VYUH0sIGJ1dCBhZGRpdGlvbmFsbHkgbWF0Y2hlcyBhIGxpdGVyYWwgYCVgLlxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29udHJvbC1yZWdleCwgdW5pY29ybi9wcmVmZXItdW5pY29kZS1jb2RlLXBvaW50LWVzY2FwZXMgLS0gVGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiBpcyB3cml0dGVuIHRvIGNhcHR1cmUgY29udHJvbCBjaGFyYWN0ZXJzLCB3aGljaCBhcmUgY29udmVudGlvbmFsbHkgc3BlbGxlZCBhcyBgXFx4YCBlc2NhcGVzOyBgXFx1ezB9YC1zdHlsZSBlc2NhcGVzIHdvdWxkIG9ic2N1cmUgdGhlIGBcXHgwRS1cXHgxRmAgcmFuZ2Ugd2l0aG91dCBleHByZXNzaW5nIGFueXRoaW5nIHRoZSB0d28tZGlnaXQgZm9ybSBjYW5ub3QuXG5jb25zdCBTUEVDSUFMX1VSTF9TWU1CT0xTX1dJVEhfUEVSQ0VOVF9SRUdfRVhQID0gL1slXFxcXFxceDAwXFx4MDhcXHgwQlxceDBDXFx4MEUtXFx4MUYgXS9nO1xuXG4vKipcbiAqIFBlcmNlbnQtZW5jb2RlcyB0aGUgc3ltYm9scyB0aGF0IGJyZWFrIGEgVVJMOiBiYWNrc2xhc2hlcywgc3BhY2VzIGFuZCB0aGUgY29udHJvbCBjaGFyYWN0ZXJzLiBFdmVyeVxuICogb3RoZXIgY2hhcmFjdGVyIFx1MjAxNCBpbmNsdWRpbmcgbm9uLUFTQ0lJIG9uZXMgYW5kIGEgbGl0ZXJhbCBgJWAgXHUyMDE0IGlzIGxlZnQgYXMgaXMsIHNvIHRoZSByZXN1bHQgc3RheXNcbiAqIHJlYWRhYmxlLlxuICpcbiAqIEEgbGl0ZXJhbCBgJWAgaXMgb25seSBlbmNvZGVkIHdoZW4gYHNob3VsZEVuY29kZVBlcmNlbnRgIGlzIHNldC4gTGVhdmluZyBpdCBhbG9uZSBpcyB0aGUgZGVmYXVsdFxuICogYmVjYXVzZSBpdCBrZWVwcyB0aGUgZW5jb2RpbmcgaWRlbXBvdGVudCBmb3IgYWxyZWFkeS1lbmNvZGVkIGlucHV0OyB0aGUgY29zdCBpcyB0aGF0IGEgcGF0aCB3aGljaFxuICogZ2VudWluZWx5IGNvbnRhaW5zIGAlYCAoYSBmb2xkZXIgYWN0dWFsbHkgbmFtZWQgYGElMjBiYCkgZGVjb2RlcyBiYWNrIHRvIHNvbWV0aGluZyBlbHNlLiBUdXJuIHRoZSBmbGFnXG4gKiBvbiB3aGVuZXZlciB0aGUgaW5wdXQgaXMgYSByYXcgZmlsZXN5c3RlbSBwYXRoIHRoYXQgbWF5IGNvbnRhaW4gYCVgLlxuICpcbiAqIEBwYXJhbSB1cmwgLSBUaGUgVVJMIHRvIGVuY29kZS5cbiAqIEBwYXJhbSBzaG91bGRFbmNvZGVQZXJjZW50IC0gV2hldGhlciB0byBlbmNvZGUgYSBsaXRlcmFsIGAlYCBhcyBgJTI1YC4gRGVmYXVsdHMgdG8gYGZhbHNlYC5cbiAqIEByZXR1cm5zIFRoZSBlbmNvZGVkIFVSTC5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIGVuY29kZVVybChTdHJpbmcucmF3YHBhdGhcXHRvIHRoZVxcZmlsZS5tZGApIC8vICdwYXRoJTVDdG8lMjB0aGUlNUNmaWxlLm1kJ1xuICogZW5jb2RlVXJsKCdhJTIwYicpIC8vICdhJTIwYidcbiAqIGVuY29kZVVybCgnYSUyMGInLCB0cnVlKSAvLyAnYSUyNTIwYidcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gZW5jb2RlVXJsKHVybDogc3RyaW5nLCBzaG91bGRFbmNvZGVQZXJjZW50PzogYm9vbGVhbik6IHN0cmluZyB7XG4gIHJldHVybiByZXBsYWNlQWxsKHtcbiAgICAkc3RyaW5nOiB1cmwsXG4gICAgcmVwbGFjZXI6ICh7IHN1YnN0cmluZzogc3BlY2lhbFVybFN5bWJvbCB9KSA9PiBlbmNvZGVVUklDb21wb25lbnQoc3BlY2lhbFVybFN5bWJvbCksXG4gICAgc2VhcmNoVmFsdWU6IHNob3VsZEVuY29kZVBlcmNlbnQgPyBTUEVDSUFMX1VSTF9TWU1CT0xTX1dJVEhfUEVSQ0VOVF9SRUdfRVhQIDogU1BFQ0lBTF9VUkxfU1lNQk9MU19SRUdfRVhQXG4gIH0pO1xufVxuXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciBhIGdpdmVuIHN0cmluZyBpcyBhIGBmaWxlOi8vYCBVUkwuXG4gKlxuICogQHBhcmFtICRzdHJpbmcgLSBUaGUgc3RyaW5nIHRvIGNoZWNrLlxuICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBzdHJpbmcgdXNlcyB0aGUgYGZpbGU6YCBzY2hlbWUsIG90aGVyd2lzZSBgZmFsc2VgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNGaWxlVXJsKCRzdHJpbmc6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gRklMRV9TQ0hFTUVfUkVHX0VYUC50ZXN0KCRzdHJpbmcpO1xufVxuXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciBhIGdpdmVuIHN0cmluZyBpcyBhIHZhbGlkIFVSTFxuICpcbiAqIEBwYXJhbSAkc3RyaW5nIC0gVGhlIHN0cmluZyB0byB2YWxpZGF0ZSBhcyBhIFVSTC5cbiAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgc3RyaW5nIGlzIGEgdmFsaWQgVVJMLCBvdGhlcndpc2UgYGZhbHNlYC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVXJsKCRzdHJpbmc6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBpZiAoL1xccy8udGVzdCgkc3RyaW5nKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAoJHN0cmluZy5pbmNsdWRlcygnOi8vJykpIHtcbiAgICB0cnkge1xuICAgICAgbmV3IFVSTCgkc3RyaW5nKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBTQ0hFTUVfUkVHX0VYUC50ZXN0KCRzdHJpbmcpO1xufVxuXG4vKipcbiAqIE5vcm1hbGl6ZXMgYSBgZmlsZTovL2AgVVJMIHRvIGEgcHJldHR5IGZvcm0gYnkgY29udmVydGluZyBiYWNrc2xhc2hlcyB0byBmb3J3YXJkIHNsYXNoZXMuIFRoZSBVUkwgaXNcbiAqIGV4cGVjdGVkIHRvIGFscmVhZHkgYmUgZGVjb2RlZC4gTm9uLWBmaWxlOi8vYCBVUkxzIGFyZSByZXR1cm5lZCB1bmNoYW5nZWQuXG4gKlxuICogQHBhcmFtIHVybCAtIFRoZSBVUkwgdG8gbm9ybWFsaXplLlxuICogQHJldHVybnMgVGhlIG5vcm1hbGl6ZWQgVVJMLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplRmlsZVVybCh1cmw6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBpc0ZpbGVVcmwodXJsKSA/IHVybC5yZXBsYWNlQWxsKCdcXFxcJywgJy8nKSA6IHVybDtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhIGZpbGVzeXN0ZW0gcGF0aCBpbnRvIGEgYGZpbGU6Ly8vYCBVUkwsIHBlcmNlbnQtZW5jb2RpbmcgaXQgd2l0aCB7QGxpbmsgZW5jb2RlVXJsfS5cbiAqXG4gKiBUaGUgYmFja3NsYXNoZXMgYXJlIHR1cm5lZCBpbnRvIGZvcndhcmQgc2xhc2hlcyAqKmFmdGVyKiogdGhlIGVuY29kaW5nLCBub3QgYmVmb3JlIFx1MjAxNCBhIFdpbmRvd3MgcGF0aCBpc1xuICogZW5jb2RlZCB0byBgJTVDYCBmaXJzdCBhbmQgb25seSB0aGVuIHJld3JpdHRlbiB0byBgL2AsIHdoaWNoIGlzIHdoYXQgbWFrZXMgYEM6XFxhIGJcXGNgIHByb2R1Y2UgdGhlXG4gKiB3b3JraW5nIGBmaWxlOi8vL0M6L2ElMjBiL2NgIHJhdGhlciB0aGFuIGEgbGluayBicm9rZW4gYXQgdGhlIGZpcnN0IHNwYWNlLlxuICpcbiAqIFRoZSBgZmlsZTovLy9gIHByZWZpeCBhbHdheXMgZW5kcyB1cCB3aXRoIGV4YWN0bHkgdGhyZWUgc2xhc2hlczogYW55IGxlYWRpbmcgc2xhc2hlcyB0aGUgcGF0aCBhbHJlYWR5XG4gKiBoYXMgYXJlIGRyb3BwZWQgZmlyc3QsIGJlY2F1c2UgYGZpbGU6Ly8vL2hvbWUveGAgcGFyc2VzIGFzIHRoZSBwYXRoIGAvL2hvbWUveGAsIG5vdCBgL2hvbWUveGAuIEFcbiAqIFdpbmRvd3MgVU5DIHBhdGggKGBcXFxcc2VydmVyXFxzaGFyZWApIGlzIHRoZXJlZm9yZSByZW5kZXJlZCBhcyBgZmlsZTovLy9zZXJ2ZXIvc2hhcmVgIHJhdGhlciB0aGFuIHRoZVxuICogY2Fub25pY2FsIGhvc3QgZm9ybSBgZmlsZTovL3NlcnZlci9zaGFyZWAsIHdoaWNoIHRoaXMgZnVuY3Rpb24gZGVsaWJlcmF0ZWx5IGRvZXMgbm90IHByb2R1Y2UuXG4gKlxuICogQHBhcmFtIHBhdGggLSBUaGUgZmlsZXN5c3RlbSBwYXRoIHRvIGNvbnZlcnQuXG4gKiBAcGFyYW0gc2hvdWxkRW5jb2RlUGVyY2VudCAtIFdoZXRoZXIgdG8gZW5jb2RlIGEgbGl0ZXJhbCBgJWAgaW4gdGhlIHBhdGggYXMgYCUyNWAuIERlZmF1bHRzIHRvIGBmYWxzZWAuXG4gKiAgIFNlZSB7QGxpbmsgZW5jb2RlVXJsfSBmb3IgdGhlIHRyYWRlLW9mZi5cbiAqIEByZXR1cm5zIFRoZSBgZmlsZTovLy9gIFVSTC5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIHBhdGhUb0ZpbGVVcmwoU3RyaW5nLnJhd2BDOlxcYSBiXFxjLnR4dGApIC8vICdmaWxlOi8vL0M6L2ElMjBiL2MudHh0J1xuICogcGF0aFRvRmlsZVVybCgnL2hvbWUvdXNlci9hIGIudHh0JykgLy8gJ2ZpbGU6Ly8vaG9tZS91c2VyL2ElMjBiLnR4dCdcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gcGF0aFRvRmlsZVVybChwYXRoOiBzdHJpbmcsIHNob3VsZEVuY29kZVBlcmNlbnQ/OiBib29sZWFuKTogc3RyaW5nIHtcbiAgY29uc3QgZW5jb2RlZFBhdGggPSBlbmNvZGVVcmwocGF0aCwgc2hvdWxkRW5jb2RlUGVyY2VudCkucmVwbGFjZUFsbCgnJTVDJywgJy8nKTtcbiAgcmV0dXJuIGBmaWxlOi8vLyR7ZW5jb2RlZFBhdGgucmVwbGFjZShMRUFESU5HX1NMQVNIRVNfUkVHX0VYUCwgJycpfWA7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7OztBQU1BLFNBQVMsa0JBQWtCO0FBRTNCLE1BQU0saUJBQWlCO0FBRXZCLE1BQU0sc0JBQXNCO0FBRTVCLE1BQU0sMEJBQTBCO0FBTWhDLE1BQU0sOEJBQThCO0FBTXBDLE1BQU0sMkNBQTJDO0FBdUIxQyxTQUFTLFVBQVUsS0FBYSxxQkFBdUM7QUFDNUUsU0FBTyxXQUFXO0FBQUEsSUFDaEIsU0FBUztBQUFBLElBQ1QsVUFBVSxDQUFDLEVBQUUsV0FBVyxpQkFBaUIsTUFBTSxtQkFBbUIsZ0JBQWdCO0FBQUEsSUFDbEYsYUFBYSxzQkFBc0IsMkNBQTJDO0FBQUEsRUFDaEYsQ0FBQztBQUNIO0FBUU8sU0FBUyxVQUFVLFNBQTBCO0FBQ2xELFNBQU8sb0JBQW9CLEtBQUssT0FBTztBQUN6QztBQVFPLFNBQVMsTUFBTSxTQUEwQjtBQUM5QyxNQUFJLEtBQUssS0FBSyxPQUFPLEdBQUc7QUFDdEIsV0FBTztBQUFBLEVBQ1Q7QUFDQSxNQUFJLFFBQVEsU0FBUyxLQUFLLEdBQUc7QUFDM0IsUUFBSTtBQUNGLFVBQUksSUFBSSxPQUFPO0FBQ2YsYUFBTztBQUFBLElBQ1QsUUFBUTtBQUNOLGFBQU87QUFBQSxJQUNUO0FBQUEsRUFDRjtBQUVBLFNBQU8sZUFBZSxLQUFLLE9BQU87QUFDcEM7QUFTTyxTQUFTLGlCQUFpQixLQUFxQjtBQUNwRCxTQUFPLFVBQVUsR0FBRyxJQUFJLElBQUksV0FBVyxNQUFNLEdBQUcsSUFBSTtBQUN0RDtBQXlCTyxTQUFTLGNBQWMsTUFBYyxxQkFBdUM7QUFDakYsUUFBTSxjQUFjLFVBQVUsTUFBTSxtQkFBbUIsRUFBRSxXQUFXLE9BQU8sR0FBRztBQUM5RSxTQUFPLFdBQVcsWUFBWSxRQUFRLHlCQUF5QixFQUFFLENBQUM7QUFDcEU7IiwKICAibmFtZXMiOiBbXQp9Cg==
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/// <reference path="./library-references.d.mts" />
|
|
2
|
+
/// <reference lib="dom" />
|
|
3
|
+
/**
|
|
4
|
+
* @file
|
|
5
|
+
*
|
|
6
|
+
* Contains utility types and functions for handling value providers, which can be either direct values or functions that return values.
|
|
7
|
+
*/
|
|
8
|
+
import type { Promisable } from 'type-fest';
|
|
9
|
+
/**
|
|
10
|
+
* Value provider that can either be a direct value of type {@link Value} or a function that returns a value of type {@link Value}.
|
|
11
|
+
*
|
|
12
|
+
* @typeParam Value - The type of the value provided.
|
|
13
|
+
* @typeParam Arguments - The types of arguments passed to the function if the provider is a function.
|
|
14
|
+
*/
|
|
15
|
+
export type ValueProvider<Value, Arguments extends object = object> = (($arguments: Arguments & CommonArguments) => Promisable<Value>) | Value;
|
|
16
|
+
interface CommonArguments {
|
|
17
|
+
abortSignal: AbortSignal;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Resolves a value from a value provider, which can be either a direct value or a function that returns a value.
|
|
21
|
+
*
|
|
22
|
+
* @typeParam Arguments - The types of arguments passed to the function if the provider is a function.
|
|
23
|
+
* @typeParam Value - The type of the value provided.
|
|
24
|
+
* @param provider - The value provider to resolve.
|
|
25
|
+
* @param $arguments - The arguments to pass to the function if the provider is a function.
|
|
26
|
+
* @returns A {@link Promise} that resolves with the value provided by the value provider.
|
|
27
|
+
*/
|
|
28
|
+
export declare function resolveValue<Value, Arguments extends object = object>(provider: ValueProvider<Value, Arguments>, $arguments: Arguments & Partial<CommonArguments>): Promise<Value>;
|
|
29
|
+
export {};
|
|
@@ -0,0 +1,18 @@
|
|
|
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
|
+
import { abortSignalNever } from "./abort-controller.mjs";
|
|
7
|
+
async function resolveValue(provider, $arguments) {
|
|
8
|
+
const fullArguments = { ...$arguments, abortSignal: $arguments.abortSignal ?? abortSignalNever() };
|
|
9
|
+
fullArguments.abortSignal.throwIfAborted();
|
|
10
|
+
return isFunction(provider) ? await provider(fullArguments) : provider;
|
|
11
|
+
}
|
|
12
|
+
function isFunction(value) {
|
|
13
|
+
return typeof value === "function";
|
|
14
|
+
}
|
|
15
|
+
export {
|
|
16
|
+
resolveValue
|
|
17
|
+
};
|
|
18
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL3ZhbHVlLXByb3ZpZGVyLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogQ29udGFpbnMgdXRpbGl0eSB0eXBlcyBhbmQgZnVuY3Rpb25zIGZvciBoYW5kbGluZyB2YWx1ZSBwcm92aWRlcnMsIHdoaWNoIGNhbiBiZSBlaXRoZXIgZGlyZWN0IHZhbHVlcyBvciBmdW5jdGlvbnMgdGhhdCByZXR1cm4gdmFsdWVzLlxuICovXG5cbmltcG9ydCB0eXBlIHsgUHJvbWlzYWJsZSB9IGZyb20gJ3R5cGUtZmVzdCc7XG5cbmltcG9ydCB7IGFib3J0U2lnbmFsTmV2ZXIgfSBmcm9tICcuL2Fib3J0LWNvbnRyb2xsZXIudHMnO1xuXG4vKipcbiAqIFZhbHVlIHByb3ZpZGVyIHRoYXQgY2FuIGVpdGhlciBiZSBhIGRpcmVjdCB2YWx1ZSBvZiB0eXBlIHtAbGluayBWYWx1ZX0gb3IgYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSB2YWx1ZSBvZiB0eXBlIHtAbGluayBWYWx1ZX0uXG4gKlxuICogQHR5cGVQYXJhbSBWYWx1ZSAtIFRoZSB0eXBlIG9mIHRoZSB2YWx1ZSBwcm92aWRlZC5cbiAqIEB0eXBlUGFyYW0gQXJndW1lbnRzIC0gVGhlIHR5cGVzIG9mIGFyZ3VtZW50cyBwYXNzZWQgdG8gdGhlIGZ1bmN0aW9uIGlmIHRoZSBwcm92aWRlciBpcyBhIGZ1bmN0aW9uLlxuICovXG5leHBvcnQgdHlwZSBWYWx1ZVByb3ZpZGVyPFZhbHVlLCBBcmd1bWVudHMgZXh0ZW5kcyBvYmplY3QgPSBvYmplY3Q+ID0gKCgkYXJndW1lbnRzOiBBcmd1bWVudHMgJiBDb21tb25Bcmd1bWVudHMpID0+IFByb21pc2FibGU8VmFsdWU+KSB8IFZhbHVlO1xuXG5pbnRlcmZhY2UgQ29tbW9uQXJndW1lbnRzIHtcbiAgYWJvcnRTaWduYWw6IEFib3J0U2lnbmFsO1xufVxuXG4vKipcbiAqIFJlc29sdmVzIGEgdmFsdWUgZnJvbSBhIHZhbHVlIHByb3ZpZGVyLCB3aGljaCBjYW4gYmUgZWl0aGVyIGEgZGlyZWN0IHZhbHVlIG9yIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgdmFsdWUuXG4gKlxuICogQHR5cGVQYXJhbSBBcmd1bWVudHMgLSBUaGUgdHlwZXMgb2YgYXJndW1lbnRzIHBhc3NlZCB0byB0aGUgZnVuY3Rpb24gaWYgdGhlIHByb3ZpZGVyIGlzIGEgZnVuY3Rpb24uXG4gKiBAdHlwZVBhcmFtIFZhbHVlIC0gVGhlIHR5cGUgb2YgdGhlIHZhbHVlIHByb3ZpZGVkLlxuICogQHBhcmFtIHByb3ZpZGVyIC0gVGhlIHZhbHVlIHByb3ZpZGVyIHRvIHJlc29sdmUuXG4gKiBAcGFyYW0gJGFyZ3VtZW50cyAtIFRoZSBhcmd1bWVudHMgdG8gcGFzcyB0byB0aGUgZnVuY3Rpb24gaWYgdGhlIHByb3ZpZGVyIGlzIGEgZnVuY3Rpb24uXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIHZhbHVlIHByb3ZpZGVkIGJ5IHRoZSB2YWx1ZSBwcm92aWRlci5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlc29sdmVWYWx1ZTxWYWx1ZSwgQXJndW1lbnRzIGV4dGVuZHMgb2JqZWN0ID0gb2JqZWN0PihcbiAgcHJvdmlkZXI6IFZhbHVlUHJvdmlkZXI8VmFsdWUsIEFyZ3VtZW50cz4sXG4gICRhcmd1bWVudHM6IEFyZ3VtZW50cyAmIFBhcnRpYWw8Q29tbW9uQXJndW1lbnRzPlxuKTogUHJvbWlzZTxWYWx1ZT4ge1xuICBjb25zdCBmdWxsQXJndW1lbnRzID0geyAuLi4kYXJndW1lbnRzLCBhYm9ydFNpZ25hbDogJGFyZ3VtZW50cy5hYm9ydFNpZ25hbCA/PyBhYm9ydFNpZ25hbE5ldmVyKCkgfTtcbiAgZnVsbEFyZ3VtZW50cy5hYm9ydFNpZ25hbC50aHJvd0lmQWJvcnRlZCgpO1xuICByZXR1cm4gaXNGdW5jdGlvbihwcm92aWRlcikgPyAoYXdhaXQgcHJvdmlkZXIoZnVsbEFyZ3VtZW50cykpIDogcHJvdmlkZXI7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIGEgZ2l2ZW4gdmFsdWUgcHJvdmlkZXIgaXMgYSBmdW5jdGlvbi5cbiAqXG4gKiBAdHlwZVBhcmFtIFZhbHVlIC0gVGhlIHR5cGUgb2YgdGhlIHZhbHVlIHByb3ZpZGVkLlxuICogQHR5cGVQYXJhbSBBcmd1bWVudHMgLSBUaGUgdHlwZXMgb2YgYXJndW1lbnRzIHBhc3NlZCB0byB0aGUgZnVuY3Rpb24gaWYgdGhlIHByb3ZpZGVyIGlzIGEgZnVuY3Rpb24uXG4gKiBAcGFyYW0gdmFsdWUgLSBUaGUgdmFsdWUgcHJvdmlkZXIgdG8gY2hlY2suXG4gKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHZhbHVlIHByb3ZpZGVyIGlzIGEgZnVuY3Rpb24sIG90aGVyd2lzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc0Z1bmN0aW9uPFZhbHVlLCBBcmd1bWVudHMgZXh0ZW5kcyBvYmplY3QgPSBvYmplY3Q+KHZhbHVlOiBWYWx1ZVByb3ZpZGVyPFZhbHVlLCBBcmd1bWVudHM+KTogdmFsdWUgaXMgKCRhcmd1bWVudHM6IEFyZ3VtZW50cyAmIENvbW1vbkFyZ3VtZW50cykgPT4gUHJvbWlzYWJsZTxWYWx1ZT4ge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7QUFRQSxTQUFTLHdCQUF3QjtBQXVCakMsZUFBc0IsYUFDcEIsVUFDQSxZQUNnQjtBQUNoQixRQUFNLGdCQUFnQixFQUFFLEdBQUcsWUFBWSxhQUFhLFdBQVcsZUFBZSxpQkFBaUIsRUFBRTtBQUNqRyxnQkFBYyxZQUFZLGVBQWU7QUFDekMsU0FBTyxXQUFXLFFBQVEsSUFBSyxNQUFNLFNBQVMsYUFBYSxJQUFLO0FBQ2xFO0FBVUEsU0FBUyxXQUFxRCxPQUFpSDtBQUM3SyxTQUFPLE9BQU8sVUFBVTtBQUMxQjsiLAogICJuYW1lcyI6IFtdCn0K
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/// <reference path="./library-references.d.mts" />
|
|
2
|
+
/**
|
|
3
|
+
* @file
|
|
4
|
+
*
|
|
5
|
+
* Wrapper type for storing values.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Wrapper type for storing values.
|
|
9
|
+
*
|
|
10
|
+
* @typeParam T - The type of the wrapped value.
|
|
11
|
+
*/
|
|
12
|
+
export declare class ValueWrapper<T = unknown> {
|
|
13
|
+
/**
|
|
14
|
+
* Gets the wrapped value.
|
|
15
|
+
*
|
|
16
|
+
* @returns The wrapped value.
|
|
17
|
+
* @throws An {@link Error} if the value has not been set.
|
|
18
|
+
*/
|
|
19
|
+
get value(): T;
|
|
20
|
+
/**
|
|
21
|
+
* Sets the wrapped value.
|
|
22
|
+
*
|
|
23
|
+
* @param value - The value to wrap.
|
|
24
|
+
*/
|
|
25
|
+
set value(value: T);
|
|
26
|
+
private _value;
|
|
27
|
+
private hasValue;
|
|
28
|
+
/**
|
|
29
|
+
* Creates a new value wrapper. Use {@link ValueWrapper.of} or {@link ValueWrapper.unset} instead.
|
|
30
|
+
*/
|
|
31
|
+
private constructor();
|
|
32
|
+
/**
|
|
33
|
+
* Make wrapper from the value.
|
|
34
|
+
*
|
|
35
|
+
* @typeParam T - Type of the value to wrap.
|
|
36
|
+
* @param value - The value to wrap.
|
|
37
|
+
* @returns The wrapper.
|
|
38
|
+
*/
|
|
39
|
+
static of<T>(value: T): ValueWrapper<T>;
|
|
40
|
+
/**
|
|
41
|
+
* Make the wrapper with unset value.
|
|
42
|
+
*
|
|
43
|
+
* @typeParam T - Type of the value to wrap.
|
|
44
|
+
* @returns The wrapper.
|
|
45
|
+
*/
|
|
46
|
+
static unset<T>(): ValueWrapper<T>;
|
|
47
|
+
}
|
|
@@ -0,0 +1,62 @@
|
|
|
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
|
+
import { noop } from "./function.mjs";
|
|
7
|
+
class ValueWrapper {
|
|
8
|
+
/**
|
|
9
|
+
* Gets the wrapped value.
|
|
10
|
+
*
|
|
11
|
+
* @returns The wrapped value.
|
|
12
|
+
* @throws An {@link Error} if the value has not been set.
|
|
13
|
+
*/
|
|
14
|
+
get value() {
|
|
15
|
+
if (!this.hasValue) {
|
|
16
|
+
throw new Error("Value is not set");
|
|
17
|
+
}
|
|
18
|
+
return this._value;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Sets the wrapped value.
|
|
22
|
+
*
|
|
23
|
+
* @param value - The value to wrap.
|
|
24
|
+
*/
|
|
25
|
+
set value(value) {
|
|
26
|
+
this._value = value;
|
|
27
|
+
this.hasValue = true;
|
|
28
|
+
}
|
|
29
|
+
_value = null;
|
|
30
|
+
hasValue = false;
|
|
31
|
+
/**
|
|
32
|
+
* Creates a new value wrapper. Use {@link ValueWrapper.of} or {@link ValueWrapper.unset} instead.
|
|
33
|
+
*/
|
|
34
|
+
constructor() {
|
|
35
|
+
noop();
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Make wrapper from the value.
|
|
39
|
+
*
|
|
40
|
+
* @typeParam T - Type of the value to wrap.
|
|
41
|
+
* @param value - The value to wrap.
|
|
42
|
+
* @returns The wrapper.
|
|
43
|
+
*/
|
|
44
|
+
static of(value) {
|
|
45
|
+
const wrapper = new ValueWrapper();
|
|
46
|
+
wrapper.value = value;
|
|
47
|
+
return wrapper;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Make the wrapper with unset value.
|
|
51
|
+
*
|
|
52
|
+
* @typeParam T - Type of the value to wrap.
|
|
53
|
+
* @returns The wrapper.
|
|
54
|
+
*/
|
|
55
|
+
static unset() {
|
|
56
|
+
return new ValueWrapper();
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
export {
|
|
60
|
+
ValueWrapper
|
|
61
|
+
};
|
|
62
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL3ZhbHVlLXdyYXBwZXIudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBXcmFwcGVyIHR5cGUgZm9yIHN0b3JpbmcgdmFsdWVzLlxuICovXG5cbmltcG9ydCB7IG5vb3AgfSBmcm9tICcuL2Z1bmN0aW9uLnRzJztcblxuLyoqXG4gKiBXcmFwcGVyIHR5cGUgZm9yIHN0b3JpbmcgdmFsdWVzLlxuICpcbiAqIEB0eXBlUGFyYW0gVCAtIFRoZSB0eXBlIG9mIHRoZSB3cmFwcGVkIHZhbHVlLlxuICovXG5leHBvcnQgY2xhc3MgVmFsdWVXcmFwcGVyPFQgPSB1bmtub3duPiB7XG4gIC8qKlxuICAgKiBHZXRzIHRoZSB3cmFwcGVkIHZhbHVlLlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgd3JhcHBlZCB2YWx1ZS5cbiAgICogQHRocm93cyBBbiB7QGxpbmsgRXJyb3J9IGlmIHRoZSB2YWx1ZSBoYXMgbm90IGJlZW4gc2V0LlxuICAgKi9cbiAgcHVibGljIGdldCB2YWx1ZSgpOiBUIHtcbiAgICBpZiAoIXRoaXMuaGFzVmFsdWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVmFsdWUgaXMgbm90IHNldCcpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl92YWx1ZSBhcyBUO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIHdyYXBwZWQgdmFsdWUuXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byB3cmFwLlxuICAgKi9cbiAgcHVibGljIHNldCB2YWx1ZSh2YWx1ZTogVCkge1xuICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7XG4gICAgdGhpcy5oYXNWYWx1ZSA9IHRydWU7XG4gIH1cblxuICBwcml2YXRlIF92YWx1ZTogbnVsbCB8IFQgPSBudWxsO1xuXG4gIHByaXZhdGUgaGFzVmFsdWUgPSBmYWxzZTtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyB2YWx1ZSB3cmFwcGVyLiBVc2Uge0BsaW5rIFZhbHVlV3JhcHBlci5vZn0gb3Ige0BsaW5rIFZhbHVlV3JhcHBlci51bnNldH0gaW5zdGVhZC5cbiAgICovXG4gIHByaXZhdGUgY29uc3RydWN0b3IoKSB7XG4gICAgbm9vcCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIE1ha2Ugd3JhcHBlciBmcm9tIHRoZSB2YWx1ZS5cbiAgICpcbiAgICogQHR5cGVQYXJhbSBUIC0gVHlwZSBvZiB0aGUgdmFsdWUgdG8gd3JhcC5cbiAgICogQHBhcmFtIHZhbHVlIC0gVGhlIHZhbHVlIHRvIHdyYXAuXG4gICAqIEByZXR1cm5zIFRoZSB3cmFwcGVyLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBvZjxUPih2YWx1ZTogVCk6IFZhbHVlV3JhcHBlcjxUPiB7XG4gICAgY29uc3Qgd3JhcHBlciA9IG5ldyBWYWx1ZVdyYXBwZXI8VD4oKTtcbiAgICB3cmFwcGVyLnZhbHVlID0gdmFsdWU7XG4gICAgcmV0dXJuIHdyYXBwZXI7XG4gIH1cblxuICAvKipcbiAgICogTWFrZSB0aGUgd3JhcHBlciB3aXRoIHVuc2V0IHZhbHVlLlxuICAgKlxuICAgKiBAdHlwZVBhcmFtIFQgLSBUeXBlIG9mIHRoZSB2YWx1ZSB0byB3cmFwLlxuICAgKiBAcmV0dXJucyBUaGUgd3JhcHBlci5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgdW5zZXQ8VD4oKTogVmFsdWVXcmFwcGVyPFQ+IHtcbiAgICByZXR1cm4gbmV3IFZhbHVlV3JhcHBlcjxUPigpO1xuICB9XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7OztBQU1BLFNBQVMsWUFBWTtBQU9kLE1BQU0sYUFBMEI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU9yQyxJQUFXLFFBQVc7QUFDcEIsUUFBSSxDQUFDLEtBQUssVUFBVTtBQUNsQixZQUFNLElBQUksTUFBTSxrQkFBa0I7QUFBQSxJQUNwQztBQUVBLFdBQU8sS0FBSztBQUFBLEVBQ2Q7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFPQSxJQUFXLE1BQU0sT0FBVTtBQUN6QixTQUFLLFNBQVM7QUFDZCxTQUFLLFdBQVc7QUFBQSxFQUNsQjtBQUFBLEVBRVEsU0FBbUI7QUFBQSxFQUVuQixXQUFXO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFLWCxjQUFjO0FBQ3BCLFNBQUs7QUFBQSxFQUNQO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQVNBLE9BQWMsR0FBTSxPQUEyQjtBQUM3QyxVQUFNLFVBQVUsSUFBSSxhQUFnQjtBQUNwQyxZQUFRLFFBQVE7QUFDaEIsV0FBTztBQUFBLEVBQ1Q7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQVFBLE9BQWMsUUFBNEI7QUFDeEMsV0FBTyxJQUFJLGFBQWdCO0FBQUEsRUFDN0I7QUFDRjsiLAogICJuYW1lcyI6IFtdCn0K
|