livemark 0.2.0

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.
Files changed (124) hide show
  1. package/README.md +3 -0
  2. package/build/descriptor/index.d.ts +3 -0
  3. package/build/descriptor/index.js +4 -0
  4. package/build/descriptor/load.d.ts +8 -0
  5. package/build/descriptor/load.js +40 -0
  6. package/build/descriptor/node.d.ts +125 -0
  7. package/build/descriptor/node.js +9 -0
  8. package/build/descriptor/save.d.ts +8 -0
  9. package/build/descriptor/save.js +17 -0
  10. package/build/descriptor/save.spec.d.ts +1 -0
  11. package/build/descriptor/save.spec.js +80 -0
  12. package/build/descriptor/validate.d.ts +9 -0
  13. package/build/descriptor/validate.js +14 -0
  14. package/build/descriptor/validate.spec.d.ts +1 -0
  15. package/build/descriptor/validate.spec.js +124 -0
  16. package/build/dialect/Dialect.d.ts +88 -0
  17. package/build/dialect/Dialect.js +2 -0
  18. package/build/dialect/index.d.ts +3 -0
  19. package/build/dialect/index.js +3 -0
  20. package/build/dialect/load.d.ts +4 -0
  21. package/build/dialect/load.js +7 -0
  22. package/build/dialect/save.d.ts +9 -0
  23. package/build/dialect/save.js +13 -0
  24. package/build/dialect/validate.d.ts +1 -0
  25. package/build/dialect/validate.js +4 -0
  26. package/build/index.d.ts +4 -0
  27. package/build/index.js +5 -0
  28. package/build/metadata/index.d.ts +3 -0
  29. package/build/metadata/index.js +4 -0
  30. package/build/metadata/load.d.ts +10 -0
  31. package/build/metadata/load.js +55 -0
  32. package/build/metadata/node.d.ts +125 -0
  33. package/build/metadata/node.js +9 -0
  34. package/build/metadata/save.d.ts +8 -0
  35. package/build/metadata/save.js +17 -0
  36. package/build/metadata/save.spec.d.ts +1 -0
  37. package/build/metadata/save.spec.js +80 -0
  38. package/build/metadata/validate.d.ts +9 -0
  39. package/build/metadata/validate.js +14 -0
  40. package/build/metadata/validate.spec.d.ts +1 -0
  41. package/build/metadata/validate.spec.js +124 -0
  42. package/build/package/Contributor.d.ts +21 -0
  43. package/build/package/Contributor.js +2 -0
  44. package/build/package/Package.d.ts +65 -0
  45. package/build/package/Package.js +2 -0
  46. package/build/package/index.d.ts +4 -0
  47. package/build/package/index.js +3 -0
  48. package/build/package/load.d.ts +4 -0
  49. package/build/package/load.js +7 -0
  50. package/build/package/save.d.ts +9 -0
  51. package/build/package/save.js +13 -0
  52. package/build/package/validate.d.ts +1 -0
  53. package/build/package/validate.js +4 -0
  54. package/build/resource/License.d.ts +18 -0
  55. package/build/resource/License.js +2 -0
  56. package/build/resource/Resource.d.ts +67 -0
  57. package/build/resource/Resource.js +2 -0
  58. package/build/resource/Source.d.ts +17 -0
  59. package/build/resource/Source.js +2 -0
  60. package/build/resource/index.d.ts +5 -0
  61. package/build/resource/index.js +2 -0
  62. package/build/resource/load.d.ts +1 -0
  63. package/build/resource/load.js +2 -0
  64. package/build/resource/save.d.ts +9 -0
  65. package/build/resource/save.js +13 -0
  66. package/build/resource/types/index.d.ts +1 -0
  67. package/build/resource/types/index.js +2 -0
  68. package/build/resource/types/table.d.ts +29 -0
  69. package/build/resource/types/table.js +2 -0
  70. package/build/resource/validate.d.ts +1 -0
  71. package/build/resource/validate.js +4 -0
  72. package/build/schema/Field.d.ts +5 -0
  73. package/build/schema/Field.js +2 -0
  74. package/build/schema/Schema.d.ts +55 -0
  75. package/build/schema/Schema.js +2 -0
  76. package/build/schema/fields/any.d.ts +20 -0
  77. package/build/schema/fields/any.js +2 -0
  78. package/build/schema/fields/array.d.ts +32 -0
  79. package/build/schema/fields/array.js +2 -0
  80. package/build/schema/fields/base.d.ts +42 -0
  81. package/build/schema/fields/base.js +2 -0
  82. package/build/schema/fields/boolean.d.ts +28 -0
  83. package/build/schema/fields/boolean.js +2 -0
  84. package/build/schema/fields/date.d.ts +35 -0
  85. package/build/schema/fields/date.js +2 -0
  86. package/build/schema/fields/datetime.d.ts +35 -0
  87. package/build/schema/fields/datetime.js +2 -0
  88. package/build/schema/fields/duration.d.ts +28 -0
  89. package/build/schema/fields/duration.js +2 -0
  90. package/build/schema/fields/geojson.d.ts +26 -0
  91. package/build/schema/fields/geojson.js +2 -0
  92. package/build/schema/fields/geopoint.d.ts +27 -0
  93. package/build/schema/fields/geopoint.js +2 -0
  94. package/build/schema/fields/index.d.ts +16 -0
  95. package/build/schema/fields/index.js +17 -0
  96. package/build/schema/fields/integer.d.ts +37 -0
  97. package/build/schema/fields/integer.js +2 -0
  98. package/build/schema/fields/list.d.ts +36 -0
  99. package/build/schema/fields/list.js +2 -0
  100. package/build/schema/fields/number.d.ts +40 -0
  101. package/build/schema/fields/number.js +2 -0
  102. package/build/schema/fields/object.d.ts +32 -0
  103. package/build/schema/fields/object.js +2 -0
  104. package/build/schema/fields/string.d.ts +40 -0
  105. package/build/schema/fields/string.js +2 -0
  106. package/build/schema/fields/time.d.ts +35 -0
  107. package/build/schema/fields/time.js +2 -0
  108. package/build/schema/fields/year.d.ts +28 -0
  109. package/build/schema/fields/year.js +2 -0
  110. package/build/schema/fields/yearmonth.d.ts +28 -0
  111. package/build/schema/fields/yearmonth.js +2 -0
  112. package/build/schema/index.d.ts +4 -0
  113. package/build/schema/index.js +2 -0
  114. package/build/schema/load.d.ts +1 -0
  115. package/build/schema/load.js +2 -0
  116. package/build/schema/save.d.ts +9 -0
  117. package/build/schema/save.js +13 -0
  118. package/build/schema/validate.d.ts +1 -0
  119. package/build/schema/validate.js +4 -0
  120. package/build/tsconfig.tsbuildinfo +1 -0
  121. package/index.ts +0 -0
  122. package/package.json +21 -0
  123. package/tsconfig.json +10 -0
  124. package/typedoc.json +4 -0
