frictionless-ts 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/LICENSE.md +9 -0
- package/README.md +3 -0
- package/build/dialect/index.d.ts +1 -0
- package/build/dialect/index.js +2 -0
- package/build/dialect/infer.d.ts +3 -0
- package/build/dialect/infer.js +13 -0
- package/build/dialect/infer.spec.d.ts +1 -0
- package/build/dialect/infer.spec.js +89 -0
- package/build/index.d.ts +19 -0
- package/build/index.js +19 -0
- package/build/package/index.d.ts +4 -0
- package/build/package/index.js +5 -0
- package/build/package/infer.d.ts +40 -0
- package/build/package/infer.js +13 -0
- package/build/package/infer.spec.d.ts +1 -0
- package/build/package/infer.spec.js +121 -0
- package/build/package/integrity.d.ts +8 -0
- package/build/package/integrity.js +69 -0
- package/build/package/integrity.spec.d.ts +1 -0
- package/build/package/integrity.spec.js +575 -0
- package/build/package/load.d.ts +1 -0
- package/build/package/load.js +10 -0
- package/build/package/load.spec.d.ts +1 -0
- package/build/package/load.spec.js +117 -0
- package/build/package/save.d.ts +5 -0
- package/build/package/save.js +13 -0
- package/build/package/save.spec.d.ts +1 -0
- package/build/package/save.spec.js +138 -0
- package/build/package/validate.d.ts +20 -0
- package/build/package/validate.js +62 -0
- package/build/package/validate.spec.d.ts +1 -0
- package/build/package/validate.spec.js +172 -0
- package/build/plugin.d.ts +2 -0
- package/build/plugin.js +2 -0
- package/build/resource/index.d.ts +2 -0
- package/build/resource/index.js +3 -0
- package/build/resource/infer.d.ts +22 -0
- package/build/resource/infer.js +49 -0
- package/build/resource/infer.spec.d.ts +1 -0
- package/build/resource/infer.spec.js +164 -0
- package/build/resource/validate.d.ts +12 -0
- package/build/resource/validate.js +35 -0
- package/build/resource/validate.spec.d.ts +1 -0
- package/build/resource/validate.spec.js +147 -0
- package/build/schema/index.d.ts +1 -0
- package/build/schema/index.js +2 -0
- package/build/schema/infer.d.ts +3 -0
- package/build/schema/infer.js +18 -0
- package/build/schema/infer.spec.d.ts +1 -0
- package/build/schema/infer.spec.js +136 -0
- package/build/system.d.ts +6 -0
- package/build/system.js +41 -0
- package/build/table/index.d.ts +3 -0
- package/build/table/index.js +4 -0
- package/build/table/infer.d.ts +6 -0
- package/build/table/infer.js +20 -0
- package/build/table/infer.spec.d.ts +1 -0
- package/build/table/infer.spec.js +177 -0
- package/build/table/load.d.ts +3 -0
- package/build/table/load.js +11 -0
- package/build/table/load.spec.d.ts +1 -0
- package/build/table/load.spec.js +121 -0
- package/build/table/save.d.ts +2 -0
- package/build/table/save.js +11 -0
- package/build/table/save.spec.d.ts +1 -0
- package/build/table/save.spec.js +189 -0
- package/build/table/validate.d.ts +9 -0
- package/build/table/validate.js +26 -0
- package/package.json +38 -0
package/LICENSE.md
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# The MIT License (MIT)
|
|
2
|
+
|
|
3
|
+
Copyright © `2025` `Evgeny Karev`
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
|
6
|
+
|
|
7
|
+
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
|
8
|
+
|
|
9
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
# @frictionless-ts
|
|
2
|
+
|
|
3
|
+
frictionless-ts is a fast TypeScript data management framework built on top of the Data Package standard and Polars DataFrames. It supports various formats like CSV, JSON, and Parquet and integrates with data platforms such as CKAN, Zenodo, and GitHub. For more information, please read the [project's documentation](https://frictionlessdata.github.io/frictionless-ts/).
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { inferDialect } from "./infer.ts";
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export { inferDialect } from "./infer.js";
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9kaWFsZWN0L2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxZQUFZLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyBpbmZlckRpYWxlY3QgfSBmcm9tIFwiLi9pbmZlci50c1wiXG4iXX0=
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { system } from "../system.js";
|
|
2
|
+
// TODO: review default values being {} vs undefined
|
|
3
|
+
export async function inferDialect(resource, options) {
|
|
4
|
+
let dialect = {};
|
|
5
|
+
for (const plugin of system.plugins) {
|
|
6
|
+
const result = await plugin.inferDialect?.(resource, options);
|
|
7
|
+
if (result) {
|
|
8
|
+
dialect = result;
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
return dialect;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5mZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9kaWFsZWN0L2luZmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxjQUFjLENBQUE7QUFFckMsb0RBQW9EO0FBRXBELE1BQU0sQ0FBQyxLQUFLLFVBQVUsWUFBWSxDQUNoQyxRQUEyQixFQUMzQixPQUE2QjtJQUU3QixJQUFJLE9BQU8sR0FBWSxFQUFFLENBQUE7SUFFekIsS0FBSyxNQUFNLE1BQU0sSUFBSSxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDcEMsTUFBTSxNQUFNLEdBQUcsTUFBTSxNQUFNLENBQUMsWUFBWSxFQUFFLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFBO1FBQzdELElBQUksTUFBTSxFQUFFLENBQUM7WUFDWCxPQUFPLEdBQUcsTUFBTSxDQUFBO1FBQ2xCLENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTyxPQUFPLENBQUE7QUFDaEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRGlhbGVjdCwgUmVzb3VyY2UgfSBmcm9tIFwiQGZyaWN0aW9ubGVzcy10cy9tZXRhZGF0YVwiXG5pbXBvcnQgdHlwZSB7IEluZmVyRGlhbGVjdE9wdGlvbnMgfSBmcm9tIFwiQGZyaWN0aW9ubGVzcy10cy90YWJsZVwiXG5pbXBvcnQgeyBzeXN0ZW0gfSBmcm9tIFwiLi4vc3lzdGVtLnRzXCJcblxuLy8gVE9ETzogcmV2aWV3IGRlZmF1bHQgdmFsdWVzIGJlaW5nIHt9IHZzIHVuZGVmaW5lZFxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaW5mZXJEaWFsZWN0KFxuICByZXNvdXJjZTogUGFydGlhbDxSZXNvdXJjZT4sXG4gIG9wdGlvbnM/OiBJbmZlckRpYWxlY3RPcHRpb25zLFxuKSB7XG4gIGxldCBkaWFsZWN0OiBEaWFsZWN0ID0ge31cblxuICBmb3IgKGNvbnN0IHBsdWdpbiBvZiBzeXN0ZW0ucGx1Z2lucykge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHBsdWdpbi5pbmZlckRpYWxlY3Q/LihyZXNvdXJjZSwgb3B0aW9ucylcbiAgICBpZiAocmVzdWx0KSB7XG4gICAgICBkaWFsZWN0ID0gcmVzdWx0XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGRpYWxlY3Rcbn1cbiJdfQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { writeTempFile } from "@frictionless-ts/dataset";
|
|
2
|
+
import { describe, expect, it } from "vitest";
|
|
3
|
+
import { inferDialect } from "./infer.js";
|
|
4
|
+
// TODO: fix this test/implementation
|
|
5
|
+
describe.skip("inferDialect", () => {
|
|
6
|
+
it("should infer dialect from CSV file with comma delimiter", async () => {
|
|
7
|
+
const csvPath = await writeTempFile("id,name,age\n1,alice,25\n2,bob,30");
|
|
8
|
+
const resource = { path: csvPath, format: "csv" };
|
|
9
|
+
const dialect = await inferDialect(resource);
|
|
10
|
+
expect(dialect).toEqual({ delimiter: "|" });
|
|
11
|
+
});
|
|
12
|
+
it("should infer dialect from CSV file with pipe delimiter", async () => {
|
|
13
|
+
const csvPath = await writeTempFile("id|name|age\n1|alice|25\n2|bob|30");
|
|
14
|
+
const resource = { path: csvPath, format: "csv" };
|
|
15
|
+
const dialect = await inferDialect(resource);
|
|
16
|
+
expect(dialect).toEqual({ delimiter: "|" });
|
|
17
|
+
});
|
|
18
|
+
it("should infer dialect from CSV file with semicolon delimiter", async () => {
|
|
19
|
+
const csvPath = await writeTempFile("id;name;age\n1;alice;25\n2;bob;30");
|
|
20
|
+
const resource = { path: csvPath, format: "csv" };
|
|
21
|
+
const dialect = await inferDialect(resource);
|
|
22
|
+
expect(dialect).toEqual({ delimiter: ";" });
|
|
23
|
+
});
|
|
24
|
+
it("should infer dialect from CSV file with tab delimiter", async () => {
|
|
25
|
+
const csvPath = await writeTempFile("id\tname\tage\n1\talice\t25\n2\tbob\t30");
|
|
26
|
+
const resource = { path: csvPath, format: "csv" };
|
|
27
|
+
const dialect = await inferDialect(resource, { delimiter: "\t" });
|
|
28
|
+
expect(dialect).toBeDefined();
|
|
29
|
+
});
|
|
30
|
+
it("should handle CSV with quoted fields", async () => {
|
|
31
|
+
const csvPath = await writeTempFile('id,name,description\n1,"alice","Description with, comma"\n2,"bob","Normal text"');
|
|
32
|
+
const resource = { path: csvPath, format: "csv" };
|
|
33
|
+
const dialect = await inferDialect(resource);
|
|
34
|
+
expect(dialect).toBeDefined();
|
|
35
|
+
});
|
|
36
|
+
it("should handle CSV with different quote character", async () => {
|
|
37
|
+
const csvPath = await writeTempFile("id,name,description\n1,'alice','Description text'\n2,'bob','Normal text'");
|
|
38
|
+
const resource = { path: csvPath, format: "csv" };
|
|
39
|
+
const dialect = await inferDialect(resource);
|
|
40
|
+
expect(dialect).toBeDefined();
|
|
41
|
+
});
|
|
42
|
+
it("should handle resources without path", async () => {
|
|
43
|
+
const resource = {
|
|
44
|
+
name: "test-resource",
|
|
45
|
+
data: [
|
|
46
|
+
{ id: 1, name: "alice" },
|
|
47
|
+
{ id: 2, name: "bob" },
|
|
48
|
+
],
|
|
49
|
+
};
|
|
50
|
+
const dialect = await inferDialect(resource);
|
|
51
|
+
expect(dialect).toBeDefined();
|
|
52
|
+
});
|
|
53
|
+
it("should return empty object for non-CSV resources", async () => {
|
|
54
|
+
const resource = {
|
|
55
|
+
name: "test-resource",
|
|
56
|
+
format: "json",
|
|
57
|
+
data: [{ id: 1 }],
|
|
58
|
+
};
|
|
59
|
+
const dialect = await inferDialect(resource);
|
|
60
|
+
expect(dialect).toBeDefined();
|
|
61
|
+
expect(typeof dialect).toBe("object");
|
|
62
|
+
});
|
|
63
|
+
it("should handle CSV with custom line terminator", async () => {
|
|
64
|
+
const csvPath = await writeTempFile("id,name\r\n1,alice\r\n2,bob\r\n");
|
|
65
|
+
const resource = { path: csvPath, format: "csv" };
|
|
66
|
+
const dialect = await inferDialect(resource);
|
|
67
|
+
expect(dialect).toBeDefined();
|
|
68
|
+
});
|
|
69
|
+
it("should handle CSV with header row only", async () => {
|
|
70
|
+
const csvPath = await writeTempFile("id,name,age");
|
|
71
|
+
const resource = { path: csvPath, format: "csv" };
|
|
72
|
+
const dialect = await inferDialect(resource);
|
|
73
|
+
expect(dialect).toBeDefined();
|
|
74
|
+
});
|
|
75
|
+
it("should handle empty CSV file", async () => {
|
|
76
|
+
const csvPath = await writeTempFile("");
|
|
77
|
+
const resource = { path: csvPath, format: "csv" };
|
|
78
|
+
const dialect = await inferDialect(resource);
|
|
79
|
+
expect(dialect).toBeDefined();
|
|
80
|
+
expect(typeof dialect).toBe("object");
|
|
81
|
+
});
|
|
82
|
+
it("should respect provided delimiter option", async () => {
|
|
83
|
+
const csvPath = await writeTempFile("id|name|age\n1|alice|25\n2|bob|30");
|
|
84
|
+
const resource = { path: csvPath, format: "csv" };
|
|
85
|
+
const dialect = await inferDialect(resource, { delimiter: "|" });
|
|
86
|
+
expect(dialect).toBeDefined();
|
|
87
|
+
});
|
|
88
|
+
});
|
|
89
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5mZXIuc3BlYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL2RpYWxlY3QvaW5mZXIuc3BlYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMEJBQTBCLENBQUE7QUFDeEQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLE1BQU0sUUFBUSxDQUFBO0FBQzdDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxZQUFZLENBQUE7QUFFekMscUNBQXFDO0FBQ3JDLFFBQVEsQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLEdBQUcsRUFBRTtJQUNqQyxFQUFFLENBQUMseURBQXlELEVBQUUsS0FBSyxJQUFJLEVBQUU7UUFDdkUsTUFBTSxPQUFPLEdBQUcsTUFBTSxhQUFhLENBQUMsbUNBQW1DLENBQUMsQ0FBQTtRQUN4RSxNQUFNLFFBQVEsR0FBRyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLEtBQWMsRUFBRSxDQUFBO1FBRTFELE1BQU0sT0FBTyxHQUFHLE1BQU0sWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFBO1FBRTVDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQTtJQUM3QyxDQUFDLENBQUMsQ0FBQTtJQUVGLEVBQUUsQ0FBQyx3REFBd0QsRUFBRSxLQUFLLElBQUksRUFBRTtRQUN0RSxNQUFNLE9BQU8sR0FBRyxNQUFNLGFBQWEsQ0FBQyxtQ0FBbUMsQ0FBQyxDQUFBO1FBQ3hFLE1BQU0sUUFBUSxHQUFHLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsS0FBYyxFQUFFLENBQUE7UUFFMUQsTUFBTSxPQUFPLEdBQUcsTUFBTSxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUE7UUFFNUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFLFNB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QUMsQ0FBQTtRQUU1QyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUE7UUFDN0IsTUFBTSxDQUFDLE9BQU8sT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFBO0lBQ3ZDLENBQUMsQ0FBQyxDQUFBO0lBRUYsRUFBRSxDQUFDLDBDQUEwQyxFQUFFLEtBQUssSUFBSSxFQUFFO1FBQ3hELE1BQU0sT0FBTyxHQUFHLE1BQU0sYUFBYSxDQUFDLG1DQUFtQyxDQUFDLENBQUE7UUFDeEUsTUFBTSxRQUFRLEdBQUcsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxLQUFjLEVBQUUsQ0FBQTtRQUUxRCxNQUFNLE9BQU8sR0FBRyxNQUFNLFlBQVksQ0FBQyxRQUFRLEVBQUUsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQTtRQUVoRSxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUE7SUFDL0IsQ0FBQyxDQUFDLENBQUE7QUFDSixDQUFDLENBQUMsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHdyaXRlVGVtcEZpbGUgfSBmcm9tIFwiQGZyaWN0aW9ubGVzcy10cy9kYXRhc2V0XCJcbmltcG9ydCB7IGRlc2NyaWJlLCBleHBlY3QsIGl0IH0gZnJvbSBcInZpdGVzdFwiXG5pbXBvcnQgeyBpbmZlckRpYWxlY3QgfSBmcm9tIFwiLi9pbmZlci50c1wiXG5cbi8vIFRPRE86IGZpeCB0aGlzIHRlc3QvaW1wbGVtZW50YXRpb25cbmRlc2NyaWJlLnNraXAoXCJpbmZlckRpYWxlY3RcIiwgKCkgPT4ge1xuICBpdChcInNob3VsZCBpbmZlciBkaWFsZWN0IGZyb20gQ1NWIGZpbGUgd2l0aCBjb21tYSBkZWxpbWl0ZXJcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGNzdlBhdGggPSBhd2FpdCB3cml0ZVRlbXBGaWxlKFwiaWQsbmFtZSxhZ2VcXG4xLGFsaWNlLDI1XFxuMixib2IsMzBcIilcbiAgICBjb25zdCByZXNvdXJjZSA9IHsgcGF0aDogY3N2UGF0aCwgZm9ybWF0OiBcImNzdlwiIGFzIGNvbnN0IH1cblxuICAgIGNvbnN0IGRpYWxlY3QgPSBhd2FpdCBpbmZlckRpYWxlY3QocmVzb3VyY2UpXG5cbiAgICBleHBlY3QoZGlhbGVjdCkudG9FcXVhbCh7IGRlbGltaXRlcjogXCJ8XCIgfSlcbiAgfSlcblxuICBpdChcInNob3VsZCBpbmZlciBkaWFsZWN0IGZyb20gQ1NWIGZpbGUgd2l0aCBwaXBlIGRlbGltaXRlclwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgY3N2UGF0aCA9IGF3YWl0IHdyaXRlVGVtcEZpbGUoXCJpZHxuYW1lfGFnZVxcbjF8YWxpY2V8MjVcXG4yfGJvYnwzMFwiKVxuICAgIGNvbnN0IHJlc291cmNlID0geyBwYXRoOiBjc3ZQYXRoLCBmb3JtYXQ6IFwiY3N2XCIgYXMgY29uc3QgfVxuXG4gICAgY29uc3QgZGlhbGVjdCA9IGF3YWl0IGluZmVyRGlhbGVjdChyZXNvdXJjZSlcblxuICAgIGV4cGVjdChkaWFsZWN0KS50b0VxdWFsKHsgZGVsaW1pdGVyOiBcInxcIiB9KVxuICB9KVxuXG4gIGl0KFwic2hvdWxkIGluZmVyIGRpYWxlY3QgZnJvbSBDU1YgZmlsZSB3aXRoIHNlbWljb2xvbiBkZWxpbWl0ZXJcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGNzdlBhdGggPSBhd2FpdCB3cml0ZVRlbXBGaWxlKFwiaWQ7bmFtZTthZ2VcXG4xO2FsaWNlOzI1XFxuMjtib2I7MzBcIilcbiAgICBjb25zdCByZXNvdXJjZSA9IHsgcGF0aDogY3N2UGF0aCwgZm9ybWF0OiBcImNzdlwiIGFzIGNvbnN0IH1cblxuICAgIGNvbnN0IGRpYWxlY3QgPSBhd2FpdCBpbmZlckRpYWxlY3QocmVzb3VyY2UpXG5cbiAgICBleHBlY3QoZGlhbGVjdCkudG9FcXVhbCh7IGRlbGltaXRlcjogXCI7XCIgfSlcbiAgfSlcblxuICBpdChcInNob3VsZCBpbmZlciBkaWFsZWN0IGZyb20gQ1NWIGZpbGUgd2l0aCB0YWIgZGVsaW1pdGVyXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBjc3ZQYXRoID0gYXdhaXQgd3JpdGVUZW1wRmlsZShcbiAgICAgIFwiaWRcXHRuYW1lXFx0YWdlXFxuMVxcdGFsaWNlXFx0MjVcXG4yXFx0Ym9iXFx0MzBcIixcbiAgICApXG4gICAgY29uc3QgcmVzb3VyY2UgPSB7IHBhdGg6IGNzdlBhdGgsIGZvcm1hdDogXCJjc3ZcIiBhcyBjb25zdCB9XG5cbiAgICBjb25zdCBkaWFsZWN0ID0gYXdhaXQgaW5mZXJEaWFsZWN0KHJlc291cmNlLCB7IGRlbGltaXRlcjogXCJcXHRcIiB9KVxuXG4gICAgZXhwZWN0KGRpYWxlY3QpLnRvQmVEZWZpbmVkKClcbiAgfSlcblxuICBpdChcInNob3VsZCBoYW5kbGUgQ1NWIHdpdGggcXVvdGVkIGZpZWxkc1wiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgY3N2UGF0aCA9IGF3YWl0IHdyaXRlVGVtcEZpbGUoXG4gICAgICAnaWQsbmFtZSxkZXNjcmlwdGlvblxcbjEsXCJhbGljZVwiLFwiRGVzY3JpcHRpb24gd2l0aCwgY29tbWFcIlxcbjIsXCJib2JcIixcIk5vcm1hbCB0ZXh0XCInLFxuICAgIClcbiAgICBjb25zdCByZXNvdXJjZSA9IHsgcGF0aDogY3N2UGF0aCwgZm9ybWF0OiBcImNzdlwiIGFzIGNvbnN0IH1cblxuICAgIGNvbnN0IGRpYWxlY3QgPSBhd2FpdCBpbmZlckRpYWxlY3QocmVzb3VyY2UpXG5cbiAgICBleHBlY3QoZGlhbGVjdCkudG9CZURlZmluZWQoKVxuICB9KVxuXG4gIGl0KFwic2hvdWxkIGhhbmRsZSBDU1Ygd2l0aCBkaWZmZXJlbnQgcXVvdGUgY2hhcmFjdGVyXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBjc3ZQYXRoID0gYXdhaXQgd3JpdGVUZW1wRmlsZShcbiAgICAgIFwiaWQsbmFtZSxkZXNjcmlwdGlvblxcbjEsJ2FsaWNlJywnRGVzY3JpcHRpb24gdGV4dCdcXG4yLCdib2InLCdOb3JtYWwgdGV4dCdcIixcbiAgICApXG4gICAgY29uc3QgcmVzb3VyY2UgPSB7IHBhdGg6IGNzdlBhdGgsIGZvcm1hdDogXCJjc3ZcIiBhcyBjb25zdCB9XG5cbiAgICBjb25zdCBkaWFsZWN0ID0gYXdhaXQgaW5mZXJEaWFsZWN0KHJlc291cmNlKVxuXG4gICAgZXhwZWN0KGRpYWxlY3QpLnRvQmVEZWZpbmVkKClcbiAgfSlcblxuICBpdChcInNob3VsZCBoYW5kbGUgcmVzb3VyY2VzIHdpdGhvdXQgcGF0aFwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgcmVzb3VyY2UgPSB7XG4gICAgICBuYW1lOiBcInRlc3QtcmVzb3VyY2VcIixcbiAgICAgIGRhdGE6IFtcbiAgICAgICAgeyBpZDogMSwgbmFtZTogXCJhbGljZVwiIH0sXG4gICAgICAgIHsgaWQ6IDIsIG5hbWU6IFwiYm9iXCIgfSxcbiAgICAgIF0sXG4gICAgfVxuXG4gICAgY29uc3QgZGlhbGVjdCA9IGF3YWl0IGluZmVyRGlhbGVjdChyZXNvdXJjZSlcblxuICAgIGV4cGVjdChkaWFsZWN0KS50b0JlRGVmaW5lZCgpXG4gIH0pXG5cbiAgaXQoXCJzaG91bGQgcmV0dXJuIGVtcHR5IG9iamVjdCBmb3Igbm9uLUNTViByZXNvdXJjZXNcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHJlc291cmNlID0ge1xuICAgICAgbmFtZTogXCJ0ZXN0LXJlc291cmNlXCIsXG4gICAgICBmb3JtYXQ6IFwianNvblwiIGFzIGNvbnN0LFxuICAgICAgZGF0YTogW3sgaWQ6IDEgfV0sXG4gICAgfVxuXG4gICAgY29uc3QgZGlhbGVjdCA9IGF3YWl0IGluZmVyRGlhbGVjdChyZXNvdXJjZSlcblxuICAgIGV4cGVjdChkaWFsZWN0KS50b0JlRGVmaW5lZCgpXG4gICAgZXhwZWN0KHR5cGVvZiBkaWFsZWN0KS50b0JlKFwib2JqZWN0XCIpXG4gIH0pXG5cbiAgaXQoXCJzaG91bGQgaGFuZGxlIENTViB3aXRoIGN1c3RvbSBsaW5lIHRlcm1pbmF0b3JcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGNzdlBhdGggPSBhd2FpdCB3cml0ZVRlbXBGaWxlKFwiaWQsbmFtZVxcclxcbjEsYWxpY2VcXHJcXG4yLGJvYlxcclxcblwiKVxuICAgIGNvbnN0IHJlc291cmNlID0geyBwYXRoOiBjc3ZQYXRoLCBmb3JtYXQ6IFwiY3N2XCIgYXMgY29uc3QgfVxuXG4gICAgY29uc3QgZGlhbGVjdCA9IGF3YWl0IGluZmVyRGlhbGVjdChyZXNvdXJjZSlcblxuICAgIGV4cGVjdChkaWFsZWN0KS50b0JlRGVmaW5lZCgpXG4gIH0pXG5cbiAgaXQoXCJzaG91bGQgaGFuZGxlIENTViB3aXRoIGhlYWRlciByb3cgb25seVwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgY3N2UGF0aCA9IGF3YWl0IHdyaXRlVGVtcEZpbGUoXCJpZCxuYW1lLGFnZVwiKVxuICAgIGNvbnN0IHJlc291cmNlID0geyBwYXRoOiBjc3ZQYXRoLCBmb3JtYXQ6IFwiY3N2XCIgYXMgY29uc3QgfVxuXG4gICAgY29uc3QgZGlhbGVjdCA9IGF3YWl0IGluZmVyRGlhbGVjdChyZXNvdXJjZSlcblxuICAgIGV4cGVjdChkaWFsZWN0KS50b0JlRGVmaW5lZCgpXG4gIH0pXG5cbiAgaXQoXCJzaG91bGQgaGFuZGxlIGVtcHR5IENTViBmaWxlXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBjc3ZQYXRoID0gYXdhaXQgd3JpdGVUZW1wRmlsZShcIlwiKVxuICAgIGNvbnN0IHJlc291cmNlID0geyBwYXRoOiBjc3ZQYXRoLCBmb3JtYXQ6IFwiY3N2XCIgYXMgY29uc3QgfVxuXG4gICAgY29uc3QgZGlhbGVjdCA9IGF3YWl0IGluZmVyRGlhbGVjdChyZXNvdXJjZSlcblxuICAgIGV4cGVjdChkaWFsZWN0KS50b0JlRGVmaW5lZCgpXG4gICAgZXhwZWN0KHR5cGVvZiBkaWFsZWN0KS50b0JlKFwib2JqZWN0XCIpXG4gIH0pXG5cbiAgaXQoXCJzaG91bGQgcmVzcGVjdCBwcm92aWRlZCBkZWxpbWl0ZXIgb3B0aW9uXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBjc3ZQYXRoID0gYXdhaXQgd3JpdGVUZW1wRmlsZShcImlkfG5hbWV8YWdlXFxuMXxhbGljZXwyNVxcbjJ8Ym9ifDMwXCIpXG4gICAgY29uc3QgcmVzb3VyY2UgPSB7IHBhdGg6IGNzdlBhdGgsIGZvcm1hdDogXCJjc3ZcIiBhcyBjb25zdCB9XG5cbiAgICBjb25zdCBkaWFsZWN0ID0gYXdhaXQgaW5mZXJEaWFsZWN0KHJlc291cmNlLCB7IGRlbGltaXRlcjogXCJ8XCIgfSlcblxuICAgIGV4cGVjdChkaWFsZWN0KS50b0JlRGVmaW5lZCgpXG4gIH0pXG59KVxuIl19
|
package/build/index.d.ts
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export * from "@frictionless-ts/dataset";
|
|
2
|
+
export * from "@frictionless-ts/database";
|
|
3
|
+
export * from "@frictionless-ts/document";
|
|
4
|
+
export * from "@frictionless-ts/metadata";
|
|
5
|
+
export * from "@frictionless-ts/table";
|
|
6
|
+
export type { Plugin } from "./plugin.ts";
|
|
7
|
+
export { System } from "./system.ts";
|
|
8
|
+
export { inferDialect } from "./dialect/index.ts";
|
|
9
|
+
export { inferPackage } from "./package/index.ts";
|
|
10
|
+
export { inferResource } from "./resource/index.ts";
|
|
11
|
+
export { inferSchema } from "./schema/index.ts";
|
|
12
|
+
export { loadPackage } from "./package/index.ts";
|
|
13
|
+
export { loadTable } from "./table/index.ts";
|
|
14
|
+
export { savePackage } from "./package/index.ts";
|
|
15
|
+
export { saveTable } from "./table/index.ts";
|
|
16
|
+
export { system } from "./system.ts";
|
|
17
|
+
export { validatePackage } from "./package/index.ts";
|
|
18
|
+
export { validateResource } from "./resource/index.ts";
|
|
19
|
+
export { validateTable } from "./table/index.ts";
|
package/build/index.js
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export * from "@frictionless-ts/dataset";
|
|
2
|
+
export * from "@frictionless-ts/database";
|
|
3
|
+
export * from "@frictionless-ts/document";
|
|
4
|
+
export * from "@frictionless-ts/metadata";
|
|
5
|
+
export * from "@frictionless-ts/table";
|
|
6
|
+
export { System } from "./system.js";
|
|
7
|
+
export { inferDialect } from "./dialect/index.js";
|
|
8
|
+
export { inferPackage } from "./package/index.js";
|
|
9
|
+
export { inferResource } from "./resource/index.js";
|
|
10
|
+
export { inferSchema } from "./schema/index.js";
|
|
11
|
+
export { loadPackage } from "./package/index.js";
|
|
12
|
+
export { loadTable } from "./table/index.js";
|
|
13
|
+
export { savePackage } from "./package/index.js";
|
|
14
|
+
export { saveTable } from "./table/index.js";
|
|
15
|
+
export { system } from "./system.js";
|
|
16
|
+
export { validatePackage } from "./package/index.js";
|
|
17
|
+
export { validateResource } from "./resource/index.js";
|
|
18
|
+
export { validateTable } from "./table/index.js";
|
|
19
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLDBCQUEwQixDQUFBO0FBQ3hDLGNBQWMsMkJBQTJCLENBQUE7QUFDekMsY0FBYywyQkFBMkIsQ0FBQTtBQUN6QyxjQUFjLDJCQUEyQixDQUFBO0FBQ3pDLGNBQWMsd0JBQXdCLENBQUE7QUFJdEMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGFBQWEsQ0FBQTtBQUVwQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sb0JBQW9CLENBQUE7QUFDakQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9CQUFvQixDQUFBO0FBQ2pELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQTtBQUNuRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sbUJBQW1CLENBQUE7QUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG9CQUFvQixDQUFBO0FBQ2hELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQTtBQUM1QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sb0JBQW9CLENBQUE7QUFDaEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGtCQUFrQixDQUFBO0FBQzVDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxhQUFhLENBQUE7QUFDcEMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFBO0FBQ3BELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFBO0FBQ3RELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gXCJAZnJpY3Rpb25sZXNzLXRzL2RhdGFzZXRcIlxuZXhwb3J0ICogZnJvbSBcIkBmcmljdGlvbmxlc3MtdHMvZGF0YWJhc2VcIlxuZXhwb3J0ICogZnJvbSBcIkBmcmljdGlvbmxlc3MtdHMvZG9jdW1lbnRcIlxuZXhwb3J0ICogZnJvbSBcIkBmcmljdGlvbmxlc3MtdHMvbWV0YWRhdGFcIlxuZXhwb3J0ICogZnJvbSBcIkBmcmljdGlvbmxlc3MtdHMvdGFibGVcIlxuXG5leHBvcnQgdHlwZSB7IFBsdWdpbiB9IGZyb20gXCIuL3BsdWdpbi50c1wiXG5cbmV4cG9ydCB7IFN5c3RlbSB9IGZyb20gXCIuL3N5c3RlbS50c1wiXG5cbmV4cG9ydCB7IGluZmVyRGlhbGVjdCB9IGZyb20gXCIuL2RpYWxlY3QvaW5kZXgudHNcIlxuZXhwb3J0IHsgaW5mZXJQYWNrYWdlIH0gZnJvbSBcIi4vcGFja2FnZS9pbmRleC50c1wiXG5leHBvcnQgeyBpbmZlclJlc291cmNlIH0gZnJvbSBcIi4vcmVzb3VyY2UvaW5kZXgudHNcIlxuZXhwb3J0IHsgaW5mZXJTY2hlbWEgfSBmcm9tIFwiLi9zY2hlbWEvaW5kZXgudHNcIlxuZXhwb3J0IHsgbG9hZFBhY2thZ2UgfSBmcm9tIFwiLi9wYWNrYWdlL2luZGV4LnRzXCJcbmV4cG9ydCB7IGxvYWRUYWJsZSB9IGZyb20gXCIuL3RhYmxlL2luZGV4LnRzXCJcbmV4cG9ydCB7IHNhdmVQYWNrYWdlIH0gZnJvbSBcIi4vcGFja2FnZS9pbmRleC50c1wiXG5leHBvcnQgeyBzYXZlVGFibGUgfSBmcm9tIFwiLi90YWJsZS9pbmRleC50c1wiXG5leHBvcnQgeyBzeXN0ZW0gfSBmcm9tIFwiLi9zeXN0ZW0udHNcIlxuZXhwb3J0IHsgdmFsaWRhdGVQYWNrYWdlIH0gZnJvbSBcIi4vcGFja2FnZS9pbmRleC50c1wiXG5leHBvcnQgeyB2YWxpZGF0ZVJlc291cmNlIH0gZnJvbSBcIi4vcmVzb3VyY2UvaW5kZXgudHNcIlxuZXhwb3J0IHsgdmFsaWRhdGVUYWJsZSB9IGZyb20gXCIuL3RhYmxlL2luZGV4LnRzXCJcbiJdfQ==
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { loadPackage } from "./load.js";
|
|
2
|
+
export { savePackage } from "./save.js";
|
|
3
|
+
export { inferPackage } from "./infer.js";
|
|
4
|
+
export { validatePackage, validatePackageData } from "./validate.js";
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9wYWNrYWdlL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxXQUFXLENBQUE7QUFDdkMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLFdBQVcsQ0FBQTtBQUN2QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sWUFBWSxDQUFBO0FBQ3pDLE9BQU8sRUFBRSxlQUFlLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxlQUFlLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyBsb2FkUGFja2FnZSB9IGZyb20gXCIuL2xvYWQudHNcIlxuZXhwb3J0IHsgc2F2ZVBhY2thZ2UgfSBmcm9tIFwiLi9zYXZlLnRzXCJcbmV4cG9ydCB7IGluZmVyUGFja2FnZSB9IGZyb20gXCIuL2luZmVyLnRzXCJcbmV4cG9ydCB7IHZhbGlkYXRlUGFja2FnZSwgdmFsaWRhdGVQYWNrYWdlRGF0YSB9IGZyb20gXCIuL3ZhbGlkYXRlLnRzXCJcbiJdfQ==
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import type { Package, Resource } from "@frictionless-ts/metadata";
|
|
2
|
+
import type { InferDialectOptions } from "@frictionless-ts/table";
|
|
3
|
+
import type { InferSchemaOptions } from "@frictionless-ts/table";
|
|
4
|
+
interface PartialPackage extends Omit<Package, "resources"> {
|
|
5
|
+
resources: Partial<Resource>[];
|
|
6
|
+
}
|
|
7
|
+
export declare function inferPackage(dataPackage: PartialPackage, options?: InferDialectOptions & InferSchemaOptions): Promise<{
|
|
8
|
+
resources: {
|
|
9
|
+
name: string;
|
|
10
|
+
$schema?: string | undefined;
|
|
11
|
+
path?: string | string[] | undefined;
|
|
12
|
+
data?: unknown | unknown[][] | Record<string, unknown>[];
|
|
13
|
+
type?: "table" | undefined;
|
|
14
|
+
format?: string | undefined;
|
|
15
|
+
mediatype?: string | undefined;
|
|
16
|
+
encoding?: string | undefined;
|
|
17
|
+
title?: string | undefined;
|
|
18
|
+
description?: string | undefined;
|
|
19
|
+
bytes?: number | undefined;
|
|
20
|
+
hash?: string | undefined;
|
|
21
|
+
sources?: import("@frictionless-ts/metadata").Source[] | undefined;
|
|
22
|
+
licenses?: import("@frictionless-ts/metadata").License[] | undefined;
|
|
23
|
+
dialect?: (string | import("@frictionless-ts/metadata").Dialect) | undefined;
|
|
24
|
+
schema?: (string | import("@frictionless-ts/metadata").Schema) | undefined;
|
|
25
|
+
jsonSchema?: (string | import("@frictionless-ts/metadata").Descriptor) | undefined;
|
|
26
|
+
}[];
|
|
27
|
+
$schema?: string | undefined;
|
|
28
|
+
name?: string | undefined;
|
|
29
|
+
title?: string | undefined;
|
|
30
|
+
description?: string | undefined;
|
|
31
|
+
sources?: import("@frictionless-ts/metadata").Source[] | undefined;
|
|
32
|
+
licenses?: import("@frictionless-ts/metadata").License[] | undefined;
|
|
33
|
+
homepage?: string | undefined;
|
|
34
|
+
version?: string | undefined;
|
|
35
|
+
contributors?: import("@frictionless-ts/metadata").Contributor[] | undefined;
|
|
36
|
+
keywords?: string[] | undefined;
|
|
37
|
+
created?: string | undefined;
|
|
38
|
+
image?: string | undefined;
|
|
39
|
+
}>;
|
|
40
|
+
export {};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import os from "node:os";
|
|
2
|
+
import pAll from "p-all";
|
|
3
|
+
import { inferResource } from "../resource/index.js";
|
|
4
|
+
export async function inferPackage(dataPackage, options) {
|
|
5
|
+
const concurrency = os.cpus().length;
|
|
6
|
+
const resources = await pAll(dataPackage.resources.map(resource => () => inferResource(resource, options)), { concurrency });
|
|
7
|
+
const result = {
|
|
8
|
+
...dataPackage,
|
|
9
|
+
resources,
|
|
10
|
+
};
|
|
11
|
+
return result;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5mZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9wYWNrYWdlL2luZmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLFNBQVMsQ0FBQTtBQUl4QixPQUFPLElBQUksTUFBTSxPQUFPLENBQUE7QUFDeEIsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHNCQUFzQixDQUFBO0FBUXBELE1BQU0sQ0FBQyxLQUFLLFVBQVUsWUFBWSxDQUNoQyxXQUEyQixFQUMzQixPQUFrRDtJQUVsRCxNQUFNLFdBQVcsR0FBRyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsTUFBTSxDQUFBO0lBRXBDLE1BQU0sU0FBUyxHQUFHLE1BQU0sSUFBSSxDQUMxQixXQUFXLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FDdkIsUUFBUSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUNuRCxFQUNELEVBQUUsV0FBVyxFQUFFLENBQ2hCLENBQUE7SUFFRCxNQUFNLE1BQU0sR0FBRztRQUNiLEdBQUcsV0FBVztRQUNkLFNBQVM7S0FDVixDQUFBO0lBRUQsT0FBTyxNQUFNLENBQUE7QUFDZixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IG9zIGZyb20gXCJub2RlOm9zXCJcbmltcG9ydCB0eXBlIHsgUGFja2FnZSwgUmVzb3VyY2UgfSBmcm9tIFwiQGZyaWN0aW9ubGVzcy10cy9tZXRhZGF0YVwiXG5pbXBvcnQgdHlwZSB7IEluZmVyRGlhbGVjdE9wdGlvbnMgfSBmcm9tIFwiQGZyaWN0aW9ubGVzcy10cy90YWJsZVwiXG5pbXBvcnQgdHlwZSB7IEluZmVyU2NoZW1hT3B0aW9ucyB9IGZyb20gXCJAZnJpY3Rpb25sZXNzLXRzL3RhYmxlXCJcbmltcG9ydCBwQWxsIGZyb20gXCJwLWFsbFwiXG5pbXBvcnQgeyBpbmZlclJlc291cmNlIH0gZnJvbSBcIi4uL3Jlc291cmNlL2luZGV4LnRzXCJcblxuLy8gVE9ETzogTW92ZSBQYXJ0aWFsUGFja2FnZS9SZXNvdXJjZSB0byBAZnJpY3Rpb25sZXNzLXRzL21ldGFkYXRhP1xuXG5pbnRlcmZhY2UgUGFydGlhbFBhY2thZ2UgZXh0ZW5kcyBPbWl0PFBhY2thZ2UsIFwicmVzb3VyY2VzXCI+IHtcbiAgcmVzb3VyY2VzOiBQYXJ0aWFsPFJlc291cmNlPltdXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBpbmZlclBhY2thZ2UoXG4gIGRhdGFQYWNrYWdlOiBQYXJ0aWFsUGFja2FnZSxcbiAgb3B0aW9ucz86IEluZmVyRGlhbGVjdE9wdGlvbnMgJiBJbmZlclNjaGVtYU9wdGlvbnMsXG4pIHtcbiAgY29uc3QgY29uY3VycmVuY3kgPSBvcy5jcHVzKCkubGVuZ3RoXG5cbiAgY29uc3QgcmVzb3VyY2VzID0gYXdhaXQgcEFsbChcbiAgICBkYXRhUGFja2FnZS5yZXNvdXJjZXMubWFwKFxuICAgICAgcmVzb3VyY2UgPT4gKCkgPT4gaW5mZXJSZXNvdXJjZShyZXNvdXJjZSwgb3B0aW9ucyksXG4gICAgKSxcbiAgICB7IGNvbmN1cnJlbmN5IH0sXG4gIClcblxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgLi4uZGF0YVBhY2thZ2UsXG4gICAgcmVzb3VyY2VzLFxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdFxufVxuIl19
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
import { writeTempFile } from "@frictionless-ts/dataset";
|
|
2
|
+
import { describe, expect, it } from "vitest";
|
|
3
|
+
import { inferPackage } from "./infer.js";
|
|
4
|
+
describe("inferPackage", () => {
|
|
5
|
+
it("should infer package with single resource", async () => {
|
|
6
|
+
const csvPath = await writeTempFile("id,name\n1,alice\n2,bob");
|
|
7
|
+
const dataPackage = {
|
|
8
|
+
name: "test-package",
|
|
9
|
+
resources: [{ path: csvPath, format: "csv" }],
|
|
10
|
+
};
|
|
11
|
+
const result = await inferPackage(dataPackage);
|
|
12
|
+
expect(result.name).toBe("test-package");
|
|
13
|
+
expect(result.resources).toBeDefined();
|
|
14
|
+
expect(result.resources.length).toBe(1);
|
|
15
|
+
expect(result.resources?.[0]?.schema).toBeDefined();
|
|
16
|
+
});
|
|
17
|
+
it("should infer package with multiple resources", async () => {
|
|
18
|
+
const csv1Path = await writeTempFile("id,name\n1,alice\n2,bob");
|
|
19
|
+
const csv2Path = await writeTempFile("id,value\n1,100\n2,200");
|
|
20
|
+
const dataPackage = {
|
|
21
|
+
name: "test-package",
|
|
22
|
+
resources: [
|
|
23
|
+
{ path: csv1Path, format: "csv" },
|
|
24
|
+
{ path: csv2Path, format: "csv" },
|
|
25
|
+
],
|
|
26
|
+
};
|
|
27
|
+
const result = await inferPackage(dataPackage);
|
|
28
|
+
expect(result.name).toBe("test-package");
|
|
29
|
+
expect(result.resources.length).toBe(2);
|
|
30
|
+
expect(result.resources?.[0]?.schema).toBeDefined();
|
|
31
|
+
expect(result.resources?.[1]?.schema).toBeDefined();
|
|
32
|
+
});
|
|
33
|
+
it("should preserve package-level properties", async () => {
|
|
34
|
+
const csvPath = await writeTempFile("id,name\n1,alice\n2,bob");
|
|
35
|
+
const dataPackage = {
|
|
36
|
+
name: "test-package",
|
|
37
|
+
title: "Test Package",
|
|
38
|
+
description: "A test package",
|
|
39
|
+
version: "1.0.0",
|
|
40
|
+
resources: [{ path: csvPath, format: "csv" }],
|
|
41
|
+
};
|
|
42
|
+
const result = await inferPackage(dataPackage);
|
|
43
|
+
expect(result.name).toBe("test-package");
|
|
44
|
+
expect(result.title).toBe("Test Package");
|
|
45
|
+
expect(result.description).toBe("A test package");
|
|
46
|
+
expect(result.version).toBe("1.0.0");
|
|
47
|
+
});
|
|
48
|
+
it("should pass options to resource inference", async () => {
|
|
49
|
+
const csvPath = await writeTempFile("id|name\n1|alice\n2|bob");
|
|
50
|
+
const dataPackage = {
|
|
51
|
+
name: "test-package",
|
|
52
|
+
resources: [{ path: csvPath, format: "csv" }],
|
|
53
|
+
};
|
|
54
|
+
const result = await inferPackage(dataPackage, { delimiter: "|" });
|
|
55
|
+
expect(result.resources?.[0]?.dialect).toBeDefined();
|
|
56
|
+
expect(result.resources?.[0]?.schema).toBeDefined();
|
|
57
|
+
});
|
|
58
|
+
it("should handle empty resources array", async () => {
|
|
59
|
+
const dataPackage = {
|
|
60
|
+
name: "test-package",
|
|
61
|
+
resources: [],
|
|
62
|
+
};
|
|
63
|
+
const result = await inferPackage(dataPackage);
|
|
64
|
+
expect(result.name).toBe("test-package");
|
|
65
|
+
expect(result.resources).toEqual([]);
|
|
66
|
+
});
|
|
67
|
+
it("should preserve existing resource properties", async () => {
|
|
68
|
+
const csvPath = await writeTempFile("id,name\n1,alice\n2,bob");
|
|
69
|
+
const dataPackage = {
|
|
70
|
+
name: "test-package",
|
|
71
|
+
resources: [
|
|
72
|
+
{
|
|
73
|
+
path: csvPath,
|
|
74
|
+
format: "csv",
|
|
75
|
+
name: "custom-name",
|
|
76
|
+
title: "Custom Resource",
|
|
77
|
+
},
|
|
78
|
+
],
|
|
79
|
+
};
|
|
80
|
+
const result = await inferPackage(dataPackage);
|
|
81
|
+
expect(result.resources?.[0]?.name).toBe("custom-name");
|
|
82
|
+
expect(result.resources?.[0]?.title).toBe("Custom Resource");
|
|
83
|
+
});
|
|
84
|
+
it("should infer package with inline data resources", async () => {
|
|
85
|
+
const dataPackage = {
|
|
86
|
+
name: "test-package",
|
|
87
|
+
resources: [
|
|
88
|
+
{
|
|
89
|
+
name: "test-resource",
|
|
90
|
+
data: [
|
|
91
|
+
{ id: 1, name: "alice" },
|
|
92
|
+
{ id: 2, name: "bob" },
|
|
93
|
+
],
|
|
94
|
+
},
|
|
95
|
+
],
|
|
96
|
+
};
|
|
97
|
+
const result = await inferPackage(dataPackage);
|
|
98
|
+
expect(result.name).toBe("test-package");
|
|
99
|
+
expect(result.resources.length).toBe(1);
|
|
100
|
+
expect(result.resources?.[0]?.name).toBe("test-resource");
|
|
101
|
+
expect(result.resources?.[0]?.data).toBeDefined();
|
|
102
|
+
});
|
|
103
|
+
it("should handle mixed file and inline resources", async () => {
|
|
104
|
+
const csvPath = await writeTempFile("id,name\n1,alice\n2,bob");
|
|
105
|
+
const dataPackage = {
|
|
106
|
+
name: "test-package",
|
|
107
|
+
resources: [
|
|
108
|
+
{ path: csvPath, format: "csv" },
|
|
109
|
+
{
|
|
110
|
+
name: "inline-resource",
|
|
111
|
+
data: [{ id: 1, value: 100 }],
|
|
112
|
+
},
|
|
113
|
+
],
|
|
114
|
+
};
|
|
115
|
+
const result = await inferPackage(dataPackage);
|
|
116
|
+
expect(result.resources.length).toBe(2);
|
|
117
|
+
expect(result.resources?.[0]?.path).toBe(csvPath);
|
|
118
|
+
expect(result.resources?.[1]?.data).toBeDefined();
|
|
119
|
+
});
|
|
120
|
+
});
|
|
121
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5mZXIuc3BlYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3BhY2thZ2UvaW5mZXIuc3BlYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMEJBQTBCLENBQUE7QUFDeEQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLE1BQU0sUUFBUSxDQUFBO0FBQzdDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxZQUFZLENBQUE7QUFFekMsUUFBUSxDQUFDLGNBQWMsRUFBRSxHQUFHLEVBQUU7SUFDNUIsRUFBRSxDQUFDLDJDQUEyQyxFQUFFLEtBQUssSUFBSSxFQUFFO1FBQ3pELE1BQU0sT0FBTyxHQUFHLE1BQU0sYUFBYSxDQUFDLHlCQUF5QixDQUFDLENBQUE7UUFDOUQsTUFBTSxXQUFXLEdBQUc7WUFDbEIsSUFBSSxFQUFFLGNBQWM7WUFDcEIsU0FBUyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxLQUFjLEVBQUUsQ0FBQztTQUN2RCxDQUFBO1FBRUQsTUFBTSxNQUFNLEdBQUcsTUFBTSxZQUFZLENBQUMsV0FBVyxDQUFDLENBQUE7UUFFOUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUE7UUFDeEMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQTtRQUN0QyxNQUFNLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDdkMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQTtJQUNyRCxDQUFDLENBQUMsQ0FBQTtJQUVGLEVBQUUsQ0FBQyw4Q0FBOEMsRUFBRSxL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QUssRUFBRSxHQUFHLEVBQUUsQ0FBQztpQkFDOUI7YUFDRjtTQUNGLENBQUE7UUFFRCxNQUFNLE1BQU0sR0FBRyxNQUFNLFlBQVksQ0FBQyxXQUFXLENBQUMsQ0FBQTtRQUU5QyxNQUFNLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDdkMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUE7UUFDakQsTUFBTSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQTtJQUNuRCxDQUFDLENBQUMsQ0FBQTtBQUNKLENBQUMsQ0FBQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgd3JpdGVUZW1wRmlsZSB9IGZyb20gXCJAZnJpY3Rpb25sZXNzLXRzL2RhdGFzZXRcIlxuaW1wb3J0IHsgZGVzY3JpYmUsIGV4cGVjdCwgaXQgfSBmcm9tIFwidml0ZXN0XCJcbmltcG9ydCB7IGluZmVyUGFja2FnZSB9IGZyb20gXCIuL2luZmVyLnRzXCJcblxuZGVzY3JpYmUoXCJpbmZlclBhY2thZ2VcIiwgKCkgPT4ge1xuICBpdChcInNob3VsZCBpbmZlciBwYWNrYWdlIHdpdGggc2luZ2xlIHJlc291cmNlXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBjc3ZQYXRoID0gYXdhaXQgd3JpdGVUZW1wRmlsZShcImlkLG5hbWVcXG4xLGFsaWNlXFxuMixib2JcIilcbiAgICBjb25zdCBkYXRhUGFja2FnZSA9IHtcbiAgICAgIG5hbWU6IFwidGVzdC1wYWNrYWdlXCIsXG4gICAgICByZXNvdXJjZXM6IFt7IHBhdGg6IGNzdlBhdGgsIGZvcm1hdDogXCJjc3ZcIiBhcyBjb25zdCB9XSxcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBpbmZlclBhY2thZ2UoZGF0YVBhY2thZ2UpXG5cbiAgICBleHBlY3QocmVzdWx0Lm5hbWUpLnRvQmUoXCJ0ZXN0LXBhY2thZ2VcIilcbiAgICBleHBlY3QocmVzdWx0LnJlc291cmNlcykudG9CZURlZmluZWQoKVxuICAgIGV4cGVjdChyZXN1bHQucmVzb3VyY2VzLmxlbmd0aCkudG9CZSgxKVxuICAgIGV4cGVjdChyZXN1bHQucmVzb3VyY2VzPy5bMF0/LnNjaGVtYSkudG9CZURlZmluZWQoKVxuICB9KVxuXG4gIGl0KFwic2hvdWxkIGluZmVyIHBhY2thZ2Ugd2l0aCBtdWx0aXBsZSByZXNvdXJjZXNcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGNzdjFQYXRoID0gYXdhaXQgd3JpdGVUZW1wRmlsZShcImlkLG5hbWVcXG4xLGFsaWNlXFxuMixib2JcIilcbiAgICBjb25zdCBjc3YyUGF0aCA9IGF3YWl0IHdyaXRlVGVtcEZpbGUoXCJpZCx2YWx1ZVxcbjEsMTAwXFxuMiwyMDBcIilcbiAgICBjb25zdCBkYXRhUGFja2FnZSA9IHtcbiAgICAgIG5hbWU6IFwidGVzdC1wYWNrYWdlXCIsXG4gICAgICByZXNvdXJjZXM6IFtcbiAgICAgICAgeyBwYXRoOiBjc3YxUGF0aCwgZm9ybWF0OiBcImNzdlwiIGFzIGNvbnN0IH0sXG4gICAgICAgIHsgcGF0aDogY3N2MlBhdGgsIGZvcm1hdDogXCJjc3ZcIiBhcyBjb25zdCB9LFxuICAgICAgXSxcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBpbmZlclBhY2thZ2UoZGF0YVBhY2thZ2UpXG5cbiAgICBleHBlY3QocmVzdWx0Lm5hbWUpLnRvQmUoXCJ0ZXN0LXBhY2thZ2VcIilcbiAgICBleHBlY3QocmVzdWx0LnJlc291cmNlcy5sZW5ndGgpLnRvQmUoMilcbiAgICBleHBlY3QocmVzdWx0LnJlc291cmNlcz8uWzBdPy5zY2hlbWEpLnRvQmVEZWZpbmVkKClcbiAgICBleHBlY3QocmVzdWx0LnJlc291cmNlcz8uWzFdPy5zY2hlbWEpLnRvQmVEZWZpbmVkKClcbiAgfSlcblxuICBpdChcInNob3VsZCBwcmVzZXJ2ZSBwYWNrYWdlLWxldmVsIHByb3BlcnRpZXNcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGNzdlBhdGggPSBhd2FpdCB3cml0ZVRlbXBGaWxlKFwiaWQsbmFtZVxcbjEsYWxpY2VcXG4yLGJvYlwiKVxuICAgIGNvbnN0IGRhdGFQYWNrYWdlID0ge1xuICAgICAgbmFtZTogXCJ0ZXN0LXBhY2thZ2VcIixcbiAgICAgIHRpdGxlOiBcIlRlc3QgUGFja2FnZVwiLFxuICAgICAgZGVzY3JpcHRpb246IFwiQSB0ZXN0IHBhY2thZ2VcIixcbiAgICAgIHZlcnNpb246IFwiMS4wLjBcIixcbiAgICAgIHJlc291cmNlczogW3sgcGF0aDogY3N2UGF0aCwgZm9ybWF0OiBcImNzdlwiIGFzIGNvbnN0IH1dLFxuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGluZmVyUGFja2FnZShkYXRhUGFja2FnZSlcblxuICAgIGV4cGVjdChyZXN1bHQubmFtZSkudG9CZShcInRlc3QtcGFja2FnZVwiKVxuICAgIGV4cGVjdChyZXN1bHQudGl0bGUpLnRvQmUoXCJUZXN0IFBhY2thZ2VcIilcbiAgICBleHBlY3QocmVzdWx0LmRlc2NyaXB0aW9uKS50b0JlKFwiQSB0ZXN0IHBhY2thZ2VcIilcbiAgICBleHBlY3QocmVzdWx0LnZlcnNpb24pLnRvQmUoXCIxLjAuMFwiKVxuICB9KVxuXG4gIGl0KFwic2hvdWxkIHBhc3Mgb3B0aW9ucyB0byByZXNvdXJjZSBpbmZlcmVuY2VcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGNzdlBhdGggPSBhd2FpdCB3cml0ZVRlbXBGaWxlKFwiaWR8bmFtZVxcbjF8YWxpY2VcXG4yfGJvYlwiKVxuICAgIGNvbnN0IGRhdGFQYWNrYWdlID0ge1xuICAgICAgbmFtZTogXCJ0ZXN0LXBhY2thZ2VcIixcbiAgICAgIHJlc291cmNlczogW3sgcGF0aDogY3N2UGF0aCwgZm9ybWF0OiBcImNzdlwiIGFzIGNvbnN0IH1dLFxuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGluZmVyUGFja2FnZShkYXRhUGFja2FnZSwgeyBkZWxpbWl0ZXI6IFwifFwiIH0pXG5cbiAgICBleHBlY3QocmVzdWx0LnJlc291cmNlcz8uWzBdPy5kaWFsZWN0KS50b0JlRGVmaW5lZCgpXG4gICAgZXhwZWN0KHJlc3VsdC5yZXNvdXJjZXM/LlswXT8uc2NoZW1hKS50b0JlRGVmaW5lZCgpXG4gIH0pXG5cbiAgaXQoXCJzaG91bGQgaGFuZGxlIGVtcHR5IHJlc291cmNlcyBhcnJheVwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgZGF0YVBhY2thZ2UgPSB7XG4gICAgICBuYW1lOiBcInRlc3QtcGFja2FnZVwiLFxuICAgICAgcmVzb3VyY2VzOiBbXSxcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBpbmZlclBhY2thZ2UoZGF0YVBhY2thZ2UpXG5cbiAgICBleHBlY3QocmVzdWx0Lm5hbWUpLnRvQmUoXCJ0ZXN0LXBhY2thZ2VcIilcbiAgICBleHBlY3QocmVzdWx0LnJlc291cmNlcykudG9FcXVhbChbXSlcbiAgfSlcblxuICBpdChcInNob3VsZCBwcmVzZXJ2ZSBleGlzdGluZyByZXNvdXJjZSBwcm9wZXJ0aWVzXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBjc3ZQYXRoID0gYXdhaXQgd3JpdGVUZW1wRmlsZShcImlkLG5hbWVcXG4xLGFsaWNlXFxuMixib2JcIilcbiAgICBjb25zdCBkYXRhUGFja2FnZSA9IHtcbiAgICAgIG5hbWU6IFwidGVzdC1wYWNrYWdlXCIsXG4gICAgICByZXNvdXJjZXM6IFtcbiAgICAgICAge1xuICAgICAgICAgIHBhdGg6IGNzdlBhdGgsXG4gICAgICAgICAgZm9ybWF0OiBcImNzdlwiIGFzIGNvbnN0LFxuICAgICAgICAgIG5hbWU6IFwiY3VzdG9tLW5hbWVcIixcbiAgICAgICAgICB0aXRsZTogXCJDdXN0b20gUmVzb3VyY2VcIixcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgaW5mZXJQYWNrYWdlKGRhdGFQYWNrYWdlKVxuXG4gICAgZXhwZWN0KHJlc3VsdC5yZXNvdXJjZXM/LlswXT8ubmFtZSkudG9CZShcImN1c3RvbS1uYW1lXCIpXG4gICAgZXhwZWN0KHJlc3VsdC5yZXNvdXJjZXM/LlswXT8udGl0bGUpLnRvQmUoXCJDdXN0b20gUmVzb3VyY2VcIilcbiAgfSlcblxuICBpdChcInNob3VsZCBpbmZlciBwYWNrYWdlIHdpdGggaW5saW5lIGRhdGEgcmVzb3VyY2VzXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBkYXRhUGFja2FnZSA9IHtcbiAgICAgIG5hbWU6IFwidGVzdC1wYWNrYWdlXCIsXG4gICAgICByZXNvdXJjZXM6IFtcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwidGVzdC1yZXNvdXJjZVwiLFxuICAgICAgICAgIGRhdGE6IFtcbiAgICAgICAgICAgIHsgaWQ6IDEsIG5hbWU6IFwiYWxpY2VcIiB9LFxuICAgICAgICAgICAgeyBpZDogMiwgbmFtZTogXCJib2JcIiB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGluZmVyUGFja2FnZShkYXRhUGFja2FnZSlcblxuICAgIGV4cGVjdChyZXN1bHQubmFtZSkudG9CZShcInRlc3QtcGFja2FnZVwiKVxuICAgIGV4cGVjdChyZXN1bHQucmVzb3VyY2VzLmxlbmd0aCkudG9CZSgxKVxuICAgIGV4cGVjdChyZXN1bHQucmVzb3VyY2VzPy5bMF0/Lm5hbWUpLnRvQmUoXCJ0ZXN0LXJlc291cmNlXCIpXG4gICAgZXhwZWN0KHJlc3VsdC5yZXNvdXJjZXM/LlswXT8uZGF0YSkudG9CZURlZmluZWQoKVxuICB9KVxuXG4gIGl0KFwic2hvdWxkIGhhbmRsZSBtaXhlZCBmaWxlIGFuZCBpbmxpbmUgcmVzb3VyY2VzXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBjc3ZQYXRoID0gYXdhaXQgd3JpdGVUZW1wRmlsZShcImlkLG5hbWVcXG4xLGFsaWNlXFxuMixib2JcIilcbiAgICBjb25zdCBkYXRhUGFja2FnZSA9IHtcbiAgICAgIG5hbWU6IFwidGVzdC1wYWNrYWdlXCIsXG4gICAgICByZXNvdXJjZXM6IFtcbiAgICAgICAgeyBwYXRoOiBjc3ZQYXRoLCBmb3JtYXQ6IFwiY3N2XCIgYXMgY29uc3QgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwiaW5saW5lLXJlc291cmNlXCIsXG4gICAgICAgICAgZGF0YTogW3sgaWQ6IDEsIHZhbHVlOiAxMDAgfV0sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGluZmVyUGFja2FnZShkYXRhUGFja2FnZSlcblxuICAgIGV4cGVjdChyZXN1bHQucmVzb3VyY2VzLmxlbmd0aCkudG9CZSgyKVxuICAgIGV4cGVjdChyZXN1bHQucmVzb3VyY2VzPy5bMF0/LnBhdGgpLnRvQmUoY3N2UGF0aClcbiAgICBleHBlY3QocmVzdWx0LnJlc291cmNlcz8uWzFdPy5kYXRhKS50b0JlRGVmaW5lZCgpXG4gIH0pXG59KVxuIl19
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { Package } from "@frictionless-ts/metadata";
|
|
2
|
+
import type { BoundError } from "@frictionless-ts/metadata";
|
|
3
|
+
export declare function validatePackageIntegrity(dataPackage: Package, options?: {
|
|
4
|
+
maxErrors?: number;
|
|
5
|
+
}): Promise<{
|
|
6
|
+
errors: BoundError[];
|
|
7
|
+
valid: boolean;
|
|
8
|
+
}>;
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { createReport } from "@frictionless-ts/metadata";
|
|
2
|
+
import { resolveSchema } from "@frictionless-ts/metadata";
|
|
3
|
+
import { loadTable } from "../table/index.js";
|
|
4
|
+
// TODO: foreign key fields definition should be validated as well (metadata/here?)
|
|
5
|
+
// TODO: review temporary files creation from validatePackage call
|
|
6
|
+
export async function validatePackageIntegrity(dataPackage, options) {
|
|
7
|
+
const { maxErrors = 1000 } = options ?? {};
|
|
8
|
+
const errors = [];
|
|
9
|
+
const tables = {};
|
|
10
|
+
for (const resource of dataPackage.resources) {
|
|
11
|
+
const schema = await resolveSchema(resource.schema);
|
|
12
|
+
if (!schema)
|
|
13
|
+
continue;
|
|
14
|
+
const foreignKeys = schema.foreignKeys;
|
|
15
|
+
if (!foreignKeys)
|
|
16
|
+
continue;
|
|
17
|
+
const names = [
|
|
18
|
+
resource.name,
|
|
19
|
+
...foreignKeys.map(it => it.reference.resource),
|
|
20
|
+
].filter(Boolean);
|
|
21
|
+
for (const name of names) {
|
|
22
|
+
const resource = dataPackage.resources.find(r => r.name === name);
|
|
23
|
+
if (!resource) {
|
|
24
|
+
errors.push({
|
|
25
|
+
type: "data",
|
|
26
|
+
message: `missing ${name} resource`,
|
|
27
|
+
resource: name,
|
|
28
|
+
});
|
|
29
|
+
continue;
|
|
30
|
+
}
|
|
31
|
+
if (!tables[name]) {
|
|
32
|
+
const table = await loadTable(resource);
|
|
33
|
+
if (!table) {
|
|
34
|
+
errors.push({
|
|
35
|
+
type: "data",
|
|
36
|
+
message: `missing ${resource.name} table`,
|
|
37
|
+
resource: name,
|
|
38
|
+
});
|
|
39
|
+
continue;
|
|
40
|
+
}
|
|
41
|
+
tables[name] = table;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
for (const foreignKey of foreignKeys) {
|
|
45
|
+
const left = tables[resource.name];
|
|
46
|
+
const right = tables[foreignKey.reference.resource ?? resource.name];
|
|
47
|
+
const foreignKeyCheckTable = left
|
|
48
|
+
.select(...foreignKey.fields)
|
|
49
|
+
.join(right, {
|
|
50
|
+
how: "anti",
|
|
51
|
+
leftOn: foreignKey.fields,
|
|
52
|
+
rightOn: foreignKey.reference.fields,
|
|
53
|
+
});
|
|
54
|
+
const foreignKeyCheckFrame = await foreignKeyCheckTable
|
|
55
|
+
.head(maxErrors)
|
|
56
|
+
.collect();
|
|
57
|
+
for (const row of foreignKeyCheckFrame.toRecords()) {
|
|
58
|
+
errors.push({
|
|
59
|
+
type: "foreignKey",
|
|
60
|
+
foreignKey,
|
|
61
|
+
cells: Object.values(row).map(String),
|
|
62
|
+
resource: resource.name,
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
return createReport(errors, { maxErrors });
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZWdyaXR5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vcGFja2FnZS9pbnRlZ3JpdHkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDJCQUEyQixDQUFBO0FBQ3hELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQTtBQUd6RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sbUJBQW1CLENBQUE7QUFFN0MsbUZBQW1GO0FBQ25GLGtFQUFrRTtBQUVsRSxNQUFNLENBQUMsS0FBSyxVQUFVLHdCQUF3QixDQUM1QyxXQUFvQixFQUNwQixPQUFnQztJQUVoQyxNQUFNLEVBQUUsU0FBUyxHQUFHLElBQUksRUFBRSxHQUFHLE9BQU8sSUFBSSxFQUFFLENBQUE7SUFFMUMsTUFBTSxNQUFNLEdBQWlCLEVBQUUsQ0FBQTtJQUMvQixNQUFNLE1BQU0sR0FBMEIsRUFBRSxDQUFBO0lBRXhDLEtBQUssTUFBTSxRQUFRLElBQUksV0FBVyxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQzdDLE1BQU0sTUFBTSxHQUFHLE1BQU0sYUFBYSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUNuRCxJQUFJLENBQUMsTUFBTTtZQUFFLFNBQVE7UUFFckIsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQTtRQUN0QyxJQUFJLENBQUMsV0FBVztZQUFFLFNBQVE7UUFFMUIsTUFBTSxLQUFLLEdBQUc7WUFDWixRQUFRLENBQUMsSUFBSTtZQUNiLEdBQUcsV0FBVyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDO1NBQ2hELENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBYSxDQUFBO1FBRTdCLEtBQUssTUFBTSxJQUFJLElBQUksS0FBSyxFQUFFLENBQUM7WUFDekIsTUFBTSxRQUFRLEdBQUcsV0FBVyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxDQUFBO1lBRWpFLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDZCxNQUFNLENBQUMsSUFBSSxDQUFDO29CQUNWLElBQUksRUFBRSxNQUFNO29CQUNaLE9BQU8sRUFBRSxXQUFXLElBQUksV0FBVztvQkFDbkMsUUFBUSxFQUFFLElBQUk7aUJBQ2YsQ0FBQyxDQUFBO2dCQUVGLFNBQVE7WUFDVixDQUFDO1lBRUQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO2dCQUNsQixNQUFNLEtBQUssR0FBRyxNQUFNLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQTtnQkFFdkMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO29CQUNYLE1BQU0sQ0FBQyxJQUFJLENBQUM7d0JBQ1YsSUFBSSxFQUFFLE1BQU07d0JBQ1osT0FBTyxFQUFFLFdBQVcsUUFBUSxDQUFDLElBQUksUUFBUTt3QkFDekMsUUFBUSxFQUFFLElBQUk7cUJBQ2YsQ0FBQyxDQUFBO29CQUVGLFNBQVE7Z0JBQ1YsQ0FBQztnQkFFRCxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFBO1lBQ3RCLENBQUM7UUFDSCxDQUFDO1FBRUQsS0FBSyxNQUFNLFVBQVUsSUFBSSxXQUFXLEVBQUUsQ0FBQztZQUNyQyxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBVSxDQUFBO1lBQzNDLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FDbEIsVUFBVSxDQUFDLFNBQVMsQ0FBQyxRQUFRLElBQUksUUFBUSxDQUFDLElBQUksQ0FDdEMsQ0FBQTtZQUVWLE1BQU0sb0JBQW9CLEdBQUcsSUFBSTtpQkFDOUIsTUFBTSxDQUFDLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQztpQkFDNUIsSUFBSSxDQUFDLEtBQUssRUFBRTtnQkFDWCxHQUFHLEVBQUUsTUFBTTtnQkFDWCxNQUFNLEVBQUUsVUFBVSxDQUFDLE1BQU07Z0JBQ3pCLE9BQU8sRUFBRSxVQUFVLENBQUMsU0FBUyxDQUFDLE1BQU07YUFDckMsQ0FBQyxDQUFBO1lBRUosTUFBTSxvQkFBb0IsR0FBRyxNQUFNLG9CQUFvQjtpQkFDcEQsSUFBSSxDQUFDLFNBQVMsQ0FBQztpQkFDZixPQUFPLEVBQUUsQ0FBQTtZQUVaLEtBQUssTUFBTSxHQUFHLElBQUksb0JBQW9CLENBQUMsU0FBUyxFQUFXLEVBQUUsQ0FBQztnQkFDNUQsTUFBTSxDQUFDLElBQUksQ0FBQztvQkFDVixJQUFJLEVBQUUsWUFBWTtvQkFDbEIsVUFBVTtvQkFDVixLQUFLLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDO29CQUNyQyxRQUFRLEVBQUUsUUFBUSxDQUFDLElBQUk7aUJBQ3hCLENBQUMsQ0FBQTtZQUNKLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVELE9BQU8sWUFBWSxDQUFDLE1BQU0sRUFBRSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUE7QUFDNUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgUGFja2FnZSB9IGZyb20gXCJAZnJpY3Rpb25sZXNzLXRzL21ldGFkYXRhXCJcbmltcG9ydCB7IGNyZWF0ZVJlcG9ydCB9IGZyb20gXCJAZnJpY3Rpb25sZXNzLXRzL21ldGFkYXRhXCJcbmltcG9ydCB7IHJlc29sdmVTY2hlbWEgfSBmcm9tIFwiQGZyaWN0aW9ubGVzcy10cy9tZXRhZGF0YVwiXG5pbXBvcnQgdHlwZSB7IEJvdW5kRXJyb3IgfSBmcm9tIFwiQGZyaWN0aW9ubGVzcy10cy9tZXRhZGF0YVwiXG5pbXBvcnQgdHlwZSB7IFRhYmxlIH0gZnJvbSBcIkBmcmljdGlvbmxlc3MtdHMvdGFibGVcIlxuaW1wb3J0IHsgbG9hZFRhYmxlIH0gZnJvbSBcIi4uL3RhYmxlL2luZGV4LnRzXCJcblxuLy8gVE9ETzogZm9yZWlnbiBrZXkgZmllbGRzIGRlZmluaXRpb24gc2hvdWxkIGJlIHZhbGlkYXRlZCBhcyB3ZWxsIChtZXRhZGF0YS9oZXJlPylcbi8vIFRPRE86IHJldmlldyB0ZW1wb3JhcnkgZmlsZXMgY3JlYXRpb24gZnJvbSB2YWxpZGF0ZVBhY2thZ2UgY2FsbFxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdmFsaWRhdGVQYWNrYWdlSW50ZWdyaXR5KFxuICBkYXRhUGFja2FnZTogUGFja2FnZSxcbiAgb3B0aW9ucz86IHsgbWF4RXJyb3JzPzogbnVtYmVyIH0sXG4pIHtcbiAgY29uc3QgeyBtYXhFcnJvcnMgPSAxMDAwIH0gPSBvcHRpb25zID8/IHt9XG5cbiAgY29uc3QgZXJyb3JzOiBCb3VuZEVycm9yW10gPSBbXVxuICBjb25zdCB0YWJsZXM6IFJlY29yZDxzdHJpbmcsIFRhYmxlPiA9IHt9XG5cbiAgZm9yIChjb25zdCByZXNvdXJjZSBvZiBkYXRhUGFja2FnZS5yZXNvdXJjZXMpIHtcbiAgICBjb25zdCBzY2hlbWEgPSBhd2FpdCByZXNvbHZlU2NoZW1hKHJlc291cmNlLnNjaGVtYSlcbiAgICBpZiAoIXNjaGVtYSkgY29udGludWVcblxuICAgIGNvbnN0IGZvcmVpZ25LZXlzID0gc2NoZW1hLmZvcmVpZ25LZXlzXG4gICAgaWYgKCFmb3JlaWduS2V5cykgY29udGludWVcblxuICAgIGNvbnN0IG5hbWVzID0gW1xuICAgICAgcmVzb3VyY2UubmFtZSxcbiAgICAgIC4uLmZvcmVpZ25LZXlzLm1hcChpdCA9PiBpdC5yZWZlcmVuY2UucmVzb3VyY2UpLFxuICAgIF0uZmlsdGVyKEJvb2xlYW4pIGFzIHN0cmluZ1tdXG5cbiAgICBmb3IgKGNvbnN0IG5hbWUgb2YgbmFtZXMpIHtcbiAgICAgIGNvbnN0IHJlc291cmNlID0gZGF0YVBhY2thZ2UucmVzb3VyY2VzLmZpbmQociA9PiByLm5hbWUgPT09IG5hbWUpXG5cbiAgICAgIGlmICghcmVzb3VyY2UpIHtcbiAgICAgICAgZXJyb3JzLnB1c2goe1xuICAgICAgICAgIHR5cGU6IFwiZGF0YVwiLFxuICAgICAgICAgIG1lc3NhZ2U6IGBtaXNzaW5nICR7bmFtZX0gcmVzb3VyY2VgLFxuICAgICAgICAgIHJlc291cmNlOiBuYW1lLFxuICAgICAgICB9KVxuXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIGlmICghdGFibGVzW25hbWVdKSB7XG4gICAgICAgIGNvbnN0IHRhYmxlID0gYXdhaXQgbG9hZFRhYmxlKHJlc291cmNlKVxuXG4gICAgICAgIGlmICghdGFibGUpIHtcbiAgICAgICAgICBlcnJvcnMucHVzaCh7XG4gICAgICAgICAgICB0eXBlOiBcImRhdGFcIixcbiAgICAgICAgICAgIG1lc3NhZ2U6IGBtaXNzaW5nICR7cmVzb3VyY2UubmFtZX0gdGFibGVgLFxuICAgICAgICAgICAgcmVzb3VyY2U6IG5hbWUsXG4gICAgICAgICAgfSlcblxuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cblxuICAgICAgICB0YWJsZXNbbmFtZV0gPSB0YWJsZVxuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAoY29uc3QgZm9yZWlnbktleSBvZiBmb3JlaWduS2V5cykge1xuICAgICAgY29uc3QgbGVmdCA9IHRhYmxlc1tyZXNvdXJjZS5uYW1lXSBhcyBUYWJsZVxuICAgICAgY29uc3QgcmlnaHQgPSB0YWJsZXNbXG4gICAgICAgIGZvcmVpZ25LZXkucmVmZXJlbmNlLnJlc291cmNlID8/IHJlc291cmNlLm5hbWVcbiAgICAgIF0gYXMgVGFibGVcblxuICAgICAgY29uc3QgZm9yZWlnbktleUNoZWNrVGFibGUgPSBsZWZ0XG4gICAgICAgIC5zZWxlY3QoLi4uZm9yZWlnbktleS5maWVsZHMpXG4gICAgICAgIC5qb2luKHJpZ2h0LCB7XG4gICAgICAgICAgaG93OiBcImFudGlcIixcbiAgICAgICAgICBsZWZ0T246IGZvcmVpZ25LZXkuZmllbGRzLFxuICAgICAgICAgIHJpZ2h0T246IGZvcmVpZ25LZXkucmVmZXJlbmNlLmZpZWxkcyxcbiAgICAgICAgfSlcblxuICAgICAgY29uc3QgZm9yZWlnbktleUNoZWNrRnJhbWUgPSBhd2FpdCBmb3JlaWduS2V5Q2hlY2tUYWJsZVxuICAgICAgICAuaGVhZChtYXhFcnJvcnMpXG4gICAgICAgIC5jb2xsZWN0KClcblxuICAgICAgZm9yIChjb25zdCByb3cgb2YgZm9yZWlnbktleUNoZWNrRnJhbWUudG9SZWNvcmRzKCkgYXMgYW55W10pIHtcbiAgICAgICAgZXJyb3JzLnB1c2goe1xuICAgICAgICAgIHR5cGU6IFwiZm9yZWlnbktleVwiLFxuICAgICAgICAgIGZvcmVpZ25LZXksXG4gICAgICAgICAgY2VsbHM6IE9iamVjdC52YWx1ZXMocm93KS5tYXAoU3RyaW5nKSxcbiAgICAgICAgICByZXNvdXJjZTogcmVzb3VyY2UubmFtZSxcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gY3JlYXRlUmVwb3J0KGVycm9ycywgeyBtYXhFcnJvcnMgfSlcbn1cbiJdfQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|