@frictionless-ts/database 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/adapters/base.d.ts +20 -0
- package/build/adapters/base.js +66 -0
- package/build/adapters/create.d.ts +5 -0
- package/build/adapters/create.js +17 -0
- package/build/adapters/mysql.d.ts +10 -0
- package/build/adapters/mysql.js +90 -0
- package/build/adapters/mysql.spec.d.ts +1 -0
- package/build/adapters/mysql.spec.js +170 -0
- package/build/adapters/postgresql.d.ts +10 -0
- package/build/adapters/postgresql.js +100 -0
- package/build/adapters/postgresql.spec.d.ts +1 -0
- package/build/adapters/postgresql.spec.js +170 -0
- package/build/adapters/sqlite.bun.d.ts +2 -0
- package/build/adapters/sqlite.bun.js +7 -0
- package/build/adapters/sqlite.d.ts +11 -0
- package/build/adapters/sqlite.js +57 -0
- package/build/adapters/sqlite.node.d.ts +2 -0
- package/build/adapters/sqlite.node.js +43 -0
- package/build/adapters/sqlite.spec.d.ts +1 -0
- package/build/adapters/sqlite.spec.js +252 -0
- package/build/field/Field.d.ts +3 -0
- package/build/field/Field.js +2 -0
- package/build/field/Type.d.ts +2 -0
- package/build/field/Type.js +2 -0
- package/build/field/index.d.ts +2 -0
- package/build/field/index.js +2 -0
- package/build/index.d.ts +6 -0
- package/build/index.js +7 -0
- package/build/package/index.d.ts +2 -0
- package/build/package/index.js +3 -0
- package/build/package/load.d.ts +7 -0
- package/build/package/load.js +30 -0
- package/build/package/save.d.ts +10 -0
- package/build/package/save.js +28 -0
- package/build/plugin.d.ts +15 -0
- package/build/plugin.js +54 -0
- package/build/plugin.spec.d.ts +1 -0
- package/build/plugin.spec.js +328 -0
- package/build/resource/Format.d.ts +1 -0
- package/build/resource/Format.js +2 -0
- package/build/resource/index.d.ts +1 -0
- package/build/resource/index.js +2 -0
- package/build/schema/Schema.d.ts +4 -0
- package/build/schema/Schema.js +2 -0
- package/build/schema/index.d.ts +2 -0
- package/build/schema/index.js +2 -0
- package/build/schema/infer.d.ts +4 -0
- package/build/schema/infer.js +24 -0
- package/build/schema/infer.spec.d.ts +1 -0
- package/build/schema/infer.spec.js +25 -0
- package/build/table/index.d.ts +2 -0
- package/build/table/index.js +3 -0
- package/build/table/load.d.ts +6 -0
- package/build/table/load.js +29 -0
- package/build/table/load.spec.d.ts +1 -0
- package/build/table/load.spec.js +24 -0
- package/build/table/save.d.ts +4 -0
- package/build/table/save.js +57 -0
- package/build/table/save.spec.d.ts +1 -0
- package/build/table/save.spec.js +20 -0
- package/package.json +45 -0
|
@@ -0,0 +1,252 @@
|
|
|
1
|
+
import { getTempFilePath } from "@frictionless-ts/dataset";
|
|
2
|
+
import * as pl from "nodejs-polars";
|
|
3
|
+
import { describe, expect, it } from "vitest";
|
|
4
|
+
import { useRecording } from "vitest-polly";
|
|
5
|
+
import { loadPackageFromDatabase } from "../package/index.js";
|
|
6
|
+
import { savePackageToDatabase } from "../package/index.js";
|
|
7
|
+
import { inferDatabaseSchema } from "../schema/index.js";
|
|
8
|
+
import { loadDatabaseTable, saveDatabaseTable } from "../table/index.js";
|
|
9
|
+
import { createAdapter } from "./create.js";
|
|
10
|
+
useRecording();
|
|
11
|
+
const dialect = { table: "dpkit" };
|
|
12
|
+
const record1 = { id: 1, name: "english" };
|
|
13
|
+
const record2 = { id: 2, name: "中文" };
|
|
14
|
+
// TODO: Enable when libsql@0.6 is fixed
|
|
15
|
+
describe("SqliteAdapter", () => {
|
|
16
|
+
it("should infer schema", async () => {
|
|
17
|
+
const path = getTempFilePath();
|
|
18
|
+
const source = pl
|
|
19
|
+
.DataFrame([
|
|
20
|
+
pl.Series("string", ["string"], pl.Utf8),
|
|
21
|
+
pl.Series("integer", [1], pl.Int32),
|
|
22
|
+
pl.Series("number", [1.1], pl.Float64),
|
|
23
|
+
])
|
|
24
|
+
.lazy();
|
|
25
|
+
await saveDatabaseTable(source, {
|
|
26
|
+
path,
|
|
27
|
+
dialect,
|
|
28
|
+
format: "sqlite",
|
|
29
|
+
overwrite: true,
|
|
30
|
+
});
|
|
31
|
+
const schema = await inferDatabaseSchema({
|
|
32
|
+
path,
|
|
33
|
+
dialect,
|
|
34
|
+
format: "sqlite",
|
|
35
|
+
});
|
|
36
|
+
expect(schema).toEqual({
|
|
37
|
+
fields: [
|
|
38
|
+
{ name: "string", type: "string" },
|
|
39
|
+
{ name: "integer", type: "integer" },
|
|
40
|
+
{ name: "number", type: "number" },
|
|
41
|
+
],
|
|
42
|
+
});
|
|
43
|
+
});
|
|
44
|
+
it("should save/load table", async () => {
|
|
45
|
+
const path = getTempFilePath();
|
|
46
|
+
const source = pl.DataFrame([record1, record2]).lazy();
|
|
47
|
+
await saveDatabaseTable(source, {
|
|
48
|
+
path,
|
|
49
|
+
dialect,
|
|
50
|
+
format: "sqlite",
|
|
51
|
+
overwrite: true,
|
|
52
|
+
});
|
|
53
|
+
const target = await loadDatabaseTable({ path, dialect, format: "sqlite" });
|
|
54
|
+
expect((await target.collect()).toRecords()).toEqual([record1, record2]);
|
|
55
|
+
});
|
|
56
|
+
it("should save/load table with protocol", async () => {
|
|
57
|
+
const path = `sqlite://${getTempFilePath()}`;
|
|
58
|
+
const source = pl.DataFrame([record1, record2]).lazy();
|
|
59
|
+
await saveDatabaseTable(source, {
|
|
60
|
+
path,
|
|
61
|
+
dialect,
|
|
62
|
+
format: "sqlite",
|
|
63
|
+
overwrite: true,
|
|
64
|
+
});
|
|
65
|
+
const target = await loadDatabaseTable({ path, dialect, format: "sqlite" });
|
|
66
|
+
expect((await target.collect()).toRecords()).toEqual([record1, record2]);
|
|
67
|
+
});
|
|
68
|
+
it("should save/load table with various data types", async () => {
|
|
69
|
+
const path = `sqlite://${getTempFilePath()}`;
|
|
70
|
+
const source = pl
|
|
71
|
+
.DataFrame([
|
|
72
|
+
pl.Series("array", ["[1, 2, 3]"], pl.String),
|
|
73
|
+
pl.Series("boolean", [true], pl.Bool),
|
|
74
|
+
pl.Series("date", [new Date(Date.UTC(2025, 0, 1))], pl.Date),
|
|
75
|
+
pl.Series("datetime", [new Date(Date.UTC(2025, 0, 1))], pl.Datetime),
|
|
76
|
+
pl.Series("duration", ["P23DT23H"], pl.String),
|
|
77
|
+
pl.Series("geojson", ['{"value": 1}'], pl.String),
|
|
78
|
+
pl.Series("geopoint", [[40.0, 50.0]], pl.List(pl.Float32)),
|
|
79
|
+
pl.Series("integer", [1], pl.Int32),
|
|
80
|
+
pl.Series("list", [[1.0, 2.0, 3.0]], pl.List(pl.Float32)),
|
|
81
|
+
pl.Series("number", [1.1], pl.Float64),
|
|
82
|
+
pl.Series("object", ['{"value": 1}']),
|
|
83
|
+
pl.Series("string", ["string"], pl.String),
|
|
84
|
+
pl.Series("time", [new Date(Date.UTC(2025, 0, 1))], pl.Time),
|
|
85
|
+
pl.Series("year", [2025], pl.Int32),
|
|
86
|
+
pl.Series("yearmonth", [[2025, 1]], pl.List(pl.Int16)),
|
|
87
|
+
])
|
|
88
|
+
.lazy();
|
|
89
|
+
await saveDatabaseTable(source, {
|
|
90
|
+
path,
|
|
91
|
+
dialect,
|
|
92
|
+
format: "sqlite",
|
|
93
|
+
overwrite: true,
|
|
94
|
+
fieldTypes: {
|
|
95
|
+
geojson: "geojson",
|
|
96
|
+
geopoint: "geopoint",
|
|
97
|
+
list: "list",
|
|
98
|
+
object: "object",
|
|
99
|
+
// TODO: Remove time after:
|
|
100
|
+
// https://github.com/pola-rs/nodejs-polars/issues/364
|
|
101
|
+
time: "time",
|
|
102
|
+
year: "year",
|
|
103
|
+
yearmonth: "yearmonth",
|
|
104
|
+
},
|
|
105
|
+
});
|
|
106
|
+
const target = await loadDatabaseTable({ path, dialect, format: "sqlite" }, { denormalized: true });
|
|
107
|
+
expect((await target.collect()).toRecords()).toEqual([
|
|
108
|
+
{
|
|
109
|
+
array: "[1, 2, 3]",
|
|
110
|
+
boolean: "true",
|
|
111
|
+
date: "2025-01-01",
|
|
112
|
+
datetime: "2025-01-01T00:00:00",
|
|
113
|
+
duration: "P23DT23H",
|
|
114
|
+
geojson: '{"value": 1}',
|
|
115
|
+
geopoint: "40.0,50.0",
|
|
116
|
+
integer: 1,
|
|
117
|
+
list: "1.0,2.0,3.0",
|
|
118
|
+
number: 1.1,
|
|
119
|
+
object: '{"value": 1}',
|
|
120
|
+
string: "string",
|
|
121
|
+
time: "00:00:00",
|
|
122
|
+
year: 2025,
|
|
123
|
+
yearmonth: "2025-01",
|
|
124
|
+
},
|
|
125
|
+
]);
|
|
126
|
+
});
|
|
127
|
+
it("should load package from database", async () => {
|
|
128
|
+
const path = getTempFilePath();
|
|
129
|
+
const adapter = createAdapter("sqlite");
|
|
130
|
+
const database = await adapter.connectDatabase(path, { create: true });
|
|
131
|
+
await database.schema
|
|
132
|
+
.createTable("table1")
|
|
133
|
+
.addColumn("id", "integer", column => column.notNull())
|
|
134
|
+
.addColumn("name", "text")
|
|
135
|
+
.execute();
|
|
136
|
+
await database.schema
|
|
137
|
+
.createTable("table2")
|
|
138
|
+
.addColumn("id", "integer", column => column.notNull())
|
|
139
|
+
.addColumn("number", "numeric")
|
|
140
|
+
.addColumn("boolean", "boolean")
|
|
141
|
+
.execute();
|
|
142
|
+
const datapackage = await loadPackageFromDatabase(path, {
|
|
143
|
+
format: "sqlite",
|
|
144
|
+
});
|
|
145
|
+
expect(datapackage).toEqual({
|
|
146
|
+
resources: [
|
|
147
|
+
{
|
|
148
|
+
path,
|
|
149
|
+
name: "table1",
|
|
150
|
+
format: "sqlite",
|
|
151
|
+
dialect: { table: "table1" },
|
|
152
|
+
schema: {
|
|
153
|
+
fields: [
|
|
154
|
+
{ name: "id", type: "integer", constraints: { required: true } },
|
|
155
|
+
{ name: "name", type: "string" },
|
|
156
|
+
],
|
|
157
|
+
},
|
|
158
|
+
},
|
|
159
|
+
{
|
|
160
|
+
path,
|
|
161
|
+
name: "table2",
|
|
162
|
+
format: "sqlite",
|
|
163
|
+
dialect: { table: "table2" },
|
|
164
|
+
schema: {
|
|
165
|
+
fields: [
|
|
166
|
+
{ name: "id", type: "integer", constraints: { required: true } },
|
|
167
|
+
{ name: "number", type: "number" },
|
|
168
|
+
{ name: "boolean", type: "string" },
|
|
169
|
+
],
|
|
170
|
+
},
|
|
171
|
+
},
|
|
172
|
+
],
|
|
173
|
+
});
|
|
174
|
+
});
|
|
175
|
+
it("should save package to database", async () => {
|
|
176
|
+
const path = getTempFilePath();
|
|
177
|
+
const dataPackage = {
|
|
178
|
+
resources: [
|
|
179
|
+
{
|
|
180
|
+
path: "table1.csv",
|
|
181
|
+
name: "table1",
|
|
182
|
+
format: "sqlite",
|
|
183
|
+
dialect: { table: "table1" },
|
|
184
|
+
schema: {
|
|
185
|
+
fields: [
|
|
186
|
+
{ name: "id", type: "integer", constraints: { required: true } },
|
|
187
|
+
{ name: "name", type: "string" },
|
|
188
|
+
],
|
|
189
|
+
},
|
|
190
|
+
},
|
|
191
|
+
{
|
|
192
|
+
path: "table2.csv",
|
|
193
|
+
name: "table2",
|
|
194
|
+
format: "sqlite",
|
|
195
|
+
dialect: { table: "table2" },
|
|
196
|
+
schema: {
|
|
197
|
+
fields: [
|
|
198
|
+
{ name: "id", type: "integer", constraints: { required: true } },
|
|
199
|
+
{ name: "number", type: "number" },
|
|
200
|
+
{ name: "boolean", type: "string" },
|
|
201
|
+
],
|
|
202
|
+
},
|
|
203
|
+
},
|
|
204
|
+
],
|
|
205
|
+
};
|
|
206
|
+
await savePackageToDatabase(dataPackage, {
|
|
207
|
+
target: path,
|
|
208
|
+
format: "sqlite",
|
|
209
|
+
plugins: [
|
|
210
|
+
{
|
|
211
|
+
loadTable: async (resource) => {
|
|
212
|
+
if (resource.name === "table1") {
|
|
213
|
+
return pl
|
|
214
|
+
.DataFrame([
|
|
215
|
+
pl.Series("id", [1, 2]),
|
|
216
|
+
pl.Series("name", ["english", "中文"]),
|
|
217
|
+
])
|
|
218
|
+
.lazy();
|
|
219
|
+
}
|
|
220
|
+
if (resource.name === "table2") {
|
|
221
|
+
return pl
|
|
222
|
+
.DataFrame([
|
|
223
|
+
pl.Series("id", [1, 2]),
|
|
224
|
+
pl.Series("number", [1.1, 2.2]),
|
|
225
|
+
pl.Series("boolean", ["true", "false"]),
|
|
226
|
+
])
|
|
227
|
+
.lazy();
|
|
228
|
+
}
|
|
229
|
+
return undefined;
|
|
230
|
+
},
|
|
231
|
+
},
|
|
232
|
+
],
|
|
233
|
+
});
|
|
234
|
+
const adapter = createAdapter("sqlite");
|
|
235
|
+
const database = await adapter.connectDatabase(path);
|
|
236
|
+
const records1 = await database.selectFrom("table1").selectAll().execute();
|
|
237
|
+
const records2 = await database.selectFrom("table2").selectAll().execute();
|
|
238
|
+
expect(records1).toEqual([
|
|
239
|
+
{ id: 1, name: "english" },
|
|
240
|
+
{ id: 2, name: "中文" },
|
|
241
|
+
]);
|
|
242
|
+
expect(records2).toEqual([
|
|
243
|
+
{ id: 1, number: 1.1, boolean: "true" },
|
|
244
|
+
{ id: 2, number: 2.2, boolean: "false" },
|
|
245
|
+
]);
|
|
246
|
+
});
|
|
247
|
+
it("should throw error when loading from non-existent database", async () => {
|
|
248
|
+
const path = "non-existent-database.db";
|
|
249
|
+
await expect(loadDatabaseTable({ path, format: "sqlite", dialect })).rejects.toThrow('Database file "non-existent-database.db" does not exist');
|
|
250
|
+
});
|
|
251
|
+
});
|
|
252
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3FsaXRlLnNwZWMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9hZGFwdGVycy9zcWxpdGUuc3BlYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUE7QUFFMUQsT0FBTyxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFDbkMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLE1BQU0sUUFBUSxDQUFBO0FBQzdDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxjQUFjLENBQUE7QUFDM0MsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0scUJBQXFCLENBQUE7QUFDN0QsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0scUJBQXFCLENBQUE7QUFDM0QsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sb0JBQW9CLENBQUE7QUFDeEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLGlCQUFpQixFQUFFLE1BQU0sbUJBQW1CLENBQUE7QUFDeEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGFBQWEsQ0FBQTtBQUUzQyxZQUFZLEVBQUUsQ0FBQTtBQUVkLE1BQU0sT0FBTyxHQUFHLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxDQUFBO0FBQ2xDLE1BQU0sT0FBTyxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLENBQUE7QUFDMUMsTUFBTSxPQUFPLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQTtBQUVyQyx3Q0FBd0M7QUFDeEMsUUFBUSxDQUFDLGVBQWUsRUFBRSxHQUFHLEVBQUU7SUFDN0IsRUFBRSxDQUFDLHFCQUFxQixFQUFFLEtBQUssSUFBSSxFQUFFO1FBQ25DLE1BQU0sSUFBSSxHQUFHLGVBQWUsRUFBRSxDQUFBO1FBRTlCLE1BQU0sTUFBTSxHQUFHLEVBQUU7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QUFJLEVBQUU7UUFDOUQsTUFBTSxJQUFJLEdBQUcsWUFBWSxlQUFlLEVBQUUsRUFBRSxDQUFBO1FBRTVDLE1BQU0sTUFBTSxHQUFHLEVBQUU7YUFDZCxTQUFTLENBQUM7WUFDVCxFQUFFLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDLFdBQVcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUM7WUFDNUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDO1lBQ3JDLEVBQUUsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDO1lBQzVELEVBQUUsQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDO1lBQ3BFLEVBQUUsQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLENBQUMsVUFBVSxDQUFDLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQztZQUM5QyxFQUFFLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDLGNBQWMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUM7WUFDakQsRUFBRSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQzFELEVBQUUsQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQztZQUNuQyxFQUFFLENBQUMsTUFBTSxD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LFFBQVEsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUN2RCxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMseURBQXlELENBQUMsQ0FBQTtJQUM5RSxDQUFDLENBQUMsQ0FBQTtBQUNKLENBQUMsQ0FBQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZ2V0VGVtcEZpbGVQYXRoIH0gZnJvbSBcIkBmcmljdGlvbmxlc3MtdHMvZGF0YXNldFwiXG5pbXBvcnQgdHlwZSB7IFBhY2thZ2UgfSBmcm9tIFwiQGZyaWN0aW9ubGVzcy10cy9tZXRhZGF0YVwiXG5pbXBvcnQgKiBhcyBwbCBmcm9tIFwibm9kZWpzLXBvbGFyc1wiXG5pbXBvcnQgeyBkZXNjcmliZSwgZXhwZWN0LCBpdCB9IGZyb20gXCJ2aXRlc3RcIlxuaW1wb3J0IHsgdXNlUmVjb3JkaW5nIH0gZnJvbSBcInZpdGVzdC1wb2xseVwiXG5pbXBvcnQgeyBsb2FkUGFja2FnZUZyb21EYXRhYmFzZSB9IGZyb20gXCIuLi9wYWNrYWdlL2luZGV4LnRzXCJcbmltcG9ydCB7IHNhdmVQYWNrYWdlVG9EYXRhYmFzZSB9IGZyb20gXCIuLi9wYWNrYWdlL2luZGV4LnRzXCJcbmltcG9ydCB7IGluZmVyRGF0YWJhc2VTY2hlbWEgfSBmcm9tIFwiLi4vc2NoZW1hL2luZGV4LnRzXCJcbmltcG9ydCB7IGxvYWREYXRhYmFzZVRhYmxlLCBzYXZlRGF0YWJhc2VUYWJsZSB9IGZyb20gXCIuLi90YWJsZS9pbmRleC50c1wiXG5pbXBvcnQgeyBjcmVhdGVBZGFwdGVyIH0gZnJvbSBcIi4vY3JlYXRlLnRzXCJcblxudXNlUmVjb3JkaW5nKClcblxuY29uc3QgZGlhbGVjdCA9IHsgdGFibGU6IFwiZHBraXRcIiB9XG5jb25zdCByZWNvcmQxID0geyBpZDogMSwgbmFtZTogXCJlbmdsaXNoXCIgfVxuY29uc3QgcmVjb3JkMiA9IHsgaWQ6IDIsIG5hbWU6IFwi5Lit5paHXCIgfVxuXG4vLyBUT0RPOiBFbmFibGUgd2hlbiBsaWJzcWxAMC42IGlzIGZpeGVkXG5kZXNjcmliZShcIlNxbGl0ZUFkYXB0ZXJcIiwgKCkgPT4ge1xuICBpdChcInNob3VsZCBpbmZlciBzY2hlbWFcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHBhdGggPSBnZXRUZW1wRmlsZVBhdGgoKVxuXG4gICAgY29uc3Qgc291cmNlID0gcGxcbiAgICAgIC5EYXRhRnJhbWUoW1xuICAgICAgICBwbC5TZXJpZXMoXCJzdHJpbmdcIiwgW1wic3RyaW5nXCJdLCBwbC5VdGY4KSxcbiAgICAgICAgcGwuU2VyaWVzKFwiaW50ZWdlclwiLCBbMV0sIHBsLkludDMyKSxcbiAgICAgICAgcGwuU2VyaWVzKFwibnVtYmVyXCIsIFsxLjFdLCBwbC5GbG9hdDY0KSxcbiAgICAgIF0pXG4gICAgICAubGF6eSgpXG5cbiAgICBhd2FpdCBzYXZlRGF0YWJhc2VUYWJsZShzb3VyY2UsIHtcbiAgICAgIHBhdGgsXG4gICAgICBkaWFsZWN0LFxuICAgICAgZm9ybWF0OiBcInNxbGl0ZVwiLFxuICAgICAgb3ZlcndyaXRlOiB0cnVlLFxuICAgIH0pXG5cbiAgICBjb25zdCBzY2hlbWEgPSBhd2FpdCBpbmZlckRhdGFiYXNlU2NoZW1hKHtcbiAgICAgIHBhdGgsXG4gICAgICBkaWFsZWN0LFxuICAgICAgZm9ybWF0OiBcInNxbGl0ZVwiLFxuICAgIH0pXG5cbiAgICBleHBlY3Qoc2NoZW1hKS50b0VxdWFsKHtcbiAgICAgIGZpZWxkczogW1xuICAgICAgICB7IG5hbWU6IFwic3RyaW5nXCIsIHR5cGU6IFwic3RyaW5nXCIgfSxcbiAgICAgICAgeyBuYW1lOiBcImludGVnZXJcIiwgdHlwZTogXCJpbnRlZ2VyXCIgfSxcbiAgICAgICAgeyBuYW1lOiBcIm51bWJlclwiLCB0eXBlOiBcIm51bWJlclwiIH0sXG4gICAgICBdLFxuICAgIH0pXG4gIH0pXG5cbiAgaXQoXCJzaG91bGQgc2F2ZS9sb2FkIHRhYmxlXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBwYXRoID0gZ2V0VGVtcEZpbGVQYXRoKClcblxuICAgIGNvbnN0IHNvdXJjZSA9IHBsLkRhdGFGcmFtZShbcmVjb3JkMSwgcmVjb3JkMl0pLmxhenkoKVxuICAgIGF3YWl0IHNhdmVEYXRhYmFzZVRhYmxlKHNvdXJjZSwge1xuICAgICAgcGF0aCxcbiAgICAgIGRpYWxlY3QsXG4gICAgICBmb3JtYXQ6IFwic3FsaXRlXCIsXG4gICAgICBvdmVyd3JpdGU6IHRydWUsXG4gICAgfSlcblxuICAgIGNvbnN0IHRhcmdldCA9IGF3YWl0IGxvYWREYXRhYmFzZVRhYmxlKHsgcGF0aCwgZGlhbGVjdCwgZm9ybWF0OiBcInNxbGl0ZVwiIH0pXG4gICAgZXhwZWN0KChhd2FpdCB0YXJnZXQuY29sbGVjdCgpKS50b1JlY29yZHMoKSkudG9FcXVhbChbcmVjb3JkMSwgcmVjb3JkMl0pXG4gIH0pXG5cbiAgaXQoXCJzaG91bGQgc2F2ZS9sb2FkIHRhYmxlIHdpdGggcHJvdG9jb2xcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHBhdGggPSBgc3FsaXRlOi8vJHtnZXRUZW1wRmlsZVBhdGgoKX1gXG5cbiAgICBjb25zdCBzb3VyY2UgPSBwbC5EYXRhRnJhbWUoW3JlY29yZDEsIHJlY29yZDJdKS5sYXp5KClcbiAgICBhd2FpdCBzYXZlRGF0YWJhc2VUYWJsZShzb3VyY2UsIHtcbiAgICAgIHBhdGgsXG4gICAgICBkaWFsZWN0LFxuICAgICAgZm9ybWF0OiBcInNxbGl0ZVwiLFxuICAgICAgb3ZlcndyaXRlOiB0cnVlLFxuICAgIH0pXG5cbiAgICBjb25zdCB0YXJnZXQgPSBhd2FpdCBsb2FkRGF0YWJhc2VUYWJsZSh7IHBhdGgsIGRpYWxlY3QsIGZvcm1hdDogXCJzcWxpdGVcIiB9KVxuICAgIGV4cGVjdCgoYXdhaXQgdGFyZ2V0LmNvbGxlY3QoKSkudG9SZWNvcmRzKCkpLnRvRXF1YWwoW3JlY29yZDEsIHJlY29yZDJdKVxuICB9KVxuXG4gIGl0KFwic2hvdWxkIHNhdmUvbG9hZCB0YWJsZSB3aXRoIHZhcmlvdXMgZGF0YSB0eXBlc1wiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgcGF0aCA9IGBzcWxpdGU6Ly8ke2dldFRlbXBGaWxlUGF0aCgpfWBcblxuICAgIGNvbnN0IHNvdXJjZSA9IHBsXG4gICAgICAuRGF0YUZyYW1lKFtcbiAgICAgICAgcGwuU2VyaWVzKFwiYXJyYXlcIiwgW1wiWzEsIDIsIDNdXCJdLCBwbC5TdHJpbmcpLFxuICAgICAgICBwbC5TZXJpZXMoXCJib29sZWFuXCIsIFt0cnVlXSwgcGwuQm9vbCksXG4gICAgICAgIHBsLlNlcmllcyhcImRhdGVcIiwgW25ldyBEYXRlKERhdGUuVVRDKDIwMjUsIDAsIDEpKV0sIHBsLkRhdGUpLFxuICAgICAgICBwbC5TZXJpZXMoXCJkYXRldGltZVwiLCBbbmV3IERhdGUoRGF0ZS5VVEMoMjAyNSwgMCwgMSkpXSwgcGwuRGF0ZXRpbWUpLFxuICAgICAgICBwbC5TZXJpZXMoXCJkdXJhdGlvblwiLCBbXCJQMjNEVDIzSFwiXSwgcGwuU3RyaW5nKSxcbiAgICAgICAgcGwuU2VyaWVzKFwiZ2VvanNvblwiLCBbJ3tcInZhbHVlXCI6IDF9J10sIHBsLlN0cmluZyksXG4gICAgICAgIHBsLlNlcmllcyhcImdlb3BvaW50XCIsIFtbNDAuMCwgNTAuMF1dLCBwbC5MaXN0KHBsLkZsb2F0MzIpKSxcbiAgICAgICAgcGwuU2VyaWVzKFwiaW50ZWdlclwiLCBbMV0sIHBsLkludDMyKSxcbiAgICAgICAgcGwuU2VyaWVzKFwibGlzdFwiLCBbWzEuMCwgMi4wLCAzLjBdXSwgcGwuTGlzdChwbC5GbG9hdDMyKSksXG4gICAgICAgIHBsLlNlcmllcyhcIm51bWJlclwiLCBbMS4xXSwgcGwuRmxvYXQ2NCksXG4gICAgICAgIHBsLlNlcmllcyhcIm9iamVjdFwiLCBbJ3tcInZhbHVlXCI6IDF9J10pLFxuICAgICAgICBwbC5TZXJpZXMoXCJzdHJpbmdcIiwgW1wic3RyaW5nXCJdLCBwbC5TdHJpbmcpLFxuICAgICAgICBwbC5TZXJpZXMoXCJ0aW1lXCIsIFtuZXcgRGF0ZShEYXRlLlVUQygyMDI1LCAwLCAxKSldLCBwbC5UaW1lKSxcbiAgICAgICAgcGwuU2VyaWVzKFwieWVhclwiLCBbMjAyNV0sIHBsLkludDMyKSxcbiAgICAgICAgcGwuU2VyaWVzKFwieWVhcm1vbnRoXCIsIFtbMjAyNSwgMV1dLCBwbC5MaXN0KHBsLkludDE2KSksXG4gICAgICBdKVxuICAgICAgLmxhenkoKVxuXG4gICAgYXdhaXQgc2F2ZURhdGFiYXNlVGFibGUoc291cmNlLCB7XG4gICAgICBwYXRoLFxuICAgICAgZGlhbGVjdCxcbiAgICAgIGZvcm1hdDogXCJzcWxpdGVcIixcbiAgICAgIG92ZXJ3cml0ZTogdHJ1ZSxcbiAgICAgIGZpZWxkVHlwZXM6IHtcbiAgICAgICAgZ2VvanNvbjogXCJnZW9qc29uXCIsXG4gICAgICAgIGdlb3BvaW50OiBcImdlb3BvaW50XCIsXG4gICAgICAgIGxpc3Q6IFwibGlzdFwiLFxuICAgICAgICBvYmplY3Q6IFwib2JqZWN0XCIsXG4gICAgICAgIC8vIFRPRE86IFJlbW92ZSB0aW1lIGFmdGVyOlxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vcG9sYS1ycy9ub2RlanMtcG9sYXJzL2lzc3Vlcy8zNjRcbiAgICAgICAgdGltZTogXCJ0aW1lXCIsXG4gICAgICAgIHllYXI6IFwieWVhclwiLFxuICAgICAgICB5ZWFybW9udGg6IFwieWVhcm1vbnRoXCIsXG4gICAgICB9LFxuICAgIH0pXG5cbiAgICBjb25zdCB0YXJnZXQgPSBhd2FpdCBsb2FkRGF0YWJhc2VUYWJsZShcbiAgICAgIHsgcGF0aCwgZGlhbGVjdCwgZm9ybWF0OiBcInNxbGl0ZVwiIH0sXG4gICAgICB7IGRlbm9ybWFsaXplZDogdHJ1ZSB9LFxuICAgIClcblxuICAgIGV4cGVjdCgoYXdhaXQgdGFyZ2V0LmNvbGxlY3QoKSkudG9SZWNvcmRzKCkpLnRvRXF1YWwoW1xuICAgICAge1xuICAgICAgICBhcnJheTogXCJbMSwgMiwgM11cIixcbiAgICAgICAgYm9vbGVhbjogXCJ0cnVlXCIsXG4gICAgICAgIGRhdGU6IFwiMjAyNS0wMS0wMVwiLFxuICAgICAgICBkYXRldGltZTogXCIyMDI1LTAxLTAxVDAwOjAwOjAwXCIsXG4gICAgICAgIGR1cmF0aW9uOiBcIlAyM0RUMjNIXCIsXG4gICAgICAgIGdlb2pzb246ICd7XCJ2YWx1ZVwiOiAxfScsXG4gICAgICAgIGdlb3BvaW50OiBcIjQwLjAsNTAuMFwiLFxuICAgICAgICBpbnRlZ2VyOiAxLFxuICAgICAgICBsaXN0OiBcIjEuMCwyLjAsMy4wXCIsXG4gICAgICAgIG51bWJlcjogMS4xLFxuICAgICAgICBvYmplY3Q6ICd7XCJ2YWx1ZVwiOiAxfScsXG4gICAgICAgIHN0cmluZzogXCJzdHJpbmdcIixcbiAgICAgICAgdGltZTogXCIwMDowMDowMFwiLFxuICAgICAgICB5ZWFyOiAyMDI1LFxuICAgICAgICB5ZWFybW9udGg6IFwiMjAyNS0wMVwiLFxuICAgICAgfSxcbiAgICBdKVxuICB9KVxuXG4gIGl0KFwic2hvdWxkIGxvYWQgcGFja2FnZSBmcm9tIGRhdGFiYXNlXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBwYXRoID0gZ2V0VGVtcEZpbGVQYXRoKClcbiAgICBjb25zdCBhZGFwdGVyID0gY3JlYXRlQWRhcHRlcihcInNxbGl0ZVwiKVxuICAgIGNvbnN0IGRhdGFiYXNlID0gYXdhaXQgYWRhcHRlci5jb25uZWN0RGF0YWJhc2UocGF0aCwgeyBjcmVhdGU6IHRydWUgfSlcblxuICAgIGF3YWl0IGRhdGFiYXNlLnNjaGVtYVxuICAgICAgLmNyZWF0ZVRhYmxlKFwidGFibGUxXCIpXG4gICAgICAuYWRkQ29sdW1uKFwiaWRcIiwgXCJpbnRlZ2VyXCIsIGNvbHVtbiA9PiBjb2x1bW4ubm90TnVsbCgpKVxuICAgICAgLmFkZENvbHVtbihcIm5hbWVcIiwgXCJ0ZXh0XCIpXG4gICAgICAuZXhlY3V0ZSgpXG5cbiAgICBhd2FpdCBkYXRhYmFzZS5zY2hlbWFcbiAgICAgIC5jcmVhdGVUYWJsZShcInRhYmxlMlwiKVxuICAgICAgLmFkZENvbHVtbihcImlkXCIsIFwiaW50ZWdlclwiLCBjb2x1bW4gPT4gY29sdW1uLm5vdE51bGwoKSlcbiAgICAgIC5hZGRDb2x1bW4oXCJudW1iZXJcIiwgXCJudW1lcmljXCIpXG4gICAgICAuYWRkQ29sdW1uKFwiYm9vbGVhblwiLCBcImJvb2xlYW5cIilcbiAgICAgIC5leGVjdXRlKClcblxuICAgIGNvbnN0IGRhdGFwYWNrYWdlID0gYXdhaXQgbG9hZFBhY2thZ2VGcm9tRGF0YWJhc2UocGF0aCwge1xuICAgICAgZm9ybWF0OiBcInNxbGl0ZVwiLFxuICAgIH0pXG5cbiAgICBleHBlY3QoZGF0YXBhY2thZ2UpLnRvRXF1YWwoe1xuICAgICAgcmVzb3VyY2VzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBwYXRoLFxuICAgICAgICAgIG5hbWU6IFwidGFibGUxXCIsXG4gICAgICAgICAgZm9ybWF0OiBcInNxbGl0ZVwiLFxuICAgICAgICAgIGRpYWxlY3Q6IHsgdGFibGU6IFwidGFibGUxXCIgfSxcbiAgICAgICAgICBzY2hlbWE6IHtcbiAgICAgICAgICAgIGZpZWxkczogW1xuICAgICAgICAgICAgICB7IG5hbWU6IFwiaWRcIiwgdHlwZTogXCJpbnRlZ2VyXCIsIGNvbnN0cmFpbnRzOiB7IHJlcXVpcmVkOiB0cnVlIH0gfSxcbiAgICAgICAgICAgICAgeyBuYW1lOiBcIm5hbWVcIiwgdHlwZTogXCJzdHJpbmdcIiB9LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgcGF0aCxcbiAgICAgICAgICBuYW1lOiBcInRhYmxlMlwiLFxuICAgICAgICAgIGZvcm1hdDogXCJzcWxpdGVcIixcbiAgICAgICAgICBkaWFsZWN0OiB7IHRhYmxlOiBcInRhYmxlMlwiIH0sXG4gICAgICAgICAgc2NoZW1hOiB7XG4gICAgICAgICAgICBmaWVsZHM6IFtcbiAgICAgICAgICAgICAgeyBuYW1lOiBcImlkXCIsIHR5cGU6IFwiaW50ZWdlclwiLCBjb25zdHJhaW50czogeyByZXF1aXJlZDogdHJ1ZSB9IH0sXG4gICAgICAgICAgICAgIHsgbmFtZTogXCJudW1iZXJcIiwgdHlwZTogXCJudW1iZXJcIiB9LFxuICAgICAgICAgICAgICB7IG5hbWU6IFwiYm9vbGVhblwiLCB0eXBlOiBcInN0cmluZ1wiIH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0pXG4gIH0pXG5cbiAgaXQoXCJzaG91bGQgc2F2ZSBwYWNrYWdlIHRvIGRhdGFiYXNlXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBwYXRoID0gZ2V0VGVtcEZpbGVQYXRoKClcblxuICAgIGNvbnN0IGRhdGFQYWNrYWdlOiBQYWNrYWdlID0ge1xuICAgICAgcmVzb3VyY2VzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBwYXRoOiBcInRhYmxlMS5jc3ZcIixcbiAgICAgICAgICBuYW1lOiBcInRhYmxlMVwiLFxuICAgICAgICAgIGZvcm1hdDogXCJzcWxpdGVcIixcbiAgICAgICAgICBkaWFsZWN0OiB7IHRhYmxlOiBcInRhYmxlMVwiIH0sXG4gICAgICAgICAgc2NoZW1hOiB7XG4gICAgICAgICAgICBmaWVsZHM6IFtcbiAgICAgICAgICAgICAgeyBuYW1lOiBcImlkXCIsIHR5cGU6IFwiaW50ZWdlclwiLCBjb25zdHJhaW50czogeyByZXF1aXJlZDogdHJ1ZSB9IH0sXG4gICAgICAgICAgICAgIHsgbmFtZTogXCJuYW1lXCIsIHR5cGU6IFwic3RyaW5nXCIgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHBhdGg6IFwidGFibGUyLmNzdlwiLFxuICAgICAgICAgIG5hbWU6IFwidGFibGUyXCIsXG4gICAgICAgICAgZm9ybWF0OiBcInNxbGl0ZVwiLFxuICAgICAgICAgIGRpYWxlY3Q6IHsgdGFibGU6IFwidGFibGUyXCIgfSxcbiAgICAgICAgICBzY2hlbWE6IHtcbiAgICAgICAgICAgIGZpZWxkczogW1xuICAgICAgICAgICAgICB7IG5hbWU6IFwiaWRcIiwgdHlwZTogXCJpbnRlZ2VyXCIsIGNvbnN0cmFpbnRzOiB7IHJlcXVpcmVkOiB0cnVlIH0gfSxcbiAgICAgICAgICAgICAgeyBuYW1lOiBcIm51bWJlclwiLCB0eXBlOiBcIm51bWJlclwiIH0sXG4gICAgICAgICAgICAgIHsgbmFtZTogXCJib29sZWFuXCIsIHR5cGU6IFwic3RyaW5nXCIgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfVxuXG4gICAgYXdhaXQgc2F2ZVBhY2thZ2VUb0RhdGFiYXNlKGRhdGFQYWNrYWdlLCB7XG4gICAgICB0YXJnZXQ6IHBhdGgsXG4gICAgICBmb3JtYXQ6IFwic3FsaXRlXCIsXG4gICAgICBwbHVnaW5zOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBsb2FkVGFibGU6IGFzeW5jIHJlc291cmNlID0+IHtcbiAgICAgICAgICAgIGlmIChyZXNvdXJjZS5uYW1lID09PSBcInRhYmxlMVwiKSB7XG4gICAgICAgICAgICAgIHJldHVybiBwbFxuICAgICAgICAgICAgICAgIC5EYXRhRnJhbWUoW1xuICAgICAgICAgICAgICAgICAgcGwuU2VyaWVzKFwiaWRcIiwgWzEsIDJdKSxcbiAgICAgICAgICAgICAgICAgIHBsLlNlcmllcyhcIm5hbWVcIiwgW1wiZW5nbGlzaFwiLCBcIuS4reaWh1wiXSksXG4gICAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgICAgICAubGF6eSgpXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChyZXNvdXJjZS5uYW1lID09PSBcInRhYmxlMlwiKSB7XG4gICAgICAgICAgICAgIHJldHVybiBwbFxuICAgICAgICAgICAgICAgIC5EYXRhRnJhbWUoW1xuICAgICAgICAgICAgICAgICAgcGwuU2VyaWVzKFwiaWRcIiwgWzEsIDJdKSxcbiAgICAgICAgICAgICAgICAgIHBsLlNlcmllcyhcIm51bWJlclwiLCBbMS4xLCAyLjJdKSxcbiAgICAgICAgICAgICAgICAgIHBsLlNlcmllcyhcImJvb2xlYW5cIiwgW1widHJ1ZVwiLCBcImZhbHNlXCJdKSxcbiAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgICAgIC5sYXp5KClcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0pXG5cbiAgICBjb25zdCBhZGFwdGVyID0gY3JlYXRlQWRhcHRlcihcInNxbGl0ZVwiKVxuICAgIGNvbnN0IGRhdGFiYXNlID0gYXdhaXQgYWRhcHRlci5jb25uZWN0RGF0YWJhc2UocGF0aClcblxuICAgIGNvbnN0IHJlY29yZHMxID0gYXdhaXQgZGF0YWJhc2Uuc2VsZWN0RnJvbShcInRhYmxlMVwiKS5zZWxlY3RBbGwoKS5leGVjdXRlKClcbiAgICBjb25zdCByZWNvcmRzMiA9IGF3YWl0IGRhdGFiYXNlLnNlbGVjdEZyb20oXCJ0YWJsZTJcIikuc2VsZWN0QWxsKCkuZXhlY3V0ZSgpXG5cbiAgICBleHBlY3QocmVjb3JkczEpLnRvRXF1YWwoW1xuICAgICAgeyBpZDogMSwgbmFtZTogXCJlbmdsaXNoXCIgfSxcbiAgICAgIHsgaWQ6IDIsIG5hbWU6IFwi5Lit5paHXCIgfSxcbiAgICBdKVxuXG4gICAgZXhwZWN0KHJlY29yZHMyKS50b0VxdWFsKFtcbiAgICAgIHsgaWQ6IDEsIG51bWJlcjogMS4xLCBib29sZWFuOiBcInRydWVcIiB9LFxuICAgICAgeyBpZDogMiwgbnVtYmVyOiAyLjIsIGJvb2xlYW46IFwiZmFsc2VcIiB9LFxuICAgIF0pXG4gIH0pXG5cbiAgaXQoXCJzaG91bGQgdGhyb3cgZXJyb3Igd2hlbiBsb2FkaW5nIGZyb20gbm9uLWV4aXN0ZW50IGRhdGFiYXNlXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBwYXRoID0gXCJub24tZXhpc3RlbnQtZGF0YWJhc2UuZGJcIlxuXG4gICAgYXdhaXQgZXhwZWN0KFxuICAgICAgbG9hZERhdGFiYXNlVGFibGUoeyBwYXRoLCBmb3JtYXQ6IFwic3FsaXRlXCIsIGRpYWxlY3QgfSksXG4gICAgKS5yZWplY3RzLnRvVGhyb3coJ0RhdGFiYXNlIGZpbGUgXCJub24tZXhpc3RlbnQtZGF0YWJhc2UuZGJcIiBkb2VzIG5vdCBleGlzdCcpXG4gIH0pXG59KVxuIl19
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRmllbGQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9maWVsZC9GaWVsZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBDb2x1bW5NZXRhZGF0YSB9IGZyb20gXCJreXNlbHlcIlxuXG5leHBvcnQgaW50ZXJmYWNlIERhdGFiYXNlRmllbGQgZXh0ZW5kcyBDb2x1bW5NZXRhZGF0YSB7fVxuIl19
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVHlwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL2ZpZWxkL1R5cGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRGF0YWJhc2VGaWVsZCB9IGZyb20gXCIuL0ZpZWxkLnRzXCJcblxuZXhwb3J0IHR5cGUgRGF0YWJhc2VUeXBlID0gRGF0YWJhc2VGaWVsZFtcImRhdGFUeXBlXCJdXG4iXX0=
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9maWVsZC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHR5cGUgeyBEYXRhYmFzZUZpZWxkIH0gZnJvbSBcIi4vRmllbGQudHNcIlxuZXhwb3J0IHR5cGUgeyBEYXRhYmFzZVR5cGUgfSBmcm9tIFwiLi9UeXBlLnRzXCJcbiJdfQ==
|
package/build/index.d.ts
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { DatabasePlugin } from "./plugin.ts";
|
|
2
|
+
export { inferDatabaseSchema } from "./schema/index.ts";
|
|
3
|
+
export { loadDatabaseTable } from "./table/index.ts";
|
|
4
|
+
export { loadPackageFromDatabase } from "./package/index.ts";
|
|
5
|
+
export { saveDatabaseTable } from "./table/index.ts";
|
|
6
|
+
export { savePackageToDatabase } from "./package/index.ts";
|
package/build/index.js
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export { DatabasePlugin } from "./plugin.js";
|
|
2
|
+
export { inferDatabaseSchema } from "./schema/index.js";
|
|
3
|
+
export { loadDatabaseTable } from "./table/index.js";
|
|
4
|
+
export { loadPackageFromDatabase } from "./package/index.js";
|
|
5
|
+
export { saveDatabaseTable } from "./table/index.js";
|
|
6
|
+
export { savePackageToDatabase } from "./package/index.js";
|
|
7
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sYUFBYSxDQUFBO0FBRTVDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG1CQUFtQixDQUFBO0FBQ3ZELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtCQUFrQixDQUFBO0FBQ3BELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLG9CQUFvQixDQUFBO0FBQzVELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtCQUFrQixDQUFBO0FBQ3BELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLG9CQUFvQixDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHsgRGF0YWJhc2VQbHVnaW4gfSBmcm9tIFwiLi9wbHVnaW4udHNcIlxuXG5leHBvcnQgeyBpbmZlckRhdGFiYXNlU2NoZW1hIH0gZnJvbSBcIi4vc2NoZW1hL2luZGV4LnRzXCJcbmV4cG9ydCB7IGxvYWREYXRhYmFzZVRhYmxlIH0gZnJvbSBcIi4vdGFibGUvaW5kZXgudHNcIlxuZXhwb3J0IHsgbG9hZFBhY2thZ2VGcm9tRGF0YWJhc2UgfSBmcm9tIFwiLi9wYWNrYWdlL2luZGV4LnRzXCJcbmV4cG9ydCB7IHNhdmVEYXRhYmFzZVRhYmxlIH0gZnJvbSBcIi4vdGFibGUvaW5kZXgudHNcIlxuZXhwb3J0IHsgc2F2ZVBhY2thZ2VUb0RhdGFiYXNlIH0gZnJvbSBcIi4vcGFja2FnZS9pbmRleC50c1wiXG4iXX0=
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export { loadPackageFromDatabase } from "./load.js";
|
|
2
|
+
export { savePackageToDatabase } from "./save.js";
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9wYWNrYWdlL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLFdBQVcsQ0FBQTtBQUNuRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxXQUFXLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyBsb2FkUGFja2FnZUZyb21EYXRhYmFzZSB9IGZyb20gXCIuL2xvYWQudHNcIlxuZXhwb3J0IHsgc2F2ZVBhY2thZ2VUb0RhdGFiYXNlIH0gZnJvbSBcIi4vc2F2ZS50c1wiXG4iXX0=
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { Package } from "@frictionless-ts/metadata";
|
|
2
|
+
import type { DatabaseFormat } from "../resource/index.ts";
|
|
3
|
+
export declare function loadPackageFromDatabase(connectionString: string, options: {
|
|
4
|
+
format: DatabaseFormat;
|
|
5
|
+
includeTables?: string[];
|
|
6
|
+
excludeTables?: string[];
|
|
7
|
+
}): Promise<Package>;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { createAdapter } from "../adapters/create.js";
|
|
2
|
+
export async function loadPackageFromDatabase(connectionString, options) {
|
|
3
|
+
const { includeTables, excludeTables } = options;
|
|
4
|
+
const adapter = createAdapter(options.format);
|
|
5
|
+
const database = await adapter.connectDatabase(connectionString);
|
|
6
|
+
const databaseSchemas = await database.introspection.getTables();
|
|
7
|
+
const dataPackage = {
|
|
8
|
+
resources: [],
|
|
9
|
+
};
|
|
10
|
+
for (const databaseSchema of databaseSchemas) {
|
|
11
|
+
const name = databaseSchema.name;
|
|
12
|
+
if (includeTables && !includeTables.includes(name)) {
|
|
13
|
+
continue;
|
|
14
|
+
}
|
|
15
|
+
if (excludeTables?.includes(name)) {
|
|
16
|
+
continue;
|
|
17
|
+
}
|
|
18
|
+
const schema = adapter.normalizeSchema(databaseSchema);
|
|
19
|
+
const dialect = { table: name };
|
|
20
|
+
dataPackage.resources.push({
|
|
21
|
+
name,
|
|
22
|
+
path: connectionString,
|
|
23
|
+
format: options.format,
|
|
24
|
+
dialect,
|
|
25
|
+
schema,
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
return dataPackage;
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3BhY2thZ2UvbG9hZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sdUJBQXVCLENBQUE7QUFHckQsTUFBTSxDQUFDLEtBQUssVUFBVSx1QkFBdUIsQ0FDM0MsZ0JBQXdCLEVBQ3hCLE9BSUM7SUFFRCxNQUFNLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxHQUFHLE9BQU8sQ0FBQTtJQUVoRCxNQUFNLE9BQU8sR0FBRyxhQUFhLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBQzdDLE1BQU0sUUFBUSxHQUFHLE1BQU0sT0FBTyxDQUFDLGVBQWUsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFBO0lBQ2hFLE1BQU0sZUFBZSxHQUFHLE1BQU0sUUFBUSxDQUFDLGFBQWEsQ0FBQyxTQUFTLEVBQUUsQ0FBQTtJQUVoRSxNQUFNLFdBQVcsR0FBWTtRQUMzQixTQUFTLEVBQUUsRUFBRTtLQUNkLENBQUE7SUFFRCxLQUFLLE1BQU0sY0FBYyxJQUFJLGVBQWUsRUFBRSxDQUFDO1FBQzdDLE1BQU0sSUFBSSxHQUFHLGNBQWMsQ0FBQyxJQUFJLENBQUE7UUFFaEMsSUFBSSxhQUFhLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDbkQsU0FBUTtRQUNWLENBQUM7UUFFRCxJQUFJLGFBQWEsRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUNsQyxTQUFRO1FBQ1YsQ0FBQztRQUVELE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxlQUFlLENBQUMsY0FBYyxDQUFDLENBQUE7UUFDdEQsTUFBTSxPQUFPLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUE7UUFFL0IsV0FBVyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUM7WUFDekIsSUFBSTtZQUNKLElBQUksRUFBRSxnQkFBZ0I7WUFDdEIsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNO1lBQ3RCLE9BQU87WUFDUCxNQUFNO1NBQ1AsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUVELE9BQU8sV0FBVyxDQUFBO0FBQ3BCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFBhY2thZ2UgfSBmcm9tIFwiQGZyaWN0aW9ubGVzcy10cy9tZXRhZGF0YVwiXG5pbXBvcnQgeyBjcmVhdGVBZGFwdGVyIH0gZnJvbSBcIi4uL2FkYXB0ZXJzL2NyZWF0ZS50c1wiXG5pbXBvcnQgdHlwZSB7IERhdGFiYXNlRm9ybWF0IH0gZnJvbSBcIi4uL3Jlc291cmNlL2luZGV4LnRzXCJcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxvYWRQYWNrYWdlRnJvbURhdGFiYXNlKFxuICBjb25uZWN0aW9uU3RyaW5nOiBzdHJpbmcsXG4gIG9wdGlvbnM6IHtcbiAgICBmb3JtYXQ6IERhdGFiYXNlRm9ybWF0XG4gICAgaW5jbHVkZVRhYmxlcz86IHN0cmluZ1tdXG4gICAgZXhjbHVkZVRhYmxlcz86IHN0cmluZ1tdXG4gIH0sXG4pIHtcbiAgY29uc3QgeyBpbmNsdWRlVGFibGVzLCBleGNsdWRlVGFibGVzIH0gPSBvcHRpb25zXG5cbiAgY29uc3QgYWRhcHRlciA9IGNyZWF0ZUFkYXB0ZXIob3B0aW9ucy5mb3JtYXQpXG4gIGNvbnN0IGRhdGFiYXNlID0gYXdhaXQgYWRhcHRlci5jb25uZWN0RGF0YWJhc2UoY29ubmVjdGlvblN0cmluZylcbiAgY29uc3QgZGF0YWJhc2VTY2hlbWFzID0gYXdhaXQgZGF0YWJhc2UuaW50cm9zcGVjdGlvbi5nZXRUYWJsZXMoKVxuXG4gIGNvbnN0IGRhdGFQYWNrYWdlOiBQYWNrYWdlID0ge1xuICAgIHJlc291cmNlczogW10sXG4gIH1cblxuICBmb3IgKGNvbnN0IGRhdGFiYXNlU2NoZW1hIG9mIGRhdGFiYXNlU2NoZW1hcykge1xuICAgIGNvbnN0IG5hbWUgPSBkYXRhYmFzZVNjaGVtYS5uYW1lXG5cbiAgICBpZiAoaW5jbHVkZVRhYmxlcyAmJiAhaW5jbHVkZVRhYmxlcy5pbmNsdWRlcyhuYW1lKSkge1xuICAgICAgY29udGludWVcbiAgICB9XG5cbiAgICBpZiAoZXhjbHVkZVRhYmxlcz8uaW5jbHVkZXMobmFtZSkpIHtcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuXG4gICAgY29uc3Qgc2NoZW1hID0gYWRhcHRlci5ub3JtYWxpemVTY2hlbWEoZGF0YWJhc2VTY2hlbWEpXG4gICAgY29uc3QgZGlhbGVjdCA9IHsgdGFibGU6IG5hbWUgfVxuXG4gICAgZGF0YVBhY2thZ2UucmVzb3VyY2VzLnB1c2goe1xuICAgICAgbmFtZSxcbiAgICAgIHBhdGg6IGNvbm5lY3Rpb25TdHJpbmcsXG4gICAgICBmb3JtYXQ6IG9wdGlvbnMuZm9ybWF0LFxuICAgICAgZGlhbGVjdCxcbiAgICAgIHNjaGVtYSxcbiAgICB9KVxuICB9XG5cbiAgcmV0dXJuIGRhdGFQYWNrYWdlXG59XG4iXX0=
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { SavePackageOptions } from "@frictionless-ts/dataset";
|
|
2
|
+
import type { Package } from "@frictionless-ts/metadata";
|
|
3
|
+
import type { TablePlugin } from "@frictionless-ts/table";
|
|
4
|
+
import type { DatabaseFormat } from "../resource/index.ts";
|
|
5
|
+
export declare function savePackageToDatabase(dataPackage: Package, options: SavePackageOptions & {
|
|
6
|
+
format: DatabaseFormat;
|
|
7
|
+
plugins?: TablePlugin[];
|
|
8
|
+
}): Promise<{
|
|
9
|
+
path: string;
|
|
10
|
+
}>;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { resolveSchema } from "@frictionless-ts/metadata";
|
|
2
|
+
import { isRemoteResource } from "@frictionless-ts/metadata";
|
|
3
|
+
import { saveDatabaseTable } from "../table/index.js";
|
|
4
|
+
export async function savePackageToDatabase(dataPackage, options) {
|
|
5
|
+
for (const resource of dataPackage.resources) {
|
|
6
|
+
for (const plugin of options.plugins ?? []) {
|
|
7
|
+
const isRemote = isRemoteResource(resource);
|
|
8
|
+
if (isRemote && !options.withRemote) {
|
|
9
|
+
continue;
|
|
10
|
+
}
|
|
11
|
+
const table = await plugin.loadTable?.(resource);
|
|
12
|
+
if (table) {
|
|
13
|
+
const dialect = { table: resource.name };
|
|
14
|
+
const schema = await resolveSchema(resource.schema);
|
|
15
|
+
// TODO: support parallel saving?
|
|
16
|
+
await saveDatabaseTable(table, {
|
|
17
|
+
path: options.target,
|
|
18
|
+
format: options.format,
|
|
19
|
+
dialect,
|
|
20
|
+
schema,
|
|
21
|
+
});
|
|
22
|
+
break;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
return { path: options.target };
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2F2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3BhY2thZ2Uvc2F2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMkJBQTJCLENBQUE7QUFDekQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUE7QUFHNUQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sbUJBQW1CLENBQUE7QUFFckQsTUFBTSxDQUFDLEtBQUssVUFBVSxxQkFBcUIsQ0FDekMsV0FBb0IsRUFDcEIsT0FHQztJQUVELEtBQUssTUFBTSxRQUFRLElBQUksV0FBVyxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQzdDLEtBQUssTUFBTSxNQUFNLElBQUksT0FBTyxDQUFDLE9BQU8sSUFBSSxFQUFFLEVBQUUsQ0FBQztZQUMzQyxNQUFNLFFBQVEsR0FBRyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsQ0FBQTtZQUMzQyxJQUFJLFFBQVEsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsQ0FBQztnQkFDcEMsU0FBUTtZQUNWLENBQUM7WUFFRCxNQUFNLEtBQUssR0FBRyxNQUFNLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQTtZQUVoRCxJQUFJLEtBQUssRUFBRSxDQUFDO2dCQUNWLE1BQU0sT0FBTyxHQUFHLEVBQUUsS0FBSyxFQUFFLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQTtnQkFDeEMsTUFBTSxNQUFNLEdBQUcsTUFBTSxhQUFhLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFBO2dCQUVuRCxpQ0FBaUM7Z0JBQ2pDLE1BQU0saUJBQWlCLENBQUMsS0FBSyxFQUFFO29CQUM3QixJQUFJLEVBQUUsT0FBTyxDQUFDLE1BQU07b0JBQ3BCLE1BQU0sRUFBRSxPQUFPLENBQUMsTUFBTTtvQkFDdEIsT0FBTztvQkFDUCxNQUFNO2lCQUNQLENBQUMsQ0FBQTtnQkFFRixNQUFLO1lBQ1AsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUE7QUFDakMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgU2F2ZVBhY2thZ2VPcHRpb25zIH0gZnJvbSBcIkBmcmljdGlvbmxlc3MtdHMvZGF0YXNldFwiXG5pbXBvcnQgdHlwZSB7IFBhY2thZ2UgfSBmcm9tIFwiQGZyaWN0aW9ubGVzcy10cy9tZXRhZGF0YVwiXG5pbXBvcnQgeyByZXNvbHZlU2NoZW1hIH0gZnJvbSBcIkBmcmljdGlvbmxlc3MtdHMvbWV0YWRhdGFcIlxuaW1wb3J0IHsgaXNSZW1vdGVSZXNvdXJjZSB9IGZyb20gXCJAZnJpY3Rpb25sZXNzLXRzL21ldGFkYXRhXCJcbmltcG9ydCB0eXBlIHsgVGFibGVQbHVnaW4gfSBmcm9tIFwiQGZyaWN0aW9ubGVzcy10cy90YWJsZVwiXG5pbXBvcnQgdHlwZSB7IERhdGFiYXNlRm9ybWF0IH0gZnJvbSBcIi4uL3Jlc291cmNlL2luZGV4LnRzXCJcbmltcG9ydCB7IHNhdmVEYXRhYmFzZVRhYmxlIH0gZnJvbSBcIi4uL3RhYmxlL2luZGV4LnRzXCJcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNhdmVQYWNrYWdlVG9EYXRhYmFzZShcbiAgZGF0YVBhY2thZ2U6IFBhY2thZ2UsXG4gIG9wdGlvbnM6IFNhdmVQYWNrYWdlT3B0aW9ucyAmIHtcbiAgICBmb3JtYXQ6IERhdGFiYXNlRm9ybWF0XG4gICAgcGx1Z2lucz86IFRhYmxlUGx1Z2luW11cbiAgfSxcbikge1xuICBmb3IgKGNvbnN0IHJlc291cmNlIG9mIGRhdGFQYWNrYWdlLnJlc291cmNlcykge1xuICAgIGZvciAoY29uc3QgcGx1Z2luIG9mIG9wdGlvbnMucGx1Z2lucyA/PyBbXSkge1xuICAgICAgY29uc3QgaXNSZW1vdGUgPSBpc1JlbW90ZVJlc291cmNlKHJlc291cmNlKVxuICAgICAgaWYgKGlzUmVtb3RlICYmICFvcHRpb25zLndpdGhSZW1vdGUpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgY29uc3QgdGFibGUgPSBhd2FpdCBwbHVnaW4ubG9hZFRhYmxlPy4ocmVzb3VyY2UpXG5cbiAgICAgIGlmICh0YWJsZSkge1xuICAgICAgICBjb25zdCBkaWFsZWN0ID0geyB0YWJsZTogcmVzb3VyY2UubmFtZSB9XG4gICAgICAgIGNvbnN0IHNjaGVtYSA9IGF3YWl0IHJlc29sdmVTY2hlbWEocmVzb3VyY2Uuc2NoZW1hKVxuXG4gICAgICAgIC8vIFRPRE86IHN1cHBvcnQgcGFyYWxsZWwgc2F2aW5nP1xuICAgICAgICBhd2FpdCBzYXZlRGF0YWJhc2VUYWJsZSh0YWJsZSwge1xuICAgICAgICAgIHBhdGg6IG9wdGlvbnMudGFyZ2V0LFxuICAgICAgICAgIGZvcm1hdDogb3B0aW9ucy5mb3JtYXQsXG4gICAgICAgICAgZGlhbGVjdCxcbiAgICAgICAgICBzY2hlbWEsXG4gICAgICAgIH0pXG5cbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4geyBwYXRoOiBvcHRpb25zLnRhcmdldCB9XG59XG4iXX0=
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { SavePackageOptions } from "@frictionless-ts/dataset";
|
|
2
|
+
import type { Package, Resource } from "@frictionless-ts/metadata";
|
|
3
|
+
import type { TablePlugin } from "@frictionless-ts/table";
|
|
4
|
+
import type { SaveTableOptions, Table } from "@frictionless-ts/table";
|
|
5
|
+
export declare class DatabasePlugin implements TablePlugin {
|
|
6
|
+
savePackage(dataPackage: Package, options: SavePackageOptions & {
|
|
7
|
+
plugins?: TablePlugin[];
|
|
8
|
+
}): Promise<{
|
|
9
|
+
path: string;
|
|
10
|
+
} | undefined>;
|
|
11
|
+
loadPackage(source: string): Promise<Package | undefined>;
|
|
12
|
+
inferSchema(resource: Partial<Resource>): Promise<import("@frictionless-ts/metadata").Schema | undefined>;
|
|
13
|
+
loadTable(resource: Partial<Resource>): Promise<import("nodejs-polars").LazyDataFrame<any> | undefined>;
|
|
14
|
+
saveTable(table: Table, options: SaveTableOptions): Promise<string | undefined>;
|
|
15
|
+
}
|
package/build/plugin.js
ADDED
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { inferFormat } from "@frictionless-ts/metadata";
|
|
2
|
+
import { loadPackageFromDatabase } from "./package/index.js";
|
|
3
|
+
import { savePackageToDatabase } from "./package/index.js";
|
|
4
|
+
import { inferDatabaseSchema } from "./schema/index.js";
|
|
5
|
+
import { loadDatabaseTable } from "./table/index.js";
|
|
6
|
+
import { saveDatabaseTable } from "./table/index.js";
|
|
7
|
+
export class DatabasePlugin {
|
|
8
|
+
async savePackage(dataPackage, options) {
|
|
9
|
+
const databaseFormat = getDatabaseFormat({ path: options.target });
|
|
10
|
+
if (!databaseFormat)
|
|
11
|
+
return undefined;
|
|
12
|
+
return await savePackageToDatabase(dataPackage, {
|
|
13
|
+
format: databaseFormat,
|
|
14
|
+
...options,
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
async loadPackage(source) {
|
|
18
|
+
const databaseFormat = getDatabaseFormat({ path: source });
|
|
19
|
+
if (!databaseFormat)
|
|
20
|
+
return undefined;
|
|
21
|
+
return await loadPackageFromDatabase(source, {
|
|
22
|
+
format: databaseFormat,
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
async inferSchema(resource) {
|
|
26
|
+
const databaseFormat = getDatabaseFormat(resource);
|
|
27
|
+
if (!databaseFormat)
|
|
28
|
+
return undefined;
|
|
29
|
+
return await inferDatabaseSchema({ ...resource, format: databaseFormat });
|
|
30
|
+
}
|
|
31
|
+
async loadTable(resource) {
|
|
32
|
+
const databaseFormat = getDatabaseFormat(resource);
|
|
33
|
+
if (!databaseFormat)
|
|
34
|
+
return undefined;
|
|
35
|
+
return await loadDatabaseTable({ ...resource, format: databaseFormat });
|
|
36
|
+
}
|
|
37
|
+
async saveTable(table, options) {
|
|
38
|
+
const { path, format } = options;
|
|
39
|
+
const databaseFormat = getDatabaseFormat({ path, format });
|
|
40
|
+
if (!databaseFormat)
|
|
41
|
+
return undefined;
|
|
42
|
+
return await saveDatabaseTable(table, {
|
|
43
|
+
...options,
|
|
44
|
+
format: databaseFormat,
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
function getDatabaseFormat(resource) {
|
|
49
|
+
const format = inferFormat(resource);
|
|
50
|
+
return format === "postgresql" || format === "mysql" || format === "sqlite"
|
|
51
|
+
? format
|
|
52
|
+
: undefined;
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vcGx1Z2luLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQTtBQUd2RCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQTtBQUM1RCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQTtBQUMxRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQTtBQUN2RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQTtBQUNwRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQTtBQUVwRCxNQUFNLE9BQU8sY0FBYztJQUN6QixLQUFLLENBQUMsV0FBVyxDQUNmLFdBQW9CLEVBQ3BCLE9BQXlEO1FBRXpELE1BQU0sY0FBYyxHQUFHLGlCQUFpQixDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFBO1FBQ2xFLElBQUksQ0FBQyxjQUFjO1lBQUUsT0FBTyxTQUFTLENBQUE7UUFFckMsT0FBTyxNQUFNLHFCQUFxQixDQUFDLFdBQVcsRUFBRTtZQUM5QyxNQUFNLEVBQUUsY0FBYztZQUN0QixHQUFHLE9BQU87U0FDWCxDQUFDLENBQUE7SUFDSixDQUFDO0lBRUQsS0FBSyxDQUFDLFdBQVcsQ0FBQyxNQUFjO1FBQzlCLE1BQU0sY0FBYyxHQUFHLGlCQUFpQixDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUE7UUFDMUQsSUFBSSxDQUFDLGNBQWM7WUFBRSxPQUFPLFNBQVMsQ0FBQTtRQUVyQyxPQUFPLE1BQU0sdUJBQXVCLENBQUMsTUFBTSxFQUFFO1lBQzNDLE1BQU0sRUFBRSxjQUFjO1NBQ3ZCLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFRCxLQUFLLENBQUMsV0FBVyxDQUFDLFFBQTJCO1FBQzNDLE1BQU0sY0FBYyxHQUFHLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxDQUFBO1FBQ2xELElBQUksQ0FBQyxjQUFjO1lBQUUsT0FBTyxTQUFTLENBQUE7UUFFckMsT0FBTyxNQUFNLG1CQUFtQixDQUFDLEVBQUUsR0FBRyxRQUFRLEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBRSxDQUFDLENBQUE7SUFDM0UsQ0FBQztJQUVELEtBQUssQ0FBQyxTQUFTLENBQUMsUUFBMkI7UUFDekMsTUFBTSxjQUFjLEdBQUcsaUJBQWlCLENBQUMsUUFBUSxDQUFDLENBQUE7UUFDbEQsSUFBSSxDQUFDLGNBQWM7WUFBRSxPQUFPLFNBQVMsQ0FBQTtRQUVyQyxPQUFPLE1BQU0saUJBQWlCLENBQUMsRUFBRSxHQUFHLFFBQVEsRUFBRSxNQUFNLEVBQUUsY0FBYyxFQUFFLENBQUMsQ0FBQTtJQUN6RSxDQUFDO0lBRUQsS0FBSyxDQUFDLFNBQVMsQ0FBQyxLQUFZLEVBQUUsT0FBeUI7UUFDckQsTUFBTSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsR0FBRyxPQUFPLENBQUE7UUFFaEMsTUFBTSxjQUFjLEdBQUcsaUJBQWlCLENBQUMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQTtRQUMxRCxJQUFJLENBQUMsY0FBYztZQUFFLE9BQU8sU0FBUyxDQUFBO1FBRXJDLE9BQU8sTUFBTSxpQkFBaUIsQ0FBQyxLQUFLLEVBQUU7WUFDcEMsR0FBRyxPQUFPO1lBQ1YsTUFBTSxFQUFFLGNBQWM7U0FDdkIsQ0FBQyxDQUFBO0lBQ0osQ0FBQztDQUNGO0FBRUQsU0FBUyxpQkFBaUIsQ0FBQyxRQUEyQjtJQUNwRCxNQUFNLE1BQU0sR0FBRyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUE7SUFDcEMsT0FBTyxNQUFNLEtBQUssWUFBWSxJQUFJLE1BQU0sS0FBSyxPQUFPLElBQUksTUFBTSxLQUFLLFFBQVE7UUFDekUsQ0FBQyxDQUFDLE1BQU07UUFDUixDQUFDLENBQUMsU0FBUyxDQUFBO0FBQ2YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgU2F2ZVBhY2thZ2VPcHRpb25zIH0gZnJvbSBcIkBmcmljdGlvbmxlc3MtdHMvZGF0YXNldFwiXG5pbXBvcnQgdHlwZSB7IFBhY2thZ2UsIFJlc291cmNlIH0gZnJvbSBcIkBmcmljdGlvbmxlc3MtdHMvbWV0YWRhdGFcIlxuaW1wb3J0IHsgaW5mZXJGb3JtYXQgfSBmcm9tIFwiQGZyaWN0aW9ubGVzcy10cy9tZXRhZGF0YVwiXG5pbXBvcnQgdHlwZSB7IFRhYmxlUGx1Z2luIH0gZnJvbSBcIkBmcmljdGlvbmxlc3MtdHMvdGFibGVcIlxuaW1wb3J0IHR5cGUgeyBTYXZlVGFibGVPcHRpb25zLCBUYWJsZSB9IGZyb20gXCJAZnJpY3Rpb25sZXNzLXRzL3RhYmxlXCJcbmltcG9ydCB7IGxvYWRQYWNrYWdlRnJvbURhdGFiYXNlIH0gZnJvbSBcIi4vcGFja2FnZS9pbmRleC50c1wiXG5pbXBvcnQgeyBzYXZlUGFja2FnZVRvRGF0YWJhc2UgfSBmcm9tIFwiLi9wYWNrYWdlL2luZGV4LnRzXCJcbmltcG9ydCB7IGluZmVyRGF0YWJhc2VTY2hlbWEgfSBmcm9tIFwiLi9zY2hlbWEvaW5kZXgudHNcIlxuaW1wb3J0IHsgbG9hZERhdGFiYXNlVGFibGUgfSBmcm9tIFwiLi90YWJsZS9pbmRleC50c1wiXG5pbXBvcnQgeyBzYXZlRGF0YWJhc2VUYWJsZSB9IGZyb20gXCIuL3RhYmxlL2luZGV4LnRzXCJcblxuZXhwb3J0IGNsYXNzIERhdGFiYXNlUGx1Z2luIGltcGxlbWVudHMgVGFibGVQbHVnaW4ge1xuICBhc3luYyBzYXZlUGFja2FnZShcbiAgICBkYXRhUGFja2FnZTogUGFja2FnZSxcbiAgICBvcHRpb25zOiBTYXZlUGFja2FnZU9wdGlvbnMgJiB7IHBsdWdpbnM/OiBUYWJsZVBsdWdpbltdIH0sXG4gICkge1xuICAgIGNvbnN0IGRhdGFiYXNlRm9ybWF0ID0gZ2V0RGF0YWJhc2VGb3JtYXQoeyBwYXRoOiBvcHRpb25zLnRhcmdldCB9KVxuICAgIGlmICghZGF0YWJhc2VGb3JtYXQpIHJldHVybiB1bmRlZmluZWRcblxuICAgIHJldHVybiBhd2FpdCBzYXZlUGFja2FnZVRvRGF0YWJhc2UoZGF0YVBhY2thZ2UsIHtcbiAgICAgIGZvcm1hdDogZGF0YWJhc2VGb3JtYXQsXG4gICAgICAuLi5vcHRpb25zLFxuICAgIH0pXG4gIH1cblxuICBhc3luYyBsb2FkUGFja2FnZShzb3VyY2U6IHN0cmluZykge1xuICAgIGNvbnN0IGRhdGFiYXNlRm9ybWF0ID0gZ2V0RGF0YWJhc2VGb3JtYXQoeyBwYXRoOiBzb3VyY2UgfSlcbiAgICBpZiAoIWRhdGFiYXNlRm9ybWF0KSByZXR1cm4gdW5kZWZpbmVkXG5cbiAgICByZXR1cm4gYXdhaXQgbG9hZFBhY2thZ2VGcm9tRGF0YWJhc2Uoc291cmNlLCB7XG4gICAgICBmb3JtYXQ6IGRhdGFiYXNlRm9ybWF0LFxuICAgIH0pXG4gIH1cblxuICBhc3luYyBpbmZlclNjaGVtYShyZXNvdXJjZTogUGFydGlhbDxSZXNvdXJjZT4pIHtcbiAgICBjb25zdCBkYXRhYmFzZUZvcm1hdCA9IGdldERhdGFiYXNlRm9ybWF0KHJlc291cmNlKVxuICAgIGlmICghZGF0YWJhc2VGb3JtYXQpIHJldHVybiB1bmRlZmluZWRcblxuICAgIHJldHVybiBhd2FpdCBpbmZlckRhdGFiYXNlU2NoZW1hKHsgLi4ucmVzb3VyY2UsIGZvcm1hdDogZGF0YWJhc2VGb3JtYXQgfSlcbiAgfVxuXG4gIGFzeW5jIGxvYWRUYWJsZShyZXNvdXJjZTogUGFydGlhbDxSZXNvdXJjZT4pIHtcbiAgICBjb25zdCBkYXRhYmFzZUZvcm1hdCA9IGdldERhdGFiYXNlRm9ybWF0KHJlc291cmNlKVxuICAgIGlmICghZGF0YWJhc2VGb3JtYXQpIHJldHVybiB1bmRlZmluZWRcblxuICAgIHJldHVybiBhd2FpdCBsb2FkRGF0YWJhc2VUYWJsZSh7IC4uLnJlc291cmNlLCBmb3JtYXQ6IGRhdGFiYXNlRm9ybWF0IH0pXG4gIH1cblxuICBhc3luYyBzYXZlVGFibGUodGFibGU6IFRhYmxlLCBvcHRpb25zOiBTYXZlVGFibGVPcHRpb25zKSB7XG4gICAgY29uc3QgeyBwYXRoLCBmb3JtYXQgfSA9IG9wdGlvbnNcblxuICAgIGNvbnN0IGRhdGFiYXNlRm9ybWF0ID0gZ2V0RGF0YWJhc2VGb3JtYXQoeyBwYXRoLCBmb3JtYXQgfSlcbiAgICBpZiAoIWRhdGFiYXNlRm9ybWF0KSByZXR1cm4gdW5kZWZpbmVkXG5cbiAgICByZXR1cm4gYXdhaXQgc2F2ZURhdGFiYXNlVGFibGUodGFibGUsIHtcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICBmb3JtYXQ6IGRhdGFiYXNlRm9ybWF0LFxuICAgIH0pXG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0RGF0YWJhc2VGb3JtYXQocmVzb3VyY2U6IFBhcnRpYWw8UmVzb3VyY2U+KSB7XG4gIGNvbnN0IGZvcm1hdCA9IGluZmVyRm9ybWF0KHJlc291cmNlKVxuICByZXR1cm4gZm9ybWF0ID09PSBcInBvc3RncmVzcWxcIiB8fCBmb3JtYXQgPT09IFwibXlzcWxcIiB8fCBmb3JtYXQgPT09IFwic3FsaXRlXCJcbiAgICA/IGZvcm1hdFxuICAgIDogdW5kZWZpbmVkXG59XG4iXX0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|