@strapi/database 5.30.0 → 5.31.0

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 (91) hide show
  1. package/dist/connection.js.map +1 -1
  2. package/dist/connection.mjs.map +1 -1
  3. package/dist/dialects/dialect.js.map +1 -1
  4. package/dist/dialects/dialect.mjs.map +1 -1
  5. package/dist/dialects/index.js.map +1 -1
  6. package/dist/dialects/index.mjs.map +1 -1
  7. package/dist/dialects/mysql/database-inspector.js.map +1 -1
  8. package/dist/dialects/mysql/database-inspector.mjs.map +1 -1
  9. package/dist/dialects/mysql/index.js +1 -2
  10. package/dist/dialects/mysql/index.js.map +1 -1
  11. package/dist/dialects/mysql/index.mjs +1 -2
  12. package/dist/dialects/mysql/index.mjs.map +1 -1
  13. package/dist/dialects/mysql/schema-inspector.js.map +1 -1
  14. package/dist/dialects/mysql/schema-inspector.mjs.map +1 -1
  15. package/dist/dialects/postgresql/index.js.map +1 -1
  16. package/dist/dialects/postgresql/index.mjs.map +1 -1
  17. package/dist/dialects/postgresql/schema-inspector.js.map +1 -1
  18. package/dist/dialects/postgresql/schema-inspector.mjs.map +1 -1
  19. package/dist/dialects/sqlite/index.js.map +1 -1
  20. package/dist/dialects/sqlite/index.mjs.map +1 -1
  21. package/dist/dialects/sqlite/schema-inspector.js.map +1 -1
  22. package/dist/dialects/sqlite/schema-inspector.mjs.map +1 -1
  23. package/dist/entity-manager/index.js.map +1 -1
  24. package/dist/entity-manager/index.mjs.map +1 -1
  25. package/dist/entity-manager/morph-relations.js.map +1 -1
  26. package/dist/entity-manager/morph-relations.mjs.map +1 -1
  27. package/dist/entity-manager/regular-relations.d.ts +1 -0
  28. package/dist/entity-manager/regular-relations.d.ts.map +1 -1
  29. package/dist/errors/database.js.map +1 -1
  30. package/dist/errors/database.mjs.map +1 -1
  31. package/dist/errors/invalid-date.js.map +1 -1
  32. package/dist/errors/invalid-date.mjs.map +1 -1
  33. package/dist/errors/invalid-datetime.js.map +1 -1
  34. package/dist/errors/invalid-datetime.mjs.map +1 -1
  35. package/dist/errors/invalid-relation.js.map +1 -1
  36. package/dist/errors/invalid-relation.mjs.map +1 -1
  37. package/dist/errors/invalid-time.js.map +1 -1
  38. package/dist/errors/invalid-time.mjs.map +1 -1
  39. package/dist/errors/not-null.js.map +1 -1
  40. package/dist/errors/not-null.mjs.map +1 -1
  41. package/dist/fields/field.js.map +1 -1
  42. package/dist/fields/field.mjs.map +1 -1
  43. package/dist/fields/index.js.map +1 -1
  44. package/dist/fields/index.mjs.map +1 -1
  45. package/dist/fields/number.js.map +1 -1
  46. package/dist/fields/number.mjs.map +1 -1
  47. package/dist/fields/shared/parsers.js.map +1 -1
  48. package/dist/fields/shared/parsers.mjs.map +1 -1
  49. package/dist/index.js.map +1 -1
  50. package/dist/index.mjs.map +1 -1
  51. package/dist/metadata/metadata.js.map +1 -1
  52. package/dist/metadata/metadata.mjs.map +1 -1
  53. package/dist/metadata/relations.js.map +1 -1
  54. package/dist/metadata/relations.mjs.map +1 -1
  55. package/dist/migrations/internal-migrations/5.0.0-01-convert-identifiers-long-than-max-length.js.map +1 -1
  56. package/dist/migrations/internal-migrations/5.0.0-01-convert-identifiers-long-than-max-length.mjs.map +1 -1
  57. package/dist/migrations/internal-migrations/5.0.0-02-document-id.js.map +1 -1
  58. package/dist/migrations/internal-migrations/5.0.0-02-document-id.mjs.map +1 -1
  59. package/dist/migrations/internal-migrations/5.0.0-05-drop-slug-unique-index.js.map +1 -1
  60. package/dist/migrations/internal-migrations/5.0.0-05-drop-slug-unique-index.mjs.map +1 -1
  61. package/dist/migrations/logger.js.map +1 -1
  62. package/dist/migrations/logger.mjs.map +1 -1
  63. package/dist/query/helpers/join.js.map +1 -1
  64. package/dist/query/helpers/join.mjs.map +1 -1
  65. package/dist/query/helpers/order-by.js.map +1 -1
  66. package/dist/query/helpers/order-by.mjs.map +1 -1
  67. package/dist/query/helpers/populate/apply.js.map +1 -1
  68. package/dist/query/helpers/populate/apply.mjs.map +1 -1
  69. package/dist/query/helpers/search.js.map +1 -1
  70. package/dist/query/helpers/search.mjs.map +1 -1
  71. package/dist/query/helpers/streams/readable.js.map +1 -1
  72. package/dist/query/helpers/streams/readable.mjs.map +1 -1
  73. package/dist/query/helpers/where.js.map +1 -1
  74. package/dist/query/helpers/where.mjs.map +1 -1
  75. package/dist/query/query-builder.js.map +1 -1
  76. package/dist/query/query-builder.mjs.map +1 -1
  77. package/dist/repairs/operations/remove-orphan-morph-types.js.map +1 -1
  78. package/dist/repairs/operations/remove-orphan-morph-types.mjs.map +1 -1
  79. package/dist/schema/builder.js.map +1 -1
  80. package/dist/schema/builder.mjs.map +1 -1
  81. package/dist/schema/schema.js.map +1 -1
  82. package/dist/schema/schema.mjs.map +1 -1
  83. package/dist/utils/identifiers/hash.js.map +1 -1
  84. package/dist/utils/identifiers/hash.mjs.map +1 -1
  85. package/dist/utils/identifiers/index.js +2 -4
  86. package/dist/utils/identifiers/index.js.map +1 -1
  87. package/dist/utils/identifiers/index.mjs +2 -4
  88. package/dist/utils/identifiers/index.mjs.map +1 -1
  89. package/dist/utils/knex.js.map +1 -1
  90. package/dist/utils/knex.mjs.map +1 -1
  91. package/package.json +5 -5
