@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,57 @@
|
|
|
1
|
+
import { denormalizeTable, inferSchemaFromTable } from "@frictionless-ts/table";
|
|
2
|
+
import { createAdapter } from "../adapters/create.js";
|
|
3
|
+
// Currently, we use slow non-rust implementation as in the future
|
|
4
|
+
// polars-rust might be able to provide a faster native implementation
|
|
5
|
+
// (if not supported we can use COPY in PostgreSQL/MySQL)
|
|
6
|
+
export async function saveDatabaseTable(table, options) {
|
|
7
|
+
const { path, format, dialect, overwrite } = options;
|
|
8
|
+
const tableName = dialect?.table;
|
|
9
|
+
if (!tableName) {
|
|
10
|
+
throw new Error("Table name is not defined in dialect");
|
|
11
|
+
}
|
|
12
|
+
const schema = options.schema ??
|
|
13
|
+
(await inferSchemaFromTable(table, {
|
|
14
|
+
...options,
|
|
15
|
+
keepStrings: true,
|
|
16
|
+
}));
|
|
17
|
+
const adapter = createAdapter(format);
|
|
18
|
+
table = await denormalizeTable(table, schema, {
|
|
19
|
+
nativeTypes: adapter.nativeTypes,
|
|
20
|
+
});
|
|
21
|
+
const database = await adapter.connectDatabase(path, { create: true });
|
|
22
|
+
const databaseSchema = adapter.denormalizeSchema(schema, tableName);
|
|
23
|
+
await defineTable(database, databaseSchema, { overwrite });
|
|
24
|
+
await populateTable(database, tableName, table);
|
|
25
|
+
return path;
|
|
26
|
+
}
|
|
27
|
+
async function defineTable(database, databaseSchema, options) {
|
|
28
|
+
if (options.overwrite) {
|
|
29
|
+
await database.schema.dropTable(databaseSchema.name).ifExists().execute();
|
|
30
|
+
}
|
|
31
|
+
let query = database.schema.createTable(databaseSchema.name);
|
|
32
|
+
for (const field of databaseSchema.columns) {
|
|
33
|
+
// @ts-ignore
|
|
34
|
+
query = query.addColumn(field.name, field.dataType);
|
|
35
|
+
}
|
|
36
|
+
if (databaseSchema.primaryKey) {
|
|
37
|
+
query = query.addPrimaryKeyConstraint(`${databaseSchema.name}_pkey`,
|
|
38
|
+
// @ts-ignore
|
|
39
|
+
databaseSchema.primaryKey);
|
|
40
|
+
}
|
|
41
|
+
await query.execute();
|
|
42
|
+
}
|
|
43
|
+
async function populateTable(database, tableName, table) {
|
|
44
|
+
let offset = 0;
|
|
45
|
+
const frame = await table.collect({ streaming: true });
|
|
46
|
+
while (true) {
|
|
47
|
+
const buffer = frame.slice(offset, offset + BUFFER_SIZE);
|
|
48
|
+
offset += BUFFER_SIZE;
|
|
49
|
+
const records = buffer.toRecords();
|
|
50
|
+
if (!records.length) {
|
|
51
|
+
break;
|
|
52
|
+
}
|
|
53
|
+
await database.insertInto(tableName).values(records).execute();
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
const BUFFER_SIZE = 10_000;
|
|
57
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2F2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RhYmxlL3NhdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLGdCQUFnQixFQUFFLG9CQUFvQixFQUFFLE1BQU0sd0JBQXdCLENBQUE7QUFFL0UsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHVCQUF1QixDQUFBO0FBR3JELGtFQUFrRTtBQUNsRSxzRUFBc0U7QUFDdEUseURBQXlEO0FBRXpELE1BQU0sQ0FBQyxLQUFLLFVBQVUsaUJBQWlCLENBQ3JDLEtBQVksRUFDWixPQUF5RTtJQUV6RSxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLEdBQUcsT0FBTyxDQUFBO0lBRXBELE1BQU0sU0FBUyxHQUFHLE9BQU8sRUFBRSxLQUFLLENBQUE7SUFDaEMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ2YsTUFBTSxJQUFJLEtBQUssQ0FBQyxzQ0FBc0MsQ0FBQyxDQUFBO0lBQ3pELENBQUM7SUFFRCxNQUFNLE1BQU0sR0FDVixPQUFPLENBQUMsTUFBTTtRQUNkLENBQUMsTUFBTSxvQkFBb0IsQ0FBQyxLQUFLLEVBQUU7WUFDakMsR0FBRyxPQUFPO1lBQ1YsV0FBVyxFQUFFLElBQUk7U0FDbEIsQ0FBQyxDQUFDLENBQUE7SUFFTCxNQUFNLE9BQU8sR0FBRyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUE7SUFDckMsS0FBSyxHQUFHLE1BQU0sZ0JBQWdCLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRTtRQUM1QyxXQUFXLEVBQUUsT0FBTyxDQUFDLFdBQVc7S0FDakMsQ0FBQyxDQUFBO0lBRUYsTUFBTSxRQUFRLEdBQUcsTUFBTSxPQUFPLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFBO0lBQ3RFLE1BQU0sY0FBYyxHQUFHLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLENBQUE7SUFFbkUsTUFBTSxXQUFXLENBQUMsUUFBUSxFQUFFLGNBQWMsRUFBRSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUE7SUFDMUQsTUFBTSxhQUFhLENBQUMsUUFBUSxFQUFFLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQTtJQUUvQyxPQUFPLElBQUksQ0FBQTtBQUNiLENBQUM7QUFFRCxLQUFLLFVBQVUsV0FBVyxDQUN4QixRQUFxQixFQUNyQixjQUE4QixFQUM5QixPQUVDO0lBRUQsSUFBSSxPQUFPLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDdEIsTUFBTSxRQUFRLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUE7SUFDM0UsQ0FBQztJQUVELElBQUksS0FBSyxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQTtJQUU1RCxLQUFLLE1BQU0sS0FBSyxJQUFJLGNBQWMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUMzQyxhQUFhO1FBQ2IsS0FBSyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUE7SUFDckQsQ0FBQztJQUVELElBQUksY0FBYyxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQzlCLEtBQUssR0FBRyxLQUFLLENBQUMsdUJBQXVCLENBQ25DLEdBQUcsY0FBYyxDQUFDLElBQUksT0FBTztRQUM3QixhQUFhO1FBQ2IsY0FBYyxDQUFDLFVBQVUsQ0FDMUIsQ0FBQTtJQUNILENBQUM7SUFFRCxNQUFNLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQTtBQUN2QixDQUFDO0FBRUQsS0FBSyxVQUFVLGFBQWEsQ0FDMUIsUUFBcUIsRUFDckIsU0FBaUIsRUFDakIsS0FBWTtJQUVaLElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQTtJQUNkLE1BQU0sS0FBSyxHQUFHLE1BQU0sS0FBSyxDQUFDLE9BQU8sQ0FBQyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFBO0lBQ3RELE9BQU8sSUFBSSxFQUFFLENBQUM7UUFDWixNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxNQUFNLEdBQUcsV0FBVyxDQUFDLENBQUE7UUFDeEQsTUFBTSxJQUFJLFdBQVcsQ0FBQTtRQUVyQixNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUE7UUFDbEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNwQixNQUFLO1FBQ1AsQ0FBQztRQUVELE1BQU0sUUFBUSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUE7SUFDaEUsQ0FBQztBQUNILENBQUM7QUFFRCxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFNhdmVUYWJsZU9wdGlvbnMsIFRhYmxlIH0gZnJvbSBcIkBmcmljdGlvbmxlc3MtdHMvdGFibGVcIlxuaW1wb3J0IHsgZGVub3JtYWxpemVUYWJsZSwgaW5mZXJTY2hlbWFGcm9tVGFibGUgfSBmcm9tIFwiQGZyaWN0aW9ubGVzcy10cy90YWJsZVwiXG5pbXBvcnQgdHlwZSB7IEt5c2VseSB9IGZyb20gXCJreXNlbHlcIlxuaW1wb3J0IHsgY3JlYXRlQWRhcHRlciB9IGZyb20gXCIuLi9hZGFwdGVycy9jcmVhdGUudHNcIlxuaW1wb3J0IHR5cGUgeyBEYXRhYmFzZVNjaGVtYSB9IGZyb20gXCIuLi9zY2hlbWEvaW5kZXgudHNcIlxuXG4vLyBDdXJyZW50bHksIHdlIHVzZSBzbG93IG5vbi1ydXN0IGltcGxlbWVudGF0aW9uIGFzIGluIHRoZSBmdXR1cmVcbi8vIHBvbGFycy1ydXN0IG1pZ2h0IGJlIGFibGUgdG8gcHJvdmlkZSBhIGZhc3RlciBuYXRpdmUgaW1wbGVtZW50YXRpb25cbi8vIChpZiBub3Qgc3VwcG9ydGVkIHdlIGNhbiB1c2UgQ09QWSBpbiBQb3N0Z3JlU1FML015U1FMKVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2F2ZURhdGFiYXNlVGFibGUoXG4gIHRhYmxlOiBUYWJsZSxcbiAgb3B0aW9uczogU2F2ZVRhYmxlT3B0aW9ucyAmIHsgZm9ybWF0OiBcInBvc3RncmVzcWxcIiB8IFwibXlzcWxcIiB8IFwic3FsaXRlXCIgfSxcbikge1xuICBjb25zdCB7IHBhdGgsIGZvcm1hdCwgZGlhbGVjdCwgb3ZlcndyaXRlIH0gPSBvcHRpb25zXG5cbiAgY29uc3QgdGFibGVOYW1lID0gZGlhbGVjdD8udGFibGVcbiAgaWYgKCF0YWJsZU5hbWUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJUYWJsZSBuYW1lIGlzIG5vdCBkZWZpbmVkIGluIGRpYWxlY3RcIilcbiAgfVxuXG4gIGNvbnN0IHNjaGVtYSA9XG4gICAgb3B0aW9ucy5zY2hlbWEgPz9cbiAgICAoYXdhaXQgaW5mZXJTY2hlbWFGcm9tVGFibGUodGFibGUsIHtcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICBrZWVwU3RyaW5nczogdHJ1ZSxcbiAgICB9KSlcblxuICBjb25zdCBhZGFwdGVyID0gY3JlYXRlQWRhcHRlcihmb3JtYXQpXG4gIHRhYmxlID0gYXdhaXQgZGVub3JtYWxpemVUYWJsZSh0YWJsZSwgc2NoZW1hLCB7XG4gICAgbmF0aXZlVHlwZXM6IGFkYXB0ZXIubmF0aXZlVHlwZXMsXG4gIH0pXG5cbiAgY29uc3QgZGF0YWJhc2UgPSBhd2FpdCBhZGFwdGVyLmNvbm5lY3REYXRhYmFzZShwYXRoLCB7IGNyZWF0ZTogdHJ1ZSB9KVxuICBjb25zdCBkYXRhYmFzZVNjaGVtYSA9IGFkYXB0ZXIuZGVub3JtYWxpemVTY2hlbWEoc2NoZW1hLCB0YWJsZU5hbWUpXG5cbiAgYXdhaXQgZGVmaW5lVGFibGUoZGF0YWJhc2UsIGRhdGFiYXNlU2NoZW1hLCB7IG92ZXJ3cml0ZSB9KVxuICBhd2FpdCBwb3B1bGF0ZVRhYmxlKGRhdGFiYXNlLCB0YWJsZU5hbWUsIHRhYmxlKVxuXG4gIHJldHVybiBwYXRoXG59XG5cbmFzeW5jIGZ1bmN0aW9uIGRlZmluZVRhYmxlKFxuICBkYXRhYmFzZTogS3lzZWx5PGFueT4sXG4gIGRhdGFiYXNlU2NoZW1hOiBEYXRhYmFzZVNjaGVtYSxcbiAgb3B0aW9uczoge1xuICAgIG92ZXJ3cml0ZT86IGJvb2xlYW5cbiAgfSxcbikge1xuICBpZiAob3B0aW9ucy5vdmVyd3JpdGUpIHtcbiAgICBhd2FpdCBkYXRhYmFzZS5zY2hlbWEuZHJvcFRhYmxlKGRhdGFiYXNlU2NoZW1hLm5hbWUpLmlmRXhpc3RzKCkuZXhlY3V0ZSgpXG4gIH1cblxuICBsZXQgcXVlcnkgPSBkYXRhYmFzZS5zY2hlbWEuY3JlYXRlVGFibGUoZGF0YWJhc2VTY2hlbWEubmFtZSlcblxuICBmb3IgKGNvbnN0IGZpZWxkIG9mIGRhdGFiYXNlU2NoZW1hLmNvbHVtbnMpIHtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgcXVlcnkgPSBxdWVyeS5hZGRDb2x1bW4oZmllbGQubmFtZSwgZmllbGQuZGF0YVR5cGUpXG4gIH1cblxuICBpZiAoZGF0YWJhc2VTY2hlbWEucHJpbWFyeUtleSkge1xuICAgIHF1ZXJ5ID0gcXVlcnkuYWRkUHJpbWFyeUtleUNvbnN0cmFpbnQoXG4gICAgICBgJHtkYXRhYmFzZVNjaGVtYS5uYW1lfV9wa2V5YCxcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIGRhdGFiYXNlU2NoZW1hLnByaW1hcnlLZXksXG4gICAgKVxuICB9XG5cbiAgYXdhaXQgcXVlcnkuZXhlY3V0ZSgpXG59XG5cbmFzeW5jIGZ1bmN0aW9uIHBvcHVsYXRlVGFibGUoXG4gIGRhdGFiYXNlOiBLeXNlbHk8YW55PixcbiAgdGFibGVOYW1lOiBzdHJpbmcsXG4gIHRhYmxlOiBUYWJsZSxcbikge1xuICBsZXQgb2Zmc2V0ID0gMFxuICBjb25zdCBmcmFtZSA9IGF3YWl0IHRhYmxlLmNvbGxlY3QoeyBzdHJlYW1pbmc6IHRydWUgfSlcbiAgd2hpbGUgKHRydWUpIHtcbiAgICBjb25zdCBidWZmZXIgPSBmcmFtZS5zbGljZShvZmZzZXQsIG9mZnNldCArIEJVRkZFUl9TSVpFKVxuICAgIG9mZnNldCArPSBCVUZGRVJfU0laRVxuXG4gICAgY29uc3QgcmVjb3JkcyA9IGJ1ZmZlci50b1JlY29yZHMoKVxuICAgIGlmICghcmVjb3Jkcy5sZW5ndGgpIHtcbiAgICAgIGJyZWFrXG4gICAgfVxuXG4gICAgYXdhaXQgZGF0YWJhc2UuaW5zZXJ0SW50byh0YWJsZU5hbWUpLnZhbHVlcyhyZWNvcmRzKS5leGVjdXRlKClcbiAgfVxufVxuXG5jb25zdCBCVUZGRVJfU0laRSA9IDEwXzAwMFxuIl19
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import * as pl from "nodejs-polars";
|
|
2
|
+
import { describe, expect, it } from "vitest";
|
|
3
|
+
import { saveDatabaseTable } from "./save.js";
|
|
4
|
+
describe("saveDatabaseTable", () => {
|
|
5
|
+
const mockTable = pl.DataFrame({ col1: [1, 2, 3] }).lazy();
|
|
6
|
+
it("throws error when table name is not defined in dialect", async () => {
|
|
7
|
+
await expect(saveDatabaseTable(mockTable, {
|
|
8
|
+
path: "test.db",
|
|
9
|
+
format: "sqlite",
|
|
10
|
+
})).rejects.toThrow("Table name is not defined in dialect");
|
|
11
|
+
});
|
|
12
|
+
it("throws error when format is not supported", async () => {
|
|
13
|
+
await expect(saveDatabaseTable(mockTable, {
|
|
14
|
+
path: "test.db",
|
|
15
|
+
format: "unsupported",
|
|
16
|
+
dialect: { table: "test_table" },
|
|
17
|
+
})).rejects.toThrow('Unsupported database format: "unsupported"');
|
|
18
|
+
});
|
|
19
|
+
});
|
|
20
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2F2ZS5zcGVjLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vdGFibGUvc2F2ZS5zcGVjLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBQ25DLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLFFBQVEsQ0FBQTtBQUM3QyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxXQUFXLENBQUE7QUFFN0MsUUFBUSxDQUFDLG1CQUFtQixFQUFFLEdBQUcsRUFBRTtJQUNqQyxNQUFNLFNBQVMsR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUE7SUFFMUQsRUFBRSxDQUFDLHdEQUF3RCxFQUFFLEtBQUssSUFBSSxFQUFFO1FBQ3RFLE1BQU0sTUFBTSxDQUNWLGlCQUFpQixDQUFDLFNBQVMsRUFBRTtZQUMzQixJQUFJLEVBQUUsU0FBUztZQUNmLE1BQU0sRUFBRSxRQUFRO1NBQ2pCLENBQUMsQ0FDSCxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsc0NBQXNDLENBQUMsQ0FBQTtJQUMzRCxDQUFDLENBQUMsQ0FBQTtJQUVGLEVBQUUsQ0FBQywyQ0FBMkMsRUFBRSxLQUFLLElBQUksRUFBRTtRQUN6RCxNQUFNLE1BQU0sQ0FDVixpQkFBaUIsQ0FBQyxTQUFTLEVBQUU7WUFDM0IsSUFBSSxFQUFFLFNBQVM7WUFDZixNQUFNLEVBQUUsYUFBb0I7WUFDNUIsT0FBTyxFQUFFLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRTtTQUNqQyxDQUFDLENBQ0gsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLDRDQUE0QyxDQUFDLENBQUE7SUFDakUsQ0FBQyxDQUFDLENBQUE7QUFDSixDQUFDLENBQUMsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHBsIGZyb20gXCJub2RlanMtcG9sYXJzXCJcbmltcG9ydCB7IGRlc2NyaWJlLCBleHBlY3QsIGl0IH0gZnJvbSBcInZpdGVzdFwiXG5pbXBvcnQgeyBzYXZlRGF0YWJhc2VUYWJsZSB9IGZyb20gXCIuL3NhdmUuanNcIlxuXG5kZXNjcmliZShcInNhdmVEYXRhYmFzZVRhYmxlXCIsICgpID0+IHtcbiAgY29uc3QgbW9ja1RhYmxlID0gcGwuRGF0YUZyYW1lKHsgY29sMTogWzEsIDIsIDNdIH0pLmxhenkoKVxuXG4gIGl0KFwidGhyb3dzIGVycm9yIHdoZW4gdGFibGUgbmFtZSBpcyBub3QgZGVmaW5lZCBpbiBkaWFsZWN0XCIsIGFzeW5jICgpID0+IHtcbiAgICBhd2FpdCBleHBlY3QoXG4gICAgICBzYXZlRGF0YWJhc2VUYWJsZShtb2NrVGFibGUsIHtcbiAgICAgICAgcGF0aDogXCJ0ZXN0LmRiXCIsXG4gICAgICAgIGZvcm1hdDogXCJzcWxpdGVcIixcbiAgICAgIH0pLFxuICAgICkucmVqZWN0cy50b1Rocm93KFwiVGFibGUgbmFtZSBpcyBub3QgZGVmaW5lZCBpbiBkaWFsZWN0XCIpXG4gIH0pXG5cbiAgaXQoXCJ0aHJvd3MgZXJyb3Igd2hlbiBmb3JtYXQgaXMgbm90IHN1cHBvcnRlZFwiLCBhc3luYyAoKSA9PiB7XG4gICAgYXdhaXQgZXhwZWN0KFxuICAgICAgc2F2ZURhdGFiYXNlVGFibGUobW9ja1RhYmxlLCB7XG4gICAgICAgIHBhdGg6IFwidGVzdC5kYlwiLFxuICAgICAgICBmb3JtYXQ6IFwidW5zdXBwb3J0ZWRcIiBhcyBhbnksXG4gICAgICAgIGRpYWxlY3Q6IHsgdGFibGU6IFwidGVzdF90YWJsZVwiIH0sXG4gICAgICB9KSxcbiAgICApLnJlamVjdHMudG9UaHJvdygnVW5zdXBwb3J0ZWQgZGF0YWJhc2UgZm9ybWF0OiBcInVuc3VwcG9ydGVkXCInKVxuICB9KVxufSlcbiJdfQ==
|
package/package.json
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@frictionless-ts/database",
|
|
3
|
+
"type": "module",
|
|
4
|
+
"version": "1.0.1",
|
|
5
|
+
"exports": "./build/index.js",
|
|
6
|
+
"sideEffects": false,
|
|
7
|
+
"files": [
|
|
8
|
+
"build"
|
|
9
|
+
],
|
|
10
|
+
"license": "MIT",
|
|
11
|
+
"author": "Evgeny Karev",
|
|
12
|
+
"repository": "https://github.com/frictionlessdata/frictionless-ts",
|
|
13
|
+
"description": "Fast TypeScript data management framework built on top of the Data Package standard and Polars DataFrames",
|
|
14
|
+
"keywords": [
|
|
15
|
+
"frictionless",
|
|
16
|
+
"data",
|
|
17
|
+
"polars",
|
|
18
|
+
"dataframe",
|
|
19
|
+
"datapackage",
|
|
20
|
+
"tableschema",
|
|
21
|
+
"typescript",
|
|
22
|
+
"validation",
|
|
23
|
+
"quality",
|
|
24
|
+
"fair",
|
|
25
|
+
"database"
|
|
26
|
+
],
|
|
27
|
+
"dependencies": {
|
|
28
|
+
"kysely": "^0.28.5",
|
|
29
|
+
"kysely-bun-sqlite": "^0.4.0",
|
|
30
|
+
"kysely-generic-sqlite": "^1.2.1",
|
|
31
|
+
"lru-cache": "^11.2.1",
|
|
32
|
+
"mysql2": "^3.14.4",
|
|
33
|
+
"nodejs-polars": "^0.22.2",
|
|
34
|
+
"pg": "^8.16.3",
|
|
35
|
+
"@frictionless-ts/metadata": "1.0.1",
|
|
36
|
+
"@frictionless-ts/table": "1.0.1"
|
|
37
|
+
},
|
|
38
|
+
"devDependencies": {
|
|
39
|
+
"@types/pg": "^8.15.5",
|
|
40
|
+
"@frictionless-ts/dataset": "1.0.1"
|
|
41
|
+
},
|
|
42
|
+
"scripts": {
|
|
43
|
+
"build": "tsc"
|
|
44
|
+
}
|
|
45
|
+
}
|