@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,8 @@
|
|
|
1
|
+
import type { Descriptor } from "../descriptor/index.ts";
|
|
2
|
+
import type { Resource } from "./Resource.ts";
|
|
3
|
+
/**
|
|
4
|
+
* Assert a Resource descriptor (JSON Object) against its profile
|
|
5
|
+
*/
|
|
6
|
+
export declare function assertResource(source: Descriptor | Resource, options?: {
|
|
7
|
+
basepath?: string;
|
|
8
|
+
}): Promise<Resource>;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { validateResourceMetadata } from "./validate.js";
|
|
2
|
+
/**
|
|
3
|
+
* Assert a Resource descriptor (JSON Object) against its profile
|
|
4
|
+
*/
|
|
5
|
+
export async function assertResource(source, options) {
|
|
6
|
+
const report = await validateResourceMetadata(source, options);
|
|
7
|
+
if (!report.resource) {
|
|
8
|
+
throw new Error(`Resource "${JSON.stringify(source).slice(0, 100)}" is not valid`);
|
|
9
|
+
}
|
|
10
|
+
return report.resource;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXJ0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vcmVzb3VyY2UvYXNzZXJ0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUV4RDs7R0FFRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsY0FBYyxDQUNsQyxNQUE2QixFQUM3QixPQUVDO0lBRUQsTUFBTSxNQUFNLEdBQUcsTUFBTSx3QkFBd0IsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUE7SUFFOUQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNyQixNQUFNLElBQUksS0FBSyxDQUNiLGFBQWEsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FDbEUsQ0FBQTtJQUNILENBQUM7SUFFRCxPQUFPLE1BQU0sQ0FBQyxRQUFRLENBQUE7QUFDeEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRGVzY3JpcHRvciB9IGZyb20gXCIuLi9kZXNjcmlwdG9yL2luZGV4LnRzXCJcbmltcG9ydCB0eXBlIHsgUmVzb3VyY2UgfSBmcm9tIFwiLi9SZXNvdXJjZS50c1wiXG5pbXBvcnQgeyB2YWxpZGF0ZVJlc291cmNlTWV0YWRhdGEgfSBmcm9tIFwiLi92YWxpZGF0ZS50c1wiXG5cbi8qKlxuICogQXNzZXJ0IGEgUmVzb3VyY2UgZGVzY3JpcHRvciAoSlNPTiBPYmplY3QpIGFnYWluc3QgaXRzIHByb2ZpbGVcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFzc2VydFJlc291cmNlKFxuICBzb3VyY2U6IERlc2NyaXB0b3IgfCBSZXNvdXJjZSxcbiAgb3B0aW9ucz86IHtcbiAgICBiYXNlcGF0aD86IHN0cmluZ1xuICB9LFxuKSB7XG4gIGNvbnN0IHJlcG9ydCA9IGF3YWl0IHZhbGlkYXRlUmVzb3VyY2VNZXRhZGF0YShzb3VyY2UsIG9wdGlvbnMpXG5cbiAgaWYgKCFyZXBvcnQucmVzb3VyY2UpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgUmVzb3VyY2UgXCIke0pTT04uc3RyaW5naWZ5KHNvdXJjZSkuc2xpY2UoMCwgMTAwKX1cIiBpcyBub3QgdmFsaWRgLFxuICAgIClcbiAgfVxuXG4gIHJldHVybiByZXBvcnQucmVzb3VyY2Vcbn1cbiJdfQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { describe, expect, expectTypeOf, it } from "vitest";
|
|
2
|
+
import { assertResource } from "./assert.js";
|
|
3
|
+
describe("assertResource", () => {
|
|
4
|
+
it("returns typed resource when valid", async () => {
|
|
5
|
+
const descriptor = {
|
|
6
|
+
name: "example-resource",
|
|
7
|
+
path: "data.csv",
|
|
8
|
+
format: "csv",
|
|
9
|
+
encoding: "utf-8",
|
|
10
|
+
};
|
|
11
|
+
const resource = await assertResource(descriptor);
|
|
12
|
+
expectTypeOf(resource).toEqualTypeOf();
|
|
13
|
+
expect(resource).toEqual(descriptor);
|
|
14
|
+
});
|
|
15
|
+
it("throws Error when resource is invalid", async () => {
|
|
16
|
+
const invalidResource = {
|
|
17
|
+
name: 123,
|
|
18
|
+
path: true,
|
|
19
|
+
};
|
|
20
|
+
await expect(assertResource(invalidResource)).rejects.toThrow(Error);
|
|
21
|
+
});
|
|
22
|
+
});
|
|
23
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXJ0LnNwZWMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9yZXNvdXJjZS9hc3NlcnQuc3BlYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsRUFBRSxFQUFFLE1BQU0sUUFBUSxDQUFBO0FBRTNELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxhQUFhLENBQUE7QUFFNUMsUUFBUSxDQUFDLGdCQUFnQixFQUFFLEdBQUcsRUFBRTtJQUM5QixFQUFFLENBQUMsbUNBQW1DLEVBQUUsS0FBSyxJQUFJLEVBQUU7UUFDakQsTUFBTSxVQUFVLEdBQUc7WUFDakIsSUFBSSxFQUFFLGtCQUFrQjtZQUN4QixJQUFJLEVBQUUsVUFBVTtZQUNoQixNQUFNLEVBQUUsS0FBSztZQUNiLFFBQVEsRUFBRSxPQUFPO1NBQ2xCLENBQUE7UUFFRCxNQUFNLFFBQVEsR0FBRyxNQUFNLGNBQWMsQ0FBQyxVQUFVLENBQUMsQ0FBQTtRQUVqRCxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUMsYUFBYSxFQUFZLENBQUE7UUFDaEQsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQTtJQUN0QyxDQUFDLENBQUMsQ0FBQTtJQUVGLEVBQUUsQ0FBQyx1Q0FBdUMsRUFBRSxLQUFLLElBQUksRUFBRTtRQUNyRCxNQUFNLGVBQWUsR0FBRztZQUN0QixJQUFJLEVBQUUsR0FBRztZQUNULElBQUksRUFBRSxJQUFJO1NBQ1gsQ0FBQTtRQUVELE1BQU0sTUFBTSxDQUFDLGNBQWMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDdEUsQ0FBQyxDQUFDLENBQUE7QUFDSixDQUFDLENBQUMsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGRlc2NyaWJlLCBleHBlY3QsIGV4cGVjdFR5cGVPZiwgaXQgfSBmcm9tIFwidml0ZXN0XCJcbmltcG9ydCB0eXBlIHsgUmVzb3VyY2UgfSBmcm9tIFwiLi9SZXNvdXJjZS50c1wiXG5pbXBvcnQgeyBhc3NlcnRSZXNvdXJjZSB9IGZyb20gXCIuL2Fzc2VydC50c1wiXG5cbmRlc2NyaWJlKFwiYXNzZXJ0UmVzb3VyY2VcIiwgKCkgPT4ge1xuICBpdChcInJldHVybnMgdHlwZWQgcmVzb3VyY2Ugd2hlbiB2YWxpZFwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgZGVzY3JpcHRvciA9IHtcbiAgICAgIG5hbWU6IFwiZXhhbXBsZS1yZXNvdXJjZVwiLFxuICAgICAgcGF0aDogXCJkYXRhLmNzdlwiLFxuICAgICAgZm9ybWF0OiBcImNzdlwiLFxuICAgICAgZW5jb2Rpbmc6IFwidXRmLThcIixcbiAgICB9XG5cbiAgICBjb25zdCByZXNvdXJjZSA9IGF3YWl0IGFzc2VydFJlc291cmNlKGRlc2NyaXB0b3IpXG5cbiAgICBleHBlY3RUeXBlT2YocmVzb3VyY2UpLnRvRXF1YWxUeXBlT2Y8UmVzb3VyY2U+KClcbiAgICBleHBlY3QocmVzb3VyY2UpLnRvRXF1YWwoZGVzY3JpcHRvcilcbiAgfSlcblxuICBpdChcInRocm93cyBFcnJvciB3aGVuIHJlc291cmNlIGlzIGludmFsaWRcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGludmFsaWRSZXNvdXJjZSA9IHtcbiAgICAgIG5hbWU6IDEyMyxcbiAgICAgIHBhdGg6IHRydWUsXG4gICAgfVxuXG4gICAgYXdhaXQgZXhwZWN0KGFzc2VydFJlc291cmNlKGludmFsaWRSZXNvdXJjZSkpLnJlamVjdHMudG9UaHJvdyhFcnJvcilcbiAgfSlcbn0pXG4iXX0=
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { isDescriptor } from "../../descriptor/index.js";
|
|
2
|
+
import { convertDialectFromDescriptor } from "../../dialect/index.js";
|
|
3
|
+
import { isRemotePath, normalizePath } from "../../path/index.js";
|
|
4
|
+
import { convertSchemaFromDescriptor } from "../../schema/index.js";
|
|
5
|
+
export function convertResourceFromDescriptor(descriptor, options) {
|
|
6
|
+
descriptor = globalThis.structuredClone(descriptor);
|
|
7
|
+
convertProfile(descriptor);
|
|
8
|
+
convertUrl(descriptor);
|
|
9
|
+
convertType(descriptor);
|
|
10
|
+
convertPaths(descriptor, options);
|
|
11
|
+
convertDialect(descriptor);
|
|
12
|
+
convertSchema(descriptor);
|
|
13
|
+
return descriptor;
|
|
14
|
+
}
|
|
15
|
+
function convertProfile(descriptor) {
|
|
16
|
+
const remoteProfile = typeof descriptor.profile === "string" && isRemotePath(descriptor.profile)
|
|
17
|
+
? descriptor.profile
|
|
18
|
+
: undefined;
|
|
19
|
+
descriptor.$schema = descriptor.$schema ?? remoteProfile;
|
|
20
|
+
}
|
|
21
|
+
function convertUrl(descriptor) {
|
|
22
|
+
const url = descriptor.url;
|
|
23
|
+
if (!url) {
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
if (!descriptor.path) {
|
|
27
|
+
descriptor.path = descriptor.url;
|
|
28
|
+
descriptor.url = undefined;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
function convertType(descriptor) {
|
|
32
|
+
const type = descriptor.type;
|
|
33
|
+
if (!type) {
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
if (typeof type !== "string") {
|
|
37
|
+
descriptor.type = undefined;
|
|
38
|
+
console.warn(`Ignoring v2.0 incompatible resource type: ${type}`);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
function convertPaths(descriptor, options) {
|
|
42
|
+
const basepath = options?.basepath;
|
|
43
|
+
if (typeof descriptor.path === "string") {
|
|
44
|
+
descriptor.path = normalizePath(descriptor.path, { basepath });
|
|
45
|
+
}
|
|
46
|
+
if (Array.isArray(descriptor.path)) {
|
|
47
|
+
for (const [index, path] of descriptor.path.entries()) {
|
|
48
|
+
descriptor.path[index] = normalizePath(path, { basepath });
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
for (const name of ["dialect", "schema"]) {
|
|
52
|
+
if (typeof descriptor[name] === "string") {
|
|
53
|
+
descriptor[name] = normalizePath(descriptor[name], {
|
|
54
|
+
basepath,
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
function convertDialect(descriptor) {
|
|
60
|
+
if (isDescriptor(descriptor.dialect)) {
|
|
61
|
+
descriptor.dialect = convertDialectFromDescriptor(descriptor.dialect);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
function convertSchema(descriptor) {
|
|
65
|
+
if (isDescriptor(descriptor.schema)) {
|
|
66
|
+
descriptor.schema = convertSchemaFromDescriptor(descriptor.schema);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnJvbURlc2NyaXB0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9yZXNvdXJjZS9jb252ZXJ0L2Zyb21EZXNjcmlwdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQTtBQUV4RCxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQTtBQUNyRSxPQUFPLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxNQUFNLHFCQUFxQixDQUFBO0FBQ2pFLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLHVCQUF1QixDQUFBO0FBRW5FLE1BQU0sVUFBVSw2QkFBNkIsQ0FDM0MsVUFBc0IsRUFDdEIsT0FFQztJQUVELFVBQVUsR0FBRyxVQUFVLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxDQUFBO0lBRW5ELGNBQWMsQ0FBQyxVQUFVLENBQUMsQ0FBQTtJQUMxQixVQUFVLENBQUMsVUFBVSxDQUFDLENBQUE7SUFDdEIsV0FBVyxDQUFDLFVBQVUsQ0FBQyxDQUFBO0lBQ3ZCLFlBQVksQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUE7SUFFakMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxDQUFBO0lBQzFCLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQTtJQUV6QixPQUFPLFVBQVUsQ0FBQTtBQUNuQixDQUFDO0FBRUQsU0FBUyxjQUFjLENBQUMsVUFBc0I7SUFDNUMsTUFBTSxhQUFhLEdBQ2pCLE9BQU8sVUFBVSxDQUFDLE9BQU8sS0FBSyxRQUFRLElBQUksWUFBWSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUM7UUFDeEUsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxPQUFPO1FBQ3BCLENBQUMsQ0FBQyxTQUFTLENBQUE7SUFFZixVQUFVLENBQUMsT0FBTyxHQUFHLFVBQVUsQ0FBQyxPQUFPLElBQUksYUFBYSxDQUFBO0FBQzFELENBQUM7QUFFRCxTQUFTLFVBQVUsQ0FBQyxVQUFzQjtJQUN4QyxNQUFNLEdBQUcsR0FBRyxVQUFVLENBQUMsR0FBRyxDQUFBO0lBQzFCLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUNULE9BQU07SUFDUixDQUFDO0lBRUQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNyQixVQUFVLENBQUMsSUFBSSxHQUFHLFVBQVUsQ0FBQyxHQUFHLENBQUE7UUFDaEMsVUFBVSxDQUFDLEdBQUcsR0FBRyxTQUFTLENBQUE7SUFDNUIsQ0FBQztBQUNILENBQUM7QUFFRCxTQUFTLFdBQVcsQ0FBQyxVQUFzQjtJQUN6QyxNQUFNLElBQUksR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFBO0lBQzVCLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNWLE9BQU07SUFDUixDQUFDO0lBRUQsSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUM3QixVQUFVLENBQUMsSUFBSSxHQUFHLFNBQVMsQ0FBQTtRQUMzQixPQUFPLENBQUMsSUFBSSxDQUFDLDZDQUE2QyxJQUFJLEVBQUUsQ0FBQyxDQUFBO0lBQ25FLENBQUM7QUFDSCxDQUFDO0FBRUQsU0FBUyxZQUFZLENBQUMsVUFBc0IsRUFBRSxPQUErQjtJQUMzRSxNQUFNLFFBQVEsR0FBRyxPQUFPLEVBQUUsUUFBUSxDQUFBO0lBRWxDLElBQUksT0FBTyxVQUFVLENBQUMsSUFBSSxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQ3hDLFVBQVUsQ0FBQyxJQUFJLEdBQUcsYUFBYSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFBO0lBQ2hFLENBQUM7SUFFRCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDbkMsS0FBSyxNQUFNLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQztZQUN0RCxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLGFBQWEsQ0FBQyxJQUFJLEVBQUUsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFBO1FBQzVELENBQUM7SUFDSCxDQUFDO0lBRUQsS0FBSyxNQUFNLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQVUsRUFBRSxDQUFDO1FBQ2xELElBQUksT0FBTyxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDekMsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLGFBQWEsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQ2pELFFBQVE7YUFDVCxDQUFDLENBQUE7UUFDSixDQUFDO0lBQ0gsQ0FBQztBQUNILENBQUM7QUFFRCxTQUFTLGNBQWMsQ0FBQyxVQUFzQjtJQUM1QyxJQUFJLFlBQVksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUNyQyxVQUFVLENBQUMsT0FBTyxHQUFHLDRCQUE0QixDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQTtJQUN2RSxDQUFDO0FBQ0gsQ0FBQztBQUVELFNBQVMsYUFBYSxDQUFDLFVBQXNCO0lBQzNDLElBQUksWUFBWSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1FBQ3BDLFVBQVUsQ0FBQyxNQUFNLEdBQUcsMkJBQTJCLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBQ3BFLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNEZXNjcmlwdG9yIH0gZnJvbSBcIi4uLy4uL2Rlc2NyaXB0b3IvaW5kZXgudHNcIlxuaW1wb3J0IHR5cGUgeyBEZXNjcmlwdG9yIH0gZnJvbSBcIi4uLy4uL2Rlc2NyaXB0b3IvaW5kZXgudHNcIlxuaW1wb3J0IHsgY29udmVydERpYWxlY3RGcm9tRGVzY3JpcHRvciB9IGZyb20gXCIuLi8uLi9kaWFsZWN0L2luZGV4LnRzXCJcbmltcG9ydCB7IGlzUmVtb3RlUGF0aCwgbm9ybWFsaXplUGF0aCB9IGZyb20gXCIuLi8uLi9wYXRoL2luZGV4LnRzXCJcbmltcG9ydCB7IGNvbnZlcnRTY2hlbWFGcm9tRGVzY3JpcHRvciB9IGZyb20gXCIuLi8uLi9zY2hlbWEvaW5kZXgudHNcIlxuXG5leHBvcnQgZnVuY3Rpb24gY29udmVydFJlc291cmNlRnJvbURlc2NyaXB0b3IoXG4gIGRlc2NyaXB0b3I6IERlc2NyaXB0b3IsXG4gIG9wdGlvbnM/OiB7XG4gICAgYmFzZXBhdGg/OiBzdHJpbmdcbiAgfSxcbikge1xuICBkZXNjcmlwdG9yID0gZ2xvYmFsVGhpcy5zdHJ1Y3R1cmVkQ2xvbmUoZGVzY3JpcHRvcilcblxuICBjb252ZXJ0UHJvZmlsZShkZXNjcmlwdG9yKVxuICBjb252ZXJ0VXJsKGRlc2NyaXB0b3IpXG4gIGNvbnZlcnRUeXBlKGRlc2NyaXB0b3IpXG4gIGNvbnZlcnRQYXRocyhkZXNjcmlwdG9yLCBvcHRpb25zKVxuXG4gIGNvbnZlcnREaWFsZWN0KGRlc2NyaXB0b3IpXG4gIGNvbnZlcnRTY2hlbWEoZGVzY3JpcHRvcilcblxuICByZXR1cm4gZGVzY3JpcHRvclxufVxuXG5mdW5jdGlvbiBjb252ZXJ0UHJvZmlsZShkZXNjcmlwdG9yOiBEZXNjcmlwdG9yKSB7XG4gIGNvbnN0IHJlbW90ZVByb2ZpbGUgPVxuICAgIHR5cGVvZiBkZXNjcmlwdG9yLnByb2ZpbGUgPT09IFwic3RyaW5nXCIgJiYgaXNSZW1vdGVQYXRoKGRlc2NyaXB0b3IucHJvZmlsZSlcbiAgICAgID8gZGVzY3JpcHRvci5wcm9maWxlXG4gICAgICA6IHVuZGVmaW5lZFxuXG4gIGRlc2NyaXB0b3IuJHNjaGVtYSA9IGRlc2NyaXB0b3IuJHNjaGVtYSA/PyByZW1vdGVQcm9maWxlXG59XG5cbmZ1bmN0aW9uIGNvbnZlcnRVcmwoZGVzY3JpcHRvcjogRGVzY3JpcHRvcikge1xuICBjb25zdCB1cmwgPSBkZXNjcmlwdG9yLnVybFxuICBpZiAoIXVybCkge1xuICAgIHJldHVyblxuICB9XG5cbiAgaWYgKCFkZXNjcmlwdG9yLnBhdGgpIHtcbiAgICBkZXNjcmlwdG9yLnBhdGggPSBkZXNjcmlwdG9yLnVybFxuICAgIGRlc2NyaXB0b3IudXJsID0gdW5kZWZpbmVkXG4gIH1cbn1cblxuZnVuY3Rpb24gY29udmVydFR5cGUoZGVzY3JpcHRvcjogRGVzY3JpcHRvcikge1xuICBjb25zdCB0eXBlID0gZGVzY3JpcHRvci50eXBlXG4gIGlmICghdHlwZSkge1xuICAgIHJldHVyblxuICB9XG5cbiAgaWYgKHR5cGVvZiB0eXBlICE9PSBcInN0cmluZ1wiKSB7XG4gICAgZGVzY3JpcHRvci50eXBlID0gdW5kZWZpbmVkXG4gICAgY29uc29sZS53YXJuKGBJZ25vcmluZyB2Mi4wIGluY29tcGF0aWJsZSByZXNvdXJjZSB0eXBlOiAke3R5cGV9YClcbiAgfVxufVxuXG5mdW5jdGlvbiBjb252ZXJ0UGF0aHMoZGVzY3JpcHRvcjogRGVzY3JpcHRvciwgb3B0aW9ucz86IHsgYmFzZXBhdGg/OiBzdHJpbmcgfSkge1xuICBjb25zdCBiYXNlcGF0aCA9IG9wdGlvbnM/LmJhc2VwYXRoXG5cbiAgaWYgKHR5cGVvZiBkZXNjcmlwdG9yLnBhdGggPT09IFwic3RyaW5nXCIpIHtcbiAgICBkZXNjcmlwdG9yLnBhdGggPSBub3JtYWxpemVQYXRoKGRlc2NyaXB0b3IucGF0aCwgeyBiYXNlcGF0aCB9KVxuICB9XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkoZGVzY3JpcHRvci5wYXRoKSkge1xuICAgIGZvciAoY29uc3QgW2luZGV4LCBwYXRoXSBvZiBkZXNjcmlwdG9yLnBhdGguZW50cmllcygpKSB7XG4gICAgICBkZXNjcmlwdG9yLnBhdGhbaW5kZXhdID0gbm9ybWFsaXplUGF0aChwYXRoLCB7IGJhc2VwYXRoIH0pXG4gICAgfVxuICB9XG5cbiAgZm9yIChjb25zdCBuYW1lIG9mIFtcImRpYWxlY3RcIiwgXCJzY2hlbWFcIl0gYXMgY29uc3QpIHtcbiAgICBpZiAodHlwZW9mIGRlc2NyaXB0b3JbbmFtZV0gPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIGRlc2NyaXB0b3JbbmFtZV0gPSBub3JtYWxpemVQYXRoKGRlc2NyaXB0b3JbbmFtZV0sIHtcbiAgICAgICAgYmFzZXBhdGgsXG4gICAgICB9KVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjb252ZXJ0RGlhbGVjdChkZXNjcmlwdG9yOiBEZXNjcmlwdG9yKSB7XG4gIGlmIChpc0Rlc2NyaXB0b3IoZGVzY3JpcHRvci5kaWFsZWN0KSkge1xuICAgIGRlc2NyaXB0b3IuZGlhbGVjdCA9IGNvbnZlcnREaWFsZWN0RnJvbURlc2NyaXB0b3IoZGVzY3JpcHRvci5kaWFsZWN0KVxuICB9XG59XG5cbmZ1bmN0aW9uIGNvbnZlcnRTY2hlbWEoZGVzY3JpcHRvcjogRGVzY3JpcHRvcikge1xuICBpZiAoaXNEZXNjcmlwdG9yKGRlc2NyaXB0b3Iuc2NoZW1hKSkge1xuICAgIGRlc2NyaXB0b3Iuc2NoZW1hID0gY29udmVydFNjaGVtYUZyb21EZXNjcmlwdG9yKGRlc2NyaXB0b3Iuc2NoZW1hKVxuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { convertDialectToDescriptor } from "../../dialect/index.js";
|
|
2
|
+
import { denormalizePath } from "../../path/index.js";
|
|
3
|
+
import { convertSchemaToDescriptor } from "../../schema/index.js";
|
|
4
|
+
export function convertResourceToDescriptor(resource, options) {
|
|
5
|
+
resource = globalThis.structuredClone(resource);
|
|
6
|
+
convertPaths(resource, options);
|
|
7
|
+
const dialect = convertDialect(resource);
|
|
8
|
+
const schema = convertSchema(resource);
|
|
9
|
+
return { ...resource, dialect, schema };
|
|
10
|
+
}
|
|
11
|
+
function convertPaths(resource, options) {
|
|
12
|
+
const basepath = options?.basepath;
|
|
13
|
+
if (resource.path) {
|
|
14
|
+
resource.path = Array.isArray(resource.path)
|
|
15
|
+
? resource.path.map(path => denormalizePath(path, { basepath }))
|
|
16
|
+
: denormalizePath(resource.path, { basepath });
|
|
17
|
+
}
|
|
18
|
+
for (const name of ["dialect", "schema"]) {
|
|
19
|
+
if (typeof resource[name] === "string") {
|
|
20
|
+
resource[name] = denormalizePath(resource[name], { basepath });
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
function convertDialect(resource) {
|
|
25
|
+
if (!resource.dialect || typeof resource.dialect === "string") {
|
|
26
|
+
return resource.dialect;
|
|
27
|
+
}
|
|
28
|
+
return convertDialectToDescriptor(resource.dialect);
|
|
29
|
+
}
|
|
30
|
+
function convertSchema(resource) {
|
|
31
|
+
if (!resource.schema || typeof resource.schema === "string") {
|
|
32
|
+
return resource.schema;
|
|
33
|
+
}
|
|
34
|
+
return convertSchemaToDescriptor(resource.schema);
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9EZXNjcmlwdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vcmVzb3VyY2UvY29udmVydC90b0Rlc2NyaXB0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sd0JBQXdCLENBQUE7QUFDbkUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFBO0FBQ3JELE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHVCQUF1QixDQUFBO0FBR2pFLE1BQU0sVUFBVSwyQkFBMkIsQ0FDekMsUUFBa0IsRUFDbEIsT0FFQztJQUVELFFBQVEsR0FBRyxVQUFVLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxDQUFBO0lBRS9DLFlBQVksQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUE7SUFFL0IsTUFBTSxPQUFPLEdBQUcsY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFBO0lBQ3hDLE1BQU0sTUFBTSxHQUFHLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQTtJQUV0QyxPQUFPLEVBQUUsR0FBRyxRQUFRLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBZ0IsQ0FBQTtBQUN2RCxDQUFDO0FBRUQsU0FBUyxZQUFZLENBQ25CLFFBQWtCLEVBQ2xCLE9BRUM7SUFFRCxNQUFNLFFBQVEsR0FBRyxPQUFPLEVBQUUsUUFBUSxDQUFBO0lBRWxDLElBQUksUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2xCLFFBQVEsQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDO1lBQzFDLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO1lBQ2hFLENBQUMsQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUE7SUFDbEQsQ0FBQztJQUVELEtBQUssTUFBTSxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsUUFBUSxDQUFVLEVBQUUsQ0FBQztRQUNsRCxJQUFJLE9BQU8sUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQ3ZDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxlQUFlLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQTtRQUNoRSxDQUFDO0lBQ0gsQ0FBQztBQUNILENBQUM7QUFFRCxTQUFTLGNBQWMsQ0FBQyxRQUFrQjtJQUN4QyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sSUFBSSxPQUFPLFFBQVEsQ0FBQyxPQUFPLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDOUQsT0FBTyxRQUFRLENBQUMsT0FBTyxDQUFBO0lBQ3pCLENBQUM7SUFFRCxPQUFPLDBCQUEwQixDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQTtBQUNyRCxDQUFDO0FBRUQsU0FBUyxhQUFhLENBQUMsUUFBa0I7SUFDdkMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLElBQUksT0FBTyxRQUFRLENBQUMsTUFBTSxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQzVELE9BQU8sUUFBUSxDQUFDLE1BQU0sQ0FBQTtJQUN4QixDQUFDO0lBRUQsT0FBTyx5QkFBeUIsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUE7QUFDbkQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRGVzY3JpcHRvciB9IGZyb20gXCIuLi8uLi9kZXNjcmlwdG9yL2luZGV4LnRzXCJcbmltcG9ydCB7IGNvbnZlcnREaWFsZWN0VG9EZXNjcmlwdG9yIH0gZnJvbSBcIi4uLy4uL2RpYWxlY3QvaW5kZXgudHNcIlxuaW1wb3J0IHsgZGVub3JtYWxpemVQYXRoIH0gZnJvbSBcIi4uLy4uL3BhdGgvaW5kZXgudHNcIlxuaW1wb3J0IHsgY29udmVydFNjaGVtYVRvRGVzY3JpcHRvciB9IGZyb20gXCIuLi8uLi9zY2hlbWEvaW5kZXgudHNcIlxuaW1wb3J0IHR5cGUgeyBSZXNvdXJjZSB9IGZyb20gXCIuLi9SZXNvdXJjZS50c1wiXG5cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0UmVzb3VyY2VUb0Rlc2NyaXB0b3IoXG4gIHJlc291cmNlOiBSZXNvdXJjZSxcbiAgb3B0aW9ucz86IHtcbiAgICBiYXNlcGF0aD86IHN0cmluZ1xuICB9LFxuKSB7XG4gIHJlc291cmNlID0gZ2xvYmFsVGhpcy5zdHJ1Y3R1cmVkQ2xvbmUocmVzb3VyY2UpXG5cbiAgY29udmVydFBhdGhzKHJlc291cmNlLCBvcHRpb25zKVxuXG4gIGNvbnN0IGRpYWxlY3QgPSBjb252ZXJ0RGlhbGVjdChyZXNvdXJjZSlcbiAgY29uc3Qgc2NoZW1hID0gY29udmVydFNjaGVtYShyZXNvdXJjZSlcblxuICByZXR1cm4geyAuLi5yZXNvdXJjZSwgZGlhbGVjdCwgc2NoZW1hIH0gYXMgRGVzY3JpcHRvclxufVxuXG5mdW5jdGlvbiBjb252ZXJ0UGF0aHMoXG4gIHJlc291cmNlOiBSZXNvdXJjZSxcbiAgb3B0aW9ucz86IHtcbiAgICBiYXNlcGF0aD86IHN0cmluZ1xuICB9LFxuKSB7XG4gIGNvbnN0IGJhc2VwYXRoID0gb3B0aW9ucz8uYmFzZXBhdGhcblxuICBpZiAocmVzb3VyY2UucGF0aCkge1xuICAgIHJlc291cmNlLnBhdGggPSBBcnJheS5pc0FycmF5KHJlc291cmNlLnBhdGgpXG4gICAgICA/IHJlc291cmNlLnBhdGgubWFwKHBhdGggPT4gZGVub3JtYWxpemVQYXRoKHBhdGgsIHsgYmFzZXBhdGggfSkpXG4gICAgICA6IGRlbm9ybWFsaXplUGF0aChyZXNvdXJjZS5wYXRoLCB7IGJhc2VwYXRoIH0pXG4gIH1cblxuICBmb3IgKGNvbnN0IG5hbWUgb2YgW1wiZGlhbGVjdFwiLCBcInNjaGVtYVwiXSBhcyBjb25zdCkge1xuICAgIGlmICh0eXBlb2YgcmVzb3VyY2VbbmFtZV0gPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIHJlc291cmNlW25hbWVdID0gZGVub3JtYWxpemVQYXRoKHJlc291cmNlW25hbWVdLCB7IGJhc2VwYXRoIH0pXG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNvbnZlcnREaWFsZWN0KHJlc291cmNlOiBSZXNvdXJjZSkge1xuICBpZiAoIXJlc291cmNlLmRpYWxlY3QgfHwgdHlwZW9mIHJlc291cmNlLmRpYWxlY3QgPT09IFwic3RyaW5nXCIpIHtcbiAgICByZXR1cm4gcmVzb3VyY2UuZGlhbGVjdFxuICB9XG5cbiAgcmV0dXJuIGNvbnZlcnREaWFsZWN0VG9EZXNjcmlwdG9yKHJlc291cmNlLmRpYWxlY3QpXG59XG5cbmZ1bmN0aW9uIGNvbnZlcnRTY2hlbWEocmVzb3VyY2U6IFJlc291cmNlKSB7XG4gIGlmICghcmVzb3VyY2Uuc2NoZW1hIHx8IHR5cGVvZiByZXNvdXJjZS5zY2hlbWEgPT09IFwic3RyaW5nXCIpIHtcbiAgICByZXR1cm4gcmVzb3VyY2Uuc2NoZW1hXG4gIH1cblxuICByZXR1cm4gY29udmVydFNjaGVtYVRvRGVzY3JpcHRvcihyZXNvdXJjZS5zY2hlbWEpXG59XG4iXX0=
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { isRemotePath } from "../path/index.js";
|
|
2
|
+
export function isRemoteResource(resource) {
|
|
3
|
+
const path = Array.isArray(resource.path) ? resource.path[0] : resource.path;
|
|
4
|
+
return path ? isRemotePath(path) : false;
|
|
5
|
+
}
|
|
6
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3Jlc291cmNlL2hlbHBlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGtCQUFrQixDQUFBO0FBRy9DLE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxRQUFrQjtJQUNqRCxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQTtJQUM1RSxPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUE7QUFDMUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGlzUmVtb3RlUGF0aCB9IGZyb20gXCIuLi9wYXRoL2luZGV4LnRzXCJcbmltcG9ydCB0eXBlIHsgUmVzb3VyY2UgfSBmcm9tIFwiLi9SZXNvdXJjZS50c1wiXG5cbmV4cG9ydCBmdW5jdGlvbiBpc1JlbW90ZVJlc291cmNlKHJlc291cmNlOiBSZXNvdXJjZSkge1xuICBjb25zdCBwYXRoID0gQXJyYXkuaXNBcnJheShyZXNvdXJjZS5wYXRoKSA/IHJlc291cmNlLnBhdGhbMF0gOiByZXNvdXJjZS5wYXRoXG4gIHJldHVybiBwYXRoID8gaXNSZW1vdGVQYXRoKHBhdGgpIDogZmFsc2Vcbn1cbiJdfQ==
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export type { Resource } from "./Resource.ts";
|
|
2
|
+
export { inferName, inferFormat } from "./infer.ts";
|
|
3
|
+
export { assertResource } from "./assert.ts";
|
|
4
|
+
export { loadResourceDescriptor } from "./load.ts";
|
|
5
|
+
export { saveResourceDescriptor } from "./save.ts";
|
|
6
|
+
export { validateResourceMetadata } from "./validate.ts";
|
|
7
|
+
export { convertResourceFromDescriptor } from "./convert/fromDescriptor.ts";
|
|
8
|
+
export { convertResourceToDescriptor } from "./convert/toDescriptor.ts";
|
|
9
|
+
export { isRemoteResource } from "./helpers.ts";
|
|
10
|
+
export type { Source } from "./Source.ts";
|
|
11
|
+
export type { License } from "./License.ts";
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export { inferName, inferFormat } from "./infer.js";
|
|
2
|
+
export { assertResource } from "./assert.js";
|
|
3
|
+
export { loadResourceDescriptor } from "./load.js";
|
|
4
|
+
export { saveResourceDescriptor } from "./save.js";
|
|
5
|
+
export { validateResourceMetadata } from "./validate.js";
|
|
6
|
+
export { convertResourceFromDescriptor } from "./convert/fromDescriptor.js";
|
|
7
|
+
export { convertResourceToDescriptor } from "./convert/toDescriptor.js";
|
|
8
|
+
export { isRemoteResource } from "./helpers.js";
|
|
9
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9yZXNvdXJjZS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxNQUFNLFlBQVksQ0FBQTtBQUNuRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sYUFBYSxDQUFBO0FBQzVDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLFdBQVcsQ0FBQTtBQUNsRCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxXQUFXLENBQUE7QUFDbEQsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sZUFBZSxDQUFBO0FBQ3hELE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLDZCQUE2QixDQUFBO0FBQzNFLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLDJCQUEyQixDQUFBO0FBQ3ZFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGNBQWMsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB0eXBlIHsgUmVzb3VyY2UgfSBmcm9tIFwiLi9SZXNvdXJjZS50c1wiXG5leHBvcnQgeyBpbmZlck5hbWUsIGluZmVyRm9ybWF0IH0gZnJvbSBcIi4vaW5mZXIudHNcIlxuZXhwb3J0IHsgYXNzZXJ0UmVzb3VyY2UgfSBmcm9tIFwiLi9hc3NlcnQudHNcIlxuZXhwb3J0IHsgbG9hZFJlc291cmNlRGVzY3JpcHRvciB9IGZyb20gXCIuL2xvYWQudHNcIlxuZXhwb3J0IHsgc2F2ZVJlc291cmNlRGVzY3JpcHRvciB9IGZyb20gXCIuL3NhdmUudHNcIlxuZXhwb3J0IHsgdmFsaWRhdGVSZXNvdXJjZU1ldGFkYXRhIH0gZnJvbSBcIi4vdmFsaWRhdGUudHNcIlxuZXhwb3J0IHsgY29udmVydFJlc291cmNlRnJvbURlc2NyaXB0b3IgfSBmcm9tIFwiLi9jb252ZXJ0L2Zyb21EZXNjcmlwdG9yLnRzXCJcbmV4cG9ydCB7IGNvbnZlcnRSZXNvdXJjZVRvRGVzY3JpcHRvciB9IGZyb20gXCIuL2NvbnZlcnQvdG9EZXNjcmlwdG9yLnRzXCJcbmV4cG9ydCB7IGlzUmVtb3RlUmVzb3VyY2UgfSBmcm9tIFwiLi9oZWxwZXJzLnRzXCJcbmV4cG9ydCB0eXBlIHsgU291cmNlIH0gZnJvbSBcIi4vU291cmNlLnRzXCJcbmV4cG9ydCB0eXBlIHsgTGljZW5zZSB9IGZyb20gXCIuL0xpY2Vuc2UudHNcIlxuIl19
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { getFilename, getFormat, getName, getProtocol } from "../path/index.js";
|
|
2
|
+
export function inferName(resource) {
|
|
3
|
+
let name = resource.name;
|
|
4
|
+
if (!name) {
|
|
5
|
+
const path = Array.isArray(resource.path) ? resource.path[0] : resource.path;
|
|
6
|
+
if (path) {
|
|
7
|
+
const filename = getFilename(path);
|
|
8
|
+
name = getName(filename);
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
return name ?? "resource";
|
|
12
|
+
}
|
|
13
|
+
export function inferFormat(resource) {
|
|
14
|
+
let format = resource.format;
|
|
15
|
+
if (!format) {
|
|
16
|
+
if (resource.path) {
|
|
17
|
+
const path = Array.isArray(resource.path)
|
|
18
|
+
? resource.path[0]
|
|
19
|
+
: resource.path;
|
|
20
|
+
if (path) {
|
|
21
|
+
const protocol = getProtocol(path);
|
|
22
|
+
if (DATABASE_PROTOCOLS.includes(protocol)) {
|
|
23
|
+
format = protocol;
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
const filename = getFilename(path);
|
|
27
|
+
format = getFormat(filename);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
return format;
|
|
33
|
+
}
|
|
34
|
+
const DATABASE_PROTOCOLS = ["postgresql", "mysql", "sqlite"];
|
|
35
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5mZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9yZXNvdXJjZS9pbmZlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sa0JBQWtCLENBQUE7QUFHL0UsTUFBTSxVQUFVLFNBQVMsQ0FBQyxRQUEyQjtJQUNuRCxJQUFJLElBQUksR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFBO0lBRXhCLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNWLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFBO1FBQzVFLElBQUksSUFBSSxFQUFFLENBQUM7WUFDVCxNQUFNLFFBQVEsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUE7WUFDbEMsSUFBSSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQTtRQUMxQixDQUFDO0lBQ0gsQ0FBQztJQUVELE9BQU8sSUFBSSxJQUFJLFVBQVUsQ0FBQTtBQUMzQixDQUFDO0FBRUQsTUFBTSxVQUFVLFdBQVcsQ0FBQyxRQUEyQjtJQUNyRCxJQUFJLE1BQU0sR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFBO0lBRTVCLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNaLElBQUksUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ2xCLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQztnQkFDdkMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO2dCQUNsQixDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQTtZQUVqQixJQUFJLElBQUksRUFBRSxDQUFDO2dCQUNULE1BQU0sUUFBUSxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQTtnQkFFbEMsSUFBSSxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztvQkFDMUMsTUFBTSxHQUFHLFFBQVEsQ0FBQTtnQkFDbkIsQ0FBQztxQkFBTSxDQUFDO29CQUNOLE1BQU0sUUFBUSxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQTtvQkFDbEMsTUFBTSxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQTtnQkFDOUIsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVELE9BQU8sTUFBTSxDQUFBO0FBQ2YsQ0FBQztBQUVELE1BQU0sa0JBQWtCLEdBQUcsQ0FBQyxZQUFZLEVBQUUsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZ2V0RmlsZW5hbWUsIGdldEZvcm1hdCwgZ2V0TmFtZSwgZ2V0UHJvdG9jb2wgfSBmcm9tIFwiLi4vcGF0aC9pbmRleC50c1wiXG5pbXBvcnQgdHlwZSB7IFJlc291cmNlIH0gZnJvbSBcIi4vUmVzb3VyY2UudHNcIlxuXG5leHBvcnQgZnVuY3Rpb24gaW5mZXJOYW1lKHJlc291cmNlOiBQYXJ0aWFsPFJlc291cmNlPikge1xuICBsZXQgbmFtZSA9IHJlc291cmNlLm5hbWVcblxuICBpZiAoIW5hbWUpIHtcbiAgICBjb25zdCBwYXRoID0gQXJyYXkuaXNBcnJheShyZXNvdXJjZS5wYXRoKSA/IHJlc291cmNlLnBhdGhbMF0gOiByZXNvdXJjZS5wYXRoXG4gICAgaWYgKHBhdGgpIHtcbiAgICAgIGNvbnN0IGZpbGVuYW1lID0gZ2V0RmlsZW5hbWUocGF0aClcbiAgICAgIG5hbWUgPSBnZXROYW1lKGZpbGVuYW1lKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuYW1lID8/IFwicmVzb3VyY2VcIlxufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5mZXJGb3JtYXQocmVzb3VyY2U6IFBhcnRpYWw8UmVzb3VyY2U+KSB7XG4gIGxldCBmb3JtYXQgPSByZXNvdXJjZS5mb3JtYXRcblxuICBpZiAoIWZvcm1hdCkge1xuICAgIGlmIChyZXNvdXJjZS5wYXRoKSB7XG4gICAgICBjb25zdCBwYXRoID0gQXJyYXkuaXNBcnJheShyZXNvdXJjZS5wYXRoKVxuICAgICAgICA/IHJlc291cmNlLnBhdGhbMF1cbiAgICAgICAgOiByZXNvdXJjZS5wYXRoXG5cbiAgICAgIGlmIChwYXRoKSB7XG4gICAgICAgIGNvbnN0IHByb3RvY29sID0gZ2V0UHJvdG9jb2wocGF0aClcblxuICAgICAgICBpZiAoREFUQUJBU0VfUFJPVE9DT0xTLmluY2x1ZGVzKHByb3RvY29sKSkge1xuICAgICAgICAgIGZvcm1hdCA9IHByb3RvY29sXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgZmlsZW5hbWUgPSBnZXRGaWxlbmFtZShwYXRoKVxuICAgICAgICAgIGZvcm1hdCA9IGdldEZvcm1hdChmaWxlbmFtZSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmb3JtYXRcbn1cblxuY29uc3QgREFUQUJBU0VfUFJPVE9DT0xTID0gW1wicG9zdGdyZXNxbFwiLCBcIm15c3FsXCIsIFwic3FsaXRlXCJdXG4iXX0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import { describe, expect, it } from "vitest";
|
|
2
|
+
import { inferFormat, inferName } from "./infer.js";
|
|
3
|
+
describe("inferName", () => {
|
|
4
|
+
it("returns existing name when provided", () => {
|
|
5
|
+
const resource = { name: "existing-name" };
|
|
6
|
+
expect(inferName(resource)).toBe("existing-name");
|
|
7
|
+
});
|
|
8
|
+
it("infers name from single string path", () => {
|
|
9
|
+
const resource = { path: "/data/users.csv" };
|
|
10
|
+
expect(inferName(resource)).toBe("users");
|
|
11
|
+
});
|
|
12
|
+
it("infers name from first path in array", () => {
|
|
13
|
+
const resource = { path: ["/data/users.csv", "/data/backup.csv"] };
|
|
14
|
+
expect(inferName(resource)).toBe("users");
|
|
15
|
+
});
|
|
16
|
+
it("infers name from URL path", () => {
|
|
17
|
+
const resource = { path: "https://example.com/data/products.json" };
|
|
18
|
+
expect(inferName(resource)).toBe("products");
|
|
19
|
+
});
|
|
20
|
+
it("returns default name when no path or name", () => {
|
|
21
|
+
const resource = {};
|
|
22
|
+
expect(inferName(resource)).toBe("resource");
|
|
23
|
+
});
|
|
24
|
+
it("returns default name when path has no filename", () => {
|
|
25
|
+
const resource = { path: "/data/folder/" };
|
|
26
|
+
expect(inferName(resource)).toBe("resource");
|
|
27
|
+
});
|
|
28
|
+
it("handles complex filename with multiple dots", () => {
|
|
29
|
+
const resource = { path: "/data/file.backup.csv" };
|
|
30
|
+
expect(inferName(resource)).toBe("file");
|
|
31
|
+
});
|
|
32
|
+
it("slugifies filename with spaces and special characters", () => {
|
|
33
|
+
const resource = { path: "/data/My Data File!.csv" };
|
|
34
|
+
expect(inferName(resource)).toBe("my-data-file");
|
|
35
|
+
});
|
|
36
|
+
});
|
|
37
|
+
describe("inferFormat", () => {
|
|
38
|
+
it("returns existing format when provided", () => {
|
|
39
|
+
const resource = { format: "json" };
|
|
40
|
+
expect(inferFormat(resource)).toBe("json");
|
|
41
|
+
});
|
|
42
|
+
it("infers format from single string path", () => {
|
|
43
|
+
const resource = { path: "/data/users.csv" };
|
|
44
|
+
expect(inferFormat(resource)).toBe("csv");
|
|
45
|
+
});
|
|
46
|
+
it("infers format from first path in array", () => {
|
|
47
|
+
const resource = { path: ["/data/users.xlsx", "/data/backup.csv"] };
|
|
48
|
+
expect(inferFormat(resource)).toBe("xlsx");
|
|
49
|
+
});
|
|
50
|
+
it("infers format from URL path", () => {
|
|
51
|
+
const resource = { path: "https://example.com/data/products.json" };
|
|
52
|
+
expect(inferFormat(resource)).toBe("json");
|
|
53
|
+
});
|
|
54
|
+
it("returns lowercase format", () => {
|
|
55
|
+
const resource = { path: "/data/file.CSV" };
|
|
56
|
+
expect(inferFormat(resource)).toBe("csv");
|
|
57
|
+
});
|
|
58
|
+
it("handles multiple extensions", () => {
|
|
59
|
+
const resource = { path: "/data/file.tar.gz" };
|
|
60
|
+
expect(inferFormat(resource)).toBe("gz");
|
|
61
|
+
});
|
|
62
|
+
it("returns undefined when no path", () => {
|
|
63
|
+
const resource = {};
|
|
64
|
+
expect(inferFormat(resource)).toBeUndefined();
|
|
65
|
+
});
|
|
66
|
+
it("returns undefined when path has no extension", () => {
|
|
67
|
+
const resource = { path: "/data/file" };
|
|
68
|
+
expect(inferFormat(resource)).toBeUndefined();
|
|
69
|
+
});
|
|
70
|
+
it("returns undefined when filename cannot be determined", () => {
|
|
71
|
+
const resource = { path: "/data/folder/" };
|
|
72
|
+
expect(inferFormat(resource)).toBeUndefined();
|
|
73
|
+
});
|
|
74
|
+
it("infers postgresql protocol from connection string", () => {
|
|
75
|
+
const resource = {
|
|
76
|
+
path: "postgresql://user:password@localhost:5432/database",
|
|
77
|
+
};
|
|
78
|
+
expect(inferFormat(resource)).toBe("postgresql");
|
|
79
|
+
});
|
|
80
|
+
it("infers mysql protocol from connection string", () => {
|
|
81
|
+
const resource = { path: "mysql://user:password@localhost:3306/database" };
|
|
82
|
+
expect(inferFormat(resource)).toBe("mysql");
|
|
83
|
+
});
|
|
84
|
+
it("infers sqlite protocol from file path", () => {
|
|
85
|
+
const resource = { path: "sqlite:///path/to/database.db" };
|
|
86
|
+
expect(inferFormat(resource)).toBe("sqlite");
|
|
87
|
+
});
|
|
88
|
+
it("infers sqlite protocol with file scheme", () => {
|
|
89
|
+
const resource = { path: "sqlite://localhost/path/to/database.db" };
|
|
90
|
+
expect(inferFormat(resource)).toBe("sqlite");
|
|
91
|
+
});
|
|
92
|
+
it("handles postgres protocol with ssl parameters", () => {
|
|
93
|
+
const resource = {
|
|
94
|
+
path: "postgresql://user:pass@host:5432/db?sslmode=require",
|
|
95
|
+
};
|
|
96
|
+
expect(inferFormat(resource)).toBe("postgresql");
|
|
97
|
+
});
|
|
98
|
+
it("handles mysql protocol with options", () => {
|
|
99
|
+
const resource = { path: "mysql://user:pass@host:3306/db?charset=utf8" };
|
|
100
|
+
expect(inferFormat(resource)).toBe("mysql");
|
|
101
|
+
});
|
|
102
|
+
});
|
|
103
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5mZXIuc3BlYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3Jlc291cmNlL2luZmVyLnNwZWMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLE1BQU0sUUFBUSxDQUFBO0FBQzdDLE9BQU8sRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLE1BQU0sWUFBWSxDQUFBO0FBRW5ELFFBQVEsQ0FBQyxXQUFXLEVBQUUsR0FBRyxFQUFFO0lBQ3pCLEVBQUUsQ0FBQyxxQ0FBcUMsRUFBRSxHQUFHLEVBQUU7UUFDN0MsTUFBTSxRQUFRLEdBQUcsRUFBRSxJQUFJLEVBQUUsZUFBZSxFQUFFLENBQUE7UUFDMUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQTtJQUNuRCxDQUFDLENBQUMsQ0FBQTtJQUVGLEVBQUUsQ0FBQyxxQ0FBcUMsRUFBRSxHQUFHLEVBQUU7UUFDN0MsTUFBTSxRQUFRLEdBQUcsRUFBRSxJQUFJLEVBQUUsaUJBQWlCLEVBQUUsQ0FBQTtRQUM1QyxNQUFNLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBQzNDLENBQUMsQ0FBQyxDQUFBO0lBRUYsRUFBRSxDQUFDLHNDQUFzQyxFQUFFLEdBQUcsRUFBRTtRQUM5QyxNQUFNLFFBQVEsR0FBRyxFQUFFLElBQUksRUFBRSxDQUFDLGlCQUFpQixFQUFFLGtCQUFrQixDQUFDLEVBQUUsQ0FBQTtRQUNsRSxNQUFNLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBQzNDLENBQUMsQ0FBQyxDQUFBO0lBRUYsRUFBRSxDQUFDLDJCQUEyQixFQUFFLEdBQUcsRUFBRTtRQUNuQyxNQUFNLFFBQVEsR0FBRyxFQUFFLElBQUks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dGVudCI6WyJpbXBvcnQgeyBkZXNjcmliZSwgZXhwZWN0LCBpdCB9IGZyb20gXCJ2aXRlc3RcIlxuaW1wb3J0IHsgaW5mZXJGb3JtYXQsIGluZmVyTmFtZSB9IGZyb20gXCIuL2luZmVyLnRzXCJcblxuZGVzY3JpYmUoXCJpbmZlck5hbWVcIiwgKCkgPT4ge1xuICBpdChcInJldHVybnMgZXhpc3RpbmcgbmFtZSB3aGVuIHByb3ZpZGVkXCIsICgpID0+IHtcbiAgICBjb25zdCByZXNvdXJjZSA9IHsgbmFtZTogXCJleGlzdGluZy1uYW1lXCIgfVxuICAgIGV4cGVjdChpbmZlck5hbWUocmVzb3VyY2UpKS50b0JlKFwiZXhpc3RpbmctbmFtZVwiKVxuICB9KVxuXG4gIGl0KFwiaW5mZXJzIG5hbWUgZnJvbSBzaW5nbGUgc3RyaW5nIHBhdGhcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHJlc291cmNlID0geyBwYXRoOiBcIi9kYXRhL3VzZXJzLmNzdlwiIH1cbiAgICBleHBlY3QoaW5mZXJOYW1lKHJlc291cmNlKSkudG9CZShcInVzZXJzXCIpXG4gIH0pXG5cbiAgaXQoXCJpbmZlcnMgbmFtZSBmcm9tIGZpcnN0IHBhdGggaW4gYXJyYXlcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHJlc291cmNlID0geyBwYXRoOiBbXCIvZGF0YS91c2Vycy5jc3ZcIiwgXCIvZGF0YS9iYWNrdXAuY3N2XCJdIH1cbiAgICBleHBlY3QoaW5mZXJOYW1lKHJlc291cmNlKSkudG9CZShcInVzZXJzXCIpXG4gIH0pXG5cbiAgaXQoXCJpbmZlcnMgbmFtZSBmcm9tIFVSTCBwYXRoXCIsICgpID0+IHtcbiAgICBjb25zdCByZXNvdXJjZSA9IHsgcGF0aDogXCJodHRwczovL2V4YW1wbGUuY29tL2RhdGEvcHJvZHVjdHMuanNvblwiIH1cbiAgICBleHBlY3QoaW5mZXJOYW1lKHJlc291cmNlKSkudG9CZShcInByb2R1Y3RzXCIpXG4gIH0pXG5cbiAgaXQoXCJyZXR1cm5zIGRlZmF1bHQgbmFtZSB3aGVuIG5vIHBhdGggb3IgbmFtZVwiLCAoKSA9PiB7XG4gICAgY29uc3QgcmVzb3VyY2UgPSB7fVxuICAgIGV4cGVjdChpbmZlck5hbWUocmVzb3VyY2UpKS50b0JlKFwicmVzb3VyY2VcIilcbiAgfSlcblxuICBpdChcInJldHVybnMgZGVmYXVsdCBuYW1lIHdoZW4gcGF0aCBoYXMgbm8gZmlsZW5hbWVcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHJlc291cmNlID0geyBwYXRoOiBcIi9kYXRhL2ZvbGRlci9cIiB9XG4gICAgZXhwZWN0KGluZmVyTmFtZShyZXNvdXJjZSkpLnRvQmUoXCJyZXNvdXJjZVwiKVxuICB9KVxuXG4gIGl0KFwiaGFuZGxlcyBjb21wbGV4IGZpbGVuYW1lIHdpdGggbXVsdGlwbGUgZG90c1wiLCAoKSA9PiB7XG4gICAgY29uc3QgcmVzb3VyY2UgPSB7IHBhdGg6IFwiL2RhdGEvZmlsZS5iYWNrdXAuY3N2XCIgfVxuICAgIGV4cGVjdChpbmZlck5hbWUocmVzb3VyY2UpKS50b0JlKFwiZmlsZVwiKVxuICB9KVxuXG4gIGl0KFwic2x1Z2lmaWVzIGZpbGVuYW1lIHdpdGggc3BhY2VzIGFuZCBzcGVjaWFsIGNoYXJhY3RlcnNcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHJlc291cmNlID0geyBwYXRoOiBcIi9kYXRhL015IERhdGEgRmlsZSEuY3N2XCIgfVxuICAgIGV4cGVjdChpbmZlck5hbWUocmVzb3VyY2UpKS50b0JlKFwibXktZGF0YS1maWxlXCIpXG4gIH0pXG59KVxuXG5kZXNjcmliZShcImluZmVyRm9ybWF0XCIsICgpID0+IHtcbiAgaXQoXCJyZXR1cm5zIGV4aXN0aW5nIGZvcm1hdCB3aGVuIHByb3ZpZGVkXCIsICgpID0+IHtcbiAgICBjb25zdCByZXNvdXJjZSA9IHsgZm9ybWF0OiBcImpzb25cIiB9XG4gICAgZXhwZWN0KGluZmVyRm9ybWF0KHJlc291cmNlKSkudG9CZShcImpzb25cIilcbiAgfSlcblxuICBpdChcImluZmVycyBmb3JtYXQgZnJvbSBzaW5nbGUgc3RyaW5nIHBhdGhcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHJlc291cmNlID0geyBwYXRoOiBcIi9kYXRhL3VzZXJzLmNzdlwiIH1cbiAgICBleHBlY3QoaW5mZXJGb3JtYXQocmVzb3VyY2UpKS50b0JlKFwiY3N2XCIpXG4gIH0pXG5cbiAgaXQoXCJpbmZlcnMgZm9ybWF0IGZyb20gZmlyc3QgcGF0aCBpbiBhcnJheVwiLCAoKSA9PiB7XG4gICAgY29uc3QgcmVzb3VyY2UgPSB7IHBhdGg6IFtcIi9kYXRhL3VzZXJzLnhsc3hcIiwgXCIvZGF0YS9iYWNrdXAuY3N2XCJdIH1cbiAgICBleHBlY3QoaW5mZXJGb3JtYXQocmVzb3VyY2UpKS50b0JlKFwieGxzeFwiKVxuICB9KVxuXG4gIGl0KFwiaW5mZXJzIGZvcm1hdCBmcm9tIFVSTCBwYXRoXCIsICgpID0+IHtcbiAgICBjb25zdCByZXNvdXJjZSA9IHsgcGF0aDogXCJodHRwczovL2V4YW1wbGUuY29tL2RhdGEvcHJvZHVjdHMuanNvblwiIH1cbiAgICBleHBlY3QoaW5mZXJGb3JtYXQocmVzb3VyY2UpKS50b0JlKFwianNvblwiKVxuICB9KVxuXG4gIGl0KFwicmV0dXJucyBsb3dlcmNhc2UgZm9ybWF0XCIsICgpID0+IHtcbiAgICBjb25zdCByZXNvdXJjZSA9IHsgcGF0aDogXCIvZGF0YS9maWxlLkNTVlwiIH1cbiAgICBleHBlY3QoaW5mZXJGb3JtYXQocmVzb3VyY2UpKS50b0JlKFwiY3N2XCIpXG4gIH0pXG5cbiAgaXQoXCJoYW5kbGVzIG11bHRpcGxlIGV4dGVuc2lvbnNcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHJlc291cmNlID0geyBwYXRoOiBcIi9kYXRhL2ZpbGUudGFyLmd6XCIgfVxuICAgIGV4cGVjdChpbmZlckZvcm1hdChyZXNvdXJjZSkpLnRvQmUoXCJnelwiKVxuICB9KVxuXG4gIGl0KFwicmV0dXJucyB1bmRlZmluZWQgd2hlbiBubyBwYXRoXCIsICgpID0+IHtcbiAgICBjb25zdCByZXNvdXJjZSA9IHt9XG4gICAgZXhwZWN0KGluZmVyRm9ybWF0KHJlc291cmNlKSkudG9CZVVuZGVmaW5lZCgpXG4gIH0pXG5cbiAgaXQoXCJyZXR1cm5zIHVuZGVmaW5lZCB3aGVuIHBhdGggaGFzIG5vIGV4dGVuc2lvblwiLCAoKSA9PiB7XG4gICAgY29uc3QgcmVzb3VyY2UgPSB7IHBhdGg6IFwiL2RhdGEvZmlsZVwiIH1cbiAgICBleHBlY3QoaW5mZXJGb3JtYXQocmVzb3VyY2UpKS50b0JlVW5kZWZpbmVkKClcbiAgfSlcblxuICBpdChcInJldHVybnMgdW5kZWZpbmVkIHdoZW4gZmlsZW5hbWUgY2Fubm90IGJlIGRldGVybWluZWRcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHJlc291cmNlID0geyBwYXRoOiBcIi9kYXRhL2ZvbGRlci9cIiB9XG4gICAgZXhwZWN0KGluZmVyRm9ybWF0KHJlc291cmNlKSkudG9CZVVuZGVmaW5lZCgpXG4gIH0pXG5cbiAgaXQoXCJpbmZlcnMgcG9zdGdyZXNxbCBwcm90b2NvbCBmcm9tIGNvbm5lY3Rpb24gc3RyaW5nXCIsICgpID0+IHtcbiAgICBjb25zdCByZXNvdXJjZSA9IHtcbiAgICAgIHBhdGg6IFwicG9zdGdyZXNxbDovL3VzZXI6cGFzc3dvcmRAbG9jYWxob3N0OjU0MzIvZGF0YWJhc2VcIixcbiAgICB9XG4gICAgZXhwZWN0KGluZmVyRm9ybWF0KHJlc291cmNlKSkudG9CZShcInBvc3RncmVzcWxcIilcbiAgfSlcblxuICBpdChcImluZmVycyBteXNxbCBwcm90b2NvbCBmcm9tIGNvbm5lY3Rpb24gc3RyaW5nXCIsICgpID0+IHtcbiAgICBjb25zdCByZXNvdXJjZSA9IHsgcGF0aDogXCJteXNxbDovL3VzZXI6cGFzc3dvcmRAbG9jYWxob3N0OjMzMDYvZGF0YWJhc2VcIiB9XG4gICAgZXhwZWN0KGluZmVyRm9ybWF0KHJlc291cmNlKSkudG9CZShcIm15c3FsXCIpXG4gIH0pXG5cbiAgaXQoXCJpbmZlcnMgc3FsaXRlIHByb3RvY29sIGZyb20gZmlsZSBwYXRoXCIsICgpID0+IHtcbiAgICBjb25zdCByZXNvdXJjZSA9IHsgcGF0aDogXCJzcWxpdGU6Ly8vcGF0aC90by9kYXRhYmFzZS5kYlwiIH1cbiAgICBleHBlY3QoaW5mZXJGb3JtYXQocmVzb3VyY2UpKS50b0JlKFwic3FsaXRlXCIpXG4gIH0pXG5cbiAgaXQoXCJpbmZlcnMgc3FsaXRlIHByb3RvY29sIHdpdGggZmlsZSBzY2hlbWVcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHJlc291cmNlID0geyBwYXRoOiBcInNxbGl0ZTovL2xvY2FsaG9zdC9wYXRoL3RvL2RhdGFiYXNlLmRiXCIgfVxuICAgIGV4cGVjdChpbmZlckZvcm1hdChyZXNvdXJjZSkpLnRvQmUoXCJzcWxpdGVcIilcbiAgfSlcblxuICBpdChcImhhbmRsZXMgcG9zdGdyZXMgcHJvdG9jb2wgd2l0aCBzc2wgcGFyYW1ldGVyc1wiLCAoKSA9PiB7XG4gICAgY29uc3QgcmVzb3VyY2UgPSB7XG4gICAgICBwYXRoOiBcInBvc3RncmVzcWw6Ly91c2VyOnBhc3NAaG9zdDo1NDMyL2RiP3NzbG1vZGU9cmVxdWlyZVwiLFxuICAgIH1cbiAgICBleHBlY3QoaW5mZXJGb3JtYXQocmVzb3VyY2UpKS50b0JlKFwicG9zdGdyZXNxbFwiKVxuICB9KVxuXG4gIGl0KFwiaGFuZGxlcyBteXNxbCBwcm90b2NvbCB3aXRoIG9wdGlvbnNcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHJlc291cmNlID0geyBwYXRoOiBcIm15c3FsOi8vdXNlcjpwYXNzQGhvc3Q6MzMwNi9kYj9jaGFyc2V0PXV0ZjhcIiB9XG4gICAgZXhwZWN0KGluZmVyRm9ybWF0KHJlc291cmNlKSkudG9CZShcIm15c3FsXCIpXG4gIH0pXG59KVxuIl19
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { loadDescriptor } from "../descriptor/index.js";
|
|
2
|
+
import { resolveBasepath } from "../path/index.js";
|
|
3
|
+
import { assertResource } from "./assert.js";
|
|
4
|
+
/**
|
|
5
|
+
* Load a Resource descriptor (JSON Object) from a file or URL
|
|
6
|
+
* Ensures the descriptor is valid against its profile
|
|
7
|
+
*/
|
|
8
|
+
export async function loadResourceDescriptor(path) {
|
|
9
|
+
const basepath = await resolveBasepath(path);
|
|
10
|
+
const descriptor = await loadDescriptor(path);
|
|
11
|
+
const resource = await assertResource(descriptor, { basepath });
|
|
12
|
+
return resource;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3Jlc291cmNlL2xvYWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHdCQUF3QixDQUFBO0FBQ3ZELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQTtBQUNsRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sYUFBYSxDQUFBO0FBRTVDOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsc0JBQXNCLENBQUMsSUFBWTtJQUN2RCxNQUFNLFFBQVEsR0FBRyxNQUFNLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQTtJQUM1QyxNQUFNLFVBQVUsR0FBRyxNQUFNLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQTtJQUM3QyxNQUFNLFFBQVEsR0FBRyxNQUFNLGNBQWMsQ0FBQyxVQUFVLEVBQUUsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFBO0lBQy9ELE9BQU8sUUFBUSxDQUFBO0FBQ2pCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBsb2FkRGVzY3JpcHRvciB9IGZyb20gXCIuLi9kZXNjcmlwdG9yL2luZGV4LnRzXCJcbmltcG9ydCB7IHJlc29sdmVCYXNlcGF0aCB9IGZyb20gXCIuLi9wYXRoL2luZGV4LnRzXCJcbmltcG9ydCB7IGFzc2VydFJlc291cmNlIH0gZnJvbSBcIi4vYXNzZXJ0LnRzXCJcblxuLyoqXG4gKiBMb2FkIGEgUmVzb3VyY2UgZGVzY3JpcHRvciAoSlNPTiBPYmplY3QpIGZyb20gYSBmaWxlIG9yIFVSTFxuICogRW5zdXJlcyB0aGUgZGVzY3JpcHRvciBpcyB2YWxpZCBhZ2FpbnN0IGl0cyBwcm9maWxlXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsb2FkUmVzb3VyY2VEZXNjcmlwdG9yKHBhdGg6IHN0cmluZykge1xuICBjb25zdCBiYXNlcGF0aCA9IGF3YWl0IHJlc29sdmVCYXNlcGF0aChwYXRoKVxuICBjb25zdCBkZXNjcmlwdG9yID0gYXdhaXQgbG9hZERlc2NyaXB0b3IocGF0aClcbiAgY29uc3QgcmVzb3VyY2UgPSBhd2FpdCBhc3NlcnRSZXNvdXJjZShkZXNjcmlwdG9yLCB7IGJhc2VwYXRoIH0pXG4gIHJldHVybiByZXNvdXJjZVxufVxuIl19
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { join, relative } from "node:path";
|
|
2
|
+
import { describe, expect, expectTypeOf, it } from "vitest";
|
|
3
|
+
import { loadResourceDescriptor } from "./load.js";
|
|
4
|
+
describe("loadResourceDescriptor", async () => {
|
|
5
|
+
const getFixturePath = (name) => relative(process.cwd(), join(import.meta.dirname, "fixtures", name));
|
|
6
|
+
const descriptor = {
|
|
7
|
+
name: "name",
|
|
8
|
+
path: "table.csv",
|
|
9
|
+
};
|
|
10
|
+
it("loads a resource from a local file path", async () => {
|
|
11
|
+
const resource = await loadResourceDescriptor(getFixturePath("resource.json"));
|
|
12
|
+
expectTypeOf(resource).toEqualTypeOf();
|
|
13
|
+
expect(resource).toEqual({
|
|
14
|
+
...descriptor,
|
|
15
|
+
path: getFixturePath("table.csv"),
|
|
16
|
+
});
|
|
17
|
+
});
|
|
18
|
+
it("throws an error when resource is invalid", async () => {
|
|
19
|
+
await expect(loadResourceDescriptor(getFixturePath("resource-invalid.json"))).rejects.toThrow();
|
|
20
|
+
});
|
|
21
|
+
});
|
|
22
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZC5zcGVjLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vcmVzb3VyY2UvbG9hZC5zcGVjLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLE1BQU0sV0FBVyxDQUFBO0FBQzFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxFQUFFLEVBQUUsTUFBTSxRQUFRLENBQUE7QUFFM0QsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sV0FBVyxDQUFBO0FBRWxELFFBQVEsQ0FBQyx3QkFBd0IsRUFBRSxLQUFLLElBQUksRUFBRTtJQUM1QyxNQUFNLGNBQWMsR0FBRyxDQUFDLElBQVksRUFBRSxFQUFFLENBQ3RDLFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFBO0lBRXRFLE1BQU0sVUFBVSxHQUFHO1FBQ2pCLElBQUksRUFBRSxNQUFNO1FBQ1osSUFBSSxFQUFFLFdBQVc7S0FDbEIsQ0FBQTtJQUVELEVBQUUsQ0FBQyx5Q0FBeUMsRUFBRSxLQUFLLElBQUksRUFBRTtRQUN2RCxNQUFNLFFBQVEsR0FBRyxNQUFNLHNCQUFzQixDQUMzQyxjQUFjLENBQUMsZUFBZSxDQUFDLENBQ2hDLENBQUE7UUFFRCxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUMsYUFBYSxFQUFZLENBQUE7UUFDaEQsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE9BQU8sQ0FBQztZQUN2QixHQUFHLFVBQVU7WUFDYixJQUFJLEVBQUUsY0FBYyxDQUFDLFdBQVcsQ0FBQztTQUNsQyxDQUFDLENBQUE7SUFDSixDQUFDLENBQUMsQ0FBQTtJQUVGLEVBQUUsQ0FBQywwQ0FBMEMsRUFBRSxLQUFLLElBQUksRUFBRTtRQUN4RCxNQUFNLE1BQU0sQ0FDVixzQkFBc0IsQ0FBQyxjQUFjLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxDQUNoRSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQTtJQUNyQixDQUFDLENBQUMsQ0FBQTtBQUNKLENBQUMsQ0FBQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgam9pbiwgcmVsYXRpdmUgfSBmcm9tIFwibm9kZTpwYXRoXCJcbmltcG9ydCB7IGRlc2NyaWJlLCBleHBlY3QsIGV4cGVjdFR5cGVPZiwgaXQgfSBmcm9tIFwidml0ZXN0XCJcbmltcG9ydCB0eXBlIHsgUmVzb3VyY2UgfSBmcm9tIFwiLi9SZXNvdXJjZS50c1wiXG5pbXBvcnQgeyBsb2FkUmVzb3VyY2VEZXNjcmlwdG9yIH0gZnJvbSBcIi4vbG9hZC50c1wiXG5cbmRlc2NyaWJlKFwibG9hZFJlc291cmNlRGVzY3JpcHRvclwiLCBhc3luYyAoKSA9PiB7XG4gIGNvbnN0IGdldEZpeHR1cmVQYXRoID0gKG5hbWU6IHN0cmluZykgPT5cbiAgICByZWxhdGl2ZShwcm9jZXNzLmN3ZCgpLCBqb2luKGltcG9ydC5tZXRhLmRpcm5hbWUsIFwiZml4dHVyZXNcIiwgbmFtZSkpXG5cbiAgY29uc3QgZGVzY3JpcHRvciA9IHtcbiAgICBuYW1lOiBcIm5hbWVcIixcbiAgICBwYXRoOiBcInRhYmxlLmNzdlwiLFxuICB9XG5cbiAgaXQoXCJsb2FkcyBhIHJlc291cmNlIGZyb20gYSBsb2NhbCBmaWxlIHBhdGhcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHJlc291cmNlID0gYXdhaXQgbG9hZFJlc291cmNlRGVzY3JpcHRvcihcbiAgICAgIGdldEZpeHR1cmVQYXRoKFwicmVzb3VyY2UuanNvblwiKSxcbiAgICApXG5cbiAgICBleHBlY3RUeXBlT2YocmVzb3VyY2UpLnRvRXF1YWxUeXBlT2Y8UmVzb3VyY2U+KClcbiAgICBleHBlY3QocmVzb3VyY2UpLnRvRXF1YWwoe1xuICAgICAgLi4uZGVzY3JpcHRvcixcbiAgICAgIHBhdGg6IGdldEZpeHR1cmVQYXRoKFwidGFibGUuY3N2XCIpLFxuICAgIH0pXG4gIH0pXG5cbiAgaXQoXCJ0aHJvd3MgYW4gZXJyb3Igd2hlbiByZXNvdXJjZSBpcyBpbnZhbGlkXCIsIGFzeW5jICgpID0+IHtcbiAgICBhd2FpdCBleHBlY3QoXG4gICAgICBsb2FkUmVzb3VyY2VEZXNjcmlwdG9yKGdldEZpeHR1cmVQYXRoKFwicmVzb3VyY2UtaW52YWxpZC5qc29uXCIpKSxcbiAgICApLnJlamVjdHMudG9UaHJvdygpXG4gIH0pXG59KVxuIl19
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { Resource } from "./Resource.ts";
|
|
2
|
+
/**
|
|
3
|
+
* Save a Resource to a file path
|
|
4
|
+
* Works in Node.js environments
|
|
5
|
+
*/
|
|
6
|
+
export declare function saveResourceDescriptor(resource: Resource, options: {
|
|
7
|
+
path: string;
|
|
8
|
+
overwrite?: boolean;
|
|
9
|
+
}): Promise<void>;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { saveDescriptor } from "../descriptor/index.js";
|
|
2
|
+
import { getBasepath } from "../path/index.js";
|
|
3
|
+
import { convertResourceToDescriptor } from "./convert/toDescriptor.js";
|
|
4
|
+
const CURRENT_PROFILE = "https://datapackage.org/profiles/2.0/dataresource.json";
|
|
5
|
+
/**
|
|
6
|
+
* Save a Resource to a file path
|
|
7
|
+
* Works in Node.js environments
|
|
8
|
+
*/
|
|
9
|
+
export async function saveResourceDescriptor(resource, options) {
|
|
10
|
+
const basepath = getBasepath(options.path);
|
|
11
|
+
const descriptor = convertResourceToDescriptor(resource, { basepath });
|
|
12
|
+
descriptor.$schema = descriptor.$schema ?? CURRENT_PROFILE;
|
|
13
|
+
await saveDescriptor(descriptor, {
|
|
14
|
+
path: options.path,
|
|
15
|
+
overwrite: options.overwrite,
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2F2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3Jlc291cmNlL3NhdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHdCQUF3QixDQUFBO0FBQ3ZELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQTtBQUU5QyxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQTtBQUV2RSxNQUFNLGVBQWUsR0FBRyx3REFBd0QsQ0FBQTtBQUVoRjs7O0dBR0c7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLHNCQUFzQixDQUMxQyxRQUFrQixFQUNsQixPQUdDO0lBRUQsTUFBTSxRQUFRLEdBQUcsV0FBVyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQTtJQUUxQyxNQUFNLFVBQVUsR0FBRywyQkFBMkIsQ0FBQyxRQUFRLEVBQUUsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFBO0lBQ3RFLFVBQVUsQ0FBQyxPQUFPLEdBQUcsVUFBVSxDQUFDLE9BQU8sSUFBSSxlQUFlLENBQUE7SUFFMUQsTUFBTSxjQUFjLENBQUMsVUFBVSxFQUFFO1FBQy9CLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSTtRQUNsQixTQUFTLEVBQUUsT0FBTyxDQUFDLFNBQVM7S0FDN0IsQ0FBQyxDQUFBO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHNhdmVEZXNjcmlwdG9yIH0gZnJvbSBcIi4uL2Rlc2NyaXB0b3IvaW5kZXgudHNcIlxuaW1wb3J0IHsgZ2V0QmFzZXBhdGggfSBmcm9tIFwiLi4vcGF0aC9pbmRleC50c1wiXG5pbXBvcnQgdHlwZSB7IFJlc291cmNlIH0gZnJvbSBcIi4vUmVzb3VyY2UudHNcIlxuaW1wb3J0IHsgY29udmVydFJlc291cmNlVG9EZXNjcmlwdG9yIH0gZnJvbSBcIi4vY29udmVydC90b0Rlc2NyaXB0b3IudHNcIlxuXG5jb25zdCBDVVJSRU5UX1BST0ZJTEUgPSBcImh0dHBzOi8vZGF0YXBhY2thZ2Uub3JnL3Byb2ZpbGVzLzIuMC9kYXRhcmVzb3VyY2UuanNvblwiXG5cbi8qKlxuICogU2F2ZSBhIFJlc291cmNlIHRvIGEgZmlsZSBwYXRoXG4gKiBXb3JrcyBpbiBOb2RlLmpzIGVudmlyb25tZW50c1xuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2F2ZVJlc291cmNlRGVzY3JpcHRvcihcbiAgcmVzb3VyY2U6IFJlc291cmNlLFxuICBvcHRpb25zOiB7XG4gICAgcGF0aDogc3RyaW5nXG4gICAgb3ZlcndyaXRlPzogYm9vbGVhblxuICB9LFxuKSB7XG4gIGNvbnN0IGJhc2VwYXRoID0gZ2V0QmFzZXBhdGgob3B0aW9ucy5wYXRoKVxuXG4gIGNvbnN0IGRlc2NyaXB0b3IgPSBjb252ZXJ0UmVzb3VyY2VUb0Rlc2NyaXB0b3IocmVzb3VyY2UsIHsgYmFzZXBhdGggfSlcbiAgZGVzY3JpcHRvci4kc2NoZW1hID0gZGVzY3JpcHRvci4kc2NoZW1hID8/IENVUlJFTlRfUFJPRklMRVxuXG4gIGF3YWl0IHNhdmVEZXNjcmlwdG9yKGRlc2NyaXB0b3IsIHtcbiAgICBwYXRoOiBvcHRpb25zLnBhdGgsXG4gICAgb3ZlcndyaXRlOiBvcHRpb25zLm92ZXJ3cml0ZSxcbiAgfSlcbn1cbiJdfQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|