@frictionless-ts/metadata 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -0
- package/build/assets/dialect-1.0.json +58 -0
- package/build/assets/dialect-2.0.json +98 -0
- package/build/assets/package-1.0.json +1517 -0
- package/build/assets/package-2.0.json +2168 -0
- package/build/assets/resource-1.0.json +1353 -0
- package/build/assets/resource-2.0.json +1987 -0
- package/build/assets/schema-1.0.json +1126 -0
- package/build/assets/schema-2.0.json +1715 -0
- package/build/descriptor/Descriptor.d.ts +2 -0
- package/build/descriptor/Descriptor.js +4 -0
- package/build/descriptor/index.d.ts +6 -0
- package/build/descriptor/index.js +6 -0
- package/build/descriptor/load.d.ts +8 -0
- package/build/descriptor/load.js +36 -0
- package/build/descriptor/load.spec.d.ts +1 -0
- package/build/descriptor/load.spec.js +44 -0
- package/build/descriptor/process/parse.d.ts +2 -0
- package/build/descriptor/process/parse.js +8 -0
- package/build/descriptor/process/stringify.d.ts +2 -0
- package/build/descriptor/process/stringify.js +4 -0
- package/build/descriptor/save.d.ts +9 -0
- package/build/descriptor/save.js +19 -0
- package/build/descriptor/save.spec.d.ts +1 -0
- package/build/descriptor/save.spec.js +99 -0
- package/build/dialect/Dialect.d.ts +89 -0
- package/build/dialect/Dialect.js +2 -0
- package/build/dialect/assert.d.ts +6 -0
- package/build/dialect/assert.js +12 -0
- package/build/dialect/assert.spec.d.ts +1 -0
- package/build/dialect/assert.spec.js +22 -0
- package/build/dialect/convert/fromDescriptor.d.ts +2 -0
- package/build/dialect/convert/fromDescriptor.js +20 -0
- package/build/dialect/convert/toDescriptor.d.ts +3 -0
- package/build/dialect/convert/toDescriptor.js +5 -0
- package/build/dialect/index.d.ts +8 -0
- package/build/dialect/index.js +8 -0
- package/build/dialect/load.d.ts +5 -0
- package/build/dialect/load.js +12 -0
- package/build/dialect/load.spec.d.ts +1 -0
- package/build/dialect/load.spec.js +18 -0
- package/build/dialect/resolve.d.ts +2 -0
- package/build/dialect/resolve.js +11 -0
- package/build/dialect/save.d.ts +9 -0
- package/build/dialect/save.js +16 -0
- package/build/dialect/save.spec.d.ts +1 -0
- package/build/dialect/save.spec.js +52 -0
- package/build/dialect/validate.d.ts +10 -0
- package/build/dialect/validate.js +25 -0
- package/build/dialect/validate.spec.d.ts +1 -0
- package/build/dialect/validate.spec.js +28 -0
- package/build/error/Bound.d.ts +4 -0
- package/build/error/Bound.js +2 -0
- package/build/error/Error.d.ts +3 -0
- package/build/error/Error.js +2 -0
- package/build/error/Unbound.d.ts +6 -0
- package/build/error/Unbound.js +2 -0
- package/build/error/index.d.ts +16 -0
- package/build/error/index.js +2 -0
- package/build/error/types/Base.d.ts +3 -0
- package/build/error/types/Base.js +2 -0
- package/build/error/types/Bytes.d.ts +6 -0
- package/build/error/types/Bytes.js +2 -0
- package/build/error/types/Cell.d.ts +56 -0
- package/build/error/types/Cell.js +2 -0
- package/build/error/types/Data.d.ts +5 -0
- package/build/error/types/Data.js +2 -0
- package/build/error/types/Document.d.ts +7 -0
- package/build/error/types/Document.js +2 -0
- package/build/error/types/Encoding.d.ts +6 -0
- package/build/error/types/Encoding.js +2 -0
- package/build/error/types/Field.d.ts +15 -0
- package/build/error/types/Field.js +2 -0
- package/build/error/types/Fields.d.ts +11 -0
- package/build/error/types/Fields.js +2 -0
- package/build/error/types/File.d.ts +4 -0
- package/build/error/types/File.js +2 -0
- package/build/error/types/ForeignKey.d.ts +7 -0
- package/build/error/types/ForeignKey.js +2 -0
- package/build/error/types/Hash.d.ts +6 -0
- package/build/error/types/Hash.js +2 -0
- package/build/error/types/Metadata.d.ts +9 -0
- package/build/error/types/Metadata.js +2 -0
- package/build/error/types/Row.d.ts +9 -0
- package/build/error/types/Row.js +2 -0
- package/build/error/types/Table.d.ts +6 -0
- package/build/error/types/Table.js +2 -0
- package/build/field/Field.d.ts +5 -0
- package/build/field/Field.js +2 -0
- package/build/field/Type.d.ts +2 -0
- package/build/field/Type.js +2 -0
- package/build/field/convert/fromDescriptor.d.ts +2 -0
- package/build/field/convert/fromDescriptor.js +61 -0
- package/build/field/convert/fromDescriptor.spec.d.ts +1 -0
- package/build/field/convert/fromDescriptor.spec.js +241 -0
- package/build/field/convert/toDescriptor.d.ts +3 -0
- package/build/field/convert/toDescriptor.js +5 -0
- package/build/field/convert/toDescriptor.spec.d.ts +1 -0
- package/build/field/convert/toDescriptor.spec.js +291 -0
- package/build/field/index.d.ts +5 -0
- package/build/field/index.js +3 -0
- package/build/field/types/Any.d.ts +20 -0
- package/build/field/types/Any.js +2 -0
- package/build/field/types/Array.d.ts +32 -0
- package/build/field/types/Array.js +2 -0
- package/build/field/types/Base.d.ts +60 -0
- package/build/field/types/Base.js +2 -0
- package/build/field/types/Boolean.d.ts +28 -0
- package/build/field/types/Boolean.js +2 -0
- package/build/field/types/Date.d.ts +43 -0
- package/build/field/types/Date.js +2 -0
- package/build/field/types/Datetime.d.ts +43 -0
- package/build/field/types/Datetime.js +2 -0
- package/build/field/types/Duration.d.ts +28 -0
- package/build/field/types/Duration.js +2 -0
- package/build/field/types/Geojson.d.ts +30 -0
- package/build/field/types/Geojson.js +2 -0
- package/build/field/types/Geopoint.d.ts +27 -0
- package/build/field/types/Geopoint.js +2 -0
- package/build/field/types/Integer.d.ts +57 -0
- package/build/field/types/Integer.js +2 -0
- package/build/field/types/List.d.ts +36 -0
- package/build/field/types/List.js +2 -0
- package/build/field/types/Number.d.ts +48 -0
- package/build/field/types/Number.js +2 -0
- package/build/field/types/Object.d.ts +32 -0
- package/build/field/types/Object.js +2 -0
- package/build/field/types/String.d.ts +51 -0
- package/build/field/types/String.js +2 -0
- package/build/field/types/Time.d.ts +43 -0
- package/build/field/types/Time.js +2 -0
- package/build/field/types/Year.d.ts +36 -0
- package/build/field/types/Year.js +2 -0
- package/build/field/types/Yearmonth.d.ts +36 -0
- package/build/field/types/Yearmonth.js +2 -0
- package/build/field/types/index.d.ts +16 -0
- package/build/field/types/index.js +17 -0
- package/build/index.d.ts +112 -0
- package/build/index.js +32 -0
- package/build/json/Schema.d.ts +2 -0
- package/build/json/Schema.js +2 -0
- package/build/json/Value.d.ts +1 -0
- package/build/json/Value.js +2 -0
- package/build/json/ajv.d.ts +2 -0
- package/build/json/ajv.js +10 -0
- package/build/json/assert.d.ts +2 -0
- package/build/json/assert.js +10 -0
- package/build/json/cache.d.ts +2 -0
- package/build/json/cache.js +5 -0
- package/build/json/index.d.ts +5 -0
- package/build/json/index.js +4 -0
- package/build/json/inspect/schema.d.ts +4 -0
- package/build/json/inspect/schema.js +10 -0
- package/build/json/inspect/schema.spec.d.ts +1 -0
- package/build/json/inspect/schema.spec.js +132 -0
- package/build/json/inspect/value.d.ts +11 -0
- package/build/json/inspect/value.js +21 -0
- package/build/json/inspect/value.spec.d.ts +1 -0
- package/build/json/inspect/value.spec.js +121 -0
- package/build/json/load.d.ts +3 -0
- package/build/json/load.js +13 -0
- package/build/json/resolve.d.ts +2 -0
- package/build/json/resolve.js +11 -0
- package/build/metadata/Metadata.d.ts +3 -0
- package/build/metadata/Metadata.js +2 -0
- package/build/metadata/index.d.ts +1 -0
- package/build/metadata/index.js +2 -0
- package/build/package/Contributor.d.ts +21 -0
- package/build/package/Contributor.js +2 -0
- package/build/package/Package.d.ts +64 -0
- package/build/package/Package.js +2 -0
- package/build/package/assert.d.ts +8 -0
- package/build/package/assert.js +12 -0
- package/build/package/assert.spec.d.ts +1 -0
- package/build/package/assert.spec.js +26 -0
- package/build/package/convert/fromDescriptor.d.ts +4 -0
- package/build/package/convert/fromDescriptor.js +36 -0
- package/build/package/convert/toDescriptor.d.ts +5 -0
- package/build/package/convert/toDescriptor.js +7 -0
- package/build/package/index.d.ts +8 -0
- package/build/package/index.js +7 -0
- package/build/package/load.d.ts +5 -0
- package/build/package/load.js +14 -0
- package/build/package/load.spec.d.ts +1 -0
- package/build/package/load.spec.js +28 -0
- package/build/package/save.d.ts +9 -0
- package/build/package/save.js +18 -0
- package/build/package/save.spec.d.ts +1 -0
- package/build/package/save.spec.js +311 -0
- package/build/package/validate.d.ts +12 -0
- package/build/package/validate.js +27 -0
- package/build/package/validate.spec.d.ts +1 -0
- package/build/package/validate.spec.js +41 -0
- package/build/path/basepath.d.ts +2 -0
- package/build/path/basepath.js +25 -0
- package/build/path/basepath.spec.d.ts +1 -0
- package/build/path/basepath.spec.js +55 -0
- package/build/path/denormalize.d.ts +3 -0
- package/build/path/denormalize.js +29 -0
- package/build/path/denormalize.spec.d.ts +1 -0
- package/build/path/denormalize.spec.js +45 -0
- package/build/path/index.d.ts +5 -0
- package/build/path/index.js +6 -0
- package/build/path/normalize.d.ts +6 -0
- package/build/path/normalize.js +54 -0
- package/build/path/normalize.spec.d.ts +1 -0
- package/build/path/normalize.spec.js +71 -0
- package/build/path/path.d.ts +5 -0
- package/build/path/path.js +48 -0
- package/build/path/path.spec.d.ts +1 -0
- package/build/path/path.spec.js +111 -0
- package/build/platform/index.d.ts +1 -0
- package/build/platform/index.js +2 -0
- package/build/platform/node.d.ts +130 -0
- package/build/platform/node.js +10 -0
- package/build/platform/node.spec.d.ts +1 -0
- package/build/platform/node.spec.js +16 -0
- package/build/profile/@minify.d.ts +1 -0
- package/build/profile/@minify.js +58 -0
- package/build/profile/Profile.d.ts +9 -0
- package/build/profile/Profile.js +2 -0
- package/build/profile/assert.d.ts +6 -0
- package/build/profile/assert.js +36 -0
- package/build/profile/assert.spec.d.ts +1 -0
- package/build/profile/assert.spec.js +115 -0
- package/build/profile/index.d.ts +2 -0
- package/build/profile/index.js +2 -0
- package/build/profile/load.d.ts +4 -0
- package/build/profile/load.js +12 -0
- package/build/profile/registry.d.ts +2 -0
- package/build/profile/registry.js +83 -0
- package/build/profile/resolve.d.ts +2 -0
- package/build/profile/resolve.js +8 -0
- package/build/profile/validate.d.ts +9 -0
- package/build/profile/validate.js +12 -0
- package/build/report/Report.d.ts +5 -0
- package/build/report/Report.js +2 -0
- package/build/report/create.d.ts +7 -0
- package/build/report/create.js +6 -0
- package/build/report/index.d.ts +2 -0
- package/build/report/index.js +2 -0
- package/build/resource/License.d.ts +18 -0
- package/build/resource/License.js +2 -0
- package/build/resource/Resource.d.ts +93 -0
- package/build/resource/Resource.js +2 -0
- package/build/resource/Source.d.ts +17 -0
- package/build/resource/Source.js +2 -0
- package/build/resource/assert.d.ts +8 -0
- package/build/resource/assert.js +12 -0
- package/build/resource/assert.spec.d.ts +1 -0
- package/build/resource/assert.spec.js +23 -0
- package/build/resource/convert/fromDescriptor.d.ts +4 -0
- package/build/resource/convert/fromDescriptor.js +69 -0
- package/build/resource/convert/toDescriptor.d.ts +5 -0
- package/build/resource/convert/toDescriptor.js +36 -0
- package/build/resource/helpers.d.ts +2 -0
- package/build/resource/helpers.js +6 -0
- package/build/resource/index.d.ts +11 -0
- package/build/resource/index.js +9 -0
- package/build/resource/infer.d.ts +3 -0
- package/build/resource/infer.js +35 -0
- package/build/resource/infer.spec.d.ts +1 -0
- package/build/resource/infer.spec.js +103 -0
- package/build/resource/load.d.ts +5 -0
- package/build/resource/load.js +14 -0
- package/build/resource/load.spec.d.ts +1 -0
- package/build/resource/load.spec.js +22 -0
- package/build/resource/save.d.ts +9 -0
- package/build/resource/save.js +18 -0
- package/build/resource/save.spec.d.ts +1 -0
- package/build/resource/save.spec.js +170 -0
- package/build/resource/validate.d.ts +13 -0
- package/build/resource/validate.js +57 -0
- package/build/resource/validate.spec.d.ts +1 -0
- package/build/resource/validate.spec.js +30 -0
- package/build/schema/ForeignKey.d.ts +23 -0
- package/build/schema/ForeignKey.js +2 -0
- package/build/schema/Schema.d.ts +56 -0
- package/build/schema/Schema.js +2 -0
- package/build/schema/assert.d.ts +6 -0
- package/build/schema/assert.js +12 -0
- package/build/schema/assert.spec.d.ts +1 -0
- package/build/schema/assert.spec.js +34 -0
- package/build/schema/convert/fromDescriptor.d.ts +2 -0
- package/build/schema/convert/fromDescriptor.js +70 -0
- package/build/schema/convert/fromJsonSchema.d.ts +3 -0
- package/build/schema/convert/fromJsonSchema.js +105 -0
- package/build/schema/convert/fromJsonSchema.spec.d.ts +1 -0
- package/build/schema/convert/fromJsonSchema.spec.js +156 -0
- package/build/schema/convert/toDescriptor.d.ts +3 -0
- package/build/schema/convert/toDescriptor.js +5 -0
- package/build/schema/convert/toJsonSchema.d.ts +3 -0
- package/build/schema/convert/toJsonSchema.js +173 -0
- package/build/schema/convert/toJsonSchema.spec.d.ts +1 -0
- package/build/schema/convert/toJsonSchema.spec.js +403 -0
- package/build/schema/index.d.ts +11 -0
- package/build/schema/index.js +10 -0
- package/build/schema/load.d.ts +5 -0
- package/build/schema/load.js +12 -0
- package/build/schema/load.spec.d.ts +1 -0
- package/build/schema/load.spec.js +55 -0
- package/build/schema/resolve.d.ts +2 -0
- package/build/schema/resolve.js +11 -0
- package/build/schema/save.d.ts +9 -0
- package/build/schema/save.js +16 -0
- package/build/schema/save.spec.d.ts +1 -0
- package/build/schema/save.spec.js +58 -0
- package/build/schema/validate.d.ts +10 -0
- package/build/schema/validate.js +25 -0
- package/build/schema/validate.spec.d.ts +1 -0
- package/build/schema/validate.spec.js +41 -0
- package/package.json +37 -0
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { describe, expect, it } from "vitest";
|
|
2
|
+
import { denormalizePath } from "./denormalize.js";
|
|
3
|
+
describe("denormalizePath", () => {
|
|
4
|
+
it.each([
|
|
5
|
+
{
|
|
6
|
+
description: "remote URL without basepath",
|
|
7
|
+
path: "http://example.com/path/to/file.txt",
|
|
8
|
+
basepath: undefined,
|
|
9
|
+
denormalizedPath: "http://example.com/path/to/file.txt",
|
|
10
|
+
},
|
|
11
|
+
{
|
|
12
|
+
description: "remote URL with basepath",
|
|
13
|
+
path: "http://example.com/path/to/file.txt",
|
|
14
|
+
basepath: "data",
|
|
15
|
+
denormalizedPath: "http://example.com/path/to/file.txt",
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
description: "local file in subfolder",
|
|
19
|
+
path: "/tmp/data/file.csv",
|
|
20
|
+
basepath: "/tmp",
|
|
21
|
+
denormalizedPath: "data/file.csv",
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
description: "local file in direct child folder",
|
|
25
|
+
path: "/tmp/file.csv",
|
|
26
|
+
basepath: "/tmp",
|
|
27
|
+
denormalizedPath: "file.csv",
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
description: "local file with deeply nested basepath",
|
|
31
|
+
path: "/tmp/data/nested/deep/file.csv",
|
|
32
|
+
basepath: "/tmp/data/nested",
|
|
33
|
+
denormalizedPath: "deep/file.csv",
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
description: "local file with multi-level basepath",
|
|
37
|
+
path: "/home/user/projects/data/file.csv",
|
|
38
|
+
basepath: "/home/user/projects",
|
|
39
|
+
denormalizedPath: "data/file.csv",
|
|
40
|
+
},
|
|
41
|
+
])("$description", ({ path, basepath, denormalizedPath }) => {
|
|
42
|
+
expect(denormalizePath(path, { basepath })).toEqual(denormalizedPath);
|
|
43
|
+
});
|
|
44
|
+
});
|
|
45
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVub3JtYWxpemUuc3BlYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3BhdGgvZGVub3JtYWxpemUuc3BlYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsTUFBTSxRQUFRLENBQUE7QUFDN0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGtCQUFrQixDQUFBO0FBRWxELFFBQVEsQ0FBQyxpQkFBaUIsRUFBRSxHQUFHLEVBQUU7SUFDL0IsRUFBRSxDQUFDLElBQUksQ0FBQztRQUNOO1lBQ0UsV0FBVyxFQUFFLDZCQUE2QjtZQUMxQyxJQUFJLEVBQUUscUNBQXFDO1lBQzNDLFFBQVEsRUFBRSxTQUFTO1lBQ25CLGdCQUFnQixFQUFFLHFDQUFxQztTQUN4RDtRQUNEO1lBQ0UsV0FBVyxFQUFFLDBCQUEwQjtZQUN2QyxJQUFJLEVBQUUscUNBQXFDO1lBQzNDLFFBQVEsRUFBRSxNQUFNO1lBQ2hCLGdCQUFnQixFQUFFLHFDQUFxQztTQUN4RDtRQUNEO1lBQ0UsV0FBVyxFQUFFLHlCQUF5QjtZQUN0QyxJQUFJLEVBQUUsb0JBQW9CO1lBQzFCLFFBQVEsRUFBRSxNQUFNO1lBQ2hCLGdCQUFnQixFQUFFLGVBQWU7U0FDbEM7UUFDRDtZQUNFLFdBQVcsRUFBRSxtQ0FBbUM7WUFDaEQsSUFBSSxFQUFFLGVBQWU7WUFDckIsUUFBUSxFQUFFLE1BQU07WUFDaEIsZ0JBQWdCLEVBQUUsVUFBVTtTQUM3QjtRQUNEO1lBQ0UsV0FBVyxFQUFFLHdDQUF3QztZQUNyRCxJQUFJLEVBQUUsZ0NBQWdDO1lBQ3RDLFFBQVEsRUFBRSxrQkFBa0I7WUFDNUIsZ0JBQWdCLEVBQUUsZUFBZTtTQUNsQztRQUNEO1lBQ0UsV0FBVyxFQUFFLHNDQUFzQztZQUNuRCxJQUFJLEVBQUUsbUNBQW1DO1lBQ3pDLFFBQVEsRUFBRSxxQkFBcUI7WUFDL0IsZ0JBQWdCLEVBQUUsZUFBZTtTQUNsQztLQUNGLENBQUMsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRSxFQUFFO1FBQzFELE1BQU0sQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFBO0lBQ3ZFLENBQUMsQ0FBQyxDQUFBO0FBQ0osQ0FBQyxDQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBkZXNjcmliZSwgZXhwZWN0LCBpdCB9IGZyb20gXCJ2aXRlc3RcIlxuaW1wb3J0IHsgZGVub3JtYWxpemVQYXRoIH0gZnJvbSBcIi4vZGVub3JtYWxpemUudHNcIlxuXG5kZXNjcmliZShcImRlbm9ybWFsaXplUGF0aFwiLCAoKSA9PiB7XG4gIGl0LmVhY2goW1xuICAgIHtcbiAgICAgIGRlc2NyaXB0aW9uOiBcInJlbW90ZSBVUkwgd2l0aG91dCBiYXNlcGF0aFwiLFxuICAgICAgcGF0aDogXCJodHRwOi8vZXhhbXBsZS5jb20vcGF0aC90by9maWxlLnR4dFwiLFxuICAgICAgYmFzZXBhdGg6IHVuZGVmaW5lZCxcbiAgICAgIGRlbm9ybWFsaXplZFBhdGg6IFwiaHR0cDovL2V4YW1wbGUuY29tL3BhdGgvdG8vZmlsZS50eHRcIixcbiAgICB9LFxuICAgIHtcbiAgICAgIGRlc2NyaXB0aW9uOiBcInJlbW90ZSBVUkwgd2l0aCBiYXNlcGF0aFwiLFxuICAgICAgcGF0aDogXCJodHRwOi8vZXhhbXBsZS5jb20vcGF0aC90by9maWxlLnR4dFwiLFxuICAgICAgYmFzZXBhdGg6IFwiZGF0YVwiLFxuICAgICAgZGVub3JtYWxpemVkUGF0aDogXCJodHRwOi8vZXhhbXBsZS5jb20vcGF0aC90by9maWxlLnR4dFwiLFxuICAgIH0sXG4gICAge1xuICAgICAgZGVzY3JpcHRpb246IFwibG9jYWwgZmlsZSBpbiBzdWJmb2xkZXJcIixcbiAgICAgIHBhdGg6IFwiL3RtcC9kYXRhL2ZpbGUuY3N2XCIsXG4gICAgICBiYXNlcGF0aDogXCIvdG1wXCIsXG4gICAgICBkZW5vcm1hbGl6ZWRQYXRoOiBcImRhdGEvZmlsZS5jc3ZcIixcbiAgICB9LFxuICAgIHtcbiAgICAgIGRlc2NyaXB0aW9uOiBcImxvY2FsIGZpbGUgaW4gZGlyZWN0IGNoaWxkIGZvbGRlclwiLFxuICAgICAgcGF0aDogXCIvdG1wL2ZpbGUuY3N2XCIsXG4gICAgICBiYXNlcGF0aDogXCIvdG1wXCIsXG4gICAgICBkZW5vcm1hbGl6ZWRQYXRoOiBcImZpbGUuY3N2XCIsXG4gICAgfSxcbiAgICB7XG4gICAgICBkZXNjcmlwdGlvbjogXCJsb2NhbCBmaWxlIHdpdGggZGVlcGx5IG5lc3RlZCBiYXNlcGF0aFwiLFxuICAgICAgcGF0aDogXCIvdG1wL2RhdGEvbmVzdGVkL2RlZXAvZmlsZS5jc3ZcIixcbiAgICAgIGJhc2VwYXRoOiBcIi90bXAvZGF0YS9uZXN0ZWRcIixcbiAgICAgIGRlbm9ybWFsaXplZFBhdGg6IFwiZGVlcC9maWxlLmNzdlwiLFxuICAgIH0sXG4gICAge1xuICAgICAgZGVzY3JpcHRpb246IFwibG9jYWwgZmlsZSB3aXRoIG11bHRpLWxldmVsIGJhc2VwYXRoXCIsXG4gICAgICBwYXRoOiBcIi9ob21lL3VzZXIvcHJvamVjdHMvZGF0YS9maWxlLmNzdlwiLFxuICAgICAgYmFzZXBhdGg6IFwiL2hvbWUvdXNlci9wcm9qZWN0c1wiLFxuICAgICAgZGVub3JtYWxpemVkUGF0aDogXCJkYXRhL2ZpbGUuY3N2XCIsXG4gICAgfSxcbiAgXSkoXCIkZGVzY3JpcHRpb25cIiwgKHsgcGF0aCwgYmFzZXBhdGgsIGRlbm9ybWFsaXplZFBhdGggfSkgPT4ge1xuICAgIGV4cGVjdChkZW5vcm1hbGl6ZVBhdGgocGF0aCwgeyBiYXNlcGF0aCB9KSkudG9FcXVhbChkZW5vcm1hbGl6ZWRQYXRoKVxuICB9KVxufSlcbiJdfQ==
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { getName, getFormat, getFilename, getProtocol } from "./path.ts";
|
|
2
|
+
export { getBasepath, resolveBasepath } from "./basepath.ts";
|
|
3
|
+
export { denormalizePath } from "./denormalize.ts";
|
|
4
|
+
export { normalizePath } from "./normalize.ts";
|
|
5
|
+
export { isRemotePath } from "./path.ts";
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { getName, getFormat, getFilename, getProtocol } from "./path.js";
|
|
2
|
+
export { getBasepath, resolveBasepath } from "./basepath.js";
|
|
3
|
+
export { denormalizePath } from "./denormalize.js";
|
|
4
|
+
export { normalizePath } from "./normalize.js";
|
|
5
|
+
export { isRemotePath } from "./path.js";
|
|
6
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9wYXRoL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsTUFBTSxXQUFXLENBQUE7QUFDeEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxlQUFlLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFDNUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGtCQUFrQixDQUFBO0FBQ2xELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQTtBQUM5QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sV0FBVyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHsgZ2V0TmFtZSwgZ2V0Rm9ybWF0LCBnZXRGaWxlbmFtZSwgZ2V0UHJvdG9jb2wgfSBmcm9tIFwiLi9wYXRoLnRzXCJcbmV4cG9ydCB7IGdldEJhc2VwYXRoLCByZXNvbHZlQmFzZXBhdGggfSBmcm9tIFwiLi9iYXNlcGF0aC50c1wiXG5leHBvcnQgeyBkZW5vcm1hbGl6ZVBhdGggfSBmcm9tIFwiLi9kZW5vcm1hbGl6ZS50c1wiXG5leHBvcnQgeyBub3JtYWxpemVQYXRoIH0gZnJvbSBcIi4vbm9ybWFsaXplLnRzXCJcbmV4cG9ydCB7IGlzUmVtb3RlUGF0aCB9IGZyb20gXCIuL3BhdGgudHNcIlxuIl19
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { node } from "../platform/index.js";
|
|
2
|
+
import { isRemotePath } from "./path.js";
|
|
3
|
+
export function normalizePath(path, options) {
|
|
4
|
+
const isPathRemote = isRemotePath(path);
|
|
5
|
+
const isBasepathRemote = isRemotePath(options.basepath ?? "");
|
|
6
|
+
if (isPathRemote) {
|
|
7
|
+
return new URL(path).toString();
|
|
8
|
+
}
|
|
9
|
+
if (isBasepathRemote) {
|
|
10
|
+
const normalizedPath = new URL([options.basepath, path].join("/")).toString();
|
|
11
|
+
if (!normalizedPath.startsWith(options.basepath ?? "")) {
|
|
12
|
+
throw new Error(`Path ${path} is not a subpath of ${options.basepath}`);
|
|
13
|
+
}
|
|
14
|
+
return normalizedPath;
|
|
15
|
+
}
|
|
16
|
+
if (!node) {
|
|
17
|
+
throw new Error("File system is not supported in this environment");
|
|
18
|
+
}
|
|
19
|
+
const normalizedPath = options.basepath
|
|
20
|
+
? node.path.join(options.basepath, path)
|
|
21
|
+
: path;
|
|
22
|
+
const relativePath = node.path.relative(options.basepath ?? "", normalizedPath);
|
|
23
|
+
if (relativePath.startsWith("..")) {
|
|
24
|
+
throw new Error(`Path ${path} is not a subpath of ${options.basepath}`);
|
|
25
|
+
}
|
|
26
|
+
return node.path.relative(process.cwd(), node.path.resolve(normalizedPath));
|
|
27
|
+
}
|
|
28
|
+
export function denormalizePath(path, options) {
|
|
29
|
+
const isPathRemote = isRemotePath(path);
|
|
30
|
+
const isBasepathRemote = isRemotePath(options.basepath ?? "");
|
|
31
|
+
if (isPathRemote) {
|
|
32
|
+
return new URL(path).toString();
|
|
33
|
+
}
|
|
34
|
+
if (isBasepathRemote) {
|
|
35
|
+
const basepath = new URL(options.basepath ?? "").toString();
|
|
36
|
+
if (!path.startsWith(basepath)) {
|
|
37
|
+
throw new Error(`Path ${path} is not a subpath of ${options.basepath}`);
|
|
38
|
+
}
|
|
39
|
+
const relative = path.replace(`${basepath}/`, "");
|
|
40
|
+
return relative;
|
|
41
|
+
}
|
|
42
|
+
if (!node) {
|
|
43
|
+
throw new Error("File system is not supported in this environment");
|
|
44
|
+
}
|
|
45
|
+
const normalizedPath = node.path.resolve(path);
|
|
46
|
+
const normalizedBasepath = node.path.resolve(options.basepath ?? "");
|
|
47
|
+
if (!normalizedPath.startsWith(normalizedBasepath)) {
|
|
48
|
+
throw new Error(`Path ${path} is not a subpath of ${options.basepath}`);
|
|
49
|
+
}
|
|
50
|
+
// The Data Package standard requires "/" as the path separator
|
|
51
|
+
const relative = node.path.relative(normalizedBasepath, normalizedPath);
|
|
52
|
+
return relative.split(node.path.sep).join("/");
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9ybWFsaXplLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vcGF0aC9ub3JtYWxpemUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLHNCQUFzQixDQUFBO0FBQzNDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxXQUFXLENBQUE7QUFFeEMsTUFBTSxVQUFVLGFBQWEsQ0FBQyxJQUFZLEVBQUUsT0FBOEI7SUFDeEUsTUFBTSxZQUFZLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFBO0lBQ3ZDLE1BQU0sZ0JBQWdCLEdBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQyxRQUFRLElBQUksRUFBRSxDQUFDLENBQUE7SUFFN0QsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNqQixPQUFPLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFBO0lBQ2pDLENBQUM7SUFFRCxJQUFJLGdCQUFnQixFQUFFLENBQUM7UUFDckIsTUFBTSxjQUFjLEdBQUcsSUFBSSxHQUFHLENBQzVCLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQ25DLENBQUMsUUFBUSxFQUFFLENBQUE7UUFFWixJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUM7WUFDdkQsTUFBTSxJQUFJLEtBQUssQ0FBQyxRQUFRLElBQUksd0JBQXdCLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFBO1FBQ3pFLENBQUM7UUFFRCxPQUFPLGNBQWMsQ0FBQTtJQUN2QixDQUFDO0lBRUQsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ1YsTUFBTSxJQUFJLEtBQUssQ0FBQyxrREFBa0QsQ0FBQyxDQUFBO0lBQ3JFLENBQUM7SUFFRCxNQUFNLGNBQWMsR0FBRyxPQUFPLENBQUMsUUFBUTtRQUNyQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUM7UUFDeEMsQ0FBQyxDQUFDLElBQUksQ0FBQTtJQUVSLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUNyQyxPQUFPLENBQUMsUUFBUSxJQUFJLEVBQUUsRUFDdEIsY0FBYyxDQUNmLENBQUE7SUFFRCxJQUFJLFlBQVksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUNsQyxNQUFNLElBQUksS0FBSyxDQUFDLFFBQVEsSUFBSSx3QkFBd0IsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUE7SUFDekUsQ0FBQztJQUVELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUE7QUFDN0UsQ0FBQztBQUVELE1BQU0sVUFBVSxlQUFlLENBQUMsSUFBWSxFQUFFLE9BQThCO0lBQzFFLE1BQU0sWUFBWSxHQUFHLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQTtJQUN2QyxNQUFNLGdCQUFnQixHQUFHLFlBQVksQ0FBQyxPQUFPLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQyxDQUFBO0lBRTdELElBQUksWUFBWSxFQUFFLENBQUM7UUFDakIsT0FBTyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQTtJQUNqQyxDQUFDO0lBRUQsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO1FBQ3JCLE1BQU0sUUFBUSxHQUFHLElBQUksR0FBRyxDQUFDLE9BQU8sQ0FBQyxRQUFRLElBQUksRUFBRSxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUE7UUFFM0QsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztZQUMvQixNQUFNLElBQUksS0FBSyxDQUFDLFFBQVEsSUFBSSx3QkFBd0IsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUE7UUFDekUsQ0FBQztRQUVELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxRQUFRLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQTtRQUNqRCxPQUFPLFFBQVEsQ0FBQTtJQUNqQixDQUFDO0lBRUQsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ1YsTUFBTSxJQUFJLEtBQUssQ0FBQyxrREFBa0QsQ0FBQyxDQUFBO0lBQ3JFLENBQUM7SUFFRCxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQTtJQUM5QyxNQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxRQUFRLElBQUksRUFBRSxDQUFDLENBQUE7SUFFcEUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsa0JBQWtCLENBQUMsRUFBRSxDQUFDO1FBQ25ELE1BQU0sSUFBSSxLQUFLLENBQUMsUUFBUSxJQUFJLHdCQUF3QixPQUFPLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQTtJQUN6RSxDQUFDO0lBRUQsK0RBQStEO0lBQy9ELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGtCQUFrQixFQUFFLGNBQWMsQ0FBQyxDQUFBO0lBQ3ZFLE9BQU8sUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQTtBQUNoRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgbm9kZSB9IGZyb20gXCIuLi9wbGF0Zm9ybS9pbmRleC50c1wiXG5pbXBvcnQgeyBpc1JlbW90ZVBhdGggfSBmcm9tIFwiLi9wYXRoLnRzXCJcblxuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZVBhdGgocGF0aDogc3RyaW5nLCBvcHRpb25zOiB7IGJhc2VwYXRoPzogc3RyaW5nIH0pIHtcbiAgY29uc3QgaXNQYXRoUmVtb3RlID0gaXNSZW1vdGVQYXRoKHBhdGgpXG4gIGNvbnN0IGlzQmFzZXBhdGhSZW1vdGUgPSBpc1JlbW90ZVBhdGgob3B0aW9ucy5iYXNlcGF0aCA/PyBcIlwiKVxuXG4gIGlmIChpc1BhdGhSZW1vdGUpIHtcbiAgICByZXR1cm4gbmV3IFVSTChwYXRoKS50b1N0cmluZygpXG4gIH1cblxuICBpZiAoaXNCYXNlcGF0aFJlbW90ZSkge1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRQYXRoID0gbmV3IFVSTChcbiAgICAgIFtvcHRpb25zLmJhc2VwYXRoLCBwYXRoXS5qb2luKFwiL1wiKSxcbiAgICApLnRvU3RyaW5nKClcblxuICAgIGlmICghbm9ybWFsaXplZFBhdGguc3RhcnRzV2l0aChvcHRpb25zLmJhc2VwYXRoID8/IFwiXCIpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFBhdGggJHtwYXRofSBpcyBub3QgYSBzdWJwYXRoIG9mICR7b3B0aW9ucy5iYXNlcGF0aH1gKVxuICAgIH1cblxuICAgIHJldHVybiBub3JtYWxpemVkUGF0aFxuICB9XG5cbiAgaWYgKCFub2RlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiRmlsZSBzeXN0ZW0gaXMgbm90IHN1cHBvcnRlZCBpbiB0aGlzIGVudmlyb25tZW50XCIpXG4gIH1cblxuICBjb25zdCBub3JtYWxpemVkUGF0aCA9IG9wdGlvbnMuYmFzZXBhdGhcbiAgICA/IG5vZGUucGF0aC5qb2luKG9wdGlvbnMuYmFzZXBhdGgsIHBhdGgpXG4gICAgOiBwYXRoXG5cbiAgY29uc3QgcmVsYXRpdmVQYXRoID0gbm9kZS5wYXRoLnJlbGF0aXZlKFxuICAgIG9wdGlvbnMuYmFzZXBhdGggPz8gXCJcIixcbiAgICBub3JtYWxpemVkUGF0aCxcbiAgKVxuXG4gIGlmIChyZWxhdGl2ZVBhdGguc3RhcnRzV2l0aChcIi4uXCIpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBQYXRoICR7cGF0aH0gaXMgbm90IGEgc3VicGF0aCBvZiAke29wdGlvbnMuYmFzZXBhdGh9YClcbiAgfVxuXG4gIHJldHVybiBub2RlLnBhdGgucmVsYXRpdmUocHJvY2Vzcy5jd2QoKSwgbm9kZS5wYXRoLnJlc29sdmUobm9ybWFsaXplZFBhdGgpKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVub3JtYWxpemVQYXRoKHBhdGg6IHN0cmluZywgb3B0aW9uczogeyBiYXNlcGF0aD86IHN0cmluZyB9KSB7XG4gIGNvbnN0IGlzUGF0aFJlbW90ZSA9IGlzUmVtb3RlUGF0aChwYXRoKVxuICBjb25zdCBpc0Jhc2VwYXRoUmVtb3RlID0gaXNSZW1vdGVQYXRoKG9wdGlvbnMuYmFzZXBhdGggPz8gXCJcIilcblxuICBpZiAoaXNQYXRoUmVtb3RlKSB7XG4gICAgcmV0dXJuIG5ldyBVUkwocGF0aCkudG9TdHJpbmcoKVxuICB9XG5cbiAgaWYgKGlzQmFzZXBhdGhSZW1vdGUpIHtcbiAgICBjb25zdCBiYXNlcGF0aCA9IG5ldyBVUkwob3B0aW9ucy5iYXNlcGF0aCA/PyBcIlwiKS50b1N0cmluZygpXG5cbiAgICBpZiAoIXBhdGguc3RhcnRzV2l0aChiYXNlcGF0aCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgUGF0aCAke3BhdGh9IGlzIG5vdCBhIHN1YnBhdGggb2YgJHtvcHRpb25zLmJhc2VwYXRofWApXG4gICAgfVxuXG4gICAgY29uc3QgcmVsYXRpdmUgPSBwYXRoLnJlcGxhY2UoYCR7YmFzZXBhdGh9L2AsIFwiXCIpXG4gICAgcmV0dXJuIHJlbGF0aXZlXG4gIH1cblxuICBpZiAoIW5vZGUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJGaWxlIHN5c3RlbSBpcyBub3Qgc3VwcG9ydGVkIGluIHRoaXMgZW52aXJvbm1lbnRcIilcbiAgfVxuXG4gIGNvbnN0IG5vcm1hbGl6ZWRQYXRoID0gbm9kZS5wYXRoLnJlc29sdmUocGF0aClcbiAgY29uc3Qgbm9ybWFsaXplZEJhc2VwYXRoID0gbm9kZS5wYXRoLnJlc29sdmUob3B0aW9ucy5iYXNlcGF0aCA/PyBcIlwiKVxuXG4gIGlmICghbm9ybWFsaXplZFBhdGguc3RhcnRzV2l0aChub3JtYWxpemVkQmFzZXBhdGgpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBQYXRoICR7cGF0aH0gaXMgbm90IGEgc3VicGF0aCBvZiAke29wdGlvbnMuYmFzZXBhdGh9YClcbiAgfVxuXG4gIC8vIFRoZSBEYXRhIFBhY2thZ2Ugc3RhbmRhcmQgcmVxdWlyZXMgXCIvXCIgYXMgdGhlIHBhdGggc2VwYXJhdG9yXG4gIGNvbnN0IHJlbGF0aXZlID0gbm9kZS5wYXRoLnJlbGF0aXZlKG5vcm1hbGl6ZWRCYXNlcGF0aCwgbm9ybWFsaXplZFBhdGgpXG4gIHJldHVybiByZWxhdGl2ZS5zcGxpdChub2RlLnBhdGguc2VwKS5qb2luKFwiL1wiKVxufVxuIl19
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { join, relative } from "node:path";
|
|
2
|
+
import { describe, expect, it } from "vitest";
|
|
3
|
+
import { normalizePath } from "./normalize.js";
|
|
4
|
+
describe("normalizePath", () => {
|
|
5
|
+
it.each([
|
|
6
|
+
{
|
|
7
|
+
description: "local path without basepath",
|
|
8
|
+
path: "path/to/file.txt",
|
|
9
|
+
basepath: undefined,
|
|
10
|
+
normalizedPath: join("path", "to", "file.txt"),
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
description: "local path with local basepath",
|
|
14
|
+
path: "file.txt",
|
|
15
|
+
basepath: "path/to",
|
|
16
|
+
normalizedPath: join("path", "to", "file.txt"),
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
description: "remote path",
|
|
20
|
+
path: "http://example.com/path/to/file.txt",
|
|
21
|
+
basepath: undefined,
|
|
22
|
+
normalizedPath: "http://example.com/path/to/file.txt",
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
description: "remote path with query string",
|
|
26
|
+
path: "http://example.com/path/to/file.txt?query=param",
|
|
27
|
+
basepath: undefined,
|
|
28
|
+
normalizedPath: "http://example.com/path/to/file.txt?query=param",
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
description: "local path with remote basepath",
|
|
32
|
+
path: "path/to/file.txt",
|
|
33
|
+
basepath: "http://example.com",
|
|
34
|
+
normalizedPath: "http://example.com/path/to/file.txt",
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
description: "local path with absolute basepath",
|
|
38
|
+
path: "file.txt",
|
|
39
|
+
basepath: "/absolute/path",
|
|
40
|
+
normalizedPath: relative(process.cwd(), "/absolute/path/file.txt"),
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
description: "path with empty basepath",
|
|
44
|
+
path: "path/to/file.txt",
|
|
45
|
+
basepath: "",
|
|
46
|
+
normalizedPath: join("path", "to", "file.txt"),
|
|
47
|
+
},
|
|
48
|
+
])("$description", ({ path, basepath, normalizedPath }) => {
|
|
49
|
+
expect(normalizePath(path, { basepath })).toEqual(normalizedPath);
|
|
50
|
+
});
|
|
51
|
+
it.each([
|
|
52
|
+
{
|
|
53
|
+
description: "absolute path",
|
|
54
|
+
path: "/absolute/path/to/file.txt",
|
|
55
|
+
basepath: undefined,
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
description: "local traversed path",
|
|
59
|
+
path: "../file.txt",
|
|
60
|
+
basepath: "/folder",
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
description: "remote traversed path",
|
|
64
|
+
path: "../file.txt",
|
|
65
|
+
basepath: "http://example.com/data",
|
|
66
|
+
},
|
|
67
|
+
])("$description -- throw", ({ path, basepath }) => {
|
|
68
|
+
expect(() => normalizePath(path, { basepath })).toThrow();
|
|
69
|
+
});
|
|
70
|
+
});
|
|
71
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9ybWFsaXplLnNwZWMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9wYXRoL25vcm1hbGl6ZS5zcGVjLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLE1BQU0sV0FBVyxDQUFBO0FBQzFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLFFBQVEsQ0FBQTtBQUM3QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFFOUMsUUFBUSxDQUFDLGVBQWUsRUFBRSxHQUFHLEVBQUU7SUFDN0IsRUFBRSxDQUFDLElBQUksQ0FBQztRQUNOO1lBQ0UsV0FBVyxFQUFFLDZCQUE2QjtZQUMxQyxJQUFJLEVBQUUsa0JBQWtCO1lBQ3hCLFFBQVEsRUFBRSxTQUFTO1lBQ25CLGNBQWMsRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxVQUFVLENBQUM7U0FDL0M7UUFDRDtZQUNFLFdBQVcsRUFBRSxnQ0FBZ0M7WUFDN0MsSUFBSSxFQUFFLFVBQVU7WUFDaEIsUUFBUSxFQUFFLFNBQVM7WUFDbkIsY0FBYyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLFVBQVUsQ0FBQztTQUMvQztRQUNEO1lBQ0UsV0FBVyxFQUFFLGFBQWE7WUFDMUIsSUFBSSxFQUFFLHFDQUFxQztZQUMzQyxRQUFRLEVBQUUsU0FBUztZQUNuQixjQUFjLEVBQUUscUNBQXFDO1NBQ3REO1FBQ0Q7WUFDRSxXQUFXLEVBQUUsK0JBQStCO1lBQzVDLElBQUksRUFBRSxpREFBaUQ7WUFDdkQsUUFBUSxFQUFFLFNBQVM7WUFDbkIsY0FBYyxFQUFFLGlEQUFpRDtTQUNsRTtRQUNEO1lBQ0UsV0FBVyxFQUFFLGlDQUFpQztZQUM5QyxJQUFJLEVBQUUsa0JBQWtCO1lBQ3hCLFFBQVEsRUFBRSxvQkFBb0I7WUFDOUIsY0FBYyxFQUFFLHFDQUFxQztTQUN0RDtRQUNEO1lBQ0UsV0FBVyxFQUFFLG1DQUFtQztZQUNoRCxJQUFJLEVBQUUsVUFBVTtZQUNoQixRQUFRLEVBQUUsZ0JBQWdCO1lBQzFCLGNBQWMsRUFBRSxRQUFRLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxFQUFFLHlCQUF5QixDQUFDO1NBQ25FO1FBQ0Q7WUFDRSxXQUFXLEVBQUUsMEJBQTBCO1lBQ3ZDLElBQUksRUFBRSxrQkFBa0I7WUFDeEIsUUFBUSxFQUFFLEVBQUU7WUFDWixjQUFjLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsVUFBVSxDQUFDO1NBQy9DO0tBQ0YsQ0FBQyxDQUFDLGNBQWMsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxjQUFjLEVBQUUsRUFBRSxFQUFFO1FBQ3hELE1BQU0sQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQTtJQUNuRSxDQUFDLENBQUMsQ0FBQTtJQUVGLEVBQUUsQ0FBQyxJQUFJLENBQUM7UUFDTjtZQUNFLFdBQVcsRUFBRSxlQUFlO1lBQzVCLElBQUksRUFBRSw0QkFBNEI7WUFDbEMsUUFBUSxFQUFFLFNBQVM7U0FDcEI7UUFDRDtZQUNFLFdBQVcsRUFBRSxzQkFBc0I7WUFDbkMsSUFBSSxFQUFFLGFBQWE7WUFDbkIsUUFBUSxFQUFFLFNBQVM7U0FDcEI7UUFDRDtZQUNFLFdBQVcsRUFBRSx1QkFBdUI7WUFDcEMsSUFBSSxFQUFFLGFBQWE7WUFDbkIsUUFBUSxFQUFFLHlCQUF5QjtTQUNwQztLQUNGLENBQUMsQ0FBQyx1QkFBdUIsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUU7UUFDakQsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUE7SUFDM0QsQ0FBQyxDQUFDLENBQUE7QUFDSixDQUFDLENBQUMsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGpvaW4sIHJlbGF0aXZlIH0gZnJvbSBcIm5vZGU6cGF0aFwiXG5pbXBvcnQgeyBkZXNjcmliZSwgZXhwZWN0LCBpdCB9IGZyb20gXCJ2aXRlc3RcIlxuaW1wb3J0IHsgbm9ybWFsaXplUGF0aCB9IGZyb20gXCIuL25vcm1hbGl6ZS50c1wiXG5cbmRlc2NyaWJlKFwibm9ybWFsaXplUGF0aFwiLCAoKSA9PiB7XG4gIGl0LmVhY2goW1xuICAgIHtcbiAgICAgIGRlc2NyaXB0aW9uOiBcImxvY2FsIHBhdGggd2l0aG91dCBiYXNlcGF0aFwiLFxuICAgICAgcGF0aDogXCJwYXRoL3RvL2ZpbGUudHh0XCIsXG4gICAgICBiYXNlcGF0aDogdW5kZWZpbmVkLFxuICAgICAgbm9ybWFsaXplZFBhdGg6IGpvaW4oXCJwYXRoXCIsIFwidG9cIiwgXCJmaWxlLnR4dFwiKSxcbiAgICB9LFxuICAgIHtcbiAgICAgIGRlc2NyaXB0aW9uOiBcImxvY2FsIHBhdGggd2l0aCBsb2NhbCBiYXNlcGF0aFwiLFxuICAgICAgcGF0aDogXCJmaWxlLnR4dFwiLFxuICAgICAgYmFzZXBhdGg6IFwicGF0aC90b1wiLFxuICAgICAgbm9ybWFsaXplZFBhdGg6IGpvaW4oXCJwYXRoXCIsIFwidG9cIiwgXCJmaWxlLnR4dFwiKSxcbiAgICB9LFxuICAgIHtcbiAgICAgIGRlc2NyaXB0aW9uOiBcInJlbW90ZSBwYXRoXCIsXG4gICAgICBwYXRoOiBcImh0dHA6Ly9leGFtcGxlLmNvbS9wYXRoL3RvL2ZpbGUudHh0XCIsXG4gICAgICBiYXNlcGF0aDogdW5kZWZpbmVkLFxuICAgICAgbm9ybWFsaXplZFBhdGg6IFwiaHR0cDovL2V4YW1wbGUuY29tL3BhdGgvdG8vZmlsZS50eHRcIixcbiAgICB9LFxuICAgIHtcbiAgICAgIGRlc2NyaXB0aW9uOiBcInJlbW90ZSBwYXRoIHdpdGggcXVlcnkgc3RyaW5nXCIsXG4gICAgICBwYXRoOiBcImh0dHA6Ly9leGFtcGxlLmNvbS9wYXRoL3RvL2ZpbGUudHh0P3F1ZXJ5PXBhcmFtXCIsXG4gICAgICBiYXNlcGF0aDogdW5kZWZpbmVkLFxuICAgICAgbm9ybWFsaXplZFBhdGg6IFwiaHR0cDovL2V4YW1wbGUuY29tL3BhdGgvdG8vZmlsZS50eHQ/cXVlcnk9cGFyYW1cIixcbiAgICB9LFxuICAgIHtcbiAgICAgIGRlc2NyaXB0aW9uOiBcImxvY2FsIHBhdGggd2l0aCByZW1vdGUgYmFzZXBhdGhcIixcbiAgICAgIHBhdGg6IFwicGF0aC90by9maWxlLnR4dFwiLFxuICAgICAgYmFzZXBhdGg6IFwiaHR0cDovL2V4YW1wbGUuY29tXCIsXG4gICAgICBub3JtYWxpemVkUGF0aDogXCJodHRwOi8vZXhhbXBsZS5jb20vcGF0aC90by9maWxlLnR4dFwiLFxuICAgIH0sXG4gICAge1xuICAgICAgZGVzY3JpcHRpb246IFwibG9jYWwgcGF0aCB3aXRoIGFic29sdXRlIGJhc2VwYXRoXCIsXG4gICAgICBwYXRoOiBcImZpbGUudHh0XCIsXG4gICAgICBiYXNlcGF0aDogXCIvYWJzb2x1dGUvcGF0aFwiLFxuICAgICAgbm9ybWFsaXplZFBhdGg6IHJlbGF0aXZlKHByb2Nlc3MuY3dkKCksIFwiL2Fic29sdXRlL3BhdGgvZmlsZS50eHRcIiksXG4gICAgfSxcbiAgICB7XG4gICAgICBkZXNjcmlwdGlvbjogXCJwYXRoIHdpdGggZW1wdHkgYmFzZXBhdGhcIixcbiAgICAgIHBhdGg6IFwicGF0aC90by9maWxlLnR4dFwiLFxuICAgICAgYmFzZXBhdGg6IFwiXCIsXG4gICAgICBub3JtYWxpemVkUGF0aDogam9pbihcInBhdGhcIiwgXCJ0b1wiLCBcImZpbGUudHh0XCIpLFxuICAgIH0sXG4gIF0pKFwiJGRlc2NyaXB0aW9uXCIsICh7IHBhdGgsIGJhc2VwYXRoLCBub3JtYWxpemVkUGF0aCB9KSA9PiB7XG4gICAgZXhwZWN0KG5vcm1hbGl6ZVBhdGgocGF0aCwgeyBiYXNlcGF0aCB9KSkudG9FcXVhbChub3JtYWxpemVkUGF0aClcbiAgfSlcblxuICBpdC5lYWNoKFtcbiAgICB7XG4gICAgICBkZXNjcmlwdGlvbjogXCJhYnNvbHV0ZSBwYXRoXCIsXG4gICAgICBwYXRoOiBcIi9hYnNvbHV0ZS9wYXRoL3RvL2ZpbGUudHh0XCIsXG4gICAgICBiYXNlcGF0aDogdW5kZWZpbmVkLFxuICAgIH0sXG4gICAge1xuICAgICAgZGVzY3JpcHRpb246IFwibG9jYWwgdHJhdmVyc2VkIHBhdGhcIixcbiAgICAgIHBhdGg6IFwiLi4vZmlsZS50eHRcIixcbiAgICAgIGJhc2VwYXRoOiBcIi9mb2xkZXJcIixcbiAgICB9LFxuICAgIHtcbiAgICAgIGRlc2NyaXB0aW9uOiBcInJlbW90ZSB0cmF2ZXJzZWQgcGF0aFwiLFxuICAgICAgcGF0aDogXCIuLi9maWxlLnR4dFwiLFxuICAgICAgYmFzZXBhdGg6IFwiaHR0cDovL2V4YW1wbGUuY29tL2RhdGFcIixcbiAgICB9LFxuICBdKShcIiRkZXNjcmlwdGlvbiAtLSB0aHJvd1wiLCAoeyBwYXRoLCBiYXNlcGF0aCB9KSA9PiB7XG4gICAgZXhwZWN0KCgpID0+IG5vcm1hbGl6ZVBhdGgocGF0aCwgeyBiYXNlcGF0aCB9KSkudG9UaHJvdygpXG4gIH0pXG59KVxuIl19
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export declare function isRemotePath(path: string): boolean;
|
|
2
|
+
export declare function getName(filename?: string): string | undefined;
|
|
3
|
+
export declare function getProtocol(path: string): string;
|
|
4
|
+
export declare function getFormat(filename?: string): string | undefined;
|
|
5
|
+
export declare function getFilename(path: string): string | undefined;
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import slugify from "@sindresorhus/slugify";
|
|
2
|
+
import { node } from "../platform/index.js";
|
|
3
|
+
export function isRemotePath(path) {
|
|
4
|
+
const protocol = getProtocol(path);
|
|
5
|
+
return protocol !== "file";
|
|
6
|
+
}
|
|
7
|
+
export function getName(filename) {
|
|
8
|
+
if (!filename) {
|
|
9
|
+
return undefined;
|
|
10
|
+
}
|
|
11
|
+
const name = filename.split(".")[0];
|
|
12
|
+
if (!name) {
|
|
13
|
+
return undefined;
|
|
14
|
+
}
|
|
15
|
+
return slugify(name);
|
|
16
|
+
}
|
|
17
|
+
export function getProtocol(path) {
|
|
18
|
+
try {
|
|
19
|
+
const url = new URL(path);
|
|
20
|
+
const protocol = url.protocol.replace(":", "");
|
|
21
|
+
// Handle Windows drive letters
|
|
22
|
+
if (protocol.length < 2) {
|
|
23
|
+
return "file";
|
|
24
|
+
}
|
|
25
|
+
return protocol;
|
|
26
|
+
}
|
|
27
|
+
catch {
|
|
28
|
+
return "file";
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
export function getFormat(filename) {
|
|
32
|
+
return filename?.split(".").slice(-1)[0]?.toLowerCase();
|
|
33
|
+
}
|
|
34
|
+
export function getFilename(path) {
|
|
35
|
+
const isRemote = isRemotePath(path);
|
|
36
|
+
if (isRemote) {
|
|
37
|
+
const pathname = new URL(path).pathname;
|
|
38
|
+
const filename = pathname.split("/").slice(-1)[0];
|
|
39
|
+
return filename?.includes(".") ? filename : undefined;
|
|
40
|
+
}
|
|
41
|
+
if (!node) {
|
|
42
|
+
throw new Error("File system is not supported in this environment");
|
|
43
|
+
}
|
|
44
|
+
const resolvedPath = node.path.resolve(path);
|
|
45
|
+
const filename = node.path.parse(resolvedPath).base;
|
|
46
|
+
return filename?.includes(".") ? filename : undefined;
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGF0aC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3BhdGgvcGF0aC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLE9BQU8sTUFBTSx1QkFBdUIsQ0FBQTtBQUMzQyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sc0JBQXNCLENBQUE7QUFFM0MsTUFBTSxVQUFVLFlBQVksQ0FBQyxJQUFZO0lBQ3ZDLE1BQU0sUUFBUSxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQTtJQUNsQyxPQUFPLFFBQVEsS0FBSyxNQUFNLENBQUE7QUFDNUIsQ0FBQztBQUVELE1BQU0sVUFBVSxPQUFPLENBQUMsUUFBaUI7SUFDdkMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2QsT0FBTyxTQUFTLENBQUE7SUFDbEIsQ0FBQztJQUVELE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDbkMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ1YsT0FBTyxTQUFTLENBQUE7SUFDbEIsQ0FBQztJQUVELE9BQU8sT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFBO0FBQ3RCLENBQUM7QUFFRCxNQUFNLFVBQVUsV0FBVyxDQUFDLElBQVk7SUFDdEMsSUFBSSxDQUFDO1FBQ0gsTUFBTSxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDekIsTUFBTSxRQUFRLEdBQUcsR0FBRyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFBO1FBRTlDLCtCQUErQjtRQUMvQixJQUFJLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDeEIsT0FBTyxNQUFNLENBQUE7UUFDZixDQUFDO1FBRUQsT0FBTyxRQUFRLENBQUE7SUFDakIsQ0FBQztJQUFDLE1BQU0sQ0FBQztRQUNQLE9BQU8sTUFBTSxDQUFBO0lBQ2YsQ0FBQztBQUNILENBQUM7QUFFRCxNQUFNLFVBQVUsU0FBUyxDQUFDLFFBQWlCO0lBQ3pDLE9BQU8sUUFBUSxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsQ0FBQTtBQUN6RCxDQUFDO0FBRUQsTUFBTSxVQUFVLFdBQVcsQ0FBQyxJQUFZO0lBQ3RDLE1BQU0sUUFBUSxHQUFHLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQTtJQUVuQyxJQUFJLFFBQVEsRUFBRSxDQUFDO1FBQ2IsTUFBTSxRQUFRLEdBQUcsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFBO1FBQ3ZDLE1BQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDakQsT0FBTyxRQUFRLEVBQUUsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQTtJQUN2RCxDQUFDO0lBRUQsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ1YsTUFBTSxJQUFJLEtBQUssQ0FBQyxrREFBa0QsQ0FBQyxDQUFBO0lBQ3JFLENBQUM7SUFFRCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQTtJQUM1QyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUE7SUFDbkQsT0FBTyxRQUFRLEVBQUUsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQTtBQUN2RCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHNsdWdpZnkgZnJvbSBcIkBzaW5kcmVzb3JodXMvc2x1Z2lmeVwiXG5pbXBvcnQgeyBub2RlIH0gZnJvbSBcIi4uL3BsYXRmb3JtL2luZGV4LnRzXCJcblxuZXhwb3J0IGZ1bmN0aW9uIGlzUmVtb3RlUGF0aChwYXRoOiBzdHJpbmcpIHtcbiAgY29uc3QgcHJvdG9jb2wgPSBnZXRQcm90b2NvbChwYXRoKVxuICByZXR1cm4gcHJvdG9jb2wgIT09IFwiZmlsZVwiXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXROYW1lKGZpbGVuYW1lPzogc3RyaW5nKSB7XG4gIGlmICghZmlsZW5hbWUpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkXG4gIH1cblxuICBjb25zdCBuYW1lID0gZmlsZW5hbWUuc3BsaXQoXCIuXCIpWzBdXG4gIGlmICghbmFtZSkge1xuICAgIHJldHVybiB1bmRlZmluZWRcbiAgfVxuXG4gIHJldHVybiBzbHVnaWZ5KG5hbWUpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQcm90b2NvbChwYXRoOiBzdHJpbmcpIHtcbiAgdHJ5IHtcbiAgICBjb25zdCB1cmwgPSBuZXcgVVJMKHBhdGgpXG4gICAgY29uc3QgcHJvdG9jb2wgPSB1cmwucHJvdG9jb2wucmVwbGFjZShcIjpcIiwgXCJcIilcblxuICAgIC8vIEhhbmRsZSBXaW5kb3dzIGRyaXZlIGxldHRlcnNcbiAgICBpZiAocHJvdG9jb2wubGVuZ3RoIDwgMikge1xuICAgICAgcmV0dXJuIFwiZmlsZVwiXG4gICAgfVxuXG4gICAgcmV0dXJuIHByb3RvY29sXG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBcImZpbGVcIlxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRGb3JtYXQoZmlsZW5hbWU/OiBzdHJpbmcpIHtcbiAgcmV0dXJuIGZpbGVuYW1lPy5zcGxpdChcIi5cIikuc2xpY2UoLTEpWzBdPy50b0xvd2VyQ2FzZSgpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRGaWxlbmFtZShwYXRoOiBzdHJpbmcpIHtcbiAgY29uc3QgaXNSZW1vdGUgPSBpc1JlbW90ZVBhdGgocGF0aClcblxuICBpZiAoaXNSZW1vdGUpIHtcbiAgICBjb25zdCBwYXRobmFtZSA9IG5ldyBVUkwocGF0aCkucGF0aG5hbWVcbiAgICBjb25zdCBmaWxlbmFtZSA9IHBhdGhuYW1lLnNwbGl0KFwiL1wiKS5zbGljZSgtMSlbMF1cbiAgICByZXR1cm4gZmlsZW5hbWU/LmluY2x1ZGVzKFwiLlwiKSA/IGZpbGVuYW1lIDogdW5kZWZpbmVkXG4gIH1cblxuICBpZiAoIW5vZGUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJGaWxlIHN5c3RlbSBpcyBub3Qgc3VwcG9ydGVkIGluIHRoaXMgZW52aXJvbm1lbnRcIilcbiAgfVxuXG4gIGNvbnN0IHJlc29sdmVkUGF0aCA9IG5vZGUucGF0aC5yZXNvbHZlKHBhdGgpXG4gIGNvbnN0IGZpbGVuYW1lID0gbm9kZS5wYXRoLnBhcnNlKHJlc29sdmVkUGF0aCkuYmFzZVxuICByZXR1cm4gZmlsZW5hbWU/LmluY2x1ZGVzKFwiLlwiKSA/IGZpbGVuYW1lIDogdW5kZWZpbmVkXG59XG4iXX0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import { describe, expect, it } from "vitest";
|
|
2
|
+
import { getFilename, isRemotePath } from "./path.js";
|
|
3
|
+
describe("isRemotePath", () => {
|
|
4
|
+
it.each([
|
|
5
|
+
{
|
|
6
|
+
description: "http URL",
|
|
7
|
+
path: "http://example.com/path/to/file.txt",
|
|
8
|
+
isRemote: true,
|
|
9
|
+
},
|
|
10
|
+
{
|
|
11
|
+
description: "https URL",
|
|
12
|
+
path: "https://example.com/path/to/file.txt",
|
|
13
|
+
isRemote: true,
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
description: "ftp URL",
|
|
17
|
+
path: "ftp://example.com/path/to/file.txt",
|
|
18
|
+
isRemote: true,
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
description: "file URL",
|
|
22
|
+
path: "file:///path/to/file.txt",
|
|
23
|
+
isRemote: false,
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
description: "absolute path",
|
|
27
|
+
path: "/path/to/file.txt",
|
|
28
|
+
isRemote: false,
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
description: "relative path",
|
|
32
|
+
path: "path/to/file.txt",
|
|
33
|
+
isRemote: false,
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
description: "current directory path",
|
|
37
|
+
path: "./file.txt",
|
|
38
|
+
isRemote: false,
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
description: "parent directory path",
|
|
42
|
+
path: "../file.txt",
|
|
43
|
+
isRemote: false,
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
description: "empty string",
|
|
47
|
+
path: "",
|
|
48
|
+
isRemote: false,
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
// new URL considers this to be a valid URL
|
|
52
|
+
description: "protocol without slashes",
|
|
53
|
+
path: "http:example.com",
|
|
54
|
+
isRemote: true,
|
|
55
|
+
},
|
|
56
|
+
])("$description", ({ path, isRemote }) => {
|
|
57
|
+
expect(isRemotePath(path)).toBe(isRemote);
|
|
58
|
+
});
|
|
59
|
+
});
|
|
60
|
+
describe("getFilename", () => {
|
|
61
|
+
it.each([
|
|
62
|
+
{
|
|
63
|
+
description: "simple filename",
|
|
64
|
+
path: "file.txt",
|
|
65
|
+
filename: "file.txt",
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
description: "directory path with filename",
|
|
69
|
+
path: "some/path/to/file.txt",
|
|
70
|
+
filename: "file.txt",
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
description: "remote HTTP URL",
|
|
74
|
+
path: "http://example.com/path/to/file.txt",
|
|
75
|
+
filename: "file.txt",
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
description: "remote HTTPS URL",
|
|
79
|
+
path: "https://example.com/path/to/file.txt",
|
|
80
|
+
filename: "file.txt",
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
description: "URL with query parameters",
|
|
84
|
+
path: "https://example.com/path/to/file.txt?query=param",
|
|
85
|
+
filename: "file.txt",
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
description: "URL with hash",
|
|
89
|
+
path: "https://example.com/path/to/file.txt#section",
|
|
90
|
+
filename: "file.txt",
|
|
91
|
+
},
|
|
92
|
+
{
|
|
93
|
+
description: "URL with query and hash",
|
|
94
|
+
path: "https://example.com/path/to/file.txt?query=param#section",
|
|
95
|
+
filename: "file.txt",
|
|
96
|
+
},
|
|
97
|
+
{
|
|
98
|
+
description: "URL with no filename",
|
|
99
|
+
path: "https://example.com/path/",
|
|
100
|
+
filename: undefined,
|
|
101
|
+
},
|
|
102
|
+
{
|
|
103
|
+
description: "local path with no filename",
|
|
104
|
+
path: "some/path/",
|
|
105
|
+
filename: undefined,
|
|
106
|
+
},
|
|
107
|
+
])("$description", ({ path, filename }) => {
|
|
108
|
+
expect(getFilename(path)).toEqual(filename);
|
|
109
|
+
});
|
|
110
|
+
});
|
|
111
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGF0aC5zcGVjLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vcGF0aC9wYXRoLnNwZWMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLE1BQU0sUUFBUSxDQUFBO0FBQzdDLE9BQU8sRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLE1BQU0sV0FBVyxDQUFBO0FBRXJELFFBQVEsQ0FBQyxjQUFjLEVBQUUsR0FBRyxFQUFFO0lBQzVCLEVBQUUsQ0FBQyxJQUFJLENBQUM7UUFDTjtZQUNFLFdBQVcsRUFBRSxVQUFVO1lBQ3ZCLElBQUksRUFBRSxxQ0FBcUM7WUFDM0MsUUFBUSxFQUFFLElBQUk7U0FDZjtRQUNEO1lBQ0UsV0FBVyxFQUFFLFdBQVc7WUFDeEIsSUFBSSxFQUFFLHNDQUFzQztZQUM1QyxRQUFRLEVBQUUsSUFBSTtTQUNmO1FBQ0Q7WUFDRSxXQUFXLEVBQUUsU0FBUztZQUN0QixJQUFJLEVBQUUsb0NBQW9DO1lBQzFDLFFBQVEsRUFBRSxJQUFJO1NBQ2Y7UUFDRDtZQUNFLFdBQVcsRUFBRSxVQUFVO1lBQ3ZCLElBQUksRUFBRSwwQkFBMEI7WUFDaEMsUUFBUSxFQUFFLEtBQUs7U0FDaEI7UUFDRDtZQUNFLFdBQVcsRUFBRSxlQUFlO1lBQzVCLElBQUksRUFBRSxtQkFBbUI7WUFDekIsUUFBUSxFQUFFLEtBQUs7U0FDaEI7UUFDRDtZQUNFLFdBQVcsRUFBRSxlQUFlO1lBQzVCLElBQUksRUFBRSxrQkFBa0I7WUFDeEIsUUFBUSxFQUFFLEtBQUs7U0FDaEI7UUFDRDtZQUNFLFdBQVcsRUFBRSx3QkFBd0I7WUFDckMsSUFBSSxFQUFFLFlBQVk7WUFDbEIsUUFBUSxFQUFFLEtBQUs7U0FDaEI7UUFDRDtZQUNFLFdBQVcsRUFBRSx1QkFBdUI7WUFDcEMsSUFBSSxFQUFFLGFBQWE7WUFDbkIsUUFBUSxFQUFFLEtBQUs7U0FDaEI7UUFDRDtZQUNFLFdBQVcsRUFBRSxjQUFjO1lBQzNCLElBQUksRUFBRSxFQUFFO1lBQ1IsUUFBUSxFQUFFLEtBQUs7U0FDaEI7UUFDRDtZQUNFLDJDQUEyQztZQUMzQyxXQUFXLEVBQUUsMEJBQTBCO1lBQ3ZDLElBQUksRUFBRSxrQkFBa0I7WUFDeEIsUUFBUSxFQUFFLElBQUk7U0FDZjtLQUNGLENBQUMsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFO1FBQ3hDLE1BQU0sQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUE7SUFDM0MsQ0FBQyxDQUFDLENBQUE7QUFDSixDQUFDLENBQUMsQ0FBQTtBQUVGLFFBQVEsQ0FBQyxhQUFhLEVBQUUsR0FBRyxFQUFFO0lBQzNCLEVBQUUsQ0FBQyxJQUFJLENBQUM7UUFDTjtZQUNFLFdBQVcsRUFBRSxpQkFBaUI7WUFDOUIsSUFBSSxFQUFFLFVBQVU7WUFDaEIsUUFBUSxFQUFFLFVBQVU7U0FDckI7UUFDRDtZQUNFLFdBQVcsRUFBRSw4QkFBOEI7WUFDM0MsSUFBSSxFQUFFLHVCQUF1QjtZQUM3QixRQUFRLEVBQUUsVUFBVTtTQUNyQjtRQUNEO1lBQ0UsV0FBVyxFQUFFLGlCQUFpQjtZQUM5QixJQUFJLEVBQUUscUNBQXFDO1lBQzNDLFFBQVEsRUFBRSxVQUFVO1NBQ3JCO1FBQ0Q7WUFDRSxXQUFXLEVBQUUsa0JBQWtCO1lBQy9CLElBQUksRUFBRSxzQ0FBc0M7WUFDNUMsUUFBUSxFQUFFLFVBQVU7U0FDckI7UUFDRDtZQUNFLFdBQVcsRUFBRSwyQkFBMkI7WUFDeEMsSUFBSSxFQUFFLGtEQUFrRDtZQUN4RCxRQUFRLEVBQUUsVUFBVTtTQUNyQjtRQUNEO1lBQ0UsV0FBVyxFQUFFLGVBQWU7WUFDNUIsSUFBSSxFQUFFLDhDQUE4QztZQUNwRCxRQUFRLEVBQUUsVUFBVTtTQUNyQjtRQUNEO1lBQ0UsV0FBVyxFQUFFLHlCQUF5QjtZQUN0QyxJQUFJLEVBQUUsMERBQTBEO1lBQ2hFLFFBQVEsRUFBRSxVQUFVO1NBQ3JCO1FBQ0Q7WUFDRSxXQUFXLEVBQUUsc0JBQXNCO1lBQ25DLElBQUksRUFBRSwyQkFBMkI7WUFDakMsUUFBUSxFQUFFLFNBQVM7U0FDcEI7UUFDRDtZQUNFLFdBQVcsRUFBRSw2QkFBNkI7WUFDMUMsSUFBSSxFQUFFLFlBQVk7WUFDbEIsUUFBUSxFQUFFLFNBQVM7U0FDcEI7S0FDRixDQUFDLENBQUMsY0FBYyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRTtRQUN4QyxNQUFNLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFBO0lBQzdDLENBQUMsQ0FBQyxDQUFBO0FBQ0osQ0FBQyxDQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBkZXNjcmliZSwgZXhwZWN0LCBpdCB9IGZyb20gXCJ2aXRlc3RcIlxuaW1wb3J0IHsgZ2V0RmlsZW5hbWUsIGlzUmVtb3RlUGF0aCB9IGZyb20gXCIuL3BhdGgudHNcIlxuXG5kZXNjcmliZShcImlzUmVtb3RlUGF0aFwiLCAoKSA9PiB7XG4gIGl0LmVhY2goW1xuICAgIHtcbiAgICAgIGRlc2NyaXB0aW9uOiBcImh0dHAgVVJMXCIsXG4gICAgICBwYXRoOiBcImh0dHA6Ly9leGFtcGxlLmNvbS9wYXRoL3RvL2ZpbGUudHh0XCIsXG4gICAgICBpc1JlbW90ZTogdHJ1ZSxcbiAgICB9LFxuICAgIHtcbiAgICAgIGRlc2NyaXB0aW9uOiBcImh0dHBzIFVSTFwiLFxuICAgICAgcGF0aDogXCJodHRwczovL2V4YW1wbGUuY29tL3BhdGgvdG8vZmlsZS50eHRcIixcbiAgICAgIGlzUmVtb3RlOiB0cnVlLFxuICAgIH0sXG4gICAge1xuICAgICAgZGVzY3JpcHRpb246IFwiZnRwIFVSTFwiLFxuICAgICAgcGF0aDogXCJmdHA6Ly9leGFtcGxlLmNvbS9wYXRoL3RvL2ZpbGUudHh0XCIsXG4gICAgICBpc1JlbW90ZTogdHJ1ZSxcbiAgICB9LFxuICAgIHtcbiAgICAgIGRlc2NyaXB0aW9uOiBcImZpbGUgVVJMXCIsXG4gICAgICBwYXRoOiBcImZpbGU6Ly8vcGF0aC90by9maWxlLnR4dFwiLFxuICAgICAgaXNSZW1vdGU6IGZhbHNlLFxuICAgIH0sXG4gICAge1xuICAgICAgZGVzY3JpcHRpb246IFwiYWJzb2x1dGUgcGF0aFwiLFxuICAgICAgcGF0aDogXCIvcGF0aC90by9maWxlLnR4dFwiLFxuICAgICAgaXNSZW1vdGU6IGZhbHNlLFxuICAgIH0sXG4gICAge1xuICAgICAgZGVzY3JpcHRpb246IFwicmVsYXRpdmUgcGF0aFwiLFxuICAgICAgcGF0aDogXCJwYXRoL3RvL2ZpbGUudHh0XCIsXG4gICAgICBpc1JlbW90ZTogZmFsc2UsXG4gICAgfSxcbiAgICB7XG4gICAgICBkZXNjcmlwdGlvbjogXCJjdXJyZW50IGRpcmVjdG9yeSBwYXRoXCIsXG4gICAgICBwYXRoOiBcIi4vZmlsZS50eHRcIixcbiAgICAgIGlzUmVtb3RlOiBmYWxzZSxcbiAgICB9LFxuICAgIHtcbiAgICAgIGRlc2NyaXB0aW9uOiBcInBhcmVudCBkaXJlY3RvcnkgcGF0aFwiLFxuICAgICAgcGF0aDogXCIuLi9maWxlLnR4dFwiLFxuICAgICAgaXNSZW1vdGU6IGZhbHNlLFxuICAgIH0sXG4gICAge1xuICAgICAgZGVzY3JpcHRpb246IFwiZW1wdHkgc3RyaW5nXCIsXG4gICAgICBwYXRoOiBcIlwiLFxuICAgICAgaXNSZW1vdGU6IGZhbHNlLFxuICAgIH0sXG4gICAge1xuICAgICAgLy8gbmV3IFVSTCBjb25zaWRlcnMgdGhpcyB0byBiZSBhIHZhbGlkIFVSTFxuICAgICAgZGVzY3JpcHRpb246IFwicHJvdG9jb2wgd2l0aG91dCBzbGFzaGVzXCIsXG4gICAgICBwYXRoOiBcImh0dHA6ZXhhbXBsZS5jb21cIixcbiAgICAgIGlzUmVtb3RlOiB0cnVlLFxuICAgIH0sXG4gIF0pKFwiJGRlc2NyaXB0aW9uXCIsICh7IHBhdGgsIGlzUmVtb3RlIH0pID0+IHtcbiAgICBleHBlY3QoaXNSZW1vdGVQYXRoKHBhdGgpKS50b0JlKGlzUmVtb3RlKVxuICB9KVxufSlcblxuZGVzY3JpYmUoXCJnZXRGaWxlbmFtZVwiLCAoKSA9PiB7XG4gIGl0LmVhY2goW1xuICAgIHtcbiAgICAgIGRlc2NyaXB0aW9uOiBcInNpbXBsZSBmaWxlbmFtZVwiLFxuICAgICAgcGF0aDogXCJmaWxlLnR4dFwiLFxuICAgICAgZmlsZW5hbWU6IFwiZmlsZS50eHRcIixcbiAgICB9LFxuICAgIHtcbiAgICAgIGRlc2NyaXB0aW9uOiBcImRpcmVjdG9yeSBwYXRoIHdpdGggZmlsZW5hbWVcIixcbiAgICAgIHBhdGg6IFwic29tZS9wYXRoL3RvL2ZpbGUudHh0XCIsXG4gICAgICBmaWxlbmFtZTogXCJmaWxlLnR4dFwiLFxuICAgIH0sXG4gICAge1xuICAgICAgZGVzY3JpcHRpb246IFwicmVtb3RlIEhUVFAgVVJMXCIsXG4gICAgICBwYXRoOiBcImh0dHA6Ly9leGFtcGxlLmNvbS9wYXRoL3RvL2ZpbGUudHh0XCIsXG4gICAgICBmaWxlbmFtZTogXCJmaWxlLnR4dFwiLFxuICAgIH0sXG4gICAge1xuICAgICAgZGVzY3JpcHRpb246IFwicmVtb3RlIEhUVFBTIFVSTFwiLFxuICAgICAgcGF0aDogXCJodHRwczovL2V4YW1wbGUuY29tL3BhdGgvdG8vZmlsZS50eHRcIixcbiAgICAgIGZpbGVuYW1lOiBcImZpbGUudHh0XCIsXG4gICAgfSxcbiAgICB7XG4gICAgICBkZXNjcmlwdGlvbjogXCJVUkwgd2l0aCBxdWVyeSBwYXJhbWV0ZXJzXCIsXG4gICAgICBwYXRoOiBcImh0dHBzOi8vZXhhbXBsZS5jb20vcGF0aC90by9maWxlLnR4dD9xdWVyeT1wYXJhbVwiLFxuICAgICAgZmlsZW5hbWU6IFwiZmlsZS50eHRcIixcbiAgICB9LFxuICAgIHtcbiAgICAgIGRlc2NyaXB0aW9uOiBcIlVSTCB3aXRoIGhhc2hcIixcbiAgICAgIHBhdGg6IFwiaHR0cHM6Ly9leGFtcGxlLmNvbS9wYXRoL3RvL2ZpbGUudHh0I3NlY3Rpb25cIixcbiAgICAgIGZpbGVuYW1lOiBcImZpbGUudHh0XCIsXG4gICAgfSxcbiAgICB7XG4gICAgICBkZXNjcmlwdGlvbjogXCJVUkwgd2l0aCBxdWVyeSBhbmQgaGFzaFwiLFxuICAgICAgcGF0aDogXCJodHRwczovL2V4YW1wbGUuY29tL3BhdGgvdG8vZmlsZS50eHQ/cXVlcnk9cGFyYW0jc2VjdGlvblwiLFxuICAgICAgZmlsZW5hbWU6IFwiZmlsZS50eHRcIixcbiAgICB9LFxuICAgIHtcbiAgICAgIGRlc2NyaXB0aW9uOiBcIlVSTCB3aXRoIG5vIGZpbGVuYW1lXCIsXG4gICAgICBwYXRoOiBcImh0dHBzOi8vZXhhbXBsZS5jb20vcGF0aC9cIixcbiAgICAgIGZpbGVuYW1lOiB1bmRlZmluZWQsXG4gICAgfSxcbiAgICB7XG4gICAgICBkZXNjcmlwdGlvbjogXCJsb2NhbCBwYXRoIHdpdGggbm8gZmlsZW5hbWVcIixcbiAgICAgIHBhdGg6IFwic29tZS9wYXRoL1wiLFxuICAgICAgZmlsZW5hbWU6IHVuZGVmaW5lZCxcbiAgICB9LFxuICBdKShcIiRkZXNjcmlwdGlvblwiLCAoeyBwYXRoLCBmaWxlbmFtZSB9KSA9PiB7XG4gICAgZXhwZWN0KGdldEZpbGVuYW1lKHBhdGgpKS50b0VxdWFsKGZpbGVuYW1lKVxuICB9KVxufSlcbiJdfQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { node } from "./node.ts";
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export { node } from "./node.js";
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9wbGF0Zm9ybS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sV0FBVyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHsgbm9kZSB9IGZyb20gXCIuL25vZGUudHNcIlxuIl19
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
export declare const node: {
|
|
2
|
+
fs: {
|
|
3
|
+
default: typeof import("node:fs/promises");
|
|
4
|
+
access(path: import("fs").PathLike, mode?: number): Promise<void>;
|
|
5
|
+
copyFile(src: import("fs").PathLike, dest: import("fs").PathLike, mode?: number): Promise<void>;
|
|
6
|
+
open(path: import("fs").PathLike, flags?: string | number, mode?: import("fs").Mode): Promise<import("fs/promises").FileHandle>;
|
|
7
|
+
rename(oldPath: import("fs").PathLike, newPath: import("fs").PathLike): Promise<void>;
|
|
8
|
+
truncate(path: import("fs").PathLike, len?: number): Promise<void>;
|
|
9
|
+
rmdir(path: import("fs").PathLike, options?: import("fs").RmDirOptions): Promise<void>;
|
|
10
|
+
rm(path: import("fs").PathLike, options?: import("fs").RmOptions): Promise<void>;
|
|
11
|
+
mkdir(path: import("fs").PathLike, options: import("fs").MakeDirectoryOptions & {
|
|
12
|
+
recursive: true;
|
|
13
|
+
}): Promise<string | undefined>;
|
|
14
|
+
mkdir(path: import("fs").PathLike, options?: import("fs").Mode | (import("fs").MakeDirectoryOptions & {
|
|
15
|
+
recursive?: false | undefined;
|
|
16
|
+
}) | null): Promise<void>;
|
|
17
|
+
mkdir(path: import("fs").PathLike, options?: import("fs").Mode | import("fs").MakeDirectoryOptions | null): Promise<string | undefined>;
|
|
18
|
+
readdir(path: import("fs").PathLike, options?: (import("fs").ObjectEncodingOptions & {
|
|
19
|
+
withFileTypes?: false | undefined;
|
|
20
|
+
recursive?: boolean | undefined;
|
|
21
|
+
}) | BufferEncoding | null): Promise<string[]>;
|
|
22
|
+
readdir(path: import("fs").PathLike, options: {
|
|
23
|
+
encoding: "buffer";
|
|
24
|
+
withFileTypes?: false | undefined;
|
|
25
|
+
recursive?: boolean | undefined;
|
|
26
|
+
} | "buffer"): Promise<Buffer[]>;
|
|
27
|
+
readdir(path: import("fs").PathLike, options?: (import("fs").ObjectEncodingOptions & {
|
|
28
|
+
withFileTypes?: false | undefined;
|
|
29
|
+
recursive?: boolean | undefined;
|
|
30
|
+
}) | BufferEncoding | null): Promise<string[] | Buffer[]>;
|
|
31
|
+
readdir(path: import("fs").PathLike, options: import("fs").ObjectEncodingOptions & {
|
|
32
|
+
withFileTypes: true;
|
|
33
|
+
recursive?: boolean | undefined;
|
|
34
|
+
}): Promise<import("fs").Dirent[]>;
|
|
35
|
+
readdir(path: import("fs").PathLike, options: {
|
|
36
|
+
encoding: "buffer";
|
|
37
|
+
withFileTypes: true;
|
|
38
|
+
recursive?: boolean | undefined;
|
|
39
|
+
}): Promise<import("fs").Dirent<Buffer>[]>;
|
|
40
|
+
readlink(path: import("fs").PathLike, options?: import("fs").ObjectEncodingOptions | BufferEncoding | null): Promise<string>;
|
|
41
|
+
readlink(path: import("fs").PathLike, options: import("fs").BufferEncodingOption): Promise<Buffer>;
|
|
42
|
+
readlink(path: import("fs").PathLike, options?: import("fs").ObjectEncodingOptions | string | null): Promise<string | Buffer>;
|
|
43
|
+
symlink(target: import("fs").PathLike, path: import("fs").PathLike, type?: string | null): Promise<void>;
|
|
44
|
+
lstat(path: import("fs").PathLike, opts?: import("fs").StatOptions & {
|
|
45
|
+
bigint?: false | undefined;
|
|
46
|
+
}): Promise<import("fs").Stats>;
|
|
47
|
+
lstat(path: import("fs").PathLike, opts: import("fs").StatOptions & {
|
|
48
|
+
bigint: true;
|
|
49
|
+
}): Promise<import("fs").BigIntStats>;
|
|
50
|
+
lstat(path: import("fs").PathLike, opts?: import("fs").StatOptions): Promise<import("fs").Stats | import("fs").BigIntStats>;
|
|
51
|
+
stat(path: import("fs").PathLike, opts?: import("fs").StatOptions & {
|
|
52
|
+
bigint?: false | undefined;
|
|
53
|
+
}): Promise<import("fs").Stats>;
|
|
54
|
+
stat(path: import("fs").PathLike, opts: import("fs").StatOptions & {
|
|
55
|
+
bigint: true;
|
|
56
|
+
}): Promise<import("fs").BigIntStats>;
|
|
57
|
+
stat(path: import("fs").PathLike, opts?: import("fs").StatOptions): Promise<import("fs").Stats | import("fs").BigIntStats>;
|
|
58
|
+
statfs(path: import("fs").PathLike, opts?: import("fs").StatFsOptions & {
|
|
59
|
+
bigint?: false | undefined;
|
|
60
|
+
}): Promise<import("fs").StatsFs>;
|
|
61
|
+
statfs(path: import("fs").PathLike, opts: import("fs").StatFsOptions & {
|
|
62
|
+
bigint: true;
|
|
63
|
+
}): Promise<import("fs").BigIntStatsFs>;
|
|
64
|
+
statfs(path: import("fs").PathLike, opts?: import("fs").StatFsOptions): Promise<import("fs").StatsFs | import("fs").BigIntStatsFs>;
|
|
65
|
+
link(existingPath: import("fs").PathLike, newPath: import("fs").PathLike): Promise<void>;
|
|
66
|
+
unlink(path: import("fs").PathLike): Promise<void>;
|
|
67
|
+
chmod(path: import("fs").PathLike, mode: import("fs").Mode): Promise<void>;
|
|
68
|
+
lchmod(path: import("fs").PathLike, mode: import("fs").Mode): Promise<void>;
|
|
69
|
+
lchown(path: import("fs").PathLike, uid: number, gid: number): Promise<void>;
|
|
70
|
+
lutimes(path: import("fs").PathLike, atime: import("fs").TimeLike, mtime: import("fs").TimeLike): Promise<void>;
|
|
71
|
+
chown(path: import("fs").PathLike, uid: number, gid: number): Promise<void>;
|
|
72
|
+
utimes(path: import("fs").PathLike, atime: import("fs").TimeLike, mtime: import("fs").TimeLike): Promise<void>;
|
|
73
|
+
realpath(path: import("fs").PathLike, options?: import("fs").ObjectEncodingOptions | BufferEncoding | null): Promise<string>;
|
|
74
|
+
realpath(path: import("fs").PathLike, options: import("fs").BufferEncodingOption): Promise<Buffer>;
|
|
75
|
+
realpath(path: import("fs").PathLike, options?: import("fs").ObjectEncodingOptions | BufferEncoding | null): Promise<string | Buffer>;
|
|
76
|
+
mkdtemp(prefix: string, options?: import("fs").ObjectEncodingOptions | BufferEncoding | null): Promise<string>;
|
|
77
|
+
mkdtemp(prefix: string, options: import("fs").BufferEncodingOption): Promise<Buffer>;
|
|
78
|
+
mkdtemp(prefix: string, options?: import("fs").ObjectEncodingOptions | BufferEncoding | null): Promise<string | Buffer>;
|
|
79
|
+
writeFile(file: import("fs").PathLike | import("fs/promises").FileHandle, data: string | NodeJS.ArrayBufferView | Iterable<string | NodeJS.ArrayBufferView> | AsyncIterable<string | NodeJS.ArrayBufferView> | import("stream"), options?: (import("fs").ObjectEncodingOptions & {
|
|
80
|
+
mode?: import("fs").Mode | undefined;
|
|
81
|
+
flag?: import("fs").OpenMode | undefined;
|
|
82
|
+
flush?: boolean | undefined;
|
|
83
|
+
} & import("events").Abortable) | BufferEncoding | null): Promise<void>;
|
|
84
|
+
appendFile(path: import("fs").PathLike | import("fs/promises").FileHandle, data: string | Uint8Array, options?: (import("fs").ObjectEncodingOptions & import("fs/promises").FlagAndOpenMode & {
|
|
85
|
+
flush?: boolean | undefined;
|
|
86
|
+
}) | BufferEncoding | null): Promise<void>;
|
|
87
|
+
readFile(path: import("fs").PathLike | import("fs/promises").FileHandle, options?: ({
|
|
88
|
+
encoding?: null | undefined;
|
|
89
|
+
flag?: import("fs").OpenMode | undefined;
|
|
90
|
+
} & import("events").Abortable) | null): Promise<Buffer>;
|
|
91
|
+
readFile(path: import("fs").PathLike | import("fs/promises").FileHandle, options: ({
|
|
92
|
+
encoding: BufferEncoding;
|
|
93
|
+
flag?: import("fs").OpenMode | undefined;
|
|
94
|
+
} & import("events").Abortable) | BufferEncoding): Promise<string>;
|
|
95
|
+
readFile(path: import("fs").PathLike | import("fs/promises").FileHandle, options?: (import("fs").ObjectEncodingOptions & import("events").Abortable & {
|
|
96
|
+
flag?: import("fs").OpenMode | undefined;
|
|
97
|
+
}) | BufferEncoding | null): Promise<string | Buffer>;
|
|
98
|
+
opendir(path: import("fs").PathLike, options?: import("fs").OpenDirOptions): Promise<import("fs").Dir>;
|
|
99
|
+
watch(filename: import("fs").PathLike, options: (import("fs").WatchOptions & {
|
|
100
|
+
encoding: "buffer";
|
|
101
|
+
}) | "buffer"): AsyncIterable<import("fs/promises").FileChangeInfo<Buffer>>;
|
|
102
|
+
watch(filename: import("fs").PathLike, options?: import("fs").WatchOptions | BufferEncoding): AsyncIterable<import("fs/promises").FileChangeInfo<string>>;
|
|
103
|
+
watch(filename: import("fs").PathLike, options: import("fs").WatchOptions | string): AsyncIterable<import("fs/promises").FileChangeInfo<string>> | AsyncIterable<import("fs/promises").FileChangeInfo<Buffer>>;
|
|
104
|
+
cp(source: string | URL, destination: string | URL, opts?: import("fs").CopyOptions): Promise<void>;
|
|
105
|
+
glob(pattern: string | readonly string[]): NodeJS.AsyncIterator<string>;
|
|
106
|
+
glob(pattern: string | readonly string[], options: import("fs").GlobOptionsWithFileTypes): NodeJS.AsyncIterator<import("fs").Dirent>;
|
|
107
|
+
glob(pattern: string | readonly string[], options: import("fs").GlobOptionsWithoutFileTypes): NodeJS.AsyncIterator<string>;
|
|
108
|
+
glob(pattern: string | readonly string[], options: import("fs").GlobOptions): NodeJS.AsyncIterator<import("fs").Dirent | string>;
|
|
109
|
+
constants: typeof import("fs").constants;
|
|
110
|
+
};
|
|
111
|
+
path: {
|
|
112
|
+
default: import("path").PlatformPath;
|
|
113
|
+
normalize(path: string): string;
|
|
114
|
+
join(...paths: string[]): string;
|
|
115
|
+
resolve(...paths: string[]): string;
|
|
116
|
+
matchesGlob(path: string, pattern: string): boolean;
|
|
117
|
+
isAbsolute(path: string): boolean;
|
|
118
|
+
relative(from: string, to: string): string;
|
|
119
|
+
dirname(path: string): string;
|
|
120
|
+
basename(path: string, suffix?: string): string;
|
|
121
|
+
extname(path: string): string;
|
|
122
|
+
sep: "\\" | "/";
|
|
123
|
+
delimiter: ";" | ":";
|
|
124
|
+
parse(path: string): import("path").ParsedPath;
|
|
125
|
+
format(pathObject: import("path").FormatInputPathObject): string;
|
|
126
|
+
toNamespacedPath(path: string): string;
|
|
127
|
+
posix: import("path").PlatformPath;
|
|
128
|
+
win32: import("path").PlatformPath;
|
|
129
|
+
};
|
|
130
|
+
} | undefined;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export const node = await loadNodeApis();
|
|
2
|
+
async function loadNodeApis() {
|
|
3
|
+
if (globalThis.process) {
|
|
4
|
+
const fs = await import("node:fs/promises");
|
|
5
|
+
const path = await import("node:path");
|
|
6
|
+
return { fs, path };
|
|
7
|
+
}
|
|
8
|
+
return undefined;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3BsYXRmb3JtL25vZGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxDQUFDLE1BQU0sSUFBSSxHQUFHLE1BQU0sWUFBWSxFQUFFLENBQUE7QUFFeEMsS0FBSyxVQUFVLFlBQVk7SUFDekIsSUFBSSxVQUFVLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDdkIsTUFBTSxFQUFFLEdBQUcsTUFBTSxNQUFNLENBQUMsa0JBQWtCLENBQUMsQ0FBQTtRQUMzQyxNQUFNLElBQUksR0FBRyxNQUFNLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQTtRQUN0QyxPQUFPLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxDQUFBO0lBQ3JCLENBQUM7SUFFRCxPQUFPLFNBQVMsQ0FBQTtBQUNsQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IG5vZGUgPSBhd2FpdCBsb2FkTm9kZUFwaXMoKVxuXG5hc3luYyBmdW5jdGlvbiBsb2FkTm9kZUFwaXMoKSB7XG4gIGlmIChnbG9iYWxUaGlzLnByb2Nlc3MpIHtcbiAgICBjb25zdCBmcyA9IGF3YWl0IGltcG9ydChcIm5vZGU6ZnMvcHJvbWlzZXNcIilcbiAgICBjb25zdCBwYXRoID0gYXdhaXQgaW1wb3J0KFwibm9kZTpwYXRoXCIpXG4gICAgcmV0dXJuIHsgZnMsIHBhdGggfVxuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZFxufVxuIl19
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { describe, expect, it } from "vitest";
|
|
2
|
+
import { node } from "./node.js";
|
|
3
|
+
describe("loadNodeApis", () => {
|
|
4
|
+
it("should return node APIs when running in Node.js environment", async () => {
|
|
5
|
+
expect(node).toBeDefined();
|
|
6
|
+
expect(node?.fs).toBeDefined();
|
|
7
|
+
expect(node?.path).toBeDefined();
|
|
8
|
+
});
|
|
9
|
+
it("should have fs.readFile function", async () => {
|
|
10
|
+
expect(typeof node?.fs.readFile).toBe("function");
|
|
11
|
+
});
|
|
12
|
+
it("should have path.join function", async () => {
|
|
13
|
+
expect(typeof node?.path.join).toBe("function");
|
|
14
|
+
});
|
|
15
|
+
});
|
|
16
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS5zcGVjLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vcGxhdGZvcm0vbm9kZS5zcGVjLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLFFBQVEsQ0FBQTtBQUM3QyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sV0FBVyxDQUFBO0FBRWhDLFFBQVEsQ0FBQyxjQUFjLEVBQUUsR0FBRyxFQUFFO0lBQzVCLEVBQUUsQ0FBQyw2REFBNkQsRUFBRSxLQUFLLElBQUksRUFBRTtRQUMzRSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUE7UUFDMUIsTUFBTSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQTtRQUM5QixNQUFNLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFBO0lBQ2xDLENBQUMsQ0FBQyxDQUFBO0lBRUYsRUFBRSxDQUFDLGtDQUFrQyxFQUFFLEtBQUssSUFBSSxFQUFFO1FBQ2hELE1BQU0sQ0FBQyxPQUFPLElBQUksRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFBO0lBQ25ELENBQUMsQ0FBQyxDQUFBO0lBRUYsRUFBRSxDQUFDLGdDQUFnQyxFQUFFLEtBQUssSUFBSSxFQUFFO1FBQzlDLE1BQU0sQ0FBQyxPQUFPLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFBO0lBQ2pELENBQUMsQ0FBQyxDQUFBO0FBQ0osQ0FBQyxDQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBkZXNjcmliZSwgZXhwZWN0LCBpdCB9IGZyb20gXCJ2aXRlc3RcIlxuaW1wb3J0IHsgbm9kZSB9IGZyb20gXCIuL25vZGUudHNcIlxuXG5kZXNjcmliZShcImxvYWROb2RlQXBpc1wiLCAoKSA9PiB7XG4gIGl0KFwic2hvdWxkIHJldHVybiBub2RlIEFQSXMgd2hlbiBydW5uaW5nIGluIE5vZGUuanMgZW52aXJvbm1lbnRcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGV4cGVjdChub2RlKS50b0JlRGVmaW5lZCgpXG4gICAgZXhwZWN0KG5vZGU/LmZzKS50b0JlRGVmaW5lZCgpXG4gICAgZXhwZWN0KG5vZGU/LnBhdGgpLnRvQmVEZWZpbmVkKClcbiAgfSlcblxuICBpdChcInNob3VsZCBoYXZlIGZzLnJlYWRGaWxlIGZ1bmN0aW9uXCIsIGFzeW5jICgpID0+IHtcbiAgICBleHBlY3QodHlwZW9mIG5vZGU/LmZzLnJlYWRGaWxlKS50b0JlKFwiZnVuY3Rpb25cIilcbiAgfSlcblxuICBpdChcInNob3VsZCBoYXZlIHBhdGguam9pbiBmdW5jdGlvblwiLCBhc3luYyAoKSA9PiB7XG4gICAgZXhwZWN0KHR5cGVvZiBub2RlPy5wYXRoLmpvaW4pLnRvQmUoXCJmdW5jdGlvblwiKVxuICB9KVxufSlcbiJdfQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|