@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
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/database
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,20 @@
1
+ import type { Field, FieldType, Schema } from "@frictionless-ts/metadata";
2
+ import type { Dialect } from "kysely";
3
+ import { Kysely } from "kysely";
4
+ import type { DatabaseField, DatabaseType } from "../field/index.ts";
5
+ import type { DatabaseSchema } from "../schema/index.ts";
6
+ export declare abstract class BaseAdapter {
7
+ abstract get nativeTypes(): FieldType[];
8
+ connectDatabase(path: string, options?: {
9
+ create?: boolean;
10
+ }): Promise<Kysely<any>>;
11
+ abstract createDialect(path: string, options?: {
12
+ create?: boolean;
13
+ }): Promise<Dialect>;
14
+ normalizeSchema(databaseSchema: DatabaseSchema): Schema;
15
+ normalizeField(databaseField: DatabaseField): Field;
16
+ abstract normalizeType(databaseType: DatabaseType): Field["type"];
17
+ denormalizeSchema(schema: Schema, tableName: string): DatabaseSchema;
18
+ denormalizeField(field: Field): DatabaseField;
19
+ abstract denormalizeType(fieldType: Field["type"]): DatabaseType;
20
+ }
@@ -0,0 +1,66 @@
1
+ import { Kysely } from "kysely";
2
+ import { LRUCache } from "lru-cache";
3
+ // We cache database connections (only works in serverfull environments)
4
+ const databases = new LRUCache({
5
+ dispose: database => database.destroy(),
6
+ max: 10,
7
+ });
8
+ export class BaseAdapter {
9
+ async connectDatabase(path, options) {
10
+ const cachedDatabase = databases.get(path);
11
+ if (cachedDatabase) {
12
+ return cachedDatabase;
13
+ }
14
+ const dialect = await this.createDialect(path, options);
15
+ const database = new Kysely({ dialect });
16
+ databases.set(path, new Kysely({ dialect }));
17
+ return database;
18
+ }
19
+ normalizeSchema(databaseSchema) {
20
+ const schema = { fields: [] };
21
+ for (const databaseField of databaseSchema.columns) {
22
+ schema.fields.push(this.normalizeField(databaseField));
23
+ }
24
+ return schema;
25
+ }
26
+ normalizeField(databaseField) {
27
+ const field = {
28
+ name: databaseField.name,
29
+ type: this.normalizeType(databaseField.dataType),
30
+ };
31
+ if (!databaseField.isNullable) {
32
+ field.constraints ??= {};
33
+ field.constraints.required = true;
34
+ }
35
+ if (databaseField.comment) {
36
+ field.description = databaseField.comment;
37
+ }
38
+ return field;
39
+ }
40
+ denormalizeSchema(schema, tableName) {
41
+ const databaseSchema = {
42
+ name: tableName,
43
+ columns: [],
44
+ isView: false,
45
+ };
46
+ for (const field of schema.fields) {
47
+ databaseSchema.columns.push(this.denormalizeField(field));
48
+ }
49
+ if (schema.primaryKey) {
50
+ databaseSchema.primaryKey = schema.primaryKey;
51
+ }
52
+ return databaseSchema;
53
+ }
54
+ denormalizeField(field) {
55
+ const databaseField = {
56
+ name: field.name,
57
+ dataType: this.denormalizeType(field.type),
58
+ isNullable: !field.constraints?.required,
59
+ comment: field.description,
60
+ isAutoIncrementing: false,
61
+ hasDefaultValue: false,
62
+ };
63
+ return databaseField;
64
+ }
65
+ }
66
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL2FkYXB0ZXJzL2Jhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFFBQVEsQ0FBQTtBQUMvQixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sV0FBVyxDQUFBO0FBSXBDLHdFQUF3RTtBQUN4RSxNQUFNLFNBQVMsR0FBRyxJQUFJLFFBQVEsQ0FBc0I7SUFDbEQsT0FBTyxFQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRTtJQUN2QyxHQUFHLEVBQUUsRUFBRTtDQUNSLENBQUMsQ0FBQTtBQUVGLE1BQU0sT0FBZ0IsV0FBVztJQUcvQixLQUFLLENBQUMsZUFBZSxDQUFDLElBQVksRUFBRSxPQUE4QjtRQUNoRSxNQUFNLGNBQWMsR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQzFDLElBQUksY0FBYyxFQUFFLENBQUM7WUFDbkIsT0FBTyxjQUFjLENBQUE7UUFDdkIsQ0FBQztRQUVELE1BQU0sT0FBTyxHQUFHLE1BQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUE7UUFDdkQsTUFBTSxRQUFRLEdBQUcsSUFBSSxNQUFNLENBQU0sRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFBO1FBQzdDLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLElBQUksTUFBTSxDQUFNLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFBO1FBRWpELE9BQU8sUUFBUSxDQUFBO0lBQ2pCLENBQUM7SUFPRCxlQUFlLENBQUMsY0FBOEI7UUFDNUMsTUFBTSxNQUFNLEdBQVcsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLENBQUE7UUFFckMsS0FBSyxNQUFNLGFBQWEsSUFBSSxjQUFjLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDbkQsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFBO1FBQ3hELENBQUM7UUFFRCxPQUFPLE1BQU0sQ0FBQTtJQUNmLENBQUM7SUFFRCxjQUFjLENBQUMsYUFBNEI7UUFDekMsTUFBTSxLQUFLLEdBQVU7WUFDbkIsSUFBSSxFQUFFLGFBQWEsQ0FBQyxJQUFJO1lBQ3hCLElBQUksRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUM7U0FDakQsQ0FBQTtRQUVELElBQUksQ0FBQyxhQUFhLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDOUIsS0FBSyxDQUFDLFdBQVcsS0FBSyxFQUFFLENBQUE7WUFDeEIsS0FBSyxDQUFDLFdBQVcsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFBO1FBQ25DLENBQUM7UUFFRCxJQUFJLGFBQWEsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUMxQixLQUFLLENBQUMsV0FBVyxHQUFHLGFBQWEsQ0FBQyxPQUFPLENBQUE7UUFDM0MsQ0FBQztRQUVELE9BQU8sS0FBSyxDQUFBO0lBQ2QsQ0FBQztJQUlELGlCQUFpQixDQUFDLE1BQWMsRUFBRSxTQUFpQjtRQUNqRCxNQUFNLGNBQWMsR0FBbUI7WUFDckMsSUFBSSxFQUFFLFNBQVM7WUFDZixPQUFPLEVBQUUsRUFBRTtZQUNYLE1BQU0sRUFBRSxLQUFLO1NBQ2QsQ0FBQTtRQUVELEtBQUssTUFBTSxLQUFLLElBQUksTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2xDLGNBQWMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFBO1FBQzNELENBQUM7UUFFRCxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUN0QixjQUFjLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUE7UUFDL0MsQ0FBQztRQUVELE9BQU8sY0FBYyxDQUFBO0lBQ3ZCLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxLQUFZO1FBQzNCLE1BQU0sYUFBYSxHQUFrQjtZQUNuQyxJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUk7WUFDaEIsUUFBUSxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQztZQUMxQyxVQUFVLEVBQUUsQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLFFBQVE7WUFDeEMsT0FBTyxFQUFFLEtBQUssQ0FBQyxXQUFXO1lBQzFCLGtCQUFrQixFQUFFLEtBQUs7WUFDekIsZUFBZSxFQUFFLEtBQUs7U0FDdkIsQ0FBQTtRQUVELE9BQU8sYUFBYSxDQUFBO0lBQ3RCLENBQUM7Q0FHRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRmllbGQsIEZpZWxkVHlwZSwgU2NoZW1hIH0gZnJvbSBcIkBmcmljdGlvbmxlc3MtdHMvbWV0YWRhdGFcIlxuaW1wb3J0IHR5cGUgeyBEaWFsZWN0IH0gZnJvbSBcImt5c2VseVwiXG5pbXBvcnQgeyBLeXNlbHkgfSBmcm9tIFwia3lzZWx5XCJcbmltcG9ydCB7IExSVUNhY2hlIH0gZnJvbSBcImxydS1jYWNoZVwiXG5pbXBvcnQgdHlwZSB7IERhdGFiYXNlRmllbGQsIERhdGFiYXNlVHlwZSB9IGZyb20gXCIuLi9maWVsZC9pbmRleC50c1wiXG5pbXBvcnQgdHlwZSB7IERhdGFiYXNlU2NoZW1hIH0gZnJvbSBcIi4uL3NjaGVtYS9pbmRleC50c1wiXG5cbi8vIFdlIGNhY2hlIGRhdGFiYXNlIGNvbm5lY3Rpb25zIChvbmx5IHdvcmtzIGluIHNlcnZlcmZ1bGwgZW52aXJvbm1lbnRzKVxuY29uc3QgZGF0YWJhc2VzID0gbmV3IExSVUNhY2hlPHN0cmluZywgS3lzZWx5PGFueT4+KHtcbiAgZGlzcG9zZTogZGF0YWJhc2UgPT4gZGF0YWJhc2UuZGVzdHJveSgpLFxuICBtYXg6IDEwLFxufSlcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEJhc2VBZGFwdGVyIHtcbiAgYWJzdHJhY3QgZ2V0IG5hdGl2ZVR5cGVzKCk6IEZpZWxkVHlwZVtdXG5cbiAgYXN5bmMgY29ubmVjdERhdGFiYXNlKHBhdGg6IHN0cmluZywgb3B0aW9ucz86IHsgY3JlYXRlPzogYm9vbGVhbiB9KSB7XG4gICAgY29uc3QgY2FjaGVkRGF0YWJhc2UgPSBkYXRhYmFzZXMuZ2V0KHBhdGgpXG4gICAgaWYgKGNhY2hlZERhdGFiYXNlKSB7XG4gICAgICByZXR1cm4gY2FjaGVkRGF0YWJhc2VcbiAgICB9XG5cbiAgICBjb25zdCBkaWFsZWN0ID0gYXdhaXQgdGhpcy5jcmVhdGVEaWFsZWN0KHBhdGgsIG9wdGlvbnMpXG4gICAgY29uc3QgZGF0YWJhc2UgPSBuZXcgS3lzZWx5PGFueT4oeyBkaWFsZWN0IH0pXG4gICAgZGF0YWJhc2VzLnNldChwYXRoLCBuZXcgS3lzZWx5PGFueT4oeyBkaWFsZWN0IH0pKVxuXG4gICAgcmV0dXJuIGRhdGFiYXNlXG4gIH1cblxuICBhYnN0cmFjdCBjcmVhdGVEaWFsZWN0KFxuICAgIHBhdGg6IHN0cmluZyxcbiAgICBvcHRpb25zPzogeyBjcmVhdGU/OiBib29sZWFuIH0sXG4gICk6IFByb21pc2U8RGlhbGVjdD5cblxuICBub3JtYWxpemVTY2hlbWEoZGF0YWJhc2VTY2hlbWE6IERhdGFiYXNlU2NoZW1hKSB7XG4gICAgY29uc3Qgc2NoZW1hOiBTY2hlbWEgPSB7IGZpZWxkczogW10gfVxuXG4gICAgZm9yIChjb25zdCBkYXRhYmFzZUZpZWxkIG9mIGRhdGFiYXNlU2NoZW1hLmNvbHVtbnMpIHtcbiAgICAgIHNjaGVtYS5maWVsZHMucHVzaCh0aGlzLm5vcm1hbGl6ZUZpZWxkKGRhdGFiYXNlRmllbGQpKVxuICAgIH1cblxuICAgIHJldHVybiBzY2hlbWFcbiAgfVxuXG4gIG5vcm1hbGl6ZUZpZWxkKGRhdGFiYXNlRmllbGQ6IERhdGFiYXNlRmllbGQpIHtcbiAgICBjb25zdCBmaWVsZDogRmllbGQgPSB7XG4gICAgICBuYW1lOiBkYXRhYmFzZUZpZWxkLm5hbWUsXG4gICAgICB0eXBlOiB0aGlzLm5vcm1hbGl6ZVR5cGUoZGF0YWJhc2VGaWVsZC5kYXRhVHlwZSksXG4gICAgfVxuXG4gICAgaWYgKCFkYXRhYmFzZUZpZWxkLmlzTnVsbGFibGUpIHtcbiAgICAgIGZpZWxkLmNvbnN0cmFpbnRzID8/PSB7fVxuICAgICAgZmllbGQuY29uc3RyYWludHMucmVxdWlyZWQgPSB0cnVlXG4gICAgfVxuXG4gICAgaWYgKGRhdGFiYXNlRmllbGQuY29tbWVudCkge1xuICAgICAgZmllbGQuZGVzY3JpcHRpb24gPSBkYXRhYmFzZUZpZWxkLmNvbW1lbnRcbiAgICB9XG5cbiAgICByZXR1cm4gZmllbGRcbiAgfVxuXG4gIGFic3RyYWN0IG5vcm1hbGl6ZVR5cGUoZGF0YWJhc2VUeXBlOiBEYXRhYmFzZVR5cGUpOiBGaWVsZFtcInR5cGVcIl1cblxuICBkZW5vcm1hbGl6ZVNjaGVtYShzY2hlbWE6IFNjaGVtYSwgdGFibGVOYW1lOiBzdHJpbmcpOiBEYXRhYmFzZVNjaGVtYSB7XG4gICAgY29uc3QgZGF0YWJhc2VTY2hlbWE6IERhdGFiYXNlU2NoZW1hID0ge1xuICAgICAgbmFtZTogdGFibGVOYW1lLFxuICAgICAgY29sdW1uczogW10sXG4gICAgICBpc1ZpZXc6IGZhbHNlLFxuICAgIH1cblxuICAgIGZvciAoY29uc3QgZmllbGQgb2Ygc2NoZW1hLmZpZWxkcykge1xuICAgICAgZGF0YWJhc2VTY2hlbWEuY29sdW1ucy5wdXNoKHRoaXMuZGVub3JtYWxpemVGaWVsZChmaWVsZCkpXG4gICAgfVxuXG4gICAgaWYgKHNjaGVtYS5wcmltYXJ5S2V5KSB7XG4gICAgICBkYXRhYmFzZVNjaGVtYS5wcmltYXJ5S2V5ID0gc2NoZW1hLnByaW1hcnlLZXlcbiAgICB9XG5cbiAgICByZXR1cm4gZGF0YWJhc2VTY2hlbWFcbiAgfVxuXG4gIGRlbm9ybWFsaXplRmllbGQoZmllbGQ6IEZpZWxkKTogRGF0YWJhc2VGaWVsZCB7XG4gICAgY29uc3QgZGF0YWJhc2VGaWVsZDogRGF0YWJhc2VGaWVsZCA9IHtcbiAgICAgIG5hbWU6IGZpZWxkLm5hbWUsXG4gICAgICBkYXRhVHlwZTogdGhpcy5kZW5vcm1hbGl6ZVR5cGUoZmllbGQudHlwZSksXG4gICAgICBpc051bGxhYmxlOiAhZmllbGQuY29uc3RyYWludHM/LnJlcXVpcmVkLFxuICAgICAgY29tbWVudDogZmllbGQuZGVzY3JpcHRpb24sXG4gICAgICBpc0F1dG9JbmNyZW1lbnRpbmc6IGZhbHNlLFxuICAgICAgaGFzRGVmYXVsdFZhbHVlOiBmYWxzZSxcbiAgICB9XG5cbiAgICByZXR1cm4gZGF0YWJhc2VGaWVsZFxuICB9XG5cbiAgYWJzdHJhY3QgZGVub3JtYWxpemVUeXBlKGZpZWxkVHlwZTogRmllbGRbXCJ0eXBlXCJdKTogRGF0YWJhc2VUeXBlXG59XG4iXX0=
@@ -0,0 +1,5 @@
1
+ import type { DatabaseFormat } from "../resource/index.ts";
2
+ import { MysqlAdapter } from "./mysql.ts";
3
+ import { PostgresqlAdapter } from "./postgresql.ts";
4
+ import { SqliteAdapter } from "./sqlite.ts";
5
+ export declare function createAdapter(format: DatabaseFormat): PostgresqlAdapter | MysqlAdapter | SqliteAdapter;
@@ -0,0 +1,17 @@
1
+ import { MysqlAdapter } from "./mysql.js";
2
+ import { PostgresqlAdapter } from "./postgresql.js";
3
+ import { SqliteAdapter } from "./sqlite.js";
4
+ // TODO: Enable SQLite support
5
+ export function createAdapter(format) {
6
+ switch (format) {
7
+ case "postgresql":
8
+ return new PostgresqlAdapter();
9
+ case "mysql":
10
+ return new MysqlAdapter();
11
+ case "sqlite":
12
+ return new SqliteAdapter();
13
+ default:
14
+ throw new Error(`Unsupported database format: "${format}"`);
15
+ }
16
+ }
17
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vYWRhcHRlcnMvY3JlYXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxZQUFZLENBQUE7QUFDekMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUE7QUFDbkQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGFBQWEsQ0FBQTtBQUUzQyw4QkFBOEI7QUFFOUIsTUFBTSxVQUFVLGFBQWEsQ0FBQyxNQUFzQjtJQUNsRCxRQUFRLE1BQU0sRUFBRSxDQUFDO1FBQ2YsS0FBSyxZQUFZO1lBQ2YsT0FBTyxJQUFJLGlCQUFpQixFQUFFLENBQUE7UUFDaEMsS0FBSyxPQUFPO1lBQ1YsT0FBTyxJQUFJLFlBQVksRUFBRSxDQUFBO1FBQzNCLEtBQUssUUFBUTtZQUNYLE9BQU8sSUFBSSxhQUFhLEVBQUUsQ0FBQTtRQUM1QjtZQUNFLE1BQU0sSUFBSSxLQUFLLENBQUMsaUNBQWlDLE1BQU0sR0FBRyxDQUFDLENBQUE7SUFDL0QsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IERhdGFiYXNlRm9ybWF0IH0gZnJvbSBcIi4uL3Jlc291cmNlL2luZGV4LnRzXCJcbmltcG9ydCB7IE15c3FsQWRhcHRlciB9IGZyb20gXCIuL215c3FsLnRzXCJcbmltcG9ydCB7IFBvc3RncmVzcWxBZGFwdGVyIH0gZnJvbSBcIi4vcG9zdGdyZXNxbC50c1wiXG5pbXBvcnQgeyBTcWxpdGVBZGFwdGVyIH0gZnJvbSBcIi4vc3FsaXRlLnRzXCJcblxuLy8gVE9ETzogRW5hYmxlIFNRTGl0ZSBzdXBwb3J0XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVBZGFwdGVyKGZvcm1hdDogRGF0YWJhc2VGb3JtYXQpIHtcbiAgc3dpdGNoIChmb3JtYXQpIHtcbiAgICBjYXNlIFwicG9zdGdyZXNxbFwiOlxuICAgICAgcmV0dXJuIG5ldyBQb3N0Z3Jlc3FsQWRhcHRlcigpXG4gICAgY2FzZSBcIm15c3FsXCI6XG4gICAgICByZXR1cm4gbmV3IE15c3FsQWRhcHRlcigpXG4gICAgY2FzZSBcInNxbGl0ZVwiOlxuICAgICAgcmV0dXJuIG5ldyBTcWxpdGVBZGFwdGVyKClcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCBkYXRhYmFzZSBmb3JtYXQ6IFwiJHtmb3JtYXR9XCJgKVxuICB9XG59XG4iXX0=
@@ -0,0 +1,10 @@
1
+ import type { FieldType } from "@frictionless-ts/metadata";
2
+ import { MysqlDialect } from "kysely";
3
+ import type { DatabaseType } from "../field/index.ts";
4
+ import { BaseAdapter } from "./base.ts";
5
+ export declare class MysqlAdapter extends BaseAdapter {
6
+ nativeTypes: ("string" | "number" | "boolean" | "integer" | "datetime" | "year")[];
7
+ createDialect(path: string): Promise<MysqlDialect>;
8
+ normalizeType(databaseType: DatabaseType): FieldType;
9
+ denormalizeType(fieldType: FieldType): DatabaseType;
10
+ }
@@ -0,0 +1,90 @@
1
+ import { MysqlDialect } from "kysely";
2
+ import { createPool } from "mysql2";
3
+ import { BaseAdapter } from "./base.js";
4
+ // TODO: Support more native types
5
+ export class MysqlAdapter extends BaseAdapter {
6
+ nativeTypes = [
7
+ "boolean",
8
+ "datetime",
9
+ "integer",
10
+ "number",
11
+ "string",
12
+ "year",
13
+ ];
14
+ async createDialect(path) {
15
+ return new MysqlDialect({
16
+ pool: createPool({ uri: path }),
17
+ });
18
+ }
19
+ normalizeType(databaseType) {
20
+ switch (databaseType.toLowerCase()) {
21
+ case "tinyint":
22
+ case "smallint":
23
+ case "mediumint":
24
+ case "int":
25
+ case "integer":
26
+ case "bigint":
27
+ return "integer";
28
+ case "decimal":
29
+ case "numeric":
30
+ case "float":
31
+ case "double":
32
+ case "real":
33
+ return "number";
34
+ case "bit":
35
+ case "bool":
36
+ case "boolean":
37
+ return "boolean";
38
+ case "char":
39
+ case "varchar":
40
+ case "tinytext":
41
+ case "text":
42
+ case "mediumtext":
43
+ case "longtext":
44
+ case "enum":
45
+ case "set":
46
+ return "string";
47
+ case "date":
48
+ return "date";
49
+ case "time":
50
+ return "time";
51
+ case "datetime":
52
+ case "timestamp":
53
+ return "datetime";
54
+ case "year":
55
+ return "year";
56
+ case "json":
57
+ return "object";
58
+ case "geometry":
59
+ case "point":
60
+ case "linestring":
61
+ case "polygon":
62
+ case "multipoint":
63
+ case "multilinestring":
64
+ case "multipolygon":
65
+ case "geometrycollection":
66
+ return "geojson";
67
+ default:
68
+ return "string";
69
+ }
70
+ }
71
+ denormalizeType(fieldType) {
72
+ switch (fieldType) {
73
+ case "boolean":
74
+ return "boolean";
75
+ case "datetime":
76
+ return "datetime";
77
+ case "integer":
78
+ return "integer";
79
+ case "number":
80
+ return "double precision";
81
+ case "string":
82
+ return "text";
83
+ case "year":
84
+ return "integer";
85
+ default:
86
+ return "text";
87
+ }
88
+ }
89
+ }
90
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXlzcWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9hZGFwdGVycy9teXNxbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sUUFBUSxDQUFBO0FBQ3JDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxRQUFRLENBQUE7QUFFbkMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLFdBQVcsQ0FBQTtBQUV2QyxrQ0FBa0M7QUFFbEMsTUFBTSxPQUFPLFlBQWEsU0FBUSxXQUFXO0lBQzNDLFdBQVcsR0FBRztRQUNaLFNBQVM7UUFDVCxVQUFVO1FBQ1YsU0FBUztRQUNULFFBQVE7UUFDUixRQUFRO1FBQ1IsTUFBTTtLQUNlLENBQUE7SUFFdkIsS0FBSyxDQUFDLGFBQWEsQ0FBQyxJQUFZO1FBQzlCLE9BQU8sSUFBSSxZQUFZLENBQUM7WUFDdEIsSUFBSSxFQUFFLFVBQVUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsQ0FBQztTQUNoQyxDQUFDLENBQUE7SUFDSixDQUFDO0lBRUQsYUFBYSxDQUFDLFlBQTBCO1FBQ3RDLFFBQVEsWUFBWSxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUM7WUFDbkMsS0FBSyxTQUFTLENBQUM7WUFDZixLQUFLLFVBQVUsQ0FBQztZQUNoQixLQUFLLFdBQVcsQ0FBQztZQUNqQixLQUFLLEtBQUssQ0FBQztZQUNYLEtBQUssU0FBUyxDQUFDO1lBQ2YsS0FBSyxRQUFRO2dCQUNYLE9BQU8sU0FBUyxDQUFBO1lBQ2xCLEtBQUssU0FBUyxDQUFDO1lBQ2YsS0FBSyxTQUFTLENBQUM7WUFDZixLQUFLLE9BQU8sQ0FBQztZQUNiLEtBQUssUUFBUSxDQUFDO1lBQ2QsS0FBSyxNQUFNO2dCQUNULE9BQU8sUUFBUSxDQUFBO1lBQ2pCLEtBQUssS0FBSyxDQUFDO1lBQ1gsS0FBSyxNQUFNLENBQUM7WUFDWixLQUFLLFNBQVM7Z0JBQ1osT0FBTyxTQUFTLENBQUE7WUFDbEIsS0FBSyxNQUFNLENBQUM7WUFDWixLQUFLLFNBQVMsQ0FBQztZQUNmLEtBQUssVUFBVSxDQUFDO1lBQ2hCLEtBQUssTUFBTSxDQUFDO1lBQ1osS0FBSyxZQUFZLENBQUM7WUFDbEIsS0FBSyxVQUFVLENBQUM7WUFDaEIsS0FBSyxNQUFNLENBQUM7WUFDWixLQUFLLEtBQUs7Z0JBQ1IsT0FBTyxRQUFRLENBQUE7WUFDakIsS0FBSyxNQUFNO2dCQUNULE9BQU8sTUFBTSxDQUFBO1lBQ2YsS0FBSyxNQUFNO2dCQUNULE9BQU8sTUFBTSxDQUFBO1lBQ2YsS0FBSyxVQUFVLENBQUM7WUFDaEIsS0FBSyxXQUFXO2dCQUNkLE9BQU8sVUFBVSxDQUFBO1lBQ25CLEtBQUssTUFBTTtnQkFDVCxPQUFPLE1BQU0sQ0FBQTtZQUNmLEtBQUssTUFBTTtnQkFDVCxPQUFPLFFBQVEsQ0FBQTtZQUNqQixLQUFLLFVBQVUsQ0FBQztZQUNoQixLQUFLLE9BQU8sQ0FBQztZQUNiLEtBQUssWUFBWSxDQUFDO1lBQ2xCLEtBQUssU0FBUyxDQUFDO1lBQ2YsS0FBSyxZQUFZLENBQUM7WUFDbEIsS0FBSyxpQkFBaUIsQ0FBQztZQUN2QixLQUFLLGNBQWMsQ0FBQztZQUNwQixLQUFLLG9CQUFvQjtnQkFDdkIsT0FBTyxTQUFTLENBQUE7WUFDbEI7Z0JBQ0UsT0FBTyxRQUFRLENBQUE7UUFDbkIsQ0FBQztJQUNILENBQUM7SUFFRCxlQUFlLENBQUMsU0FBb0I7UUFDbEMsUUFBUSxTQUFTLEVBQUUsQ0FBQztZQUNsQixLQUFLLFNBQVM7Z0JBQ1osT0FBTyxTQUFTLENBQUE7WUFDbEIsS0FBSyxVQUFVO2dCQUNiLE9BQU8sVUFBVSxDQUFBO1lBQ25CLEtBQUssU0FBUztnQkFDWixPQUFPLFNBQVMsQ0FBQTtZQUNsQixLQUFLLFFBQVE7Z0JBQ1gsT0FBTyxrQkFBa0IsQ0FBQTtZQUMzQixLQUFLLFFBQVE7Z0JBQ1gsT0FBTyxNQUFNLENBQUE7WUFDZixLQUFLLE1BQU07Z0JBQ1QsT0FBTyxTQUFTLENBQUE7WUFDbEI7Z0JBQ0UsT0FBTyxNQUFNLENBQUE7UUFDakIsQ0FBQztJQUNILENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRmllbGRUeXBlIH0gZnJvbSBcIkBmcmljdGlvbmxlc3MtdHMvbWV0YWRhdGFcIlxuaW1wb3J0IHsgTXlzcWxEaWFsZWN0IH0gZnJvbSBcImt5c2VseVwiXG5pbXBvcnQgeyBjcmVhdGVQb29sIH0gZnJvbSBcIm15c3FsMlwiXG5pbXBvcnQgdHlwZSB7IERhdGFiYXNlVHlwZSB9IGZyb20gXCIuLi9maWVsZC9pbmRleC50c1wiXG5pbXBvcnQgeyBCYXNlQWRhcHRlciB9IGZyb20gXCIuL2Jhc2UudHNcIlxuXG4vLyBUT0RPOiBTdXBwb3J0IG1vcmUgbmF0aXZlIHR5cGVzXG5cbmV4cG9ydCBjbGFzcyBNeXNxbEFkYXB0ZXIgZXh0ZW5kcyBCYXNlQWRhcHRlciB7XG4gIG5hdGl2ZVR5cGVzID0gW1xuICAgIFwiYm9vbGVhblwiLFxuICAgIFwiZGF0ZXRpbWVcIixcbiAgICBcImludGVnZXJcIixcbiAgICBcIm51bWJlclwiLFxuICAgIFwic3RyaW5nXCIsXG4gICAgXCJ5ZWFyXCIsXG4gIF0gc2F0aXNmaWVzIEZpZWxkVHlwZVtdXG5cbiAgYXN5bmMgY3JlYXRlRGlhbGVjdChwYXRoOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gbmV3IE15c3FsRGlhbGVjdCh7XG4gICAgICBwb29sOiBjcmVhdGVQb29sKHsgdXJpOiBwYXRoIH0pLFxuICAgIH0pXG4gIH1cblxuICBub3JtYWxpemVUeXBlKGRhdGFiYXNlVHlwZTogRGF0YWJhc2VUeXBlKTogRmllbGRUeXBlIHtcbiAgICBzd2l0Y2ggKGRhdGFiYXNlVHlwZS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICBjYXNlIFwidGlueWludFwiOlxuICAgICAgY2FzZSBcInNtYWxsaW50XCI6XG4gICAgICBjYXNlIFwibWVkaXVtaW50XCI6XG4gICAgICBjYXNlIFwiaW50XCI6XG4gICAgICBjYXNlIFwiaW50ZWdlclwiOlxuICAgICAgY2FzZSBcImJpZ2ludFwiOlxuICAgICAgICByZXR1cm4gXCJpbnRlZ2VyXCJcbiAgICAgIGNhc2UgXCJkZWNpbWFsXCI6XG4gICAgICBjYXNlIFwibnVtZXJpY1wiOlxuICAgICAgY2FzZSBcImZsb2F0XCI6XG4gICAgICBjYXNlIFwiZG91YmxlXCI6XG4gICAgICBjYXNlIFwicmVhbFwiOlxuICAgICAgICByZXR1cm4gXCJudW1iZXJcIlxuICAgICAgY2FzZSBcImJpdFwiOlxuICAgICAgY2FzZSBcImJvb2xcIjpcbiAgICAgIGNhc2UgXCJib29sZWFuXCI6XG4gICAgICAgIHJldHVybiBcImJvb2xlYW5cIlxuICAgICAgY2FzZSBcImNoYXJcIjpcbiAgICAgIGNhc2UgXCJ2YXJjaGFyXCI6XG4gICAgICBjYXNlIFwidGlueXRleHRcIjpcbiAgICAgIGNhc2UgXCJ0ZXh0XCI6XG4gICAgICBjYXNlIFwibWVkaXVtdGV4dFwiOlxuICAgICAgY2FzZSBcImxvbmd0ZXh0XCI6XG4gICAgICBjYXNlIFwiZW51bVwiOlxuICAgICAgY2FzZSBcInNldFwiOlxuICAgICAgICByZXR1cm4gXCJzdHJpbmdcIlxuICAgICAgY2FzZSBcImRhdGVcIjpcbiAgICAgICAgcmV0dXJuIFwiZGF0ZVwiXG4gICAgICBjYXNlIFwidGltZVwiOlxuICAgICAgICByZXR1cm4gXCJ0aW1lXCJcbiAgICAgIGNhc2UgXCJkYXRldGltZVwiOlxuICAgICAgY2FzZSBcInRpbWVzdGFtcFwiOlxuICAgICAgICByZXR1cm4gXCJkYXRldGltZVwiXG4gICAgICBjYXNlIFwieWVhclwiOlxuICAgICAgICByZXR1cm4gXCJ5ZWFyXCJcbiAgICAgIGNhc2UgXCJqc29uXCI6XG4gICAgICAgIHJldHVybiBcIm9iamVjdFwiXG4gICAgICBjYXNlIFwiZ2VvbWV0cnlcIjpcbiAgICAgIGNhc2UgXCJwb2ludFwiOlxuICAgICAgY2FzZSBcImxpbmVzdHJpbmdcIjpcbiAgICAgIGNhc2UgXCJwb2x5Z29uXCI6XG4gICAgICBjYXNlIFwibXVsdGlwb2ludFwiOlxuICAgICAgY2FzZSBcIm11bHRpbGluZXN0cmluZ1wiOlxuICAgICAgY2FzZSBcIm11bHRpcG9seWdvblwiOlxuICAgICAgY2FzZSBcImdlb21ldHJ5Y29sbGVjdGlvblwiOlxuICAgICAgICByZXR1cm4gXCJnZW9qc29uXCJcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBcInN0cmluZ1wiXG4gICAgfVxuICB9XG5cbiAgZGVub3JtYWxpemVUeXBlKGZpZWxkVHlwZTogRmllbGRUeXBlKTogRGF0YWJhc2VUeXBlIHtcbiAgICBzd2l0Y2ggKGZpZWxkVHlwZSkge1xuICAgICAgY2FzZSBcImJvb2xlYW5cIjpcbiAgICAgICAgcmV0dXJuIFwiYm9vbGVhblwiXG4gICAgICBjYXNlIFwiZGF0ZXRpbWVcIjpcbiAgICAgICAgcmV0dXJuIFwiZGF0ZXRpbWVcIlxuICAgICAgY2FzZSBcImludGVnZXJcIjpcbiAgICAgICAgcmV0dXJuIFwiaW50ZWdlclwiXG4gICAgICBjYXNlIFwibnVtYmVyXCI6XG4gICAgICAgIHJldHVybiBcImRvdWJsZSBwcmVjaXNpb25cIlxuICAgICAgY2FzZSBcInN0cmluZ1wiOlxuICAgICAgICByZXR1cm4gXCJ0ZXh0XCJcbiAgICAgIGNhc2UgXCJ5ZWFyXCI6XG4gICAgICAgIHJldHVybiBcImludGVnZXJcIlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIFwidGV4dFwiXG4gICAgfVxuICB9XG59XG4iXX0=
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,170 @@
1
+ import * as pl from "nodejs-polars";
2
+ import { describe, expect, it } from "vitest";
3
+ import { useRecording } from "vitest-polly";
4
+ import { loadPackageFromDatabase } from "../package/index.js";
5
+ import { inferDatabaseSchema } from "../schema/index.js";
6
+ import { loadDatabaseTable, saveDatabaseTable } from "../table/index.js";
7
+ import { createAdapter } from "./create.js";
8
+ useRecording();
9
+ const path = process.env.DPKIT_MYSQL_URL;
10
+ // Vitest runs in-file tests sequentially so we can use the same table
11
+ const dialect = { table: "dpkit" };
12
+ const record1 = { id: 1, name: "english" };
13
+ const record2 = { id: 2, name: "中文" };
14
+ describe.skipIf(!path)("MysqlAdapter", () => {
15
+ if (!path)
16
+ return;
17
+ it("should infer schema", async () => {
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: "mysql",
29
+ overwrite: true,
30
+ });
31
+ const schema = await inferDatabaseSchema({
32
+ path,
33
+ dialect,
34
+ format: "mysql",
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 source = pl.DataFrame([record1, record2]).lazy();
46
+ await saveDatabaseTable(source, {
47
+ path,
48
+ dialect,
49
+ format: "mysql",
50
+ overwrite: true,
51
+ });
52
+ const target = await loadDatabaseTable({
53
+ path,
54
+ dialect,
55
+ format: "mysql",
56
+ });
57
+ expect((await target.collect()).toRecords()).toEqual([record1, record2]);
58
+ });
59
+ it("should save/load table with various data types", async () => {
60
+ const source = pl
61
+ .DataFrame([
62
+ pl.Series("array", ["[1, 2, 3]"], pl.String),
63
+ pl.Series("boolean", [true], pl.Bool),
64
+ pl.Series("date", [new Date(Date.UTC(2025, 0, 1))], pl.Date),
65
+ pl.Series("datetime", [new Date(Date.UTC(2025, 0, 1))], pl.Datetime),
66
+ pl.Series("duration", ["P23DT23H"], pl.String),
67
+ pl.Series("geojson", ['{"value": 1}'], pl.String),
68
+ pl.Series("geopoint", [[40.0, 50.0]], pl.List(pl.Float32)),
69
+ pl.Series("integer", [1], pl.Int32),
70
+ pl.Series("list", [[1.0, 2.0, 3.0]], pl.List(pl.Float32)),
71
+ pl.Series("number", [1.1], pl.Float64),
72
+ pl.Series("object", ['{"value": 1}']),
73
+ pl.Series("string", ["string"], pl.String),
74
+ pl.Series("time", [new Date(Date.UTC(2025, 0, 1))], pl.Time),
75
+ pl.Series("year", [2025], pl.Int32),
76
+ pl.Series("yearmonth", [[2025, 1]], pl.List(pl.Int16)),
77
+ ])
78
+ .lazy();
79
+ await saveDatabaseTable(source, {
80
+ path,
81
+ dialect,
82
+ format: "mysql",
83
+ overwrite: true,
84
+ fieldTypes: {
85
+ geojson: "geojson",
86
+ geopoint: "geopoint",
87
+ list: "list",
88
+ object: "object",
89
+ // TODO: Remove time after:
90
+ // https://github.com/pola-rs/nodejs-polars/issues/364
91
+ time: "time",
92
+ year: "year",
93
+ yearmonth: "yearmonth",
94
+ },
95
+ });
96
+ const target = await loadDatabaseTable({ path, dialect, format: "mysql" }, { denormalized: true });
97
+ expect((await target.collect()).toRecords()).toEqual([
98
+ {
99
+ array: "[1, 2, 3]",
100
+ boolean: 1,
101
+ date: "2025-01-01",
102
+ datetime: new Date(Date.UTC(2025, 0, 1)),
103
+ duration: "P23DT23H",
104
+ geojson: '{"value": 1}',
105
+ geopoint: "40.0,50.0",
106
+ integer: 1,
107
+ list: "1.0,2.0,3.0",
108
+ number: 1.1,
109
+ object: '{"value": 1}',
110
+ string: "string",
111
+ time: "00:00:00",
112
+ year: 2025,
113
+ yearmonth: "2025-01",
114
+ },
115
+ ]);
116
+ });
117
+ it("should load package from database", async () => {
118
+ const adapter = createAdapter("mysql");
119
+ const database = await adapter.connectDatabase(path);
120
+ await database.schema.dropTable("table1").ifExists().execute();
121
+ await database.schema
122
+ .createTable("table1")
123
+ .ifNotExists()
124
+ .addColumn("id", "integer", column => column.notNull())
125
+ .addColumn("name", "text")
126
+ .execute();
127
+ await database.schema.dropTable("table2").ifExists().execute();
128
+ await database.schema
129
+ .createTable("table2")
130
+ .ifNotExists()
131
+ .addColumn("id", "integer", column => column.notNull())
132
+ .addColumn("number", "numeric")
133
+ .addColumn("datetime", "datetime")
134
+ .execute();
135
+ const datapackage = await loadPackageFromDatabase(path, {
136
+ format: "mysql",
137
+ includeTables: ["table1", "table2"],
138
+ });
139
+ expect(datapackage).toEqual({
140
+ resources: [
141
+ {
142
+ path,
143
+ name: "table1",
144
+ format: "mysql",
145
+ dialect: { table: "table1" },
146
+ schema: {
147
+ fields: [
148
+ { name: "id", type: "integer", constraints: { required: true } },
149
+ { name: "name", type: "string" },
150
+ ],
151
+ },
152
+ },
153
+ {
154
+ path,
155
+ name: "table2",
156
+ format: "mysql",
157
+ dialect: { table: "table2" },
158
+ schema: {
159
+ fields: [
160
+ { name: "id", type: "integer", constraints: { required: true } },
161
+ { name: "number", type: "number" },
162
+ { name: "datetime", type: "datetime" },
163
+ ],
164
+ },
165
+ },
166
+ ],
167
+ });
168
+ });
169
+ });
170
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXlzcWwuc3BlYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL2FkYXB0ZXJzL215c3FsLnNwZWMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFDbkMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLE1BQU0sUUFBUSxDQUFBO0FBQzdDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxjQUFjLENBQUE7QUFDM0MsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0scUJBQXFCLENBQUE7QUFDN0QsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sb0JBQW9CLENBQUE7QUFDeEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLGlCQUFpQixFQUFFLE1BQU0sbUJBQW1CLENBQUE7QUFDeEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGFBQWEsQ0FBQTtBQUUzQyxZQUFZLEVBQUUsQ0FBQTtBQUVkLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFBO0FBRXhDLHNFQUFzRTtBQUN0RSxNQUFNLE9BQU8sR0FBRyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsQ0FBQTtBQUNsQyxNQUFNLE9BQU8sR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxDQUFBO0FBQzFDLE1BQU0sT0FBTyxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUE7QUFFckMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLGNBQWMsRUFBRSxHQUFHLEVBQUU7SUFDMUMsSUFBSSxDQUFDLElBQUk7UUFBRSxPQUFNO0lBRWpCLEVBQUUsQ0FBQyxxQkFBcUIsRUFBRSxLQUFLLElBQUksRUFBRTtRQUNuQyxNQUFNLE1BQU0sR0FBRyxFQUFFO2FBQ2QsU0FBUyxDQUFD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bCBmcm9tIFwibm9kZWpzLXBvbGFyc1wiXG5pbXBvcnQgeyBkZXNjcmliZSwgZXhwZWN0LCBpdCB9IGZyb20gXCJ2aXRlc3RcIlxuaW1wb3J0IHsgdXNlUmVjb3JkaW5nIH0gZnJvbSBcInZpdGVzdC1wb2xseVwiXG5pbXBvcnQgeyBsb2FkUGFja2FnZUZyb21EYXRhYmFzZSB9IGZyb20gXCIuLi9wYWNrYWdlL2luZGV4LnRzXCJcbmltcG9ydCB7IGluZmVyRGF0YWJhc2VTY2hlbWEgfSBmcm9tIFwiLi4vc2NoZW1hL2luZGV4LnRzXCJcbmltcG9ydCB7IGxvYWREYXRhYmFzZVRhYmxlLCBzYXZlRGF0YWJhc2VUYWJsZSB9IGZyb20gXCIuLi90YWJsZS9pbmRleC50c1wiXG5pbXBvcnQgeyBjcmVhdGVBZGFwdGVyIH0gZnJvbSBcIi4vY3JlYXRlLnRzXCJcblxudXNlUmVjb3JkaW5nKClcblxuY29uc3QgcGF0aCA9IHByb2Nlc3MuZW52LkRQS0lUX01ZU1FMX1VSTFxuXG4vLyBWaXRlc3QgcnVucyBpbi1maWxlIHRlc3RzIHNlcXVlbnRpYWxseSBzbyB3ZSBjYW4gdXNlIHRoZSBzYW1lIHRhYmxlXG5jb25zdCBkaWFsZWN0ID0geyB0YWJsZTogXCJkcGtpdFwiIH1cbmNvbnN0IHJlY29yZDEgPSB7IGlkOiAxLCBuYW1lOiBcImVuZ2xpc2hcIiB9XG5jb25zdCByZWNvcmQyID0geyBpZDogMiwgbmFtZTogXCLkuK3mlodcIiB9XG5cbmRlc2NyaWJlLnNraXBJZighcGF0aCkoXCJNeXNxbEFkYXB0ZXJcIiwgKCkgPT4ge1xuICBpZiAoIXBhdGgpIHJldHVyblxuXG4gIGl0KFwic2hvdWxkIGluZmVyIHNjaGVtYVwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgc291cmNlID0gcGxcbiAgICAgIC5EYXRhRnJhbWUoW1xuICAgICAgICBwbC5TZXJpZXMoXCJzdHJpbmdcIiwgW1wic3RyaW5nXCJdLCBwbC5VdGY4KSxcbiAgICAgICAgcGwuU2VyaWVzKFwiaW50ZWdlclwiLCBbMV0sIHBsLkludDMyKSxcbiAgICAgICAgcGwuU2VyaWVzKFwibnVtYmVyXCIsIFsxLjFdLCBwbC5GbG9hdDY0KSxcbiAgICAgIF0pXG4gICAgICAubGF6eSgpXG5cbiAgICBhd2FpdCBzYXZlRGF0YWJhc2VUYWJsZShzb3VyY2UsIHtcbiAgICAgIHBhdGgsXG4gICAgICBkaWFsZWN0LFxuICAgICAgZm9ybWF0OiBcIm15c3FsXCIsXG4gICAgICBvdmVyd3JpdGU6IHRydWUsXG4gICAgfSlcblxuICAgIGNvbnN0IHNjaGVtYSA9IGF3YWl0IGluZmVyRGF0YWJhc2VTY2hlbWEoe1xuICAgICAgcGF0aCxcbiAgICAgIGRpYWxlY3QsXG4gICAgICBmb3JtYXQ6IFwibXlzcWxcIixcbiAgICB9KVxuXG4gICAgZXhwZWN0KHNjaGVtYSkudG9FcXVhbCh7XG4gICAgICBmaWVsZHM6IFtcbiAgICAgICAgeyBuYW1lOiBcInN0cmluZ1wiLCB0eXBlOiBcInN0cmluZ1wiIH0sXG4gICAgICAgIHsgbmFtZTogXCJpbnRlZ2VyXCIsIHR5cGU6IFwiaW50ZWdlclwiIH0sXG4gICAgICAgIHsgbmFtZTogXCJudW1iZXJcIiwgdHlwZTogXCJudW1iZXJcIiB9LFxuICAgICAgXSxcbiAgICB9KVxuICB9KVxuXG4gIGl0KFwic2hvdWxkIHNhdmUvbG9hZCB0YWJsZVwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgc291cmNlID0gcGwuRGF0YUZyYW1lKFtyZWNvcmQxLCByZWNvcmQyXSkubGF6eSgpXG5cbiAgICBhd2FpdCBzYXZlRGF0YWJhc2VUYWJsZShzb3VyY2UsIHtcbiAgICAgIHBhdGgsXG4gICAgICBkaWFsZWN0LFxuICAgICAgZm9ybWF0OiBcIm15c3FsXCIsXG4gICAgICBvdmVyd3JpdGU6IHRydWUsXG4gICAgfSlcblxuICAgIGNvbnN0IHRhcmdldCA9IGF3YWl0IGxvYWREYXRhYmFzZVRhYmxlKHtcbiAgICAgIHBhdGgsXG4gICAgICBkaWFsZWN0LFxuICAgICAgZm9ybWF0OiBcIm15c3FsXCIsXG4gICAgfSlcblxuICAgIGV4cGVjdCgoYXdhaXQgdGFyZ2V0LmNvbGxlY3QoKSkudG9SZWNvcmRzKCkpLnRvRXF1YWwoW3JlY29yZDEsIHJlY29yZDJdKVxuICB9KVxuXG4gIGl0KFwic2hvdWxkIHNhdmUvbG9hZCB0YWJsZSB3aXRoIHZhcmlvdXMgZGF0YSB0eXBlc1wiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgc291cmNlID0gcGxcbiAgICAgIC5EYXRhRnJhbWUoW1xuICAgICAgICBwbC5TZXJpZXMoXCJhcnJheVwiLCBbXCJbMSwgMiwgM11cIl0sIHBsLlN0cmluZyksXG4gICAgICAgIHBsLlNlcmllcyhcImJvb2xlYW5cIiwgW3RydWVdLCBwbC5Cb29sKSxcbiAgICAgICAgcGwuU2VyaWVzKFwiZGF0ZVwiLCBbbmV3IERhdGUoRGF0ZS5VVEMoMjAyNSwgMCwgMSkpXSwgcGwuRGF0ZSksXG4gICAgICAgIHBsLlNlcmllcyhcImRhdGV0aW1lXCIsIFtuZXcgRGF0ZShEYXRlLlVUQygyMDI1LCAwLCAxKSldLCBwbC5EYXRldGltZSksXG4gICAgICAgIHBsLlNlcmllcyhcImR1cmF0aW9uXCIsIFtcIlAyM0RUMjNIXCJdLCBwbC5TdHJpbmcpLFxuICAgICAgICBwbC5TZXJpZXMoXCJnZW9qc29uXCIsIFsne1widmFsdWVcIjogMX0nXSwgcGwuU3RyaW5nKSxcbiAgICAgICAgcGwuU2VyaWVzKFwiZ2VvcG9pbnRcIiwgW1s0MC4wLCA1MC4wXV0sIHBsLkxpc3QocGwuRmxvYXQzMikpLFxuICAgICAgICBwbC5TZXJpZXMoXCJpbnRlZ2VyXCIsIFsxXSwgcGwuSW50MzIpLFxuICAgICAgICBwbC5TZXJpZXMoXCJsaXN0XCIsIFtbMS4wLCAyLjAsIDMuMF1dLCBwbC5MaXN0KHBsLkZsb2F0MzIpKSxcbiAgICAgICAgcGwuU2VyaWVzKFwibnVtYmVyXCIsIFsxLjFdLCBwbC5GbG9hdDY0KSxcbiAgICAgICAgcGwuU2VyaWVzKFwib2JqZWN0XCIsIFsne1widmFsdWVcIjogMX0nXSksXG4gICAgICAgIHBsLlNlcmllcyhcInN0cmluZ1wiLCBbXCJzdHJpbmdcIl0sIHBsLlN0cmluZyksXG4gICAgICAgIHBsLlNlcmllcyhcInRpbWVcIiwgW25ldyBEYXRlKERhdGUuVVRDKDIwMjUsIDAsIDEpKV0sIHBsLlRpbWUpLFxuICAgICAgICBwbC5TZXJpZXMoXCJ5ZWFyXCIsIFsyMDI1XSwgcGwuSW50MzIpLFxuICAgICAgICBwbC5TZXJpZXMoXCJ5ZWFybW9udGhcIiwgW1syMDI1LCAxXV0sIHBsLkxpc3QocGwuSW50MTYpKSxcbiAgICAgIF0pXG4gICAgICAubGF6eSgpXG5cbiAgICBhd2FpdCBzYXZlRGF0YWJhc2VUYWJsZShzb3VyY2UsIHtcbiAgICAgIHBhdGgsXG4gICAgICBkaWFsZWN0LFxuICAgICAgZm9ybWF0OiBcIm15c3FsXCIsXG4gICAgICBvdmVyd3JpdGU6IHRydWUsXG4gICAgICBmaWVsZFR5cGVzOiB7XG4gICAgICAgIGdlb2pzb246IFwiZ2VvanNvblwiLFxuICAgICAgICBnZW9wb2ludDogXCJnZW9wb2ludFwiLFxuICAgICAgICBsaXN0OiBcImxpc3RcIixcbiAgICAgICAgb2JqZWN0OiBcIm9iamVjdFwiLFxuICAgICAgICAvLyBUT0RPOiBSZW1vdmUgdGltZSBhZnRlcjpcbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3BvbGEtcnMvbm9kZWpzLXBvbGFycy9pc3N1ZXMvMzY0XG4gICAgICAgIHRpbWU6IFwidGltZVwiLFxuICAgICAgICB5ZWFyOiBcInllYXJcIixcbiAgICAgICAgeWVhcm1vbnRoOiBcInllYXJtb250aFwiLFxuICAgICAgfSxcbiAgICB9KVxuXG4gICAgY29uc3QgdGFyZ2V0ID0gYXdhaXQgbG9hZERhdGFiYXNlVGFibGUoXG4gICAgICB7IHBhdGgsIGRpYWxlY3QsIGZvcm1hdDogXCJteXNxbFwiIH0sXG4gICAgICB7IGRlbm9ybWFsaXplZDogdHJ1ZSB9LFxuICAgIClcblxuICAgIGV4cGVjdCgoYXdhaXQgdGFyZ2V0LmNvbGxlY3QoKSkudG9SZWNvcmRzKCkpLnRvRXF1YWwoW1xuICAgICAge1xuICAgICAgICBhcnJheTogXCJbMSwgMiwgM11cIixcbiAgICAgICAgYm9vbGVhbjogMSxcbiAgICAgICAgZGF0ZTogXCIyMDI1LTAxLTAxXCIsXG4gICAgICAgIGRhdGV0aW1lOiBuZXcgRGF0ZShEYXRlLlVUQygyMDI1LCAwLCAxKSksXG4gICAgICAgIGR1cmF0aW9uOiBcIlAyM0RUMjNIXCIsXG4gICAgICAgIGdlb2pzb246ICd7XCJ2YWx1ZVwiOiAxfScsXG4gICAgICAgIGdlb3BvaW50OiBcIjQwLjAsNTAuMFwiLFxuICAgICAgICBpbnRlZ2VyOiAxLFxuICAgICAgICBsaXN0OiBcIjEuMCwyLjAsMy4wXCIsXG4gICAgICAgIG51bWJlcjogMS4xLFxuICAgICAgICBvYmplY3Q6ICd7XCJ2YWx1ZVwiOiAxfScsXG4gICAgICAgIHN0cmluZzogXCJzdHJpbmdcIixcbiAgICAgICAgdGltZTogXCIwMDowMDowMFwiLFxuICAgICAgICB5ZWFyOiAyMDI1LFxuICAgICAgICB5ZWFybW9udGg6IFwiMjAyNS0wMVwiLFxuICAgICAgfSxcbiAgICBdKVxuICB9KVxuXG4gIGl0KFwic2hvdWxkIGxvYWQgcGFja2FnZSBmcm9tIGRhdGFiYXNlXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBhZGFwdGVyID0gY3JlYXRlQWRhcHRlcihcIm15c3FsXCIpXG4gICAgY29uc3QgZGF0YWJhc2UgPSBhd2FpdCBhZGFwdGVyLmNvbm5lY3REYXRhYmFzZShwYXRoKVxuXG4gICAgYXdhaXQgZGF0YWJhc2Uuc2NoZW1hLmRyb3BUYWJsZShcInRhYmxlMVwiKS5pZkV4aXN0cygpLmV4ZWN1dGUoKVxuICAgIGF3YWl0IGRhdGFiYXNlLnNjaGVtYVxuICAgICAgLmNyZWF0ZVRhYmxlKFwidGFibGUxXCIpXG4gICAgICAuaWZOb3RFeGlzdHMoKVxuICAgICAgLmFkZENvbHVtbihcImlkXCIsIFwiaW50ZWdlclwiLCBjb2x1bW4gPT4gY29sdW1uLm5vdE51bGwoKSlcbiAgICAgIC5hZGRDb2x1bW4oXCJuYW1lXCIsIFwidGV4dFwiKVxuICAgICAgLmV4ZWN1dGUoKVxuXG4gICAgYXdhaXQgZGF0YWJhc2Uuc2NoZW1hLmRyb3BUYWJsZShcInRhYmxlMlwiKS5pZkV4aXN0cygpLmV4ZWN1dGUoKVxuICAgIGF3YWl0IGRhdGFiYXNlLnNjaGVtYVxuICAgICAgLmNyZWF0ZVRhYmxlKFwidGFibGUyXCIpXG4gICAgICAuaWZOb3RFeGlzdHMoKVxuICAgICAgLmFkZENvbHVtbihcImlkXCIsIFwiaW50ZWdlclwiLCBjb2x1bW4gPT4gY29sdW1uLm5vdE51bGwoKSlcbiAgICAgIC5hZGRDb2x1bW4oXCJudW1iZXJcIiwgXCJudW1lcmljXCIpXG4gICAgICAuYWRkQ29sdW1uKFwiZGF0ZXRpbWVcIiwgXCJkYXRldGltZVwiKVxuICAgICAgLmV4ZWN1dGUoKVxuXG4gICAgY29uc3QgZGF0YXBhY2thZ2UgPSBhd2FpdCBsb2FkUGFja2FnZUZyb21EYXRhYmFzZShwYXRoLCB7XG4gICAgICBmb3JtYXQ6IFwibXlzcWxcIixcbiAgICAgIGluY2x1ZGVUYWJsZXM6IFtcInRhYmxlMVwiLCBcInRhYmxlMlwiXSxcbiAgICB9KVxuXG4gICAgZXhwZWN0KGRhdGFwYWNrYWdlKS50b0VxdWFsKHtcbiAgICAgIHJlc291cmNlczogW1xuICAgICAgICB7XG4gICAgICAgICAgcGF0aCxcbiAgICAgICAgICBuYW1lOiBcInRhYmxlMVwiLFxuICAgICAgICAgIGZvcm1hdDogXCJteXNxbFwiLFxuICAgICAgICAgIGRpYWxlY3Q6IHsgdGFibGU6IFwidGFibGUxXCIgfSxcbiAgICAgICAgICBzY2hlbWE6IHtcbiAgICAgICAgICAgIGZpZWxkczogW1xuICAgICAgICAgICAgICB7IG5hbWU6IFwiaWRcIiwgdHlwZTogXCJpbnRlZ2VyXCIsIGNvbnN0cmFpbnRzOiB7IHJlcXVpcmVkOiB0cnVlIH0gfSxcbiAgICAgICAgICAgICAgeyBuYW1lOiBcIm5hbWVcIiwgdHlwZTogXCJzdHJpbmdcIiB9LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgcGF0aCxcbiAgICAgICAgICBuYW1lOiBcInRhYmxlMlwiLFxuICAgICAgICAgIGZvcm1hdDogXCJteXNxbFwiLFxuICAgICAgICAgIGRpYWxlY3Q6IHsgdGFibGU6IFwidGFibGUyXCIgfSxcbiAgICAgICAgICBzY2hlbWE6IHtcbiAgICAgICAgICAgIGZpZWxkczogW1xuICAgICAgICAgICAgICB7IG5hbWU6IFwiaWRcIiwgdHlwZTogXCJpbnRlZ2VyXCIsIGNvbnN0cmFpbnRzOiB7IHJlcXVpcmVkOiB0cnVlIH0gfSxcbiAgICAgICAgICAgICAgeyBuYW1lOiBcIm51bWJlclwiLCB0eXBlOiBcIm51bWJlclwiIH0sXG4gICAgICAgICAgICAgIHsgbmFtZTogXCJkYXRldGltZVwiLCB0eXBlOiBcImRhdGV0aW1lXCIgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSlcbiAgfSlcbn0pXG4iXX0=
@@ -0,0 +1,10 @@
1
+ import type { FieldType } from "@frictionless-ts/metadata";
2
+ import { PostgresDialect } from "kysely";
3
+ import type { DatabaseType } from "../field/index.ts";
4
+ import { BaseAdapter } from "./base.ts";
5
+ export declare class PostgresqlAdapter extends BaseAdapter {
6
+ nativeTypes: ("string" | "number" | "boolean" | "integer" | "datetime" | "year")[];
7
+ createDialect(path: string): Promise<PostgresDialect>;
8
+ normalizeType(databaseType: DatabaseType): FieldType;
9
+ denormalizeType(fieldType: FieldType): DatabaseType;
10
+ }
@@ -0,0 +1,100 @@
1
+ import { PostgresDialect } from "kysely";
2
+ import { Pool } from "pg";
3
+ import { BaseAdapter } from "./base.js";
4
+ // TODO: Support more native types
5
+ export class PostgresqlAdapter extends BaseAdapter {
6
+ nativeTypes = [
7
+ "boolean",
8
+ "datetime",
9
+ "integer",
10
+ "number",
11
+ "string",
12
+ "year",
13
+ ];
14
+ async createDialect(path) {
15
+ return new PostgresDialect({
16
+ pool: new Pool({ connectionString: path }),
17
+ });
18
+ }
19
+ normalizeType(databaseType) {
20
+ switch (databaseType.toLowerCase()) {
21
+ case "smallint":
22
+ case "integer":
23
+ case "int":
24
+ case "int2":
25
+ case "int4":
26
+ case "int8":
27
+ case "bigint":
28
+ case "smallserial":
29
+ case "serial":
30
+ case "bigserial":
31
+ return "integer";
32
+ case "decimal":
33
+ case "numeric":
34
+ case "real":
35
+ case "float4":
36
+ case "double precision":
37
+ case "float8":
38
+ return "number";
39
+ case "boolean":
40
+ case "bool":
41
+ return "boolean";
42
+ case "char":
43
+ case "character":
44
+ case "varchar":
45
+ case "character varying":
46
+ case "text":
47
+ case "citext":
48
+ case "uuid":
49
+ return "string";
50
+ case "date":
51
+ return "date";
52
+ case "time":
53
+ case "time without time zone":
54
+ case "time with time zone":
55
+ case "timetz":
56
+ return "time";
57
+ case "timestamp":
58
+ case "timestamp without time zone":
59
+ case "timestamp with time zone":
60
+ case "timestamptz":
61
+ return "datetime";
62
+ case "interval":
63
+ return "duration";
64
+ case "json":
65
+ case "jsonb":
66
+ return "object";
67
+ case "point":
68
+ case "line":
69
+ case "lseg":
70
+ case "box":
71
+ case "path":
72
+ case "polygon":
73
+ case "circle":
74
+ case "geometry":
75
+ case "geography":
76
+ return "geojson";
77
+ default:
78
+ return "string";
79
+ }
80
+ }
81
+ denormalizeType(fieldType) {
82
+ switch (fieldType) {
83
+ case "boolean":
84
+ return "boolean";
85
+ case "datetime":
86
+ return "timestamp";
87
+ case "integer":
88
+ return "integer";
89
+ case "number":
90
+ return "double precision";
91
+ case "string":
92
+ return "text";
93
+ case "year":
94
+ return "integer";
95
+ default:
96
+ return "text";
97
+ }
98
+ }
99
+ }
100
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9zdGdyZXNxbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL2FkYXB0ZXJzL3Bvc3RncmVzcWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLFFBQVEsQ0FBQTtBQUN4QyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sSUFBSSxDQUFBO0FBRXpCLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxXQUFXLENBQUE7QUFFdkMsa0NBQWtDO0FBRWxDLE1BQU0sT0FBTyxpQkFBa0IsU0FBUSxXQUFXO0lBQ2hELFdBQVcsR0FBRztRQUNaLFNBQVM7UUFDVCxVQUFVO1FBQ1YsU0FBUztRQUNULFFBQVE7UUFDUixRQUFRO1FBQ1IsTUFBTTtLQUNlLENBQUE7SUFFdkIsS0FBSyxDQUFDLGFBQWEsQ0FBQyxJQUFZO1FBQzlCLE9BQU8sSUFBSSxlQUFlLENBQUM7WUFDekIsSUFBSSxFQUFFLElBQUksSUFBSSxDQUFDLEVBQUUsZ0JBQWdCLEVBQUUsSUFBSSxFQUFFLENBQUM7U0FDM0MsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUVELGFBQWEsQ0FBQyxZQUEwQjtRQUN0QyxRQUFRLFlBQVksQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDO1lBQ25DLEtBQUssVUFBVSxDQUFDO1lBQ2hCLEtBQUssU0FBUyxDQUFDO1lBQ2YsS0FBSyxLQUFLLENBQUM7WUFDWCxLQUFLLE1BQU0sQ0FBQztZQUNaLEtBQUssTUFBTSxDQUFDO1lBQ1osS0FBSyxNQUFNLENBQUM7WUFDWixLQUFLLFFBQVEsQ0FBQztZQUNkLEtBQUssYUFBYSxDQUFDO1lBQ25CLEtBQUssUUFBUSxDQUFDO1lBQ2QsS0FBSyxXQUFXO2dCQUNkLE9BQU8sU0FBUyxDQUFBO1lBQ2xCLEtBQUssU0FBUyxDQUFDO1lBQ2YsS0FBSyxTQUFTLENBQUM7WUFDZixLQUFLLE1BQU0sQ0FBQztZQUNaLEtBQUssUUFBUSxDQUFDO1lBQ2QsS0FBSyxrQkFBa0IsQ0FBQztZQUN4QixLQUFLLFFBQVE7Z0JBQ1gsT0FBTyxRQUFRLENBQUE7WUFDakIsS0FBSyxTQUFTLENBQUM7WUFDZixLQUFLLE1BQU07Z0JBQ1QsT0FBTyxTQUFTLENBQUE7WUFDbEIsS0FBSyxNQUFNLENBQUM7WUFDWixLQUFLLFdBQVcsQ0FBQztZQUNqQixLQUFLLFNBQVMsQ0FBQztZQUNmLEtBQUssbUJBQW1CLENBQUM7WUFDekIsS0FBSyxNQUFNLENBQUM7WUFDWixLQUFLLFFBQVEsQ0FBQztZQUNkLEtBQUssTUFBTTtnQkFDVCxPQUFPLFFBQVEsQ0FBQTtZQUNqQixLQUFLLE1BQU07Z0JBQ1QsT0FBTyxNQUFNLENBQUE7WUFDZixLQUFLLE1BQU0sQ0FBQztZQUNaLEtBQUssd0JBQXdCLENBQUM7WUFDOUIsS0FBSyxxQkFBcUIsQ0FBQztZQUMzQixLQUFLLFFBQVE7Z0JBQ1gsT0FBTyxNQUFNLENBQUE7WUFDZixLQUFLLFdBQVcsQ0FBQztZQUNqQixLQUFLLDZCQUE2QixDQUFDO1lBQ25DLEtBQUssMEJBQTBCLENBQUM7WUFDaEMsS0FBSyxhQUFhO2dCQUNoQixPQUFPLFVBQVUsQ0FBQTtZQUNuQixLQUFLLFVBQVU7Z0JBQ2IsT0FBTyxVQUFVLENBQUE7WUFDbkIsS0FBSyxNQUFNLENBQUM7WUFDWixLQUFLLE9BQU87Z0JBQ1YsT0FBTyxRQUFRLENBQUE7WUFDakIsS0FBSyxPQUFPLENBQUM7WUFDYixLQUFLLE1BQU0sQ0FBQztZQUNaLEtBQUssTUFBTSxDQUFDO1lBQ1osS0FBSyxLQUFLLENBQUM7WUFDWCxLQUFLLE1BQU0sQ0FBQztZQUNaLEtBQUssU0FBUyxDQUFDO1lBQ2YsS0FBSyxRQUFRLENBQUM7WUFDZCxLQUFLLFVBQVUsQ0FBQztZQUNoQixLQUFLLFdBQVc7Z0JBQ2QsT0FBTyxTQUFTLENBQUE7WUFDbEI7Z0JBQ0UsT0FBTyxRQUFRLENBQUE7UUFDbkIsQ0FBQztJQUNILENBQUM7SUFFRCxlQUFlLENBQUMsU0FBb0I7UUFDbEMsUUFBUSxTQUFTLEVBQUUsQ0FBQztZQUNsQixLQUFLLFNBQVM7Z0JBQ1osT0FBTyxTQUFTLENBQUE7WUFDbEIsS0FBSyxVQUFVO2dCQUNiLE9BQU8sV0FBVyxDQUFBO1lBQ3BCLEtBQUssU0FBUztnQkFDWixPQUFPLFNBQVMsQ0FBQTtZQUNsQixLQUFLLFFBQVE7Z0JBQ1gsT0FBTyxrQkFBa0IsQ0FBQTtZQUMzQixLQUFLLFFBQVE7Z0JBQ1gsT0FBTyxNQUFNLENBQUE7WUFDZixLQUFLLE1BQU07Z0JBQ1QsT0FBTyxTQUFTLENBQUE7WUFDbEI7Z0JBQ0UsT0FBTyxNQUFNLENBQUE7UUFDakIsQ0FBQztJQUNILENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRmllbGRUeXBlIH0gZnJvbSBcIkBmcmljdGlvbmxlc3MtdHMvbWV0YWRhdGFcIlxuaW1wb3J0IHsgUG9zdGdyZXNEaWFsZWN0IH0gZnJvbSBcImt5c2VseVwiXG5pbXBvcnQgeyBQb29sIH0gZnJvbSBcInBnXCJcbmltcG9ydCB0eXBlIHsgRGF0YWJhc2VUeXBlIH0gZnJvbSBcIi4uL2ZpZWxkL2luZGV4LnRzXCJcbmltcG9ydCB7IEJhc2VBZGFwdGVyIH0gZnJvbSBcIi4vYmFzZS50c1wiXG5cbi8vIFRPRE86IFN1cHBvcnQgbW9yZSBuYXRpdmUgdHlwZXNcblxuZXhwb3J0IGNsYXNzIFBvc3RncmVzcWxBZGFwdGVyIGV4dGVuZHMgQmFzZUFkYXB0ZXIge1xuICBuYXRpdmVUeXBlcyA9IFtcbiAgICBcImJvb2xlYW5cIixcbiAgICBcImRhdGV0aW1lXCIsXG4gICAgXCJpbnRlZ2VyXCIsXG4gICAgXCJudW1iZXJcIixcbiAgICBcInN0cmluZ1wiLFxuICAgIFwieWVhclwiLFxuICBdIHNhdGlzZmllcyBGaWVsZFR5cGVbXVxuXG4gIGFzeW5jIGNyZWF0ZURpYWxlY3QocGF0aDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIG5ldyBQb3N0Z3Jlc0RpYWxlY3Qoe1xuICAgICAgcG9vbDogbmV3IFBvb2woeyBjb25uZWN0aW9uU3RyaW5nOiBwYXRoIH0pLFxuICAgIH0pXG4gIH1cblxuICBub3JtYWxpemVUeXBlKGRhdGFiYXNlVHlwZTogRGF0YWJhc2VUeXBlKTogRmllbGRUeXBlIHtcbiAgICBzd2l0Y2ggKGRhdGFiYXNlVHlwZS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICBjYXNlIFwic21hbGxpbnRcIjpcbiAgICAgIGNhc2UgXCJpbnRlZ2VyXCI6XG4gICAgICBjYXNlIFwiaW50XCI6XG4gICAgICBjYXNlIFwiaW50MlwiOlxuICAgICAgY2FzZSBcImludDRcIjpcbiAgICAgIGNhc2UgXCJpbnQ4XCI6XG4gICAgICBjYXNlIFwiYmlnaW50XCI6XG4gICAgICBjYXNlIFwic21hbGxzZXJpYWxcIjpcbiAgICAgIGNhc2UgXCJzZXJpYWxcIjpcbiAgICAgIGNhc2UgXCJiaWdzZXJpYWxcIjpcbiAgICAgICAgcmV0dXJuIFwiaW50ZWdlclwiXG4gICAgICBjYXNlIFwiZGVjaW1hbFwiOlxuICAgICAgY2FzZSBcIm51bWVyaWNcIjpcbiAgICAgIGNhc2UgXCJyZWFsXCI6XG4gICAgICBjYXNlIFwiZmxvYXQ0XCI6XG4gICAgICBjYXNlIFwiZG91YmxlIHByZWNpc2lvblwiOlxuICAgICAgY2FzZSBcImZsb2F0OFwiOlxuICAgICAgICByZXR1cm4gXCJudW1iZXJcIlxuICAgICAgY2FzZSBcImJvb2xlYW5cIjpcbiAgICAgIGNhc2UgXCJib29sXCI6XG4gICAgICAgIHJldHVybiBcImJvb2xlYW5cIlxuICAgICAgY2FzZSBcImNoYXJcIjpcbiAgICAgIGNhc2UgXCJjaGFyYWN0ZXJcIjpcbiAgICAgIGNhc2UgXCJ2YXJjaGFyXCI6XG4gICAgICBjYXNlIFwiY2hhcmFjdGVyIHZhcnlpbmdcIjpcbiAgICAgIGNhc2UgXCJ0ZXh0XCI6XG4gICAgICBjYXNlIFwiY2l0ZXh0XCI6XG4gICAgICBjYXNlIFwidXVpZFwiOlxuICAgICAgICByZXR1cm4gXCJzdHJpbmdcIlxuICAgICAgY2FzZSBcImRhdGVcIjpcbiAgICAgICAgcmV0dXJuIFwiZGF0ZVwiXG4gICAgICBjYXNlIFwidGltZVwiOlxuICAgICAgY2FzZSBcInRpbWUgd2l0aG91dCB0aW1lIHpvbmVcIjpcbiAgICAgIGNhc2UgXCJ0aW1lIHdpdGggdGltZSB6b25lXCI6XG4gICAgICBjYXNlIFwidGltZXR6XCI6XG4gICAgICAgIHJldHVybiBcInRpbWVcIlxuICAgICAgY2FzZSBcInRpbWVzdGFtcFwiOlxuICAgICAgY2FzZSBcInRpbWVzdGFtcCB3aXRob3V0IHRpbWUgem9uZVwiOlxuICAgICAgY2FzZSBcInRpbWVzdGFtcCB3aXRoIHRpbWUgem9uZVwiOlxuICAgICAgY2FzZSBcInRpbWVzdGFtcHR6XCI6XG4gICAgICAgIHJldHVybiBcImRhdGV0aW1lXCJcbiAgICAgIGNhc2UgXCJpbnRlcnZhbFwiOlxuICAgICAgICByZXR1cm4gXCJkdXJhdGlvblwiXG4gICAgICBjYXNlIFwianNvblwiOlxuICAgICAgY2FzZSBcImpzb25iXCI6XG4gICAgICAgIHJldHVybiBcIm9iamVjdFwiXG4gICAgICBjYXNlIFwicG9pbnRcIjpcbiAgICAgIGNhc2UgXCJsaW5lXCI6XG4gICAgICBjYXNlIFwibHNlZ1wiOlxuICAgICAgY2FzZSBcImJveFwiOlxuICAgICAgY2FzZSBcInBhdGhcIjpcbiAgICAgIGNhc2UgXCJwb2x5Z29uXCI6XG4gICAgICBjYXNlIFwiY2lyY2xlXCI6XG4gICAgICBjYXNlIFwiZ2VvbWV0cnlcIjpcbiAgICAgIGNhc2UgXCJnZW9ncmFwaHlcIjpcbiAgICAgICAgcmV0dXJuIFwiZ2VvanNvblwiXG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gXCJzdHJpbmdcIlxuICAgIH1cbiAgfVxuXG4gIGRlbm9ybWFsaXplVHlwZShmaWVsZFR5cGU6IEZpZWxkVHlwZSk6IERhdGFiYXNlVHlwZSB7XG4gICAgc3dpdGNoIChmaWVsZFR5cGUpIHtcbiAgICAgIGNhc2UgXCJib29sZWFuXCI6XG4gICAgICAgIHJldHVybiBcImJvb2xlYW5cIlxuICAgICAgY2FzZSBcImRhdGV0aW1lXCI6XG4gICAgICAgIHJldHVybiBcInRpbWVzdGFtcFwiXG4gICAgICBjYXNlIFwiaW50ZWdlclwiOlxuICAgICAgICByZXR1cm4gXCJpbnRlZ2VyXCJcbiAgICAgIGNhc2UgXCJudW1iZXJcIjpcbiAgICAgICAgcmV0dXJuIFwiZG91YmxlIHByZWNpc2lvblwiXG4gICAgICBjYXNlIFwic3RyaW5nXCI6XG4gICAgICAgIHJldHVybiBcInRleHRcIlxuICAgICAgY2FzZSBcInllYXJcIjpcbiAgICAgICAgcmV0dXJuIFwiaW50ZWdlclwiXG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gXCJ0ZXh0XCJcbiAgICB9XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1 @@
1
+ export {};