@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,4 @@
|
|
|
1
|
+
export function isDescriptor(value) {
|
|
2
|
+
return !!value && typeof value === "object" && !Array.isArray(value);
|
|
3
|
+
}
|
|
4
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGVzY3JpcHRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL2Rlc2NyaXB0b3IvRGVzY3JpcHRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxNQUFNLFVBQVUsWUFBWSxDQUFDLEtBQWM7SUFDekMsT0FBTyxDQUFDLENBQUMsS0FBSyxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUE7QUFDdEUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB0eXBlIERlc2NyaXB0b3IgPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuXG5leHBvcnQgZnVuY3Rpb24gaXNEZXNjcmlwdG9yKHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgRGVzY3JpcHRvciB7XG4gIHJldHVybiAhIXZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZSlcbn1cbiJdfQ==
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { parseDescriptor } from "./process/parse.ts";
|
|
2
|
+
export { stringifyDescriptor } from "./process/stringify.ts";
|
|
3
|
+
export { loadDescriptor } from "./load.ts";
|
|
4
|
+
export { saveDescriptor } from "./save.ts";
|
|
5
|
+
export type { Descriptor } from "./Descriptor.ts";
|
|
6
|
+
export { isDescriptor } from "./Descriptor.ts";
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { parseDescriptor } from "./process/parse.js";
|
|
2
|
+
export { stringifyDescriptor } from "./process/stringify.js";
|
|
3
|
+
export { loadDescriptor } from "./load.js";
|
|
4
|
+
export { saveDescriptor } from "./save.js";
|
|
5
|
+
export { isDescriptor } from "./Descriptor.js";
|
|
6
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9kZXNjcmlwdG9yL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQTtBQUNwRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQTtBQUM1RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sV0FBVyxDQUFBO0FBQzFDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxXQUFXLENBQUE7QUFFMUMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHsgcGFyc2VEZXNjcmlwdG9yIH0gZnJvbSBcIi4vcHJvY2Vzcy9wYXJzZS50c1wiXG5leHBvcnQgeyBzdHJpbmdpZnlEZXNjcmlwdG9yIH0gZnJvbSBcIi4vcHJvY2Vzcy9zdHJpbmdpZnkudHNcIlxuZXhwb3J0IHsgbG9hZERlc2NyaXB0b3IgfSBmcm9tIFwiLi9sb2FkLnRzXCJcbmV4cG9ydCB7IHNhdmVEZXNjcmlwdG9yIH0gZnJvbSBcIi4vc2F2ZS50c1wiXG5leHBvcnQgdHlwZSB7IERlc2NyaXB0b3IgfSBmcm9tIFwiLi9EZXNjcmlwdG9yLnRzXCJcbmV4cG9ydCB7IGlzRGVzY3JpcHRvciB9IGZyb20gXCIuL0Rlc2NyaXB0b3IudHNcIlxuIl19
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Load a descriptor (JSON Object) from a file or URL
|
|
3
|
+
* Uses dynamic imports to work in both Node.js and browser environments
|
|
4
|
+
* Supports HTTP, HTTPS, FTP, and FTPS protocols
|
|
5
|
+
*/
|
|
6
|
+
export declare function loadDescriptor(path: string, options?: {
|
|
7
|
+
onlyRemote?: boolean;
|
|
8
|
+
}): Promise<Record<string, any>>;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { node } from "../platform/index.js";
|
|
2
|
+
import { getProtocol, isRemotePath } from "../path/index.js";
|
|
3
|
+
import { parseDescriptor } from "./process/parse.js";
|
|
4
|
+
/**
|
|
5
|
+
* Load a descriptor (JSON Object) from a file or URL
|
|
6
|
+
* Uses dynamic imports to work in both Node.js and browser environments
|
|
7
|
+
* Supports HTTP, HTTPS, FTP, and FTPS protocols
|
|
8
|
+
*/
|
|
9
|
+
export async function loadDescriptor(path, options) {
|
|
10
|
+
const isRemote = isRemotePath(path);
|
|
11
|
+
if (!isRemote && options?.onlyRemote) {
|
|
12
|
+
throw new Error("Cannot load descriptor for security reasons");
|
|
13
|
+
}
|
|
14
|
+
return !isRemote
|
|
15
|
+
? await loadLocalDescriptor(path)
|
|
16
|
+
: await loadRemoteDescriptor(path);
|
|
17
|
+
}
|
|
18
|
+
async function loadLocalDescriptor(path) {
|
|
19
|
+
if (!node) {
|
|
20
|
+
throw new Error("File system is not supported in this environment");
|
|
21
|
+
}
|
|
22
|
+
const text = await node.fs.readFile(path, "utf-8");
|
|
23
|
+
const descriptor = parseDescriptor(text);
|
|
24
|
+
return descriptor;
|
|
25
|
+
}
|
|
26
|
+
async function loadRemoteDescriptor(path) {
|
|
27
|
+
const url = new URL(path);
|
|
28
|
+
const protocol = getProtocol(path);
|
|
29
|
+
if (!["http", "https", "ftp", "ftps"].includes(protocol)) {
|
|
30
|
+
throw new Error(`Unsupported remote protocol: ${protocol}`);
|
|
31
|
+
}
|
|
32
|
+
const response = await fetch(url.toString());
|
|
33
|
+
const descriptor = (await response.json());
|
|
34
|
+
return descriptor;
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL2Rlc2NyaXB0b3IvbG9hZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sc0JBQXNCLENBQUE7QUFDM0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQTtBQUM1RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0JBQW9CLENBQUE7QUFFcEQ7Ozs7R0FJRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsY0FBYyxDQUNsQyxJQUFZLEVBQ1osT0FFQztJQUVELE1BQU0sUUFBUSxHQUFHLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQTtJQUNuQyxJQUFJLENBQUMsUUFBUSxJQUFJLE9BQU8sRUFBRSxVQUFVLEVBQUUsQ0FBQztRQUNyQyxNQUFNLElBQUksS0FBSyxDQUFDLDZDQUE2QyxDQUFDLENBQUE7SUFDaEUsQ0FBQztJQUVELE9BQU8sQ0FBQyxRQUFRO1FBQ2QsQ0FBQyxDQUFDLE1BQU0sbUJBQW1CLENBQUMsSUFBSSxDQUFDO1FBQ2pDLENBQUMsQ0FBQyxNQUFNLG9CQUFvQixDQUFDLElBQUksQ0FBQyxDQUFBO0FBQ3RDLENBQUM7QUFFRCxLQUFLLFVBQVUsbUJBQW1CLENBQUMsSUFBWTtJQUM3QyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDVixNQUFNLElBQUksS0FBSyxDQUFDLGtEQUFrRCxDQUFDLENBQUE7SUFDckUsQ0FBQztJQUVELE1BQU0sSUFBSSxHQUFHLE1BQU0sSUFBSSxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFBO0lBQ2xELE1BQU0sVUFBVSxHQUFHLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQTtJQUV4QyxPQUFPLFVBQVUsQ0FBQTtBQUNuQixDQUFDO0FBRUQsS0FBSyxVQUFVLG9CQUFvQixDQUFDLElBQVk7SUFDOUMsTUFBTSxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUE7SUFFekIsTUFBTSxRQUFRLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFBO0lBQ2xDLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO1FBQ3pELE1BQU0sSUFBSSxLQUFLLENBQUMsZ0NBQWdDLFFBQVEsRUFBRSxDQUFDLENBQUE7SUFDN0QsQ0FBQztJQUVELE1BQU0sUUFBUSxHQUFHLE1BQU0sS0FBSyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFBO0lBQzVDLE1BQU0sVUFBVSxHQUFHLENBQUMsTUFBTSxRQUFRLENBQUMsSUFBSSxFQUFFLENBQXdCLENBQUE7SUFFakUsT0FBTyxVQUFVLENBQUE7QUFDbkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IG5vZGUgfSBmcm9tIFwiLi4vcGxhdGZvcm0vaW5kZXgudHNcIlxuaW1wb3J0IHsgZ2V0UHJvdG9jb2wsIGlzUmVtb3RlUGF0aCB9IGZyb20gXCIuLi9wYXRoL2luZGV4LnRzXCJcbmltcG9ydCB7IHBhcnNlRGVzY3JpcHRvciB9IGZyb20gXCIuL3Byb2Nlc3MvcGFyc2UudHNcIlxuXG4vKipcbiAqIExvYWQgYSBkZXNjcmlwdG9yIChKU09OIE9iamVjdCkgZnJvbSBhIGZpbGUgb3IgVVJMXG4gKiBVc2VzIGR5bmFtaWMgaW1wb3J0cyB0byB3b3JrIGluIGJvdGggTm9kZS5qcyBhbmQgYnJvd3NlciBlbnZpcm9ubWVudHNcbiAqIFN1cHBvcnRzIEhUVFAsIEhUVFBTLCBGVFAsIGFuZCBGVFBTIHByb3RvY29sc1xuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbG9hZERlc2NyaXB0b3IoXG4gIHBhdGg6IHN0cmluZyxcbiAgb3B0aW9ucz86IHtcbiAgICBvbmx5UmVtb3RlPzogYm9vbGVhblxuICB9LFxuKSB7XG4gIGNvbnN0IGlzUmVtb3RlID0gaXNSZW1vdGVQYXRoKHBhdGgpXG4gIGlmICghaXNSZW1vdGUgJiYgb3B0aW9ucz8ub25seVJlbW90ZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkNhbm5vdCBsb2FkIGRlc2NyaXB0b3IgZm9yIHNlY3VyaXR5IHJlYXNvbnNcIilcbiAgfVxuXG4gIHJldHVybiAhaXNSZW1vdGVcbiAgICA/IGF3YWl0IGxvYWRMb2NhbERlc2NyaXB0b3IocGF0aClcbiAgICA6IGF3YWl0IGxvYWRSZW1vdGVEZXNjcmlwdG9yKHBhdGgpXG59XG5cbmFzeW5jIGZ1bmN0aW9uIGxvYWRMb2NhbERlc2NyaXB0b3IocGF0aDogc3RyaW5nKSB7XG4gIGlmICghbm9kZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkZpbGUgc3lzdGVtIGlzIG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyBlbnZpcm9ubWVudFwiKVxuICB9XG5cbiAgY29uc3QgdGV4dCA9IGF3YWl0IG5vZGUuZnMucmVhZEZpbGUocGF0aCwgXCJ1dGYtOFwiKVxuICBjb25zdCBkZXNjcmlwdG9yID0gcGFyc2VEZXNjcmlwdG9yKHRleHQpXG5cbiAgcmV0dXJuIGRlc2NyaXB0b3Jcbn1cblxuYXN5bmMgZnVuY3Rpb24gbG9hZFJlbW90ZURlc2NyaXB0b3IocGF0aDogc3RyaW5nKSB7XG4gIGNvbnN0IHVybCA9IG5ldyBVUkwocGF0aClcblxuICBjb25zdCBwcm90b2NvbCA9IGdldFByb3RvY29sKHBhdGgpXG4gIGlmICghW1wiaHR0cFwiLCBcImh0dHBzXCIsIFwiZnRwXCIsIFwiZnRwc1wiXS5pbmNsdWRlcyhwcm90b2NvbCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIHJlbW90ZSBwcm90b2NvbDogJHtwcm90b2NvbH1gKVxuICB9XG5cbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh1cmwudG9TdHJpbmcoKSlcbiAgY29uc3QgZGVzY3JpcHRvciA9IChhd2FpdCByZXNwb25zZS5qc29uKCkpIGFzIFJlY29yZDxzdHJpbmcsIGFueT5cblxuICByZXR1cm4gZGVzY3JpcHRvclxufVxuIl19
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import path from "node:path";
|
|
2
|
+
import { afterEach, describe, expect, it, vi } from "vitest";
|
|
3
|
+
import { loadDescriptor } from "./load.js";
|
|
4
|
+
describe("loadDescriptor", () => {
|
|
5
|
+
const getFixturePath = (name) => path.relative(process.cwd(), path.join(import.meta.dirname, "fixtures", name ?? ""));
|
|
6
|
+
const expectedDescriptor = {
|
|
7
|
+
fields: [
|
|
8
|
+
{
|
|
9
|
+
name: "id",
|
|
10
|
+
type: "integer",
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
name: "name",
|
|
14
|
+
type: "string",
|
|
15
|
+
},
|
|
16
|
+
],
|
|
17
|
+
};
|
|
18
|
+
const originalFetch = globalThis.fetch;
|
|
19
|
+
afterEach(() => {
|
|
20
|
+
globalThis.fetch = originalFetch;
|
|
21
|
+
vi.resetAllMocks();
|
|
22
|
+
});
|
|
23
|
+
it("loads a local descriptor from a file path", async () => {
|
|
24
|
+
const descriptor = await loadDescriptor(getFixturePath("schema.json"));
|
|
25
|
+
expect(descriptor).toEqual(expectedDescriptor);
|
|
26
|
+
});
|
|
27
|
+
it("loads a remote descriptor from a URL", async () => {
|
|
28
|
+
const testUrl = "https://example.com/schema.json";
|
|
29
|
+
globalThis.fetch = vi.fn().mockResolvedValue({
|
|
30
|
+
json: () => Promise.resolve(expectedDescriptor),
|
|
31
|
+
});
|
|
32
|
+
const descriptor = await loadDescriptor(testUrl);
|
|
33
|
+
expect(descriptor).toEqual(expectedDescriptor);
|
|
34
|
+
expect(fetch).toHaveBeenCalledWith(testUrl);
|
|
35
|
+
});
|
|
36
|
+
it("throws error for unsupported URL protocol", async () => {
|
|
37
|
+
const testUrl = "bad:///path/to/schema.json";
|
|
38
|
+
await expect(loadDescriptor(testUrl)).rejects.toThrow("Unsupported remote protocol: bad");
|
|
39
|
+
});
|
|
40
|
+
it("throws error when onlyRemote is true but path is local", async () => {
|
|
41
|
+
await expect(loadDescriptor(getFixturePath("schema.json"), { onlyRemote: true })).rejects.toThrow("Cannot load descriptor for security reasons");
|
|
42
|
+
});
|
|
43
|
+
});
|
|
44
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZC5zcGVjLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vZGVzY3JpcHRvci9sb2FkLnNwZWMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxJQUFJLE1BQU0sV0FBVyxDQUFBO0FBQzVCLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLE1BQU0sUUFBUSxDQUFBO0FBQzVELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxXQUFXLENBQUE7QUFFMUMsUUFBUSxDQUFDLGdCQUFnQixFQUFFLEdBQUcsRUFBRTtJQUM5QixNQUFNLGNBQWMsR0FBRyxDQUFDLElBQWEsRUFBRSxFQUFFLENBQ3ZDLElBQUksQ0FBQyxRQUFRLENBQ1gsT0FBTyxDQUFDLEdBQUcsRUFBRSxFQUNiLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsVUFBVSxFQUFFLElBQUksSUFBSSxFQUFFLENBQUMsQ0FDdkQsQ0FBQTtJQUVILE1BQU0sa0JBQWtCLEdBQUc7UUFDekIsTUFBTSxFQUFFO1lBQ047Z0JBQ0UsSUFBSSxFQUFFLElBQUk7Z0JBQ1YsSUFBSSxFQUFFLFNBQVM7YUFDaEI7WUFDRDtnQkFDRSxJQUFJLEVBQUUsTUFBTTtnQkFDWixJQUFJLEVBQUUsUUFBUTthQUNmO1NBQ0Y7S0FDRixDQUFBO0lBRUQsTUFBTSxhQUFhLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQTtJQUN0QyxTQUFTLENBQUMsR0FBRyxFQUFFO1FBQ2IsVUFBVSxDQUFDLEtBQUssR0FBRyxhQUFhLENBQUE7UUFDaEMsRUFBRSxDQUFDLGFBQWEsRUFBRSxDQUFBO0lBQ3BCLENBQUMsQ0FBQyxDQUFBO0lBRUYsRUFBRSxDQUFDLDJDQUEyQyxFQUFFLEtBQUssSUFBSSxFQUFFO1FBQ3pELE1BQU0sVUFBVSxHQUFHLE1BQU0sY0FBYyxDQUFDLGNBQWMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFBO1FBRXRFLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsQ0FBQTtJQUNoRCxDQUFDLENBQUMsQ0FBQTtJQUVGLEVBQUUsQ0FBQyxzQ0FBc0MsRUFBRSxLQUFLLElBQUksRUFBRTtRQUNwRCxNQUFNLE9BQU8sR0FBRyxpQ0FBaUMsQ0FBQTtRQUVqRCxVQUFVLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQztZQUMzQyxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQztTQUNoRCxDQUFDLENBQUE7UUFFRixNQUFNLFVBQVUsR0FBRyxNQUFNLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQTtRQUVoRCxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDLENBQUE7UUFDOUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLG9CQUFvQixDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBQzdDLENBQUMsQ0FBQyxDQUFBO0lBRUYsRUFBRSxDQUFDLDJDQUEyQyxFQUFFLEtBQUssSUFBSSxFQUFFO1FBQ3pELE1BQU0sT0FBTyxHQUFHLDRCQUE0QixDQUFBO1FBRTVDLE1BQU0sTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQ25ELGtDQUFrQyxDQUNuQyxDQUFBO0lBQ0gsQ0FBQyxDQUFDLENBQUE7SUFFRixFQUFFLENBQUMsd0RBQXdELEVBQUUsS0FBSyxJQUFJLEVBQUU7UUFDdEUsTUFBTSxNQUFNLENBQ1YsY0FBYyxDQUFDLGNBQWMsQ0FBQyxhQUFhLENBQUMsRUFBRSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUNwRSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsNkNBQTZDLENBQUMsQ0FBQTtJQUNsRSxDQUFDLENBQUMsQ0FBQTtBQUNKLENBQUMsQ0FBQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHBhdGggZnJvbSBcIm5vZGU6cGF0aFwiXG5pbXBvcnQgeyBhZnRlckVhY2gsIGRlc2NyaWJlLCBleHBlY3QsIGl0LCB2aSB9IGZyb20gXCJ2aXRlc3RcIlxuaW1wb3J0IHsgbG9hZERlc2NyaXB0b3IgfSBmcm9tIFwiLi9sb2FkLnRzXCJcblxuZGVzY3JpYmUoXCJsb2FkRGVzY3JpcHRvclwiLCAoKSA9PiB7XG4gIGNvbnN0IGdldEZpeHR1cmVQYXRoID0gKG5hbWU/OiBzdHJpbmcpID0+XG4gICAgcGF0aC5yZWxhdGl2ZShcbiAgICAgIHByb2Nlc3MuY3dkKCksXG4gICAgICBwYXRoLmpvaW4oaW1wb3J0Lm1ldGEuZGlybmFtZSwgXCJmaXh0dXJlc1wiLCBuYW1lID8/IFwiXCIpLFxuICAgIClcblxuICBjb25zdCBleHBlY3RlZERlc2NyaXB0b3IgPSB7XG4gICAgZmllbGRzOiBbXG4gICAgICB7XG4gICAgICAgIG5hbWU6IFwiaWRcIixcbiAgICAgICAgdHlwZTogXCJpbnRlZ2VyXCIsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiBcIm5hbWVcIixcbiAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgIH0sXG4gICAgXSxcbiAgfVxuXG4gIGNvbnN0IG9yaWdpbmFsRmV0Y2ggPSBnbG9iYWxUaGlzLmZldGNoXG4gIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgZ2xvYmFsVGhpcy5mZXRjaCA9IG9yaWdpbmFsRmV0Y2hcbiAgICB2aS5yZXNldEFsbE1vY2tzKClcbiAgfSlcblxuICBpdChcImxvYWRzIGEgbG9jYWwgZGVzY3JpcHRvciBmcm9tIGEgZmlsZSBwYXRoXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBkZXNjcmlwdG9yID0gYXdhaXQgbG9hZERlc2NyaXB0b3IoZ2V0Rml4dHVyZVBhdGgoXCJzY2hlbWEuanNvblwiKSlcblxuICAgIGV4cGVjdChkZXNjcmlwdG9yKS50b0VxdWFsKGV4cGVjdGVkRGVzY3JpcHRvcilcbiAgfSlcblxuICBpdChcImxvYWRzIGEgcmVtb3RlIGRlc2NyaXB0b3IgZnJvbSBhIFVSTFwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgdGVzdFVybCA9IFwiaHR0cHM6Ly9leGFtcGxlLmNvbS9zY2hlbWEuanNvblwiXG5cbiAgICBnbG9iYWxUaGlzLmZldGNoID0gdmkuZm4oKS5tb2NrUmVzb2x2ZWRWYWx1ZSh7XG4gICAgICBqc29uOiAoKSA9PiBQcm9taXNlLnJlc29sdmUoZXhwZWN0ZWREZXNjcmlwdG9yKSxcbiAgICB9KVxuXG4gICAgY29uc3QgZGVzY3JpcHRvciA9IGF3YWl0IGxvYWREZXNjcmlwdG9yKHRlc3RVcmwpXG5cbiAgICBleHBlY3QoZGVzY3JpcHRvcikudG9FcXVhbChleHBlY3RlZERlc2NyaXB0b3IpXG4gICAgZXhwZWN0KGZldGNoKS50b0hhdmVCZWVuQ2FsbGVkV2l0aCh0ZXN0VXJsKVxuICB9KVxuXG4gIGl0KFwidGhyb3dzIGVycm9yIGZvciB1bnN1cHBvcnRlZCBVUkwgcHJvdG9jb2xcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHRlc3RVcmwgPSBcImJhZDovLy9wYXRoL3RvL3NjaGVtYS5qc29uXCJcblxuICAgIGF3YWl0IGV4cGVjdChsb2FkRGVzY3JpcHRvcih0ZXN0VXJsKSkucmVqZWN0cy50b1Rocm93KFxuICAgICAgXCJVbnN1cHBvcnRlZCByZW1vdGUgcHJvdG9jb2w6IGJhZFwiLFxuICAgIClcbiAgfSlcblxuICBpdChcInRocm93cyBlcnJvciB3aGVuIG9ubHlSZW1vdGUgaXMgdHJ1ZSBidXQgcGF0aCBpcyBsb2NhbFwiLCBhc3luYyAoKSA9PiB7XG4gICAgYXdhaXQgZXhwZWN0KFxuICAgICAgbG9hZERlc2NyaXB0b3IoZ2V0Rml4dHVyZVBhdGgoXCJzY2hlbWEuanNvblwiKSwgeyBvbmx5UmVtb3RlOiB0cnVlIH0pLFxuICAgICkucmVqZWN0cy50b1Rocm93KFwiQ2Fubm90IGxvYWQgZGVzY3JpcHRvciBmb3Igc2VjdXJpdHkgcmVhc29uc1wiKVxuICB9KVxufSlcbiJdfQ==
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export function parseDescriptor(text) {
|
|
2
|
+
const value = JSON.parse(text);
|
|
3
|
+
if (typeof value !== "object" || Array.isArray(value)) {
|
|
4
|
+
throw new Error(`Invalid descriptor: ${text}`);
|
|
5
|
+
}
|
|
6
|
+
return value;
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9kZXNjcmlwdG9yL3Byb2Nlc3MvcGFyc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsTUFBTSxVQUFVLGVBQWUsQ0FBQyxJQUFZO0lBQzFDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUE7SUFFOUIsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ3RELE1BQU0sSUFBSSxLQUFLLENBQUMsdUJBQXVCLElBQUksRUFBRSxDQUFDLENBQUE7SUFDaEQsQ0FBQztJQUVELE9BQU8sS0FBbUIsQ0FBQTtBQUM1QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBEZXNjcmlwdG9yIH0gZnJvbSBcIi4uL0Rlc2NyaXB0b3IudHNcIlxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VEZXNjcmlwdG9yKHRleHQ6IHN0cmluZykge1xuICBjb25zdCB2YWx1ZSA9IEpTT04ucGFyc2UodGV4dClcblxuICBpZiAodHlwZW9mIHZhbHVlICE9PSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGRlc2NyaXB0b3I6ICR7dGV4dH1gKVxuICB9XG5cbiAgcmV0dXJuIHZhbHVlIGFzIERlc2NyaXB0b3Jcbn1cbiJdfQ==
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export function stringifyDescriptor(descriptor) {
|
|
2
|
+
return JSON.stringify(descriptor, null, 2);
|
|
3
|
+
}
|
|
4
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyaW5naWZ5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vZGVzY3JpcHRvci9wcm9jZXNzL3N0cmluZ2lmeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxNQUFNLFVBQVUsbUJBQW1CLENBQUMsVUFBc0I7SUFDeEQsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUE7QUFDNUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRGVzY3JpcHRvciB9IGZyb20gXCIuLi9EZXNjcmlwdG9yLnRzXCJcblxuZXhwb3J0IGZ1bmN0aW9uIHN0cmluZ2lmeURlc2NyaXB0b3IoZGVzY3JpcHRvcjogRGVzY3JpcHRvcikge1xuICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoZGVzY3JpcHRvciwgbnVsbCwgMilcbn1cbiJdfQ==
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { Descriptor } from "./Descriptor.ts";
|
|
2
|
+
/**
|
|
3
|
+
* Save a descriptor (JSON Object) to a file path
|
|
4
|
+
* Works in Node.js environments
|
|
5
|
+
*/
|
|
6
|
+
export declare function saveDescriptor(descriptor: Descriptor, options: {
|
|
7
|
+
path: string;
|
|
8
|
+
overwrite?: boolean;
|
|
9
|
+
}): Promise<void>;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { node } from "../platform/index.js";
|
|
2
|
+
import { stringifyDescriptor } from "./process/stringify.js";
|
|
3
|
+
/**
|
|
4
|
+
* Save a descriptor (JSON Object) to a file path
|
|
5
|
+
* Works in Node.js environments
|
|
6
|
+
*/
|
|
7
|
+
export async function saveDescriptor(descriptor, options) {
|
|
8
|
+
if (!node) {
|
|
9
|
+
throw new Error("File system is not supported in this environment");
|
|
10
|
+
}
|
|
11
|
+
const text = stringifyDescriptor(descriptor);
|
|
12
|
+
await node.fs.mkdir(node.path.dirname(options.path), { recursive: true });
|
|
13
|
+
await node.fs.writeFile(options.path, text, {
|
|
14
|
+
encoding: "utf8",
|
|
15
|
+
// The "wx" flag ensures that the file won't overwrite an existing file
|
|
16
|
+
flag: options.overwrite ? "w" : "wx",
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2F2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL2Rlc2NyaXB0b3Ivc2F2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sc0JBQXNCLENBQUE7QUFFM0MsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sd0JBQXdCLENBQUE7QUFFNUQ7OztHQUdHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxjQUFjLENBQ2xDLFVBQXNCLEVBQ3RCLE9BR0M7SUFFRCxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDVixNQUFNLElBQUksS0FBSyxDQUFDLGtEQUFrRCxDQUFDLENBQUE7SUFDckUsQ0FBQztJQUVELE1BQU0sSUFBSSxHQUFHLG1CQUFtQixDQUFDLFVBQVUsQ0FBQyxDQUFBO0lBRTVDLE1BQU0sSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUE7SUFDekUsTUFBTSxJQUFJLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRTtRQUMxQyxRQUFRLEVBQUUsTUFBTTtRQUNoQix1RUFBdUU7UUFDdkUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSTtLQUNyQyxDQUFDLENBQUE7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgbm9kZSB9IGZyb20gXCIuLi9wbGF0Zm9ybS9pbmRleC50c1wiXG5pbXBvcnQgdHlwZSB7IERlc2NyaXB0b3IgfSBmcm9tIFwiLi9EZXNjcmlwdG9yLnRzXCJcbmltcG9ydCB7IHN0cmluZ2lmeURlc2NyaXB0b3IgfSBmcm9tIFwiLi9wcm9jZXNzL3N0cmluZ2lmeS50c1wiXG5cbi8qKlxuICogU2F2ZSBhIGRlc2NyaXB0b3IgKEpTT04gT2JqZWN0KSB0byBhIGZpbGUgcGF0aFxuICogV29ya3MgaW4gTm9kZS5qcyBlbnZpcm9ubWVudHNcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNhdmVEZXNjcmlwdG9yKFxuICBkZXNjcmlwdG9yOiBEZXNjcmlwdG9yLFxuICBvcHRpb25zOiB7XG4gICAgcGF0aDogc3RyaW5nXG4gICAgb3ZlcndyaXRlPzogYm9vbGVhblxuICB9LFxuKSB7XG4gIGlmICghbm9kZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkZpbGUgc3lzdGVtIGlzIG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyBlbnZpcm9ubWVudFwiKVxuICB9XG5cbiAgY29uc3QgdGV4dCA9IHN0cmluZ2lmeURlc2NyaXB0b3IoZGVzY3JpcHRvcilcblxuICBhd2FpdCBub2RlLmZzLm1rZGlyKG5vZGUucGF0aC5kaXJuYW1lKG9wdGlvbnMucGF0aCksIHsgcmVjdXJzaXZlOiB0cnVlIH0pXG4gIGF3YWl0IG5vZGUuZnMud3JpdGVGaWxlKG9wdGlvbnMucGF0aCwgdGV4dCwge1xuICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAvLyBUaGUgXCJ3eFwiIGZsYWcgZW5zdXJlcyB0aGF0IHRoZSBmaWxlIHdvbid0IG92ZXJ3cml0ZSBhbiBleGlzdGluZyBmaWxlXG4gICAgZmxhZzogb3B0aW9ucy5vdmVyd3JpdGUgPyBcIndcIiA6IFwid3hcIixcbiAgfSlcbn1cbiJdfQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import * as fs from "node:fs/promises";
|
|
2
|
+
import * as path from "node:path";
|
|
3
|
+
import { temporaryDirectory } from "tempy";
|
|
4
|
+
import { afterEach, beforeEach, describe, expect, it } from "vitest";
|
|
5
|
+
import { saveDescriptor } from "./save.js";
|
|
6
|
+
describe("saveDescriptor", () => {
|
|
7
|
+
const testDescriptor = {
|
|
8
|
+
name: "test-descriptor",
|
|
9
|
+
version: "1.0.0",
|
|
10
|
+
description: "Test descriptor for save function",
|
|
11
|
+
resources: [
|
|
12
|
+
{
|
|
13
|
+
name: "resource1",
|
|
14
|
+
path: "data/resource1.csv",
|
|
15
|
+
},
|
|
16
|
+
],
|
|
17
|
+
};
|
|
18
|
+
let testDir;
|
|
19
|
+
let testPath;
|
|
20
|
+
beforeEach(() => {
|
|
21
|
+
testDir = temporaryDirectory();
|
|
22
|
+
testPath = path.join(testDir, "descriptor.json");
|
|
23
|
+
});
|
|
24
|
+
afterEach(async () => {
|
|
25
|
+
try {
|
|
26
|
+
await fs.rm(testDir, { recursive: true, force: true });
|
|
27
|
+
}
|
|
28
|
+
catch (error) {
|
|
29
|
+
if (error instanceof Error && !error.message.includes("ENOENT")) {
|
|
30
|
+
console.error(`Failed to clean up test directory: ${testDir}`, error);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
});
|
|
34
|
+
it("should save a descriptor to the specified path", async () => {
|
|
35
|
+
await saveDescriptor(testDescriptor, { path: testPath });
|
|
36
|
+
const fileExists = await fs
|
|
37
|
+
.stat(testPath)
|
|
38
|
+
.then(() => true)
|
|
39
|
+
.catch(() => false);
|
|
40
|
+
expect(fileExists).toBe(true);
|
|
41
|
+
const content = await fs.readFile(testPath, "utf-8");
|
|
42
|
+
const parsedContent = JSON.parse(content);
|
|
43
|
+
expect(parsedContent).toEqual(testDescriptor);
|
|
44
|
+
});
|
|
45
|
+
it("should save a descriptor to a nested directory path", async () => {
|
|
46
|
+
const nestedPath = path.join(testDir, "nested", "dir", "descriptor.json");
|
|
47
|
+
await saveDescriptor(testDescriptor, { path: nestedPath });
|
|
48
|
+
const fileExists = await fs
|
|
49
|
+
.stat(nestedPath)
|
|
50
|
+
.then(() => true)
|
|
51
|
+
.catch(() => false);
|
|
52
|
+
expect(fileExists).toBe(true);
|
|
53
|
+
const content = await fs.readFile(nestedPath, "utf-8");
|
|
54
|
+
const parsedContent = JSON.parse(content);
|
|
55
|
+
expect(parsedContent).toEqual(testDescriptor);
|
|
56
|
+
});
|
|
57
|
+
it("should use pretty formatting with 2-space indentation", async () => {
|
|
58
|
+
await saveDescriptor(testDescriptor, { path: testPath });
|
|
59
|
+
const content = await fs.readFile(testPath, "utf-8");
|
|
60
|
+
const expectedFormat = JSON.stringify(testDescriptor, null, 2);
|
|
61
|
+
expect(content).toEqual(expectedFormat);
|
|
62
|
+
const lines = content.split("\n");
|
|
63
|
+
expect(lines.length).toBeGreaterThan(1);
|
|
64
|
+
if (lines.length > 1 && lines[1]) {
|
|
65
|
+
expect(lines[1].startsWith(" ")).toBe(true);
|
|
66
|
+
}
|
|
67
|
+
});
|
|
68
|
+
it("should throw an error when file exists and overwrite is false", async () => {
|
|
69
|
+
await saveDescriptor(testDescriptor, { path: testPath });
|
|
70
|
+
await expect(saveDescriptor(testDescriptor, { path: testPath, overwrite: false })).rejects.toThrow();
|
|
71
|
+
});
|
|
72
|
+
it("should throw an error when file exists and overwrite is not specified", async () => {
|
|
73
|
+
await saveDescriptor(testDescriptor, { path: testPath });
|
|
74
|
+
await expect(saveDescriptor(testDescriptor, { path: testPath })).rejects.toThrow();
|
|
75
|
+
});
|
|
76
|
+
it("should overwrite existing file when overwrite is true", async () => {
|
|
77
|
+
const initialDescriptor = {
|
|
78
|
+
name: "initial",
|
|
79
|
+
version: "1.0.0",
|
|
80
|
+
};
|
|
81
|
+
const updatedDescriptor = {
|
|
82
|
+
name: "updated",
|
|
83
|
+
version: "2.0.0",
|
|
84
|
+
description: "Updated descriptor",
|
|
85
|
+
};
|
|
86
|
+
await saveDescriptor(initialDescriptor, { path: testPath });
|
|
87
|
+
const initialContent = await fs.readFile(testPath, "utf-8");
|
|
88
|
+
const initialParsed = JSON.parse(initialContent);
|
|
89
|
+
expect(initialParsed).toEqual(initialDescriptor);
|
|
90
|
+
await saveDescriptor(updatedDescriptor, {
|
|
91
|
+
path: testPath,
|
|
92
|
+
overwrite: true,
|
|
93
|
+
});
|
|
94
|
+
const updatedContent = await fs.readFile(testPath, "utf-8");
|
|
95
|
+
const updatedParsed = JSON.parse(updatedContent);
|
|
96
|
+
expect(updatedParsed).toEqual(updatedDescriptor);
|
|
97
|
+
});
|
|
98
|
+
});
|
|
99
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2F2ZS5zcGVjLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vZGVzY3JpcHRvci9zYXZlLnNwZWMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQTtBQUN0QyxPQUFPLEtBQUssSUFBSSxNQUFNLFdBQVcsQ0FBQTtBQUNqQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxPQUFPLENBQUE7QUFDMUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsTUFBTSxRQUFRLENBQUE7QUFDcEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLFdBQVcsQ0FBQTtBQUUxQyxRQUFRLENBQUMsZ0JBQWdCLEVBQUUsR0FBRyxFQUFFO0lBQzlCLE1BQU0sY0FBYyxHQUFHO1FBQ3JCLElBQUksRUFBRSxpQkFBaUI7UUFDdkIsT0FBTyxFQUFFLE9BQU87UUFDaEIsV0FBVyxFQUFFLG1DQUFtQztRQUNoRCxTQUFTLEVBQUU7WUFDVDtnQkFDRSxJQUFJLEVBQUUsV0FBVztnQkFDakIsSUFBSSxFQUFFLG9CQUFvQjthQUMzQjtTQUNGO0tBQ0YsQ0FBQTtJQUVELElBQUksT0FBZSxDQUFBO0lBQ25CLElBQUksUUFBZ0IsQ0FBQTtJQUVwQixVQUFVLENBQUMsR0FBRyxFQUFFO1FBQ2QsT0FBTyxHQUFHLGtCQUFrQixFQUFFLENBQUE7UUFDOUIsUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLGlCQUFpQixDQUFDLENBQUE7SUFDbEQsQ0FBQyxDQUFDLENBQUE7SUFFRixTQUFTLENBQUMsS0FBSyxJQUFJLEVBQUU7UUFDbkIsSUFBSSxDQUFDO1lBQ0gsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUE7UUFDeEQs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RUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQTtRQUUzRCxNQUFNLGNBQWMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFBO1FBQzNELE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUE7UUFDaEQsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFBO1FBRWhELE1BQU0sY0FBYyxDQUFDLGlCQUFpQixFQUFFO1lBQ3RDLElBQUksRUFBRSxRQUFRO1lBQ2QsU0FBUyxFQUFFLElBQUk7U0FDaEIsQ0FBQyxDQUFBO1FBRUYsTUFBTSxjQUFjLEdBQUcsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQTtRQUMzRCxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFBO1FBQ2hELE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsQ0FBQTtJQUNsRCxDQUFDLENBQUMsQ0FBQTtBQUNKLENBQUMsQ0FBQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgZnMgZnJvbSBcIm5vZGU6ZnMvcHJvbWlzZXNcIlxuaW1wb3J0ICogYXMgcGF0aCBmcm9tIFwibm9kZTpwYXRoXCJcbmltcG9ydCB7IHRlbXBvcmFyeURpcmVjdG9yeSB9IGZyb20gXCJ0ZW1weVwiXG5pbXBvcnQgeyBhZnRlckVhY2gsIGJlZm9yZUVhY2gsIGRlc2NyaWJlLCBleHBlY3QsIGl0IH0gZnJvbSBcInZpdGVzdFwiXG5pbXBvcnQgeyBzYXZlRGVzY3JpcHRvciB9IGZyb20gXCIuL3NhdmUudHNcIlxuXG5kZXNjcmliZShcInNhdmVEZXNjcmlwdG9yXCIsICgpID0+IHtcbiAgY29uc3QgdGVzdERlc2NyaXB0b3IgPSB7XG4gICAgbmFtZTogXCJ0ZXN0LWRlc2NyaXB0b3JcIixcbiAgICB2ZXJzaW9uOiBcIjEuMC4wXCIsXG4gICAgZGVzY3JpcHRpb246IFwiVGVzdCBkZXNjcmlwdG9yIGZvciBzYXZlIGZ1bmN0aW9uXCIsXG4gICAgcmVzb3VyY2VzOiBbXG4gICAgICB7XG4gICAgICAgIG5hbWU6IFwicmVzb3VyY2UxXCIsXG4gICAgICAgIHBhdGg6IFwiZGF0YS9yZXNvdXJjZTEuY3N2XCIsXG4gICAgICB9LFxuICAgIF0sXG4gIH1cblxuICBsZXQgdGVzdERpcjogc3RyaW5nXG4gIGxldCB0ZXN0UGF0aDogc3RyaW5nXG5cbiAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgdGVzdERpciA9IHRlbXBvcmFyeURpcmVjdG9yeSgpXG4gICAgdGVzdFBhdGggPSBwYXRoLmpvaW4odGVzdERpciwgXCJkZXNjcmlwdG9yLmpzb25cIilcbiAgfSlcblxuICBhZnRlckVhY2goYXN5bmMgKCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBmcy5ybSh0ZXN0RGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSwgZm9yY2U6IHRydWUgfSlcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IgJiYgIWVycm9yLm1lc3NhZ2UuaW5jbHVkZXMoXCJFTk9FTlRcIikpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgRmFpbGVkIHRvIGNsZWFuIHVwIHRlc3QgZGlyZWN0b3J5OiAke3Rlc3REaXJ9YCwgZXJyb3IpXG4gICAgICB9XG4gICAgfVxuICB9KVxuXG4gIGl0KFwic2hvdWxkIHNhdmUgYSBkZXNjcmlwdG9yIHRvIHRoZSBzcGVjaWZpZWQgcGF0aFwiLCBhc3luYyAoKSA9PiB7XG4gICAgYXdhaXQgc2F2ZURlc2NyaXB0b3IodGVzdERlc2NyaXB0b3IsIHsgcGF0aDogdGVzdFBhdGggfSlcblxuICAgIGNvbnN0IGZpbGVFeGlzdHMgPSBhd2FpdCBmc1xuICAgICAgLnN0YXQodGVzdFBhdGgpXG4gICAgICAudGhlbigoKSA9PiB0cnVlKVxuICAgICAgLmNhdGNoKCgpID0+IGZhbHNlKVxuICAgIGV4cGVjdChmaWxlRXhpc3RzKS50b0JlKHRydWUpXG5cbiAgICBjb25zdCBjb250ZW50ID0gYXdhaXQgZnMucmVhZEZpbGUodGVzdFBhdGgsIFwidXRmLThcIilcbiAgICBjb25zdCBwYXJzZWRDb250ZW50ID0gSlNPTi5wYXJzZShjb250ZW50KVxuICAgIGV4cGVjdChwYXJzZWRDb250ZW50KS50b0VxdWFsKHRlc3REZXNjcmlwdG9yKVxuICB9KVxuXG4gIGl0KFwic2hvdWxkIHNhdmUgYSBkZXNjcmlwdG9yIHRvIGEgbmVzdGVkIGRpcmVjdG9yeSBwYXRoXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBuZXN0ZWRQYXRoID0gcGF0aC5qb2luKHRlc3REaXIsIFwibmVzdGVkXCIsIFwiZGlyXCIsIFwiZGVzY3JpcHRvci5qc29uXCIpXG5cbiAgICBhd2FpdCBzYXZlRGVzY3JpcHRvcih0ZXN0RGVzY3JpcHRvciwgeyBwYXRoOiBuZXN0ZWRQYXRoIH0pXG5cbiAgICBjb25zdCBmaWxlRXhpc3RzID0gYXdhaXQgZnNcbiAgICAgIC5zdGF0KG5lc3RlZFBhdGgpXG4gICAgICAudGhlbigoKSA9PiB0cnVlKVxuICAgICAgLmNhdGNoKCgpID0+IGZhbHNlKVxuICAgIGV4cGVjdChmaWxlRXhpc3RzKS50b0JlKHRydWUpXG5cbiAgICBjb25zdCBjb250ZW50ID0gYXdhaXQgZnMucmVhZEZpbGUobmVzdGVkUGF0aCwgXCJ1dGYtOFwiKVxuICAgIGNvbnN0IHBhcnNlZENvbnRlbnQgPSBKU09OLnBhcnNlKGNvbnRlbnQpXG4gICAgZXhwZWN0KHBhcnNlZENvbnRlbnQpLnRvRXF1YWwodGVzdERlc2NyaXB0b3IpXG4gIH0pXG5cbiAgaXQoXCJzaG91bGQgdXNlIHByZXR0eSBmb3JtYXR0aW5nIHdpdGggMi1zcGFjZSBpbmRlbnRhdGlvblwiLCBhc3luYyAoKSA9PiB7XG4gICAgYXdhaXQgc2F2ZURlc2NyaXB0b3IodGVzdERlc2NyaXB0b3IsIHsgcGF0aDogdGVzdFBhdGggfSlcblxuICAgIGNvbnN0IGNvbnRlbnQgPSBhd2FpdCBmcy5yZWFkRmlsZSh0ZXN0UGF0aCwgXCJ1dGYtOFwiKVxuICAgIGNvbnN0IGV4cGVjdGVkRm9ybWF0ID0gSlNPTi5zdHJpbmdpZnkodGVzdERlc2NyaXB0b3IsIG51bGwsIDIpXG4gICAgZXhwZWN0KGNvbnRlbnQpLnRvRXF1YWwoZXhwZWN0ZWRGb3JtYXQpXG5cbiAgICBjb25zdCBsaW5lcyA9IGNvbnRlbnQuc3BsaXQoXCJcXG5cIilcbiAgICBleHBlY3QobGluZXMubGVuZ3RoKS50b0JlR3JlYXRlclRoYW4oMSlcblxuICAgIGlmIChsaW5lcy5sZW5ndGggPiAxICYmIGxpbmVzWzFdKSB7XG4gICAgICBleHBlY3QobGluZXNbMV0uc3RhcnRzV2l0aChcIiAgXCIpKS50b0JlKHRydWUpXG4gICAgfVxuICB9KVxuXG4gIGl0KFwic2hvdWxkIHRocm93IGFuIGVycm9yIHdoZW4gZmlsZSBleGlzdHMgYW5kIG92ZXJ3cml0ZSBpcyBmYWxzZVwiLCBhc3luYyAoKSA9PiB7XG4gICAgYXdhaXQgc2F2ZURlc2NyaXB0b3IodGVzdERlc2NyaXB0b3IsIHsgcGF0aDogdGVzdFBhdGggfSlcblxuICAgIGF3YWl0IGV4cGVjdChcbiAgICAgIHNhdmVEZXNjcmlwdG9yKHRlc3REZXNjcmlwdG9yLCB7IHBhdGg6IHRlc3RQYXRoLCBvdmVyd3JpdGU6IGZhbHNlIH0pLFxuICAgICkucmVqZWN0cy50b1Rocm93KClcbiAgfSlcblxuICBpdChcInNob3VsZCB0aHJvdyBhbiBlcnJvciB3aGVuIGZpbGUgZXhpc3RzIGFuZCBvdmVyd3JpdGUgaXMgbm90IHNwZWNpZmllZFwiLCBhc3luYyAoKSA9PiB7XG4gICAgYXdhaXQgc2F2ZURlc2NyaXB0b3IodGVzdERlc2NyaXB0b3IsIHsgcGF0aDogdGVzdFBhdGggfSlcblxuICAgIGF3YWl0IGV4cGVjdChcbiAgICAgIHNhdmVEZXNjcmlwdG9yKHRlc3REZXNjcmlwdG9yLCB7IHBhdGg6IHRlc3RQYXRoIH0pLFxuICAgICkucmVqZWN0cy50b1Rocm93KClcbiAgfSlcblxuICBpdChcInNob3VsZCBvdmVyd3JpdGUgZXhpc3RpbmcgZmlsZSB3aGVuIG92ZXJ3cml0ZSBpcyB0cnVlXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBpbml0aWFsRGVzY3JpcHRvciA9IHtcbiAgICAgIG5hbWU6IFwiaW5pdGlhbFwiLFxuICAgICAgdmVyc2lvbjogXCIxLjAuMFwiLFxuICAgIH1cblxuICAgIGNvbnN0IHVwZGF0ZWREZXNjcmlwdG9yID0ge1xuICAgICAgbmFtZTogXCJ1cGRhdGVkXCIsXG4gICAgICB2ZXJzaW9uOiBcIjIuMC4wXCIsXG4gICAgICBkZXNjcmlwdGlvbjogXCJVcGRhdGVkIGRlc2NyaXB0b3JcIixcbiAgICB9XG5cbiAgICBhd2FpdCBzYXZlRGVzY3JpcHRvcihpbml0aWFsRGVzY3JpcHRvciwgeyBwYXRoOiB0ZXN0UGF0aCB9KVxuXG4gICAgY29uc3QgaW5pdGlhbENvbnRlbnQgPSBhd2FpdCBmcy5yZWFkRmlsZSh0ZXN0UGF0aCwgXCJ1dGYtOFwiKVxuICAgIGNvbnN0IGluaXRpYWxQYXJzZWQgPSBKU09OLnBhcnNlKGluaXRpYWxDb250ZW50KVxuICAgIGV4cGVjdChpbml0aWFsUGFyc2VkKS50b0VxdWFsKGluaXRpYWxEZXNjcmlwdG9yKVxuXG4gICAgYXdhaXQgc2F2ZURlc2NyaXB0b3IodXBkYXRlZERlc2NyaXB0b3IsIHtcbiAgICAgIHBhdGg6IHRlc3RQYXRoLFxuICAgICAgb3ZlcndyaXRlOiB0cnVlLFxuICAgIH0pXG5cbiAgICBjb25zdCB1cGRhdGVkQ29udGVudCA9IGF3YWl0IGZzLnJlYWRGaWxlKHRlc3RQYXRoLCBcInV0Zi04XCIpXG4gICAgY29uc3QgdXBkYXRlZFBhcnNlZCA9IEpTT04ucGFyc2UodXBkYXRlZENvbnRlbnQpXG4gICAgZXhwZWN0KHVwZGF0ZWRQYXJzZWQpLnRvRXF1YWwodXBkYXRlZERlc2NyaXB0b3IpXG4gIH0pXG59KVxuIl19
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import type { Metadata } from "../metadata/index.ts";
|
|
2
|
+
/**
|
|
3
|
+
* Descriptor that describes the structure of tabular data, such as delimiters,
|
|
4
|
+
* headers, and other features. Following the Data Package standard:
|
|
5
|
+
* https://datapackage.org/standard/table-dialect/
|
|
6
|
+
*/
|
|
7
|
+
export interface Dialect extends Metadata {
|
|
8
|
+
/**
|
|
9
|
+
* JSON schema profile URL for validation
|
|
10
|
+
*/
|
|
11
|
+
$schema?: string;
|
|
12
|
+
/**
|
|
13
|
+
* The name of this dialect
|
|
14
|
+
*/
|
|
15
|
+
name?: string;
|
|
16
|
+
/**
|
|
17
|
+
* Whether the file includes a header row with field names
|
|
18
|
+
*/
|
|
19
|
+
header?: boolean;
|
|
20
|
+
/**
|
|
21
|
+
* Row numbers (zero-based) that are considered header rows
|
|
22
|
+
*/
|
|
23
|
+
headerRows?: number[];
|
|
24
|
+
/**
|
|
25
|
+
* The character used to join multi-line headers
|
|
26
|
+
*/
|
|
27
|
+
headerJoin?: string;
|
|
28
|
+
/**
|
|
29
|
+
* Specific rows to be excluded from the data (zero-based)
|
|
30
|
+
*/
|
|
31
|
+
commentRows?: number[];
|
|
32
|
+
/**
|
|
33
|
+
* Character sequence denoting the start of a comment line
|
|
34
|
+
*/
|
|
35
|
+
commentChar?: string;
|
|
36
|
+
/**
|
|
37
|
+
* The character used to separate fields in the data
|
|
38
|
+
*/
|
|
39
|
+
delimiter?: string;
|
|
40
|
+
/**
|
|
41
|
+
* Character sequence used to terminate rows
|
|
42
|
+
*/
|
|
43
|
+
lineTerminator?: string;
|
|
44
|
+
/**
|
|
45
|
+
* Character used to quote fields
|
|
46
|
+
*/
|
|
47
|
+
quoteChar?: string;
|
|
48
|
+
/**
|
|
49
|
+
* Controls whether a sequence of two quote characters represents a single quote
|
|
50
|
+
*/
|
|
51
|
+
doubleQuote?: boolean;
|
|
52
|
+
/**
|
|
53
|
+
* Character used to escape the delimiter or quote characters
|
|
54
|
+
*/
|
|
55
|
+
escapeChar?: string;
|
|
56
|
+
/**
|
|
57
|
+
* Character sequence representing null or missing values in the data
|
|
58
|
+
*/
|
|
59
|
+
nullSequence?: string;
|
|
60
|
+
/**
|
|
61
|
+
* Whether to ignore whitespace immediately following the delimiter
|
|
62
|
+
*/
|
|
63
|
+
skipInitialSpace?: boolean;
|
|
64
|
+
/**
|
|
65
|
+
* For JSON data, the property name containing the data array
|
|
66
|
+
*/
|
|
67
|
+
property?: string;
|
|
68
|
+
/**
|
|
69
|
+
* The type of data item in the source: 'array' for rows represented as arrays,
|
|
70
|
+
* or 'object' for rows represented as objects
|
|
71
|
+
*/
|
|
72
|
+
itemType?: "array" | "object";
|
|
73
|
+
/**
|
|
74
|
+
* For object-based data items, specifies which object properties to extract as values
|
|
75
|
+
*/
|
|
76
|
+
itemKeys?: string[];
|
|
77
|
+
/**
|
|
78
|
+
* For spreadsheet data, the sheet number to read (zero-based)
|
|
79
|
+
*/
|
|
80
|
+
sheetNumber?: number;
|
|
81
|
+
/**
|
|
82
|
+
* For spreadsheet data, the sheet name to read
|
|
83
|
+
*/
|
|
84
|
+
sheetName?: string;
|
|
85
|
+
/**
|
|
86
|
+
* For database sources, the table name to read
|
|
87
|
+
*/
|
|
88
|
+
table?: string;
|
|
89
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGlhbGVjdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL2RpYWxlY3QvRGlhbGVjdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBNZXRhZGF0YSB9IGZyb20gXCIuLi9tZXRhZGF0YS9pbmRleC50c1wiXG5cbi8qKlxuICogRGVzY3JpcHRvciB0aGF0IGRlc2NyaWJlcyB0aGUgc3RydWN0dXJlIG9mIHRhYnVsYXIgZGF0YSwgc3VjaCBhcyBkZWxpbWl0ZXJzLFxuICogaGVhZGVycywgYW5kIG90aGVyIGZlYXR1cmVzLiBGb2xsb3dpbmcgdGhlIERhdGEgUGFja2FnZSBzdGFuZGFyZDpcbiAqIGh0dHBzOi8vZGF0YXBhY2thZ2Uub3JnL3N0YW5kYXJkL3RhYmxlLWRpYWxlY3QvXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGlhbGVjdCBleHRlbmRzIE1ldGFkYXRhIHtcbiAgLyoqXG4gICAqIEpTT04gc2NoZW1hIHByb2ZpbGUgVVJMIGZvciB2YWxpZGF0aW9uXG4gICAqL1xuICAkc2NoZW1hPzogc3RyaW5nXG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoaXMgZGlhbGVjdFxuICAgKi9cbiAgbmFtZT86IHN0cmluZ1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBmaWxlIGluY2x1ZGVzIGEgaGVhZGVyIHJvdyB3aXRoIGZpZWxkIG5hbWVzXG4gICAqL1xuICBoZWFkZXI/OiBib29sZWFuXG5cbiAgLyoqXG4gICAqIFJvdyBudW1iZXJzICh6ZXJvLWJhc2VkKSB0aGF0IGFyZSBjb25zaWRlcmVkIGhlYWRlciByb3dzXG4gICAqL1xuICBoZWFkZXJSb3dzPzogbnVtYmVyW11cblxuICAvKipcbiAgICogVGhlIGNoYXJhY3RlciB1c2VkIHRvIGpvaW4gbXVsdGktbGluZSBoZWFkZXJzXG4gICAqL1xuICBoZWFkZXJKb2luPzogc3RyaW5nXG5cbiAgLyoqXG4gICAqIFNwZWNpZmljIHJvd3MgdG8gYmUgZXhjbHVkZWQgZnJvbSB0aGUgZGF0YSAoemVyby1iYXNlZClcbiAgICovXG4gIGNvbW1lbnRSb3dzPzogbnVtYmVyW11cblxuICAvKipcbiAgICogQ2hhcmFjdGVyIHNlcXVlbmNlIGRlbm90aW5nIHRoZSBzdGFydCBvZiBhIGNvbW1lbnQgbGluZVxuICAgKi9cbiAgY29tbWVudENoYXI/OiBzdHJpbmdcblxuICAvKipcbiAgICogVGhlIGNoYXJhY3RlciB1c2VkIHRvIHNlcGFyYXRlIGZpZWxkcyBpbiB0aGUgZGF0YVxuICAgKi9cbiAgZGVsaW1pdGVyPzogc3RyaW5nXG5cbiAgLyoqXG4gICAqIENoYXJhY3RlciBzZXF1ZW5jZSB1c2VkIHRvIHRlcm1pbmF0ZSByb3dzXG4gICAqL1xuICBsaW5lVGVybWluYXRvcj86IHN0cmluZ1xuXG4gIC8qKlxuICAgKiBDaGFyYWN0ZXIgdXNlZCB0byBxdW90ZSBmaWVsZHNcbiAgICovXG4gIHF1b3RlQ2hhcj86IHN0cmluZ1xuXG4gIC8qKlxuICAgKiBDb250cm9scyB3aGV0aGVyIGEgc2VxdWVuY2Ugb2YgdHdvIHF1b3RlIGNoYXJhY3RlcnMgcmVwcmVzZW50cyBhIHNpbmdsZSBxdW90ZVxuICAgKi9cbiAgZG91YmxlUXVvdGU/OiBib29sZWFuXG5cbiAgLyoqXG4gICAqIENoYXJhY3RlciB1c2VkIHRvIGVzY2FwZSB0aGUgZGVsaW1pdGVyIG9yIHF1b3RlIGNoYXJhY3RlcnNcbiAgICovXG4gIGVzY2FwZUNoYXI/OiBzdHJpbmdcblxuICAvKipcbiAgICogQ2hhcmFjdGVyIHNlcXVlbmNlIHJlcHJlc2VudGluZyBudWxsIG9yIG1pc3NpbmcgdmFsdWVzIGluIHRoZSBkYXRhXG4gICAqL1xuICBudWxsU2VxdWVuY2U/OiBzdHJpbmdcblxuICAvKipcbiAgICogV2hldGhlciB0byBpZ25vcmUgd2hpdGVzcGFjZSBpbW1lZGlhdGVseSBmb2xsb3dpbmcgdGhlIGRlbGltaXRlclxuICAgKi9cbiAgc2tpcEluaXRpYWxTcGFjZT86IGJvb2xlYW5cblxuICAvKipcbiAgICogRm9yIEpTT04gZGF0YSwgdGhlIHByb3BlcnR5IG5hbWUgY29udGFpbmluZyB0aGUgZGF0YSBhcnJheVxuICAgKi9cbiAgcHJvcGVydHk/OiBzdHJpbmdcblxuICAvKipcbiAgICogVGhlIHR5cGUgb2YgZGF0YSBpdGVtIGluIHRoZSBzb3VyY2U6ICdhcnJheScgZm9yIHJvd3MgcmVwcmVzZW50ZWQgYXMgYXJyYXlzLFxuICAgKiBvciAnb2JqZWN0JyBmb3Igcm93cyByZXByZXNlbnRlZCBhcyBvYmplY3RzXG4gICAqL1xuICBpdGVtVHlwZT86IFwiYXJyYXlcIiB8IFwib2JqZWN0XCJcblxuICAvKipcbiAgICogRm9yIG9iamVjdC1iYXNlZCBkYXRhIGl0ZW1zLCBzcGVjaWZpZXMgd2hpY2ggb2JqZWN0IHByb3BlcnRpZXMgdG8gZXh0cmFjdCBhcyB2YWx1ZXNcbiAgICovXG4gIGl0ZW1LZXlzPzogc3RyaW5nW11cblxuICAvKipcbiAgICogRm9yIHNwcmVhZHNoZWV0IGRhdGEsIHRoZSBzaGVldCBudW1iZXIgdG8gcmVhZCAoemVyby1iYXNlZClcbiAgICovXG4gIHNoZWV0TnVtYmVyPzogbnVtYmVyXG5cbiAgLyoqXG4gICAqIEZvciBzcHJlYWRzaGVldCBkYXRhLCB0aGUgc2hlZXQgbmFtZSB0byByZWFkXG4gICAqL1xuICBzaGVldE5hbWU/OiBzdHJpbmdcblxuICAvKipcbiAgICogRm9yIGRhdGFiYXNlIHNvdXJjZXMsIHRoZSB0YWJsZSBuYW1lIHRvIHJlYWRcbiAgICovXG4gIHRhYmxlPzogc3RyaW5nXG59XG4iXX0=
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { Descriptor } from "../descriptor/index.ts";
|
|
2
|
+
import type { Dialect } from "./Dialect.ts";
|
|
3
|
+
/**
|
|
4
|
+
* Assert a Dialect descriptor (JSON Object) against its profile
|
|
5
|
+
*/
|
|
6
|
+
export declare function assertDialect(source: Descriptor | Dialect): Promise<Dialect>;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { validateDialect } from "./validate.js";
|
|
2
|
+
/**
|
|
3
|
+
* Assert a Dialect descriptor (JSON Object) against its profile
|
|
4
|
+
*/
|
|
5
|
+
export async function assertDialect(source) {
|
|
6
|
+
const report = await validateDialect(source);
|
|
7
|
+
if (!report.dialect) {
|
|
8
|
+
throw new Error(`Dialect "${JSON.stringify(source).slice(0, 100)}" is not valid`);
|
|
9
|
+
}
|
|
10
|
+
return report.dialect;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXJ0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vZGlhbGVjdC9hc3NlcnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUUvQzs7R0FFRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsYUFBYSxDQUFDLE1BQTRCO0lBQzlELE1BQU0sTUFBTSxHQUFHLE1BQU0sZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBRTVDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDcEIsTUFBTSxJQUFJLEtBQUssQ0FDYixZQUFZLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsZ0JBQWdCLENBQ2pFLENBQUE7SUFDSCxDQUFDO0lBRUQsT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFBO0FBQ3ZCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IERlc2NyaXB0b3IgfSBmcm9tIFwiLi4vZGVzY3JpcHRvci9pbmRleC50c1wiXG5pbXBvcnQgdHlwZSB7IERpYWxlY3QgfSBmcm9tIFwiLi9EaWFsZWN0LnRzXCJcbmltcG9ydCB7IHZhbGlkYXRlRGlhbGVjdCB9IGZyb20gXCIuL3ZhbGlkYXRlLnRzXCJcblxuLyoqXG4gKiBBc3NlcnQgYSBEaWFsZWN0IGRlc2NyaXB0b3IgKEpTT04gT2JqZWN0KSBhZ2FpbnN0IGl0cyBwcm9maWxlXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhc3NlcnREaWFsZWN0KHNvdXJjZTogRGVzY3JpcHRvciB8IERpYWxlY3QpIHtcbiAgY29uc3QgcmVwb3J0ID0gYXdhaXQgdmFsaWRhdGVEaWFsZWN0KHNvdXJjZSlcblxuICBpZiAoIXJlcG9ydC5kaWFsZWN0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYERpYWxlY3QgXCIke0pTT04uc3RyaW5naWZ5KHNvdXJjZSkuc2xpY2UoMCwgMTAwKX1cIiBpcyBub3QgdmFsaWRgLFxuICAgIClcbiAgfVxuXG4gIHJldHVybiByZXBvcnQuZGlhbGVjdFxufVxuIl19
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { describe, expect, expectTypeOf, it } from "vitest";
|
|
2
|
+
import { assertDialect } from "./assert.js";
|
|
3
|
+
describe("assertDialect", () => {
|
|
4
|
+
it("returns typed dialect when valid", async () => {
|
|
5
|
+
const descriptor = {
|
|
6
|
+
delimiter: ";",
|
|
7
|
+
header: true,
|
|
8
|
+
skipInitialSpace: true,
|
|
9
|
+
};
|
|
10
|
+
const dialect = await assertDialect(descriptor);
|
|
11
|
+
expectTypeOf(dialect).toEqualTypeOf();
|
|
12
|
+
expect(dialect).toEqual(descriptor);
|
|
13
|
+
});
|
|
14
|
+
it("throws Error when dialect is invalid", async () => {
|
|
15
|
+
const invalidDialect = {
|
|
16
|
+
delimiter: 1,
|
|
17
|
+
header: "yes",
|
|
18
|
+
};
|
|
19
|
+
await expect(assertDialect(invalidDialect)).rejects.toThrow(Error);
|
|
20
|
+
});
|
|
21
|
+
});
|
|
22
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXJ0LnNwZWMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9kaWFsZWN0L2Fzc2VydC5zcGVjLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxFQUFFLEVBQUUsTUFBTSxRQUFRLENBQUE7QUFFM0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGFBQWEsQ0FBQTtBQUUzQyxRQUFRLENBQUMsZUFBZSxFQUFFLEdBQUcsRUFBRTtJQUM3QixFQUFFLENBQUMsa0NBQWtDLEVBQUUsS0FBSyxJQUFJLEVBQUU7UUFDaEQsTUFBTSxVQUFVLEdBQUc7WUFDakIsU0FBUyxFQUFFLEdBQUc7WUFDZCxNQUFNLEVBQUUsSUFBSTtZQUNaLGdCQUFnQixFQUFFLElBQUk7U0FDdkIsQ0FBQTtRQUVELE1BQU0sT0FBTyxHQUFHLE1BQU0sYUFBYSxDQUFDLFVBQVUsQ0FBQyxDQUFBO1FBRS9DLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQyxhQUFhLEVBQVcsQ0FBQTtRQUM5QyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFBO0lBQ3JDLENBQUMsQ0FBQyxDQUFBO0lBRUYsRUFBRSxDQUFDLHNDQUFzQyxFQUFFLEtBQUssSUFBSSxFQUFFO1FBQ3BELE1BQU0sY0FBYyxHQUFHO1lBQ3JCLFNBQVMsRUFBRSxDQUFDO1lBQ1osTUFBTSxFQUFFLEtBQUs7U0FDZCxDQUFBO1FBRUQsTUFBTSxNQUFNLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUNwRSxDQUFDLENBQUMsQ0FBQTtBQUNKLENBQUMsQ0FBQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZGVzY3JpYmUsIGV4cGVjdCwgZXhwZWN0VHlwZU9mLCBpdCB9IGZyb20gXCJ2aXRlc3RcIlxuaW1wb3J0IHR5cGUgeyBEaWFsZWN0IH0gZnJvbSBcIi4vRGlhbGVjdC50c1wiXG5pbXBvcnQgeyBhc3NlcnREaWFsZWN0IH0gZnJvbSBcIi4vYXNzZXJ0LnRzXCJcblxuZGVzY3JpYmUoXCJhc3NlcnREaWFsZWN0XCIsICgpID0+IHtcbiAgaXQoXCJyZXR1cm5zIHR5cGVkIGRpYWxlY3Qgd2hlbiB2YWxpZFwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgZGVzY3JpcHRvciA9IHtcbiAgICAgIGRlbGltaXRlcjogXCI7XCIsXG4gICAgICBoZWFkZXI6IHRydWUsXG4gICAgICBza2lwSW5pdGlhbFNwYWNlOiB0cnVlLFxuICAgIH1cblxuICAgIGNvbnN0IGRpYWxlY3QgPSBhd2FpdCBhc3NlcnREaWFsZWN0KGRlc2NyaXB0b3IpXG5cbiAgICBleHBlY3RUeXBlT2YoZGlhbGVjdCkudG9FcXVhbFR5cGVPZjxEaWFsZWN0PigpXG4gICAgZXhwZWN0KGRpYWxlY3QpLnRvRXF1YWwoZGVzY3JpcHRvcilcbiAgfSlcblxuICBpdChcInRocm93cyBFcnJvciB3aGVuIGRpYWxlY3QgaXMgaW52YWxpZFwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgaW52YWxpZERpYWxlY3QgPSB7XG4gICAgICBkZWxpbWl0ZXI6IDEsXG4gICAgICBoZWFkZXI6IFwieWVzXCIsXG4gICAgfVxuXG4gICAgYXdhaXQgZXhwZWN0KGFzc2VydERpYWxlY3QoaW52YWxpZERpYWxlY3QpKS5yZWplY3RzLnRvVGhyb3coRXJyb3IpXG4gIH0pXG59KVxuIl19
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export function convertDialectFromDescriptor(descriptor) {
|
|
2
|
+
descriptor = globalThis.structuredClone(descriptor);
|
|
3
|
+
convertProfile(descriptor);
|
|
4
|
+
convertTable(descriptor);
|
|
5
|
+
return descriptor;
|
|
6
|
+
}
|
|
7
|
+
function convertProfile(descriptor) {
|
|
8
|
+
descriptor.$schema = descriptor.$schema ?? descriptor.profile;
|
|
9
|
+
}
|
|
10
|
+
function convertTable(descriptor) {
|
|
11
|
+
const table = descriptor.table;
|
|
12
|
+
if (!table) {
|
|
13
|
+
return;
|
|
14
|
+
}
|
|
15
|
+
if (typeof table !== "string") {
|
|
16
|
+
descriptor.table = undefined;
|
|
17
|
+
console.warn(`Ignoring v2.0 incompatible dialect table: ${table}`);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnJvbURlc2NyaXB0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9kaWFsZWN0L2NvbnZlcnQvZnJvbURlc2NyaXB0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsTUFBTSxVQUFVLDRCQUE0QixDQUFDLFVBQXNCO0lBQ2pFLFVBQVUsR0FBRyxVQUFVLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxDQUFBO0lBRW5ELGNBQWMsQ0FBQyxVQUFVLENBQUMsQ0FBQTtJQUMxQixZQUFZLENBQUMsVUFBVSxDQUFDLENBQUE7SUFFeEIsT0FBTyxVQUFVLENBQUE7QUFDbkIsQ0FBQztBQUVELFNBQVMsY0FBYyxDQUFDLFVBQXNCO0lBQzVDLFVBQVUsQ0FBQyxPQUFPLEdBQUcsVUFBVSxDQUFDLE9BQU8sSUFBSSxVQUFVLENBQUMsT0FBTyxDQUFBO0FBQy9ELENBQUM7QUFFRCxTQUFTLFlBQVksQ0FBQyxVQUFzQjtJQUMxQyxNQUFNLEtBQUssR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFBO0lBQzlCLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNYLE9BQU07SUFDUixDQUFDO0lBRUQsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUM5QixVQUFVLENBQUMsS0FBSyxHQUFHLFNBQVMsQ0FBQTtRQUM1QixPQUFPLENBQUMsSUFBSSxDQUFDLDZDQUE2QyxLQUFLLEVBQUUsQ0FBQyxDQUFBO0lBQ3BFLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBEZXNjcmlwdG9yIH0gZnJvbSBcIi4uLy4uL2Rlc2NyaXB0b3IvaW5kZXgudHNcIlxuXG5leHBvcnQgZnVuY3Rpb24gY29udmVydERpYWxlY3RGcm9tRGVzY3JpcHRvcihkZXNjcmlwdG9yOiBEZXNjcmlwdG9yKSB7XG4gIGRlc2NyaXB0b3IgPSBnbG9iYWxUaGlzLnN0cnVjdHVyZWRDbG9uZShkZXNjcmlwdG9yKVxuXG4gIGNvbnZlcnRQcm9maWxlKGRlc2NyaXB0b3IpXG4gIGNvbnZlcnRUYWJsZShkZXNjcmlwdG9yKVxuXG4gIHJldHVybiBkZXNjcmlwdG9yXG59XG5cbmZ1bmN0aW9uIGNvbnZlcnRQcm9maWxlKGRlc2NyaXB0b3I6IERlc2NyaXB0b3IpIHtcbiAgZGVzY3JpcHRvci4kc2NoZW1hID0gZGVzY3JpcHRvci4kc2NoZW1hID8/IGRlc2NyaXB0b3IucHJvZmlsZVxufVxuXG5mdW5jdGlvbiBjb252ZXJ0VGFibGUoZGVzY3JpcHRvcjogRGVzY3JpcHRvcikge1xuICBjb25zdCB0YWJsZSA9IGRlc2NyaXB0b3IudGFibGVcbiAgaWYgKCF0YWJsZSkge1xuICAgIHJldHVyblxuICB9XG5cbiAgaWYgKHR5cGVvZiB0YWJsZSAhPT0gXCJzdHJpbmdcIikge1xuICAgIGRlc2NyaXB0b3IudGFibGUgPSB1bmRlZmluZWRcbiAgICBjb25zb2xlLndhcm4oYElnbm9yaW5nIHYyLjAgaW5jb21wYXRpYmxlIGRpYWxlY3QgdGFibGU6ICR7dGFibGV9YClcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export function convertDialectToDescriptor(dialect) {
|
|
2
|
+
dialect = globalThis.structuredClone(dialect);
|
|
3
|
+
return dialect;
|
|
4
|
+
}
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9EZXNjcmlwdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vZGlhbGVjdC9jb252ZXJ0L3RvRGVzY3JpcHRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxNQUFNLFVBQVUsMEJBQTBCLENBQUMsT0FBZ0I7SUFDekQsT0FBTyxHQUFHLFVBQVUsQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUE7SUFFN0MsT0FBTyxPQUFxQixDQUFBO0FBQzlCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IERlc2NyaXB0b3IgfSBmcm9tIFwiLi4vLi4vZGVzY3JpcHRvci9pbmRleC50c1wiXG5pbXBvcnQgdHlwZSB7IERpYWxlY3QgfSBmcm9tIFwiLi4vRGlhbGVjdC50c1wiXG5cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0RGlhbGVjdFRvRGVzY3JpcHRvcihkaWFsZWN0OiBEaWFsZWN0KSB7XG4gIGRpYWxlY3QgPSBnbG9iYWxUaGlzLnN0cnVjdHVyZWRDbG9uZShkaWFsZWN0KVxuXG4gIHJldHVybiBkaWFsZWN0IGFzIERlc2NyaXB0b3Jcbn1cbiJdfQ==
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export { assertDialect } from "./assert.ts";
|
|
2
|
+
export { validateDialect } from "./validate.ts";
|
|
3
|
+
export type { Dialect } from "./Dialect.ts";
|
|
4
|
+
export { loadDialect } from "./load.ts";
|
|
5
|
+
export { saveDialect } from "./save.ts";
|
|
6
|
+
export { convertDialectFromDescriptor } from "./convert/fromDescriptor.ts";
|
|
7
|
+
export { convertDialectToDescriptor } from "./convert/toDescriptor.ts";
|
|
8
|
+
export { resolveDialect } from "./resolve.ts";
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export { assertDialect } from "./assert.js";
|
|
2
|
+
export { validateDialect } from "./validate.js";
|
|
3
|
+
export { loadDialect } from "./load.js";
|
|
4
|
+
export { saveDialect } from "./save.js";
|
|
5
|
+
export { convertDialectFromDescriptor } from "./convert/fromDescriptor.js";
|
|
6
|
+
export { convertDialectToDescriptor } from "./convert/toDescriptor.js";
|
|
7
|
+
export { resolveDialect } from "./resolve.js";
|
|
8
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9kaWFsZWN0L2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxhQUFhLENBQUE7QUFDM0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUUvQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sV0FBVyxDQUFBO0FBQ3ZDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxXQUFXLENBQUE7QUFDdkMsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sNkJBQTZCLENBQUE7QUFDMUUsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sMkJBQTJCLENBQUE7QUFDdEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGNBQWMsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7IGFzc2VydERpYWxlY3QgfSBmcm9tIFwiLi9hc3NlcnQudHNcIlxuZXhwb3J0IHsgdmFsaWRhdGVEaWFsZWN0IH0gZnJvbSBcIi4vdmFsaWRhdGUudHNcIlxuZXhwb3J0IHR5cGUgeyBEaWFsZWN0IH0gZnJvbSBcIi4vRGlhbGVjdC50c1wiXG5leHBvcnQgeyBsb2FkRGlhbGVjdCB9IGZyb20gXCIuL2xvYWQudHNcIlxuZXhwb3J0IHsgc2F2ZURpYWxlY3QgfSBmcm9tIFwiLi9zYXZlLnRzXCJcbmV4cG9ydCB7IGNvbnZlcnREaWFsZWN0RnJvbURlc2NyaXB0b3IgfSBmcm9tIFwiLi9jb252ZXJ0L2Zyb21EZXNjcmlwdG9yLnRzXCJcbmV4cG9ydCB7IGNvbnZlcnREaWFsZWN0VG9EZXNjcmlwdG9yIH0gZnJvbSBcIi4vY29udmVydC90b0Rlc2NyaXB0b3IudHNcIlxuZXhwb3J0IHsgcmVzb2x2ZURpYWxlY3QgfSBmcm9tIFwiLi9yZXNvbHZlLnRzXCJcbiJdfQ==
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { loadDescriptor } from "../descriptor/index.js";
|
|
2
|
+
import { assertDialect } from "./assert.js";
|
|
3
|
+
/**
|
|
4
|
+
* Load a Dialect descriptor (JSON Object) from a file or URL
|
|
5
|
+
* Ensures the descriptor is valid against its profile
|
|
6
|
+
*/
|
|
7
|
+
export async function loadDialect(path) {
|
|
8
|
+
const descriptor = await loadDescriptor(path);
|
|
9
|
+
const dialect = await assertDialect(descriptor);
|
|
10
|
+
return dialect;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL2RpYWxlY3QvbG9hZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sd0JBQXdCLENBQUE7QUFDdkQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGFBQWEsQ0FBQTtBQUUzQzs7O0dBR0c7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLFdBQVcsQ0FBQyxJQUFZO0lBQzVDLE1BQU0sVUFBVSxHQUFHLE1BQU0sY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFBO0lBQzdDLE1BQU0sT0FBTyxHQUFHLE1BQU0sYUFBYSxDQUFDLFVBQVUsQ0FBQyxDQUFBO0lBQy9DLE9BQU8sT0FBTyxDQUFBO0FBQ2hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBsb2FkRGVzY3JpcHRvciB9IGZyb20gXCIuLi9kZXNjcmlwdG9yL2luZGV4LnRzXCJcbmltcG9ydCB7IGFzc2VydERpYWxlY3QgfSBmcm9tIFwiLi9hc3NlcnQudHNcIlxuXG4vKipcbiAqIExvYWQgYSBEaWFsZWN0IGRlc2NyaXB0b3IgKEpTT04gT2JqZWN0KSBmcm9tIGEgZmlsZSBvciBVUkxcbiAqIEVuc3VyZXMgdGhlIGRlc2NyaXB0b3IgaXMgdmFsaWQgYWdhaW5zdCBpdHMgcHJvZmlsZVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbG9hZERpYWxlY3QocGF0aDogc3RyaW5nKSB7XG4gIGNvbnN0IGRlc2NyaXB0b3IgPSBhd2FpdCBsb2FkRGVzY3JpcHRvcihwYXRoKVxuICBjb25zdCBkaWFsZWN0ID0gYXdhaXQgYXNzZXJ0RGlhbGVjdChkZXNjcmlwdG9yKVxuICByZXR1cm4gZGlhbGVjdFxufVxuIl19
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { join } from "node:path";
|
|
2
|
+
import { describe, expect, expectTypeOf, it } from "vitest";
|
|
3
|
+
import { loadDialect } from "./load.js";
|
|
4
|
+
describe("loadDialect", async () => {
|
|
5
|
+
const getFixturePath = (name) => join(import.meta.dirname, "fixtures", name);
|
|
6
|
+
const descriptor = {
|
|
7
|
+
delimiter: ";",
|
|
8
|
+
};
|
|
9
|
+
it("loads a dialect from a local file path", async () => {
|
|
10
|
+
const dialect = await loadDialect(getFixturePath("dialect.json"));
|
|
11
|
+
expectTypeOf(dialect).toEqualTypeOf();
|
|
12
|
+
expect(dialect).toEqual(descriptor);
|
|
13
|
+
});
|
|
14
|
+
it("throws an error when dialect is invalid", async () => {
|
|
15
|
+
await expect(loadDialect(getFixturePath("dialect-invalid.json"))).rejects.toThrow();
|
|
16
|
+
});
|
|
17
|
+
});
|
|
18
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZC5zcGVjLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vZGlhbGVjdC9sb2FkLnNwZWMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLFdBQVcsQ0FBQTtBQUNoQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsRUFBRSxFQUFFLE1BQU0sUUFBUSxDQUFBO0FBRTNELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxXQUFXLENBQUE7QUFFdkMsUUFBUSxDQUFDLGFBQWEsRUFBRSxLQUFLLElBQUksRUFBRTtJQUNqQyxNQUFNLGNBQWMsR0FBRyxDQUFDLElBQVksRUFBRSxFQUFFLENBQ3RDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxVQUFVLEVBQUUsSUFBSSxDQUFDLENBQUE7SUFDN0MsTUFBTSxVQUFVLEdBQUc7UUFDakIsU0FBUyxFQUFFLEdBQUc7S0FDZixDQUFBO0lBRUQsRUFBRSxDQUFDLHdDQUF3QyxFQUFFLEtBQUssSUFBSSxFQUFFO1FBQ3RELE1BQU0sT0FBTyxHQUFHLE1BQU0sV0FBVyxDQUFDLGNBQWMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFBO1FBQ2pFLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQyxhQUFhLEVBQVcsQ0FBQTtRQUM5QyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFBO0lBQ3JDLENBQUMsQ0FBQyxDQUFBO0lBRUYsRUFBRSxDQUFDLHlDQUF5QyxFQUFFLEtBQUssSUFBSSxFQUFFO1FBQ3ZELE1BQU0sTUFBTSxDQUNWLFdBQVcsQ0FBQyxjQUFjLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxDQUNwRCxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQTtJQUNyQixDQUFDLENBQUMsQ0FBQTtBQUNKLENBQUMsQ0FBQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgam9pbiB9IGZyb20gXCJub2RlOnBhdGhcIlxuaW1wb3J0IHsgZGVzY3JpYmUsIGV4cGVjdCwgZXhwZWN0VHlwZU9mLCBpdCB9IGZyb20gXCJ2aXRlc3RcIlxuaW1wb3J0IHR5cGUgeyBEaWFsZWN0IH0gZnJvbSBcIi4vRGlhbGVjdC50c1wiXG5pbXBvcnQgeyBsb2FkRGlhbGVjdCB9IGZyb20gXCIuL2xvYWQudHNcIlxuXG5kZXNjcmliZShcImxvYWREaWFsZWN0XCIsIGFzeW5jICgpID0+IHtcbiAgY29uc3QgZ2V0Rml4dHVyZVBhdGggPSAobmFtZTogc3RyaW5nKSA9PlxuICAgIGpvaW4oaW1wb3J0Lm1ldGEuZGlybmFtZSwgXCJmaXh0dXJlc1wiLCBuYW1lKVxuICBjb25zdCBkZXNjcmlwdG9yID0ge1xuICAgIGRlbGltaXRlcjogXCI7XCIsXG4gIH1cblxuICBpdChcImxvYWRzIGEgZGlhbGVjdCBmcm9tIGEgbG9jYWwgZmlsZSBwYXRoXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBkaWFsZWN0ID0gYXdhaXQgbG9hZERpYWxlY3QoZ2V0Rml4dHVyZVBhdGgoXCJkaWFsZWN0Lmpzb25cIikpXG4gICAgZXhwZWN0VHlwZU9mKGRpYWxlY3QpLnRvRXF1YWxUeXBlT2Y8RGlhbGVjdD4oKVxuICAgIGV4cGVjdChkaWFsZWN0KS50b0VxdWFsKGRlc2NyaXB0b3IpXG4gIH0pXG5cbiAgaXQoXCJ0aHJvd3MgYW4gZXJyb3Igd2hlbiBkaWFsZWN0IGlzIGludmFsaWRcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGF3YWl0IGV4cGVjdChcbiAgICAgIGxvYWREaWFsZWN0KGdldEZpeHR1cmVQYXRoKFwiZGlhbGVjdC1pbnZhbGlkLmpzb25cIikpLFxuICAgICkucmVqZWN0cy50b1Rocm93KClcbiAgfSlcbn0pXG4iXX0=
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { loadDialect } from "../dialect/index.js";
|
|
2
|
+
export async function resolveDialect(dialect) {
|
|
3
|
+
if (!dialect) {
|
|
4
|
+
return undefined;
|
|
5
|
+
}
|
|
6
|
+
if (typeof dialect !== "string") {
|
|
7
|
+
return dialect;
|
|
8
|
+
}
|
|
9
|
+
return await loadDialect(dialect);
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb2x2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL2RpYWxlY3QvcmVzb2x2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0scUJBQXFCLENBQUE7QUFHakQsTUFBTSxDQUFDLEtBQUssVUFBVSxjQUFjLENBQUMsT0FBMEI7SUFDN0QsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2IsT0FBTyxTQUFTLENBQUE7SUFDbEIsQ0FBQztJQUVELElBQUksT0FBTyxPQUFPLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDaEMsT0FBTyxPQUFPLENBQUE7SUFDaEIsQ0FBQztJQUVELE9BQU8sTUFBTSxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUE7QUFDbkMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGxvYWREaWFsZWN0IH0gZnJvbSBcIi4uL2RpYWxlY3QvaW5kZXgudHNcIlxuaW1wb3J0IHR5cGUgeyBEaWFsZWN0IH0gZnJvbSBcIi4vRGlhbGVjdC50c1wiXG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXNvbHZlRGlhbGVjdChkaWFsZWN0PzogRGlhbGVjdCB8IHN0cmluZykge1xuICBpZiAoIWRpYWxlY3QpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkXG4gIH1cblxuICBpZiAodHlwZW9mIGRpYWxlY3QgIT09IFwic3RyaW5nXCIpIHtcbiAgICByZXR1cm4gZGlhbGVjdFxuICB9XG5cbiAgcmV0dXJuIGF3YWl0IGxvYWREaWFsZWN0KGRpYWxlY3QpXG59XG4iXX0=
|