@strapi/database 5.37.0 → 5.38.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.
- package/dist/connection.js.map +1 -1
- package/dist/connection.mjs.map +1 -1
- package/dist/dialects/dialect.js.map +1 -1
- package/dist/dialects/dialect.mjs.map +1 -1
- package/dist/dialects/index.js.map +1 -1
- package/dist/dialects/index.mjs.map +1 -1
- package/dist/dialects/mysql/database-inspector.js.map +1 -1
- package/dist/dialects/mysql/database-inspector.mjs.map +1 -1
- package/dist/dialects/mysql/index.js.map +1 -1
- package/dist/dialects/mysql/index.mjs.map +1 -1
- package/dist/dialects/mysql/schema-inspector.js.map +1 -1
- package/dist/dialects/mysql/schema-inspector.mjs.map +1 -1
- package/dist/dialects/postgresql/index.js.map +1 -1
- package/dist/dialects/postgresql/index.mjs.map +1 -1
- package/dist/dialects/postgresql/schema-inspector.js.map +1 -1
- package/dist/dialects/postgresql/schema-inspector.mjs.map +1 -1
- package/dist/dialects/sqlite/index.js.map +1 -1
- package/dist/dialects/sqlite/index.mjs.map +1 -1
- package/dist/dialects/sqlite/schema-inspector.js.map +1 -1
- package/dist/dialects/sqlite/schema-inspector.mjs.map +1 -1
- package/dist/entity-manager/entity-repository.js.map +1 -1
- package/dist/entity-manager/entity-repository.mjs.map +1 -1
- package/dist/entity-manager/index.js.map +1 -1
- package/dist/entity-manager/index.mjs +4 -4
- package/dist/entity-manager/index.mjs.map +1 -1
- package/dist/entity-manager/morph-relations.js.map +1 -1
- package/dist/entity-manager/morph-relations.mjs.map +1 -1
- package/dist/entity-manager/regular-relations.js.map +1 -1
- package/dist/entity-manager/regular-relations.mjs +1 -1
- package/dist/entity-manager/regular-relations.mjs.map +1 -1
- package/dist/entity-manager/relations-orderer.js.map +1 -1
- package/dist/entity-manager/relations-orderer.mjs.map +1 -1
- package/dist/errors/database.js.map +1 -1
- package/dist/errors/database.mjs.map +1 -1
- package/dist/errors/invalid-date.js.map +1 -1
- package/dist/errors/invalid-date.mjs.map +1 -1
- package/dist/errors/invalid-datetime.js.map +1 -1
- package/dist/errors/invalid-datetime.mjs.map +1 -1
- package/dist/errors/invalid-relation.js.map +1 -1
- package/dist/errors/invalid-relation.mjs.map +1 -1
- package/dist/errors/invalid-time.js.map +1 -1
- package/dist/errors/invalid-time.mjs.map +1 -1
- package/dist/errors/not-null.js.map +1 -1
- package/dist/errors/not-null.mjs.map +1 -1
- package/dist/fields/biginteger.js.map +1 -1
- package/dist/fields/biginteger.mjs.map +1 -1
- package/dist/fields/boolean.js.map +1 -1
- package/dist/fields/boolean.mjs.map +1 -1
- package/dist/fields/date.js.map +1 -1
- package/dist/fields/date.mjs.map +1 -1
- package/dist/fields/datetime.js.map +1 -1
- package/dist/fields/datetime.mjs.map +1 -1
- package/dist/fields/field.js.map +1 -1
- package/dist/fields/field.mjs.map +1 -1
- package/dist/fields/index.js.map +1 -1
- package/dist/fields/index.mjs.map +1 -1
- package/dist/fields/json.js.map +1 -1
- package/dist/fields/json.mjs.map +1 -1
- package/dist/fields/number.js.map +1 -1
- package/dist/fields/number.mjs.map +1 -1
- package/dist/fields/shared/parsers.js.map +1 -1
- package/dist/fields/shared/parsers.mjs +1 -1
- package/dist/fields/shared/parsers.mjs.map +1 -1
- package/dist/fields/string.js.map +1 -1
- package/dist/fields/string.mjs.map +1 -1
- package/dist/fields/time.js.map +1 -1
- package/dist/fields/time.mjs.map +1 -1
- package/dist/fields/timestamp.js.map +1 -1
- package/dist/fields/timestamp.mjs.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/index.mjs.map +1 -1
- package/dist/lifecycles/index.js.map +1 -1
- package/dist/lifecycles/index.mjs.map +1 -1
- package/dist/lifecycles/subscribers/index.js.map +1 -1
- package/dist/lifecycles/subscribers/index.mjs.map +1 -1
- package/dist/lifecycles/subscribers/models-lifecycles.js.map +1 -1
- package/dist/lifecycles/subscribers/models-lifecycles.mjs.map +1 -1
- package/dist/lifecycles/subscribers/timestamps.js.map +1 -1
- package/dist/lifecycles/subscribers/timestamps.mjs.map +1 -1
- package/dist/metadata/index.js.map +1 -1
- package/dist/metadata/index.mjs.map +1 -1
- package/dist/metadata/metadata.js.map +1 -1
- package/dist/metadata/metadata.mjs.map +1 -1
- package/dist/metadata/relations.js +2 -6
- package/dist/metadata/relations.js.map +1 -1
- package/dist/metadata/relations.mjs +2 -6
- package/dist/metadata/relations.mjs.map +1 -1
- package/dist/migrations/common.js.map +1 -1
- package/dist/migrations/common.mjs.map +1 -1
- package/dist/migrations/index.js.map +1 -1
- package/dist/migrations/index.mjs.map +1 -1
- package/dist/migrations/internal-migrations/5.0.0-01-convert-identifiers-long-than-max-length.js.map +1 -1
- package/dist/migrations/internal-migrations/5.0.0-01-convert-identifiers-long-than-max-length.mjs.map +1 -1
- package/dist/migrations/internal-migrations/5.0.0-02-document-id.js.map +1 -1
- package/dist/migrations/internal-migrations/5.0.0-02-document-id.mjs.map +1 -1
- package/dist/migrations/internal-migrations/5.0.0-03-locale.js.map +1 -1
- package/dist/migrations/internal-migrations/5.0.0-03-locale.mjs.map +1 -1
- package/dist/migrations/internal-migrations/5.0.0-04-published-at.js.map +1 -1
- package/dist/migrations/internal-migrations/5.0.0-04-published-at.mjs.map +1 -1
- package/dist/migrations/internal-migrations/5.0.0-05-drop-slug-unique-index.js.map +1 -1
- package/dist/migrations/internal-migrations/5.0.0-05-drop-slug-unique-index.mjs.map +1 -1
- package/dist/migrations/internal-migrations/5.0.0-06-add-document-id-indexes.js.map +1 -1
- package/dist/migrations/internal-migrations/5.0.0-06-add-document-id-indexes.mjs.map +1 -1
- package/dist/migrations/internal-migrations/index.js.map +1 -1
- package/dist/migrations/internal-migrations/index.mjs.map +1 -1
- package/dist/migrations/internal.js.map +1 -1
- package/dist/migrations/internal.mjs.map +1 -1
- package/dist/migrations/logger.js.map +1 -1
- package/dist/migrations/logger.mjs.map +1 -1
- package/dist/migrations/storage.js.map +1 -1
- package/dist/migrations/storage.mjs.map +1 -1
- package/dist/migrations/users.js.map +1 -1
- package/dist/migrations/users.mjs.map +1 -1
- package/dist/query/helpers/join.js.map +1 -1
- package/dist/query/helpers/join.mjs.map +1 -1
- package/dist/query/helpers/order-by.js.map +1 -1
- package/dist/query/helpers/order-by.mjs.map +1 -1
- package/dist/query/helpers/populate/apply.js +3 -9
- package/dist/query/helpers/populate/apply.js.map +1 -1
- package/dist/query/helpers/populate/apply.mjs +3 -9
- package/dist/query/helpers/populate/apply.mjs.map +1 -1
- package/dist/query/helpers/populate/process.js.map +1 -1
- package/dist/query/helpers/populate/process.mjs.map +1 -1
- package/dist/query/helpers/search.js.map +1 -1
- package/dist/query/helpers/search.mjs.map +1 -1
- package/dist/query/helpers/streams/readable.js.map +1 -1
- package/dist/query/helpers/streams/readable.mjs.map +1 -1
- package/dist/query/helpers/transform.js.map +1 -1
- package/dist/query/helpers/transform.mjs.map +1 -1
- package/dist/query/helpers/where.js.map +1 -1
- package/dist/query/helpers/where.mjs.map +1 -1
- package/dist/query/query-builder.js.map +1 -1
- package/dist/query/query-builder.mjs +4 -4
- package/dist/query/query-builder.mjs.map +1 -1
- package/dist/repairs/index.js.map +1 -1
- package/dist/repairs/index.mjs.map +1 -1
- package/dist/repairs/operations/process-unidirectional-join-tables.js.map +1 -1
- package/dist/repairs/operations/process-unidirectional-join-tables.mjs.map +1 -1
- package/dist/repairs/operations/remove-orphan-morph-types.js.map +1 -1
- package/dist/repairs/operations/remove-orphan-morph-types.mjs.map +1 -1
- package/dist/schema/builder.js.map +1 -1
- package/dist/schema/builder.mjs +1 -1
- package/dist/schema/builder.mjs.map +1 -1
- package/dist/schema/diff.js.map +1 -1
- package/dist/schema/diff.mjs.map +1 -1
- package/dist/schema/index.js.map +1 -1
- package/dist/schema/index.mjs.map +1 -1
- package/dist/schema/schema.js.map +1 -1
- package/dist/schema/schema.mjs.map +1 -1
- package/dist/schema/storage.js.map +1 -1
- package/dist/schema/storage.mjs.map +1 -1
- package/dist/transaction-context.js.map +1 -1
- package/dist/transaction-context.mjs.map +1 -1
- package/dist/utils/async-curry.js.map +1 -1
- package/dist/utils/async-curry.mjs.map +1 -1
- package/dist/utils/identifiers/hash.js.map +1 -1
- package/dist/utils/identifiers/hash.mjs.map +1 -1
- package/dist/utils/identifiers/index.js.map +1 -1
- package/dist/utils/identifiers/index.mjs.map +1 -1
- package/dist/utils/knex.js.map +1 -1
- package/dist/utils/knex.mjs.map +1 -1
- package/dist/utils/types.js.map +1 -1
- package/dist/utils/types.mjs.map +1 -1
- package/dist/validations/index.js.map +1 -1
- package/dist/validations/index.mjs.map +1 -1
- package/dist/validations/relations/bidirectional.js.map +1 -1
- package/dist/validations/relations/bidirectional.mjs.map +1 -1
- package/dist/validations/relations/index.js.map +1 -1
- package/dist/validations/relations/index.mjs.map +1 -1
- package/package.json +4 -4
|
@@ -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"],"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","schemaInspector","SqliteSchemaInspector"],"mappings":";;;;;;;;AASA,MAAMA,
|
|
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,qBAAAA,GAAwB;AAAC,IAAA;AAAkB,CAAA;AAElC,MAAMC,aAAAA,SAAsBC,OAAAA,CAAAA;AASzCC,IAAAA,SAAAA,CAAUC,IAAmC,EAAE;QAC7C,MAAMC,UAAAA,GACJD,IAAAA,IAAS,IAAI,CAACE,EAAE,CAACC,MAAM,CAACF,UAAU,CAACA,UAAU;QAC/C,IAAI,OAAOA,eAAe,QAAA,EAAU;AAClCA,YAAAA,UAAAA,CAAWG,QAAQ,GAAGC,IAAAA,CAAKC,OAAO,CAACL,WAAWG,QAAQ,CAAA;AACxD,QAAA;AAEA,QAAA,MAAMG,KAAAA,GAAQF,IAAAA,CAAKG,OAAO,CAACP,WAAWG,QAAQ,CAAA;AAE9CK,QAAAA,GAAAA,CAAIC,aAAa,CAACH,KAAAA,CAAAA;AACpB,IAAA;IAEAI,YAAAA,GAAe;QACb,OAAO,IAAA;AACT,IAAA;IAEA,MAAMC,UAAAA,CAAWC,gBAAyB,EAAE;QAC1C,MAAM,IAAI,CAACX,EAAE,CAACD,UAAU,CAACa,GAAG,CAAC,0BAAA,CAAA,CAA4Bb,UAAU,CAACY,gBAAAA,CAAAA;AACtE,IAAA;IAEAE,mBAAAA,GAAsB;QACpB,OAAO,KAAA;AACT,IAAA;AAEAC,IAAAA,UAAAA,CAAWC,IAAY,EAAE;QACvB,OAAQA,IAAAA;YACN,KAAK,MAAA;AAAQ,gBAAA;oBACX,OAAO,MAAA;AACT,gBAAA;YACA,KAAK,QAAA;YACL,KAAK,SAAA;AAAW,gBAAA;oBACd,OAAO,OAAA;AACT,gBAAA;YACA,KAAK,WAAA;AAAa,gBAAA;oBAChB,OAAO,UAAA;AACT,gBAAA;AACA,YAAA;AAAS,gBAAA;oBACP,OAAOA,IAAAA;AACT,gBAAA;AACF;AACF,IAAA;AAEAC,IAAAA,gBAAAA,CAAiBC,QAAgB,EAAE;QACjC,OAAO,CAACvB,qBAAAA,CAAsBwB,QAAQ,CAACD,QAAAA,CAAAA;AACzC,IAAA;AAEA,IAAA,MAAME,iBAAAA,GAAoB;QACxB,MAAM,IAAI,CAACnB,EAAE,CAACD,UAAU,CAACa,GAAG,CAAC,CAAC,yBAAyB,CAAC,CAAA;AAC1D,IAAA;AAEA,IAAA,MAAMQ,eAAAA,GAAkB;QACtB,MAAM,IAAI,CAACpB,EAAE,CAACD,UAAU,CAACa,GAAG,CAAC,CAAC,wBAAwB,CAAC,CAAA;AACzD,IAAA;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,gBAAA;AACA,YAAA;AAAS,gBAAA;AACP,oBAAA,KAAK,CAACH,eAAAA,CAAgBC,KAAAA,CAAAA;AACxB,gBAAA;AACF;AACF,IAAA;IAEAG,gBAAAA,GAAmB;QACjB,OAAO,KAAA;AACT,IAAA;AAzEA,IAAA,WAAA,CAAYzB,EAAY,CAAE;AACxB,QAAA,KAAK,CAACA,EAAAA,EAAI,QAAA,CAAA;AAEV,QAAA,IAAI,CAAC0B,eAAe,GAAG,IAAIC,eAAAA,CAAsB3B,EAAAA,CAAAA;AACnD,IAAA;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","schemaInspector","SqliteSchemaInspector"],"mappings":";;;;;;AASA,MAAMA,
|
|
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,qBAAAA,GAAwB;AAAC,IAAA;AAAkB,CAAA;AAElC,MAAMC,aAAAA,SAAsBC,OAAAA,CAAAA;AASzCC,IAAAA,SAAAA,CAAUC,IAAmC,EAAE;QAC7C,MAAMC,UAAAA,GACJD,IAAAA,IAAS,IAAI,CAACE,EAAE,CAACC,MAAM,CAACF,UAAU,CAACA,UAAU;QAC/C,IAAI,OAAOA,eAAe,QAAA,EAAU;AAClCA,YAAAA,UAAAA,CAAWG,QAAQ,GAAGC,IAAAA,CAAKC,OAAO,CAACL,WAAWG,QAAQ,CAAA;AACxD,QAAA;AAEA,QAAA,MAAMG,KAAAA,GAAQF,IAAAA,CAAKG,OAAO,CAACP,WAAWG,QAAQ,CAAA;AAE9CK,QAAAA,GAAAA,CAAIC,aAAa,CAACH,KAAAA,CAAAA;AACpB,IAAA;IAEAI,YAAAA,GAAe;QACb,OAAO,IAAA;AACT,IAAA;IAEA,MAAMC,UAAAA,CAAWC,gBAAyB,EAAE;QAC1C,MAAM,IAAI,CAACX,EAAE,CAACD,UAAU,CAACa,GAAG,CAAC,0BAAA,CAAA,CAA4Bb,UAAU,CAACY,gBAAAA,CAAAA;AACtE,IAAA;IAEAE,mBAAAA,GAAsB;QACpB,OAAO,KAAA;AACT,IAAA;AAEAC,IAAAA,UAAAA,CAAWC,IAAY,EAAE;QACvB,OAAQA,IAAAA;YACN,KAAK,MAAA;AAAQ,gBAAA;oBACX,OAAO,MAAA;AACT,gBAAA;YACA,KAAK,QAAA;YACL,KAAK,SAAA;AAAW,gBAAA;oBACd,OAAO,OAAA;AACT,gBAAA;YACA,KAAK,WAAA;AAAa,gBAAA;oBAChB,OAAO,UAAA;AACT,gBAAA;AACA,YAAA;AAAS,gBAAA;oBACP,OAAOA,IAAAA;AACT,gBAAA;AACF;AACF,IAAA;AAEAC,IAAAA,gBAAAA,CAAiBC,QAAgB,EAAE;QACjC,OAAO,CAACvB,qBAAAA,CAAsBwB,QAAQ,CAACD,QAAAA,CAAAA;AACzC,IAAA;AAEA,IAAA,MAAME,iBAAAA,GAAoB;QACxB,MAAM,IAAI,CAACnB,EAAE,CAACD,UAAU,CAACa,GAAG,CAAC,CAAC,yBAAyB,CAAC,CAAA;AAC1D,IAAA;AAEA,IAAA,MAAMQ,eAAAA,GAAkB;QACtB,MAAM,IAAI,CAACpB,EAAE,CAACD,UAAU,CAACa,GAAG,CAAC,CAAC,wBAAwB,CAAC,CAAA;AACzD,IAAA;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,gBAAA;AACA,YAAA;AAAS,gBAAA;AACP,oBAAA,KAAK,CAACH,eAAAA,CAAgBC,KAAAA,CAAAA;AACxB,gBAAA;AACF;AACF,IAAA;IAEAG,gBAAAA,GAAmB;QACjB,OAAO,KAAA;AACT,IAAA;AAzEA,IAAA,WAAA,CAAYzB,EAAY,CAAE;AACxB,QAAA,KAAK,CAACA,EAAAA,EAAI,QAAA,CAAA;AAEV,QAAA,IAAI,CAAC0B,eAAe,GAAG,IAAIC,qBAAAA,CAAsB3B,EAAAA,CAAAA;AACnD,IAAA;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"],"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"],"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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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"entity-repository.js","sources":["../../src/entity-manager/entity-repository.ts"],"sourcesContent":["import { isString } from 'lodash/fp';\nimport type { Database } from '..';\nimport type { Repository, Params } from './types';\n\nconst withDefaultPagination = (params: Params) => {\n const { page = 1, pageSize = 10, ...rest } = params;\n\n return {\n page: Number(page),\n pageSize: Number(pageSize),\n ...rest,\n };\n};\n\ntype ParamsWithLimits = Omit<Params, 'page' | 'pageSize'> & {\n limit: number;\n offset: number;\n};\n\nconst withOffsetLimit = (\n params: Params\n): [ParamsWithLimits, { page: number; pageSize: number }] => {\n const { page, pageSize, ...rest } = withDefaultPagination(params);\n\n const offset = Math.max(page - 1, 0) * pageSize;\n const limit = pageSize;\n\n const query = {\n ...rest,\n limit,\n offset,\n };\n\n return [query, { page, pageSize }];\n};\n\nexport const createRepository = (uid: string, db: Database): Repository => {\n return {\n findOne(params = {}) {\n return db.entityManager.findOne(uid, params);\n },\n\n findMany(params = {}) {\n return db.entityManager.findMany(uid, params);\n },\n\n findWithCount(params = {}) {\n return Promise.all([\n db.entityManager.findMany(uid, params),\n db.entityManager.count(uid, params),\n ]);\n },\n\n async findPage(params) {\n const [query, { page, pageSize }] = withOffsetLimit(params);\n\n const [results, total] = await Promise.all([\n db.entityManager.findMany(uid, query),\n db.entityManager.count(uid, query),\n ]);\n\n return {\n results,\n pagination: {\n page,\n pageSize,\n pageCount: Math.ceil(total / pageSize),\n total,\n },\n };\n },\n\n create(params) {\n return db.entityManager.create(uid, params);\n },\n\n createMany(params) {\n return db.entityManager.createMany(uid, params);\n },\n\n update(params) {\n return db.entityManager.update(uid, params);\n },\n\n updateMany(params) {\n return db.entityManager.updateMany(uid, params);\n },\n\n delete(params) {\n return db.entityManager.delete(uid, params);\n },\n\n deleteMany(params = {}) {\n return db.entityManager.deleteMany(uid, params);\n },\n\n count(params) {\n return db.entityManager.count(uid, params);\n },\n\n attachRelations(id, data) {\n return db.entityManager.attachRelations(uid, id, data);\n },\n\n async updateRelations(id, data) {\n const trx = await db.transaction();\n try {\n await db.entityManager.updateRelations(uid, id, data, { transaction: trx.get() });\n return await trx.commit();\n } catch (e) {\n await trx.rollback();\n throw e;\n }\n },\n\n deleteRelations(id) {\n return db.entityManager.deleteRelations(uid, id);\n },\n\n populate(entity, populate) {\n return db.entityManager.populate(uid, entity, populate);\n },\n\n load(entity, fields, params) {\n return db.entityManager.load(uid, entity, fields, params);\n },\n\n async loadPages(entity, field, params) {\n if (!isString(field)) {\n throw new Error(`Invalid load. Expected ${field} to be a string`);\n }\n\n const { attributes } = db.metadata.get(uid);\n const attribute = attributes[field];\n\n if (\n !attribute ||\n attribute.type !== 'relation' ||\n !attribute.relation ||\n !['oneToMany', 'manyToMany'].includes(attribute.relation)\n ) {\n throw new Error(`Invalid load. Expected ${field} to be an anyToMany relational attribute`);\n }\n\n const [query, { page, pageSize }] = withOffsetLimit(params);\n\n const [results, { count: total }] = await Promise.all([\n db.entityManager.load(uid, entity, field, query),\n db.entityManager.load(uid, entity, field, { ...query, count: true }),\n ]);\n\n return {\n results,\n pagination: {\n page,\n pageSize,\n pageCount: Math.ceil(total / pageSize),\n total,\n },\n };\n },\n };\n};\n"],"names":["withDefaultPagination","params","page","pageSize","rest","Number","withOffsetLimit","offset","Math","max","limit","query","createRepository","uid","db","findOne","entityManager","findMany","findWithCount","Promise","all","count","findPage","results","total","pagination","pageCount","ceil","create","createMany","update","updateMany","delete","deleteMany","attachRelations","id","data","updateRelations","trx","transaction","get","commit","e","rollback","deleteRelations","populate","entity","load","fields","loadPages","field","isString","Error","attributes","metadata","attribute","type","relation","includes"],"mappings":";;;;AAIA,MAAMA,wBAAwB,CAACC,MAAAA,GAAAA;IAC7B,MAAM,EAAEC,OAAO,CAAC,EAAEC,WAAW,EAAE,EAAE,GAAGC,IAAAA,EAAM,GAAGH,MAAAA;IAE7C,OAAO;AACLC,QAAAA,IAAAA,EAAMG,
|
|
1
|
+
{"version":3,"file":"entity-repository.js","sources":["../../src/entity-manager/entity-repository.ts"],"sourcesContent":["import { isString } from 'lodash/fp';\nimport type { Database } from '..';\nimport type { Repository, Params } from './types';\n\nconst withDefaultPagination = (params: Params) => {\n const { page = 1, pageSize = 10, ...rest } = params;\n\n return {\n page: Number(page),\n pageSize: Number(pageSize),\n ...rest,\n };\n};\n\ntype ParamsWithLimits = Omit<Params, 'page' | 'pageSize'> & {\n limit: number;\n offset: number;\n};\n\nconst withOffsetLimit = (\n params: Params\n): [ParamsWithLimits, { page: number; pageSize: number }] => {\n const { page, pageSize, ...rest } = withDefaultPagination(params);\n\n const offset = Math.max(page - 1, 0) * pageSize;\n const limit = pageSize;\n\n const query = {\n ...rest,\n limit,\n offset,\n };\n\n return [query, { page, pageSize }];\n};\n\nexport const createRepository = (uid: string, db: Database): Repository => {\n return {\n findOne(params = {}) {\n return db.entityManager.findOne(uid, params);\n },\n\n findMany(params = {}) {\n return db.entityManager.findMany(uid, params);\n },\n\n findWithCount(params = {}) {\n return Promise.all([\n db.entityManager.findMany(uid, params),\n db.entityManager.count(uid, params),\n ]);\n },\n\n async findPage(params) {\n const [query, { page, pageSize }] = withOffsetLimit(params);\n\n const [results, total] = await Promise.all([\n db.entityManager.findMany(uid, query),\n db.entityManager.count(uid, query),\n ]);\n\n return {\n results,\n pagination: {\n page,\n pageSize,\n pageCount: Math.ceil(total / pageSize),\n total,\n },\n };\n },\n\n create(params) {\n return db.entityManager.create(uid, params);\n },\n\n createMany(params) {\n return db.entityManager.createMany(uid, params);\n },\n\n update(params) {\n return db.entityManager.update(uid, params);\n },\n\n updateMany(params) {\n return db.entityManager.updateMany(uid, params);\n },\n\n delete(params) {\n return db.entityManager.delete(uid, params);\n },\n\n deleteMany(params = {}) {\n return db.entityManager.deleteMany(uid, params);\n },\n\n count(params) {\n return db.entityManager.count(uid, params);\n },\n\n attachRelations(id, data) {\n return db.entityManager.attachRelations(uid, id, data);\n },\n\n async updateRelations(id, data) {\n const trx = await db.transaction();\n try {\n await db.entityManager.updateRelations(uid, id, data, { transaction: trx.get() });\n return await trx.commit();\n } catch (e) {\n await trx.rollback();\n throw e;\n }\n },\n\n deleteRelations(id) {\n return db.entityManager.deleteRelations(uid, id);\n },\n\n populate(entity, populate) {\n return db.entityManager.populate(uid, entity, populate);\n },\n\n load(entity, fields, params) {\n return db.entityManager.load(uid, entity, fields, params);\n },\n\n async loadPages(entity, field, params) {\n if (!isString(field)) {\n throw new Error(`Invalid load. Expected ${field} to be a string`);\n }\n\n const { attributes } = db.metadata.get(uid);\n const attribute = attributes[field];\n\n if (\n !attribute ||\n attribute.type !== 'relation' ||\n !attribute.relation ||\n !['oneToMany', 'manyToMany'].includes(attribute.relation)\n ) {\n throw new Error(`Invalid load. Expected ${field} to be an anyToMany relational attribute`);\n }\n\n const [query, { page, pageSize }] = withOffsetLimit(params);\n\n const [results, { count: total }] = await Promise.all([\n db.entityManager.load(uid, entity, field, query),\n db.entityManager.load(uid, entity, field, { ...query, count: true }),\n ]);\n\n return {\n results,\n pagination: {\n page,\n pageSize,\n pageCount: Math.ceil(total / pageSize),\n total,\n },\n };\n },\n };\n};\n"],"names":["withDefaultPagination","params","page","pageSize","rest","Number","withOffsetLimit","offset","Math","max","limit","query","createRepository","uid","db","findOne","entityManager","findMany","findWithCount","Promise","all","count","findPage","results","total","pagination","pageCount","ceil","create","createMany","update","updateMany","delete","deleteMany","attachRelations","id","data","updateRelations","trx","transaction","get","commit","e","rollback","deleteRelations","populate","entity","load","fields","loadPages","field","isString","Error","attributes","metadata","attribute","type","relation","includes"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"entity-repository.mjs","sources":["../../src/entity-manager/entity-repository.ts"],"sourcesContent":["import { isString } from 'lodash/fp';\nimport type { Database } from '..';\nimport type { Repository, Params } from './types';\n\nconst withDefaultPagination = (params: Params) => {\n const { page = 1, pageSize = 10, ...rest } = params;\n\n return {\n page: Number(page),\n pageSize: Number(pageSize),\n ...rest,\n };\n};\n\ntype ParamsWithLimits = Omit<Params, 'page' | 'pageSize'> & {\n limit: number;\n offset: number;\n};\n\nconst withOffsetLimit = (\n params: Params\n): [ParamsWithLimits, { page: number; pageSize: number }] => {\n const { page, pageSize, ...rest } = withDefaultPagination(params);\n\n const offset = Math.max(page - 1, 0) * pageSize;\n const limit = pageSize;\n\n const query = {\n ...rest,\n limit,\n offset,\n };\n\n return [query, { page, pageSize }];\n};\n\nexport const createRepository = (uid: string, db: Database): Repository => {\n return {\n findOne(params = {}) {\n return db.entityManager.findOne(uid, params);\n },\n\n findMany(params = {}) {\n return db.entityManager.findMany(uid, params);\n },\n\n findWithCount(params = {}) {\n return Promise.all([\n db.entityManager.findMany(uid, params),\n db.entityManager.count(uid, params),\n ]);\n },\n\n async findPage(params) {\n const [query, { page, pageSize }] = withOffsetLimit(params);\n\n const [results, total] = await Promise.all([\n db.entityManager.findMany(uid, query),\n db.entityManager.count(uid, query),\n ]);\n\n return {\n results,\n pagination: {\n page,\n pageSize,\n pageCount: Math.ceil(total / pageSize),\n total,\n },\n };\n },\n\n create(params) {\n return db.entityManager.create(uid, params);\n },\n\n createMany(params) {\n return db.entityManager.createMany(uid, params);\n },\n\n update(params) {\n return db.entityManager.update(uid, params);\n },\n\n updateMany(params) {\n return db.entityManager.updateMany(uid, params);\n },\n\n delete(params) {\n return db.entityManager.delete(uid, params);\n },\n\n deleteMany(params = {}) {\n return db.entityManager.deleteMany(uid, params);\n },\n\n count(params) {\n return db.entityManager.count(uid, params);\n },\n\n attachRelations(id, data) {\n return db.entityManager.attachRelations(uid, id, data);\n },\n\n async updateRelations(id, data) {\n const trx = await db.transaction();\n try {\n await db.entityManager.updateRelations(uid, id, data, { transaction: trx.get() });\n return await trx.commit();\n } catch (e) {\n await trx.rollback();\n throw e;\n }\n },\n\n deleteRelations(id) {\n return db.entityManager.deleteRelations(uid, id);\n },\n\n populate(entity, populate) {\n return db.entityManager.populate(uid, entity, populate);\n },\n\n load(entity, fields, params) {\n return db.entityManager.load(uid, entity, fields, params);\n },\n\n async loadPages(entity, field, params) {\n if (!isString(field)) {\n throw new Error(`Invalid load. Expected ${field} to be a string`);\n }\n\n const { attributes } = db.metadata.get(uid);\n const attribute = attributes[field];\n\n if (\n !attribute ||\n attribute.type !== 'relation' ||\n !attribute.relation ||\n !['oneToMany', 'manyToMany'].includes(attribute.relation)\n ) {\n throw new Error(`Invalid load. Expected ${field} to be an anyToMany relational attribute`);\n }\n\n const [query, { page, pageSize }] = withOffsetLimit(params);\n\n const [results, { count: total }] = await Promise.all([\n db.entityManager.load(uid, entity, field, query),\n db.entityManager.load(uid, entity, field, { ...query, count: true }),\n ]);\n\n return {\n results,\n pagination: {\n page,\n pageSize,\n pageCount: Math.ceil(total / pageSize),\n total,\n },\n };\n },\n };\n};\n"],"names":["withDefaultPagination","params","page","pageSize","rest","Number","withOffsetLimit","offset","Math","max","limit","query","createRepository","uid","db","findOne","entityManager","findMany","findWithCount","Promise","all","count","findPage","results","total","pagination","pageCount","ceil","create","createMany","update","updateMany","delete","deleteMany","attachRelations","id","data","updateRelations","trx","transaction","get","commit","e","rollback","deleteRelations","populate","entity","load","fields","loadPages","field","isString","Error","attributes","metadata","attribute","type","relation","includes"],"mappings":";;AAIA,MAAMA,wBAAwB,CAACC,MAAAA,GAAAA;IAC7B,MAAM,EAAEC,OAAO,CAAC,EAAEC,WAAW,EAAE,EAAE,GAAGC,IAAAA,EAAM,GAAGH,MAAAA;IAE7C,OAAO;AACLC,QAAAA,IAAAA,EAAMG,
|
|
1
|
+
{"version":3,"file":"entity-repository.mjs","sources":["../../src/entity-manager/entity-repository.ts"],"sourcesContent":["import { isString } from 'lodash/fp';\nimport type { Database } from '..';\nimport type { Repository, Params } from './types';\n\nconst withDefaultPagination = (params: Params) => {\n const { page = 1, pageSize = 10, ...rest } = params;\n\n return {\n page: Number(page),\n pageSize: Number(pageSize),\n ...rest,\n };\n};\n\ntype ParamsWithLimits = Omit<Params, 'page' | 'pageSize'> & {\n limit: number;\n offset: number;\n};\n\nconst withOffsetLimit = (\n params: Params\n): [ParamsWithLimits, { page: number; pageSize: number }] => {\n const { page, pageSize, ...rest } = withDefaultPagination(params);\n\n const offset = Math.max(page - 1, 0) * pageSize;\n const limit = pageSize;\n\n const query = {\n ...rest,\n limit,\n offset,\n };\n\n return [query, { page, pageSize }];\n};\n\nexport const createRepository = (uid: string, db: Database): Repository => {\n return {\n findOne(params = {}) {\n return db.entityManager.findOne(uid, params);\n },\n\n findMany(params = {}) {\n return db.entityManager.findMany(uid, params);\n },\n\n findWithCount(params = {}) {\n return Promise.all([\n db.entityManager.findMany(uid, params),\n db.entityManager.count(uid, params),\n ]);\n },\n\n async findPage(params) {\n const [query, { page, pageSize }] = withOffsetLimit(params);\n\n const [results, total] = await Promise.all([\n db.entityManager.findMany(uid, query),\n db.entityManager.count(uid, query),\n ]);\n\n return {\n results,\n pagination: {\n page,\n pageSize,\n pageCount: Math.ceil(total / pageSize),\n total,\n },\n };\n },\n\n create(params) {\n return db.entityManager.create(uid, params);\n },\n\n createMany(params) {\n return db.entityManager.createMany(uid, params);\n },\n\n update(params) {\n return db.entityManager.update(uid, params);\n },\n\n updateMany(params) {\n return db.entityManager.updateMany(uid, params);\n },\n\n delete(params) {\n return db.entityManager.delete(uid, params);\n },\n\n deleteMany(params = {}) {\n return db.entityManager.deleteMany(uid, params);\n },\n\n count(params) {\n return db.entityManager.count(uid, params);\n },\n\n attachRelations(id, data) {\n return db.entityManager.attachRelations(uid, id, data);\n },\n\n async updateRelations(id, data) {\n const trx = await db.transaction();\n try {\n await db.entityManager.updateRelations(uid, id, data, { transaction: trx.get() });\n return await trx.commit();\n } catch (e) {\n await trx.rollback();\n throw e;\n }\n },\n\n deleteRelations(id) {\n return db.entityManager.deleteRelations(uid, id);\n },\n\n populate(entity, populate) {\n return db.entityManager.populate(uid, entity, populate);\n },\n\n load(entity, fields, params) {\n return db.entityManager.load(uid, entity, fields, params);\n },\n\n async loadPages(entity, field, params) {\n if (!isString(field)) {\n throw new Error(`Invalid load. Expected ${field} to be a string`);\n }\n\n const { attributes } = db.metadata.get(uid);\n const attribute = attributes[field];\n\n if (\n !attribute ||\n attribute.type !== 'relation' ||\n !attribute.relation ||\n !['oneToMany', 'manyToMany'].includes(attribute.relation)\n ) {\n throw new Error(`Invalid load. Expected ${field} to be an anyToMany relational attribute`);\n }\n\n const [query, { page, pageSize }] = withOffsetLimit(params);\n\n const [results, { count: total }] = await Promise.all([\n db.entityManager.load(uid, entity, field, query),\n db.entityManager.load(uid, entity, field, { ...query, count: true }),\n ]);\n\n return {\n results,\n pagination: {\n page,\n pageSize,\n pageCount: Math.ceil(total / pageSize),\n total,\n },\n };\n },\n };\n};\n"],"names":["withDefaultPagination","params","page","pageSize","rest","Number","withOffsetLimit","offset","Math","max","limit","query","createRepository","uid","db","findOne","entityManager","findMany","findWithCount","Promise","all","count","findPage","results","total","pagination","pageCount","ceil","create","createMany","update","updateMany","delete","deleteMany","attachRelations","id","data","updateRelations","trx","transaction","get","commit","e","rollback","deleteRelations","populate","entity","load","fields","loadPages","field","isString","Error","attributes","metadata","attribute","type","relation","includes"],"mappings":"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"}
|