@storybook/addon-vitest 0.0.0-pr-32795-sha-81cf1f23 → 0.0.0-pr-32717-sha-f340a68b
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/dist/_browser-chunks/chunk-JK72E6FR.js +6 -0
- package/dist/_browser-chunks/chunk-RPDOPHZX.js +77 -0
- package/dist/_node-chunks/chunk-724JPUHM.js +40 -0
- package/dist/_node-chunks/{chunk-KCHXXKAS.js → chunk-7ZCNTQXP.js} +24 -15
- package/dist/_node-chunks/chunk-A4VFZRVB.js +502 -0
- package/dist/_node-chunks/chunk-G6ASZ6US.js +69 -0
- package/dist/_node-chunks/{chunk-ML5LEYEM.js → chunk-K5BRNZW2.js} +19 -14
- package/dist/_node-chunks/chunk-KHNVQCL7.js +92 -0
- package/dist/_node-chunks/chunk-MLM43G3E.js +260 -0
- package/dist/_node-chunks/chunk-NGOGIT42.js +60 -0
- package/dist/_node-chunks/chunk-TXTKPPIA.js +247 -0
- package/dist/index.js +5 -1
- package/dist/manager.js +354 -163
- package/dist/node/coverage-reporter.js +864 -319
- package/dist/node/vitest.js +466 -190
- package/dist/postinstall.js +1276 -633
- package/dist/preset.js +354 -160
- package/dist/vitest-plugin/global-setup.js +105 -51
- package/dist/vitest-plugin/index.js +2381 -1161
- package/dist/vitest-plugin/setup-file.js +12 -6
- package/dist/vitest-plugin/test-utils.js +71 -31
- package/package.json +3 -7
- package/dist/_browser-chunks/chunk-ULSHVN74.js +0 -60
- package/dist/_node-chunks/chunk-43MIUCD6.js +0 -138
- package/dist/_node-chunks/chunk-NCYNCIBX.js +0 -1697
- package/dist/_node-chunks/chunk-NSF3UF7J.js +0 -339
- package/dist/_node-chunks/chunk-PYDFQUST.js +0 -35
- package/dist/_node-chunks/chunk-XTWQR354.js +0 -69
- package/dist/_node-chunks/chunk-ZI6UZG2P.js +0 -83
|
@@ -1,25 +1,31 @@
|
|
|
1
1
|
import {
|
|
2
2
|
PANEL_ID
|
|
3
|
-
} from "../_browser-chunks/chunk-
|
|
3
|
+
} from "../_browser-chunks/chunk-RPDOPHZX.js";
|
|
4
|
+
import {
|
|
5
|
+
__name
|
|
6
|
+
} from "../_browser-chunks/chunk-JK72E6FR.js";
|
|
4
7
|
|
|
5
8
|
// src/vitest-plugin/setup-file.ts
|
|
6
9
|
import { afterEach, beforeAll, vi } from "vitest";
|
|
7
10
|
import { Channel } from "storybook/internal/channels";
|
|
8
11
|
var transport = { setHandler: vi.fn(), send: vi.fn() };
|
|
9
12
|
globalThis.__STORYBOOK_ADDONS_CHANNEL__ ??= new Channel({ transport });
|
|
10
|
-
var modifyErrorMessage = ({ task }) => {
|
|
11
|
-
|
|
13
|
+
var modifyErrorMessage = /* @__PURE__ */ __name(({ task }) => {
|
|
14
|
+
const meta = task.meta;
|
|
12
15
|
if (task.type === "test" && task.result?.state === "fail" && meta.storyId && task.result.errors?.[0]) {
|
|
13
|
-
|
|
16
|
+
const currentError = task.result.errors[0];
|
|
17
|
+
const storybookUrl = import.meta.env.__STORYBOOK_URL__;
|
|
18
|
+
const storyUrl = `${storybookUrl}/?path=/story/${meta.storyId}&addonPanel=${PANEL_ID}`;
|
|
14
19
|
currentError.message = `
|
|
15
20
|
\x1B[34mClick to debug the error directly in Storybook: ${storyUrl}\x1B[39m
|
|
16
21
|
|
|
17
22
|
${currentError.message}`;
|
|
18
23
|
}
|
|
19
|
-
};
|
|
24
|
+
}, "modifyErrorMessage");
|
|
20
25
|
beforeAll(() => {
|
|
21
|
-
if (globalThis.globalProjectAnnotations)
|
|
26
|
+
if (globalThis.globalProjectAnnotations) {
|
|
22
27
|
return globalThis.globalProjectAnnotations.beforeAll();
|
|
28
|
+
}
|
|
23
29
|
});
|
|
24
30
|
afterEach(modifyErrorMessage);
|
|
25
31
|
export {
|
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
import {
|
|
2
|
+
__name
|
|
3
|
+
} from "../_browser-chunks/chunk-JK72E6FR.js";
|
|
4
|
+
|
|
1
5
|
// src/vitest-plugin/test-utils.ts
|
|
2
6
|
import { getStoryChildren, isStory } from "storybook/internal/csf";
|
|
3
7
|
import { server } from "@vitest/browser/context";
|
|
@@ -9,59 +13,95 @@ import { MINIMAL_VIEWPORTS } from "storybook/viewport";
|
|
|
9
13
|
var DEFAULT_VIEWPORT_DIMENSIONS = {
|
|
10
14
|
width: 1200,
|
|
11
15
|
height: 900
|
|
12
|
-
}
|
|
13
|
-
|
|
16
|
+
};
|
|
17
|
+
var validPixelOrNumber = /^\d+(px)?$/;
|
|
18
|
+
var percentagePattern = /^(\d+(\.\d+)?%)$/;
|
|
19
|
+
var vwPattern = /^(\d+(\.\d+)?vw)$/;
|
|
20
|
+
var vhPattern = /^(\d+(\.\d+)?vh)$/;
|
|
21
|
+
var emRemPattern = /^(\d+)(em|rem)$/;
|
|
22
|
+
var parseDimension = /* @__PURE__ */ __name((value, dimension) => {
|
|
23
|
+
if (validPixelOrNumber.test(value)) {
|
|
14
24
|
return Number.parseInt(value, 10);
|
|
15
|
-
if (percentagePattern.test(value)) {
|
|
16
|
-
|
|
25
|
+
} else if (percentagePattern.test(value)) {
|
|
26
|
+
const percentageValue = parseFloat(value) / 100;
|
|
17
27
|
return Math.round(DEFAULT_VIEWPORT_DIMENSIONS[dimension] * percentageValue);
|
|
18
28
|
} else if (vwPattern.test(value)) {
|
|
19
|
-
|
|
29
|
+
const vwValue = parseFloat(value) / 100;
|
|
20
30
|
return Math.round(DEFAULT_VIEWPORT_DIMENSIONS.width * vwValue);
|
|
21
31
|
} else if (vhPattern.test(value)) {
|
|
22
|
-
|
|
32
|
+
const vhValue = parseFloat(value) / 100;
|
|
23
33
|
return Math.round(DEFAULT_VIEWPORT_DIMENSIONS.height * vhValue);
|
|
34
|
+
} else if (emRemPattern.test(value)) {
|
|
35
|
+
const emRemValue = Number.parseInt(value, 10);
|
|
36
|
+
return emRemValue * 16;
|
|
24
37
|
} else {
|
|
25
|
-
if (emRemPattern.test(value))
|
|
26
|
-
return Number.parseInt(value, 10) * 16;
|
|
27
38
|
throw new UnsupportedViewportDimensionError({ dimension, value });
|
|
28
39
|
}
|
|
29
|
-
},
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
40
|
+
}, "parseDimension");
|
|
41
|
+
var setViewport = /* @__PURE__ */ __name(async (parameters = {}, globals = {}) => {
|
|
42
|
+
let defaultViewport;
|
|
43
|
+
const viewportsParam = parameters.viewport ?? {};
|
|
44
|
+
const viewportsGlobal = globals.viewport ?? {};
|
|
45
|
+
const isDisabled = viewportsParam.disable || viewportsParam.disabled;
|
|
46
|
+
if (viewportsGlobal.value && !isDisabled) {
|
|
47
|
+
defaultViewport = viewportsGlobal.value;
|
|
48
|
+
} else if (!isDisabled) {
|
|
49
|
+
defaultViewport = viewportsParam.defaultViewport;
|
|
50
|
+
}
|
|
51
|
+
const { page } = await import("@vitest/browser/context").catch(() => ({
|
|
33
52
|
page: null
|
|
34
53
|
}));
|
|
35
|
-
if (!page || !globalThis.__vitest_browser__)
|
|
54
|
+
if (!page || !globalThis.__vitest_browser__) {
|
|
36
55
|
return;
|
|
37
|
-
|
|
56
|
+
}
|
|
57
|
+
const options = {
|
|
38
58
|
...MINIMAL_VIEWPORTS,
|
|
39
59
|
...viewportsParam.viewports,
|
|
40
60
|
...viewportsParam.options
|
|
41
|
-
}
|
|
61
|
+
};
|
|
62
|
+
let viewportWidth = DEFAULT_VIEWPORT_DIMENSIONS.width;
|
|
63
|
+
let viewportHeight = DEFAULT_VIEWPORT_DIMENSIONS.height;
|
|
42
64
|
if (defaultViewport && defaultViewport in options) {
|
|
43
|
-
|
|
65
|
+
const { styles } = options[defaultViewport];
|
|
44
66
|
if (styles?.width && styles?.height) {
|
|
45
|
-
|
|
46
|
-
viewportWidth = parseDimension(width, "width")
|
|
67
|
+
const { width, height } = styles;
|
|
68
|
+
viewportWidth = parseDimension(width, "width");
|
|
69
|
+
viewportHeight = parseDimension(height, "height");
|
|
47
70
|
}
|
|
48
71
|
}
|
|
49
72
|
await page.viewport(viewportWidth, viewportHeight);
|
|
50
|
-
};
|
|
73
|
+
}, "setViewport");
|
|
51
74
|
|
|
52
75
|
// src/vitest-plugin/test-utils.ts
|
|
53
|
-
var { getInitialGlobals } = server.commands
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
)
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
76
|
+
var { getInitialGlobals } = server.commands;
|
|
77
|
+
var convertToFilePath = /* @__PURE__ */ __name((url) => {
|
|
78
|
+
const path = url.replace(/^file:\/\//, "");
|
|
79
|
+
const normalizedPath = path.replace(/^\/+([a-zA-Z]:)/, "$1");
|
|
80
|
+
return normalizedPath.replace(/%20/g, " ");
|
|
81
|
+
}, "convertToFilePath");
|
|
82
|
+
var testStory = /* @__PURE__ */ __name((exportName, story, meta, skipTags, storyId, testName) => {
|
|
83
|
+
return async (context) => {
|
|
84
|
+
const annotations = getCsfFactoryAnnotations(story, meta);
|
|
85
|
+
const test = isStory(story) && testName ? getStoryChildren(story).find((child) => child.input.name === testName) : void 0;
|
|
86
|
+
const storyAnnotations = test ? test.input : annotations.story;
|
|
87
|
+
const composedStory = composeStory(
|
|
88
|
+
storyAnnotations,
|
|
89
|
+
annotations.meta,
|
|
90
|
+
{ initialGlobals: await getInitialGlobals?.() ?? {} },
|
|
91
|
+
annotations.preview ?? globalThis.globalProjectAnnotations,
|
|
92
|
+
exportName
|
|
93
|
+
);
|
|
94
|
+
if (composedStory === void 0 || skipTags?.some((tag) => composedStory.tags.includes(tag))) {
|
|
95
|
+
context.skip();
|
|
96
|
+
}
|
|
97
|
+
context.story = composedStory;
|
|
98
|
+
const _task = context.task;
|
|
99
|
+
_task.meta.storyId = storyId;
|
|
100
|
+
await setViewport(composedStory.parameters, composedStory.globals);
|
|
101
|
+
await composedStory.run(void 0);
|
|
102
|
+
_task.meta.reports = composedStory.reporting.reports;
|
|
103
|
+
};
|
|
104
|
+
}, "testStory");
|
|
65
105
|
export {
|
|
66
106
|
convertToFilePath,
|
|
67
107
|
testStory
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@storybook/addon-vitest",
|
|
3
|
-
"version": "0.0.0-pr-
|
|
3
|
+
"version": "0.0.0-pr-32717-sha-f340a68b",
|
|
4
4
|
"description": "Storybook Vitest addon: Blazing fast component testing using stories",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"storybook",
|
|
@@ -73,9 +73,7 @@
|
|
|
73
73
|
},
|
|
74
74
|
"dependencies": {
|
|
75
75
|
"@storybook/global": "^5.0.0",
|
|
76
|
-
"@storybook/icons": "^
|
|
77
|
-
"prompts": "^2.4.0",
|
|
78
|
-
"ts-dedent": "^2.2.0"
|
|
76
|
+
"@storybook/icons": "^1.6.0"
|
|
79
77
|
},
|
|
80
78
|
"devDependencies": {
|
|
81
79
|
"@types/istanbul-lib-report": "^3.0.3",
|
|
@@ -84,10 +82,8 @@
|
|
|
84
82
|
"@types/semver": "^7",
|
|
85
83
|
"@vitest/browser-playwright": "^4.0.1",
|
|
86
84
|
"@vitest/runner": "^4.0.1",
|
|
87
|
-
"boxen": "^8.0.1",
|
|
88
85
|
"empathic": "^2.0.0",
|
|
89
86
|
"es-toolkit": "^1.36.0",
|
|
90
|
-
"execa": "^8.0.1",
|
|
91
87
|
"istanbul-lib-report": "^3.0.1",
|
|
92
88
|
"micromatch": "^4.0.8",
|
|
93
89
|
"pathe": "^1.1.2",
|
|
@@ -107,7 +103,7 @@
|
|
|
107
103
|
"@vitest/browser": "^3.0.0 || ^4.0.0",
|
|
108
104
|
"@vitest/browser-playwright": "^4.0.0",
|
|
109
105
|
"@vitest/runner": "^3.0.0 || ^4.0.0",
|
|
110
|
-
"storybook": "^0.0.0-pr-
|
|
106
|
+
"storybook": "^0.0.0-pr-32717-sha-f340a68b",
|
|
111
107
|
"vitest": "^3.0.0 || ^4.0.0"
|
|
112
108
|
},
|
|
113
109
|
"peerDependenciesMeta": {
|
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
// ../../core/src/component-testing/constants.ts
|
|
2
|
-
var ADDON_ID = "storybook/interactions", PANEL_ID = `${ADDON_ID}/panel`, DOCUMENTATION_LINK = "writing-tests/integrations/vitest-addon", DOCUMENTATION_DISCREPANCY_LINK = `${DOCUMENTATION_LINK}#what-happens-when-there-are-different-test-results-in-multiple-environments`;
|
|
3
|
-
|
|
4
|
-
// ../a11y/src/constants.ts
|
|
5
|
-
var ADDON_ID2 = "storybook/a11y", PANEL_ID2 = `${ADDON_ID2}/panel`;
|
|
6
|
-
var UI_STATE_ID = `${ADDON_ID2}/ui`, RESULT = `${ADDON_ID2}/result`, REQUEST = `${ADDON_ID2}/request`, RUNNING = `${ADDON_ID2}/running`, ERROR = `${ADDON_ID2}/error`, MANUAL = `${ADDON_ID2}/manual`, SELECT = `${ADDON_ID2}/select`, DOCUMENTATION_LINK2 = "writing-tests/accessibility-testing", DOCUMENTATION_DISCREPANCY_LINK2 = `${DOCUMENTATION_LINK2}#why-are-my-tests-failing-in-different-environments`;
|
|
7
|
-
|
|
8
|
-
// src/constants.ts
|
|
9
|
-
var ADDON_ID3 = "storybook/test", TEST_PROVIDER_ID = `${ADDON_ID3}/test-provider`;
|
|
10
|
-
var DOCUMENTATION_LINK3 = "writing-tests/integrations/vitest-addon", DOCUMENTATION_FATAL_ERROR_LINK = `${DOCUMENTATION_LINK3}#what-happens-if-vitest-itself-has-an-error`;
|
|
11
|
-
var storeOptions = {
|
|
12
|
-
id: ADDON_ID3,
|
|
13
|
-
initialState: {
|
|
14
|
-
config: {
|
|
15
|
-
coverage: !1,
|
|
16
|
-
a11y: !1
|
|
17
|
-
},
|
|
18
|
-
watching: !1,
|
|
19
|
-
cancelling: !1,
|
|
20
|
-
fatalError: void 0,
|
|
21
|
-
indexUrl: void 0,
|
|
22
|
-
previewAnnotations: [],
|
|
23
|
-
currentRun: {
|
|
24
|
-
triggeredBy: void 0,
|
|
25
|
-
config: {
|
|
26
|
-
coverage: !1,
|
|
27
|
-
a11y: !1
|
|
28
|
-
},
|
|
29
|
-
componentTestCount: {
|
|
30
|
-
success: 0,
|
|
31
|
-
error: 0
|
|
32
|
-
},
|
|
33
|
-
a11yCount: {
|
|
34
|
-
success: 0,
|
|
35
|
-
warning: 0,
|
|
36
|
-
error: 0
|
|
37
|
-
},
|
|
38
|
-
storyIds: void 0,
|
|
39
|
-
totalTestCount: void 0,
|
|
40
|
-
startedAt: void 0,
|
|
41
|
-
finishedAt: void 0,
|
|
42
|
-
unhandledErrors: [],
|
|
43
|
-
coverageSummary: void 0
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
}, FULL_RUN_TRIGGERS = ["global", "run-all"], STORE_CHANNEL_EVENT_NAME = `UNIVERSAL_STORE:${storeOptions.id}`;
|
|
47
|
-
var STATUS_TYPE_ID_COMPONENT_TEST = "storybook/component-test", STATUS_TYPE_ID_A11Y = "storybook/a11y";
|
|
48
|
-
|
|
49
|
-
export {
|
|
50
|
-
PANEL_ID,
|
|
51
|
-
ADDON_ID2 as ADDON_ID,
|
|
52
|
-
PANEL_ID2,
|
|
53
|
-
ADDON_ID3 as ADDON_ID2,
|
|
54
|
-
TEST_PROVIDER_ID,
|
|
55
|
-
DOCUMENTATION_FATAL_ERROR_LINK,
|
|
56
|
-
storeOptions,
|
|
57
|
-
FULL_RUN_TRIGGERS,
|
|
58
|
-
STATUS_TYPE_ID_COMPONENT_TEST,
|
|
59
|
-
STATUS_TYPE_ID_A11Y
|
|
60
|
-
};
|
|
@@ -1,138 +0,0 @@
|
|
|
1
|
-
import CJS_COMPAT_NODE_URL_75ibbepv58q from 'node:url';
|
|
2
|
-
import CJS_COMPAT_NODE_PATH_75ibbepv58q from 'node:path';
|
|
3
|
-
import CJS_COMPAT_NODE_MODULE_75ibbepv58q from "node:module";
|
|
4
|
-
|
|
5
|
-
var __filename = CJS_COMPAT_NODE_URL_75ibbepv58q.fileURLToPath(import.meta.url);
|
|
6
|
-
var __dirname = CJS_COMPAT_NODE_PATH_75ibbepv58q.dirname(__filename);
|
|
7
|
-
var require = CJS_COMPAT_NODE_MODULE_75ibbepv58q.createRequire(import.meta.url);
|
|
8
|
-
|
|
9
|
-
// ------------------------------------------------------------
|
|
10
|
-
// end of CJS compatibility banner, injected by Storybook's esbuild configuration
|
|
11
|
-
// ------------------------------------------------------------
|
|
12
|
-
|
|
13
|
-
// ../../node_modules/pathe/dist/shared/pathe.ff20891b.mjs
|
|
14
|
-
var _DRIVE_LETTER_START_RE = /^[A-Za-z]:\//;
|
|
15
|
-
function normalizeWindowsPath(input = "") {
|
|
16
|
-
return input && input.replace(/\\/g, "/").replace(_DRIVE_LETTER_START_RE, (r) => r.toUpperCase());
|
|
17
|
-
}
|
|
18
|
-
var _UNC_REGEX = /^[/\\]{2}/, _IS_ABSOLUTE_RE = /^[/\\](?![/\\])|^[/\\]{2}(?!\.)|^[A-Za-z]:[/\\]/, _DRIVE_LETTER_RE = /^[A-Za-z]:$/, _ROOT_FOLDER_RE = /^\/([A-Za-z]:)?$/, sep = "/", delimiter = ":", normalize = function(path2) {
|
|
19
|
-
if (path2.length === 0)
|
|
20
|
-
return ".";
|
|
21
|
-
path2 = normalizeWindowsPath(path2);
|
|
22
|
-
let isUNCPath = path2.match(_UNC_REGEX), isPathAbsolute = isAbsolute(path2), trailingSeparator = path2[path2.length - 1] === "/";
|
|
23
|
-
return path2 = normalizeString(path2, !isPathAbsolute), path2.length === 0 ? isPathAbsolute ? "/" : trailingSeparator ? "./" : "." : (trailingSeparator && (path2 += "/"), _DRIVE_LETTER_RE.test(path2) && (path2 += "/"), isUNCPath ? isPathAbsolute ? `//${path2}` : `//./${path2}` : isPathAbsolute && !isAbsolute(path2) ? `/${path2}` : path2);
|
|
24
|
-
}, join = function(...arguments_) {
|
|
25
|
-
if (arguments_.length === 0)
|
|
26
|
-
return ".";
|
|
27
|
-
let joined;
|
|
28
|
-
for (let argument of arguments_)
|
|
29
|
-
argument && argument.length > 0 && (joined === void 0 ? joined = argument : joined += `/${argument}`);
|
|
30
|
-
return joined === void 0 ? "." : normalize(joined.replace(/\/\/+/g, "/"));
|
|
31
|
-
};
|
|
32
|
-
function cwd() {
|
|
33
|
-
return typeof process < "u" && typeof process.cwd == "function" ? process.cwd().replace(/\\/g, "/") : "/";
|
|
34
|
-
}
|
|
35
|
-
var resolve = function(...arguments_) {
|
|
36
|
-
arguments_ = arguments_.map((argument) => normalizeWindowsPath(argument));
|
|
37
|
-
let resolvedPath = "", resolvedAbsolute = !1;
|
|
38
|
-
for (let index = arguments_.length - 1; index >= -1 && !resolvedAbsolute; index--) {
|
|
39
|
-
let path2 = index >= 0 ? arguments_[index] : cwd();
|
|
40
|
-
!path2 || path2.length === 0 || (resolvedPath = `${path2}/${resolvedPath}`, resolvedAbsolute = isAbsolute(path2));
|
|
41
|
-
}
|
|
42
|
-
return resolvedPath = normalizeString(resolvedPath, !resolvedAbsolute), resolvedAbsolute && !isAbsolute(resolvedPath) ? `/${resolvedPath}` : resolvedPath.length > 0 ? resolvedPath : ".";
|
|
43
|
-
};
|
|
44
|
-
function normalizeString(path2, allowAboveRoot) {
|
|
45
|
-
let res = "", lastSegmentLength = 0, lastSlash = -1, dots = 0, char = null;
|
|
46
|
-
for (let index = 0; index <= path2.length; ++index) {
|
|
47
|
-
if (index < path2.length)
|
|
48
|
-
char = path2[index];
|
|
49
|
-
else {
|
|
50
|
-
if (char === "/")
|
|
51
|
-
break;
|
|
52
|
-
char = "/";
|
|
53
|
-
}
|
|
54
|
-
if (char === "/") {
|
|
55
|
-
if (!(lastSlash === index - 1 || dots === 1)) if (dots === 2) {
|
|
56
|
-
if (res.length < 2 || lastSegmentLength !== 2 || res[res.length - 1] !== "." || res[res.length - 2] !== ".") {
|
|
57
|
-
if (res.length > 2) {
|
|
58
|
-
let lastSlashIndex = res.lastIndexOf("/");
|
|
59
|
-
lastSlashIndex === -1 ? (res = "", lastSegmentLength = 0) : (res = res.slice(0, lastSlashIndex), lastSegmentLength = res.length - 1 - res.lastIndexOf("/")), lastSlash = index, dots = 0;
|
|
60
|
-
continue;
|
|
61
|
-
} else if (res.length > 0) {
|
|
62
|
-
res = "", lastSegmentLength = 0, lastSlash = index, dots = 0;
|
|
63
|
-
continue;
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
allowAboveRoot && (res += res.length > 0 ? "/.." : "..", lastSegmentLength = 2);
|
|
67
|
-
} else
|
|
68
|
-
res.length > 0 ? res += `/${path2.slice(lastSlash + 1, index)}` : res = path2.slice(lastSlash + 1, index), lastSegmentLength = index - lastSlash - 1;
|
|
69
|
-
lastSlash = index, dots = 0;
|
|
70
|
-
} else char === "." && dots !== -1 ? ++dots : dots = -1;
|
|
71
|
-
}
|
|
72
|
-
return res;
|
|
73
|
-
}
|
|
74
|
-
var isAbsolute = function(p) {
|
|
75
|
-
return _IS_ABSOLUTE_RE.test(p);
|
|
76
|
-
}, toNamespacedPath = function(p) {
|
|
77
|
-
return normalizeWindowsPath(p);
|
|
78
|
-
}, _EXTNAME_RE = /.(\.[^./]+)$/, extname = function(p) {
|
|
79
|
-
let match = _EXTNAME_RE.exec(normalizeWindowsPath(p));
|
|
80
|
-
return match && match[1] || "";
|
|
81
|
-
}, relative = function(from, to) {
|
|
82
|
-
let _from = resolve(from).replace(_ROOT_FOLDER_RE, "$1").split("/"), _to = resolve(to).replace(_ROOT_FOLDER_RE, "$1").split("/");
|
|
83
|
-
if (_to[0][1] === ":" && _from[0][1] === ":" && _from[0] !== _to[0])
|
|
84
|
-
return _to.join("/");
|
|
85
|
-
let _fromCopy = [..._from];
|
|
86
|
-
for (let segment of _fromCopy) {
|
|
87
|
-
if (_to[0] !== segment)
|
|
88
|
-
break;
|
|
89
|
-
_from.shift(), _to.shift();
|
|
90
|
-
}
|
|
91
|
-
return [..._from.map(() => ".."), ..._to].join("/");
|
|
92
|
-
}, dirname = function(p) {
|
|
93
|
-
let segments = normalizeWindowsPath(p).replace(/\/$/, "").split("/").slice(0, -1);
|
|
94
|
-
return segments.length === 1 && _DRIVE_LETTER_RE.test(segments[0]) && (segments[0] += "/"), segments.join("/") || (isAbsolute(p) ? "/" : ".");
|
|
95
|
-
}, format = function(p) {
|
|
96
|
-
let segments = [p.root, p.dir, p.base ?? p.name + p.ext].filter(Boolean);
|
|
97
|
-
return normalizeWindowsPath(
|
|
98
|
-
p.root ? resolve(...segments) : segments.join("/")
|
|
99
|
-
);
|
|
100
|
-
}, basename = function(p, extension) {
|
|
101
|
-
let lastSegment = normalizeWindowsPath(p).split("/").pop();
|
|
102
|
-
return extension && lastSegment.endsWith(extension) ? lastSegment.slice(0, -extension.length) : lastSegment;
|
|
103
|
-
}, parse = function(p) {
|
|
104
|
-
let root = normalizeWindowsPath(p).split("/").shift() || "/", base = basename(p), extension = extname(base);
|
|
105
|
-
return {
|
|
106
|
-
root,
|
|
107
|
-
dir: dirname(p),
|
|
108
|
-
base,
|
|
109
|
-
ext: extension,
|
|
110
|
-
name: base.slice(0, base.length - extension.length)
|
|
111
|
-
};
|
|
112
|
-
}, path = {
|
|
113
|
-
__proto__: null,
|
|
114
|
-
basename,
|
|
115
|
-
delimiter,
|
|
116
|
-
dirname,
|
|
117
|
-
extname,
|
|
118
|
-
format,
|
|
119
|
-
isAbsolute,
|
|
120
|
-
join,
|
|
121
|
-
normalize,
|
|
122
|
-
normalizeString,
|
|
123
|
-
parse,
|
|
124
|
-
relative,
|
|
125
|
-
resolve,
|
|
126
|
-
sep,
|
|
127
|
-
toNamespacedPath
|
|
128
|
-
};
|
|
129
|
-
|
|
130
|
-
export {
|
|
131
|
-
sep,
|
|
132
|
-
normalize,
|
|
133
|
-
join,
|
|
134
|
-
resolve,
|
|
135
|
-
relative,
|
|
136
|
-
dirname,
|
|
137
|
-
path
|
|
138
|
-
};
|