@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.
Files changed (63) hide show
  1. package/LICENSE.md +9 -0
  2. package/README.md +3 -0
  3. package/build/adapters/base.d.ts +20 -0
  4. package/build/adapters/base.js +66 -0
  5. package/build/adapters/create.d.ts +5 -0
  6. package/build/adapters/create.js +17 -0
  7. package/build/adapters/mysql.d.ts +10 -0
  8. package/build/adapters/mysql.js +90 -0
  9. package/build/adapters/mysql.spec.d.ts +1 -0
  10. package/build/adapters/mysql.spec.js +170 -0
  11. package/build/adapters/postgresql.d.ts +10 -0
  12. package/build/adapters/postgresql.js +100 -0
  13. package/build/adapters/postgresql.spec.d.ts +1 -0
  14. package/build/adapters/postgresql.spec.js +170 -0
  15. package/build/adapters/sqlite.bun.d.ts +2 -0
  16. package/build/adapters/sqlite.bun.js +7 -0
  17. package/build/adapters/sqlite.d.ts +11 -0
  18. package/build/adapters/sqlite.js +57 -0
  19. package/build/adapters/sqlite.node.d.ts +2 -0
  20. package/build/adapters/sqlite.node.js +43 -0
  21. package/build/adapters/sqlite.spec.d.ts +1 -0
  22. package/build/adapters/sqlite.spec.js +252 -0
  23. package/build/field/Field.d.ts +3 -0
  24. package/build/field/Field.js +2 -0
  25. package/build/field/Type.d.ts +2 -0
  26. package/build/field/Type.js +2 -0
  27. package/build/field/index.d.ts +2 -0
  28. package/build/field/index.js +2 -0
  29. package/build/index.d.ts +6 -0
  30. package/build/index.js +7 -0
  31. package/build/package/index.d.ts +2 -0
  32. package/build/package/index.js +3 -0
  33. package/build/package/load.d.ts +7 -0
  34. package/build/package/load.js +30 -0
  35. package/build/package/save.d.ts +10 -0
  36. package/build/package/save.js +28 -0
  37. package/build/plugin.d.ts +15 -0
  38. package/build/plugin.js +54 -0
  39. package/build/plugin.spec.d.ts +1 -0
  40. package/build/plugin.spec.js +328 -0
  41. package/build/resource/Format.d.ts +1 -0
  42. package/build/resource/Format.js +2 -0
  43. package/build/resource/index.d.ts +1 -0
  44. package/build/resource/index.js +2 -0
  45. package/build/schema/Schema.d.ts +4 -0
  46. package/build/schema/Schema.js +2 -0
  47. package/build/schema/index.d.ts +2 -0
  48. package/build/schema/index.js +2 -0
  49. package/build/schema/infer.d.ts +4 -0
  50. package/build/schema/infer.js +24 -0
  51. package/build/schema/infer.spec.d.ts +1 -0
  52. package/build/schema/infer.spec.js +25 -0
  53. package/build/table/index.d.ts +2 -0
  54. package/build/table/index.js +3 -0
  55. package/build/table/load.d.ts +6 -0
  56. package/build/table/load.js +29 -0
  57. package/build/table/load.spec.d.ts +1 -0
  58. package/build/table/load.spec.js +24 -0
  59. package/build/table/save.d.ts +4 -0
  60. package/build/table/save.js +57 -0
  61. package/build/table/save.spec.d.ts +1 -0
  62. package/build/table/save.spec.js +20 -0
  63. 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
+ }