@strapi/database 5.55.1 → 5.57.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/dialects/dialect.d.ts +28 -0
- package/dist/dialects/dialect.d.ts.map +1 -1
- package/dist/dialects/dialect.js +29 -0
- package/dist/dialects/dialect.js.map +1 -1
- package/dist/dialects/dialect.mjs +29 -0
- package/dist/dialects/dialect.mjs.map +1 -1
- package/dist/dialects/mysql/index.d.ts +9 -0
- package/dist/dialects/mysql/index.d.ts.map +1 -1
- package/dist/dialects/mysql/index.js +37 -0
- package/dist/dialects/mysql/index.js.map +1 -1
- package/dist/dialects/mysql/index.mjs +37 -0
- package/dist/dialects/mysql/index.mjs.map +1 -1
- package/dist/dialects/postgresql/index.d.ts +7 -0
- package/dist/dialects/postgresql/index.d.ts.map +1 -1
- package/dist/dialects/postgresql/index.js +50 -0
- package/dist/dialects/postgresql/index.js.map +1 -1
- package/dist/dialects/postgresql/index.mjs +50 -0
- package/dist/dialects/postgresql/index.mjs.map +1 -1
- package/dist/dialects/sqlite/index.d.ts +9 -0
- package/dist/dialects/sqlite/index.d.ts.map +1 -1
- package/dist/dialects/sqlite/index.js +16 -0
- package/dist/dialects/sqlite/index.js.map +1 -1
- package/dist/dialects/sqlite/index.mjs +16 -0
- package/dist/dialects/sqlite/index.mjs.map +1 -1
- package/dist/entity-manager/entity-repository.js +1 -1
- package/dist/entity-manager/entity-repository.js.map +1 -1
- package/dist/entity-manager/entity-repository.mjs +1 -1
- package/dist/entity-manager/entity-repository.mjs.map +1 -1
- package/dist/entity-manager/index.d.ts.map +1 -1
- package/dist/entity-manager/index.js +38 -36
- package/dist/entity-manager/index.js.map +1 -1
- package/dist/entity-manager/index.mjs +38 -36
- package/dist/entity-manager/index.mjs.map +1 -1
- package/dist/entity-manager/morph-relations.d.ts.map +1 -1
- package/dist/entity-manager/morph-relations.js +3 -5
- package/dist/entity-manager/morph-relations.js.map +1 -1
- package/dist/entity-manager/morph-relations.mjs +3 -5
- package/dist/entity-manager/morph-relations.mjs.map +1 -1
- package/dist/entity-manager/regular-relations.js +3 -3
- package/dist/entity-manager/regular-relations.js.map +1 -1
- package/dist/entity-manager/regular-relations.mjs +3 -3
- package/dist/entity-manager/regular-relations.mjs.map +1 -1
- package/dist/entity-manager/relations-orderer.d.ts.map +1 -1
- package/dist/entity-manager/relations-orderer.js +4 -5
- package/dist/entity-manager/relations-orderer.js.map +1 -1
- package/dist/entity-manager/relations-orderer.mjs +2 -3
- package/dist/entity-manager/relations-orderer.mjs.map +1 -1
- package/dist/fields/biginteger.js +1 -1
- package/dist/fields/biginteger.js.map +1 -1
- package/dist/fields/biginteger.mjs +1 -1
- package/dist/fields/biginteger.mjs.map +1 -1
- package/dist/fields/boolean.js +1 -1
- package/dist/fields/boolean.js.map +1 -1
- package/dist/fields/boolean.mjs +1 -1
- package/dist/fields/boolean.mjs.map +1 -1
- package/dist/fields/number.js +1 -1
- package/dist/fields/number.js.map +1 -1
- package/dist/fields/number.mjs +1 -1
- package/dist/fields/number.mjs.map +1 -1
- package/dist/fields/shared/parsers.js +2 -2
- package/dist/fields/shared/parsers.js.map +1 -1
- package/dist/fields/shared/parsers.mjs +2 -2
- package/dist/fields/shared/parsers.mjs.map +1 -1
- package/dist/fields/string.js +1 -1
- package/dist/fields/string.js.map +1 -1
- package/dist/fields/string.mjs +1 -1
- package/dist/fields/string.mjs.map +1 -1
- package/dist/index.d.ts +9 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1 -0
- package/dist/index.mjs.map +1 -1
- package/dist/metadata/attribute-naming.d.ts +31 -0
- package/dist/metadata/attribute-naming.d.ts.map +1 -0
- package/dist/metadata/attribute-naming.js +39 -0
- package/dist/metadata/attribute-naming.js.map +1 -0
- package/dist/metadata/attribute-naming.mjs +37 -0
- package/dist/metadata/attribute-naming.mjs.map +1 -0
- package/dist/metadata/index.d.ts +5 -2
- package/dist/metadata/index.d.ts.map +1 -1
- package/dist/metadata/index.js +3 -0
- package/dist/metadata/index.js.map +1 -1
- package/dist/metadata/index.mjs +3 -1
- package/dist/metadata/index.mjs.map +1 -1
- package/dist/metadata/metadata.d.ts +10 -0
- package/dist/metadata/metadata.d.ts.map +1 -1
- package/dist/metadata/metadata.js +10 -2
- package/dist/metadata/metadata.js.map +1 -1
- package/dist/metadata/metadata.mjs +10 -2
- package/dist/metadata/metadata.mjs.map +1 -1
- package/dist/metadata/relations.d.ts.map +1 -1
- package/dist/metadata/relations.js +6 -5
- package/dist/metadata/relations.js.map +1 -1
- package/dist/metadata/relations.mjs +6 -5
- package/dist/metadata/relations.mjs.map +1 -1
- package/dist/migrations/common.d.ts +2 -0
- package/dist/migrations/common.d.ts.map +1 -1
- package/dist/migrations/common.js.map +1 -1
- package/dist/migrations/common.mjs.map +1 -1
- package/dist/migrations/file-builder.d.ts +97 -0
- package/dist/migrations/file-builder.d.ts.map +1 -0
- package/dist/migrations/file-builder.js +251 -0
- package/dist/migrations/file-builder.js.map +1 -0
- package/dist/migrations/file-builder.mjs +240 -0
- package/dist/migrations/file-builder.mjs.map +1 -0
- package/dist/migrations/index.d.ts +3 -2
- package/dist/migrations/index.d.ts.map +1 -1
- package/dist/migrations/index.js +6 -0
- package/dist/migrations/index.js.map +1 -1
- package/dist/migrations/index.mjs +6 -0
- package/dist/migrations/index.mjs.map +1 -1
- package/dist/migrations/internal-migrations/5.0.0-02-document-id.js +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 +1 -1
- package/dist/migrations/internal-migrations/5.0.0-02-document-id.mjs.map +1 -1
- package/dist/migrations/resolver.d.ts.map +1 -1
- package/dist/migrations/resolver.js +4 -1
- package/dist/migrations/resolver.js.map +1 -1
- package/dist/migrations/resolver.mjs +4 -1
- package/dist/migrations/resolver.mjs.map +1 -1
- package/dist/query/helpers/order-by.d.ts.map +1 -1
- package/dist/query/helpers/order-by.js +3 -4
- package/dist/query/helpers/order-by.js.map +1 -1
- package/dist/query/helpers/order-by.mjs +3 -4
- package/dist/query/helpers/order-by.mjs.map +1 -1
- package/dist/query/helpers/populate/apply.d.ts.map +1 -1
- package/dist/query/helpers/populate/apply.js +46 -30
- package/dist/query/helpers/populate/apply.js.map +1 -1
- package/dist/query/helpers/populate/apply.mjs +46 -30
- package/dist/query/helpers/populate/apply.mjs.map +1 -1
- package/dist/query/helpers/populate/process.js +3 -3
- package/dist/query/helpers/populate/process.js.map +1 -1
- package/dist/query/helpers/populate/process.mjs +3 -3
- package/dist/query/helpers/populate/process.mjs.map +1 -1
- package/dist/query/helpers/search.js +2 -2
- package/dist/query/helpers/search.js.map +1 -1
- package/dist/query/helpers/search.mjs +2 -2
- package/dist/query/helpers/search.mjs.map +1 -1
- package/dist/query/helpers/streams/readable.js +3 -3
- package/dist/query/helpers/streams/readable.js.map +1 -1
- package/dist/query/helpers/streams/readable.mjs +3 -3
- package/dist/query/helpers/streams/readable.mjs.map +1 -1
- package/dist/query/helpers/transform.d.ts.map +1 -1
- package/dist/query/helpers/transform.js +6 -13
- package/dist/query/helpers/transform.js.map +1 -1
- package/dist/query/helpers/transform.mjs +6 -9
- package/dist/query/helpers/transform.mjs.map +1 -1
- package/dist/query/helpers/where.js +13 -9
- package/dist/query/helpers/where.js.map +1 -1
- package/dist/query/helpers/where.mjs +13 -9
- package/dist/query/helpers/where.mjs.map +1 -1
- package/dist/query/query-builder.d.ts.map +1 -1
- package/dist/query/query-builder.js +35 -29
- package/dist/query/query-builder.js.map +1 -1
- package/dist/query/query-builder.mjs +35 -29
- package/dist/query/query-builder.mjs.map +1 -1
- package/dist/schema/builder.js +5 -5
- package/dist/schema/builder.js.map +1 -1
- package/dist/schema/builder.mjs +5 -5
- package/dist/schema/builder.mjs.map +1 -1
- package/dist/schema/diff.js +12 -12
- package/dist/schema/diff.js.map +1 -1
- package/dist/schema/diff.mjs +12 -12
- package/dist/schema/diff.mjs.map +1 -1
- package/dist/schema/index.d.ts +3 -1
- package/dist/schema/index.d.ts.map +1 -1
- package/dist/schema/index.js +6 -0
- package/dist/schema/index.js.map +1 -1
- package/dist/schema/index.mjs +6 -0
- package/dist/schema/index.mjs.map +1 -1
- package/dist/schema/rename-helpers.d.ts +78 -0
- package/dist/schema/rename-helpers.d.ts.map +1 -0
- package/dist/schema/rename-helpers.js +235 -0
- package/dist/schema/rename-helpers.js.map +1 -0
- package/dist/schema/rename-helpers.mjs +233 -0
- package/dist/schema/rename-helpers.mjs.map +1 -0
- package/dist/utils/async-curry.d.ts.map +1 -1
- package/dist/utils/async-curry.js +1 -2
- package/dist/utils/async-curry.js.map +1 -1
- package/dist/utils/async-curry.mjs +1 -2
- package/dist/utils/async-curry.mjs.map +1 -1
- package/dist/utils/identifiers/hash.d.ts.map +1 -1
- package/dist/utils/identifiers/hash.js +1 -2
- package/dist/utils/identifiers/hash.js.map +1 -1
- package/dist/utils/identifiers/hash.mjs +1 -2
- package/dist/utils/identifiers/hash.mjs.map +1 -1
- package/dist/utils/identifiers/index.js +8 -10
- package/dist/utils/identifiers/index.js.map +1 -1
- package/dist/utils/identifiers/index.mjs +8 -6
- package/dist/utils/identifiers/index.mjs.map +1 -1
- package/dist/validations/relations/bidirectional.js +1 -1
- package/dist/validations/relations/bidirectional.js.map +1 -1
- package/dist/validations/relations/bidirectional.mjs +1 -1
- package/dist/validations/relations/bidirectional.mjs.map +1 -1
- package/package.json +6 -5
|
@@ -36,6 +36,22 @@ class SqliteDialect extends dialect {
|
|
|
36
36
|
canAlterConstraints() {
|
|
37
37
|
return false;
|
|
38
38
|
}
|
|
39
|
+
/**
|
|
40
|
+
* SQLite foreign keys are unnamed (declared inline on the table), so only
|
|
41
|
+
* indexes need dropping. Queries run on `trx`: SQLite pools hold a single
|
|
42
|
+
* connection, which the migration transaction already owns.
|
|
43
|
+
*/ async dropSchemaObject(trx, { table, name }) {
|
|
44
|
+
const indexes = await trx.raw('pragma index_list(??)', [
|
|
45
|
+
table
|
|
46
|
+
]);
|
|
47
|
+
if (!indexes.some((index)=>index.name === name)) {
|
|
48
|
+
return false;
|
|
49
|
+
}
|
|
50
|
+
await trx.raw('DROP INDEX ??', [
|
|
51
|
+
name
|
|
52
|
+
]);
|
|
53
|
+
return true;
|
|
54
|
+
}
|
|
39
55
|
getSqlType(type) {
|
|
40
56
|
switch(type){
|
|
41
57
|
case 'enum':
|
|
@@ -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\n/** SQLite compound SELECT limit (SQLITE_MAX_COMPOUND_SELECT); Knex batch insert uses UNION ALL per row. */\nconst SQLITE_BATCH_INSERT_SIZE = 500;\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 getBatchInsertSize(): number {\n return SQLITE_BATCH_INSERT_SIZE;\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","SQLITE_BATCH_INSERT_SIZE","SqliteDialect","Dialect","getBatchInsertSize","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;AAEjD,4GACA,MAAMC,wBAAAA,GAA2B,GAAA;AAElB,MAAMC,aAAAA,SAAsBC,OAAAA,CAAAA;IASzCC,kBAAAA,GAA6B;QAC3B,OAAOH,wBAAAA;AACT,IAAA;AAEAI,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,qBAAAA,CAAKC,OAAO,CAACL,WAAWG,QAAQ,CAAA;AACxD,QAAA;AAEA,QAAA,MAAMG,KAAAA,GAAQF,qBAAAA,CAAKG,OAAO,CAACP,WAAWG,QAAQ,CAAA;AAE9CK,QAAAA,oBAAAA,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;
|
|
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\n/** SQLite compound SELECT limit (SQLITE_MAX_COMPOUND_SELECT); Knex batch insert uses UNION ALL per row. */\nconst SQLITE_BATCH_INSERT_SIZE = 500;\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 getBatchInsertSize(): number {\n return SQLITE_BATCH_INSERT_SIZE;\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 /**\n * SQLite foreign keys are unnamed (declared inline on the table), so only\n * indexes need dropping. Queries run on `trx`: SQLite pools hold a single\n * connection, which the migration transaction already owns.\n */\n async dropSchemaObject(\n trx: Knex,\n { table, name }: { table: string; name: string }\n ): Promise<boolean> {\n const indexes: Array<{ name: string }> = await trx.raw('pragma index_list(??)', [table]);\n\n if (!indexes.some((index) => index.name === name)) {\n return false;\n }\n\n await trx.raw('DROP INDEX ??', [name]);\n return true;\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","SQLITE_BATCH_INSERT_SIZE","SqliteDialect","Dialect","getBatchInsertSize","configure","conn","connection","db","config","filename","path","resolve","dbDir","dirname","fse","ensureDirSync","useReturning","initialize","nativeConnection","raw","canAlterConstraints","dropSchemaObject","trx","table","name","indexes","some","index","getSqlType","type","supportsOperator","operator","includes","startSchemaUpdate","endSchemaUpdate","transformErrors","error","errno","errors","canAddIncrements","schemaInspector","SqliteSchemaInspector"],"mappings":"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"}
|
|
@@ -29,6 +29,22 @@ class SqliteDialect extends Dialect {
|
|
|
29
29
|
canAlterConstraints() {
|
|
30
30
|
return false;
|
|
31
31
|
}
|
|
32
|
+
/**
|
|
33
|
+
* SQLite foreign keys are unnamed (declared inline on the table), so only
|
|
34
|
+
* indexes need dropping. Queries run on `trx`: SQLite pools hold a single
|
|
35
|
+
* connection, which the migration transaction already owns.
|
|
36
|
+
*/ async dropSchemaObject(trx, { table, name }) {
|
|
37
|
+
const indexes = await trx.raw('pragma index_list(??)', [
|
|
38
|
+
table
|
|
39
|
+
]);
|
|
40
|
+
if (!indexes.some((index)=>index.name === name)) {
|
|
41
|
+
return false;
|
|
42
|
+
}
|
|
43
|
+
await trx.raw('DROP INDEX ??', [
|
|
44
|
+
name
|
|
45
|
+
]);
|
|
46
|
+
return true;
|
|
47
|
+
}
|
|
32
48
|
getSqlType(type) {
|
|
33
49
|
switch(type){
|
|
34
50
|
case 'enum':
|
|
@@ -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\n/** SQLite compound SELECT limit (SQLITE_MAX_COMPOUND_SELECT); Knex batch insert uses UNION ALL per row. */\nconst SQLITE_BATCH_INSERT_SIZE = 500;\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 getBatchInsertSize(): number {\n return SQLITE_BATCH_INSERT_SIZE;\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","SQLITE_BATCH_INSERT_SIZE","SqliteDialect","Dialect","getBatchInsertSize","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;AAEjD,4GACA,MAAMC,wBAAAA,GAA2B,GAAA;AAElB,MAAMC,aAAAA,SAAsBC,OAAAA,CAAAA;IASzCC,kBAAAA,GAA6B;QAC3B,OAAOH,wBAAAA;AACT,IAAA;AAEAI,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;
|
|
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\n/** SQLite compound SELECT limit (SQLITE_MAX_COMPOUND_SELECT); Knex batch insert uses UNION ALL per row. */\nconst SQLITE_BATCH_INSERT_SIZE = 500;\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 getBatchInsertSize(): number {\n return SQLITE_BATCH_INSERT_SIZE;\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 /**\n * SQLite foreign keys are unnamed (declared inline on the table), so only\n * indexes need dropping. Queries run on `trx`: SQLite pools hold a single\n * connection, which the migration transaction already owns.\n */\n async dropSchemaObject(\n trx: Knex,\n { table, name }: { table: string; name: string }\n ): Promise<boolean> {\n const indexes: Array<{ name: string }> = await trx.raw('pragma index_list(??)', [table]);\n\n if (!indexes.some((index) => index.name === name)) {\n return false;\n }\n\n await trx.raw('DROP INDEX ??', [name]);\n return true;\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","SQLITE_BATCH_INSERT_SIZE","SqliteDialect","Dialect","getBatchInsertSize","configure","conn","connection","db","config","filename","path","resolve","dbDir","dirname","fse","ensureDirSync","useReturning","initialize","nativeConnection","raw","canAlterConstraints","dropSchemaObject","trx","table","name","indexes","some","index","getSqlType","type","supportsOperator","operator","includes","startSchemaUpdate","endSchemaUpdate","transformErrors","error","errno","errors","canAddIncrements","schemaInspector","SqliteSchemaInspector"],"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 async attachRelations(id, data) {\n const trx = await db.transaction();\n try {\n await db.entityManager.attachRelations(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 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","trx","transaction","get","commit","e","rollback","updateRelations","deleteRelations","populate","entity","load","fields","loadPages","field","isString","Error","attributes","metadata","attribute","type","relation","includes"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"entity-repository.js","sources":["../../src/entity-manager/entity-repository.ts"],"sourcesContent":["import { isString } from 'lodash';\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 async attachRelations(id, data) {\n const trx = await db.transaction();\n try {\n await db.entityManager.attachRelations(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 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","trx","transaction","get","commit","e","rollback","updateRelations","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 async attachRelations(id, data) {\n const trx = await db.transaction();\n try {\n await db.entityManager.attachRelations(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 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","trx","transaction","get","commit","e","rollback","updateRelations","deleteRelations","populate","entity","load","fields","loadPages","field","isString","Error","attributes","metadata","attribute","type","relation","includes"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"entity-repository.mjs","sources":["../../src/entity-manager/entity-repository.ts"],"sourcesContent":["import { isString } from 'lodash';\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 async attachRelations(id, data) {\n const trx = await db.transaction();\n try {\n await db.entityManager.attachRelations(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 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","trx","transaction","get","commit","e","rollback","updateRelations","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":"index.d.ts","sourceRoot":"","sources":["../../src/entity-manager/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/entity-manager/index.ts"],"names":[],"mappings":"AAyCA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,IAAI,CAAC;AAGnC,OAAO,EAAE,aAAa,EAAsB,MAAM,SAAS,CAAC;AAE5D,cAAc,SAAS,CAAC;AA2OxB,eAAO,MAAM,mBAAmB,GAAI,IAAI,QAAQ,KAAG,aA6+ClD,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var _ = require('lodash
|
|
3
|
+
var _ = require('lodash');
|
|
4
4
|
var types = require('../utils/types.js');
|
|
5
5
|
var index = require('../fields/index.js');
|
|
6
6
|
var queryBuilder = require('../query/query-builder.js');
|
|
@@ -32,7 +32,7 @@ var relationsOrderer = require('./relations-orderer.js');
|
|
|
32
32
|
await qb.execute();
|
|
33
33
|
}
|
|
34
34
|
}
|
|
35
|
-
const isRecord = (value)=>_.isObject(value) &&
|
|
35
|
+
const isRecord = (value)=>_.isObject(value) && value != null;
|
|
36
36
|
const toId = (value)=>{
|
|
37
37
|
if (isRecord(value) && 'id' in value && isValidId(value.id)) {
|
|
38
38
|
return value.id;
|
|
@@ -43,10 +43,10 @@ const toId = (value)=>{
|
|
|
43
43
|
throw new Error(`Invalid id, expected a string or integer, got ${JSON.stringify(value)}`);
|
|
44
44
|
};
|
|
45
45
|
const toIds = (value)=>_.castArray(value || []).map(toId);
|
|
46
|
-
const isValidId = (value)=>_.isString(value) ||
|
|
46
|
+
const isValidId = (value)=>_.isString(value) || Number.isInteger(value);
|
|
47
47
|
const isValidObjectId = (value)=>isRecord(value) && 'id' in value && isValidId(value.id);
|
|
48
48
|
const toIdArray = (data)=>{
|
|
49
|
-
const array = _.castArray(data).filter((datum)
|
|
49
|
+
const array = _.castArray(data).filter((datum)=>datum != null).map((datum)=>{
|
|
50
50
|
// if it is a string or an integer return an obj with id = to datum
|
|
51
51
|
if (isValidId(datum)) {
|
|
52
52
|
return {
|
|
@@ -60,17 +60,17 @@ const toIdArray = (data)=>{
|
|
|
60
60
|
}
|
|
61
61
|
return datum;
|
|
62
62
|
});
|
|
63
|
-
return _.uniqWith(_.isEqual
|
|
63
|
+
return _.uniqWith(array, _.isEqual);
|
|
64
64
|
};
|
|
65
65
|
const toAssocs = (data)=>{
|
|
66
|
-
if (
|
|
66
|
+
if (Array.isArray(data) || _.isString(data) || _.isNumber(data) || data === null || isRecord(data) && 'id' in data) {
|
|
67
67
|
return {
|
|
68
|
-
set:
|
|
68
|
+
set: data === null ? data : toIdArray(data)
|
|
69
69
|
};
|
|
70
70
|
}
|
|
71
71
|
if (data?.set) {
|
|
72
72
|
return {
|
|
73
|
-
set:
|
|
73
|
+
set: data.set === null ? data.set : toIdArray(data.set)
|
|
74
74
|
};
|
|
75
75
|
}
|
|
76
76
|
return {
|
|
@@ -95,8 +95,8 @@ const processData = (metadata, data = {}, { withDefaults = false } = {})=>{
|
|
|
95
95
|
const attribute = attributes[attributeName];
|
|
96
96
|
if (types.isScalarAttribute(attribute)) {
|
|
97
97
|
const field = index.createField(attribute);
|
|
98
|
-
if (
|
|
99
|
-
if (
|
|
98
|
+
if (data[attributeName] === undefined) {
|
|
99
|
+
if (attribute.default !== undefined && withDefaults) {
|
|
100
100
|
if (typeof attribute.default === 'function') {
|
|
101
101
|
obj[attributeName] = attribute.default();
|
|
102
102
|
} else {
|
|
@@ -116,7 +116,7 @@ const processData = (metadata, data = {}, { withDefaults = false } = {})=>{
|
|
|
116
116
|
if ('joinColumn' in attribute && attribute.joinColumn && attribute.owner) {
|
|
117
117
|
const joinColumnName = attribute.joinColumn.name;
|
|
118
118
|
// allow setting to null
|
|
119
|
-
let attrValue =
|
|
119
|
+
let attrValue = data[attributeName] !== undefined ? data[attributeName] : data[joinColumnName];
|
|
120
120
|
// Legacy single-column storage: only one id fits. Take the last
|
|
121
121
|
// and warn — modern schemas use a join table that can hold both
|
|
122
122
|
// the draft and published rows of the related entry.
|
|
@@ -127,9 +127,9 @@ const processData = (metadata, data = {}, { withDefaults = false } = {})=>{
|
|
|
127
127
|
}
|
|
128
128
|
attrValue = setIds.length > 0 ? setIds[setIds.length - 1] : null;
|
|
129
129
|
}
|
|
130
|
-
if (
|
|
130
|
+
if (attrValue === null) {
|
|
131
131
|
obj[joinColumnName] = attrValue;
|
|
132
|
-
} else if (
|
|
132
|
+
} else if (attrValue !== undefined) {
|
|
133
133
|
obj[joinColumnName] = toId(attrValue);
|
|
134
134
|
}
|
|
135
135
|
continue;
|
|
@@ -144,8 +144,8 @@ const processData = (metadata, data = {}, { withDefaults = false } = {})=>{
|
|
|
144
144
|
});
|
|
145
145
|
continue;
|
|
146
146
|
}
|
|
147
|
-
if (
|
|
148
|
-
if (!_.has('id'
|
|
147
|
+
if (value !== undefined) {
|
|
148
|
+
if (!_.has(value, 'id') || !_.has(value, typeField)) {
|
|
149
149
|
throw new Error(`Expects properties ${typeField} an id to make a morph association`);
|
|
150
150
|
}
|
|
151
151
|
Object.assign(obj, {
|
|
@@ -188,11 +188,11 @@ const createEntityManager = (db)=>{
|
|
|
188
188
|
const states = await db.lifecycles.run('beforeCount', uid, {
|
|
189
189
|
params
|
|
190
190
|
});
|
|
191
|
-
const res = await this.createQueryBuilder(uid).init(_.pick([
|
|
191
|
+
const res = await this.createQueryBuilder(uid).init(_.pick(params, [
|
|
192
192
|
'_q',
|
|
193
193
|
'where',
|
|
194
194
|
'filters'
|
|
195
|
-
]
|
|
195
|
+
])).count().first().execute();
|
|
196
196
|
const result = Number(res.count);
|
|
197
197
|
await db.lifecycles.run('afterCount', uid, {
|
|
198
198
|
params,
|
|
@@ -250,7 +250,7 @@ const createEntityManager = (db)=>{
|
|
|
250
250
|
});
|
|
251
251
|
const metadata = db.metadata.get(uid);
|
|
252
252
|
const { data } = params;
|
|
253
|
-
if (!
|
|
253
|
+
if (!Array.isArray(data)) {
|
|
254
254
|
throw new Error('CreateMany expects data to be an array');
|
|
255
255
|
}
|
|
256
256
|
const dataToInsert = data.map((datum)=>processData(metadata, datum, {
|
|
@@ -350,11 +350,11 @@ const createEntityManager = (db)=>{
|
|
|
350
350
|
throw new Error('Update requires data');
|
|
351
351
|
}
|
|
352
352
|
// Same pick set as count and deleteMany. See deleteMany for why.
|
|
353
|
-
const updatedRows = await this.createQueryBuilder(uid).init(_.pick([
|
|
353
|
+
const updatedRows = await this.createQueryBuilder(uid).init(_.pick(params, [
|
|
354
354
|
'_q',
|
|
355
355
|
'where',
|
|
356
356
|
'filters'
|
|
357
|
-
]
|
|
357
|
+
])).update(dataToUpdate).execute({
|
|
358
358
|
mapResults: false
|
|
359
359
|
});
|
|
360
360
|
const result = {
|
|
@@ -413,11 +413,11 @@ const createEntityManager = (db)=>{
|
|
|
413
413
|
// Only apply filter criteria (_q / where / filters), same as count — not full findMany params.
|
|
414
414
|
// limit, offset, orderBy, populate, etc. must be ignored: populate throws on delete results,
|
|
415
415
|
// and pagination keys can make deleteMany diverge from findMany or delete an unexpected slice.
|
|
416
|
-
const deletedRows = await this.createQueryBuilder(uid).init(_.pick([
|
|
416
|
+
const deletedRows = await this.createQueryBuilder(uid).init(_.pick(params, [
|
|
417
417
|
'_q',
|
|
418
418
|
'where',
|
|
419
419
|
'filters'
|
|
420
|
-
]
|
|
420
|
+
])).delete().execute({
|
|
421
421
|
mapResults: false
|
|
422
422
|
});
|
|
423
423
|
const result = {
|
|
@@ -436,7 +436,7 @@ const createEntityManager = (db)=>{
|
|
|
436
436
|
const { transaction: trx } = options ?? {};
|
|
437
437
|
for (const attributeName of Object.keys(attributes)){
|
|
438
438
|
const attribute = attributes[attributeName];
|
|
439
|
-
const isValidLink = _.has(
|
|
439
|
+
const isValidLink = _.has(data, attributeName) && data[attributeName] != null;
|
|
440
440
|
if (attribute.type !== 'relation' || !isValidLink) {
|
|
441
441
|
continue;
|
|
442
442
|
}
|
|
@@ -576,7 +576,7 @@ const createEntityManager = (db)=>{
|
|
|
576
576
|
});
|
|
577
577
|
}
|
|
578
578
|
// prepare new relations to insert
|
|
579
|
-
const insert = _.uniqBy('id'
|
|
579
|
+
const insert = _.uniqBy(relsToAdd, 'id').map((data)=>{
|
|
580
580
|
return {
|
|
581
581
|
[joinColumn.name]: id,
|
|
582
582
|
[inverseJoinColumn.name]: data.id,
|
|
@@ -629,7 +629,7 @@ const createEntityManager = (db)=>{
|
|
|
629
629
|
const { transaction: trx } = options ?? {};
|
|
630
630
|
for (const attributeName of Object.keys(attributes)){
|
|
631
631
|
const attribute = attributes[attributeName];
|
|
632
|
-
if (attribute.type !== 'relation' || !_.has(
|
|
632
|
+
if (attribute.type !== 'relation' || !_.has(data, attributeName)) {
|
|
633
633
|
continue;
|
|
634
634
|
}
|
|
635
635
|
const cleanRelationData = toAssocs(data[attributeName]);
|
|
@@ -648,7 +648,7 @@ const createEntityManager = (db)=>{
|
|
|
648
648
|
[idColumn.name]: id,
|
|
649
649
|
[typeColumn.name]: uid
|
|
650
650
|
}).transacting(trx).execute();
|
|
651
|
-
if (
|
|
651
|
+
if (cleanRelationData.set !== null) {
|
|
652
652
|
const relId = toIds(cleanRelationData.set?.[0]);
|
|
653
653
|
await this.createQueryBuilder(target).update({
|
|
654
654
|
[idColumn.name]: id,
|
|
@@ -878,7 +878,7 @@ const createEntityManager = (db)=>{
|
|
|
878
878
|
}).update({
|
|
879
879
|
[attribute.joinColumn.referencedColumn]: null
|
|
880
880
|
}).transacting(trx).execute();
|
|
881
|
-
if (
|
|
881
|
+
if (cleanRelationData.set !== null) {
|
|
882
882
|
const relIdsToAdd = toIds(cleanRelationData.set);
|
|
883
883
|
await this.createQueryBuilder(target).where({
|
|
884
884
|
id: relIdsToAdd
|
|
@@ -901,7 +901,7 @@ const createEntityManager = (db)=>{
|
|
|
901
901
|
select.push(inverseOrderColumnName);
|
|
902
902
|
}
|
|
903
903
|
// only delete relations
|
|
904
|
-
if (
|
|
904
|
+
if (cleanRelationData.set === null) {
|
|
905
905
|
await regularRelations.deleteRelations({
|
|
906
906
|
id,
|
|
907
907
|
attribute,
|
|
@@ -910,7 +910,7 @@ const createEntityManager = (db)=>{
|
|
|
910
910
|
transaction: trx
|
|
911
911
|
});
|
|
912
912
|
} else {
|
|
913
|
-
const isPartialUpdate = !_.has('set'
|
|
913
|
+
const isPartialUpdate = !_.has(cleanRelationData, 'set');
|
|
914
914
|
let relIdsToaddOrMove;
|
|
915
915
|
if (isPartialUpdate) {
|
|
916
916
|
if (relations.isAnyToOne(attribute)) ;
|
|
@@ -918,7 +918,7 @@ const createEntityManager = (db)=>{
|
|
|
918
918
|
// Use id-only comparison so a disconnect item whose id also appears in
|
|
919
919
|
// the connect array is correctly excluded from deletion (deep-equality
|
|
920
920
|
// fails because connect items carry extra fields like `position`).
|
|
921
|
-
const relIdsToDelete = toIds(_.differenceWith((a, b)=>a.id === b.id
|
|
921
|
+
const relIdsToDelete = toIds(_.differenceWith(cleanRelationData.disconnect, cleanRelationData.connect ?? [], (a, b)=>a.id === b.id));
|
|
922
922
|
// When a connect item's position.before/after references an id that is
|
|
923
923
|
// about to be deleted (relIdsToDelete), the referenced row won't exist by
|
|
924
924
|
// the time the adjacentRelations query runs below, causing sortConnectArray
|
|
@@ -1058,7 +1058,7 @@ const createEntityManager = (db)=>{
|
|
|
1058
1058
|
}).where(joinTable.on || {}).transacting(trx).execute();
|
|
1059
1059
|
}
|
|
1060
1060
|
// prepare relations to insert
|
|
1061
|
-
const insert = _.uniqBy('id'
|
|
1061
|
+
const insert = _.uniqBy(cleanRelationData.connect, 'id').map((relToAdd)=>({
|
|
1062
1062
|
[joinColumn.name]: id,
|
|
1063
1063
|
[inverseJoinColumn.name]: relToAdd.id,
|
|
1064
1064
|
...joinTable.on,
|
|
@@ -1095,7 +1095,7 @@ const createEntityManager = (db)=>{
|
|
|
1095
1095
|
}
|
|
1096
1096
|
// add inv order value
|
|
1097
1097
|
if (relations.hasInverseOrderColumn(attribute)) {
|
|
1098
|
-
const nonExistingRelsIds = _.difference(relIdsToaddOrMove, _.map(inverseJoinColumn.name
|
|
1098
|
+
const nonExistingRelsIds = _.difference(relIdsToaddOrMove, _.map(currentMovingRels, inverseJoinColumn.name));
|
|
1099
1099
|
const maxResults = await db.getConnection().select(inverseJoinColumn.name).max(inverseOrderColumnName, {
|
|
1100
1100
|
as: 'max'
|
|
1101
1101
|
}).whereIn(inverseJoinColumn.name, nonExistingRelsIds).where(joinTable.on || {}).groupBy(inverseJoinColumn.name).from(joinTable.name).transacting(trx);
|
|
@@ -1140,7 +1140,7 @@ const createEntityManager = (db)=>{
|
|
|
1140
1140
|
if (_.isEmpty(cleanRelationData.set)) {
|
|
1141
1141
|
continue;
|
|
1142
1142
|
}
|
|
1143
|
-
const insert = _.uniqBy('id'
|
|
1143
|
+
const insert = _.uniqBy(cleanRelationData.set, 'id').map((relToAdd)=>({
|
|
1144
1144
|
[joinColumn.name]: id,
|
|
1145
1145
|
[inverseJoinColumn.name]: relToAdd.id,
|
|
1146
1146
|
...joinTable.on,
|
|
@@ -1160,7 +1160,7 @@ const createEntityManager = (db)=>{
|
|
|
1160
1160
|
$in: relIdsToaddOrMove
|
|
1161
1161
|
}
|
|
1162
1162
|
}).where(joinTable.on || {}).transacting(trx).execute();
|
|
1163
|
-
const inverseRelsIds = _.map(inverseJoinColumn.name
|
|
1163
|
+
const inverseRelsIds = _.map(existingRels, inverseJoinColumn.name);
|
|
1164
1164
|
const nonExistingRelsIds = _.difference(relIdsToaddOrMove, inverseRelsIds);
|
|
1165
1165
|
const maxResults = await db.getConnection().select(inverseJoinColumn.name).max(inverseOrderColumnName, {
|
|
1166
1166
|
as: 'max'
|
|
@@ -1317,7 +1317,9 @@ const createEntityManager = (db)=>{
|
|
|
1317
1317
|
// TODO: add lifecycle events
|
|
1318
1318
|
async load (uid, entity, fields, populate) {
|
|
1319
1319
|
const { attributes } = db.metadata.get(uid);
|
|
1320
|
-
const fieldsArr =
|
|
1320
|
+
const fieldsArr = Array.isArray(fields) ? fields : [
|
|
1321
|
+
fields
|
|
1322
|
+
];
|
|
1321
1323
|
fieldsArr.forEach((field)=>{
|
|
1322
1324
|
const attribute = attributes[field];
|
|
1323
1325
|
if (!attribute || attribute.type !== 'relation') {
|
|
@@ -1340,7 +1342,7 @@ const createEntityManager = (db)=>{
|
|
|
1340
1342
|
return null;
|
|
1341
1343
|
}
|
|
1342
1344
|
if (Array.isArray(fields)) {
|
|
1343
|
-
return _.pick(
|
|
1345
|
+
return _.pick(entry, fields);
|
|
1344
1346
|
}
|
|
1345
1347
|
return entry[fields];
|
|
1346
1348
|
},
|