@@ -1 +1 @@
1
- {"version":3,"file":"schema-inspector.mjs","sources":["../../../src/dialects/postgresql/schema-inspector.ts"],"sourcesContent":["import type { Database } from '../..';\nimport type { Schema, Column, Index, ForeignKey } from '../../schema/types';\nimport type { SchemaInspector } from '../dialect';\n\ninterface RawTable {\n table_name: string;\n}\n\ninterface RawColumn {\n data_type: string;\n column_name: string;\n character_maximum_length: number;\n column_default: string;\n is_nullable: string;\n}\n\ninterface RawIndex {\n indexrelid: string;\n index_name: string;\n column_name: string;\n is_unique: boolean;\n is_primary: boolean;\n}\n\ninterface RawForeignKey {\n constraint_name: string;\n}\n\nconst SQL_QUERIES = {\n TABLE_LIST: /* sql */ `\n SELECT *\n FROM information_schema.tables\n WHERE\n table_schema = ?\n AND table_type = 'BASE TABLE'\n AND table_name != 'geometry_columns'\n AND table_name != 'spatial_ref_sys';\n `,\n LIST_COLUMNS: /* sql */ `\n SELECT data_type, column_name, character_maximum_length, column_default, is_nullable\n FROM information_schema.columns\n WHERE table_schema = ? AND table_name = ?;\n `,\n INDEX_LIST: /* sql */ `\n SELECT\n ix.indexrelid,\n i.relname as index_name,\n a.attname as column_name,\n ix.indisunique as is_unique,\n ix.indisprimary as is_primary\n FROM\n pg_class t,\n pg_namespace s,\n pg_class i,\n pg_index ix,\n pg_attribute a\n WHERE\n t.oid = ix.indrelid\n AND i.oid = ix.indexrelid\n AND a.attrelid = t.oid\n AND a.attnum = ANY(ix.indkey)\n AND t.relkind = 'r'\n AND t.relnamespace = s.oid\n AND s.nspname = ?\n AND t.relname = ?;\n `,\n FOREIGN_KEY_LIST: /* sql */ `\n SELECT\n tco.\"constraint_name\" as constraint_name\n FROM information_schema.table_constraints tco\n WHERE\n tco.constraint_type = 'FOREIGN KEY'\n AND tco.constraint_schema = ?\n AND tco.table_name = ?\n `,\n FOREIGN_KEY_REFERENCES: /* sql */ `\n SELECT\n kcu.\"constraint_name\" as constraint_name,\n kcu.\"column_name\" as column_name\n\n FROM information_schema.key_column_usage kcu\n WHERE kcu.constraint_name=ANY(?)\n AND kcu.table_schema = ?\n AND kcu.table_name = ?;\n `,\n\n FOREIGN_KEY_REFERENCES_CONSTRAIN: /* sql */ `\n SELECT\n rco.update_rule as on_update,\n rco.delete_rule as on_delete,\n rco.\"unique_constraint_name\" as unique_constraint_name\n FROM information_schema.referential_constraints rco\n WHERE rco.constraint_name=ANY(?)\n AND rco.constraint_schema = ?\n`,\n FOREIGN_KEY_REFERENCES_CONSTRAIN_RFERENCE: /* sql */ `\n SELECT\n rel_kcu.\"table_name\" as foreign_table,\n rel_kcu.\"column_name\" as fk_column_name\n FROM information_schema.key_column_usage rel_kcu\n WHERE rel_kcu.constraint_name=?\n AND rel_kcu.table_schema = ?\n`,\n};\n\nconst toStrapiType = (column: RawColumn) => {\n const rootType = column.data_type.toLowerCase().match(/[^(), ]+/)?.[0];\n\n switch (rootType) {\n case 'integer': {\n // find a way to figure out the increments\n return { type: 'integer' };\n }\n case 'text': {\n return { type: 'text', args: ['longtext'] };\n }\n case 'boolean': {\n return { type: 'boolean' };\n }\n case 'character': {\n return { type: 'string', args: [column.character_maximum_length] };\n }\n case 'timestamp': {\n return { type: 'datetime', args: [{ useTz: false, precision: 6 }] };\n }\n case 'date': {\n return { type: 'date' };\n }\n case 'time': {\n return { type: 'time', args: [{ precision: 3 }] };\n }\n case 'numeric': {\n return { type: 'decimal', args: [10, 2] };\n }\n case 'real':\n case 'double': {\n return { type: 'double' };\n }\n case 'bigint': {\n return { type: 'bigInteger' };\n }\n case 'jsonb': {\n return { type: 'jsonb' };\n }\n default: {\n return { type: 'specificType', args: [column.data_type] };\n }\n }\n};\n\nconst getIndexType = (index: RawIndex) => {\n if (index.is_primary) {\n return 'primary';\n }\n\n if (index.is_unique) {\n return 'unique';\n }\n};\n\nexport default class PostgresqlSchemaInspector implements SchemaInspector {\n db: Database;\n\n constructor(db: Database) {\n this.db = db;\n }\n\n async getSchema() {\n const schema: Schema = { tables: [] };\n\n const tables = await this.getTables();\n\n schema.tables = await Promise.all(\n tables.map(async (tableName) => {\n const columns = await this.getColumns(tableName);\n const indexes = await this.getIndexes(tableName);\n const foreignKeys = await this.getForeignKeys(tableName);\n\n return {\n name: tableName,\n columns,\n indexes,\n foreignKeys,\n };\n })\n );\n\n return schema;\n }\n\n getDatabaseSchema(): string {\n return this.db.getSchemaName() || 'public';\n }\n\n async getTables(): Promise<string[]> {\n const { rows } = await this.db.connection.raw<{ rows: RawTable[] }>(SQL_QUERIES.TABLE_LIST, [\n this.getDatabaseSchema(),\n ]);\n\n return rows.map((row) => row.table_name);\n }\n\n async getColumns(tableName: string): Promise<Column[]> {\n const { rows } = await this.db.connection.raw<{ rows: RawColumn[] }>(SQL_QUERIES.LIST_COLUMNS, [\n this.getDatabaseSchema(),\n tableName,\n ]);\n\n return rows.map((row) => {\n const { type, args = [], ...rest } = toStrapiType(row);\n\n const defaultTo =\n row.column_default && row.column_default.includes('nextval(') ? null : row.column_default;\n\n return {\n type,\n args,\n defaultTo,\n name: row.column_name,\n notNullable: row.is_nullable === 'NO',\n unsigned: false,\n ...rest,\n };\n });\n }\n\n async getIndexes(tableName: string): Promise<Index[]> {\n const { rows } = await this.db.connection.raw<{ rows: RawIndex[] }>(SQL_QUERIES.INDEX_LIST, [\n this.getDatabaseSchema(),\n tableName,\n ]);\n\n const ret: Record<RawIndex['indexrelid'], Index> = {};\n\n for (const index of rows) {\n if (index.column_name === 'id') {\n continue;\n }\n\n if (!ret[index.indexrelid]) {\n ret[index.indexrelid] = {\n columns: [index.column_name],\n name: index.index_name,\n type: getIndexType(index),\n };\n } else {\n ret[index.indexrelid].columns.push(index.column_name);\n }\n }\n\n return Object.values(ret);\n }\n\n async getForeignKeys(tableName: string): Promise<ForeignKey[]> {\n const { rows } = await this.db.connection.raw<{ rows: RawForeignKey[] }>(\n SQL_QUERIES.FOREIGN_KEY_LIST,\n [this.getDatabaseSchema(), tableName]\n );\n\n const ret: Record<RawForeignKey['constraint_name'], ForeignKey> = {};\n\n for (const fk of rows) {\n ret[fk.constraint_name] = {\n name: fk.constraint_name,\n columns: [],\n referencedColumns: [],\n referencedTable: null,\n onUpdate: null,\n onDelete: null,\n } as unknown as ForeignKey;\n }\n\n const constraintNames = Object.keys(ret);\n const dbSchema = this.getDatabaseSchema();\n if (constraintNames.length > 0) {\n const { rows: fkReferences } = await this.db.connection.raw(\n SQL_QUERIES.FOREIGN_KEY_REFERENCES,\n [[constraintNames], dbSchema, tableName]\n );\n\n for (const fkReference of fkReferences) {\n ret[fkReference.constraint_name].columns.push(fkReference.column_name);\n\n const { rows: fkReferencesConstraint } = await this.db.connection.raw(\n SQL_QUERIES.FOREIGN_KEY_REFERENCES_CONSTRAIN,\n [[fkReference.constraint_name], dbSchema]\n );\n\n for (const fkReferenceC of fkReferencesConstraint) {\n const { rows: fkReferencesConstraintReferece } = await this.db.connection.raw(\n SQL_QUERIES.FOREIGN_KEY_REFERENCES_CONSTRAIN_RFERENCE,\n [fkReferenceC.unique_constraint_name, dbSchema]\n );\n for (const fkReferenceConst of fkReferencesConstraintReferece) {\n ret[fkReference.constraint_name].referencedTable = fkReferenceConst.foreign_table;\n ret[fkReference.constraint_name].referencedColumns.push(\n fkReferenceConst.fk_column_name\n );\n }\n ret[fkReference.constraint_name].onUpdate = fkReferenceC.on_update.toUpperCase();\n ret[fkReference.constraint_name].onDelete = fkReferenceC.on_delete.toUpperCase();\n }\n }\n }\n\n return Object.values(ret);\n }\n}\n"],"names":["SQL_QUERIES","TABLE_LIST","LIST_COLUMNS","INDEX_LIST","FOREIGN_KEY_LIST","FOREIGN_KEY_REFERENCES","FOREIGN_KEY_REFERENCES_CONSTRAIN","FOREIGN_KEY_REFERENCES_CONSTRAIN_RFERENCE","toStrapiType","column","rootType","data_type","toLowerCase","match","type","args","character_maximum_length","useTz","precision","getIndexType","index","is_primary","is_unique","PostgresqlSchemaInspector","getSchema","schema","tables","getTables","Promise","all","map","tableName","columns","getColumns","indexes","getIndexes","foreignKeys","getForeignKeys","name","getDatabaseSchema","db","getSchemaName","rows","connection","raw","row","table_name","rest","defaultTo","column_default","includes","column_name","notNullable","is_nullable","unsigned","ret","indexrelid","index_name","push","Object","values","fk","constraint_name","referencedColumns","referencedTable","onUpdate","onDelete","constraintNames","keys","dbSchema","length","fkReferences","fkReference","fkReferencesConstraint","fkReferenceC","fkReferencesConstraintReferece","unique_constraint_name","fkReferenceConst","foreign_table","fk_column_name","on_update","toUpperCase","on_delete","constructor"],"mappings":"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"}
1
+ {"version":3,"file":"schema-inspector.mjs","sources":["../../../src/dialects/postgresql/schema-inspector.ts"],"sourcesContent":["import type { Database } from '../..';\nimport type { Schema, Column, Index, ForeignKey } from '../../schema/types';\nimport type { SchemaInspector } from '../dialect';\n\ninterface RawTable {\n table_name: string;\n}\n\ninterface RawColumn {\n data_type: string;\n column_name: string;\n character_maximum_length: number;\n column_default: string;\n is_nullable: string;\n}\n\ninterface RawIndex {\n indexrelid: string;\n index_name: string;\n column_name: string;\n is_unique: boolean;\n is_primary: boolean;\n}\n\ninterface RawForeignKey {\n constraint_name: string;\n}\n\nconst SQL_QUERIES = {\n TABLE_LIST: /* sql */ `\n SELECT *\n FROM information_schema.tables\n WHERE\n table_schema = ?\n AND table_type = 'BASE TABLE'\n AND table_name != 'geometry_columns'\n AND table_name != 'spatial_ref_sys';\n `,\n LIST_COLUMNS: /* sql */ `\n SELECT data_type, column_name, character_maximum_length, column_default, is_nullable\n FROM information_schema.columns\n WHERE table_schema = ? AND table_name = ?;\n `,\n INDEX_LIST: /* sql */ `\n SELECT\n ix.indexrelid,\n i.relname as index_name,\n a.attname as column_name,\n ix.indisunique as is_unique,\n ix.indisprimary as is_primary\n FROM\n pg_class t,\n pg_namespace s,\n pg_class i,\n pg_index ix,\n pg_attribute a\n WHERE\n t.oid = ix.indrelid\n AND i.oid = ix.indexrelid\n AND a.attrelid = t.oid\n AND a.attnum = ANY(ix.indkey)\n AND t.relkind = 'r'\n AND t.relnamespace = s.oid\n AND s.nspname = ?\n AND t.relname = ?;\n `,\n FOREIGN_KEY_LIST: /* sql */ `\n SELECT\n tco.\"constraint_name\" as constraint_name\n FROM information_schema.table_constraints tco\n WHERE\n tco.constraint_type = 'FOREIGN KEY'\n AND tco.constraint_schema = ?\n AND tco.table_name = ?\n `,\n FOREIGN_KEY_REFERENCES: /* sql */ `\n SELECT\n kcu.\"constraint_name\" as constraint_name,\n kcu.\"column_name\" as column_name\n\n FROM information_schema.key_column_usage kcu\n WHERE kcu.constraint_name=ANY(?)\n AND kcu.table_schema = ?\n AND kcu.table_name = ?;\n `,\n\n FOREIGN_KEY_REFERENCES_CONSTRAIN: /* sql */ `\n SELECT\n rco.update_rule as on_update,\n rco.delete_rule as on_delete,\n rco.\"unique_constraint_name\" as unique_constraint_name\n FROM information_schema.referential_constraints rco\n WHERE rco.constraint_name=ANY(?)\n AND rco.constraint_schema = ?\n`,\n FOREIGN_KEY_REFERENCES_CONSTRAIN_RFERENCE: /* sql */ `\n SELECT\n rel_kcu.\"table_name\" as foreign_table,\n rel_kcu.\"column_name\" as fk_column_name\n FROM information_schema.key_column_usage rel_kcu\n WHERE rel_kcu.constraint_name=?\n AND rel_kcu.table_schema = ?\n`,\n};\n\nconst toStrapiType = (column: RawColumn) => {\n const rootType = column.data_type.toLowerCase().match(/[^(), ]+/)?.[0];\n\n switch (rootType) {\n case 'integer': {\n // find a way to figure out the increments\n return { type: 'integer' };\n }\n case 'text': {\n return { type: 'text', args: ['longtext'] };\n }\n case 'boolean': {\n return { type: 'boolean' };\n }\n case 'character': {\n return { type: 'string', args: [column.character_maximum_length] };\n }\n case 'timestamp': {\n return { type: 'datetime', args: [{ useTz: false, precision: 6 }] };\n }\n case 'date': {\n return { type: 'date' };\n }\n case 'time': {\n return { type: 'time', args: [{ precision: 3 }] };\n }\n case 'numeric': {\n return { type: 'decimal', args: [10, 2] };\n }\n case 'real':\n case 'double': {\n return { type: 'double' };\n }\n case 'bigint': {\n return { type: 'bigInteger' };\n }\n case 'jsonb': {\n return { type: 'jsonb' };\n }\n default: {\n return { type: 'specificType', args: [column.data_type] };\n }\n }\n};\n\nconst getIndexType = (index: RawIndex) => {\n if (index.is_primary) {\n return 'primary';\n }\n\n if (index.is_unique) {\n return 'unique';\n }\n};\n\nexport default class PostgresqlSchemaInspector implements SchemaInspector {\n db: Database;\n\n constructor(db: Database) {\n this.db = db;\n }\n\n async getSchema() {\n const schema: Schema = { tables: [] };\n\n const tables = await this.getTables();\n\n schema.tables = await Promise.all(\n tables.map(async (tableName) => {\n const columns = await this.getColumns(tableName);\n const indexes = await this.getIndexes(tableName);\n const foreignKeys = await this.getForeignKeys(tableName);\n\n return {\n name: tableName,\n columns,\n indexes,\n foreignKeys,\n };\n })\n );\n\n return schema;\n }\n\n getDatabaseSchema(): string {\n return this.db.getSchemaName() || 'public';\n }\n\n async getTables(): Promise<string[]> {\n const { rows } = await this.db.connection.raw<{ rows: RawTable[] }>(SQL_QUERIES.TABLE_LIST, [\n this.getDatabaseSchema(),\n ]);\n\n return rows.map((row) => row.table_name);\n }\n\n async getColumns(tableName: string): Promise<Column[]> {\n const { rows } = await this.db.connection.raw<{ rows: RawColumn[] }>(SQL_QUERIES.LIST_COLUMNS, [\n this.getDatabaseSchema(),\n tableName,\n ]);\n\n return rows.map((row) => {\n const { type, args = [], ...rest } = toStrapiType(row);\n\n const defaultTo =\n row.column_default && row.column_default.includes('nextval(') ? null : row.column_default;\n\n return {\n type,\n args,\n defaultTo,\n name: row.column_name,\n notNullable: row.is_nullable === 'NO',\n unsigned: false,\n ...rest,\n };\n });\n }\n\n async getIndexes(tableName: string): Promise<Index[]> {\n const { rows } = await this.db.connection.raw<{ rows: RawIndex[] }>(SQL_QUERIES.INDEX_LIST, [\n this.getDatabaseSchema(),\n tableName,\n ]);\n\n const ret: Record<RawIndex['indexrelid'], Index> = {};\n\n for (const index of rows) {\n if (index.column_name === 'id') {\n continue;\n }\n\n if (!ret[index.indexrelid]) {\n ret[index.indexrelid] = {\n columns: [index.column_name],\n name: index.index_name,\n type: getIndexType(index),\n };\n } else {\n ret[index.indexrelid].columns.push(index.column_name);\n }\n }\n\n return Object.values(ret);\n }\n\n async getForeignKeys(tableName: string): Promise<ForeignKey[]> {\n const { rows } = await this.db.connection.raw<{ rows: RawForeignKey[] }>(\n SQL_QUERIES.FOREIGN_KEY_LIST,\n [this.getDatabaseSchema(), tableName]\n );\n\n const ret: Record<RawForeignKey['constraint_name'], ForeignKey> = {};\n\n for (const fk of rows) {\n ret[fk.constraint_name] = {\n name: fk.constraint_name,\n columns: [],\n referencedColumns: [],\n referencedTable: null,\n onUpdate: null,\n onDelete: null,\n } as unknown as ForeignKey;\n }\n\n const constraintNames = Object.keys(ret);\n const dbSchema = this.getDatabaseSchema();\n if (constraintNames.length > 0) {\n const { rows: fkReferences } = await this.db.connection.raw(\n SQL_QUERIES.FOREIGN_KEY_REFERENCES,\n [[constraintNames], dbSchema, tableName]\n );\n\n for (const fkReference of fkReferences) {\n ret[fkReference.constraint_name].columns.push(fkReference.column_name);\n\n const { rows: fkReferencesConstraint } = await this.db.connection.raw(\n SQL_QUERIES.FOREIGN_KEY_REFERENCES_CONSTRAIN,\n [[fkReference.constraint_name], dbSchema]\n );\n\n for (const fkReferenceC of fkReferencesConstraint) {\n const { rows: fkReferencesConstraintReferece } = await this.db.connection.raw(\n SQL_QUERIES.FOREIGN_KEY_REFERENCES_CONSTRAIN_RFERENCE,\n [fkReferenceC.unique_constraint_name, dbSchema]\n );\n for (const fkReferenceConst of fkReferencesConstraintReferece) {\n ret[fkReference.constraint_name].referencedTable = fkReferenceConst.foreign_table;\n ret[fkReference.constraint_name].referencedColumns.push(\n fkReferenceConst.fk_column_name\n );\n }\n ret[fkReference.constraint_name].onUpdate = fkReferenceC.on_update.toUpperCase();\n ret[fkReference.constraint_name].onDelete = fkReferenceC.on_delete.toUpperCase();\n }\n }\n }\n\n return Object.values(ret);\n }\n}\n"],"names":["SQL_QUERIES","TABLE_LIST","LIST_COLUMNS","INDEX_LIST","FOREIGN_KEY_LIST","FOREIGN_KEY_REFERENCES","FOREIGN_KEY_REFERENCES_CONSTRAIN","FOREIGN_KEY_REFERENCES_CONSTRAIN_RFERENCE","toStrapiType","column","rootType","data_type","toLowerCase","match","type","args","character_maximum_length","useTz","precision","getIndexType","index","is_primary","is_unique","PostgresqlSchemaInspector","getSchema","schema","tables","getTables","Promise","all","map","tableName","columns","getColumns","indexes","getIndexes","foreignKeys","getForeignKeys","name","getDatabaseSchema","db","getSchemaName","rows","connection","raw","row","table_name","rest","defaultTo","column_default","includes","column_name","notNullable","is_nullable","unsigned","ret","indexrelid","index_name","push","Object","values","fk","constraint_name","referencedColumns","referencedTable","onUpdate","onDelete","constraintNames","keys","dbSchema","length","fkReferences","fkReference","fkReferencesConstraint","fkReferenceC","fkReferencesConstraintReferece","unique_constraint_name","fkReferenceConst","foreign_table","fk_column_name","on_update","toUpperCase","on_delete"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../src/dialects/sqlite/index.ts"],"sourcesContent":["import path from 'path';\nimport fse from 'fs-extra';\nimport type { Knex } from 'knex';\n\nimport * as errors from '../../errors';\nimport Dialect from '../dialect';\nimport SqliteSchemaInspector from './schema-inspector';\nimport type { Database } from '../..';\n\nconst UNSUPPORTED_OPERATORS = ['$jsonSupersetOf'];\n\nexport default class SqliteDialect extends Dialect {\n schemaInspector: SqliteSchemaInspector;\n\n constructor(db: Database) {\n super(db, 'sqlite');\n\n this.schemaInspector = new SqliteSchemaInspector(db);\n }\n\n configure(conn?: Knex.Sqlite3ConnectionConfig) {\n const connection =\n conn || (this.db.config.connection.connection as Knex.Sqlite3ConnectionConfig);\n if (typeof connection !== 'string') {\n connection.filename = path.resolve(connection.filename);\n }\n\n const dbDir = path.dirname(connection.filename);\n\n fse.ensureDirSync(dbDir);\n }\n\n useReturning() {\n return true;\n }\n\n async initialize(nativeConnection: unknown) {\n await this.db.connection.raw('pragma foreign_keys = on').connection(nativeConnection);\n }\n\n canAlterConstraints() {\n return false;\n }\n\n getSqlType(type: string) {\n switch (type) {\n case 'enum': {\n return 'text';\n }\n case 'double':\n case 'decimal': {\n return 'float';\n }\n case 'timestamp': {\n return 'datetime';\n }\n default: {\n return type;\n }\n }\n }\n\n supportsOperator(operator: string) {\n return !UNSUPPORTED_OPERATORS.includes(operator);\n }\n\n async startSchemaUpdate() {\n await this.db.connection.raw(`pragma foreign_keys = off`);\n }\n\n async endSchemaUpdate() {\n await this.db.connection.raw(`pragma foreign_keys = on`);\n }\n\n transformErrors(error: NodeJS.ErrnoException) {\n switch (error.errno) {\n case 19: {\n throw new errors.NotNullError(); // TODO: extract column name\n }\n default: {\n super.transformErrors(error);\n }\n }\n }\n\n canAddIncrements() {\n return false;\n }\n}\n"],"names":["UNSUPPORTED_OPERATORS","SqliteDialect","Dialect","configure","conn","connection","db","config","filename","path","resolve","dbDir","dirname","fse","ensureDirSync","useReturning","initialize","nativeConnection","raw","canAlterConstraints","getSqlType","type","supportsOperator","operator","includes","startSchemaUpdate","endSchemaUpdate","transformErrors","error","errno","errors","canAddIncrements","constructor","schemaInspector","SqliteSchemaInspector"],"mappings":";;;;;;;;AASA,MAAMA,qBAAwB,GAAA;AAAC,IAAA;AAAkB,CAAA;AAElC,MAAMC,aAAsBC,SAAAA,OAAAA,CAAAA;AASzCC,IAAAA,SAAAA,CAAUC,IAAmC,EAAE;QAC7C,MAAMC,UAAAA,GACJD,IAAS,IAAA,IAAI,CAACE,EAAE,CAACC,MAAM,CAACF,UAAU,CAACA,UAAU;QAC/C,IAAI,OAAOA,eAAe,QAAU,EAAA;AAClCA,YAAAA,UAAAA,CAAWG,QAAQ,GAAGC,IAAAA,CAAKC,OAAO,CAACL,WAAWG,QAAQ,CAAA;AACxD;AAEA,QAAA,MAAMG,KAAQF,GAAAA,IAAAA,CAAKG,OAAO,CAACP,WAAWG,QAAQ,CAAA;AAE9CK,QAAAA,GAAAA,CAAIC,aAAa,CAACH,KAAAA,CAAAA;AACpB;IAEAI,YAAe,GAAA;QACb,OAAO,IAAA;AACT;IAEA,MAAMC,UAAAA,CAAWC,gBAAyB,EAAE;QAC1C,MAAM,IAAI,CAACX,EAAE,CAACD,UAAU,CAACa,GAAG,CAAC,0BAA4Bb,CAAAA,CAAAA,UAAU,CAACY,gBAAAA,CAAAA;AACtE;IAEAE,mBAAsB,GAAA;QACpB,OAAO,KAAA;AACT;AAEAC,IAAAA,UAAAA,CAAWC,IAAY,EAAE;QACvB,OAAQA,IAAAA;YACN,KAAK,MAAA;AAAQ,gBAAA;oBACX,OAAO,MAAA;AACT;YACA,KAAK,QAAA;YACL,KAAK,SAAA;AAAW,gBAAA;oBACd,OAAO,OAAA;AACT;YACA,KAAK,WAAA;AAAa,gBAAA;oBAChB,OAAO,UAAA;AACT;AACA,YAAA;AAAS,gBAAA;oBACP,OAAOA,IAAAA;AACT;AACF;AACF;AAEAC,IAAAA,gBAAAA,CAAiBC,QAAgB,EAAE;QACjC,OAAO,CAACvB,qBAAsBwB,CAAAA,QAAQ,CAACD,QAAAA,CAAAA;AACzC;AAEA,IAAA,MAAME,iBAAoB,GAAA;QACxB,MAAM,IAAI,CAACnB,EAAE,CAACD,UAAU,CAACa,GAAG,CAAC,CAAC,yBAAyB,CAAC,CAAA;AAC1D;AAEA,IAAA,MAAMQ,eAAkB,GAAA;QACtB,MAAM,IAAI,CAACpB,EAAE,CAACD,UAAU,CAACa,GAAG,CAAC,CAAC,wBAAwB,CAAC,CAAA;AACzD;AAEAS,IAAAA,eAAAA,CAAgBC,KAA4B,EAAE;AAC5C,QAAA,OAAQA,MAAMC,KAAK;YACjB,KAAK,EAAA;AAAI,gBAAA;AACP,oBAAA,MAAM,IAAIC,OAAmB,EAAA,CAAA;AAC/B;AACA,YAAA;AAAS,gBAAA;AACP,oBAAA,KAAK,CAACH,eAAgBC,CAAAA,KAAAA,CAAAA;AACxB;AACF;AACF;IAEAG,gBAAmB,GAAA;QACjB,OAAO,KAAA;AACT;AAzEAC,IAAAA,WAAAA,CAAY1B,EAAY,CAAE;AACxB,QAAA,KAAK,CAACA,EAAI,EAAA,QAAA,CAAA;AAEV,QAAA,IAAI,CAAC2B,eAAe,GAAG,IAAIC,eAAsB5B,CAAAA,EAAAA,CAAAA;AACnD;AAsEF;;;;"}
1
+ {"version":3,"file":"index.js","sources":["../../../src/dialects/sqlite/index.ts"],"sourcesContent":["import path from 'path';\nimport fse from 'fs-extra';\nimport type { Knex } from 'knex';\n\nimport * as errors from '../../errors';\nimport Dialect from '../dialect';\nimport SqliteSchemaInspector from './schema-inspector';\nimport type { Database } from '../..';\n\nconst UNSUPPORTED_OPERATORS = ['$jsonSupersetOf'];\n\nexport default class SqliteDialect extends Dialect {\n schemaInspector: SqliteSchemaInspector;\n\n constructor(db: Database) {\n super(db, 'sqlite');\n\n this.schemaInspector = new SqliteSchemaInspector(db);\n }\n\n configure(conn?: Knex.Sqlite3ConnectionConfig) {\n const connection =\n conn || (this.db.config.connection.connection as Knex.Sqlite3ConnectionConfig);\n if (typeof connection !== 'string') {\n connection.filename = path.resolve(connection.filename);\n }\n\n const dbDir = path.dirname(connection.filename);\n\n fse.ensureDirSync(dbDir);\n }\n\n useReturning() {\n return true;\n }\n\n async initialize(nativeConnection: unknown) {\n await this.db.connection.raw('pragma foreign_keys = on').connection(nativeConnection);\n }\n\n canAlterConstraints() {\n return false;\n }\n\n getSqlType(type: string) {\n switch (type) {\n case 'enum': {\n return 'text';\n }\n case 'double':\n case 'decimal': {\n return 'float';\n }\n case 'timestamp': {\n return 'datetime';\n }\n default: {\n return type;\n }\n }\n }\n\n supportsOperator(operator: string) {\n return !UNSUPPORTED_OPERATORS.includes(operator);\n }\n\n async startSchemaUpdate() {\n await this.db.connection.raw(`pragma foreign_keys = off`);\n }\n\n async endSchemaUpdate() {\n await this.db.connection.raw(`pragma foreign_keys = on`);\n }\n\n transformErrors(error: NodeJS.ErrnoException) {\n switch (error.errno) {\n case 19: {\n throw new errors.NotNullError(); // TODO: extract column name\n }\n default: {\n super.transformErrors(error);\n }\n }\n }\n\n canAddIncrements() {\n return false;\n }\n}\n"],"names":["UNSUPPORTED_OPERATORS","SqliteDialect","Dialect","configure","conn","connection","db","config","filename","path","resolve","dbDir","dirname","fse","ensureDirSync","useReturning","initialize","nativeConnection","raw","canAlterConstraints","getSqlType","type","supportsOperator","operator","includes","startSchemaUpdate","endSchemaUpdate","transformErrors","error","errno","errors","canAddIncrements","schemaInspector","SqliteSchemaInspector"],"mappings":";;;;;;;;AASA,MAAMA,qBAAwB,GAAA;AAAC,IAAA;AAAkB,CAAA;AAElC,MAAMC,aAAsBC,SAAAA,OAAAA,CAAAA;AASzCC,IAAAA,SAAAA,CAAUC,IAAmC,EAAE;QAC7C,MAAMC,UAAAA,GACJD,IAAS,IAAA,IAAI,CAACE,EAAE,CAACC,MAAM,CAACF,UAAU,CAACA,UAAU;QAC/C,IAAI,OAAOA,eAAe,QAAU,EAAA;AAClCA,YAAAA,UAAAA,CAAWG,QAAQ,GAAGC,IAAAA,CAAKC,OAAO,CAACL,WAAWG,QAAQ,CAAA;AACxD;AAEA,QAAA,MAAMG,KAAQF,GAAAA,IAAAA,CAAKG,OAAO,CAACP,WAAWG,QAAQ,CAAA;AAE9CK,QAAAA,GAAAA,CAAIC,aAAa,CAACH,KAAAA,CAAAA;AACpB;IAEAI,YAAe,GAAA;QACb,OAAO,IAAA;AACT;IAEA,MAAMC,UAAAA,CAAWC,gBAAyB,EAAE;QAC1C,MAAM,IAAI,CAACX,EAAE,CAACD,UAAU,CAACa,GAAG,CAAC,0BAA4Bb,CAAAA,CAAAA,UAAU,CAACY,gBAAAA,CAAAA;AACtE;IAEAE,mBAAsB,GAAA;QACpB,OAAO,KAAA;AACT;AAEAC,IAAAA,UAAAA,CAAWC,IAAY,EAAE;QACvB,OAAQA,IAAAA;YACN,KAAK,MAAA;AAAQ,gBAAA;oBACX,OAAO,MAAA;AACT;YACA,KAAK,QAAA;YACL,KAAK,SAAA;AAAW,gBAAA;oBACd,OAAO,OAAA;AACT;YACA,KAAK,WAAA;AAAa,gBAAA;oBAChB,OAAO,UAAA;AACT;AACA,YAAA;AAAS,gBAAA;oBACP,OAAOA,IAAAA;AACT;AACF;AACF;AAEAC,IAAAA,gBAAAA,CAAiBC,QAAgB,EAAE;QACjC,OAAO,CAACvB,qBAAsBwB,CAAAA,QAAQ,CAACD,QAAAA,CAAAA;AACzC;AAEA,IAAA,MAAME,iBAAoB,GAAA;QACxB,MAAM,IAAI,CAACnB,EAAE,CAACD,UAAU,CAACa,GAAG,CAAC,CAAC,yBAAyB,CAAC,CAAA;AAC1D;AAEA,IAAA,MAAMQ,eAAkB,GAAA;QACtB,MAAM,IAAI,CAACpB,EAAE,CAACD,UAAU,CAACa,GAAG,CAAC,CAAC,wBAAwB,CAAC,CAAA;AACzD;AAEAS,IAAAA,eAAAA,CAAgBC,KAA4B,EAAE;AAC5C,QAAA,OAAQA,MAAMC,KAAK;YACjB,KAAK,EAAA;AAAI,gBAAA;AACP,oBAAA,MAAM,IAAIC,OAAmB,EAAA,CAAA;AAC/B;AACA,YAAA;AAAS,gBAAA;AACP,oBAAA,KAAK,CAACH,eAAgBC,CAAAA,KAAAA,CAAAA;AACxB;AACF;AACF;IAEAG,gBAAmB,GAAA;QACjB,OAAO,KAAA;AACT;AAzEA,IAAA,WAAA,CAAYzB,EAAY,CAAE;AACxB,QAAA,KAAK,CAACA,EAAI,EAAA,QAAA,CAAA;AAEV,QAAA,IAAI,CAAC0B,eAAe,GAAG,IAAIC,eAAsB3B,CAAAA,EAAAA,CAAAA;AACnD;AAsEF;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../../../src/dialects/sqlite/index.ts"],"sourcesContent":["import path from 'path';\nimport fse from 'fs-extra';\nimport type { Knex } from 'knex';\n\nimport * as errors from '../../errors';\nimport Dialect from '../dialect';\nimport SqliteSchemaInspector from './schema-inspector';\nimport type { Database } from '../..';\n\nconst UNSUPPORTED_OPERATORS = ['$jsonSupersetOf'];\n\nexport default class SqliteDialect extends Dialect {\n schemaInspector: SqliteSchemaInspector;\n\n constructor(db: Database) {\n super(db, 'sqlite');\n\n this.schemaInspector = new SqliteSchemaInspector(db);\n }\n\n configure(conn?: Knex.Sqlite3ConnectionConfig) {\n const connection =\n conn || (this.db.config.connection.connection as Knex.Sqlite3ConnectionConfig);\n if (typeof connection !== 'string') {\n connection.filename = path.resolve(connection.filename);\n }\n\n const dbDir = path.dirname(connection.filename);\n\n fse.ensureDirSync(dbDir);\n }\n\n useReturning() {\n return true;\n }\n\n async initialize(nativeConnection: unknown) {\n await this.db.connection.raw('pragma foreign_keys = on').connection(nativeConnection);\n }\n\n canAlterConstraints() {\n return false;\n }\n\n getSqlType(type: string) {\n switch (type) {\n case 'enum': {\n return 'text';\n }\n case 'double':\n case 'decimal': {\n return 'float';\n }\n case 'timestamp': {\n return 'datetime';\n }\n default: {\n return type;\n }\n }\n }\n\n supportsOperator(operator: string) {\n return !UNSUPPORTED_OPERATORS.includes(operator);\n }\n\n async startSchemaUpdate() {\n await this.db.connection.raw(`pragma foreign_keys = off`);\n }\n\n async endSchemaUpdate() {\n await this.db.connection.raw(`pragma foreign_keys = on`);\n }\n\n transformErrors(error: NodeJS.ErrnoException) {\n switch (error.errno) {\n case 19: {\n throw new errors.NotNullError(); // TODO: extract column name\n }\n default: {\n super.transformErrors(error);\n }\n }\n }\n\n canAddIncrements() {\n return false;\n }\n}\n"],"names":["UNSUPPORTED_OPERATORS","SqliteDialect","Dialect","configure","conn","connection","db","config","filename","path","resolve","dbDir","dirname","fse","ensureDirSync","useReturning","initialize","nativeConnection","raw","canAlterConstraints","getSqlType","type","supportsOperator","operator","includes","startSchemaUpdate","endSchemaUpdate","transformErrors","error","errno","errors","canAddIncrements","constructor","schemaInspector","SqliteSchemaInspector"],"mappings":";;;;;;AASA,MAAMA,qBAAwB,GAAA;AAAC,IAAA;AAAkB,CAAA;AAElC,MAAMC,aAAsBC,SAAAA,OAAAA,CAAAA;AASzCC,IAAAA,SAAAA,CAAUC,IAAmC,EAAE;QAC7C,MAAMC,UAAAA,GACJD,IAAS,IAAA,IAAI,CAACE,EAAE,CAACC,MAAM,CAACF,UAAU,CAACA,UAAU;QAC/C,IAAI,OAAOA,eAAe,QAAU,EAAA;AAClCA,YAAAA,UAAAA,CAAWG,QAAQ,GAAGC,IAAAA,CAAKC,OAAO,CAACL,WAAWG,QAAQ,CAAA;AACxD;AAEA,QAAA,MAAMG,KAAQF,GAAAA,IAAAA,CAAKG,OAAO,CAACP,WAAWG,QAAQ,CAAA;AAE9CK,QAAAA,GAAAA,CAAIC,aAAa,CAACH,KAAAA,CAAAA;AACpB;IAEAI,YAAe,GAAA;QACb,OAAO,IAAA;AACT;IAEA,MAAMC,UAAAA,CAAWC,gBAAyB,EAAE;QAC1C,MAAM,IAAI,CAACX,EAAE,CAACD,UAAU,CAACa,GAAG,CAAC,0BAA4Bb,CAAAA,CAAAA,UAAU,CAACY,gBAAAA,CAAAA;AACtE;IAEAE,mBAAsB,GAAA;QACpB,OAAO,KAAA;AACT;AAEAC,IAAAA,UAAAA,CAAWC,IAAY,EAAE;QACvB,OAAQA,IAAAA;YACN,KAAK,MAAA;AAAQ,gBAAA;oBACX,OAAO,MAAA;AACT;YACA,KAAK,QAAA;YACL,KAAK,SAAA;AAAW,gBAAA;oBACd,OAAO,OAAA;AACT;YACA,KAAK,WAAA;AAAa,gBAAA;oBAChB,OAAO,UAAA;AACT;AACA,YAAA;AAAS,gBAAA;oBACP,OAAOA,IAAAA;AACT;AACF;AACF;AAEAC,IAAAA,gBAAAA,CAAiBC,QAAgB,EAAE;QACjC,OAAO,CAACvB,qBAAsBwB,CAAAA,QAAQ,CAACD,QAAAA,CAAAA;AACzC;AAEA,IAAA,MAAME,iBAAoB,GAAA;QACxB,MAAM,IAAI,CAACnB,EAAE,CAACD,UAAU,CAACa,GAAG,CAAC,CAAC,yBAAyB,CAAC,CAAA;AAC1D;AAEA,IAAA,MAAMQ,eAAkB,GAAA;QACtB,MAAM,IAAI,CAACpB,EAAE,CAACD,UAAU,CAACa,GAAG,CAAC,CAAC,wBAAwB,CAAC,CAAA;AACzD;AAEAS,IAAAA,eAAAA,CAAgBC,KAA4B,EAAE;AAC5C,QAAA,OAAQA,MAAMC,KAAK;YACjB,KAAK,EAAA;AAAI,gBAAA;AACP,oBAAA,MAAM,IAAIC,YAAmB,EAAA,CAAA;AAC/B;AACA,YAAA;AAAS,gBAAA;AACP,oBAAA,KAAK,CAACH,eAAgBC,CAAAA,KAAAA,CAAAA;AACxB;AACF;AACF;IAEAG,gBAAmB,GAAA;QACjB,OAAO,KAAA;AACT;AAzEAC,IAAAA,WAAAA,CAAY1B,EAAY,CAAE;AACxB,QAAA,KAAK,CAACA,EAAI,EAAA,QAAA,CAAA;AAEV,QAAA,IAAI,CAAC2B,eAAe,GAAG,IAAIC,qBAAsB5B,CAAAA,EAAAA,CAAAA;AACnD;AAsEF;;;;"}
1
+ {"version":3,"file":"index.mjs","sources":["../../../src/dialects/sqlite/index.ts"],"sourcesContent":["import path from 'path';\nimport fse from 'fs-extra';\nimport type { Knex } from 'knex';\n\nimport * as errors from '../../errors';\nimport Dialect from '../dialect';\nimport SqliteSchemaInspector from './schema-inspector';\nimport type { Database } from '../..';\n\nconst UNSUPPORTED_OPERATORS = ['$jsonSupersetOf'];\n\nexport default class SqliteDialect extends Dialect {\n schemaInspector: SqliteSchemaInspector;\n\n constructor(db: Database) {\n super(db, 'sqlite');\n\n this.schemaInspector = new SqliteSchemaInspector(db);\n }\n\n configure(conn?: Knex.Sqlite3ConnectionConfig) {\n const connection =\n conn || (this.db.config.connection.connection as Knex.Sqlite3ConnectionConfig);\n if (typeof connection !== 'string') {\n connection.filename = path.resolve(connection.filename);\n }\n\n const dbDir = path.dirname(connection.filename);\n\n fse.ensureDirSync(dbDir);\n }\n\n useReturning() {\n return true;\n }\n\n async initialize(nativeConnection: unknown) {\n await this.db.connection.raw('pragma foreign_keys = on').connection(nativeConnection);\n }\n\n canAlterConstraints() {\n return false;\n }\n\n getSqlType(type: string) {\n switch (type) {\n case 'enum': {\n return 'text';\n }\n case 'double':\n case 'decimal': {\n return 'float';\n }\n case 'timestamp': {\n return 'datetime';\n }\n default: {\n return type;\n }\n }\n }\n\n supportsOperator(operator: string) {\n return !UNSUPPORTED_OPERATORS.includes(operator);\n }\n\n async startSchemaUpdate() {\n await this.db.connection.raw(`pragma foreign_keys = off`);\n }\n\n async endSchemaUpdate() {\n await this.db.connection.raw(`pragma foreign_keys = on`);\n }\n\n transformErrors(error: NodeJS.ErrnoException) {\n switch (error.errno) {\n case 19: {\n throw new errors.NotNullError(); // TODO: extract column name\n }\n default: {\n super.transformErrors(error);\n }\n }\n }\n\n canAddIncrements() {\n return false;\n }\n}\n"],"names":["UNSUPPORTED_OPERATORS","SqliteDialect","Dialect","configure","conn","connection","db","config","filename","path","resolve","dbDir","dirname","fse","ensureDirSync","useReturning","initialize","nativeConnection","raw","canAlterConstraints","getSqlType","type","supportsOperator","operator","includes","startSchemaUpdate","endSchemaUpdate","transformErrors","error","errno","errors","canAddIncrements","schemaInspector","SqliteSchemaInspector"],"mappings":";;;;;;AASA,MAAMA,qBAAwB,GAAA;AAAC,IAAA;AAAkB,CAAA;AAElC,MAAMC,aAAsBC,SAAAA,OAAAA,CAAAA;AASzCC,IAAAA,SAAAA,CAAUC,IAAmC,EAAE;QAC7C,MAAMC,UAAAA,GACJD,IAAS,IAAA,IAAI,CAACE,EAAE,CAACC,MAAM,CAACF,UAAU,CAACA,UAAU;QAC/C,IAAI,OAAOA,eAAe,QAAU,EAAA;AAClCA,YAAAA,UAAAA,CAAWG,QAAQ,GAAGC,IAAAA,CAAKC,OAAO,CAACL,WAAWG,QAAQ,CAAA;AACxD;AAEA,QAAA,MAAMG,KAAQF,GAAAA,IAAAA,CAAKG,OAAO,CAACP,WAAWG,QAAQ,CAAA;AAE9CK,QAAAA,GAAAA,CAAIC,aAAa,CAACH,KAAAA,CAAAA;AACpB;IAEAI,YAAe,GAAA;QACb,OAAO,IAAA;AACT;IAEA,MAAMC,UAAAA,CAAWC,gBAAyB,EAAE;QAC1C,MAAM,IAAI,CAACX,EAAE,CAACD,UAAU,CAACa,GAAG,CAAC,0BAA4Bb,CAAAA,CAAAA,UAAU,CAACY,gBAAAA,CAAAA;AACtE;IAEAE,mBAAsB,GAAA;QACpB,OAAO,KAAA;AACT;AAEAC,IAAAA,UAAAA,CAAWC,IAAY,EAAE;QACvB,OAAQA,IAAAA;YACN,KAAK,MAAA;AAAQ,gBAAA;oBACX,OAAO,MAAA;AACT;YACA,KAAK,QAAA;YACL,KAAK,SAAA;AAAW,gBAAA;oBACd,OAAO,OAAA;AACT;YACA,KAAK,WAAA;AAAa,gBAAA;oBAChB,OAAO,UAAA;AACT;AACA,YAAA;AAAS,gBAAA;oBACP,OAAOA,IAAAA;AACT;AACF;AACF;AAEAC,IAAAA,gBAAAA,CAAiBC,QAAgB,EAAE;QACjC,OAAO,CAACvB,qBAAsBwB,CAAAA,QAAQ,CAACD,QAAAA,CAAAA;AACzC;AAEA,IAAA,MAAME,iBAAoB,GAAA;QACxB,MAAM,IAAI,CAACnB,EAAE,CAACD,UAAU,CAACa,GAAG,CAAC,CAAC,yBAAyB,CAAC,CAAA;AAC1D;AAEA,IAAA,MAAMQ,eAAkB,GAAA;QACtB,MAAM,IAAI,CAACpB,EAAE,CAACD,UAAU,CAACa,GAAG,CAAC,CAAC,wBAAwB,CAAC,CAAA;AACzD;AAEAS,IAAAA,eAAAA,CAAgBC,KAA4B,EAAE;AAC5C,QAAA,OAAQA,MAAMC,KAAK;YACjB,KAAK,EAAA;AAAI,gBAAA;AACP,oBAAA,MAAM,IAAIC,YAAmB,EAAA,CAAA;AAC/B;AACA,YAAA;AAAS,gBAAA;AACP,oBAAA,KAAK,CAACH,eAAgBC,CAAAA,KAAAA,CAAAA;AACxB;AACF;AACF;IAEAG,gBAAmB,GAAA;QACjB,OAAO,KAAA;AACT;AAzEA,IAAA,WAAA,CAAYzB,EAAY,CAAE;AACxB,QAAA,KAAK,CAACA,EAAI,EAAA,QAAA,CAAA;AAEV,QAAA,IAAI,CAAC0B,eAAe,GAAG,IAAIC,qBAAsB3B,CAAAA,EAAAA,CAAAA;AACnD;AAsEF;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"schema-inspector.js","sources":["../../../src/dialects/sqlite/schema-inspector.ts"],"sourcesContent":["import type { Database } from '../..';\nimport type { Schema, Column, Index, ForeignKey } from '../../schema/types';\nimport type { SchemaInspector } from '../dialect';\n\nconst SQL_QUERIES = {\n TABLE_LIST: `select name from sqlite_master where type = 'table' and name NOT LIKE 'sqlite%'`,\n TABLE_INFO: `pragma table_info(??)`,\n INDEX_LIST: 'pragma index_list(??)',\n INDEX_INFO: 'pragma index_info(??)',\n FOREIGN_KEY_LIST: 'pragma foreign_key_list(??)',\n};\n\ninterface RawTable {\n name: string;\n}\ninterface RawColumn {\n type: string;\n args?: unknown[];\n name: string;\n defaultTo?: unknown;\n notNullable?: boolean;\n unsigned?: boolean;\n unique?: boolean;\n primary?: boolean;\n pk?: boolean;\n foreign?: {\n table: string;\n column: string;\n onUpdate: string;\n onDelete: string;\n };\n data_type?: string;\n dflt_value?: unknown;\n notnull?: boolean;\n}\n\ninterface RawIndex {\n name: string;\n unique: boolean;\n}\n\ninterface RawIndexInfo {\n name: string;\n}\n\ninterface RawForeignKey {\n id: number;\n seq: number;\n table: string;\n from: string;\n to: string;\n on_update: string;\n on_delete: string;\n}\n\nconst toStrapiType = (column: RawColumn) => {\n const { type } = column;\n\n const rootType = type.toLowerCase().match(/[^(), ]+/)?.[0];\n\n switch (rootType) {\n case 'integer': {\n if (column.pk) {\n return { type: 'increments', args: [{ primary: true, primaryKey: true }] };\n }\n\n return { type: 'integer' };\n }\n case 'float': {\n return { type: 'float', args: [10, 2] };\n }\n case 'bigint': {\n return { type: 'bigInteger' };\n }\n case 'varchar': {\n const length = type.slice(8, type.length - 1);\n\n return { type: 'string', args: [Number(length)] };\n }\n case 'text': {\n return { type: 'text', args: ['longtext'] };\n }\n case 'json': {\n return { type: 'jsonb' };\n }\n case 'boolean': {\n return { type: 'boolean' };\n }\n case 'datetime': {\n return { type: 'datetime', args: [{ useTz: false, precision: 6 }] };\n }\n case 'date': {\n return { type: 'date' };\n }\n case 'time': {\n return { type: 'time', args: [{ precision: 3 }] };\n }\n default: {\n return { type: 'specificType', args: [column.data_type] };\n }\n }\n};\n\nexport default class SqliteSchemaInspector implements SchemaInspector {\n db: Database;\n\n constructor(db: Database) {\n this.db = db;\n }\n\n async getSchema() {\n const schema: Schema = { tables: [] };\n const tables = await this.getTables();\n\n for (const tableName of tables) {\n const columns = await this.getColumns(tableName);\n const indexes = await this.getIndexes(tableName);\n const foreignKeys = await this.getForeignKeys(tableName);\n\n schema.tables.push({\n name: tableName,\n columns,\n indexes,\n foreignKeys,\n });\n }\n\n return schema;\n }\n\n async getTables(): Promise<string[]> {\n const rows = await this.db.connection.raw<RawTable[]>(SQL_QUERIES.TABLE_LIST);\n\n return rows.map((row) => row.name);\n }\n\n async getColumns(tableName: string): Promise<Column[]> {\n const rows = await this.db.connection.raw<RawColumn[]>(SQL_QUERIES.TABLE_INFO, [tableName]);\n\n return rows.map((row) => {\n const { type, args = [], ...rest } = toStrapiType(row);\n\n return {\n type,\n args,\n name: row.name,\n defaultTo: row.dflt_value,\n notNullable: row.notnull !== null ? Boolean(row.notnull) : null,\n unsigned: false,\n ...rest,\n };\n });\n }\n\n async getIndexes(tableName: string): Promise<Index[]> {\n const indexes = await this.db.connection.raw<RawIndex[]>(SQL_QUERIES.INDEX_LIST, [tableName]);\n\n const ret: Index[] = [];\n\n for (const index of indexes.filter((index) => !index.name.startsWith('sqlite_'))) {\n const res = await this.db.connection.raw<RawIndexInfo[]>(SQL_QUERIES.INDEX_INFO, [\n index.name,\n ]);\n\n const indexInfo: Index = {\n columns: res.map((row) => row.name),\n name: index.name,\n };\n\n if (index.unique) {\n indexInfo.type = 'unique';\n }\n\n ret.push(indexInfo);\n }\n\n return ret;\n }\n\n async getForeignKeys(tableName: string): Promise<ForeignKey[]> {\n const fks = await this.db.connection.raw<RawForeignKey[]>(SQL_QUERIES.FOREIGN_KEY_LIST, [\n tableName,\n ]);\n\n const ret: Record<RawForeignKey['id'], ForeignKey> = {};\n\n for (const fk of fks) {\n if (!ret[fk.id]) {\n ret[fk.id] = {\n // TODO: name, // find name\n name: '',\n columns: [fk.from],\n referencedColumns: [fk.to],\n referencedTable: fk.table,\n onUpdate: fk.on_update.toUpperCase(),\n onDelete: fk.on_delete.toUpperCase(),\n };\n } else {\n ret[fk.id].columns.push(fk.from);\n ret[fk.id].referencedColumns.push(fk.to);\n }\n }\n\n return Object.values(ret);\n }\n}\n"],"names":["SQL_QUERIES","TABLE_LIST","TABLE_INFO","INDEX_LIST","INDEX_INFO","FOREIGN_KEY_LIST","toStrapiType","column","type","rootType","toLowerCase","match","pk","args","primary","primaryKey","length","slice","Number","useTz","precision","data_type","SqliteSchemaInspector","getSchema","schema","tables","getTables","tableName","columns","getColumns","indexes","getIndexes","foreignKeys","getForeignKeys","push","name","rows","db","connection","raw","map","row","rest","defaultTo","dflt_value","notNullable","notnull","Boolean","unsigned","ret","index","filter","startsWith","res","indexInfo","unique","fks","fk","id","from","referencedColumns","to","referencedTable","table","onUpdate","on_update","toUpperCase","onDelete","on_delete","Object","values","constructor"],"mappings":"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"}
1
+ {"version":3,"file":"schema-inspector.js","sources":["../../../src/dialects/sqlite/schema-inspector.ts"],"sourcesContent":["import type { Database } from '../..';\nimport type { Schema, Column, Index, ForeignKey } from '../../schema/types';\nimport type { SchemaInspector } from '../dialect';\n\nconst SQL_QUERIES = {\n TABLE_LIST: `select name from sqlite_master where type = 'table' and name NOT LIKE 'sqlite%'`,\n TABLE_INFO: `pragma table_info(??)`,\n INDEX_LIST: 'pragma index_list(??)',\n INDEX_INFO: 'pragma index_info(??)',\n FOREIGN_KEY_LIST: 'pragma foreign_key_list(??)',\n};\n\ninterface RawTable {\n name: string;\n}\ninterface RawColumn {\n type: string;\n args?: unknown[];\n name: string;\n defaultTo?: unknown;\n notNullable?: boolean;\n unsigned?: boolean;\n unique?: boolean;\n primary?: boolean;\n pk?: boolean;\n foreign?: {\n table: string;\n column: string;\n onUpdate: string;\n onDelete: string;\n };\n data_type?: string;\n dflt_value?: unknown;\n notnull?: boolean;\n}\n\ninterface RawIndex {\n name: string;\n unique: boolean;\n}\n\ninterface RawIndexInfo {\n name: string;\n}\n\ninterface RawForeignKey {\n id: number;\n seq: number;\n table: string;\n from: string;\n to: string;\n on_update: string;\n on_delete: string;\n}\n\nconst toStrapiType = (column: RawColumn) => {\n const { type } = column;\n\n const rootType = type.toLowerCase().match(/[^(), ]+/)?.[0];\n\n switch (rootType) {\n case 'integer': {\n if (column.pk) {\n return { type: 'increments', args: [{ primary: true, primaryKey: true }] };\n }\n\n return { type: 'integer' };\n }\n case 'float': {\n return { type: 'float', args: [10, 2] };\n }\n case 'bigint': {\n return { type: 'bigInteger' };\n }\n case 'varchar': {\n const length = type.slice(8, type.length - 1);\n\n return { type: 'string', args: [Number(length)] };\n }\n case 'text': {\n return { type: 'text', args: ['longtext'] };\n }\n case 'json': {\n return { type: 'jsonb' };\n }\n case 'boolean': {\n return { type: 'boolean' };\n }\n case 'datetime': {\n return { type: 'datetime', args: [{ useTz: false, precision: 6 }] };\n }\n case 'date': {\n return { type: 'date' };\n }\n case 'time': {\n return { type: 'time', args: [{ precision: 3 }] };\n }\n default: {\n return { type: 'specificType', args: [column.data_type] };\n }\n }\n};\n\nexport default class SqliteSchemaInspector implements SchemaInspector {\n db: Database;\n\n constructor(db: Database) {\n this.db = db;\n }\n\n async getSchema() {\n const schema: Schema = { tables: [] };\n const tables = await this.getTables();\n\n for (const tableName of tables) {\n const columns = await this.getColumns(tableName);\n const indexes = await this.getIndexes(tableName);\n const foreignKeys = await this.getForeignKeys(tableName);\n\n schema.tables.push({\n name: tableName,\n columns,\n indexes,\n foreignKeys,\n });\n }\n\n return schema;\n }\n\n async getTables(): Promise<string[]> {\n const rows = await this.db.connection.raw<RawTable[]>(SQL_QUERIES.TABLE_LIST);\n\n return rows.map((row) => row.name);\n }\n\n async getColumns(tableName: string): Promise<Column[]> {\n const rows = await this.db.connection.raw<RawColumn[]>(SQL_QUERIES.TABLE_INFO, [tableName]);\n\n return rows.map((row) => {\n const { type, args = [], ...rest } = toStrapiType(row);\n\n return {\n type,\n args,\n name: row.name,\n defaultTo: row.dflt_value,\n notNullable: row.notnull !== null ? Boolean(row.notnull) : null,\n unsigned: false,\n ...rest,\n };\n });\n }\n\n async getIndexes(tableName: string): Promise<Index[]> {\n const indexes = await this.db.connection.raw<RawIndex[]>(SQL_QUERIES.INDEX_LIST, [tableName]);\n\n const ret: Index[] = [];\n\n for (const index of indexes.filter((index) => !index.name.startsWith('sqlite_'))) {\n const res = await this.db.connection.raw<RawIndexInfo[]>(SQL_QUERIES.INDEX_INFO, [\n index.name,\n ]);\n\n const indexInfo: Index = {\n columns: res.map((row) => row.name),\n name: index.name,\n };\n\n if (index.unique) {\n indexInfo.type = 'unique';\n }\n\n ret.push(indexInfo);\n }\n\n return ret;\n }\n\n async getForeignKeys(tableName: string): Promise<ForeignKey[]> {\n const fks = await this.db.connection.raw<RawForeignKey[]>(SQL_QUERIES.FOREIGN_KEY_LIST, [\n tableName,\n ]);\n\n const ret: Record<RawForeignKey['id'], ForeignKey> = {};\n\n for (const fk of fks) {\n if (!ret[fk.id]) {\n ret[fk.id] = {\n // TODO: name, // find name\n name: '',\n columns: [fk.from],\n referencedColumns: [fk.to],\n referencedTable: fk.table,\n onUpdate: fk.on_update.toUpperCase(),\n onDelete: fk.on_delete.toUpperCase(),\n };\n } else {\n ret[fk.id].columns.push(fk.from);\n ret[fk.id].referencedColumns.push(fk.to);\n }\n }\n\n return Object.values(ret);\n }\n}\n"],"names":["SQL_QUERIES","TABLE_LIST","TABLE_INFO","INDEX_LIST","INDEX_INFO","FOREIGN_KEY_LIST","toStrapiType","column","type","rootType","toLowerCase","match","pk","args","primary","primaryKey","length","slice","Number","useTz","precision","data_type","SqliteSchemaInspector","getSchema","schema","tables","getTables","tableName","columns","getColumns","indexes","getIndexes","foreignKeys","getForeignKeys","push","name","rows","db","connection","raw","map","row","rest","defaultTo","dflt_value","notNullable","notnull","Boolean","unsigned","ret","index","filter","startsWith","res","indexInfo","unique","fks","fk","id","from","referencedColumns","to","referencedTable","table","onUpdate","on_update","toUpperCase","onDelete","on_delete","Object","values"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"schema-inspector.mjs","sources":["../../../src/dialects/sqlite/schema-inspector.ts"],"sourcesContent":["import type { Database } from '../..';\nimport type { Schema, Column, Index, ForeignKey } from '../../schema/types';\nimport type { SchemaInspector } from '../dialect';\n\nconst SQL_QUERIES = {\n TABLE_LIST: `select name from sqlite_master where type = 'table' and name NOT LIKE 'sqlite%'`,\n TABLE_INFO: `pragma table_info(??)`,\n INDEX_LIST: 'pragma index_list(??)',\n INDEX_INFO: 'pragma index_info(??)',\n FOREIGN_KEY_LIST: 'pragma foreign_key_list(??)',\n};\n\ninterface RawTable {\n name: string;\n}\ninterface RawColumn {\n type: string;\n args?: unknown[];\n name: string;\n defaultTo?: unknown;\n notNullable?: boolean;\n unsigned?: boolean;\n unique?: boolean;\n primary?: boolean;\n pk?: boolean;\n foreign?: {\n table: string;\n column: string;\n onUpdate: string;\n onDelete: string;\n };\n data_type?: string;\n dflt_value?: unknown;\n notnull?: boolean;\n}\n\ninterface RawIndex {\n name: string;\n unique: boolean;\n}\n\ninterface RawIndexInfo {\n name: string;\n}\n\ninterface RawForeignKey {\n id: number;\n seq: number;\n table: string;\n from: string;\n to: string;\n on_update: string;\n on_delete: string;\n}\n\nconst toStrapiType = (column: RawColumn) => {\n const { type } = column;\n\n const rootType = type.toLowerCase().match(/[^(), ]+/)?.[0];\n\n switch (rootType) {\n case 'integer': {\n if (column.pk) {\n return { type: 'increments', args: [{ primary: true, primaryKey: true }] };\n }\n\n return { type: 'integer' };\n }\n case 'float': {\n return { type: 'float', args: [10, 2] };\n }\n case 'bigint': {\n return { type: 'bigInteger' };\n }\n case 'varchar': {\n const length = type.slice(8, type.length - 1);\n\n return { type: 'string', args: [Number(length)] };\n }\n case 'text': {\n return { type: 'text', args: ['longtext'] };\n }\n case 'json': {\n return { type: 'jsonb' };\n }\n case 'boolean': {\n return { type: 'boolean' };\n }\n case 'datetime': {\n return { type: 'datetime', args: [{ useTz: false, precision: 6 }] };\n }\n case 'date': {\n return { type: 'date' };\n }\n case 'time': {\n return { type: 'time', args: [{ precision: 3 }] };\n }\n default: {\n return { type: 'specificType', args: [column.data_type] };\n }\n }\n};\n\nexport default class SqliteSchemaInspector implements SchemaInspector {\n db: Database;\n\n constructor(db: Database) {\n this.db = db;\n }\n\n async getSchema() {\n const schema: Schema = { tables: [] };\n const tables = await this.getTables();\n\n for (const tableName of tables) {\n const columns = await this.getColumns(tableName);\n const indexes = await this.getIndexes(tableName);\n const foreignKeys = await this.getForeignKeys(tableName);\n\n schema.tables.push({\n name: tableName,\n columns,\n indexes,\n foreignKeys,\n });\n }\n\n return schema;\n }\n\n async getTables(): Promise<string[]> {\n const rows = await this.db.connection.raw<RawTable[]>(SQL_QUERIES.TABLE_LIST);\n\n return rows.map((row) => row.name);\n }\n\n async getColumns(tableName: string): Promise<Column[]> {\n const rows = await this.db.connection.raw<RawColumn[]>(SQL_QUERIES.TABLE_INFO, [tableName]);\n\n return rows.map((row) => {\n const { type, args = [], ...rest } = toStrapiType(row);\n\n return {\n type,\n args,\n name: row.name,\n defaultTo: row.dflt_value,\n notNullable: row.notnull !== null ? Boolean(row.notnull) : null,\n unsigned: false,\n ...rest,\n };\n });\n }\n\n async getIndexes(tableName: string): Promise<Index[]> {\n const indexes = await this.db.connection.raw<RawIndex[]>(SQL_QUERIES.INDEX_LIST, [tableName]);\n\n const ret: Index[] = [];\n\n for (const index of indexes.filter((index) => !index.name.startsWith('sqlite_'))) {\n const res = await this.db.connection.raw<RawIndexInfo[]>(SQL_QUERIES.INDEX_INFO, [\n index.name,\n ]);\n\n const indexInfo: Index = {\n columns: res.map((row) => row.name),\n name: index.name,\n };\n\n if (index.unique) {\n indexInfo.type = 'unique';\n }\n\n ret.push(indexInfo);\n }\n\n return ret;\n }\n\n async getForeignKeys(tableName: string): Promise<ForeignKey[]> {\n const fks = await this.db.connection.raw<RawForeignKey[]>(SQL_QUERIES.FOREIGN_KEY_LIST, [\n tableName,\n ]);\n\n const ret: Record<RawForeignKey['id'], ForeignKey> = {};\n\n for (const fk of fks) {\n if (!ret[fk.id]) {\n ret[fk.id] = {\n // TODO: name, // find name\n name: '',\n columns: [fk.from],\n referencedColumns: [fk.to],\n referencedTable: fk.table,\n onUpdate: fk.on_update.toUpperCase(),\n onDelete: fk.on_delete.toUpperCase(),\n };\n } else {\n ret[fk.id].columns.push(fk.from);\n ret[fk.id].referencedColumns.push(fk.to);\n }\n }\n\n return Object.values(ret);\n }\n}\n"],"names":["SQL_QUERIES","TABLE_LIST","TABLE_INFO","INDEX_LIST","INDEX_INFO","FOREIGN_KEY_LIST","toStrapiType","column","type","rootType","toLowerCase","match","pk","args","primary","primaryKey","length","slice","Number","useTz","precision","data_type","SqliteSchemaInspector","getSchema","schema","tables","getTables","tableName","columns","getColumns","indexes","getIndexes","foreignKeys","getForeignKeys","push","name","rows","db","connection","raw","map","row","rest","defaultTo","dflt_value","notNullable","notnull","Boolean","unsigned","ret","index","filter","startsWith","res","indexInfo","unique","fks","fk","id","from","referencedColumns","to","referencedTable","table","onUpdate","on_update","toUpperCase","onDelete","on_delete","Object","values","constructor"],"mappings":"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"}
1
+ {"version":3,"file":"schema-inspector.mjs","sources":["../../../src/dialects/sqlite/schema-inspector.ts"],"sourcesContent":["import type { Database } from '../..';\nimport type { Schema, Column, Index, ForeignKey } from '../../schema/types';\nimport type { SchemaInspector } from '../dialect';\n\nconst SQL_QUERIES = {\n TABLE_LIST: `select name from sqlite_master where type = 'table' and name NOT LIKE 'sqlite%'`,\n TABLE_INFO: `pragma table_info(??)`,\n INDEX_LIST: 'pragma index_list(??)',\n INDEX_INFO: 'pragma index_info(??)',\n FOREIGN_KEY_LIST: 'pragma foreign_key_list(??)',\n};\n\ninterface RawTable {\n name: string;\n}\ninterface RawColumn {\n type: string;\n args?: unknown[];\n name: string;\n defaultTo?: unknown;\n notNullable?: boolean;\n unsigned?: boolean;\n unique?: boolean;\n primary?: boolean;\n pk?: boolean;\n foreign?: {\n table: string;\n column: string;\n onUpdate: string;\n onDelete: string;\n };\n data_type?: string;\n dflt_value?: unknown;\n notnull?: boolean;\n}\n\ninterface RawIndex {\n name: string;\n unique: boolean;\n}\n\ninterface RawIndexInfo {\n name: string;\n}\n\ninterface RawForeignKey {\n id: number;\n seq: number;\n table: string;\n from: string;\n to: string;\n on_update: string;\n on_delete: string;\n}\n\nconst toStrapiType = (column: RawColumn) => {\n const { type } = column;\n\n const rootType = type.toLowerCase().match(/[^(), ]+/)?.[0];\n\n switch (rootType) {\n case 'integer': {\n if (column.pk) {\n return { type: 'increments', args: [{ primary: true, primaryKey: true }] };\n }\n\n return { type: 'integer' };\n }\n case 'float': {\n return { type: 'float', args: [10, 2] };\n }\n case 'bigint': {\n return { type: 'bigInteger' };\n }\n case 'varchar': {\n const length = type.slice(8, type.length - 1);\n\n return { type: 'string', args: [Number(length)] };\n }\n case 'text': {\n return { type: 'text', args: ['longtext'] };\n }\n case 'json': {\n return { type: 'jsonb' };\n }\n case 'boolean': {\n return { type: 'boolean' };\n }\n case 'datetime': {\n return { type: 'datetime', args: [{ useTz: false, precision: 6 }] };\n }\n case 'date': {\n return { type: 'date' };\n }\n case 'time': {\n return { type: 'time', args: [{ precision: 3 }] };\n }\n default: {\n return { type: 'specificType', args: [column.data_type] };\n }\n }\n};\n\nexport default class SqliteSchemaInspector implements SchemaInspector {\n db: Database;\n\n constructor(db: Database) {\n this.db = db;\n }\n\n async getSchema() {\n const schema: Schema = { tables: [] };\n const tables = await this.getTables();\n\n for (const tableName of tables) {\n const columns = await this.getColumns(tableName);\n const indexes = await this.getIndexes(tableName);\n const foreignKeys = await this.getForeignKeys(tableName);\n\n schema.tables.push({\n name: tableName,\n columns,\n indexes,\n foreignKeys,\n });\n }\n\n return schema;\n }\n\n async getTables(): Promise<string[]> {\n const rows = await this.db.connection.raw<RawTable[]>(SQL_QUERIES.TABLE_LIST);\n\n return rows.map((row) => row.name);\n }\n\n async getColumns(tableName: string): Promise<Column[]> {\n const rows = await this.db.connection.raw<RawColumn[]>(SQL_QUERIES.TABLE_INFO, [tableName]);\n\n return rows.map((row) => {\n const { type, args = [], ...rest } = toStrapiType(row);\n\n return {\n type,\n args,\n name: row.name,\n defaultTo: row.dflt_value,\n notNullable: row.notnull !== null ? Boolean(row.notnull) : null,\n unsigned: false,\n ...rest,\n };\n });\n }\n\n async getIndexes(tableName: string): Promise<Index[]> {\n const indexes = await this.db.connection.raw<RawIndex[]>(SQL_QUERIES.INDEX_LIST, [tableName]);\n\n const ret: Index[] = [];\n\n for (const index of indexes.filter((index) => !index.name.startsWith('sqlite_'))) {\n const res = await this.db.connection.raw<RawIndexInfo[]>(SQL_QUERIES.INDEX_INFO, [\n index.name,\n ]);\n\n const indexInfo: Index = {\n columns: res.map((row) => row.name),\n name: index.name,\n };\n\n if (index.unique) {\n indexInfo.type = 'unique';\n }\n\n ret.push(indexInfo);\n }\n\n return ret;\n }\n\n async getForeignKeys(tableName: string): Promise<ForeignKey[]> {\n const fks = await this.db.connection.raw<RawForeignKey[]>(SQL_QUERIES.FOREIGN_KEY_LIST, [\n tableName,\n ]);\n\n const ret: Record<RawForeignKey['id'], ForeignKey> = {};\n\n for (const fk of fks) {\n if (!ret[fk.id]) {\n ret[fk.id] = {\n // TODO: name, // find name\n name: '',\n columns: [fk.from],\n referencedColumns: [fk.to],\n referencedTable: fk.table,\n onUpdate: fk.on_update.toUpperCase(),\n onDelete: fk.on_delete.toUpperCase(),\n };\n } else {\n ret[fk.id].columns.push(fk.from);\n ret[fk.id].referencedColumns.push(fk.to);\n }\n }\n\n return Object.values(ret);\n }\n}\n"],"names":["SQL_QUERIES","TABLE_LIST","TABLE_INFO","INDEX_LIST","INDEX_INFO","FOREIGN_KEY_LIST","toStrapiType","column","type","rootType","toLowerCase","match","pk","args","primary","primaryKey","length","slice","Number","useTz","precision","data_type","SqliteSchemaInspector","getSchema","schema","tables","getTables","tableName","columns","getColumns","indexes","getIndexes","foreignKeys","getForeignKeys","push","name","rows","db","connection","raw","map","row","rest","defaultTo","dflt_value","notNullable","notnull","Boolean","unsigned","ret","index","filter","startsWith","res","indexInfo","unique","fks","fk","id","from","referencedColumns","to","referencedTable","table","onUpdate","on_update","toUpperCase","onDelete","on_delete","Object","values"],"mappings":"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"}