package/README.md ADDED
@@ -0,0 +1,3 @@
1
+ # Livemark
2
+
3
+ Livemark implementation in TypeScript
@@ -0,0 +1,3 @@
1
+ export { loadDescriptor } from "./load.js";
2
+ export { saveDescriptor } from "./save.js";
3
+ export { validateDescriptor } from "./validate.js";
@@ -0,0 +1,4 @@
1
+ export { loadDescriptor } from "./load.js";
2
+ export { saveDescriptor } from "./save.js";
3
+ export { validateDescriptor } from "./validate.js";
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9kZXNjcmlwdG9yL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxXQUFXLENBQUE7QUFDMUMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLFdBQVcsQ0FBQTtBQUMxQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxlQUFlLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyBsb2FkRGVzY3JpcHRvciB9IGZyb20gXCIuL2xvYWQuanNcIlxuZXhwb3J0IHsgc2F2ZURlc2NyaXB0b3IgfSBmcm9tIFwiLi9zYXZlLmpzXCJcbmV4cG9ydCB7IHZhbGlkYXRlRGVzY3JpcHRvciB9IGZyb20gXCIuL3ZhbGlkYXRlLmpzXCJcbiJdfQ==
@@ -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(props: {
7
+ path: string;
8
+ }): Promise<Record<string, any>>;
@@ -0,0 +1,40 @@
1
+ import { loadNodeApis } from "./node.js";
2
+ /**
3
+ * Load a descriptor (JSON Object) from a file or URL
4
+ * Uses dynamic imports to work in both Node.js and browser environments
5
+ * Supports HTTP, HTTPS, FTP, and FTPS protocols
6
+ */
7
+ export async function loadDescriptor(props) {
8
+ const url = createRemoteUrl(props.path);
9
+ return url
10
+ ? await loadRemoteDescriptor(url)
11
+ : await loadLocalDescriptor(props.path);
12
+ }
13
+ function createRemoteUrl(path) {
14
+ try {
15
+ return new URL(path);
16
+ }
17
+ catch {
18
+ return undefined;
19
+ }
20
+ }
21
+ const REMOTE_PROTOCOLS = ["http:", "https:", "ftp:", "ftps:"];
22
+ async function loadRemoteDescriptor(url) {
23
+ const protocol = url.protocol.toLowerCase();
24
+ if (!REMOTE_PROTOCOLS.includes(protocol)) {
25
+ throw new Error(`Unsupported URL protocol: ${protocol}`);
26
+ }
27
+ const response = await fetch(url.toString());
28
+ const descriptor = (await response.json());
29
+ return descriptor;
30
+ }
31
+ async function loadLocalDescriptor(path) {
32
+ const node = await loadNodeApis();
33
+ if (!node) {
34
+ throw new Error("File system is not supported in this environment");
35
+ }
36
+ const content = await node.fs.readFile(path, "utf-8");
37
+ const descriptor = JSON.parse(content);
38
+ return descriptor;
39
+ }
40
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL2Rlc2NyaXB0b3IvbG9hZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sV0FBVyxDQUFBO0FBRXhDOzs7O0dBSUc7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLGNBQWMsQ0FBQyxLQUF1QjtJQUMxRCxNQUFNLEdBQUcsR0FBRyxlQUFlLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFBO0lBRXZDLE9BQU8sR0FBRztRQUNSLENBQUMsQ0FBQyxNQUFNLG9CQUFvQixDQUFDLEdBQUcsQ0FBQztRQUNqQyxDQUFDLENBQUMsTUFBTSxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUE7QUFDM0MsQ0FBQztBQUVELFNBQVMsZUFBZSxDQUFDLElBQVk7SUFDbkMsSUFBSSxDQUFDO1FBQ0gsT0FBTyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQTtJQUN0QixDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsT0FBTyxTQUFTLENBQUE7SUFDbEIsQ0FBQztBQUNILENBQUM7QUFFRCxNQUFNLGdCQUFnQixHQUFHLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUE7QUFFN0QsS0FBSyxVQUFVLG9CQUFvQixDQUFDLEdBQVE7SUFDMUMsTUFBTSxRQUFRLEdBQUcsR0FBRyxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsQ0FBQTtJQUMzQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7UUFDekMsTUFBTSxJQUFJLEtBQUssQ0FBQyw2QkFBNkIsUUFBUSxFQUFFLENBQUMsQ0FBQTtJQUMxRCxDQUFDO0lBRUQsTUFBTSxRQUFRLEdBQUcsTUFBTSxLQUFLLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUE7SUFDNUMsTUFBTSxVQUFVLEdBQUcsQ0FBQyxNQUFNLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBd0IsQ0FBQTtJQUVqRSxPQUFPLFVBQVUsQ0FBQTtBQUNuQixDQUFDO0FBRUQsS0FBSyxVQUFVLG1CQUFtQixDQUFDLElBQVk7SUFDN0MsTUFBTSxJQUFJLEdBQUcsTUFBTSxZQUFZLEVBQUUsQ0FBQTtJQUNqQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDVixNQUFNLElBQUksS0FBSyxDQUFDLGtEQUFrRCxDQUFDLENBQUE7SUFDckUsQ0FBQztJQUVELE1BQU0sT0FBTyxHQUFHLE1BQU0sSUFBSSxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFBO0lBQ3JELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUF3QixDQUFBO0lBRTdELE9BQU8sVUFBVSxDQUFBO0FBQ25CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBsb2FkTm9kZUFwaXMgfSBmcm9tIFwiLi9ub2RlLmpzXCJcblxuLyoqXG4gKiBMb2FkIGEgZGVzY3JpcHRvciAoSlNPTiBPYmplY3QpIGZyb20gYSBmaWxlIG9yIFVSTFxuICogVXNlcyBkeW5hbWljIGltcG9ydHMgdG8gd29yayBpbiBib3RoIE5vZGUuanMgYW5kIGJyb3dzZXIgZW52aXJvbm1lbnRzXG4gKiBTdXBwb3J0cyBIVFRQLCBIVFRQUywgRlRQLCBhbmQgRlRQUyBwcm90b2NvbHNcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxvYWREZXNjcmlwdG9yKHByb3BzOiB7IHBhdGg6IHN0cmluZyB9KSB7XG4gIGNvbnN0IHVybCA9IGNyZWF0ZVJlbW90ZVVybChwcm9wcy5wYXRoKVxuXG4gIHJldHVybiB1cmxcbiAgICA/IGF3YWl0IGxvYWRSZW1vdGVEZXNjcmlwdG9yKHVybClcbiAgICA6IGF3YWl0IGxvYWRMb2NhbERlc2NyaXB0b3IocHJvcHMucGF0aClcbn1cblxuZnVuY3Rpb24gY3JlYXRlUmVtb3RlVXJsKHBhdGg6IHN0cmluZykge1xuICB0cnkge1xuICAgIHJldHVybiBuZXcgVVJMKHBhdGgpXG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiB1bmRlZmluZWRcbiAgfVxufVxuXG5jb25zdCBSRU1PVEVfUFJPVE9DT0xTID0gW1wiaHR0cDpcIiwgXCJodHRwczpcIiwgXCJmdHA6XCIsIFwiZnRwczpcIl1cblxuYXN5bmMgZnVuY3Rpb24gbG9hZFJlbW90ZURlc2NyaXB0b3IodXJsOiBVUkwpIHtcbiAgY29uc3QgcHJvdG9jb2wgPSB1cmwucHJvdG9jb2wudG9Mb3dlckNhc2UoKVxuICBpZiAoIVJFTU9URV9QUk9UT0NPTFMuaW5jbHVkZXMocHJvdG9jb2wpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCBVUkwgcHJvdG9jb2w6ICR7cHJvdG9jb2x9YClcbiAgfVxuXG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godXJsLnRvU3RyaW5nKCkpXG4gIGNvbnN0IGRlc2NyaXB0b3IgPSAoYXdhaXQgcmVzcG9uc2UuanNvbigpKSBhcyBSZWNvcmQ8c3RyaW5nLCBhbnk+XG5cbiAgcmV0dXJuIGRlc2NyaXB0b3Jcbn1cblxuYXN5bmMgZnVuY3Rpb24gbG9hZExvY2FsRGVzY3JpcHRvcihwYXRoOiBzdHJpbmcpIHtcbiAgY29uc3Qgbm9kZSA9IGF3YWl0IGxvYWROb2RlQXBpcygpXG4gIGlmICghbm9kZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkZpbGUgc3lzdGVtIGlzIG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyBlbnZpcm9ubWVudFwiKVxuICB9XG5cbiAgY29uc3QgY29udGVudCA9IGF3YWl0IG5vZGUuZnMucmVhZEZpbGUocGF0aCwgXCJ1dGYtOFwiKVxuICBjb25zdCBkZXNjcmlwdG9yID0gSlNPTi5wYXJzZShjb250ZW50KSBhcyBSZWNvcmQ8c3RyaW5nLCBhbnk+XG5cbiAgcmV0dXJuIGRlc2NyaXB0b3Jcbn1cbiJdfQ==
@@ -0,0 +1,125 @@
1
+ export declare function loadNodeApis(): Promise<{
2
+ fs: {
3
+ default: typeof import("node:fs/promises");
4
+ access(path: import("fs").PathLike, mode?: number): Promise<void>;
5
+ copyFile(src: import("fs").PathLike, dest: import("fs").PathLike, mode?: number): Promise<void>;
6
+ open(path: import("fs").PathLike, flags?: string | number, mode?: import("fs").Mode): Promise<import("fs/promises").FileHandle>;
7
+ rename(oldPath: import("fs").PathLike, newPath: import("fs").PathLike): Promise<void>;
8
+ truncate(path: import("fs").PathLike, len?: number): Promise<void>;
9
+ rmdir(path: import("fs").PathLike, options?: import("fs").RmDirOptions): Promise<void>;
10
+ rm(path: import("fs").PathLike, options?: import("fs").RmOptions): Promise<void>;
11
+ mkdir(path: import("fs").PathLike, options: import("fs").MakeDirectoryOptions & {
12
+ recursive: true;
13
+ }): Promise<string | undefined>;
14
+ mkdir(path: import("fs").PathLike, options?: import("fs").Mode | (import("fs").MakeDirectoryOptions & {
15
+ recursive?: false | undefined;
16
+ }) | null): Promise<void>;
17
+ mkdir(path: import("fs").PathLike, options?: import("fs").Mode | import("fs").MakeDirectoryOptions | null): Promise<string | undefined>;
18
+ readdir(path: import("fs").PathLike, options?: (import("fs").ObjectEncodingOptions & {
19
+ withFileTypes?: false | undefined;
20
+ recursive?: boolean | undefined;
21
+ }) | BufferEncoding | null): Promise<string[]>;
22
+ readdir(path: import("fs").PathLike, options: {
23
+ encoding: "buffer";
24
+ withFileTypes?: false | undefined;
25
+ recursive?: boolean | undefined;
26
+ } | "buffer"): Promise<Buffer[]>;
27
+ readdir(path: import("fs").PathLike, options?: (import("fs").ObjectEncodingOptions & {
28
+ withFileTypes?: false | undefined;
29
+ recursive?: boolean | undefined;
30
+ }) | BufferEncoding | null): Promise<string[] | Buffer[]>;
31
+ readdir(path: import("fs").PathLike, options: import("fs").ObjectEncodingOptions & {
32
+ withFileTypes: true;
33
+ recursive?: boolean | undefined;
34
+ }): Promise<import("fs").Dirent[]>;
35
+ readlink(path: import("fs").PathLike, options?: import("fs").ObjectEncodingOptions | BufferEncoding | null): Promise<string>;
36
+ readlink(path: import("fs").PathLike, options: import("fs").BufferEncodingOption): Promise<Buffer>;
37
+ readlink(path: import("fs").PathLike, options?: import("fs").ObjectEncodingOptions | string | null): Promise<string | Buffer>;
38
+ symlink(target: import("fs").PathLike, path: import("fs").PathLike, type?: string | null): Promise<void>;
39
+ lstat(path: import("fs").PathLike, opts?: import("fs").StatOptions & {
40
+ bigint?: false | undefined;
41
+ }): Promise<import("fs").Stats>;
42
+ lstat(path: import("fs").PathLike, opts: import("fs").StatOptions & {
43
+ bigint: true;
44
+ }): Promise<import("fs").BigIntStats>;
45
+ lstat(path: import("fs").PathLike, opts?: import("fs").StatOptions): Promise<import("fs").Stats | import("fs").BigIntStats>;
46
+ stat(path: import("fs").PathLike, opts?: import("fs").StatOptions & {
47
+ bigint?: false | undefined;
48
+ }): Promise<import("fs").Stats>;
49
+ stat(path: import("fs").PathLike, opts: import("fs").StatOptions & {
50
+ bigint: true;
51
+ }): Promise<import("fs").BigIntStats>;
52
+ stat(path: import("fs").PathLike, opts?: import("fs").StatOptions): Promise<import("fs").Stats | import("fs").BigIntStats>;
53
+ statfs(path: import("fs").PathLike, opts?: import("fs").StatFsOptions & {
54
+ bigint?: false | undefined;
55
+ }): Promise<import("fs").StatsFs>;
56
+ statfs(path: import("fs").PathLike, opts: import("fs").StatFsOptions & {
57
+ bigint: true;
58
+ }): Promise<import("fs").BigIntStatsFs>;
59
+ statfs(path: import("fs").PathLike, opts?: import("fs").StatFsOptions): Promise<import("fs").StatsFs | import("fs").BigIntStatsFs>;
60
+ link(existingPath: import("fs").PathLike, newPath: import("fs").PathLike): Promise<void>;
61
+ unlink(path: import("fs").PathLike): Promise<void>;
62
+ chmod(path: import("fs").PathLike, mode: import("fs").Mode): Promise<void>;
63
+ lchmod(path: import("fs").PathLike, mode: import("fs").Mode): Promise<void>;
64
+ lchown(path: import("fs").PathLike, uid: number, gid: number): Promise<void>;
65
+ lutimes(path: import("fs").PathLike, atime: import("fs").TimeLike, mtime: import("fs").TimeLike): Promise<void>;
66
+ chown(path: import("fs").PathLike, uid: number, gid: number): Promise<void>;
67
+ utimes(path: import("fs").PathLike, atime: import("fs").TimeLike, mtime: import("fs").TimeLike): Promise<void>;
68
+ realpath(path: import("fs").PathLike, options?: import("fs").ObjectEncodingOptions | BufferEncoding | null): Promise<string>;
69
+ realpath(path: import("fs").PathLike, options: import("fs").BufferEncodingOption): Promise<Buffer>;
70
+ realpath(path: import("fs").PathLike, options?: import("fs").ObjectEncodingOptions | BufferEncoding | null): Promise<string | Buffer>;
71
+ mkdtemp(prefix: string, options?: import("fs").ObjectEncodingOptions | BufferEncoding | null): Promise<string>;
72
+ mkdtemp(prefix: string, options: import("fs").BufferEncodingOption): Promise<Buffer>;
73
+ mkdtemp(prefix: string, options?: import("fs").ObjectEncodingOptions | BufferEncoding | null): Promise<string | Buffer>;
74
+ writeFile(file: import("fs").PathLike | import("fs/promises").FileHandle, data: string | NodeJS.ArrayBufferView | Iterable<string | NodeJS.ArrayBufferView> | AsyncIterable<string | NodeJS.ArrayBufferView> | import("stream"), options?: (import("fs").ObjectEncodingOptions & {
75
+ mode?: import("fs").Mode | undefined;
76
+ flag?: import("fs").OpenMode | undefined;
77
+ flush?: boolean | undefined;
78
+ } & import("events").Abortable) | BufferEncoding | null): Promise<void>;
79
+ appendFile(path: import("fs").PathLike | import("fs/promises").FileHandle, data: string | Uint8Array, options?: (import("fs").ObjectEncodingOptions & import("fs/promises").FlagAndOpenMode & {
80
+ flush?: boolean | undefined;
81
+ }) | BufferEncoding | null): Promise<void>;
82
+ readFile(path: import("fs").PathLike | import("fs/promises").FileHandle, options?: ({
83
+ encoding?: null | undefined;
84
+ flag?: import("fs").OpenMode | undefined;
85
+ } & import("events").Abortable) | null): Promise<Buffer>;
86
+ readFile(path: import("fs").PathLike | import("fs/promises").FileHandle, options: ({
87
+ encoding: BufferEncoding;
88
+ flag?: import("fs").OpenMode | undefined;
89
+ } & import("events").Abortable) | BufferEncoding): Promise<string>;
90
+ readFile(path: import("fs").PathLike | import("fs/promises").FileHandle, options?: (import("fs").ObjectEncodingOptions & import("events").Abortable & {
91
+ flag?: import("fs").OpenMode | undefined;
92
+ }) | BufferEncoding | null): Promise<string | Buffer>;
93
+ opendir(path: import("fs").PathLike, options?: import("fs").OpenDirOptions): Promise<import("fs").Dir>;
94
+ watch(filename: import("fs").PathLike, options: (import("fs").WatchOptions & {
95
+ encoding: "buffer";
96
+ }) | "buffer"): AsyncIterable<import("fs/promises").FileChangeInfo<Buffer>>;
97
+ watch(filename: import("fs").PathLike, options?: import("fs").WatchOptions | BufferEncoding): AsyncIterable<import("fs/promises").FileChangeInfo<string>>;
98
+ watch(filename: import("fs").PathLike, options: import("fs").WatchOptions | string): AsyncIterable<import("fs/promises").FileChangeInfo<string>> | AsyncIterable<import("fs/promises").FileChangeInfo<Buffer>>;
99
+ cp(source: string | URL, destination: string | URL, opts?: import("fs").CopyOptions): Promise<void>;
100
+ glob(pattern: string | string[]): NodeJS.AsyncIterator<string>;
101
+ glob(pattern: string | string[], opt: import("fs").GlobOptionsWithFileTypes): NodeJS.AsyncIterator<import("fs").Dirent>;
102
+ glob(pattern: string | string[], opt: import("fs").GlobOptionsWithoutFileTypes): NodeJS.AsyncIterator<string>;
103
+ glob(pattern: string | string[], opt: import("fs").GlobOptions): NodeJS.AsyncIterator<import("fs").Dirent | string>;
104
+ constants: typeof import("fs").constants;
105
+ };
106
+ path: {
107
+ default: import("path").PlatformPath;
108
+ normalize(path: string): string;
109
+ join(...paths: string[]): string;
110
+ resolve(...paths: string[]): string;
111
+ matchesGlob(path: string, pattern: string): boolean;
112
+ isAbsolute(path: string): boolean;
113
+ relative(from: string, to: string): string;
114
+ dirname(path: string): string;
115
+ basename(path: string, suffix?: string): string;
116
+ extname(path: string): string;
117
+ sep: "\\" | "/";
118
+ delimiter: ";" | ":";
119
+ parse(path: string): import("path").ParsedPath;
120
+ format(pathObject: import("path").FormatInputPathObject): string;
121
+ toNamespacedPath(path: string): string;
122
+ posix: import("path").PlatformPath;
123
+ win32: import("path").PlatformPath;
124
+ };
125
+ } | undefined>;
@@ -0,0 +1,9 @@
1
+ export async function loadNodeApis() {
2
+ if (globalThis.process) {
3
+ const fs = await import("node:fs/promises");
4
+ const path = await import("node:path");
5
+ return { fs, path };
6
+ }
7
+ return undefined;
8
+ }
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL2Rlc2NyaXB0b3Ivbm9kZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLENBQUMsS0FBSyxVQUFVLFlBQVk7SUFDaEMsSUFBSSxVQUFVLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDdkIsTUFBTSxFQUFFLEdBQUcsTUFBTSxNQUFNLENBQUMsa0JBQWtCLENBQUMsQ0FBQTtRQUMzQyxNQUFNLElBQUksR0FBRyxNQUFNLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQTtRQUN0QyxPQUFPLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxDQUFBO0lBQ3JCLENBQUM7SUFFRCxPQUFPLFNBQVMsQ0FBQTtBQUNsQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxvYWROb2RlQXBpcygpIHtcbiAgaWYgKGdsb2JhbFRoaXMucHJvY2Vzcykge1xuICAgIGNvbnN0IGZzID0gYXdhaXQgaW1wb3J0KFwibm9kZTpmcy9wcm9taXNlc1wiKVxuICAgIGNvbnN0IHBhdGggPSBhd2FpdCBpbXBvcnQoXCJub2RlOnBhdGhcIilcbiAgICByZXR1cm4geyBmcywgcGF0aCB9XG4gIH1cblxuICByZXR1cm4gdW5kZWZpbmVkXG59XG4iXX0=
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Save a descriptor (JSON Object) to a file path
3
+ * Works in Node.js environments
4
+ */
5
+ export declare function saveDescriptor(props: {
6
+ descriptor: Record<string, any>;
7
+ path: string;
8
+ }): Promise<boolean>;
@@ -0,0 +1,17 @@
1
+ import { loadNodeApis } from "./node.js";
2
+ /**
3
+ * Save a descriptor (JSON Object) to a file path
4
+ * Works in Node.js environments
5
+ */
6
+ export async function saveDescriptor(props) {
7
+ const { descriptor, path } = props;
8
+ const node = await loadNodeApis();
9
+ if (!node) {
10
+ throw new Error("File system is not supported in this environment");
11
+ }
12
+ const content = JSON.stringify(descriptor, null, 2);
13
+ await node.fs.mkdir(node.path.dirname(path), { recursive: true });
14
+ await node.fs.writeFile(path, content, "utf-8");
15
+ return true;
16
+ }
17
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2F2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL2Rlc2NyaXB0b3Ivc2F2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sV0FBVyxDQUFBO0FBRXhDOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsY0FBYyxDQUFDLEtBR3BDO0lBQ0MsTUFBTSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsR0FBRyxLQUFLLENBQUE7SUFFbEMsTUFBTSxJQUFJLEdBQUcsTUFBTSxZQUFZLEVBQUUsQ0FBQTtJQUNqQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDVixNQUFNLElBQUksS0FBSyxDQUFDLGtEQUFrRCxDQUFDLENBQUE7SUFDckUsQ0FBQztJQUVELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQTtJQUVuRCxNQUFNLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUE7SUFDakUsTUFBTSxJQUFJLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFBO0lBRS9DLE9BQU8sSUFBSSxDQUFBO0FBQ2IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGxvYWROb2RlQXBpcyB9IGZyb20gXCIuL25vZGUuanNcIlxuXG4vKipcbiAqIFNhdmUgYSBkZXNjcmlwdG9yIChKU09OIE9iamVjdCkgdG8gYSBmaWxlIHBhdGhcbiAqIFdvcmtzIGluIE5vZGUuanMgZW52aXJvbm1lbnRzXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzYXZlRGVzY3JpcHRvcihwcm9wczoge1xuICBkZXNjcmlwdG9yOiBSZWNvcmQ8c3RyaW5nLCBhbnk+XG4gIHBhdGg6IHN0cmluZ1xufSkge1xuICBjb25zdCB7IGRlc2NyaXB0b3IsIHBhdGggfSA9IHByb3BzXG5cbiAgY29uc3Qgbm9kZSA9IGF3YWl0IGxvYWROb2RlQXBpcygpXG4gIGlmICghbm9kZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkZpbGUgc3lzdGVtIGlzIG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyBlbnZpcm9ubWVudFwiKVxuICB9XG5cbiAgY29uc3QgY29udGVudCA9IEpTT04uc3RyaW5naWZ5KGRlc2NyaXB0b3IsIG51bGwsIDIpXG5cbiAgYXdhaXQgbm9kZS5mcy5ta2Rpcihub2RlLnBhdGguZGlybmFtZShwYXRoKSwgeyByZWN1cnNpdmU6IHRydWUgfSlcbiAgYXdhaXQgbm9kZS5mcy53cml0ZUZpbGUocGF0aCwgY29udGVudCwgXCJ1dGYtOFwiKVxuXG4gIHJldHVybiB0cnVlXG59XG4iXX0=
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,80 @@
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
+ const result = await saveDescriptor({
36
+ descriptor: testDescriptor,
37
+ path: testPath,
38
+ });
39
+ expect(result).toBe(true);
40
+ const fileExists = await fs
41
+ .stat(testPath)
42
+ .then(() => true)
43
+ .catch(() => false);
44
+ expect(fileExists).toBe(true);
45
+ const content = await fs.readFile(testPath, "utf-8");
46
+ const parsedContent = JSON.parse(content);
47
+ expect(parsedContent).toEqual(testDescriptor);
48
+ });
49
+ it("should save a descriptor to a nested directory path", async () => {
50
+ const nestedPath = path.join(testDir, "nested", "dir", "descriptor.json");
51
+ const result = await saveDescriptor({
52
+ descriptor: testDescriptor,
53
+ path: nestedPath,
54
+ });
55
+ expect(result).toBe(true);
56
+ const fileExists = await fs
57
+ .stat(nestedPath)
58
+ .then(() => true)
59
+ .catch(() => false);
60
+ expect(fileExists).toBe(true);
61
+ const content = await fs.readFile(nestedPath, "utf-8");
62
+ const parsedContent = JSON.parse(content);
63
+ expect(parsedContent).toEqual(testDescriptor);
64
+ });
65
+ it("should use pretty formatting with 2-space indentation", async () => {
66
+ await saveDescriptor({
67
+ descriptor: testDescriptor,
68
+ path: testPath,
69
+ });
70
+ const content = await fs.readFile(testPath, "utf-8");
71
+ const expectedFormat = JSON.stringify(testDescriptor, null, 2);
72
+ expect(content).toEqual(expectedFormat);
73
+ const lines = content.split("\n");
74
+ expect(lines.length).toBeGreaterThan(1);
75
+ if (lines.length > 1 && lines[1]) {
76
+ expect(lines[1].startsWith(" ")).toBe(true);
77
+ }
78
+ });
79
+ });
80
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2F2ZS5zcGVjLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vZGVzY3JpcHRvci9zYXZlLnNwZWMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQTtBQUN0QyxPQUFPLEtBQUssSUFBSSxNQUFNLFdBQVcsQ0FBQTtBQUNqQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxPQUFPLENBQUE7QUFDMUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsTUFBTSxRQUFRLENBQUE7QUFDcEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLFdBQVcsQ0FBQTtBQUUxQyxRQUFRLENBQUMsZ0JBQWdCLEVBQUUsR0FBRyxFQUFFO0lBQzlCLE1BQU0sY0FBYyxHQUFHO1FBQ3JCLElBQUksRUFBRSxpQkFBaUI7UUFDdkIsT0FBTyxFQUFFLE9BQU87UUFDaEIsV0FBVyxFQUFFLG1DQUFtQztRQUNoRCxTQUFTLEVBQUU7WUFDVDtnQkFDRSxJQUFJLEVBQUUsV0FBVztnQkFDakIsSUFBSSxFQUFFLG9CQUFvQjthQUMzQjtTQUNGO0tBQ0YsQ0FBQTtJQUVELElBQUksT0FBZSxDQUFBO0lBQ25CLElBQUksUUFBZ0IsQ0FBQTtJQUVwQixVQUFVLENBQUMsR0FBRyxFQUFFO1FBQ2QsT0FBTyxHQUFHLGtCQUFrQixFQUFFLENBQUE7UUFDOUIsUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLGlCQUFpQixDQUFDLENBQUE7SUFDbEQsQ0FBQyxDQUFDLENBQUE7SUFFRixTQUFTLENBQUMsS0FBSyxJQUFJLEVBQUU7UUFDbkIsSUFBSSxDQUFDO1lBQ0gsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUE7UUFDeEQs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QUMsY0FBYyxDQUFDLENBQUE7UUFFdkMsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUNqQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUV2QyxJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ2pDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQzlDLENBQUM7SUFDSCxDQUFDLENBQUMsQ0FBQTtBQUNKLENBQUMsQ0FBQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgZnMgZnJvbSBcIm5vZGU6ZnMvcHJvbWlzZXNcIlxuaW1wb3J0ICogYXMgcGF0aCBmcm9tIFwibm9kZTpwYXRoXCJcbmltcG9ydCB7IHRlbXBvcmFyeURpcmVjdG9yeSB9IGZyb20gXCJ0ZW1weVwiXG5pbXBvcnQgeyBhZnRlckVhY2gsIGJlZm9yZUVhY2gsIGRlc2NyaWJlLCBleHBlY3QsIGl0IH0gZnJvbSBcInZpdGVzdFwiXG5pbXBvcnQgeyBzYXZlRGVzY3JpcHRvciB9IGZyb20gXCIuL3NhdmUuanNcIlxuXG5kZXNjcmliZShcInNhdmVEZXNjcmlwdG9yXCIsICgpID0+IHtcbiAgY29uc3QgdGVzdERlc2NyaXB0b3IgPSB7XG4gICAgbmFtZTogXCJ0ZXN0LWRlc2NyaXB0b3JcIixcbiAgICB2ZXJzaW9uOiBcIjEuMC4wXCIsXG4gICAgZGVzY3JpcHRpb246IFwiVGVzdCBkZXNjcmlwdG9yIGZvciBzYXZlIGZ1bmN0aW9uXCIsXG4gICAgcmVzb3VyY2VzOiBbXG4gICAgICB7XG4gICAgICAgIG5hbWU6IFwicmVzb3VyY2UxXCIsXG4gICAgICAgIHBhdGg6IFwiZGF0YS9yZXNvdXJjZTEuY3N2XCIsXG4gICAgICB9LFxuICAgIF0sXG4gIH1cblxuICBsZXQgdGVzdERpcjogc3RyaW5nXG4gIGxldCB0ZXN0UGF0aDogc3RyaW5nXG5cbiAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgdGVzdERpciA9IHRlbXBvcmFyeURpcmVjdG9yeSgpXG4gICAgdGVzdFBhdGggPSBwYXRoLmpvaW4odGVzdERpciwgXCJkZXNjcmlwdG9yLmpzb25cIilcbiAgfSlcblxuICBhZnRlckVhY2goYXN5bmMgKCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBmcy5ybSh0ZXN0RGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSwgZm9yY2U6IHRydWUgfSlcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IgJiYgIWVycm9yLm1lc3NhZ2UuaW5jbHVkZXMoXCJFTk9FTlRcIikpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgRmFpbGVkIHRvIGNsZWFuIHVwIHRlc3QgZGlyZWN0b3J5OiAke3Rlc3REaXJ9YCwgZXJyb3IpXG4gICAgICB9XG4gICAgfVxuICB9KVxuXG4gIGl0KFwic2hvdWxkIHNhdmUgYSBkZXNjcmlwdG9yIHRvIHRoZSBzcGVjaWZpZWQgcGF0aFwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgc2F2ZURlc2NyaXB0b3Ioe1xuICAgICAgZGVzY3JpcHRvcjogdGVzdERlc2NyaXB0b3IsXG4gICAgICBwYXRoOiB0ZXN0UGF0aCxcbiAgICB9KVxuXG4gICAgZXhwZWN0KHJlc3VsdCkudG9CZSh0cnVlKVxuXG4gICAgY29uc3QgZmlsZUV4aXN0cyA9IGF3YWl0IGZzXG4gICAgICAuc3RhdCh0ZXN0UGF0aClcbiAgICAgIC50aGVuKCgpID0+IHRydWUpXG4gICAgICAuY2F0Y2goKCkgPT4gZmFsc2UpXG4gICAgZXhwZWN0KGZpbGVFeGlzdHMpLnRvQmUodHJ1ZSlcblxuICAgIGNvbnN0IGNvbnRlbnQgPSBhd2FpdCBmcy5yZWFkRmlsZSh0ZXN0UGF0aCwgXCJ1dGYtOFwiKVxuICAgIGNvbnN0IHBhcnNlZENvbnRlbnQgPSBKU09OLnBhcnNlKGNvbnRlbnQpXG4gICAgZXhwZWN0KHBhcnNlZENvbnRlbnQpLnRvRXF1YWwodGVzdERlc2NyaXB0b3IpXG4gIH0pXG5cbiAgaXQoXCJzaG91bGQgc2F2ZSBhIGRlc2NyaXB0b3IgdG8gYSBuZXN0ZWQgZGlyZWN0b3J5IHBhdGhcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IG5lc3RlZFBhdGggPSBwYXRoLmpvaW4odGVzdERpciwgXCJuZXN0ZWRcIiwgXCJkaXJcIiwgXCJkZXNjcmlwdG9yLmpzb25cIilcblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHNhdmVEZXNjcmlwdG9yKHtcbiAgICAgIGRlc2NyaXB0b3I6IHRlc3REZXNjcmlwdG9yLFxuICAgICAgcGF0aDogbmVzdGVkUGF0aCxcbiAgICB9KVxuXG4gICAgZXhwZWN0KHJlc3VsdCkudG9CZSh0cnVlKVxuXG4gICAgY29uc3QgZmlsZUV4aXN0cyA9IGF3YWl0IGZzXG4gICAgICAuc3RhdChuZXN0ZWRQYXRoKVxuICAgICAgLnRoZW4oKCkgPT4gdHJ1ZSlcbiAgICAgIC5jYXRjaCgoKSA9PiBmYWxzZSlcbiAgICBleHBlY3QoZmlsZUV4aXN0cykudG9CZSh0cnVlKVxuXG4gICAgY29uc3QgY29udGVudCA9IGF3YWl0IGZzLnJlYWRGaWxlKG5lc3RlZFBhdGgsIFwidXRmLThcIilcbiAgICBjb25zdCBwYXJzZWRDb250ZW50ID0gSlNPTi5wYXJzZShjb250ZW50KVxuICAgIGV4cGVjdChwYXJzZWRDb250ZW50KS50b0VxdWFsKHRlc3REZXNjcmlwdG9yKVxuICB9KVxuXG4gIGl0KFwic2hvdWxkIHVzZSBwcmV0dHkgZm9ybWF0dGluZyB3aXRoIDItc3BhY2UgaW5kZW50YXRpb25cIiwgYXN5bmMgKCkgPT4ge1xuICAgIGF3YWl0IHNhdmVEZXNjcmlwdG9yKHtcbiAgICAgIGRlc2NyaXB0b3I6IHRlc3REZXNjcmlwdG9yLFxuICAgICAgcGF0aDogdGVzdFBhdGgsXG4gICAgfSlcblxuICAgIGNvbnN0IGNvbnRlbnQgPSBhd2FpdCBmcy5yZWFkRmlsZSh0ZXN0UGF0aCwgXCJ1dGYtOFwiKVxuICAgIGNvbnN0IGV4cGVjdGVkRm9ybWF0ID0gSlNPTi5zdHJpbmdpZnkodGVzdERlc2NyaXB0b3IsIG51bGwsIDIpXG4gICAgZXhwZWN0KGNvbnRlbnQpLnRvRXF1YWwoZXhwZWN0ZWRGb3JtYXQpXG5cbiAgICBjb25zdCBsaW5lcyA9IGNvbnRlbnQuc3BsaXQoXCJcXG5cIilcbiAgICBleHBlY3QobGluZXMubGVuZ3RoKS50b0JlR3JlYXRlclRoYW4oMSlcblxuICAgIGlmIChsaW5lcy5sZW5ndGggPiAxICYmIGxpbmVzWzFdKSB7XG4gICAgICBleHBlY3QobGluZXNbMV0uc3RhcnRzV2l0aChcIiAgXCIpKS50b0JlKHRydWUpXG4gICAgfVxuICB9KVxufSlcbiJdfQ==
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Validate a descriptor (JSON Object) against a JSON Schema
3
+ * It uses Ajv for JSON Schema validation under the hood
4
+ * It returns a list of errors (empty if valid)
5
+ */
6
+ export declare function validateDescriptor(props: {
7
+ descriptor: Record<string, any>;
8
+ profile: Record<string, any>;
9
+ }): Promise<import("ajv").ErrorObject<string, Record<string, any>, unknown>[]>;
@@ -0,0 +1,14 @@
1
+ import { Ajv } from "ajv";
2
+ /**
3
+ * Validate a descriptor (JSON Object) against a JSON Schema
4
+ * It uses Ajv for JSON Schema validation under the hood
5
+ * It returns a list of errors (empty if valid)
6
+ */
7
+ export async function validateDescriptor(props) {
8
+ const { descriptor, profile } = props;
9
+ const ajv = new Ajv();
10
+ const validate = ajv.compile(profile);
11
+ validate(descriptor);
12
+ return validate.errors ?? [];
13
+ }
14
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9kZXNjcmlwdG9yL3ZhbGlkYXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxLQUFLLENBQUE7QUFFekI7Ozs7R0FJRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsa0JBQWtCLENBQUMsS0FHeEM7SUFDQyxNQUFNLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxHQUFHLEtBQUssQ0FBQTtJQUVyQyxNQUFNLEdBQUcsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFBO0lBQ3JCLE1BQU0sUUFBUSxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUE7SUFDckMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFBO0lBQ3BCLE9BQU8sUUFBUSxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUE7QUFDOUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFqdiB9IGZyb20gXCJhanZcIlxuXG4vKipcbiAqIFZhbGlkYXRlIGEgZGVzY3JpcHRvciAoSlNPTiBPYmplY3QpIGFnYWluc3QgYSBKU09OIFNjaGVtYVxuICogSXQgdXNlcyBBanYgZm9yIEpTT04gU2NoZW1hIHZhbGlkYXRpb24gdW5kZXIgdGhlIGhvb2RcbiAqIEl0IHJldHVybnMgYSBsaXN0IG9mIGVycm9ycyAoZW1wdHkgaWYgdmFsaWQpXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB2YWxpZGF0ZURlc2NyaXB0b3IocHJvcHM6IHtcbiAgZGVzY3JpcHRvcjogUmVjb3JkPHN0cmluZywgYW55PlxuICBwcm9maWxlOiBSZWNvcmQ8c3RyaW5nLCBhbnk+XG59KSB7XG4gIGNvbnN0IHsgZGVzY3JpcHRvciwgcHJvZmlsZSB9ID0gcHJvcHNcblxuICBjb25zdCBhanYgPSBuZXcgQWp2KClcbiAgY29uc3QgdmFsaWRhdGUgPSBhanYuY29tcGlsZShwcm9maWxlKVxuICB2YWxpZGF0ZShkZXNjcmlwdG9yKVxuICByZXR1cm4gdmFsaWRhdGUuZXJyb3JzID8/IFtdXG59XG4iXX0=
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,124 @@
1
+ import { describe, expect, it } from "vitest";
2
+ import { validateDescriptor } from "./validate.js";
3
+ describe("validateDescriptor", () => {
4
+ it("returns empty array for valid descriptor", async () => {
5
+ const profile = {
6
+ type: "object",
7
+ required: ["name", "version"],
8
+ properties: {
9
+ name: { type: "string" },
10
+ version: { type: "string" },
11
+ description: { type: "string" },
12
+ },
13
+ };
14
+ const descriptor = {
15
+ name: "test-package",
16
+ version: "1.0.0",
17
+ description: "A test package",
18
+ };
19
+ const result = await validateDescriptor({
20
+ descriptor,
21
+ profile,
22
+ });
23
+ expect(result).toEqual([]);
24
+ });
25
+ it("returns validation errors for invalid descriptor", async () => {
26
+ const profile = {
27
+ type: "object",
28
+ required: ["name", "version"],
29
+ properties: {
30
+ name: { type: "string" },
31
+ version: { type: "string" },
32
+ description: { type: "string" },
33
+ },
34
+ };
35
+ const descriptor = {
36
+ name: "test-package",
37
+ version: 123,
38
+ description: "A test package with wrong version type",
39
+ };
40
+ const result = await validateDescriptor({
41
+ descriptor,
42
+ profile,
43
+ });
44
+ expect(result).not.toBeNull();
45
+ expect(Array.isArray(result)).toBe(true);
46
+ expect(result.length).toBeGreaterThan(0);
47
+ const error = result[0];
48
+ expect(error).toBeDefined();
49
+ if (error) {
50
+ expect(error.keyword).toBe("type");
51
+ expect(error.instancePath).toBe("/version");
52
+ }
53
+ });
54
+ it("returns errors when required fields are missing", async () => {
55
+ const profile = {
56
+ type: "object",
57
+ required: ["name", "version", "required_field"],
58
+ properties: {
59
+ name: { type: "string" },
60
+ version: { type: "string" },
61
+ required_field: { type: "string" },
62
+ },
63
+ };
64
+ const descriptor = {
65
+ name: "test-package",
66
+ version: "1.0.0",
67
+ };
68
+ const result = await validateDescriptor({
69
+ descriptor,
70
+ profile,
71
+ });
72
+ expect(Array.isArray(result)).toBe(true);
73
+ expect(result.length).toBeGreaterThan(0);
74
+ const error = result[0];
75
+ expect(error).toBeDefined();
76
+ if (error) {
77
+ expect(error.keyword).toBe("required");
78
+ expect(error.params).toBeDefined();
79
+ if (error.params) {
80
+ expect(error.params.missingProperty).toBe("required_field");
81
+ }
82
+ }
83
+ });
84
+ it("validates nested objects in the descriptor", async () => {
85
+ const profile = {
86
+ type: "object",
87
+ required: ["name", "version", "author"],
88
+ properties: {
89
+ name: { type: "string" },
90
+ version: { type: "string" },
91
+ author: {
92
+ type: "object",
93
+ required: ["name", "email"],
94
+ properties: {
95
+ name: { type: "string" },
96
+ email: {
97
+ type: "string",
98
+ pattern: "^[^@]+@[^@]+\\.[^@]+$",
99
+ },
100
+ },
101
+ },
102
+ },
103
+ };
104
+ const descriptor = {
105
+ name: "test-package",
106
+ version: "1.0.0",
107
+ author: {
108
+ name: "Test Author",
109
+ email: "invalid-email",
110
+ },
111
+ };
112
+ const result = await validateDescriptor({
113
+ descriptor,
114
+ profile,
115
+ });
116
+ expect(Array.isArray(result)).toBe(true);
117
+ expect(result.length).toBeGreaterThan(0);
118
+ const hasEmailPatternError = result.some(error => error &&
119
+ error.instancePath === "/author/email" &&
120
+ error.keyword === "pattern");
121
+ expect(hasEmailPatternError).toBe(true);
122
+ });
123
+ });
124
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGUuc3BlYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL2Rlc2NyaXB0b3IvdmFsaWRhdGUuc3BlYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsTUFBTSxRQUFRLENBQUE7QUFDN0MsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sZUFBZSxDQUFBO0FBRWxELFFBQVEsQ0FBQyxvQkFBb0IsRUFBRSxHQUFHLEVBQUU7SUFDbEMsRUFBRSxDQUFDLDBDQUEwQyxFQUFFLEtBQUssSUFBSSxFQUFFO1FBQ3hELE1BQU0sT0FBTyxHQUFHO1lBQ2QsSUFBSSxFQUFFLFFBQVE7WUFDZCxRQUFRLEVBQUUsQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDO1lBQzdCLFVBQVUsRUFBRTtnQkFDVixJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFO2dCQUN4QixPQUFPLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFO2dCQUMzQixXQUFXLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFO2FBQ2hDO1NBQ0YsQ0FBQTtRQUVELE1BQU0sVUFBVSxHQUFHO1lBQ2pCLElBQUksRUFBRSxjQUFjO1lBQ3BCLE9BQU8sRUFBRSxPQUFPO1lBQ2hCLFdBQVcsRUFBRSxnQkFBZ0I7U0FDOUIsQ0FBQTtRQUVELE1BQU0sTUFBTSxHQUFHLE1BQU0sa0JBQWtCLENBQUM7WUFDdEMsVUFBVTtZQUNWLE9BQU87U0FDUixDQUFDLENBQUE7UUFFRixNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFBO0lBQzVCLENBQUMsQ0FBQyxDQUFBO0lBRUYsRUFBRSxDQUFDLGtEQUFrRCxFQUFFLEtBQUssSUFBSSxFQUFFO1FBQ2hFLE1BQU0sT0FBTyxHQUFHO1lBQ2QsSUFBSSxFQUFFLFFBQVE7WUFDZCxRQUFRLEVBQUUsQ0FBQyxNQUFN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LENBQUMsWUFBWSxLQUFLLGVBQWU7WUFDdEMsS0FBSyxDQUFDLE9BQU8sS0FBSyxTQUFTLENBQzlCLENBQUE7UUFFRCxNQUFNLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUE7SUFDekMsQ0FBQyxDQUFDLENBQUE7QUFDSixDQUFDLENBQUMsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGRlc2NyaWJlLCBleHBlY3QsIGl0IH0gZnJvbSBcInZpdGVzdFwiXG5pbXBvcnQgeyB2YWxpZGF0ZURlc2NyaXB0b3IgfSBmcm9tIFwiLi92YWxpZGF0ZS5qc1wiXG5cbmRlc2NyaWJlKFwidmFsaWRhdGVEZXNjcmlwdG9yXCIsICgpID0+IHtcbiAgaXQoXCJyZXR1cm5zIGVtcHR5IGFycmF5IGZvciB2YWxpZCBkZXNjcmlwdG9yXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBwcm9maWxlID0ge1xuICAgICAgdHlwZTogXCJvYmplY3RcIixcbiAgICAgIHJlcXVpcmVkOiBbXCJuYW1lXCIsIFwidmVyc2lvblwiXSxcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgbmFtZTogeyB0eXBlOiBcInN0cmluZ1wiIH0sXG4gICAgICAgIHZlcnNpb246IHsgdHlwZTogXCJzdHJpbmdcIiB9LFxuICAgICAgICBkZXNjcmlwdGlvbjogeyB0eXBlOiBcInN0cmluZ1wiIH0sXG4gICAgICB9LFxuICAgIH1cblxuICAgIGNvbnN0IGRlc2NyaXB0b3IgPSB7XG4gICAgICBuYW1lOiBcInRlc3QtcGFja2FnZVwiLFxuICAgICAgdmVyc2lvbjogXCIxLjAuMFwiLFxuICAgICAgZGVzY3JpcHRpb246IFwiQSB0ZXN0IHBhY2thZ2VcIixcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB2YWxpZGF0ZURlc2NyaXB0b3Ioe1xuICAgICAgZGVzY3JpcHRvcixcbiAgICAgIHByb2ZpbGUsXG4gICAgfSlcblxuICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoW10pXG4gIH0pXG5cbiAgaXQoXCJyZXR1cm5zIHZhbGlkYXRpb24gZXJyb3JzIGZvciBpbnZhbGlkIGRlc2NyaXB0b3JcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHByb2ZpbGUgPSB7XG4gICAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgICAgcmVxdWlyZWQ6IFtcIm5hbWVcIiwgXCJ2ZXJzaW9uXCJdLFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICBuYW1lOiB7IHR5cGU6IFwic3RyaW5nXCIgfSxcbiAgICAgICAgdmVyc2lvbjogeyB0eXBlOiBcInN0cmluZ1wiIH0sXG4gICAgICAgIGRlc2NyaXB0aW9uOiB7IHR5cGU6IFwic3RyaW5nXCIgfSxcbiAgICAgIH0sXG4gICAgfVxuXG4gICAgY29uc3QgZGVzY3JpcHRvciA9IHtcbiAgICAgIG5hbWU6IFwidGVzdC1wYWNrYWdlXCIsXG4gICAgICB2ZXJzaW9uOiAxMjMsXG4gICAgICBkZXNjcmlwdGlvbjogXCJBIHRlc3QgcGFja2FnZSB3aXRoIHdyb25nIHZlcnNpb24gdHlwZVwiLFxuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHZhbGlkYXRlRGVzY3JpcHRvcih7XG4gICAgICBkZXNjcmlwdG9yLFxuICAgICAgcHJvZmlsZSxcbiAgICB9KVxuXG4gICAgZXhwZWN0KHJlc3VsdCkubm90LnRvQmVOdWxsKClcbiAgICBleHBlY3QoQXJyYXkuaXNBcnJheShyZXN1bHQpKS50b0JlKHRydWUpXG4gICAgZXhwZWN0KHJlc3VsdC5sZW5ndGgpLnRvQmVHcmVhdGVyVGhhbigwKVxuXG4gICAgY29uc3QgZXJyb3IgPSByZXN1bHRbMF1cbiAgICBleHBlY3QoZXJyb3IpLnRvQmVEZWZpbmVkKClcbiAgICBpZiAoZXJyb3IpIHtcbiAgICAgIGV4cGVjdChlcnJvci5rZXl3b3JkKS50b0JlKFwidHlwZVwiKVxuICAgICAgZXhwZWN0KGVycm9yLmluc3RhbmNlUGF0aCkudG9CZShcIi92ZXJzaW9uXCIpXG4gICAgfVxuICB9KVxuXG4gIGl0KFwicmV0dXJucyBlcnJvcnMgd2hlbiByZXF1aXJlZCBmaWVsZHMgYXJlIG1pc3NpbmdcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHByb2ZpbGUgPSB7XG4gICAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgICAgcmVxdWlyZWQ6IFtcIm5hbWVcIiwgXCJ2ZXJzaW9uXCIsIFwicmVxdWlyZWRfZmllbGRcIl0sXG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIG5hbWU6IHsgdHlwZTogXCJzdHJpbmdcIiB9LFxuICAgICAgICB2ZXJzaW9uOiB7IHR5cGU6IFwic3RyaW5nXCIgfSxcbiAgICAgICAgcmVxdWlyZWRfZmllbGQ6IHsgdHlwZTogXCJzdHJpbmdcIiB9LFxuICAgICAgfSxcbiAgICB9XG5cbiAgICBjb25zdCBkZXNjcmlwdG9yID0ge1xuICAgICAgbmFtZTogXCJ0ZXN0LXBhY2thZ2VcIixcbiAgICAgIHZlcnNpb246IFwiMS4wLjBcIixcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB2YWxpZGF0ZURlc2NyaXB0b3Ioe1xuICAgICAgZGVzY3JpcHRvcixcbiAgICAgIHByb2ZpbGUsXG4gICAgfSlcblxuICAgIGV4cGVjdChBcnJheS5pc0FycmF5KHJlc3VsdCkpLnRvQmUodHJ1ZSlcbiAgICBleHBlY3QocmVzdWx0Lmxlbmd0aCkudG9CZUdyZWF0ZXJUaGFuKDApXG5cbiAgICBjb25zdCBlcnJvciA9IHJlc3VsdFswXVxuICAgIGV4cGVjdChlcnJvcikudG9CZURlZmluZWQoKVxuICAgIGlmIChlcnJvcikge1xuICAgICAgZXhwZWN0KGVycm9yLmtleXdvcmQpLnRvQmUoXCJyZXF1aXJlZFwiKVxuICAgICAgZXhwZWN0KGVycm9yLnBhcmFtcykudG9CZURlZmluZWQoKVxuICAgICAgaWYgKGVycm9yLnBhcmFtcykge1xuICAgICAgICBleHBlY3QoZXJyb3IucGFyYW1zLm1pc3NpbmdQcm9wZXJ0eSkudG9CZShcInJlcXVpcmVkX2ZpZWxkXCIpXG4gICAgICB9XG4gICAgfVxuICB9KVxuXG4gIGl0KFwidmFsaWRhdGVzIG5lc3RlZCBvYmplY3RzIGluIHRoZSBkZXNjcmlwdG9yXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBwcm9maWxlID0ge1xuICAgICAgdHlwZTogXCJvYmplY3RcIixcbiAgICAgIHJlcXVpcmVkOiBbXCJuYW1lXCIsIFwidmVyc2lvblwiLCBcImF1dGhvclwiXSxcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgbmFtZTogeyB0eXBlOiBcInN0cmluZ1wiIH0sXG4gICAgICAgIHZlcnNpb246IHsgdHlwZTogXCJzdHJpbmdcIiB9LFxuICAgICAgICBhdXRob3I6IHtcbiAgICAgICAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgICAgICAgIHJlcXVpcmVkOiBbXCJuYW1lXCIsIFwiZW1haWxcIl0sXG4gICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgbmFtZTogeyB0eXBlOiBcInN0cmluZ1wiIH0sXG4gICAgICAgICAgICBlbWFpbDoge1xuICAgICAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICBwYXR0ZXJuOiBcIl5bXkBdK0BbXkBdK1xcXFwuW15AXSskXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH1cblxuICAgIGNvbnN0IGRlc2NyaXB0b3IgPSB7XG4gICAgICBuYW1lOiBcInRlc3QtcGFja2FnZVwiLFxuICAgICAgdmVyc2lvbjogXCIxLjAuMFwiLFxuICAgICAgYXV0aG9yOiB7XG4gICAgICAgIG5hbWU6IFwiVGVzdCBBdXRob3JcIixcbiAgICAgICAgZW1haWw6IFwiaW52YWxpZC1lbWFpbFwiLFxuICAgICAgfSxcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB2YWxpZGF0ZURlc2NyaXB0b3Ioe1xuICAgICAgZGVzY3JpcHRvcixcbiAgICAgIHByb2ZpbGUsXG4gICAgfSlcblxuICAgIGV4cGVjdChBcnJheS5pc0FycmF5KHJlc3VsdCkpLnRvQmUodHJ1ZSlcbiAgICBleHBlY3QocmVzdWx0Lmxlbmd0aCkudG9CZUdyZWF0ZXJUaGFuKDApXG5cbiAgICBjb25zdCBoYXNFbWFpbFBhdHRlcm5FcnJvciA9IHJlc3VsdC5zb21lKFxuICAgICAgZXJyb3IgPT5cbiAgICAgICAgZXJyb3IgJiZcbiAgICAgICAgZXJyb3IuaW5zdGFuY2VQYXRoID09PSBcIi9hdXRob3IvZW1haWxcIiAmJlxuICAgICAgICBlcnJvci5rZXl3b3JkID09PSBcInBhdHRlcm5cIixcbiAgICApXG5cbiAgICBleHBlY3QoaGFzRW1haWxQYXR0ZXJuRXJyb3IpLnRvQmUodHJ1ZSlcbiAgfSlcbn0pXG4iXX0=
@@ -0,0 +1,88 @@
1
+ /**
2
+ * Descriptor that describes the structure of tabular data, such as delimiters,
3
+ * headers, and other features. Following the Data Package standard:
4
+ * https://datapackage.org/standard/table-dialect/
5
+ */
6
+ export interface Dialect {
7
+ /**
8
+ * The name of this dialect
9
+ */
10
+ name?: string;
11
+ /**
12
+ * JSON schema profile URL for validation
13
+ */
14
+ $schema?: string;
15
+ /**
16
+ * Whether the file includes a header row with field names
17
+ */
18
+ header?: boolean;
19
+ /**
20
+ * Row numbers (zero-based) that are considered header rows
21
+ */
22
+ headerRows?: number[];
23
+ /**
24
+ * The character used to join multi-line headers
25
+ */
26
+ headerJoin?: string;
27
+ /**
28
+ * Specific rows to be excluded from the data (zero-based)
29
+ */
30
+ commentRows?: number[];
31
+ /**
32
+ * Character sequence denoting the start of a comment line
33
+ */
34
+ commentChar?: string;
35
+ /**
36
+ * The character used to separate fields in the data
37
+ */
38
+ delimiter?: string;
39
+ /**
40
+ * Character sequence used to terminate rows
41
+ */
42
+ lineTerminator?: string;
43
+ /**
44
+ * Character used to quote fields
45
+ */
46
+ quoteChar?: string;
47
+ /**
48
+ * Controls whether a sequence of two quote characters represents a single quote
49
+ */
50
+ doubleQuote?: boolean;
51
+ /**
52
+ * Character used to escape the delimiter or quote characters
53
+ */
54
+ escapeChar?: string;
55
+ /**
56
+ * Character sequence representing null or missing values in the data
57
+ */
58
+ nullSequence?: string;
59
+ /**
60
+ * Whether to ignore whitespace immediately following the delimiter
61
+ */
62
+ skipInitialSpace?: boolean;
63
+ /**
64
+ * For JSON data, the property name containing the data array
65
+ */
66
+ property?: string;
67
+ /**
68
+ * The type of data item in the source: 'array' for rows represented as arrays,
69
+ * or 'object' for rows represented as objects
70
+ */
71
+ itemType?: "array" | "object";
72
+ /**
73
+ * For object-based data items, specifies which object properties to extract as values
74
+ */
75
+ itemKeys?: string[];
76
+ /**
77
+ * For spreadsheet data, the sheet number to read (zero-based)
78
+ */
79
+ sheetNumber?: number;
80
+ /**
81
+ * For spreadsheet data, the sheet name to read
82
+ */
83
+ sheetName?: string;
84
+ /**
85
+ * For database sources, the table name to read
86
+ */
87
+ table?: string;
88
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGlhbGVjdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL2RpYWxlY3QvRGlhbGVjdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBEZXNjcmlwdG9yIHRoYXQgZGVzY3JpYmVzIHRoZSBzdHJ1Y3R1cmUgb2YgdGFidWxhciBkYXRhLCBzdWNoIGFzIGRlbGltaXRlcnMsXG4gKiBoZWFkZXJzLCBhbmQgb3RoZXIgZmVhdHVyZXMuIEZvbGxvd2luZyB0aGUgRGF0YSBQYWNrYWdlIHN0YW5kYXJkOlxuICogaHR0cHM6Ly9kYXRhcGFja2FnZS5vcmcvc3RhbmRhcmQvdGFibGUtZGlhbGVjdC9cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEaWFsZWN0IHtcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoaXMgZGlhbGVjdFxuICAgKi9cbiAgbmFtZT86IHN0cmluZ1xuXG4gIC8qKlxuICAgKiBKU09OIHNjaGVtYSBwcm9maWxlIFVSTCBmb3IgdmFsaWRhdGlvblxuICAgKi9cbiAgJHNjaGVtYT86IHN0cmluZ1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBmaWxlIGluY2x1ZGVzIGEgaGVhZGVyIHJvdyB3aXRoIGZpZWxkIG5hbWVzXG4gICAqL1xuICBoZWFkZXI/OiBib29sZWFuXG5cbiAgLyoqXG4gICAqIFJvdyBudW1iZXJzICh6ZXJvLWJhc2VkKSB0aGF0IGFyZSBjb25zaWRlcmVkIGhlYWRlciByb3dzXG4gICAqL1xuICBoZWFkZXJSb3dzPzogbnVtYmVyW11cblxuICAvKipcbiAgICogVGhlIGNoYXJhY3RlciB1c2VkIHRvIGpvaW4gbXVsdGktbGluZSBoZWFkZXJzXG4gICAqL1xuICBoZWFkZXJKb2luPzogc3RyaW5nXG5cbiAgLyoqXG4gICAqIFNwZWNpZmljIHJvd3MgdG8gYmUgZXhjbHVkZWQgZnJvbSB0aGUgZGF0YSAoemVyby1iYXNlZClcbiAgICovXG4gIGNvbW1lbnRSb3dzPzogbnVtYmVyW11cblxuICAvKipcbiAgICogQ2hhcmFjdGVyIHNlcXVlbmNlIGRlbm90aW5nIHRoZSBzdGFydCBvZiBhIGNvbW1lbnQgbGluZVxuICAgKi9cbiAgY29tbWVudENoYXI/OiBzdHJpbmdcblxuICAvKipcbiAgICogVGhlIGNoYXJhY3RlciB1c2VkIHRvIHNlcGFyYXRlIGZpZWxkcyBpbiB0aGUgZGF0YVxuICAgKi9cbiAgZGVsaW1pdGVyPzogc3RyaW5nXG5cbiAgLyoqXG4gICAqIENoYXJhY3RlciBzZXF1ZW5jZSB1c2VkIHRvIHRlcm1pbmF0ZSByb3dzXG4gICAqL1xuICBsaW5lVGVybWluYXRvcj86IHN0cmluZ1xuXG4gIC8qKlxuICAgKiBDaGFyYWN0ZXIgdXNlZCB0byBxdW90ZSBmaWVsZHNcbiAgICovXG4gIHF1b3RlQ2hhcj86IHN0cmluZ1xuXG4gIC8qKlxuICAgKiBDb250cm9scyB3aGV0aGVyIGEgc2VxdWVuY2Ugb2YgdHdvIHF1b3RlIGNoYXJhY3RlcnMgcmVwcmVzZW50cyBhIHNpbmdsZSBxdW90ZVxuICAgKi9cbiAgZG91YmxlUXVvdGU/OiBib29sZWFuXG5cbiAgLyoqXG4gICAqIENoYXJhY3RlciB1c2VkIHRvIGVzY2FwZSB0aGUgZGVsaW1pdGVyIG9yIHF1b3RlIGNoYXJhY3RlcnNcbiAgICovXG4gIGVzY2FwZUNoYXI/OiBzdHJpbmdcblxuICAvKipcbiAgICogQ2hhcmFjdGVyIHNlcXVlbmNlIHJlcHJlc2VudGluZyBudWxsIG9yIG1pc3NpbmcgdmFsdWVzIGluIHRoZSBkYXRhXG4gICAqL1xuICBudWxsU2VxdWVuY2U/OiBzdHJpbmdcblxuICAvKipcbiAgICogV2hldGhlciB0byBpZ25vcmUgd2hpdGVzcGFjZSBpbW1lZGlhdGVseSBmb2xsb3dpbmcgdGhlIGRlbGltaXRlclxuICAgKi9cbiAgc2tpcEluaXRpYWxTcGFjZT86IGJvb2xlYW5cblxuICAvKipcbiAgICogRm9yIEpTT04gZGF0YSwgdGhlIHByb3BlcnR5IG5hbWUgY29udGFpbmluZyB0aGUgZGF0YSBhcnJheVxuICAgKi9cbiAgcHJvcGVydHk/OiBzdHJpbmdcblxuICAvKipcbiAgICogVGhlIHR5cGUgb2YgZGF0YSBpdGVtIGluIHRoZSBzb3VyY2U6ICdhcnJheScgZm9yIHJvd3MgcmVwcmVzZW50ZWQgYXMgYXJyYXlzLFxuICAgKiBvciAnb2JqZWN0JyBmb3Igcm93cyByZXByZXNlbnRlZCBhcyBvYmplY3RzXG4gICAqL1xuICBpdGVtVHlwZT86IFwiYXJyYXlcIiB8IFwib2JqZWN0XCJcblxuICAvKipcbiAgICogRm9yIG9iamVjdC1iYXNlZCBkYXRhIGl0ZW1zLCBzcGVjaWZpZXMgd2hpY2ggb2JqZWN0IHByb3BlcnRpZXMgdG8gZXh0cmFjdCBhcyB2YWx1ZXNcbiAgICovXG4gIGl0ZW1LZXlzPzogc3RyaW5nW11cblxuICAvKipcbiAgICogRm9yIHNwcmVhZHNoZWV0IGRhdGEsIHRoZSBzaGVldCBudW1iZXIgdG8gcmVhZCAoemVyby1iYXNlZClcbiAgICovXG4gIHNoZWV0TnVtYmVyPzogbnVtYmVyXG5cbiAgLyoqXG4gICAqIEZvciBzcHJlYWRzaGVldCBkYXRhLCB0aGUgc2hlZXQgbmFtZSB0byByZWFkXG4gICAqL1xuICBzaGVldE5hbWU/OiBzdHJpbmdcblxuICAvKipcbiAgICogRm9yIGRhdGFiYXNlIHNvdXJjZXMsIHRoZSB0YWJsZSBuYW1lIHRvIHJlYWRcbiAgICovXG4gIHRhYmxlPzogc3RyaW5nXG59XG4iXX0=
@@ -0,0 +1,3 @@
1
+ export { validateDialect } from "./validate.js";
2
+ export type { Dialect } from "./Dialect.js";
3
+ export { loadDialect } from "./load.js";
@@ -0,0 +1,3 @@
1
+ export { validateDialect } from "./validate.js";
2
+ export { loadDialect } from "./load.js";
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9kaWFsZWN0L2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFFL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLFdBQVcsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7IHZhbGlkYXRlRGlhbGVjdCB9IGZyb20gXCIuL3ZhbGlkYXRlLmpzXCJcbmV4cG9ydCB0eXBlIHsgRGlhbGVjdCB9IGZyb20gXCIuL0RpYWxlY3QuanNcIlxuZXhwb3J0IHsgbG9hZERpYWxlY3QgfSBmcm9tIFwiLi9sb2FkLmpzXCJcbiJdfQ==
@@ -0,0 +1,4 @@
1
+ import type { Dialect } from "./Dialect.js";
2
+ export declare function loadDialect(props: {
3
+ path: string;
4
+ }): Promise<Dialect>;
@@ -0,0 +1,7 @@
1
+ import { loadDescriptor } from "../descriptor/load.js";
2
+ export async function loadDialect(props) {
3
+ const descriptor = await loadDescriptor(props);
4
+ // TODO: validate descriptor against schema
5
+ return descriptor;
6
+ }
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL2RpYWxlY3QvbG9hZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sdUJBQXVCLENBQUE7QUFHdEQsTUFBTSxDQUFDLEtBQUssVUFBVSxXQUFXLENBQUMsS0FBdUI7SUFDdkQsTUFBTSxVQUFVLEdBQUcsTUFBTSxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDOUMsMkNBQTJDO0lBQzNDLE9BQU8sVUFBcUIsQ0FBQTtBQUM5QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgbG9hZERlc2NyaXB0b3IgfSBmcm9tIFwiLi4vZGVzY3JpcHRvci9sb2FkLmpzXCJcbmltcG9ydCB0eXBlIHsgRGlhbGVjdCB9IGZyb20gXCIuL0RpYWxlY3QuanNcIlxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbG9hZERpYWxlY3QocHJvcHM6IHsgcGF0aDogc3RyaW5nIH0pIHtcbiAgY29uc3QgZGVzY3JpcHRvciA9IGF3YWl0IGxvYWREZXNjcmlwdG9yKHByb3BzKVxuICAvLyBUT0RPOiB2YWxpZGF0ZSBkZXNjcmlwdG9yIGFnYWluc3Qgc2NoZW1hXG4gIHJldHVybiBkZXNjcmlwdG9yIGFzIERpYWxlY3Rcbn1cbiJdfQ==