@cartanova/qgrid-cli 1.0.1 → 1.0.3
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/bundle/dist/dist/_virtual/_@oxc-project_runtime@0.122.0/helpers/decorate.js +9 -0
- package/bundle/dist/dist/_virtual/_@oxc-project_runtime@0.122.0/helpers/decorateMetadata.js +6 -0
- package/bundle/dist/dist/_virtual/_rolldown/runtime.js +15 -0
- package/bundle/dist/dist/application/qgrid/oauth.js +140 -0
- package/bundle/dist/dist/application/qgrid/pool.js +100 -0
- package/bundle/dist/dist/application/qgrid/qgrid.frame.js +280 -0
- package/bundle/dist/dist/application/qgrid/qgrid.types.js +79 -0
- package/bundle/dist/dist/application/qgrid/worker.js +183 -0
- package/bundle/dist/dist/application/queries.generated.js +31 -0
- package/bundle/dist/dist/application/request-log/request-log.model.js +113 -0
- package/bundle/dist/dist/application/request-log/request-log.types.js +13 -0
- package/bundle/dist/dist/application/sonamu.generated.js +99 -0
- package/bundle/dist/dist/application/sonamu.generated.sso.js +34 -0
- package/bundle/dist/dist/application/token/token.model.js +157 -0
- package/bundle/dist/dist/application/token/token.types.js +22 -0
- package/bundle/dist/dist/i18n/en.js +63 -0
- package/bundle/dist/dist/i18n/ko.js +62 -0
- package/bundle/dist/dist/i18n/sd.generated.js +272 -0
- package/bundle/dist/dist/index.js +11 -0
- package/bundle/dist/dist/migrations/20260410171405_create__request_logs.js +26 -0
- package/bundle/dist/dist/migrations/20260410171406_create__tokens.js +24 -0
- package/bundle/dist/dist/migrations/20260411120624_alter_tokens_alter2.js +16 -0
- package/bundle/dist/dist/node_modules/.pnpm/@jridgewell_sourcemap-codec@1.5.5/node_modules/@jridgewell/sourcemap-codec/dist/sourcemap-codec.js +155 -0
- package/bundle/dist/dist/node_modules/.pnpm/@vitest_expect@4.1.2/node_modules/@vitest/expect/dist/index.js +1484 -0
- package/bundle/dist/dist/node_modules/.pnpm/@vitest_pretty-format@4.1.2/node_modules/@vitest/pretty-format/dist/index.js +887 -0
- package/bundle/dist/dist/node_modules/.pnpm/@vitest_runner@4.1.2/node_modules/@vitest/runner/dist/chunk-artifact.js +2746 -0
- package/bundle/dist/dist/node_modules/.pnpm/@vitest_runner@4.1.2/node_modules/@vitest/runner/dist/index.js +8 -0
- package/bundle/dist/dist/node_modules/.pnpm/@vitest_runner@4.1.2/node_modules/@vitest/runner/dist/utils.js +8 -0
- package/bundle/dist/dist/node_modules/.pnpm/@vitest_snapshot@4.1.2/node_modules/@vitest/snapshot/dist/index.js +662 -0
- package/bundle/dist/dist/node_modules/.pnpm/@vitest_spy@4.1.2/node_modules/@vitest/spy/dist/index.js +386 -0
- package/bundle/dist/dist/node_modules/.pnpm/@vitest_utils@4.1.2/node_modules/@vitest/utils/dist/chunk-pathe.M-eThtNZ.js +82 -0
- package/bundle/dist/dist/node_modules/.pnpm/@vitest_utils@4.1.2/node_modules/@vitest/utils/dist/constants.js +48 -0
- package/bundle/dist/dist/node_modules/.pnpm/@vitest_utils@4.1.2/node_modules/@vitest/utils/dist/diff.js +1307 -0
- package/bundle/dist/dist/node_modules/.pnpm/@vitest_utils@4.1.2/node_modules/@vitest/utils/dist/display.js +558 -0
- package/bundle/dist/dist/node_modules/.pnpm/@vitest_utils@4.1.2/node_modules/@vitest/utils/dist/error.js +33 -0
- package/bundle/dist/dist/node_modules/.pnpm/@vitest_utils@4.1.2/node_modules/@vitest/utils/dist/helpers.js +226 -0
- package/bundle/dist/dist/node_modules/.pnpm/@vitest_utils@4.1.2/node_modules/@vitest/utils/dist/offset.js +27 -0
- package/bundle/dist/dist/node_modules/.pnpm/@vitest_utils@4.1.2/node_modules/@vitest/utils/dist/serialize.js +77 -0
- package/bundle/dist/dist/node_modules/.pnpm/@vitest_utils@4.1.2/node_modules/@vitest/utils/dist/source-map.js +374 -0
- package/bundle/dist/dist/node_modules/.pnpm/@vitest_utils@4.1.2/node_modules/@vitest/utils/dist/timers.js +37 -0
- package/bundle/dist/dist/node_modules/.pnpm/chai@6.2.2/node_modules/chai/index.js +2886 -0
- package/bundle/dist/dist/node_modules/.pnpm/expect-type@1.3.0/node_modules/expect-type/dist/branding.js +10 -0
- package/bundle/dist/dist/node_modules/.pnpm/expect-type@1.3.0/node_modules/expect-type/dist/index.js +109 -0
- package/bundle/dist/dist/node_modules/.pnpm/expect-type@1.3.0/node_modules/expect-type/dist/messages.js +10 -0
- package/bundle/dist/dist/node_modules/.pnpm/expect-type@1.3.0/node_modules/expect-type/dist/overloads.js +10 -0
- package/bundle/dist/dist/node_modules/.pnpm/expect-type@1.3.0/node_modules/expect-type/dist/utils.js +10 -0
- package/bundle/dist/dist/node_modules/.pnpm/magic-string@0.30.21/node_modules/magic-string/dist/magic-string.es.js +1127 -0
- package/bundle/dist/dist/node_modules/.pnpm/pathe@2.0.3/node_modules/pathe/dist/index.js +21 -0
- package/bundle/dist/dist/node_modules/.pnpm/pathe@2.0.3/node_modules/pathe/dist/shared/pathe.M-eThtNZ.js +432 -0
- package/bundle/dist/dist/node_modules/.pnpm/tinybench@2.9.0/node_modules/tinybench/dist/index.js +506 -0
- package/bundle/dist/dist/node_modules/.pnpm/tinyrainbow@3.1.0/node_modules/tinyrainbow/dist/index.js +86 -0
- package/bundle/dist/dist/node_modules/.pnpm/vite@8.0.3_@emnapi_core@1.9.2_@emnapi_runtime@1.9.2_@types_node@25.0.7_esbuild@0.27.4_jiti@2.6.1_sass@1.98.0_tsx@4.21.0/node_modules/vite/dist/node/module-runner.js +426 -0
- package/bundle/dist/dist/node_modules/.pnpm/vitest@4.1.2_@opentelemetry_api@1.9.0_@types_node@25.0.7_vite@8.0.3_@emnapi_core@1.9.2__bb31087278f97a39b31b92010beab980/node_modules/vitest/dist/chunks/_commonjsHelpers.D26ty3Ew.js +6 -0
- package/bundle/dist/dist/node_modules/.pnpm/vitest@4.1.2_@opentelemetry_api@1.9.0_@types_node@25.0.7_vite@8.0.3_@emnapi_core@1.9.2__bb31087278f97a39b31b92010beab980/node_modules/vitest/dist/chunks/benchmark.CX_oY03V.js +41 -0
- package/bundle/dist/dist/node_modules/.pnpm/vitest@4.1.2_@opentelemetry_api@1.9.0_@types_node@25.0.7_vite@8.0.3_@emnapi_core@1.9.2__bb31087278f97a39b31b92010beab980/node_modules/vitest/dist/chunks/evaluatedModules.Dg1zASAC.js +19 -0
- package/bundle/dist/dist/node_modules/.pnpm/vitest@4.1.2_@opentelemetry_api@1.9.0_@types_node@25.0.7_vite@8.0.3_@emnapi_core@1.9.2__bb31087278f97a39b31b92010beab980/node_modules/vitest/dist/chunks/index.Chj8NDwU.js +202 -0
- package/bundle/dist/dist/node_modules/.pnpm/vitest@4.1.2_@opentelemetry_api@1.9.0_@types_node@25.0.7_vite@8.0.3_@emnapi_core@1.9.2__bb31087278f97a39b31b92010beab980/node_modules/vitest/dist/chunks/index.DOa3dzoN.js +16 -0
- package/bundle/dist/dist/node_modules/.pnpm/vitest@4.1.2_@opentelemetry_api@1.9.0_@types_node@25.0.7_vite@8.0.3_@emnapi_core@1.9.2__bb31087278f97a39b31b92010beab980/node_modules/vitest/dist/chunks/rpc.MzXet3jl.js +59 -0
- package/bundle/dist/dist/node_modules/.pnpm/vitest@4.1.2_@opentelemetry_api@1.9.0_@types_node@25.0.7_vite@8.0.3_@emnapi_core@1.9.2__bb31087278f97a39b31b92010beab980/node_modules/vitest/dist/chunks/test.p_J6dB8a.js +2910 -0
- package/bundle/dist/dist/node_modules/.pnpm/vitest@4.1.2_@opentelemetry_api@1.9.0_@types_node@25.0.7_vite@8.0.3_@emnapi_core@1.9.2__bb31087278f97a39b31b92010beab980/node_modules/vitest/dist/chunks/utils.BX5Fg8C4.js +44 -0
- package/bundle/dist/dist/node_modules/.pnpm/vitest@4.1.2_@opentelemetry_api@1.9.0_@types_node@25.0.7_vite@8.0.3_@emnapi_core@1.9.2__bb31087278f97a39b31b92010beab980/node_modules/vitest/dist/index.js +28 -0
- package/bundle/dist/dist/sonamu.config.js +196 -0
- package/bundle/dist/dist/testing/fixture.js +8 -0
- package/bundle/dist/dist/testing/global.js +9 -0
- package/bundle/dist/dist/testing/setup-mocks.js +17 -0
- package/bundle/dist/dist/utils/subset-loaders.js +12 -0
- package/bundle/src/application/qgrid/oauth.ts +181 -0
- package/bundle/src/application/qgrid/pool.ts +132 -0
- package/bundle/src/application/qgrid/qgrid.frame.ts +275 -0
- package/bundle/src/application/qgrid/qgrid.types.ts +117 -0
- package/bundle/src/application/qgrid/worker.ts +234 -0
- package/bundle/src/application/queries.generated.ts +59 -0
- package/bundle/src/application/request-log/request-log.model.ts +155 -0
- package/bundle/src/application/request-log/request-log.types.ts +15 -0
- package/bundle/src/application/sonamu.generated.http +187 -0
- package/bundle/src/application/sonamu.generated.sso.ts +66 -0
- package/bundle/src/application/sonamu.generated.ts +135 -0
- package/bundle/src/application/token/token.model.ts +160 -0
- package/bundle/src/application/token/token.types.ts +26 -0
- package/bundle/src/i18n/en.ts +59 -0
- package/bundle/src/i18n/ko.ts +59 -0
- package/bundle/src/i18n/sd.generated.ts +384 -0
- package/bundle/src/index.ts +6 -0
- package/bundle/src/sonamu.config.ts +248 -0
- package/bundle/src/src/application/qgrid/oauth.ts +181 -0
- package/bundle/src/src/application/qgrid/pool.ts +132 -0
- package/bundle/src/src/application/qgrid/qgrid.frame.ts +275 -0
- package/bundle/src/src/application/qgrid/qgrid.types.ts +117 -0
- package/bundle/src/src/application/qgrid/worker.ts +234 -0
- package/bundle/src/src/application/queries.generated.ts +59 -0
- package/bundle/src/src/application/request-log/request-log.entity.json +75 -0
- package/bundle/src/src/application/request-log/request-log.model.ts +155 -0
- package/bundle/src/src/application/request-log/request-log.types.ts +15 -0
- package/bundle/src/src/application/sonamu.generated.http +187 -0
- package/bundle/src/src/application/sonamu.generated.sso.ts +66 -0
- package/bundle/src/src/application/sonamu.generated.ts +135 -0
- package/bundle/src/src/application/token/token.entity.json +37 -0
- package/bundle/src/src/application/token/token.model.ts +160 -0
- package/bundle/src/src/application/token/token.types.ts +26 -0
- package/bundle/src/src/i18n/en.ts +59 -0
- package/bundle/src/src/i18n/ko.ts +59 -0
- package/bundle/src/src/i18n/sd.generated.ts +384 -0
- package/bundle/src/src/index.ts +6 -0
- package/bundle/src/src/migrations/20260410171405_create__request_logs.ts +23 -0
- package/bundle/src/src/migrations/20260410171406_create__tokens.ts +21 -0
- package/bundle/src/src/migrations/20260411120624_alter_tokens_alter2.ts +15 -0
- package/bundle/src/src/sonamu.config.ts +248 -0
- package/bundle/src/src/testing/fixture.ts +6 -0
- package/bundle/src/src/testing/global.ts +6 -0
- package/bundle/src/src/testing/setup-mocks.ts +44 -0
- package/bundle/src/src/typings/fastify.d.ts +8 -0
- package/bundle/src/src/typings/sonamu.d.ts +17 -0
- package/bundle/src/src/utils/subset-loaders.ts +11 -0
- package/bundle/src/testing/fixture.ts +6 -0
- package/bundle/src/testing/global.ts +6 -0
- package/bundle/src/testing/setup-mocks.ts +44 -0
- package/bundle/src/typings/fastify.d.ts +8 -0
- package/bundle/src/typings/sonamu.d.ts +17 -0
- package/bundle/src/utils/subset-loaders.ts +11 -0
- package/bundle/web-dist/web-dist/client/assets/index-DlPchHBY.js +116 -0
- package/bundle/web-dist/web-dist/client/assets/index-vZsvyuFn.css +1 -0
- package/bundle/web-dist/web-dist/client/assets/rolldown-runtime-Dw2cE7zH.js +1 -0
- package/bundle/web-dist/web-dist/client/assets/routes-CagDz23B.js +1 -0
- package/bundle/web-dist/web-dist/client/assets/sd.generated-BrQoQXvv.js +47 -0
- package/bundle/web-dist/web-dist/client/assets/services.generated-BspO2L0j.js +1 -0
- package/bundle/web-dist/web-dist/client/assets/show-aXUGa0gm.js +29 -0
- package/bundle/web-dist/web-dist/client/assets/tokens-DRkXtZ3Q.js +1 -0
- package/bundle/web-dist/web-dist/client/assets/vendor-react-DH4kUfK2.js +9 -0
- package/bundle/web-dist/web-dist/client/assets/vendor-tanstack-CUxlo6YN.js +1 -0
- package/bundle/web-dist/web-dist/client/index.html +18 -0
- package/bundle/web-dist/web-dist/server/assets/react-dom-CGIzOSuj.js +335 -0
- package/bundle/web-dist/web-dist/server/assets/routes-ClzReRep.js +490 -0
- package/bundle/web-dist/web-dist/server/assets/sd.generated-BnonqqKr.js +21694 -0
- package/bundle/web-dist/web-dist/server/assets/services.generated-D5ABD5fr.js +836 -0
- package/bundle/web-dist/web-dist/server/assets/show-C9pcdSxc.js +23364 -0
- package/bundle/web-dist/web-dist/server/assets/tokens-JH6FsnWZ.js +860 -0
- package/bundle/web-dist/web-dist/server/entry-server.generated.js +44646 -0
- package/package.json +11 -10
package/bundle/dist/dist/node_modules/.pnpm/@vitest_spy@4.1.2/node_modules/@vitest/spy/dist/index.js
ADDED
|
@@ -0,0 +1,386 @@
|
|
|
1
|
+
//#region ../../node_modules/.pnpm/@vitest+spy@4.1.2/node_modules/@vitest/spy/dist/index.js
|
|
2
|
+
function isMockFunction(fn) {
|
|
3
|
+
return typeof fn === "function" && "_isMockFunction" in fn && fn._isMockFunction === true;
|
|
4
|
+
}
|
|
5
|
+
const MOCK_RESTORE = /* @__PURE__ */ new Set();
|
|
6
|
+
const REGISTERED_MOCKS = /* @__PURE__ */ new Set();
|
|
7
|
+
const MOCK_CONFIGS = /* @__PURE__ */ new WeakMap();
|
|
8
|
+
function createMockInstance(options = {}) {
|
|
9
|
+
const { originalImplementation, restore, mockImplementation, resetToMockImplementation, resetToMockName } = options;
|
|
10
|
+
if (restore) MOCK_RESTORE.add(restore);
|
|
11
|
+
const config = getDefaultConfig(originalImplementation);
|
|
12
|
+
const state = getDefaultState();
|
|
13
|
+
const mock = createMock({
|
|
14
|
+
config,
|
|
15
|
+
state,
|
|
16
|
+
...options
|
|
17
|
+
});
|
|
18
|
+
const mockLength = (mockImplementation || originalImplementation)?.length ?? 0;
|
|
19
|
+
Object.defineProperty(mock, "length", {
|
|
20
|
+
writable: true,
|
|
21
|
+
enumerable: false,
|
|
22
|
+
value: mockLength,
|
|
23
|
+
configurable: true
|
|
24
|
+
});
|
|
25
|
+
if (resetToMockName) config.mockName = mock.name || "vi.fn()";
|
|
26
|
+
MOCK_CONFIGS.set(mock, config);
|
|
27
|
+
REGISTERED_MOCKS.add(mock);
|
|
28
|
+
mock._isMockFunction = true;
|
|
29
|
+
mock.getMockImplementation = () => {
|
|
30
|
+
return config.onceMockImplementations[0] || config.mockImplementation;
|
|
31
|
+
};
|
|
32
|
+
Object.defineProperty(mock, "mock", {
|
|
33
|
+
configurable: false,
|
|
34
|
+
enumerable: true,
|
|
35
|
+
writable: false,
|
|
36
|
+
value: state
|
|
37
|
+
});
|
|
38
|
+
mock.mockImplementation = function mockImplementation(implementation) {
|
|
39
|
+
config.mockImplementation = implementation;
|
|
40
|
+
return mock;
|
|
41
|
+
};
|
|
42
|
+
mock.mockImplementationOnce = function mockImplementationOnce(implementation) {
|
|
43
|
+
config.onceMockImplementations.push(implementation);
|
|
44
|
+
return mock;
|
|
45
|
+
};
|
|
46
|
+
mock.withImplementation = function withImplementation(implementation, callback) {
|
|
47
|
+
const previousImplementation = config.mockImplementation;
|
|
48
|
+
const previousOnceImplementations = config.onceMockImplementations;
|
|
49
|
+
const reset = () => {
|
|
50
|
+
config.mockImplementation = previousImplementation;
|
|
51
|
+
config.onceMockImplementations = previousOnceImplementations;
|
|
52
|
+
};
|
|
53
|
+
config.mockImplementation = implementation;
|
|
54
|
+
config.onceMockImplementations = [];
|
|
55
|
+
const returnValue = callback();
|
|
56
|
+
if (typeof returnValue === "object" && typeof returnValue?.then === "function") return returnValue.then(() => {
|
|
57
|
+
reset();
|
|
58
|
+
return mock;
|
|
59
|
+
});
|
|
60
|
+
else reset();
|
|
61
|
+
return mock;
|
|
62
|
+
};
|
|
63
|
+
mock.mockReturnThis = function mockReturnThis() {
|
|
64
|
+
return mock.mockImplementation(function() {
|
|
65
|
+
return this;
|
|
66
|
+
});
|
|
67
|
+
};
|
|
68
|
+
mock.mockReturnValue = function mockReturnValue(value) {
|
|
69
|
+
return mock.mockImplementation(function() {
|
|
70
|
+
if (new.target) throwConstructorError("mockReturnValue");
|
|
71
|
+
return value;
|
|
72
|
+
});
|
|
73
|
+
};
|
|
74
|
+
mock.mockReturnValueOnce = function mockReturnValueOnce(value) {
|
|
75
|
+
return mock.mockImplementationOnce(function() {
|
|
76
|
+
if (new.target) throwConstructorError("mockReturnValueOnce");
|
|
77
|
+
return value;
|
|
78
|
+
});
|
|
79
|
+
};
|
|
80
|
+
mock.mockThrow = function mockThrow(value) {
|
|
81
|
+
return mock.mockImplementation(function() {
|
|
82
|
+
throw value;
|
|
83
|
+
});
|
|
84
|
+
};
|
|
85
|
+
mock.mockThrowOnce = function mockThrowOnce(value) {
|
|
86
|
+
return mock.mockImplementationOnce(function() {
|
|
87
|
+
throw value;
|
|
88
|
+
});
|
|
89
|
+
};
|
|
90
|
+
mock.mockResolvedValue = function mockResolvedValue(value) {
|
|
91
|
+
return mock.mockImplementation(function() {
|
|
92
|
+
if (new.target) throwConstructorError("mockResolvedValue");
|
|
93
|
+
return Promise.resolve(value);
|
|
94
|
+
});
|
|
95
|
+
};
|
|
96
|
+
mock.mockResolvedValueOnce = function mockResolvedValueOnce(value) {
|
|
97
|
+
return mock.mockImplementationOnce(function() {
|
|
98
|
+
if (new.target) throwConstructorError("mockResolvedValueOnce");
|
|
99
|
+
return Promise.resolve(value);
|
|
100
|
+
});
|
|
101
|
+
};
|
|
102
|
+
mock.mockRejectedValue = function mockRejectedValue(value) {
|
|
103
|
+
return mock.mockImplementation(function() {
|
|
104
|
+
if (new.target) throwConstructorError("mockRejectedValue");
|
|
105
|
+
return Promise.reject(value);
|
|
106
|
+
});
|
|
107
|
+
};
|
|
108
|
+
mock.mockRejectedValueOnce = function mockRejectedValueOnce(value) {
|
|
109
|
+
return mock.mockImplementationOnce(function() {
|
|
110
|
+
if (new.target) throwConstructorError("mockRejectedValueOnce");
|
|
111
|
+
return Promise.reject(value);
|
|
112
|
+
});
|
|
113
|
+
};
|
|
114
|
+
mock.mockClear = function mockClear() {
|
|
115
|
+
state.calls = [];
|
|
116
|
+
state.contexts = [];
|
|
117
|
+
state.instances = [];
|
|
118
|
+
state.invocationCallOrder = [];
|
|
119
|
+
state.results = [];
|
|
120
|
+
state.settledResults = [];
|
|
121
|
+
return mock;
|
|
122
|
+
};
|
|
123
|
+
mock.mockReset = function mockReset() {
|
|
124
|
+
mock.mockClear();
|
|
125
|
+
config.mockImplementation = resetToMockImplementation ? mockImplementation : void 0;
|
|
126
|
+
config.mockName = resetToMockName ? mock.name || "vi.fn()" : "vi.fn()";
|
|
127
|
+
config.onceMockImplementations = [];
|
|
128
|
+
return mock;
|
|
129
|
+
};
|
|
130
|
+
mock.mockRestore = function mockRestore() {
|
|
131
|
+
mock.mockReset();
|
|
132
|
+
return restore?.();
|
|
133
|
+
};
|
|
134
|
+
mock.mockName = function mockName(name) {
|
|
135
|
+
if (typeof name === "string") config.mockName = name;
|
|
136
|
+
return mock;
|
|
137
|
+
};
|
|
138
|
+
mock.getMockName = function getMockName() {
|
|
139
|
+
return config.mockName || "vi.fn()";
|
|
140
|
+
};
|
|
141
|
+
if (Symbol.dispose) mock[Symbol.dispose] = () => mock.mockRestore();
|
|
142
|
+
if (mockImplementation) mock.mockImplementation(mockImplementation);
|
|
143
|
+
return mock;
|
|
144
|
+
}
|
|
145
|
+
function fn(originalImplementation) {
|
|
146
|
+
if (originalImplementation != null && isMockFunction(originalImplementation)) return originalImplementation;
|
|
147
|
+
return createMockInstance({
|
|
148
|
+
mockImplementation: originalImplementation,
|
|
149
|
+
resetToMockImplementation: true
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
function spyOn(object, key, accessor) {
|
|
153
|
+
assert(object != null, "The vi.spyOn() function could not find an object to spy upon. The first argument must be defined.");
|
|
154
|
+
assert(typeof object === "object" || typeof object === "function", "Vitest cannot spy on a primitive value.");
|
|
155
|
+
const [originalDescriptorObject, originalDescriptor] = getDescriptor(object, key) || [];
|
|
156
|
+
assert(originalDescriptor || key in object, `The property "${String(key)}" is not defined on the ${typeof object}.`);
|
|
157
|
+
let accessType = accessor || "value";
|
|
158
|
+
let ssr = false;
|
|
159
|
+
if (accessType === "value" && originalDescriptor && originalDescriptor.value == null && originalDescriptor.get) {
|
|
160
|
+
accessType = "get";
|
|
161
|
+
ssr = true;
|
|
162
|
+
}
|
|
163
|
+
let original;
|
|
164
|
+
if (originalDescriptor) {
|
|
165
|
+
original = originalDescriptor[accessType];
|
|
166
|
+
if (original == null && accessType === "value") original = object[key];
|
|
167
|
+
} else if (accessType !== "value") original = () => object[key];
|
|
168
|
+
else original = object[key];
|
|
169
|
+
const originalImplementation = ssr && original ? original() : original;
|
|
170
|
+
const originalType = typeof originalImplementation;
|
|
171
|
+
assert(originalType === "function" || accessType !== "value" && original == null, `vi.spyOn() can only spy on a function. Received ${originalType}.`);
|
|
172
|
+
if (isMockFunction(originalImplementation)) return originalImplementation;
|
|
173
|
+
const reassign = (cb) => {
|
|
174
|
+
const { value, ...desc } = originalDescriptor || {
|
|
175
|
+
configurable: true,
|
|
176
|
+
writable: true
|
|
177
|
+
};
|
|
178
|
+
if (accessType !== "value") delete desc.writable;
|
|
179
|
+
desc[accessType] = cb;
|
|
180
|
+
Object.defineProperty(object, key, desc);
|
|
181
|
+
};
|
|
182
|
+
const restore = () => {
|
|
183
|
+
if (originalDescriptorObject !== object) Reflect.deleteProperty(object, key);
|
|
184
|
+
else if (originalDescriptor && !original) Object.defineProperty(object, key, originalDescriptor);
|
|
185
|
+
else reassign(original);
|
|
186
|
+
};
|
|
187
|
+
const mock = createMockInstance({
|
|
188
|
+
restore,
|
|
189
|
+
originalImplementation,
|
|
190
|
+
resetToMockName: true
|
|
191
|
+
});
|
|
192
|
+
try {
|
|
193
|
+
reassign(ssr ? () => mock : mock);
|
|
194
|
+
} catch (error) {
|
|
195
|
+
if (error instanceof TypeError && Symbol.toStringTag && object[Symbol.toStringTag] === "Module" && (error.message.includes("Cannot redefine property") || error.message.includes("Cannot replace module namespace") || error.message.includes("can't redefine non-configurable property"))) throw new TypeError(`Cannot spy on export "${String(key)}". Module namespace is not configurable in ESM. See: https://vitest.dev/guide/browser/#limitations`, { cause: error });
|
|
196
|
+
throw error;
|
|
197
|
+
}
|
|
198
|
+
return mock;
|
|
199
|
+
}
|
|
200
|
+
function getDescriptor(obj, method) {
|
|
201
|
+
const objDescriptor = Object.getOwnPropertyDescriptor(obj, method);
|
|
202
|
+
if (objDescriptor) return [obj, objDescriptor];
|
|
203
|
+
let currentProto = Object.getPrototypeOf(obj);
|
|
204
|
+
while (currentProto !== null) {
|
|
205
|
+
const descriptor = Object.getOwnPropertyDescriptor(currentProto, method);
|
|
206
|
+
if (descriptor) return [currentProto, descriptor];
|
|
207
|
+
currentProto = Object.getPrototypeOf(currentProto);
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
function assert(condition, message) {
|
|
211
|
+
if (!condition) throw new Error(message);
|
|
212
|
+
}
|
|
213
|
+
let invocationCallCounter = 1;
|
|
214
|
+
function createMock({ state, config, name: mockName, prototypeState, prototypeConfig, keepMembersImplementation, mockImplementation, prototypeMembers = [] }) {
|
|
215
|
+
const original = config.mockOriginal;
|
|
216
|
+
const pseudoOriginal = mockImplementation;
|
|
217
|
+
const name = mockName || original?.name || "Mock";
|
|
218
|
+
const namedObject = { [name]: (function(...args) {
|
|
219
|
+
registerCalls(args, state, prototypeState);
|
|
220
|
+
registerInvocationOrder(invocationCallCounter++, state, prototypeState);
|
|
221
|
+
const result = {
|
|
222
|
+
type: "incomplete",
|
|
223
|
+
value: void 0
|
|
224
|
+
};
|
|
225
|
+
const settledResult = {
|
|
226
|
+
type: "incomplete",
|
|
227
|
+
value: void 0
|
|
228
|
+
};
|
|
229
|
+
registerResult(result, state, prototypeState);
|
|
230
|
+
registerSettledResult(settledResult, state, prototypeState);
|
|
231
|
+
const context = new.target ? void 0 : this;
|
|
232
|
+
const [instanceIndex, instancePrototypeIndex] = registerInstance(context, state, prototypeState);
|
|
233
|
+
const [contextIndex, contextPrototypeIndex] = registerContext(context, state, prototypeState);
|
|
234
|
+
const implementation = config.onceMockImplementations.shift() || config.mockImplementation || prototypeConfig?.onceMockImplementations.shift() || prototypeConfig?.mockImplementation || original || function() {};
|
|
235
|
+
let returnValue;
|
|
236
|
+
let thrownValue;
|
|
237
|
+
let didThrow = false;
|
|
238
|
+
try {
|
|
239
|
+
if (new.target) {
|
|
240
|
+
returnValue = Reflect.construct(implementation, args, new.target);
|
|
241
|
+
for (const prop of prototypeMembers) {
|
|
242
|
+
const prototypeMock = returnValue[prop];
|
|
243
|
+
if (prototypeMock !== mock.prototype[prop]) continue;
|
|
244
|
+
const isMock = isMockFunction(prototypeMock);
|
|
245
|
+
const prototypeState = isMock ? prototypeMock.mock : void 0;
|
|
246
|
+
const prototypeConfig = isMock ? MOCK_CONFIGS.get(prototypeMock) : void 0;
|
|
247
|
+
returnValue[prop] = createMockInstance({
|
|
248
|
+
originalImplementation: keepMembersImplementation ? prototypeConfig?.mockOriginal : void 0,
|
|
249
|
+
prototypeState,
|
|
250
|
+
prototypeConfig,
|
|
251
|
+
keepMembersImplementation
|
|
252
|
+
});
|
|
253
|
+
}
|
|
254
|
+
} else returnValue = implementation.apply(this, args);
|
|
255
|
+
} catch (error) {
|
|
256
|
+
thrownValue = error;
|
|
257
|
+
didThrow = true;
|
|
258
|
+
if (error instanceof TypeError && error.message.includes("is not a constructor")) console.warn(`[vitest] The ${namedObject[name].getMockName()} mock did not use 'function' or 'class' in its implementation, see https://vitest.dev/api/vi#vi-spyon for examples.`);
|
|
259
|
+
throw error;
|
|
260
|
+
} finally {
|
|
261
|
+
if (didThrow) {
|
|
262
|
+
result.type = "throw";
|
|
263
|
+
result.value = thrownValue;
|
|
264
|
+
settledResult.type = "rejected";
|
|
265
|
+
settledResult.value = thrownValue;
|
|
266
|
+
} else {
|
|
267
|
+
result.type = "return";
|
|
268
|
+
result.value = returnValue;
|
|
269
|
+
if (new.target) {
|
|
270
|
+
state.contexts[contextIndex - 1] = returnValue;
|
|
271
|
+
state.instances[instanceIndex - 1] = returnValue;
|
|
272
|
+
if (contextPrototypeIndex != null && prototypeState) prototypeState.contexts[contextPrototypeIndex - 1] = returnValue;
|
|
273
|
+
if (instancePrototypeIndex != null && prototypeState) prototypeState.instances[instancePrototypeIndex - 1] = returnValue;
|
|
274
|
+
}
|
|
275
|
+
if (returnValue instanceof Promise) returnValue.then((settledValue) => {
|
|
276
|
+
settledResult.type = "fulfilled";
|
|
277
|
+
settledResult.value = settledValue;
|
|
278
|
+
}, (rejectedValue) => {
|
|
279
|
+
settledResult.type = "rejected";
|
|
280
|
+
settledResult.value = rejectedValue;
|
|
281
|
+
});
|
|
282
|
+
else {
|
|
283
|
+
settledResult.type = "fulfilled";
|
|
284
|
+
settledResult.value = returnValue;
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
return returnValue;
|
|
289
|
+
}) };
|
|
290
|
+
const mock = namedObject[name];
|
|
291
|
+
const copyPropertiesFrom = original || pseudoOriginal;
|
|
292
|
+
if (copyPropertiesFrom) copyOriginalStaticProperties(mock, copyPropertiesFrom);
|
|
293
|
+
return mock;
|
|
294
|
+
}
|
|
295
|
+
function registerCalls(args, state, prototypeState) {
|
|
296
|
+
state.calls.push(args);
|
|
297
|
+
prototypeState?.calls.push(args);
|
|
298
|
+
}
|
|
299
|
+
function registerInvocationOrder(order, state, prototypeState) {
|
|
300
|
+
state.invocationCallOrder.push(order);
|
|
301
|
+
prototypeState?.invocationCallOrder.push(order);
|
|
302
|
+
}
|
|
303
|
+
function registerResult(result, state, prototypeState) {
|
|
304
|
+
state.results.push(result);
|
|
305
|
+
prototypeState?.results.push(result);
|
|
306
|
+
}
|
|
307
|
+
function registerSettledResult(result, state, prototypeState) {
|
|
308
|
+
state.settledResults.push(result);
|
|
309
|
+
prototypeState?.settledResults.push(result);
|
|
310
|
+
}
|
|
311
|
+
function registerInstance(instance, state, prototypeState) {
|
|
312
|
+
return [state.instances.push(instance), prototypeState?.instances.push(instance)];
|
|
313
|
+
}
|
|
314
|
+
function registerContext(context, state, prototypeState) {
|
|
315
|
+
return [state.contexts.push(context), prototypeState?.contexts.push(context)];
|
|
316
|
+
}
|
|
317
|
+
function copyOriginalStaticProperties(mock, original) {
|
|
318
|
+
const { properties, descriptors } = getAllProperties(original);
|
|
319
|
+
for (const key of properties) {
|
|
320
|
+
const descriptor = descriptors[key];
|
|
321
|
+
if (getDescriptor(mock, key)) continue;
|
|
322
|
+
Object.defineProperty(mock, key, descriptor);
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
const ignoreProperties = new Set([
|
|
326
|
+
"length",
|
|
327
|
+
"name",
|
|
328
|
+
"prototype",
|
|
329
|
+
Symbol.for("nodejs.util.promisify.custom")
|
|
330
|
+
]);
|
|
331
|
+
function getAllProperties(original) {
|
|
332
|
+
const properties = /* @__PURE__ */ new Set();
|
|
333
|
+
const descriptors = {};
|
|
334
|
+
while (original && original !== Object.prototype && original !== Function.prototype) {
|
|
335
|
+
const ownProperties = [...Object.getOwnPropertyNames(original), ...Object.getOwnPropertySymbols(original)];
|
|
336
|
+
for (const prop of ownProperties) {
|
|
337
|
+
if (descriptors[prop] || ignoreProperties.has(prop)) continue;
|
|
338
|
+
properties.add(prop);
|
|
339
|
+
descriptors[prop] = Object.getOwnPropertyDescriptor(original, prop);
|
|
340
|
+
}
|
|
341
|
+
original = Object.getPrototypeOf(original);
|
|
342
|
+
}
|
|
343
|
+
return {
|
|
344
|
+
properties,
|
|
345
|
+
descriptors
|
|
346
|
+
};
|
|
347
|
+
}
|
|
348
|
+
function getDefaultConfig(original) {
|
|
349
|
+
return {
|
|
350
|
+
mockImplementation: void 0,
|
|
351
|
+
mockOriginal: original,
|
|
352
|
+
mockName: "vi.fn()",
|
|
353
|
+
onceMockImplementations: []
|
|
354
|
+
};
|
|
355
|
+
}
|
|
356
|
+
function getDefaultState() {
|
|
357
|
+
const state = {
|
|
358
|
+
calls: [],
|
|
359
|
+
contexts: [],
|
|
360
|
+
instances: [],
|
|
361
|
+
invocationCallOrder: [],
|
|
362
|
+
settledResults: [],
|
|
363
|
+
results: [],
|
|
364
|
+
get lastCall() {
|
|
365
|
+
return state.calls.at(-1);
|
|
366
|
+
}
|
|
367
|
+
};
|
|
368
|
+
return state;
|
|
369
|
+
}
|
|
370
|
+
function restoreAllMocks() {
|
|
371
|
+
for (const restore of MOCK_RESTORE) restore();
|
|
372
|
+
MOCK_RESTORE.clear();
|
|
373
|
+
}
|
|
374
|
+
function clearAllMocks() {
|
|
375
|
+
REGISTERED_MOCKS.forEach((mock) => mock.mockClear());
|
|
376
|
+
}
|
|
377
|
+
function resetAllMocks() {
|
|
378
|
+
REGISTERED_MOCKS.forEach((mock) => mock.mockReset());
|
|
379
|
+
}
|
|
380
|
+
function throwConstructorError(shorthand) {
|
|
381
|
+
throw new TypeError(`Cannot use \`${shorthand}\` when called with \`new\`. Use \`mockImplementation\` with a \`class\` keyword instead. See https://vitest.dev/api/mock#class-support for more information.`);
|
|
382
|
+
}
|
|
383
|
+
//#endregion
|
|
384
|
+
export { clearAllMocks, fn, isMockFunction, resetAllMocks, restoreAllMocks, spyOn };
|
|
385
|
+
|
|
386
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0B2aXRlc3Qrc3B5QDQuMS4yL25vZGVfbW9kdWxlcy9Adml0ZXN0L3NweS9kaXN0L2luZGV4LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImZ1bmN0aW9uIGlzTW9ja0Z1bmN0aW9uKGZuKSB7XG5cdHJldHVybiB0eXBlb2YgZm4gPT09IFwiZnVuY3Rpb25cIiAmJiBcIl9pc01vY2tGdW5jdGlvblwiIGluIGZuICYmIGZuLl9pc01vY2tGdW5jdGlvbiA9PT0gdHJ1ZTtcbn1cbmNvbnN0IE1PQ0tfUkVTVE9SRSA9IG5ldyBTZXQoKTtcbi8vIEplc3Qga2VlcHMgdGhlIHN0YXRlIGluIGEgc2VwYXJhdGUgV2Vha01hcCB3aGljaCBpcyBnb29kIGZvciBtZW1vcnksXG4vLyBidXQgaXQgbWFrZXMgdGhlIHN0YXRlIHNsb3dlciB0byBhY2Nlc3MgYW5kIHJldHVybiBkaWZmZXJlbnQgdmFsdWVzXG4vLyBpZiB5b3Ugc3RvcmVkIGl0IGJlZm9yZSBjYWxsaW5nIGBtb2NrQ2xlYXJgIHdoZXJlIGl0IHdpbGwgYmUgcmVjcmVhdGVkXG5jb25zdCBSRUdJU1RFUkVEX01PQ0tTID0gbmV3IFNldCgpO1xuY29uc3QgTU9DS19DT05GSUdTID0gbmV3IFdlYWtNYXAoKTtcbmZ1bmN0aW9uIGNyZWF0ZU1vY2tJbnN0YW5jZShvcHRpb25zID0ge30pIHtcblx0Y29uc3QgeyBvcmlnaW5hbEltcGxlbWVudGF0aW9uLCByZXN0b3JlLCBtb2NrSW1wbGVtZW50YXRpb24sIHJlc2V0VG9Nb2NrSW1wbGVtZW50YXRpb24sIHJlc2V0VG9Nb2NrTmFtZSB9ID0gb3B0aW9ucztcblx0aWYgKHJlc3RvcmUpIHtcblx0XHRNT0NLX1JFU1RPUkUuYWRkKHJlc3RvcmUpO1xuXHR9XG5cdGNvbnN0IGNvbmZpZyA9IGdldERlZmF1bHRDb25maWcob3JpZ2luYWxJbXBsZW1lbnRhdGlvbik7XG5cdGNvbnN0IHN0YXRlID0gZ2V0RGVmYXVsdFN0YXRlKCk7XG5cdGNvbnN0IG1vY2sgPSBjcmVhdGVNb2NrKHtcblx0XHRjb25maWcsXG5cdFx0c3RhdGUsXG5cdFx0Li4ub3B0aW9uc1xuXHR9KTtcblx0Y29uc3QgbW9ja0xlbmd0aCA9IChtb2NrSW1wbGVtZW50YXRpb24gfHwgb3JpZ2luYWxJbXBsZW1lbnRhdGlvbik/Lmxlbmd0aCA/PyAwO1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkobW9jaywgXCJsZW5ndGhcIiwge1xuXHRcdHdyaXRhYmxlOiB0cnVlLFxuXHRcdGVudW1lcmFibGU6IGZhbHNlLFxuXHRcdHZhbHVlOiBtb2NrTGVuZ3RoLFxuXHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZVxuXHR9KTtcblx0Ly8gaW5oZXJpdCB0aGUgZGVmYXVsdCBuYW1lIHNvIGl0IGFwcGVhcnMgaW4gc25hcHNob3RzIGFuZCBsb2dzXG5cdC8vIHRoaXMgaXMgdXNlZCBieSBgdmkuc3B5T24oKWAgZm9yIGJldHRlciBkZWJ1Z2dpbmcuXG5cdC8vIHdoZW4gYHZpLmZuKClgIGlzIGNhbGxlZCwgd2UganVzdCB1c2UgdGhlIGRlZmF1bHQgc3RyaW5nXG5cdGlmIChyZXNldFRvTW9ja05hbWUpIHtcblx0XHRjb25maWcubW9ja05hbWUgPSBtb2NrLm5hbWUgfHwgXCJ2aS5mbigpXCI7XG5cdH1cblx0TU9DS19DT05GSUdTLnNldChtb2NrLCBjb25maWcpO1xuXHRSRUdJU1RFUkVEX01PQ0tTLmFkZChtb2NrKTtcblx0bW9jay5faXNNb2NrRnVuY3Rpb24gPSB0cnVlO1xuXHRtb2NrLmdldE1vY2tJbXBsZW1lbnRhdGlvbiA9ICgpID0+IHtcblx0XHQvLyBKZXN0IG9ubHkgcmV0dXJucyBgY29uZmlnLm1vY2tJbXBsZW1lbnRhdGlvbmAgaGVyZSxcblx0XHQvLyBidXQgd2UgdGhpbmsgaXQgbWFrZXMgc2Vuc2UgdG8gcmV0dXJuIHdoYXQgdGhlIG5leHQgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWRcblx0XHRyZXR1cm4gY29uZmlnLm9uY2VNb2NrSW1wbGVtZW50YXRpb25zWzBdIHx8IGNvbmZpZy5tb2NrSW1wbGVtZW50YXRpb247XG5cdH07XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShtb2NrLCBcIm1vY2tcIiwge1xuXHRcdGNvbmZpZ3VyYWJsZTogZmFsc2UsXG5cdFx0ZW51bWVyYWJsZTogdHJ1ZSxcblx0XHR3cml0YWJsZTogZmFsc2UsXG5cdFx0dmFsdWU6IHN0YXRlXG5cdH0pO1xuXHRtb2NrLm1vY2tJbXBsZW1lbnRhdGlvbiA9IGZ1bmN0aW9uIG1vY2tJbXBsZW1lbnRhdGlvbihpbXBsZW1lbnRhdGlvbikge1xuXHRcdGNvbmZpZy5tb2NrSW1wbGVtZW50YXRpb24gPSBpbXBsZW1lbnRhdGlvbjtcblx0XHRyZXR1cm4gbW9jaztcblx0fTtcblx0bW9jay5tb2NrSW1wbGVtZW50YXRpb25PbmNlID0gZnVuY3Rpb24gbW9ja0ltcGxlbWVudGF0aW9uT25jZShpbXBsZW1lbnRhdGlvbikge1xuXHRcdGNvbmZpZy5vbmNlTW9ja0ltcGxlbWVudGF0aW9ucy5wdXNoKGltcGxlbWVudGF0aW9uKTtcblx0XHRyZXR1cm4gbW9jaztcblx0fTtcblx0bW9jay53aXRoSW1wbGVtZW50YXRpb24gPSBmdW5jdGlvbiB3aXRoSW1wbGVtZW50YXRpb24oaW1wbGVtZW50YXRpb24sIGNhbGxiYWNrKSB7XG5cdFx0Y29uc3QgcHJldmlvdXNJbXBsZW1lbnRhdGlvbiA9IGNvbmZpZy5tb2NrSW1wbGVtZW50YXRpb247XG5cdFx0Y29uc3QgcHJldmlvdXNPbmNlSW1wbGVtZW50YXRpb25zID0gY29uZmlnLm9uY2VNb2NrSW1wbGVtZW50YXRpb25zO1xuXHRcdGNvbnN0IHJlc2V0ID0gKCkgPT4ge1xuXHRcdFx0Y29uZmlnLm1vY2tJbXBsZW1lbnRhdGlvbiA9IHByZXZpb3VzSW1wbGVtZW50YXRpb247XG5cdFx0XHRjb25maWcub25jZU1vY2tJbXBsZW1lbnRhdGlvbnMgPSBwcmV2aW91c09uY2VJbXBsZW1lbnRhdGlvbnM7XG5cdFx0fTtcblx0XHRjb25maWcubW9ja0ltcGxlbWVudGF0aW9uID0gaW1wbGVtZW50YXRpb247XG5cdFx0Y29uZmlnLm9uY2VNb2NrSW1wbGVtZW50YXRpb25zID0gW107XG5cdFx0Y29uc3QgcmV0dXJuVmFsdWUgPSBjYWxsYmFjaygpO1xuXHRcdGlmICh0eXBlb2YgcmV0dXJuVmFsdWUgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIHJldHVyblZhbHVlPy50aGVuID09PSBcImZ1bmN0aW9uXCIpIHtcblx0XHRcdHJldHVybiByZXR1cm5WYWx1ZS50aGVuKCgpID0+IHtcblx0XHRcdFx0cmVzZXQoKTtcblx0XHRcdFx0cmV0dXJuIG1vY2s7XG5cdFx0XHR9KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmVzZXQoKTtcblx0XHR9XG5cdFx0cmV0dXJuIG1vY2s7XG5cdH07XG5cdG1vY2subW9ja1JldHVyblRoaXMgPSBmdW5jdGlvbiBtb2NrUmV0dXJuVGhpcygpIHtcblx0XHRyZXR1cm4gbW9jay5tb2NrSW1wbGVtZW50YXRpb24oZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9KTtcblx0fTtcblx0bW9jay5tb2NrUmV0dXJuVmFsdWUgPSBmdW5jdGlvbiBtb2NrUmV0dXJuVmFsdWUodmFsdWUpIHtcblx0XHRyZXR1cm4gbW9jay5tb2NrSW1wbGVtZW50YXRpb24oZnVuY3Rpb24oKSB7XG5cdFx0XHRpZiAobmV3LnRhcmdldCkge1xuXHRcdFx0XHR0aHJvd0NvbnN0cnVjdG9yRXJyb3IoXCJtb2NrUmV0dXJuVmFsdWVcIik7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdmFsdWU7XG5cdFx0fSk7XG5cdH07XG5cdG1vY2subW9ja1JldHVyblZhbHVlT25jZSA9IGZ1bmN0aW9uIG1vY2tSZXR1cm5WYWx1ZU9uY2UodmFsdWUpIHtcblx0XHRyZXR1cm4gbW9jay5tb2NrSW1wbGVtZW50YXRpb25PbmNlKGZ1bmN0aW9uKCkge1xuXHRcdFx0aWYgKG5ldy50YXJnZXQpIHtcblx0XHRcdFx0dGhyb3dDb25zdHJ1Y3RvckVycm9yKFwibW9ja1JldHVyblZhbHVlT25jZVwiKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHR9KTtcblx0fTtcblx0bW9jay5tb2NrVGhyb3cgPSBmdW5jdGlvbiBtb2NrVGhyb3codmFsdWUpIHtcblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLWFycm93LWNhbGxiYWNrXG5cdFx0cmV0dXJuIG1vY2subW9ja0ltcGxlbWVudGF0aW9uKGZ1bmN0aW9uKCkge1xuXHRcdFx0dGhyb3cgdmFsdWU7XG5cdFx0fSk7XG5cdH07XG5cdG1vY2subW9ja1Rocm93T25jZSA9IGZ1bmN0aW9uIG1vY2tUaHJvd09uY2UodmFsdWUpIHtcblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLWFycm93LWNhbGxiYWNrXG5cdFx0cmV0dXJuIG1vY2subW9ja0ltcGxlbWVudGF0aW9uT25jZShmdW5jdGlvbigpIHtcblx0XHRcdHRocm93IHZhbHVlO1xuXHRcdH0pO1xuXHR9O1xuXHRtb2NrLm1vY2tSZXNvbHZlZFZhbHVlID0gZnVuY3Rpb24gbW9ja1Jlc29sdmVkVmFsdWUodmFsdWUpIHtcblx0XHRyZXR1cm4gbW9jay5tb2NrSW1wbGVtZW50YXRpb24oZnVuY3Rpb24oKSB7XG5cdFx0XHRpZiAobmV3LnRhcmdldCkge1xuXHRcdFx0XHR0aHJvd0NvbnN0cnVjdG9yRXJyb3IoXCJtb2NrUmVzb2x2ZWRWYWx1ZVwiKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUodmFsdWUpO1xuXHRcdH0pO1xuXHR9O1xuXHRtb2NrLm1vY2tSZXNvbHZlZFZhbHVlT25jZSA9IGZ1bmN0aW9uIG1vY2tSZXNvbHZlZFZhbHVlT25jZSh2YWx1ZSkge1xuXHRcdHJldHVybiBtb2NrLm1vY2tJbXBsZW1lbnRhdGlvbk9uY2UoZnVuY3Rpb24oKSB7XG5cdFx0XHRpZiAobmV3LnRhcmdldCkge1xuXHRcdFx0XHR0aHJvd0NvbnN0cnVjdG9yRXJyb3IoXCJtb2NrUmVzb2x2ZWRWYWx1ZU9uY2VcIik7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHZhbHVlKTtcblx0XHR9KTtcblx0fTtcblx0bW9jay5tb2NrUmVqZWN0ZWRWYWx1ZSA9IGZ1bmN0aW9uIG1vY2tSZWplY3RlZFZhbHVlKHZhbHVlKSB7XG5cdFx0cmV0dXJuIG1vY2subW9ja0ltcGxlbWVudGF0aW9uKGZ1bmN0aW9uKCkge1xuXHRcdFx0aWYgKG5ldy50YXJnZXQpIHtcblx0XHRcdFx0dGhyb3dDb25zdHJ1Y3RvckVycm9yKFwibW9ja1JlamVjdGVkVmFsdWVcIik7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZWplY3QodmFsdWUpO1xuXHRcdH0pO1xuXHR9O1xuXHRtb2NrLm1vY2tSZWplY3RlZFZhbHVlT25jZSA9IGZ1bmN0aW9uIG1vY2tSZWplY3RlZFZhbHVlT25jZSh2YWx1ZSkge1xuXHRcdHJldHVybiBtb2NrLm1vY2tJbXBsZW1lbnRhdGlvbk9uY2UoZnVuY3Rpb24oKSB7XG5cdFx0XHRpZiAobmV3LnRhcmdldCkge1xuXHRcdFx0XHR0aHJvd0NvbnN0cnVjdG9yRXJyb3IoXCJtb2NrUmVqZWN0ZWRWYWx1ZU9uY2VcIik7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZWplY3QodmFsdWUpO1xuXHRcdH0pO1xuXHR9O1xuXHRtb2NrLm1vY2tDbGVhciA9IGZ1bmN0aW9uIG1vY2tDbGVhcigpIHtcblx0XHRzdGF0ZS5jYWxscyA9IFtdO1xuXHRcdHN0YXRlLmNvbnRleHRzID0gW107XG5cdFx0c3RhdGUuaW5zdGFuY2VzID0gW107XG5cdFx0c3RhdGUuaW52b2NhdGlvbkNhbGxPcmRlciA9IFtdO1xuXHRcdHN0YXRlLnJlc3VsdHMgPSBbXTtcblx0XHRzdGF0ZS5zZXR0bGVkUmVzdWx0cyA9IFtdO1xuXHRcdHJldHVybiBtb2NrO1xuXHR9O1xuXHRtb2NrLm1vY2tSZXNldCA9IGZ1bmN0aW9uIG1vY2tSZXNldCgpIHtcblx0XHRtb2NrLm1vY2tDbGVhcigpO1xuXHRcdGNvbmZpZy5tb2NrSW1wbGVtZW50YXRpb24gPSByZXNldFRvTW9ja0ltcGxlbWVudGF0aW9uID8gbW9ja0ltcGxlbWVudGF0aW9uIDogdW5kZWZpbmVkO1xuXHRcdGNvbmZpZy5tb2NrTmFtZSA9IHJlc2V0VG9Nb2NrTmFtZSA/IG1vY2submFtZSB8fCBcInZpLmZuKClcIiA6IFwidmkuZm4oKVwiO1xuXHRcdGNvbmZpZy5vbmNlTW9ja0ltcGxlbWVudGF0aW9ucyA9IFtdO1xuXHRcdHJldHVybiBtb2NrO1xuXHR9O1xuXHRtb2NrLm1vY2tSZXN0b3JlID0gZnVuY3Rpb24gbW9ja1Jlc3RvcmUoKSB7XG5cdFx0bW9jay5tb2NrUmVzZXQoKTtcblx0XHRyZXR1cm4gcmVzdG9yZT8uKCk7XG5cdH07XG5cdG1vY2subW9ja05hbWUgPSBmdW5jdGlvbiBtb2NrTmFtZShuYW1lKSB7XG5cdFx0aWYgKHR5cGVvZiBuYW1lID09PSBcInN0cmluZ1wiKSB7XG5cdFx0XHRjb25maWcubW9ja05hbWUgPSBuYW1lO1xuXHRcdH1cblx0XHRyZXR1cm4gbW9jaztcblx0fTtcblx0bW9jay5nZXRNb2NrTmFtZSA9IGZ1bmN0aW9uIGdldE1vY2tOYW1lKCkge1xuXHRcdHJldHVybiBjb25maWcubW9ja05hbWUgfHwgXCJ2aS5mbigpXCI7XG5cdH07XG5cdGlmIChTeW1ib2wuZGlzcG9zZSkge1xuXHRcdG1vY2tbU3ltYm9sLmRpc3Bvc2VdID0gKCkgPT4gbW9jay5tb2NrUmVzdG9yZSgpO1xuXHR9XG5cdGlmIChtb2NrSW1wbGVtZW50YXRpb24pIHtcblx0XHRtb2NrLm1vY2tJbXBsZW1lbnRhdGlvbihtb2NrSW1wbGVtZW50YXRpb24pO1xuXHR9XG5cdHJldHVybiBtb2NrO1xufVxuZnVuY3Rpb24gZm4ob3JpZ2luYWxJbXBsZW1lbnRhdGlvbikge1xuXHQvLyBpZiB0aGUgZnVuY3Rpb24gaXMgYWxyZWFkeSBhIG1vY2ssIGp1c3QgcmV0dXJuIHRoZSBzYW1lIGZ1bmN0aW9uLFxuXHQvLyBzaW1pbGFybHkgdG8gaG93IHZpLnNweU9uKCkgd29ya3Ncblx0aWYgKG9yaWdpbmFsSW1wbGVtZW50YXRpb24gIT0gbnVsbCAmJiBpc01vY2tGdW5jdGlvbihvcmlnaW5hbEltcGxlbWVudGF0aW9uKSkge1xuXHRcdHJldHVybiBvcmlnaW5hbEltcGxlbWVudGF0aW9uO1xuXHR9XG5cdHJldHVybiBjcmVhdGVNb2NrSW5zdGFuY2Uoe1xuXHRcdG1vY2tJbXBsZW1lbnRhdGlvbjogb3JpZ2luYWxJbXBsZW1lbnRhdGlvbixcblx0XHRyZXNldFRvTW9ja0ltcGxlbWVudGF0aW9uOiB0cnVlXG5cdH0pO1xufVxuZnVuY3Rpb24gc3B5T24ob2JqZWN0LCBrZXksIGFjY2Vzc29yKSB7XG5cdGFzc2VydChvYmplY3QgIT0gbnVsbCwgXCJUaGUgdmkuc3B5T24oKSBmdW5jdGlvbiBjb3VsZCBub3QgZmluZCBhbiBvYmplY3QgdG8gc3B5IHVwb24uIFRoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIGRlZmluZWQuXCIpO1xuXHRhc3NlcnQodHlwZW9mIG9iamVjdCA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2Ygb2JqZWN0ID09PSBcImZ1bmN0aW9uXCIsIFwiVml0ZXN0IGNhbm5vdCBzcHkgb24gYSBwcmltaXRpdmUgdmFsdWUuXCIpO1xuXHRjb25zdCBbb3JpZ2luYWxEZXNjcmlwdG9yT2JqZWN0LCBvcmlnaW5hbERlc2NyaXB0b3JdID0gZ2V0RGVzY3JpcHRvcihvYmplY3QsIGtleSkgfHwgW107XG5cdGFzc2VydChvcmlnaW5hbERlc2NyaXB0b3IgfHwga2V5IGluIG9iamVjdCwgYFRoZSBwcm9wZXJ0eSBcIiR7U3RyaW5nKGtleSl9XCIgaXMgbm90IGRlZmluZWQgb24gdGhlICR7dHlwZW9mIG9iamVjdH0uYCk7XG5cdGxldCBhY2Nlc3NUeXBlID0gYWNjZXNzb3IgfHwgXCJ2YWx1ZVwiO1xuXHRsZXQgc3NyID0gZmFsc2U7XG5cdC8vIHZpdGUgc3NyIHN1cHBvcnQgLSBhY3R1YWwgZnVuY3Rpb24gaXMgc3RvcmVkIGluc2lkZSBhIGdldHRlclxuXHRpZiAoYWNjZXNzVHlwZSA9PT0gXCJ2YWx1ZVwiICYmIG9yaWdpbmFsRGVzY3JpcHRvciAmJiBvcmlnaW5hbERlc2NyaXB0b3IudmFsdWUgPT0gbnVsbCAmJiBvcmlnaW5hbERlc2NyaXB0b3IuZ2V0KSB7XG5cdFx0YWNjZXNzVHlwZSA9IFwiZ2V0XCI7XG5cdFx0c3NyID0gdHJ1ZTtcblx0fVxuXHRsZXQgb3JpZ2luYWw7XG5cdGlmIChvcmlnaW5hbERlc2NyaXB0b3IpIHtcblx0XHRvcmlnaW5hbCA9IG9yaWdpbmFsRGVzY3JpcHRvclthY2Nlc3NUeXBlXTtcblx0XHQvLyB3ZWlyZCBQcm94eSBlZGdlIGNhc2Ugd2hlcmUgZGVzY3JpcHRvcidzIHZhbHVlIGlzIHVuZGVmaW5lZCxcblx0XHQvLyBidXQgdGhlcmUncyBzdGlsbCBhIHZhbHVlIG9uIHRoZSBvYmplY3Qgd2hlbiBjYWxsZWRcblx0XHQvLyBodHRwczovL2dpdGh1Yi5jb20vdml0ZXN0LWRldi92aXRlc3QvaXNzdWVzLzk0Mzlcblx0XHRpZiAob3JpZ2luYWwgPT0gbnVsbCAmJiBhY2Nlc3NUeXBlID09PSBcInZhbHVlXCIpIHtcblx0XHRcdG9yaWdpbmFsID0gb2JqZWN0W2tleV07XG5cdFx0fVxuXHR9IGVsc2UgaWYgKGFjY2Vzc1R5cGUgIT09IFwidmFsdWVcIikge1xuXHRcdG9yaWdpbmFsID0gKCkgPT4gb2JqZWN0W2tleV07XG5cdH0gZWxzZSB7XG5cdFx0b3JpZ2luYWwgPSBvYmplY3Rba2V5XTtcblx0fVxuXHRjb25zdCBvcmlnaW5hbEltcGxlbWVudGF0aW9uID0gc3NyICYmIG9yaWdpbmFsID8gb3JpZ2luYWwoKSA6IG9yaWdpbmFsO1xuXHRjb25zdCBvcmlnaW5hbFR5cGUgPSB0eXBlb2Ygb3JpZ2luYWxJbXBsZW1lbnRhdGlvbjtcblx0YXNzZXJ0KFxuXHRcdC8vIGFsbG93IG9ubHkgZnVuY3Rpb25zXG5cdFx0b3JpZ2luYWxUeXBlID09PSBcImZ1bmN0aW9uXCIgfHwgYWNjZXNzVHlwZSAhPT0gXCJ2YWx1ZVwiICYmIG9yaWdpbmFsID09IG51bGwsXG5cdFx0YHZpLnNweU9uKCkgY2FuIG9ubHkgc3B5IG9uIGEgZnVuY3Rpb24uIFJlY2VpdmVkICR7b3JpZ2luYWxUeXBlfS5gXG5cdCk7XG5cdGlmIChpc01vY2tGdW5jdGlvbihvcmlnaW5hbEltcGxlbWVudGF0aW9uKSkge1xuXHRcdHJldHVybiBvcmlnaW5hbEltcGxlbWVudGF0aW9uO1xuXHR9XG5cdGNvbnN0IHJlYXNzaWduID0gKGNiKSA9PiB7XG5cdFx0Y29uc3QgeyB2YWx1ZSwgLi4uZGVzYyB9ID0gb3JpZ2luYWxEZXNjcmlwdG9yIHx8IHtcblx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdHdyaXRhYmxlOiB0cnVlXG5cdFx0fTtcblx0XHRpZiAoYWNjZXNzVHlwZSAhPT0gXCJ2YWx1ZVwiKSB7XG5cdFx0XHRkZWxldGUgZGVzYy53cml0YWJsZTtcblx0XHR9XG5cdFx0ZGVzY1thY2Nlc3NUeXBlXSA9IGNiO1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmplY3QsIGtleSwgZGVzYyk7XG5cdH07XG5cdGNvbnN0IHJlc3RvcmUgPSAoKSA9PiB7XG5cdFx0Ly8gaWYgbWV0aG9kIGlzIGRlZmluZWQgb24gdGhlIHByb3RvdHlwZSwgd2UgY2FuIGp1c3QgcmVtb3ZlIGl0IGZyb21cblx0XHQvLyB0aGUgY3VycmVudCBvYmplY3QgaW5zdGVhZCBvZiByZWRlZmluaW5nIGEgY29weSBvZiBpdFxuXHRcdGlmIChvcmlnaW5hbERlc2NyaXB0b3JPYmplY3QgIT09IG9iamVjdCkge1xuXHRcdFx0UmVmbGVjdC5kZWxldGVQcm9wZXJ0eShvYmplY3QsIGtleSk7XG5cdFx0fSBlbHNlIGlmIChvcmlnaW5hbERlc2NyaXB0b3IgJiYgIW9yaWdpbmFsKSB7XG5cdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqZWN0LCBrZXksIG9yaWdpbmFsRGVzY3JpcHRvcik7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJlYXNzaWduKG9yaWdpbmFsKTtcblx0XHR9XG5cdH07XG5cdGNvbnN0IG1vY2sgPSBjcmVhdGVNb2NrSW5zdGFuY2Uoe1xuXHRcdHJlc3RvcmUsXG5cdFx0b3JpZ2luYWxJbXBsZW1lbnRhdGlvbixcblx0XHRyZXNldFRvTW9ja05hbWU6IHRydWVcblx0fSk7XG5cdHRyeSB7XG5cdFx0cmVhc3NpZ24oc3NyID8gKCkgPT4gbW9jayA6IG1vY2spO1xuXHR9IGNhdGNoIChlcnJvcikge1xuXHRcdGlmIChlcnJvciBpbnN0YW5jZW9mIFR5cGVFcnJvciAmJiBTeW1ib2wudG9TdHJpbmdUYWcgJiYgb2JqZWN0W1N5bWJvbC50b1N0cmluZ1RhZ10gPT09IFwiTW9kdWxlXCIgJiYgKGVycm9yLm1lc3NhZ2UuaW5jbHVkZXMoXCJDYW5ub3QgcmVkZWZpbmUgcHJvcGVydHlcIikgfHwgZXJyb3IubWVzc2FnZS5pbmNsdWRlcyhcIkNhbm5vdCByZXBsYWNlIG1vZHVsZSBuYW1lc3BhY2VcIikgfHwgZXJyb3IubWVzc2FnZS5pbmNsdWRlcyhcImNhbid0IHJlZGVmaW5lIG5vbi1jb25maWd1cmFibGUgcHJvcGVydHlcIikpKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKGBDYW5ub3Qgc3B5IG9uIGV4cG9ydCBcIiR7U3RyaW5nKGtleSl9XCIuIE1vZHVsZSBuYW1lc3BhY2UgaXMgbm90IGNvbmZpZ3VyYWJsZSBpbiBFU00uIFNlZTogaHR0cHM6Ly92aXRlc3QuZGV2L2d1aWRlL2Jyb3dzZXIvI2xpbWl0YXRpb25zYCwgeyBjYXVzZTogZXJyb3IgfSk7XG5cdFx0fVxuXHRcdHRocm93IGVycm9yO1xuXHR9XG5cdHJldHVybiBtb2NrO1xufVxuZnVuY3Rpb24gZ2V0RGVzY3JpcHRvcihvYmosIG1ldGhvZCkge1xuXHRjb25zdCBvYmpEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmosIG1ldGhvZCk7XG5cdGlmIChvYmpEZXNjcmlwdG9yKSB7XG5cdFx0cmV0dXJuIFtvYmosIG9iakRlc2NyaXB0b3JdO1xuXHR9XG5cdGxldCBjdXJyZW50UHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Yob2JqKTtcblx0d2hpbGUgKGN1cnJlbnRQcm90byAhPT0gbnVsbCkge1xuXHRcdGNvbnN0IGRlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGN1cnJlbnRQcm90bywgbWV0aG9kKTtcblx0XHRpZiAoZGVzY3JpcHRvcikge1xuXHRcdFx0cmV0dXJuIFtjdXJyZW50UHJvdG8sIGRlc2NyaXB0b3JdO1xuXHRcdH1cblx0XHRjdXJyZW50UHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YoY3VycmVudFByb3RvKTtcblx0fVxufVxuZnVuY3Rpb24gYXNzZXJ0KGNvbmRpdGlvbiwgbWVzc2FnZSkge1xuXHRpZiAoIWNvbmRpdGlvbikge1xuXHRcdHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcblx0fVxufVxubGV0IGludm9jYXRpb25DYWxsQ291bnRlciA9IDE7XG5mdW5jdGlvbiBjcmVhdGVNb2NrKHsgc3RhdGUsIGNvbmZpZywgbmFtZTogbW9ja05hbWUsIHByb3RvdHlwZVN0YXRlLCBwcm90b3R5cGVDb25maWcsIGtlZXBNZW1iZXJzSW1wbGVtZW50YXRpb24sIG1vY2tJbXBsZW1lbnRhdGlvbiwgcHJvdG90eXBlTWVtYmVycyA9IFtdIH0pIHtcblx0Y29uc3Qgb3JpZ2luYWwgPSBjb25maWcubW9ja09yaWdpbmFsO1xuXHRjb25zdCBwc2V1ZG9PcmlnaW5hbCA9IG1vY2tJbXBsZW1lbnRhdGlvbjtcblx0Y29uc3QgbmFtZSA9IG1vY2tOYW1lIHx8IG9yaWdpbmFsPy5uYW1lIHx8IFwiTW9ja1wiO1xuXHRjb25zdCBuYW1lZE9iamVjdCA9IHsgW25hbWVdOiAoZnVuY3Rpb24oLi4uYXJncykge1xuXHRcdHJlZ2lzdGVyQ2FsbHMoYXJncywgc3RhdGUsIHByb3RvdHlwZVN0YXRlKTtcblx0XHRyZWdpc3Rlckludm9jYXRpb25PcmRlcihpbnZvY2F0aW9uQ2FsbENvdW50ZXIrKywgc3RhdGUsIHByb3RvdHlwZVN0YXRlKTtcblx0XHRjb25zdCByZXN1bHQgPSB7XG5cdFx0XHR0eXBlOiBcImluY29tcGxldGVcIixcblx0XHRcdHZhbHVlOiB1bmRlZmluZWRcblx0XHR9O1xuXHRcdGNvbnN0IHNldHRsZWRSZXN1bHQgPSB7XG5cdFx0XHR0eXBlOiBcImluY29tcGxldGVcIixcblx0XHRcdHZhbHVlOiB1bmRlZmluZWRcblx0XHR9O1xuXHRcdHJlZ2lzdGVyUmVzdWx0KHJlc3VsdCwgc3RhdGUsIHByb3RvdHlwZVN0YXRlKTtcblx0XHRyZWdpc3RlclNldHRsZWRSZXN1bHQoc2V0dGxlZFJlc3VsdCwgc3RhdGUsIHByb3RvdHlwZVN0YXRlKTtcblx0XHRjb25zdCBjb250ZXh0ID0gbmV3LnRhcmdldCA/IHVuZGVmaW5lZCA6IHRoaXM7XG5cdFx0Y29uc3QgW2luc3RhbmNlSW5kZXgsIGluc3RhbmNlUHJvdG90eXBlSW5kZXhdID0gcmVnaXN0ZXJJbnN0YW5jZShjb250ZXh0LCBzdGF0ZSwgcHJvdG90eXBlU3RhdGUpO1xuXHRcdGNvbnN0IFtjb250ZXh0SW5kZXgsIGNvbnRleHRQcm90b3R5cGVJbmRleF0gPSByZWdpc3RlckNvbnRleHQoY29udGV4dCwgc3RhdGUsIHByb3RvdHlwZVN0YXRlKTtcblx0XHRjb25zdCBpbXBsZW1lbnRhdGlvbiA9IGNvbmZpZy5vbmNlTW9ja0ltcGxlbWVudGF0aW9ucy5zaGlmdCgpIHx8IGNvbmZpZy5tb2NrSW1wbGVtZW50YXRpb24gfHwgcHJvdG90eXBlQ29uZmlnPy5vbmNlTW9ja0ltcGxlbWVudGF0aW9ucy5zaGlmdCgpIHx8IHByb3RvdHlwZUNvbmZpZz8ubW9ja0ltcGxlbWVudGF0aW9uIHx8IG9yaWdpbmFsIHx8IGZ1bmN0aW9uKCkge307XG5cdFx0bGV0IHJldHVyblZhbHVlO1xuXHRcdGxldCB0aHJvd25WYWx1ZTtcblx0XHRsZXQgZGlkVGhyb3cgPSBmYWxzZTtcblx0XHR0cnkge1xuXHRcdFx0aWYgKG5ldy50YXJnZXQpIHtcblx0XHRcdFx0cmV0dXJuVmFsdWUgPSBSZWZsZWN0LmNvbnN0cnVjdChpbXBsZW1lbnRhdGlvbiwgYXJncywgbmV3LnRhcmdldCk7XG5cdFx0XHRcdC8vIGplc3QgY2FsbHMgdGhpcyBiZWZvcmUgdGhlIGltcGxlbWVudGF0aW9uLCBidXQgd2UgaGF2ZSB0byByZXNvbHZlIHRoaXMgX2FmdGVyX1xuXHRcdFx0XHQvLyBiZWNhdXNlIHdlIGNhbm5vdCBkbyBpdCBiZWZvcmUgdGhlIGBSZWZsZWN0LmNvbnN0cnVjdGAgY2FsbGVkIHRoZSBjdXN0b20gaW1wbGVtZW50YXRpb24uXG5cdFx0XHRcdC8vIGZvcnR1bmF0ZWx5LCB0aGUgY29uc3RydWN0b3IgaXMgYWx3YXlzIGFuIGVtcHR5IGZ1bmN0aW9uIGJlY2F1c2UgYHByb3RvdHlwZU1ldGhvZHNgXG5cdFx0XHRcdC8vIGFyZSBvbmx5IHVzZWQgYnkgdGhlIGF1dG9tb2NrZXIsIHNvIHRoaXMgZG9lc24ndCBtYXR0ZXJcblx0XHRcdFx0Zm9yIChjb25zdCBwcm9wIG9mIHByb3RvdHlwZU1lbWJlcnMpIHtcblx0XHRcdFx0XHRjb25zdCBwcm90b3R5cGVNb2NrID0gcmV0dXJuVmFsdWVbcHJvcF07XG5cdFx0XHRcdFx0Ly8gdGhlIG1ldGhvZCB3YXMgb3ZlcnJpZGRlbiBiZWNhdXNlIG9mIGluaGVyaXRhbmNlLCBpZ25vcmUgaXRcblx0XHRcdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdHMvbm8tdXNlLWJlZm9yZS1kZWZpbmVcblx0XHRcdFx0XHRpZiAocHJvdG90eXBlTW9jayAhPT0gbW9jay5wcm90b3R5cGVbcHJvcF0pIHtcblx0XHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRjb25zdCBpc01vY2sgPSBpc01vY2tGdW5jdGlvbihwcm90b3R5cGVNb2NrKTtcblx0XHRcdFx0XHRjb25zdCBwcm90b3R5cGVTdGF0ZSA9IGlzTW9jayA/IHByb3RvdHlwZU1vY2subW9jayA6IHVuZGVmaW5lZDtcblx0XHRcdFx0XHRjb25zdCBwcm90b3R5cGVDb25maWcgPSBpc01vY2sgPyBNT0NLX0NPTkZJR1MuZ2V0KHByb3RvdHlwZU1vY2spIDogdW5kZWZpbmVkO1xuXHRcdFx0XHRcdHJldHVyblZhbHVlW3Byb3BdID0gY3JlYXRlTW9ja0luc3RhbmNlKHtcblx0XHRcdFx0XHRcdG9yaWdpbmFsSW1wbGVtZW50YXRpb246IGtlZXBNZW1iZXJzSW1wbGVtZW50YXRpb24gPyBwcm90b3R5cGVDb25maWc/Lm1vY2tPcmlnaW5hbCA6IHVuZGVmaW5lZCxcblx0XHRcdFx0XHRcdHByb3RvdHlwZVN0YXRlLFxuXHRcdFx0XHRcdFx0cHJvdG90eXBlQ29uZmlnLFxuXHRcdFx0XHRcdFx0a2VlcE1lbWJlcnNJbXBsZW1lbnRhdGlvblxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm5WYWx1ZSA9IGltcGxlbWVudGF0aW9uLmFwcGx5KHRoaXMsIGFyZ3MpO1xuXHRcdFx0fVxuXHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHR0aHJvd25WYWx1ZSA9IGVycm9yO1xuXHRcdFx0ZGlkVGhyb3cgPSB0cnVlO1xuXHRcdFx0aWYgKGVycm9yIGluc3RhbmNlb2YgVHlwZUVycm9yICYmIGVycm9yLm1lc3NhZ2UuaW5jbHVkZXMoXCJpcyBub3QgYSBjb25zdHJ1Y3RvclwiKSkge1xuXHRcdFx0XHRjb25zb2xlLndhcm4oYFt2aXRlc3RdIFRoZSAke25hbWVkT2JqZWN0W25hbWVdLmdldE1vY2tOYW1lKCl9IG1vY2sgZGlkIG5vdCB1c2UgJ2Z1bmN0aW9uJyBvciAnY2xhc3MnIGluIGl0cyBpbXBsZW1lbnRhdGlvbiwgc2VlIGh0dHBzOi8vdml0ZXN0LmRldi9hcGkvdmkjdmktc3B5b24gZm9yIGV4YW1wbGVzLmApO1xuXHRcdFx0fVxuXHRcdFx0dGhyb3cgZXJyb3I7XG5cdFx0fSBmaW5hbGx5IHtcblx0XHRcdGlmIChkaWRUaHJvdykge1xuXHRcdFx0XHRyZXN1bHQudHlwZSA9IFwidGhyb3dcIjtcblx0XHRcdFx0cmVzdWx0LnZhbHVlID0gdGhyb3duVmFsdWU7XG5cdFx0XHRcdHNldHRsZWRSZXN1bHQudHlwZSA9IFwicmVqZWN0ZWRcIjtcblx0XHRcdFx0c2V0dGxlZFJlc3VsdC52YWx1ZSA9IHRocm93blZhbHVlO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmVzdWx0LnR5cGUgPSBcInJldHVyblwiO1xuXHRcdFx0XHRyZXN1bHQudmFsdWUgPSByZXR1cm5WYWx1ZTtcblx0XHRcdFx0aWYgKG5ldy50YXJnZXQpIHtcblx0XHRcdFx0XHRzdGF0ZS5jb250ZXh0c1tjb250ZXh0SW5kZXggLSAxXSA9IHJldHVyblZhbHVlO1xuXHRcdFx0XHRcdHN0YXRlLmluc3RhbmNlc1tpbnN0YW5jZUluZGV4IC0gMV0gPSByZXR1cm5WYWx1ZTtcblx0XHRcdFx0XHRpZiAoY29udGV4dFByb3RvdHlwZUluZGV4ICE9IG51bGwgJiYgcHJvdG90eXBlU3RhdGUpIHtcblx0XHRcdFx0XHRcdHByb3RvdHlwZVN0YXRlLmNvbnRleHRzW2NvbnRleHRQcm90b3R5cGVJbmRleCAtIDFdID0gcmV0dXJuVmFsdWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmIChpbnN0YW5jZVByb3RvdHlwZUluZGV4ICE9IG51bGwgJiYgcHJvdG90eXBlU3RhdGUpIHtcblx0XHRcdFx0XHRcdHByb3RvdHlwZVN0YXRlLmluc3RhbmNlc1tpbnN0YW5jZVByb3RvdHlwZUluZGV4IC0gMV0gPSByZXR1cm5WYWx1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKHJldHVyblZhbHVlIGluc3RhbmNlb2YgUHJvbWlzZSkge1xuXHRcdFx0XHRcdHJldHVyblZhbHVlLnRoZW4oKHNldHRsZWRWYWx1ZSkgPT4ge1xuXHRcdFx0XHRcdFx0c2V0dGxlZFJlc3VsdC50eXBlID0gXCJmdWxmaWxsZWRcIjtcblx0XHRcdFx0XHRcdHNldHRsZWRSZXN1bHQudmFsdWUgPSBzZXR0bGVkVmFsdWU7XG5cdFx0XHRcdFx0fSwgKHJlamVjdGVkVmFsdWUpID0+IHtcblx0XHRcdFx0XHRcdHNldHRsZWRSZXN1bHQudHlwZSA9IFwicmVqZWN0ZWRcIjtcblx0XHRcdFx0XHRcdHNldHRsZWRSZXN1bHQudmFsdWUgPSByZWplY3RlZFZhbHVlO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHNldHRsZWRSZXN1bHQudHlwZSA9IFwiZnVsZmlsbGVkXCI7XG5cdFx0XHRcdFx0c2V0dGxlZFJlc3VsdC52YWx1ZSA9IHJldHVyblZhbHVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiByZXR1cm5WYWx1ZTtcblx0fSkgfTtcblx0Y29uc3QgbW9jayA9IG5hbWVkT2JqZWN0W25hbWVdO1xuXHRjb25zdCBjb3B5UHJvcGVydGllc0Zyb20gPSBvcmlnaW5hbCB8fCBwc2V1ZG9PcmlnaW5hbDtcblx0aWYgKGNvcHlQcm9wZXJ0aWVzRnJvbSkge1xuXHRcdGNvcHlPcmlnaW5hbFN0YXRpY1Byb3BlcnRpZXMobW9jaywgY29weVByb3BlcnRpZXNGcm9tKTtcblx0fVxuXHRyZXR1cm4gbW9jaztcbn1cbmZ1bmN0aW9uIHJlZ2lzdGVyQ2FsbHMoYXJncywgc3RhdGUsIHByb3RvdHlwZVN0YXRlKSB7XG5cdHN0YXRlLmNhbGxzLnB1c2goYXJncyk7XG5cdHByb3RvdHlwZVN0YXRlPy5jYWxscy5wdXNoKGFyZ3MpO1xufVxuZnVuY3Rpb24gcmVnaXN0ZXJJbnZvY2F0aW9uT3JkZXIob3JkZXIsIHN0YXRlLCBwcm90b3R5cGVTdGF0ZSkge1xuXHRzdGF0ZS5pbnZvY2F0aW9uQ2FsbE9yZGVyLnB1c2gob3JkZXIpO1xuXHRwcm90b3R5cGVTdGF0ZT8uaW52b2NhdGlvbkNhbGxPcmRlci5wdXNoKG9yZGVyKTtcbn1cbmZ1bmN0aW9uIHJlZ2lzdGVyUmVzdWx0KHJlc3VsdCwgc3RhdGUsIHByb3RvdHlwZVN0YXRlKSB7XG5cdHN0YXRlLnJlc3VsdHMucHVzaChyZXN1bHQpO1xuXHRwcm90b3R5cGVTdGF0ZT8ucmVzdWx0cy5wdXNoKHJlc3VsdCk7XG59XG5mdW5jdGlvbiByZWdpc3RlclNldHRsZWRSZXN1bHQocmVzdWx0LCBzdGF0ZSwgcHJvdG90eXBlU3RhdGUpIHtcblx0c3RhdGUuc2V0dGxlZFJlc3VsdHMucHVzaChyZXN1bHQpO1xuXHRwcm90b3R5cGVTdGF0ZT8uc2V0dGxlZFJlc3VsdHMucHVzaChyZXN1bHQpO1xufVxuZnVuY3Rpb24gcmVnaXN0ZXJJbnN0YW5jZShpbnN0YW5jZSwgc3RhdGUsIHByb3RvdHlwZVN0YXRlKSB7XG5cdGNvbnN0IGluc3RhbmNlSW5kZXggPSBzdGF0ZS5pbnN0YW5jZXMucHVzaChpbnN0YW5jZSk7XG5cdGNvbnN0IGluc3RhbmNlUHJvdG90eXBlSW5kZXggPSBwcm90b3R5cGVTdGF0ZT8uaW5zdGFuY2VzLnB1c2goaW5zdGFuY2UpO1xuXHRyZXR1cm4gW2luc3RhbmNlSW5kZXgsIGluc3RhbmNlUHJvdG90eXBlSW5kZXhdO1xufVxuZnVuY3Rpb24gcmVnaXN0ZXJDb250ZXh0KGNvbnRleHQsIHN0YXRlLCBwcm90b3R5cGVTdGF0ZSkge1xuXHRjb25zdCBjb250ZXh0SW5kZXggPSBzdGF0ZS5jb250ZXh0cy5wdXNoKGNvbnRleHQpO1xuXHRjb25zdCBjb250ZXh0UHJvdG90eXBlSW5kZXggPSBwcm90b3R5cGVTdGF0ZT8uY29udGV4dHMucHVzaChjb250ZXh0KTtcblx0cmV0dXJuIFtjb250ZXh0SW5kZXgsIGNvbnRleHRQcm90b3R5cGVJbmRleF07XG59XG5mdW5jdGlvbiBjb3B5T3JpZ2luYWxTdGF0aWNQcm9wZXJ0aWVzKG1vY2ssIG9yaWdpbmFsKSB7XG5cdGNvbnN0IHsgcHJvcGVydGllcywgZGVzY3JpcHRvcnMgfSA9IGdldEFsbFByb3BlcnRpZXMob3JpZ2luYWwpO1xuXHRmb3IgKGNvbnN0IGtleSBvZiBwcm9wZXJ0aWVzKSB7XG5cdFx0Y29uc3QgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JzW2tleV07XG5cdFx0Y29uc3QgbW9ja0Rlc2NyaXB0b3IgPSBnZXREZXNjcmlwdG9yKG1vY2ssIGtleSk7XG5cdFx0aWYgKG1vY2tEZXNjcmlwdG9yKSB7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG1vY2ssIGtleSwgZGVzY3JpcHRvcik7XG5cdH1cbn1cbmNvbnN0IGlnbm9yZVByb3BlcnRpZXMgPSBuZXcgU2V0KFtcblx0XCJsZW5ndGhcIixcblx0XCJuYW1lXCIsXG5cdFwicHJvdG90eXBlXCIsXG5cdFN5bWJvbC5mb3IoXCJub2RlanMudXRpbC5wcm9taXNpZnkuY3VzdG9tXCIpXG5dKTtcbmZ1bmN0aW9uIGdldEFsbFByb3BlcnRpZXMob3JpZ2luYWwpIHtcblx0Y29uc3QgcHJvcGVydGllcyA9IG5ldyBTZXQoKTtcblx0Y29uc3QgZGVzY3JpcHRvcnMgPSB7fTtcblx0d2hpbGUgKG9yaWdpbmFsICYmIG9yaWdpbmFsICE9PSBPYmplY3QucHJvdG90eXBlICYmIG9yaWdpbmFsICE9PSBGdW5jdGlvbi5wcm90b3R5cGUpIHtcblx0XHRjb25zdCBvd25Qcm9wZXJ0aWVzID0gWy4uLk9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9yaWdpbmFsKSwgLi4uT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvcmlnaW5hbCldO1xuXHRcdGZvciAoY29uc3QgcHJvcCBvZiBvd25Qcm9wZXJ0aWVzKSB7XG5cdFx0XHRpZiAoZGVzY3JpcHRvcnNbcHJvcF0gfHwgaWdub3JlUHJvcGVydGllcy5oYXMocHJvcCkpIHtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cdFx0XHRwcm9wZXJ0aWVzLmFkZChwcm9wKTtcblx0XHRcdGRlc2NyaXB0b3JzW3Byb3BdID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvcmlnaW5hbCwgcHJvcCk7XG5cdFx0fVxuXHRcdG9yaWdpbmFsID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKG9yaWdpbmFsKTtcblx0fVxuXHRyZXR1cm4ge1xuXHRcdHByb3BlcnRpZXMsXG5cdFx0ZGVzY3JpcHRvcnNcblx0fTtcbn1cbmZ1bmN0aW9uIGdldERlZmF1bHRDb25maWcob3JpZ2luYWwpIHtcblx0cmV0dXJuIHtcblx0XHRtb2NrSW1wbGVtZW50YXRpb246IHVuZGVmaW5lZCxcblx0XHRtb2NrT3JpZ2luYWw6IG9yaWdpbmFsLFxuXHRcdG1vY2tOYW1lOiBcInZpLmZuKClcIixcblx0XHRvbmNlTW9ja0ltcGxlbWVudGF0aW9uczogW11cblx0fTtcbn1cbmZ1bmN0aW9uIGdldERlZmF1bHRTdGF0ZSgpIHtcblx0Y29uc3Qgc3RhdGUgPSB7XG5cdFx0Y2FsbHM6IFtdLFxuXHRcdGNvbnRleHRzOiBbXSxcblx0XHRpbnN0YW5jZXM6IFtdLFxuXHRcdGludm9jYXRpb25DYWxsT3JkZXI6IFtdLFxuXHRcdHNldHRsZWRSZXN1bHRzOiBbXSxcblx0XHRyZXN1bHRzOiBbXSxcblx0XHRnZXQgbGFzdENhbGwoKSB7XG5cdFx0XHRyZXR1cm4gc3RhdGUuY2FsbHMuYXQoLTEpO1xuXHRcdH1cblx0fTtcblx0cmV0dXJuIHN0YXRlO1xufVxuZnVuY3Rpb24gcmVzdG9yZUFsbE1vY2tzKCkge1xuXHRmb3IgKGNvbnN0IHJlc3RvcmUgb2YgTU9DS19SRVNUT1JFKSB7XG5cdFx0cmVzdG9yZSgpO1xuXHR9XG5cdE1PQ0tfUkVTVE9SRS5jbGVhcigpO1xufVxuZnVuY3Rpb24gY2xlYXJBbGxNb2NrcygpIHtcblx0UkVHSVNURVJFRF9NT0NLUy5mb3JFYWNoKChtb2NrKSA9PiBtb2NrLm1vY2tDbGVhcigpKTtcbn1cbmZ1bmN0aW9uIHJlc2V0QWxsTW9ja3MoKSB7XG5cdFJFR0lTVEVSRURfTU9DS1MuZm9yRWFjaCgobW9jaykgPT4gbW9jay5tb2NrUmVzZXQoKSk7XG59XG5mdW5jdGlvbiB0aHJvd0NvbnN0cnVjdG9yRXJyb3Ioc2hvcnRoYW5kKSB7XG5cdHRocm93IG5ldyBUeXBlRXJyb3IoYENhbm5vdCB1c2UgXFxgJHtzaG9ydGhhbmR9XFxgIHdoZW4gY2FsbGVkIHdpdGggXFxgbmV3XFxgLiBVc2UgXFxgbW9ja0ltcGxlbWVudGF0aW9uXFxgIHdpdGggYSBcXGBjbGFzc1xcYCBrZXl3b3JkIGluc3RlYWQuIFNlZSBodHRwczovL3ZpdGVzdC5kZXYvYXBpL21vY2sjY2xhc3Mtc3VwcG9ydCBmb3IgbW9yZSBpbmZvcm1hdGlvbi5gKTtcbn1cblxuZXhwb3J0IHsgY2xlYXJBbGxNb2NrcywgY3JlYXRlTW9ja0luc3RhbmNlLCBmbiwgaXNNb2NrRnVuY3Rpb24sIHJlc2V0QWxsTW9ja3MsIHJlc3RvcmVBbGxNb2Nrcywgc3B5T24gfTtcbiJdLCJ4X2dvb2dsZV9pZ25vcmVMaXN0IjpbMF0sIm1hcHBpbmdzIjoiO0FBQUEsU0FBUyxlQUFlLElBQUk7QUFDM0IsUUFBTyxPQUFPLE9BQU8sY0FBYyxxQkFBcUIsTUFBTSxHQUFHLG9CQUFvQjs7QUFFdEYsTUFBTSwrQkFBZSxJQUFJLEtBQUs7QUFJOUIsTUFBTSxtQ0FBbUIsSUFBSSxLQUFLO0FBQ2xDLE1BQU0sK0JBQWUsSUFBSSxTQUFTO0FBQ2xDLFNBQVMsbUJBQW1CLFVBQVUsRUFBRSxFQUFFO0NBQ3pDLE1BQU0sRUFBRSx3QkFBd0IsU0FBUyxvQkFBb0IsMkJBQTJCLG9CQUFvQjtBQUM1RyxLQUFJLFFBQ0gsY0FBYSxJQUFJLFFBQVE7Q0FFMUIsTUFBTSxTQUFTLGlCQUFpQix1QkFBdUI7Q0FDdkQsTUFBTSxRQUFRLGlCQUFpQjtDQUMvQixNQUFNLE9BQU8sV0FBVztFQUN2QjtFQUNBO0VBQ0EsR0FBRztFQUNILENBQUM7Q0FDRixNQUFNLGNBQWMsc0JBQXNCLHlCQUF5QixVQUFVO0FBQzdFLFFBQU8sZUFBZSxNQUFNLFVBQVU7RUFDckMsVUFBVTtFQUNWLFlBQVk7RUFDWixPQUFPO0VBQ1AsY0FBYztFQUNkLENBQUM7QUFJRixLQUFJLGdCQUNILFFBQU8sV0FBVyxLQUFLLFFBQVE7QUFFaEMsY0FBYSxJQUFJLE1BQU0sT0FBTztBQUM5QixrQkFB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
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
//#region ../../node_modules/.pnpm/@vitest+utils@4.1.2/node_modules/@vitest/utils/dist/chunk-pathe.M-eThtNZ.js
|
|
2
|
+
const _DRIVE_LETTER_START_RE = /^[A-Za-z]:\//;
|
|
3
|
+
function normalizeWindowsPath(input = "") {
|
|
4
|
+
if (!input) return input;
|
|
5
|
+
return input.replace(/\\/g, "/").replace(_DRIVE_LETTER_START_RE, (r) => r.toUpperCase());
|
|
6
|
+
}
|
|
7
|
+
const _IS_ABSOLUTE_RE = /^[/\\](?![/\\])|^[/\\]{2}(?!\.)|^[A-Za-z]:[/\\]/;
|
|
8
|
+
function cwd() {
|
|
9
|
+
if (typeof process !== "undefined" && typeof process.cwd === "function") return process.cwd().replace(/\\/g, "/");
|
|
10
|
+
return "/";
|
|
11
|
+
}
|
|
12
|
+
const resolve = function(...arguments_) {
|
|
13
|
+
arguments_ = arguments_.map((argument) => normalizeWindowsPath(argument));
|
|
14
|
+
let resolvedPath = "";
|
|
15
|
+
let resolvedAbsolute = false;
|
|
16
|
+
for (let index = arguments_.length - 1; index >= -1 && !resolvedAbsolute; index--) {
|
|
17
|
+
const path = index >= 0 ? arguments_[index] : cwd();
|
|
18
|
+
if (!path || path.length === 0) continue;
|
|
19
|
+
resolvedPath = `${path}/${resolvedPath}`;
|
|
20
|
+
resolvedAbsolute = isAbsolute(path);
|
|
21
|
+
}
|
|
22
|
+
resolvedPath = normalizeString(resolvedPath, !resolvedAbsolute);
|
|
23
|
+
if (resolvedAbsolute && !isAbsolute(resolvedPath)) return `/${resolvedPath}`;
|
|
24
|
+
return resolvedPath.length > 0 ? resolvedPath : ".";
|
|
25
|
+
};
|
|
26
|
+
function normalizeString(path, allowAboveRoot) {
|
|
27
|
+
let res = "";
|
|
28
|
+
let lastSegmentLength = 0;
|
|
29
|
+
let lastSlash = -1;
|
|
30
|
+
let dots = 0;
|
|
31
|
+
let char = null;
|
|
32
|
+
for (let index = 0; index <= path.length; ++index) {
|
|
33
|
+
if (index < path.length) char = path[index];
|
|
34
|
+
else if (char === "/") break;
|
|
35
|
+
else char = "/";
|
|
36
|
+
if (char === "/") {
|
|
37
|
+
if (lastSlash === index - 1 || dots === 1);
|
|
38
|
+
else if (dots === 2) {
|
|
39
|
+
if (res.length < 2 || lastSegmentLength !== 2 || res[res.length - 1] !== "." || res[res.length - 2] !== ".") {
|
|
40
|
+
if (res.length > 2) {
|
|
41
|
+
const lastSlashIndex = res.lastIndexOf("/");
|
|
42
|
+
if (lastSlashIndex === -1) {
|
|
43
|
+
res = "";
|
|
44
|
+
lastSegmentLength = 0;
|
|
45
|
+
} else {
|
|
46
|
+
res = res.slice(0, lastSlashIndex);
|
|
47
|
+
lastSegmentLength = res.length - 1 - res.lastIndexOf("/");
|
|
48
|
+
}
|
|
49
|
+
lastSlash = index;
|
|
50
|
+
dots = 0;
|
|
51
|
+
continue;
|
|
52
|
+
} else if (res.length > 0) {
|
|
53
|
+
res = "";
|
|
54
|
+
lastSegmentLength = 0;
|
|
55
|
+
lastSlash = index;
|
|
56
|
+
dots = 0;
|
|
57
|
+
continue;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
if (allowAboveRoot) {
|
|
61
|
+
res += res.length > 0 ? "/.." : "..";
|
|
62
|
+
lastSegmentLength = 2;
|
|
63
|
+
}
|
|
64
|
+
} else {
|
|
65
|
+
if (res.length > 0) res += `/${path.slice(lastSlash + 1, index)}`;
|
|
66
|
+
else res = path.slice(lastSlash + 1, index);
|
|
67
|
+
lastSegmentLength = index - lastSlash - 1;
|
|
68
|
+
}
|
|
69
|
+
lastSlash = index;
|
|
70
|
+
dots = 0;
|
|
71
|
+
} else if (char === "." && dots !== -1) ++dots;
|
|
72
|
+
else dots = -1;
|
|
73
|
+
}
|
|
74
|
+
return res;
|
|
75
|
+
}
|
|
76
|
+
const isAbsolute = function(p) {
|
|
77
|
+
return _IS_ABSOLUTE_RE.test(p);
|
|
78
|
+
};
|
|
79
|
+
//#endregion
|
|
80
|
+
export { resolve };
|
|
81
|
+
|
|
82
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2h1bmstcGF0aGUuTS1lVGh0TlouanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0B2aXRlc3QrdXRpbHNANC4xLjIvbm9kZV9tb2R1bGVzL0B2aXRlc3QvdXRpbHMvZGlzdC9jaHVuay1wYXRoZS5NLWVUaHROWi5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBfRFJJVkVfTEVUVEVSX1NUQVJUX1JFID0gL15bQS1aYS16XTpcXC8vO1xuZnVuY3Rpb24gbm9ybWFsaXplV2luZG93c1BhdGgoaW5wdXQgPSBcIlwiKSB7XG4gIGlmICghaW5wdXQpIHtcbiAgICByZXR1cm4gaW5wdXQ7XG4gIH1cbiAgcmV0dXJuIGlucHV0LnJlcGxhY2UoL1xcXFwvZywgXCIvXCIpLnJlcGxhY2UoX0RSSVZFX0xFVFRFUl9TVEFSVF9SRSwgKHIpID0+IHIudG9VcHBlckNhc2UoKSk7XG59XG5cbmNvbnN0IF9VTkNfUkVHRVggPSAvXlsvXFxcXF17Mn0vO1xuY29uc3QgX0lTX0FCU09MVVRFX1JFID0gL15bL1xcXFxdKD8hWy9cXFxcXSl8XlsvXFxcXF17Mn0oPyFcXC4pfF5bQS1aYS16XTpbL1xcXFxdLztcbmNvbnN0IF9EUklWRV9MRVRURVJfUkUgPSAvXltBLVphLXpdOiQvO1xuY29uc3Qgbm9ybWFsaXplID0gZnVuY3Rpb24ocGF0aCkge1xuICBpZiAocGF0aC5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gXCIuXCI7XG4gIH1cbiAgcGF0aCA9IG5vcm1hbGl6ZVdpbmRvd3NQYXRoKHBhdGgpO1xuICBjb25zdCBpc1VOQ1BhdGggPSBwYXRoLm1hdGNoKF9VTkNfUkVHRVgpO1xuICBjb25zdCBpc1BhdGhBYnNvbHV0ZSA9IGlzQWJzb2x1dGUocGF0aCk7XG4gIGNvbnN0IHRyYWlsaW5nU2VwYXJhdG9yID0gcGF0aFtwYXRoLmxlbmd0aCAtIDFdID09PSBcIi9cIjtcbiAgcGF0aCA9IG5vcm1hbGl6ZVN0cmluZyhwYXRoLCAhaXNQYXRoQWJzb2x1dGUpO1xuICBpZiAocGF0aC5sZW5ndGggPT09IDApIHtcbiAgICBpZiAoaXNQYXRoQWJzb2x1dGUpIHtcbiAgICAgIHJldHVybiBcIi9cIjtcbiAgICB9XG4gICAgcmV0dXJuIHRyYWlsaW5nU2VwYXJhdG9yID8gXCIuL1wiIDogXCIuXCI7XG4gIH1cbiAgaWYgKHRyYWlsaW5nU2VwYXJhdG9yKSB7XG4gICAgcGF0aCArPSBcIi9cIjtcbiAgfVxuICBpZiAoX0RSSVZFX0xFVFRFUl9SRS50ZXN0KHBhdGgpKSB7XG4gICAgcGF0aCArPSBcIi9cIjtcbiAgfVxuICBpZiAoaXNVTkNQYXRoKSB7XG4gICAgaWYgKCFpc1BhdGhBYnNvbHV0ZSkge1xuICAgICAgcmV0dXJuIGAvLy4vJHtwYXRofWA7XG4gICAgfVxuICAgIHJldHVybiBgLy8ke3BhdGh9YDtcbiAgfVxuICByZXR1cm4gaXNQYXRoQWJzb2x1dGUgJiYgIWlzQWJzb2x1dGUocGF0aCkgPyBgLyR7cGF0aH1gIDogcGF0aDtcbn07XG5jb25zdCBqb2luID0gZnVuY3Rpb24oLi4uc2VnbWVudHMpIHtcbiAgbGV0IHBhdGggPSBcIlwiO1xuICBmb3IgKGNvbnN0IHNlZyBvZiBzZWdtZW50cykge1xuICAgIGlmICghc2VnKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKHBhdGgubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgcGF0aFRyYWlsaW5nID0gcGF0aFtwYXRoLmxlbmd0aCAtIDFdID09PSBcIi9cIjtcbiAgICAgIGNvbnN0IHNlZ0xlYWRpbmcgPSBzZWdbMF0gPT09IFwiL1wiO1xuICAgICAgY29uc3QgYm90aCA9IHBhdGhUcmFpbGluZyAmJiBzZWdMZWFkaW5nO1xuICAgICAgaWYgKGJvdGgpIHtcbiAgICAgICAgcGF0aCArPSBzZWcuc2xpY2UoMSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYXRoICs9IHBhdGhUcmFpbGluZyB8fCBzZWdMZWFkaW5nID8gc2VnIDogYC8ke3NlZ31gO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBwYXRoICs9IHNlZztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG5vcm1hbGl6ZShwYXRoKTtcbn07XG5mdW5jdGlvbiBjd2QoKSB7XG4gIGlmICh0eXBlb2YgcHJvY2VzcyAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2YgcHJvY2Vzcy5jd2QgPT09IFwiZnVuY3Rpb25cIikge1xuICAgIHJldHVybiBwcm9jZXNzLmN3ZCgpLnJlcGxhY2UoL1xcXFwvZywgXCIvXCIpO1xuICB9XG4gIHJldHVybiBcIi9cIjtcbn1cbmNvbnN0IHJlc29sdmUgPSBmdW5jdGlvbiguLi5hcmd1bWVudHNfKSB7XG4gIGFyZ3VtZW50c18gPSBhcmd1bWVudHNfLm1hcCgoYXJndW1lbnQpID0+IG5vcm1hbGl6ZVdpbmRvd3NQYXRoKGFyZ3VtZW50KSk7XG4gIGxldCByZXNvbHZlZFBhdGggPSBcIlwiO1xuICBsZXQgcmVzb2x2ZWRBYnNvbHV0ZSA9IGZhbHNlO1xuICBmb3IgKGxldCBpbmRleCA9IGFyZ3VtZW50c18ubGVuZ3RoIC0gMTsgaW5kZXggPj0gLTEgJiYgIXJlc29sdmVkQWJzb2x1dGU7IGluZGV4LS0pIHtcbiAgICBjb25zdCBwYXRoID0gaW5kZXggPj0gMCA/IGFyZ3VtZW50c19baW5kZXhdIDogY3dkKCk7XG4gICAgaWYgKCFwYXRoIHx8IHBhdGgubGVuZ3RoID09PSAwKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgcmVzb2x2ZWRQYXRoID0gYCR7cGF0aH0vJHtyZXNvbHZlZFBhdGh9YDtcbiAgICByZXNvbHZlZEFic29sdXRlID0gaXNBYnNvbHV0ZShwYXRoKTtcbiAgfVxuICByZXNvbHZlZFBhdGggPSBub3JtYWxpemVTdHJpbmcocmVzb2x2ZWRQYXRoLCAhcmVzb2x2ZWRBYnNvbHV0ZSk7XG4gIGlmIChyZXNvbHZlZEFic29sdXRlICYmICFpc0Fic29sdXRlKHJlc29sdmVkUGF0aCkpIHtcbiAgICByZXR1cm4gYC8ke3Jlc29sdmVkUGF0aH1gO1xuICB9XG4gIHJldHVybiByZXNvbHZlZFBhdGgubGVuZ3RoID4gMCA/IHJlc29sdmVkUGF0aCA6IFwiLlwiO1xufTtcbmZ1bmN0aW9uIG5vcm1hbGl6ZVN0cmluZyhwYXRoLCBhbGxvd0Fib3ZlUm9vdCkge1xuICBsZXQgcmVzID0gXCJcIjtcbiAgbGV0IGxhc3RTZWdtZW50TGVuZ3RoID0gMDtcbiAgbGV0IGxhc3RTbGFzaCA9IC0xO1xuICBsZXQgZG90cyA9IDA7XG4gIGxldCBjaGFyID0gbnVsbDtcbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8PSBwYXRoLmxlbmd0aDsgKytpbmRleCkge1xuICAgIGlmIChpbmRleCA8IHBhdGgubGVuZ3RoKSB7XG4gICAgICBjaGFyID0gcGF0aFtpbmRleF07XG4gICAgfSBlbHNlIGlmIChjaGFyID09PSBcIi9cIikge1xuICAgICAgYnJlYWs7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNoYXIgPSBcIi9cIjtcbiAgICB9XG4gICAgaWYgKGNoYXIgPT09IFwiL1wiKSB7XG4gICAgICBpZiAobGFzdFNsYXNoID09PSBpbmRleCAtIDEgfHwgZG90cyA9PT0gMSkgOyBlbHNlIGlmIChkb3RzID09PSAyKSB7XG4gICAgICAgIGlmIChyZXMubGVuZ3RoIDwgMiB8fCBsYXN0U2VnbWVudExlbmd0aCAhPT0gMiB8fCByZXNbcmVzLmxlbmd0aCAtIDFdICE9PSBcIi5cIiB8fCByZXNbcmVzLmxlbmd0aCAtIDJdICE9PSBcIi5cIikge1xuICAgICAgICAgIGlmIChyZXMubGVuZ3RoID4gMikge1xuICAgICAgICAgICAgY29uc3QgbGFzdFNsYXNoSW5kZXggPSByZXMubGFzdEluZGV4T2YoXCIvXCIpO1xuICAgICAgICAgICAgaWYgKGxhc3RTbGFzaEluZGV4ID09PSAtMSkge1xuICAgICAgICAgICAgICByZXMgPSBcIlwiO1xuICAgICAgICAgICAgICBsYXN0U2VnbWVudExlbmd0aCA9IDA7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZXMgPSByZXMuc2xpY2UoMCwgbGFzdFNsYXNoSW5kZXgpO1xuICAgICAgICAgICAgICBsYXN0U2VnbWVudExlbmd0aCA9IHJlcy5sZW5ndGggLSAxIC0gcmVzLmxhc3RJbmRleE9mKFwiL1wiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxhc3RTbGFzaCA9IGluZGV4O1xuICAgICAgICAgICAgZG90cyA9IDA7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHJlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICByZXMgPSBcIlwiO1xuICAgICAgICAgICAgbGFzdFNlZ21lbnRMZW5ndGggPSAwO1xuICAgICAgICAgICAgbGFzdFNsYXNoID0gaW5kZXg7XG4gICAgICAgICAgICBkb3RzID0gMDtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoYWxsb3dBYm92ZVJvb3QpIHtcbiAgICAgICAgICByZXMgKz0gcmVzLmxlbmd0aCA+IDAgPyBcIi8uLlwiIDogXCIuLlwiO1xuICAgICAgICAgIGxhc3RTZWdtZW50TGVuZ3RoID0gMjtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHJlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgcmVzICs9IGAvJHtwYXRoLnNsaWNlKGxhc3RTbGFzaCArIDEsIGluZGV4KX1gO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlcyA9IHBhdGguc2xpY2UobGFzdFNsYXNoICsgMSwgaW5kZXgpO1xuICAgICAgICB9XG4gICAgICAgIGxhc3RTZWdtZW50TGVuZ3RoID0gaW5kZXggLSBsYXN0U2xhc2ggLSAxO1xuICAgICAgfVxuICAgICAgbGFzdFNsYXNoID0gaW5kZXg7XG4gICAgICBkb3RzID0gMDtcbiAgICB9IGVsc2UgaWYgKGNoYXIgPT09IFwiLlwiICYmIGRvdHMgIT09IC0xKSB7XG4gICAgICArK2RvdHM7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRvdHMgPSAtMTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlcztcbn1cbmNvbnN0IGlzQWJzb2x1dGUgPSBmdW5jdGlvbihwKSB7XG4gIHJldHVybiBfSVNfQUJTT0xVVEVfUkUudGVzdChwKTtcbn07XG5jb25zdCBkaXJuYW1lID0gZnVuY3Rpb24ocCkge1xuICBjb25zdCBzZWdtZW50cyA9IG5vcm1hbGl6ZVdpbmRvd3NQYXRoKHApLnJlcGxhY2UoL1xcLyQvLCBcIlwiKS5zcGxpdChcIi9cIikuc2xpY2UoMCwgLTEpO1xuICBpZiAoc2VnbWVudHMubGVuZ3RoID09PSAxICYmIF9EUklWRV9MRVRURVJfUkUudGVzdChzZWdtZW50c1swXSkpIHtcbiAgICBzZWdtZW50c1swXSArPSBcIi9cIjtcbiAgfVxuICByZXR1cm4gc2VnbWVudHMuam9pbihcIi9cIikgfHwgKGlzQWJzb2x1dGUocCkgPyBcIi9cIiA6IFwiLlwiKTtcbn07XG5cbmV4cG9ydCB7IGRpcm5hbWUgYXMgZCwgam9pbiBhcyBqLCByZXNvbHZlIGFzIHIgfTtcbiJdLCJ4X2dvb2dsZV9pZ25vcmVMaXN0IjpbMF0sIm1hcHBpbmdzIjoiO0FBQUEsTUFBTSx5QkFBeUI7QUFDL0IsU0FBUyxxQkFBcUIsUUFBUSxJQUFJO0FBQ3hDLEtBQUksQ0FBQyxNQUNILFFBQU87QUFFVCxRQUFPLE1BQU0sUUFBUSxPQUFPLElBQUksQ0FBQyxRQUFRLHlCQUF5QixNQUFNLEVBQUUsYUFBYSxDQUFDOztBQUkxRixNQUFNLGtCQUFrQjtBQW9EeEIsU0FBUyxNQUFNO0FBQ2IsS0FBSSxPQUFPLFlBQVksZUFBZSxPQUFPLFFBQVEsUUFBUSxXQUMzRCxRQUFPLFFBQVEsS0FBSyxDQUFDLFFBQVEsT0FBTyxJQUFJO0FBRTFDLFFBQU87O0FBRVQsTUFBTSxVQUFVLFNBQVMsR0FBRyxZQUFZO0FBQ3RDLGNBQWEsV0FBVyxLQUFLLGFBQWEscUJBQXFCLFNBQVMsQ0FBQztDQUN6RSxJQUFJLGVBQWU7Q0FDbkIsSUFBSSxtQkFBbUI7QUFDdkIsTUFBSyxJQUFJLFFBQVEsV0FBVyxTQUFTLEdBQUcsU0FBUyxNQUFNLENBQUMsa0JBQWtCLFNBQVM7RUFDakYsTUFBTSxPQUFPLFNBQVMsSUFBSSxXQUFXLFNBQVMsS0FBSztBQUNuRCxNQUFJLENBQUMsUUFBUSxLQUFLLFdBQVcsRUFDM0I7QUFFRixpQkFBZSxHQUFHLEtBQUssR0FBRztBQUMxQixxQkFBbUIsV0FBVyxLQUFLOztBQUVyQyxnQkFBZSxnQkFBZ0IsY0FBYyxDQUFDLGlCQUFpQjtBQUMvRCxLQUFJLG9CQUFvQixDQUFDLFdBQVcsYUFBYSxDQUMvQyxRQUFPLElBQUk7QUFFYixRQUFPLGFBQWEsU0FBUyxJQUFJLGVBQWU7O0FBRWxELFNBQVMsZ0JBQWdCLE1BQU0sZ0JBQWdCO0NBQzdDLElBQUksTUFBTTtDQUNWLElBQUksb0JBQW9CO0NBQ3hCLElBQUksWUFBWTtDQUNoQixJQUFJLE9BQU87Q0FDWCxJQUFJLE9BQU87QUFDWCxNQUFLLElBQUksUUFBUSxHQUFHLFNBQVMsS0FBSyxRQUFRLEVBQUUsT0FBTztBQUNqRCxNQUFJLFFBQVEsS0FBSyxPQUNmLFFBQU8sS0FBSztXQUNILFNBQVMsSUFDbEI7TUFFQSxRQUFPO0FBRVQsTUFBSSxTQUFTLEtBQUs7QUFDaEIsT0FBSSxjQUFjLFFBQVEsS0FBSyxTQUFTO1lBQWMsU0FBUyxHQUFHO0FBQ2hFLFFBQUksSUFBSSxTQUFTLEtBQUssc0JBQXNCLEtBQUssSUFBSSxJQUFJLFNBQVMsT0FBTyxPQUFPLElBQUksSUFBSSxTQUFTLE9BQU8sS0FDdEc7U0FBSSxJQUFJLFNBQVMsR0FBRztNQUNsQixNQUFNLGlCQUFpQixJQUFJLFlBQVksSUFBSTtBQUMzQyxVQUFJLG1CQUFtQixJQUFJO0FBQ3pCLGFBQU07QUFDTiwyQkFBb0I7YUFDZjtBQUNMLGFBQU0sSUFBSSxNQUFNLEdBQUcsZUFBZTtBQUNsQywyQkFBb0IsSUFBSSxTQUFTLElBQUksSUFBSSxZQUFZLElBQUk7O0FBRTNELGtCQUFZO0FBQ1osYUFBTztBQUNQO2dCQUNTLElBQUksU0FBUyxHQUFHO0FBQ3pCLFlBQU07QUFDTiwwQkFBb0I7QUFDcEIsa0JBQVk7QUFDWixhQUFPO0FBQ1A7OztBQUdKLFFBQUksZ0JBQWdCO0FBQ2xCLFlBQU8sSUFBSSxTQUFTLElBQUksUUFBUTtBQUNoQyx5QkFBb0I7O1VBRWpCO0FBQ0wsUUFBSSxJQUFJLFNBQVMsRUFDZixRQUFPLElBQUksS0FBSyxNQUFNLFlBQVksR0FBRyxNQUFNO1FBRTNDLE9BQU0sS0FBSyxNQUFNLFlBQVksR0FBRyxNQUFNO0FBRXhDLHdCQUFvQixRQUFRLFlBQVk7O0FBRTFDLGVBQVk7QUFDWixVQUFPO2FBQ0UsU0FBUyxPQUFPLFNBQVMsR0FDbEMsR0FBRTtNQUVGLFFBQU87O0FBR1gsUUFBTzs7QUFFVCxNQUFNLGFBQWEsU0FBUyxHQUFHO0FBQzdCLFFBQU8sZ0JBQWdCLEtBQUssRUFBRSJ9
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
new RegExp(`\\.(${[
|
|
2
|
+
"apng",
|
|
3
|
+
"bmp",
|
|
4
|
+
"png",
|
|
5
|
+
"jpe?g",
|
|
6
|
+
"jfif",
|
|
7
|
+
"pjpeg",
|
|
8
|
+
"pjp",
|
|
9
|
+
"gif",
|
|
10
|
+
"svg",
|
|
11
|
+
"ico",
|
|
12
|
+
"webp",
|
|
13
|
+
"avif",
|
|
14
|
+
"mp4",
|
|
15
|
+
"webm",
|
|
16
|
+
"ogg",
|
|
17
|
+
"mp3",
|
|
18
|
+
"wav",
|
|
19
|
+
"flac",
|
|
20
|
+
"aac",
|
|
21
|
+
"woff2?",
|
|
22
|
+
"eot",
|
|
23
|
+
"ttf",
|
|
24
|
+
"otf",
|
|
25
|
+
"webmanifest",
|
|
26
|
+
"pdf",
|
|
27
|
+
"txt"
|
|
28
|
+
].join("|")})$`);
|
|
29
|
+
/**
|
|
30
|
+
* Prefix for resolved Ids that are not valid browser import specifiers
|
|
31
|
+
*/
|
|
32
|
+
const VALID_ID_PREFIX = `/@id/`;
|
|
33
|
+
/**
|
|
34
|
+
* Plugins that use 'virtual modules' (e.g. for helper functions), prefix the
|
|
35
|
+
* module ID with `\0`, a convention from the rollup ecosystem.
|
|
36
|
+
* This prevents other plugins from trying to process the id (like node resolution),
|
|
37
|
+
* and core features like sourcemaps can use this info to differentiate between
|
|
38
|
+
* virtual modules and regular files.
|
|
39
|
+
* `\0` is not a permitted char in import URLs so we have to replace them during
|
|
40
|
+
* import analysis. The id will be decoded back before entering the plugins pipeline.
|
|
41
|
+
* These encoded virtual ids are also prefixed by the VALID_ID_PREFIX, so virtual
|
|
42
|
+
* modules in the browser end up encoded as `/@id/__x00__{id}`
|
|
43
|
+
*/
|
|
44
|
+
const NULL_BYTE_PLACEHOLDER = `__x00__`;
|
|
45
|
+
//#endregion
|
|
46
|
+
export { NULL_BYTE_PLACEHOLDER, VALID_ID_PREFIX };
|
|
47
|
+
|
|
48
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9Adml0ZXN0K3V0aWxzQDQuMS4yL25vZGVfbW9kdWxlcy9Adml0ZXN0L3V0aWxzL2Rpc3QvY29uc3RhbnRzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFRPRE86IHRoaXMgaXMgYWxsIGNvcHkgcGFzdGVkIGZyb20gVml0ZSAtIGNhbiB0aGV5IGV4cG9zZSBhIG1vZHVsZSB0aGF0IGV4cG9ydHMgb25seSBjb25zdGFudHM/XG5jb25zdCBLTk9XTl9BU1NFVF9UWVBFUyA9IFtcblx0XCJhcG5nXCIsXG5cdFwiYm1wXCIsXG5cdFwicG5nXCIsXG5cdFwianBlP2dcIixcblx0XCJqZmlmXCIsXG5cdFwicGpwZWdcIixcblx0XCJwanBcIixcblx0XCJnaWZcIixcblx0XCJzdmdcIixcblx0XCJpY29cIixcblx0XCJ3ZWJwXCIsXG5cdFwiYXZpZlwiLFxuXHRcIm1wNFwiLFxuXHRcIndlYm1cIixcblx0XCJvZ2dcIixcblx0XCJtcDNcIixcblx0XCJ3YXZcIixcblx0XCJmbGFjXCIsXG5cdFwiYWFjXCIsXG5cdFwid29mZjI/XCIsXG5cdFwiZW90XCIsXG5cdFwidHRmXCIsXG5cdFwib3RmXCIsXG5cdFwid2VibWFuaWZlc3RcIixcblx0XCJwZGZcIixcblx0XCJ0eHRcIlxuXTtcbmNvbnN0IEtOT1dOX0FTU0VUX1JFID0gbmV3IFJlZ0V4cChgXFxcXC4oJHtLTk9XTl9BU1NFVF9UWVBFUy5qb2luKFwifFwiKX0pJGApO1xuY29uc3QgQ1NTX0xBTkdTX1JFID0gL1xcLihjc3N8bGVzc3xzYXNzfHNjc3N8c3R5bHxzdHlsdXN8cGNzc3xwb3N0Y3NzfHNzcykoPzokfFxcPykvO1xuLyoqXG4qIFByZWZpeCBmb3IgcmVzb2x2ZWQgSWRzIHRoYXQgYXJlIG5vdCB2YWxpZCBicm93c2VyIGltcG9ydCBzcGVjaWZpZXJzXG4qL1xuY29uc3QgVkFMSURfSURfUFJFRklYID0gYC9AaWQvYDtcbi8qKlxuKiBQbHVnaW5zIHRoYXQgdXNlICd2aXJ0dWFsIG1vZHVsZXMnIChlLmcuIGZvciBoZWxwZXIgZnVuY3Rpb25zKSwgcHJlZml4IHRoZVxuKiBtb2R1bGUgSUQgd2l0aCBgXFwwYCwgYSBjb252ZW50aW9uIGZyb20gdGhlIHJvbGx1cCBlY29zeXN0ZW0uXG4qIFRoaXMgcHJldmVudHMgb3RoZXIgcGx1Z2lucyBmcm9tIHRyeWluZyB0byBwcm9jZXNzIHRoZSBpZCAobGlrZSBub2RlIHJlc29sdXRpb24pLFxuKiBhbmQgY29yZSBmZWF0dXJlcyBsaWtlIHNvdXJjZW1hcHMgY2FuIHVzZSB0aGlzIGluZm8gdG8gZGlmZmVyZW50aWF0ZSBiZXR3ZWVuXG4qIHZpcnR1YWwgbW9kdWxlcyBhbmQgcmVndWxhciBmaWxlcy5cbiogYFxcMGAgaXMgbm90IGEgcGVybWl0dGVkIGNoYXIgaW4gaW1wb3J0IFVSTHMgc28gd2UgaGF2ZSB0byByZXBsYWNlIHRoZW0gZHVyaW5nXG4qIGltcG9ydCBhbmFseXNpcy4gVGhlIGlkIHdpbGwgYmUgZGVjb2RlZCBiYWNrIGJlZm9yZSBlbnRlcmluZyB0aGUgcGx1Z2lucyBwaXBlbGluZS5cbiogVGhlc2UgZW5jb2RlZCB2aXJ0dWFsIGlkcyBhcmUgYWxzbyBwcmVmaXhlZCBieSB0aGUgVkFMSURfSURfUFJFRklYLCBzbyB2aXJ0dWFsXG4qIG1vZHVsZXMgaW4gdGhlIGJyb3dzZXIgZW5kIHVwIGVuY29kZWQgYXMgYC9AaWQvX194MDBfX3tpZH1gXG4qL1xuY29uc3QgTlVMTF9CWVRFX1BMQUNFSE9MREVSID0gYF9feDAwX19gO1xuXG5leHBvcnQgeyBDU1NfTEFOR1NfUkUsIEtOT1dOX0FTU0VUX1JFLCBLTk9XTl9BU1NFVF9UWVBFUywgTlVMTF9CWVRFX1BMQUNFSE9MREVSLCBWQUxJRF9JRF9QUkVGSVggfTtcbiJdLCJ4X2dvb2dsZV9pZ25vcmVMaXN0IjpbMF0sIm1hcHBpbmdzIjoiQUE2QnVCLElBQUksT0FBTyxPQTVCUjtDQUN6QjtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0EsQ0FDMEQsS0FBSyxJQUFJLENBQUMsSUFBSTs7OztBQUt6RSxNQUFNLGtCQUFrQjs7Ozs7Ozs7Ozs7O0FBWXhCLE1BQU0sd0JBQXdCIn0=
|