@strapi/database 5.30.0 → 5.31.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (91) hide show
  1. package/dist/connection.js.map +1 -1
  2. package/dist/connection.mjs.map +1 -1
  3. package/dist/dialects/dialect.js.map +1 -1
  4. package/dist/dialects/dialect.mjs.map +1 -1
  5. package/dist/dialects/index.js.map +1 -1
  6. package/dist/dialects/index.mjs.map +1 -1
  7. package/dist/dialects/mysql/database-inspector.js.map +1 -1
  8. package/dist/dialects/mysql/database-inspector.mjs.map +1 -1
  9. package/dist/dialects/mysql/index.js +1 -2
  10. package/dist/dialects/mysql/index.js.map +1 -1
  11. package/dist/dialects/mysql/index.mjs +1 -2
  12. package/dist/dialects/mysql/index.mjs.map +1 -1
  13. package/dist/dialects/mysql/schema-inspector.js.map +1 -1
  14. package/dist/dialects/mysql/schema-inspector.mjs.map +1 -1
  15. package/dist/dialects/postgresql/index.js.map +1 -1
  16. package/dist/dialects/postgresql/index.mjs.map +1 -1
  17. package/dist/dialects/postgresql/schema-inspector.js.map +1 -1
  18. package/dist/dialects/postgresql/schema-inspector.mjs.map +1 -1
  19. package/dist/dialects/sqlite/index.js.map +1 -1
  20. package/dist/dialects/sqlite/index.mjs.map +1 -1
  21. package/dist/dialects/sqlite/schema-inspector.js.map +1 -1
  22. package/dist/dialects/sqlite/schema-inspector.mjs.map +1 -1
  23. package/dist/entity-manager/index.js.map +1 -1
  24. package/dist/entity-manager/index.mjs.map +1 -1
  25. package/dist/entity-manager/morph-relations.js.map +1 -1
  26. package/dist/entity-manager/morph-relations.mjs.map +1 -1
  27. package/dist/entity-manager/regular-relations.d.ts +1 -0
  28. package/dist/entity-manager/regular-relations.d.ts.map +1 -1
  29. package/dist/errors/database.js.map +1 -1
  30. package/dist/errors/database.mjs.map +1 -1
  31. package/dist/errors/invalid-date.js.map +1 -1
  32. package/dist/errors/invalid-date.mjs.map +1 -1
  33. package/dist/errors/invalid-datetime.js.map +1 -1
  34. package/dist/errors/invalid-datetime.mjs.map +1 -1
  35. package/dist/errors/invalid-relation.js.map +1 -1
  36. package/dist/errors/invalid-relation.mjs.map +1 -1
  37. package/dist/errors/invalid-time.js.map +1 -1
  38. package/dist/errors/invalid-time.mjs.map +1 -1
  39. package/dist/errors/not-null.js.map +1 -1
  40. package/dist/errors/not-null.mjs.map +1 -1
  41. package/dist/fields/field.js.map +1 -1
  42. package/dist/fields/field.mjs.map +1 -1
  43. package/dist/fields/index.js.map +1 -1
  44. package/dist/fields/index.mjs.map +1 -1
  45. package/dist/fields/number.js.map +1 -1
  46. package/dist/fields/number.mjs.map +1 -1
  47. package/dist/fields/shared/parsers.js.map +1 -1
  48. package/dist/fields/shared/parsers.mjs.map +1 -1
  49. package/dist/index.js.map +1 -1
  50. package/dist/index.mjs.map +1 -1
  51. package/dist/metadata/metadata.js.map +1 -1
  52. package/dist/metadata/metadata.mjs.map +1 -1
  53. package/dist/metadata/relations.js.map +1 -1
  54. package/dist/metadata/relations.mjs.map +1 -1
  55. package/dist/migrations/internal-migrations/5.0.0-01-convert-identifiers-long-than-max-length.js.map +1 -1
  56. package/dist/migrations/internal-migrations/5.0.0-01-convert-identifiers-long-than-max-length.mjs.map +1 -1
  57. package/dist/migrations/internal-migrations/5.0.0-02-document-id.js.map +1 -1
  58. package/dist/migrations/internal-migrations/5.0.0-02-document-id.mjs.map +1 -1
  59. package/dist/migrations/internal-migrations/5.0.0-05-drop-slug-unique-index.js.map +1 -1
  60. package/dist/migrations/internal-migrations/5.0.0-05-drop-slug-unique-index.mjs.map +1 -1
  61. package/dist/migrations/logger.js.map +1 -1
  62. package/dist/migrations/logger.mjs.map +1 -1
  63. package/dist/query/helpers/join.js.map +1 -1
  64. package/dist/query/helpers/join.mjs.map +1 -1
  65. package/dist/query/helpers/order-by.js.map +1 -1
  66. package/dist/query/helpers/order-by.mjs.map +1 -1
  67. package/dist/query/helpers/populate/apply.js.map +1 -1
  68. package/dist/query/helpers/populate/apply.mjs.map +1 -1
  69. package/dist/query/helpers/search.js.map +1 -1
  70. package/dist/query/helpers/search.mjs.map +1 -1
  71. package/dist/query/helpers/streams/readable.js.map +1 -1
  72. package/dist/query/helpers/streams/readable.mjs.map +1 -1
  73. package/dist/query/helpers/where.js.map +1 -1
  74. package/dist/query/helpers/where.mjs.map +1 -1
  75. package/dist/query/query-builder.js.map +1 -1
  76. package/dist/query/query-builder.mjs.map +1 -1
  77. package/dist/repairs/operations/remove-orphan-morph-types.js.map +1 -1
  78. package/dist/repairs/operations/remove-orphan-morph-types.mjs.map +1 -1
  79. package/dist/schema/builder.js.map +1 -1
  80. package/dist/schema/builder.mjs.map +1 -1
  81. package/dist/schema/schema.js.map +1 -1
  82. package/dist/schema/schema.mjs.map +1 -1
  83. package/dist/utils/identifiers/hash.js.map +1 -1
  84. package/dist/utils/identifiers/hash.mjs.map +1 -1
  85. package/dist/utils/identifiers/index.js +2 -4
  86. package/dist/utils/identifiers/index.js.map +1 -1
  87. package/dist/utils/identifiers/index.mjs +2 -4
  88. package/dist/utils/identifiers/index.mjs.map +1 -1
  89. package/dist/utils/knex.js.map +1 -1
  90. package/dist/utils/knex.mjs.map +1 -1
  91. package/package.json +5 -5
@@ -1 +1 @@
1
- {"version":3,"file":"where.mjs","sources":["../../../src/query/helpers/where.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/ban-ts-comment */\nimport { isArray, castArray, isPlainObject } from 'lodash/fp';\nimport type { Knex } from 'knex';\n\nimport { isOperator, isOperatorOfType } from '@strapi/utils';\nimport * as types from '../../utils/types';\nimport { createField } from '../../fields';\nimport { createJoin } from './join';\nimport { toColumnName } from './transform';\nimport { isKnexQuery } from '../../utils/knex';\n\nimport type { Ctx } from '../types';\nimport type { Attribute } from '../../types';\n\ntype WhereCtx = Ctx & { alias?: string; isGroupRoot?: boolean };\n\nconst isRecord = (value: unknown): value is Record<string, unknown> => isPlainObject(value);\n\nconst castValue = (value: unknown, attribute: Attribute | null) => {\n if (!attribute) {\n return value;\n }\n\n if (types.isScalar(attribute.type) && !isKnexQuery(value)) {\n const field = createField(attribute);\n\n return value === null ? null : field.toDB(value);\n }\n\n return value;\n};\n\nconst processSingleAttributeWhere = (\n attribute: Attribute | null,\n where: unknown,\n operator = '$eq'\n) => {\n if (!isRecord(where)) {\n if (isOperatorOfType('cast', operator)) {\n return castValue(where, attribute);\n }\n\n return where;\n }\n\n const filters: Record<string, unknown> = {};\n\n for (const key of Object.keys(where)) {\n const value = where[key];\n\n if (!isOperatorOfType('where', key)) {\n throw new Error(`Undefined attribute level operator ${key}`);\n }\n\n filters[key] = processAttributeWhere(attribute, value, key);\n }\n\n return filters;\n};\n\nconst processAttributeWhere = (attribute: Attribute | null, where: unknown, operator = '$eq') => {\n if (isArray(where)) {\n return where.map((sub) => processSingleAttributeWhere(attribute, sub, operator));\n }\n\n return processSingleAttributeWhere(attribute, where, operator);\n};\n\nconst processNested = (where: unknown, ctx: WhereCtx) => {\n if (!isRecord(where)) {\n return where;\n }\n\n return processWhere(where, ctx);\n};\n\nconst processRelationWhere = (where: unknown, ctx: WhereCtx) => {\n const { qb, alias } = ctx;\n\n const idAlias = qb.aliasColumn('id', alias);\n if (!isRecord(where)) {\n return { [idAlias]: where };\n }\n\n const keys = Object.keys(where);\n const operatorKeys = keys.filter((key) => isOperator(key));\n\n if (operatorKeys.length > 0 && operatorKeys.length !== keys.length) {\n throw new Error(`Operator and non-operator keys cannot be mixed in a relation where clause`);\n }\n\n if (operatorKeys.length > 1) {\n throw new Error(\n `Only one operator key is allowed in a relation where clause, but found: ${operatorKeys}`\n );\n }\n\n if (operatorKeys.length === 1) {\n const operator = operatorKeys[0];\n\n if (isOperatorOfType('group', operator)) {\n return processWhere(where, ctx);\n }\n\n return { [idAlias]: { [operator]: processNested(where[operator], ctx) } };\n }\n\n return processWhere(where, ctx);\n};\n\n/**\n * Process where parameter\n */\nfunction processWhere(where: Record<string, unknown>, ctx: WhereCtx): Record<string, unknown>;\nfunction processWhere(where: Record<string, unknown>[], ctx: WhereCtx): Record<string, unknown>[];\nfunction processWhere(\n where: Record<string, unknown> | Record<string, unknown>[],\n ctx: WhereCtx\n): Record<string, unknown> | Record<string, unknown>[] {\n if (!isArray(where) && !isRecord(where)) {\n throw new Error('Where must be an array or an object');\n }\n\n if (isArray(where)) {\n return where.map((sub) => processWhere(sub, ctx));\n }\n\n const { db, uid, qb, alias } = ctx;\n const meta = db.metadata.get(uid);\n\n const filters: Record<string, unknown> = {};\n\n // for each key in where\n for (const key of Object.keys(where)) {\n const value = where[key];\n\n // if operator $and $or -> process recursively\n if (isOperatorOfType('group', key)) {\n if (!Array.isArray(value)) {\n throw new Error(`Operator ${key} must be an array`);\n }\n\n filters[key] = value.map((sub) => processNested(sub, ctx));\n continue;\n }\n\n if (key === '$not') {\n filters[key] = processNested(value, ctx);\n continue;\n }\n\n if (isOperatorOfType('where', key)) {\n throw new Error(\n `Only $and, $or and $not can only be used as root level operators. Found ${key}.`\n );\n }\n\n const attribute = meta.attributes[key];\n\n if (!attribute) {\n filters[qb.aliasColumn(key, alias)] = processAttributeWhere(null, value);\n continue;\n }\n\n if (types.isRelation(attribute.type) && 'target' in attribute) {\n // attribute\n const subAlias = createJoin(ctx, {\n alias: alias || qb.alias,\n attributeName: key,\n attribute,\n });\n\n const nestedWhere = processRelationWhere(value, {\n db,\n qb,\n alias: subAlias,\n uid: attribute.target,\n });\n\n // TODO: use a better merge logic (push to $and when collisions)\n Object.assign(filters, nestedWhere);\n\n continue;\n }\n\n if (types.isScalar(attribute.type)) {\n const columnName = toColumnName(meta, key);\n const aliasedColumnName = qb.aliasColumn(columnName, alias);\n\n filters[aliasedColumnName] = processAttributeWhere(attribute, value);\n\n continue;\n }\n\n throw new Error(`You cannot filter on ${attribute.type} types`);\n }\n\n return filters;\n}\n\ntype Operator =\n | '$eq'\n | '$ne'\n | '$nei'\n | '$in'\n | '$notIn'\n | '$lt'\n | '$lte'\n | '$gt'\n | '$gte'\n | '$between'\n | '$contains'\n | '$notContains'\n | '$containsi'\n | '$notContainsi'\n | '$startsWith'\n | '$endsWith'\n | '$null'\n | '$notNull'\n | '$not'\n | '$eqi'\n | '$startsWithi'\n | '$endsWithi'\n | '$jsonSupersetOf';\n\n// TODO: add type casting per operator at some point\nconst applyOperator = (qb: Knex.QueryBuilder, column: any, operator: Operator, value: any) => {\n if (Array.isArray(value) && !isOperatorOfType('array', operator)) {\n return qb.where((subQB) => {\n value.forEach((subValue) =>\n subQB.orWhere((innerQB) => {\n applyOperator(innerQB, column, operator, subValue);\n })\n );\n });\n }\n\n switch (operator) {\n case '$not': {\n qb.whereNot((qb) => applyWhereToColumn(qb, column, value));\n break;\n }\n\n case '$in': {\n // @ts-ignore\n // TODO: fix in v5\n qb.whereIn(column, isKnexQuery(value) ? value : castArray(value));\n break;\n }\n\n case '$notIn': {\n // @ts-ignore\n // TODO: fix in v5\n qb.whereNotIn(column, isKnexQuery(value) ? value : castArray(value));\n break;\n }\n\n case '$eq': {\n if (value === null) {\n qb.whereNull(column);\n break;\n }\n\n qb.where(column, value);\n break;\n }\n\n case '$eqi': {\n if (value === null) {\n qb.whereNull(column);\n break;\n }\n qb.whereRaw(`${fieldLowerFn(qb)} LIKE LOWER(?)`, [column, `${value}`]);\n break;\n }\n case '$ne': {\n if (value === null) {\n qb.whereNotNull(column);\n break;\n }\n\n qb.where(column, '<>', value);\n break;\n }\n case '$nei': {\n if (value === null) {\n qb.whereNotNull(column);\n break;\n }\n qb.whereRaw(`${fieldLowerFn(qb)} NOT LIKE LOWER(?)`, [column, `${value}`]);\n break;\n }\n case '$gt': {\n qb.where(column, '>', value);\n break;\n }\n case '$gte': {\n qb.where(column, '>=', value);\n break;\n }\n case '$lt': {\n qb.where(column, '<', value);\n break;\n }\n case '$lte': {\n qb.where(column, '<=', value);\n break;\n }\n case '$null': {\n if (value) {\n qb.whereNull(column);\n } else {\n qb.whereNotNull(column);\n }\n break;\n }\n case '$notNull': {\n if (value) {\n qb.whereNotNull(column);\n } else {\n qb.whereNull(column);\n }\n break;\n }\n case '$between': {\n qb.whereBetween(column, value);\n break;\n }\n case '$startsWith': {\n qb.where(column, 'like', `${value}%`);\n break;\n }\n case '$startsWithi': {\n qb.whereRaw(`${fieldLowerFn(qb)} LIKE LOWER(?)`, [column, `${value}%`]);\n break;\n }\n case '$endsWith': {\n qb.where(column, 'like', `%${value}`);\n break;\n }\n case '$endsWithi': {\n qb.whereRaw(`${fieldLowerFn(qb)} LIKE LOWER(?)`, [column, `%${value}`]);\n break;\n }\n case '$contains': {\n qb.where(column, 'like', `%${value}%`);\n break;\n }\n\n case '$notContains': {\n qb.whereNot(column, 'like', `%${value}%`);\n break;\n }\n\n case '$containsi': {\n qb.whereRaw(`${fieldLowerFn(qb)} LIKE LOWER(?)`, [column, `%${value}%`]);\n break;\n }\n\n case '$notContainsi': {\n qb.whereRaw(`${fieldLowerFn(qb)} NOT LIKE LOWER(?)`, [column, `%${value}%`]);\n break;\n }\n\n // Experimental, only for internal use\n // Only on MySQL, PostgreSQL and CockroachDB.\n // https://knexjs.org/guide/query-builder.html#wherejsonsupersetof\n case '$jsonSupersetOf': {\n qb.whereJsonSupersetOf(column, value);\n break;\n }\n\n // TODO: Add more JSON operators: whereJsonObject, whereJsonPath, whereJsonSubsetOf\n\n // TODO: relational operators every/some/exists/size ...\n\n default: {\n throw new Error(`Undefined attribute level operator ${operator}`);\n }\n }\n};\n\nconst applyWhereToColumn = (\n qb: Knex.QueryBuilder,\n column: string,\n columnWhere: Record<Operator, unknown> | Array<Record<Operator, unknown>>\n) => {\n if (!isRecord(columnWhere)) {\n if (Array.isArray(columnWhere)) {\n return qb.whereIn(column, columnWhere);\n }\n\n return qb.where(column, columnWhere);\n }\n\n const keys = Object.keys(columnWhere) as Operator[];\n\n keys.forEach((operator) => {\n const value = columnWhere[operator];\n\n applyOperator(qb, column, operator, value);\n });\n};\n\ntype Where =\n | {\n $and?: Where[];\n $or?: Where[];\n $not?: Where;\n [key: string]: any;\n }\n | Array<Where>;\n\nconst applyWhere = (qb: Knex.QueryBuilder, where: Where) => {\n if (!isArray(where) && !isRecord(where)) {\n throw new Error('Where must be an array or an object');\n }\n\n if (isArray(where)) {\n return qb.where((subQB: Knex.QueryBuilder) =>\n where.forEach((subWhere) => applyWhere(subQB, subWhere))\n );\n }\n\n Object.keys(where).forEach((key) => {\n if (key === '$and') {\n const value = where[key] ?? [];\n\n return qb.where((subQB: Knex.QueryBuilder) => {\n value.forEach((v) => applyWhere(subQB, v));\n });\n }\n\n if (key === '$or') {\n const value = where[key] ?? [];\n\n return qb.where((subQB: Knex.QueryBuilder) => {\n value.forEach((v) => subQB.orWhere((inner) => applyWhere(inner, v)));\n });\n }\n\n if (key === '$not') {\n const value = where[key] ?? {};\n\n return qb.whereNot((qb) => applyWhere(qb, value));\n }\n\n applyWhereToColumn(qb, key, where[key]);\n });\n};\n\nconst fieldLowerFn = (qb: Knex.QueryBuilder) => {\n // Postgres requires string to be passed\n if (qb.client.dialect === 'postgresql') {\n return 'LOWER(CAST(?? AS VARCHAR))';\n }\n\n return 'LOWER(??)';\n};\n\nexport { applyWhere, processWhere };\n"],"names":["isRecord","value","isPlainObject","castValue","attribute","types","type","isKnexQuery","field","createField","toDB","processSingleAttributeWhere","where","operator","isOperatorOfType","filters","key","Object","keys","Error","processAttributeWhere","isArray","map","sub","processNested","ctx","processWhere","processRelationWhere","qb","alias","idAlias","aliasColumn","operatorKeys","filter","isOperator","length","db","uid","meta","metadata","get","Array","attributes","subAlias","createJoin","attributeName","nestedWhere","target","assign","columnName","toColumnName","aliasedColumnName","applyOperator","column","subQB","forEach","subValue","orWhere","innerQB","whereNot","applyWhereToColumn","whereIn","castArray","whereNotIn","whereNull","whereRaw","fieldLowerFn","whereNotNull","whereBetween","whereJsonSupersetOf","columnWhere","applyWhere","subWhere","v","inner","client","dialect"],"mappings":"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"}
1
+ {"version":3,"file":"where.mjs","sources":["../../../src/query/helpers/where.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/ban-ts-comment */\nimport { isArray, castArray, isPlainObject } from 'lodash/fp';\nimport type { Knex } from 'knex';\n\nimport { isOperator, isOperatorOfType } from '@strapi/utils';\nimport * as types from '../../utils/types';\nimport { createField } from '../../fields';\nimport { createJoin } from './join';\nimport { toColumnName } from './transform';\nimport { isKnexQuery } from '../../utils/knex';\n\nimport type { Ctx } from '../types';\nimport type { Attribute } from '../../types';\n\ntype WhereCtx = Ctx & { alias?: string; isGroupRoot?: boolean };\n\nconst isRecord = (value: unknown): value is Record<string, unknown> => isPlainObject(value);\n\nconst castValue = (value: unknown, attribute: Attribute | null) => {\n if (!attribute) {\n return value;\n }\n\n if (types.isScalar(attribute.type) && !isKnexQuery(value)) {\n const field = createField(attribute);\n\n return value === null ? null : field.toDB(value);\n }\n\n return value;\n};\n\nconst processSingleAttributeWhere = (\n attribute: Attribute | null,\n where: unknown,\n operator = '$eq'\n) => {\n if (!isRecord(where)) {\n if (isOperatorOfType('cast', operator)) {\n return castValue(where, attribute);\n }\n\n return where;\n }\n\n const filters: Record<string, unknown> = {};\n\n for (const key of Object.keys(where)) {\n const value = where[key];\n\n if (!isOperatorOfType('where', key)) {\n throw new Error(`Undefined attribute level operator ${key}`);\n }\n\n filters[key] = processAttributeWhere(attribute, value, key);\n }\n\n return filters;\n};\n\nconst processAttributeWhere = (attribute: Attribute | null, where: unknown, operator = '$eq') => {\n if (isArray(where)) {\n return where.map((sub) => processSingleAttributeWhere(attribute, sub, operator));\n }\n\n return processSingleAttributeWhere(attribute, where, operator);\n};\n\nconst processNested = (where: unknown, ctx: WhereCtx) => {\n if (!isRecord(where)) {\n return where;\n }\n\n return processWhere(where, ctx);\n};\n\nconst processRelationWhere = (where: unknown, ctx: WhereCtx) => {\n const { qb, alias } = ctx;\n\n const idAlias = qb.aliasColumn('id', alias);\n if (!isRecord(where)) {\n return { [idAlias]: where };\n }\n\n const keys = Object.keys(where);\n const operatorKeys = keys.filter((key) => isOperator(key));\n\n if (operatorKeys.length > 0 && operatorKeys.length !== keys.length) {\n throw new Error(`Operator and non-operator keys cannot be mixed in a relation where clause`);\n }\n\n if (operatorKeys.length > 1) {\n throw new Error(\n `Only one operator key is allowed in a relation where clause, but found: ${operatorKeys}`\n );\n }\n\n if (operatorKeys.length === 1) {\n const operator = operatorKeys[0];\n\n if (isOperatorOfType('group', operator)) {\n return processWhere(where, ctx);\n }\n\n return { [idAlias]: { [operator]: processNested(where[operator], ctx) } };\n }\n\n return processWhere(where, ctx);\n};\n\n/**\n * Process where parameter\n */\nfunction processWhere(where: Record<string, unknown>, ctx: WhereCtx): Record<string, unknown>;\nfunction processWhere(where: Record<string, unknown>[], ctx: WhereCtx): Record<string, unknown>[];\nfunction processWhere(\n where: Record<string, unknown> | Record<string, unknown>[],\n ctx: WhereCtx\n): Record<string, unknown> | Record<string, unknown>[] {\n if (!isArray(where) && !isRecord(where)) {\n throw new Error('Where must be an array or an object');\n }\n\n if (isArray(where)) {\n return where.map((sub) => processWhere(sub, ctx));\n }\n\n const { db, uid, qb, alias } = ctx;\n const meta = db.metadata.get(uid);\n\n const filters: Record<string, unknown> = {};\n\n // for each key in where\n for (const key of Object.keys(where)) {\n const value = where[key];\n\n // if operator $and $or -> process recursively\n if (isOperatorOfType('group', key)) {\n if (!Array.isArray(value)) {\n throw new Error(`Operator ${key} must be an array`);\n }\n\n filters[key] = value.map((sub) => processNested(sub, ctx));\n continue;\n }\n\n if (key === '$not') {\n filters[key] = processNested(value, ctx);\n continue;\n }\n\n if (isOperatorOfType('where', key)) {\n throw new Error(\n `Only $and, $or and $not can only be used as root level operators. Found ${key}.`\n );\n }\n\n const attribute = meta.attributes[key];\n\n if (!attribute) {\n filters[qb.aliasColumn(key, alias)] = processAttributeWhere(null, value);\n continue;\n }\n\n if (types.isRelation(attribute.type) && 'target' in attribute) {\n // attribute\n const subAlias = createJoin(ctx, {\n alias: alias || qb.alias,\n attributeName: key,\n attribute,\n });\n\n const nestedWhere = processRelationWhere(value, {\n db,\n qb,\n alias: subAlias,\n uid: attribute.target,\n });\n\n // TODO: use a better merge logic (push to $and when collisions)\n Object.assign(filters, nestedWhere);\n\n continue;\n }\n\n if (types.isScalar(attribute.type)) {\n const columnName = toColumnName(meta, key);\n const aliasedColumnName = qb.aliasColumn(columnName, alias);\n\n filters[aliasedColumnName] = processAttributeWhere(attribute, value);\n\n continue;\n }\n\n throw new Error(`You cannot filter on ${attribute.type} types`);\n }\n\n return filters;\n}\n\ntype Operator =\n | '$eq'\n | '$ne'\n | '$nei'\n | '$in'\n | '$notIn'\n | '$lt'\n | '$lte'\n | '$gt'\n | '$gte'\n | '$between'\n | '$contains'\n | '$notContains'\n | '$containsi'\n | '$notContainsi'\n | '$startsWith'\n | '$endsWith'\n | '$null'\n | '$notNull'\n | '$not'\n | '$eqi'\n | '$startsWithi'\n | '$endsWithi'\n | '$jsonSupersetOf';\n\n// TODO: add type casting per operator at some point\nconst applyOperator = (qb: Knex.QueryBuilder, column: any, operator: Operator, value: any) => {\n if (Array.isArray(value) && !isOperatorOfType('array', operator)) {\n return qb.where((subQB) => {\n value.forEach((subValue) =>\n subQB.orWhere((innerQB) => {\n applyOperator(innerQB, column, operator, subValue);\n })\n );\n });\n }\n\n switch (operator) {\n case '$not': {\n qb.whereNot((qb) => applyWhereToColumn(qb, column, value));\n break;\n }\n\n case '$in': {\n // @ts-ignore\n // TODO: fix in v5\n qb.whereIn(column, isKnexQuery(value) ? value : castArray(value));\n break;\n }\n\n case '$notIn': {\n // @ts-ignore\n // TODO: fix in v5\n qb.whereNotIn(column, isKnexQuery(value) ? value : castArray(value));\n break;\n }\n\n case '$eq': {\n if (value === null) {\n qb.whereNull(column);\n break;\n }\n\n qb.where(column, value);\n break;\n }\n\n case '$eqi': {\n if (value === null) {\n qb.whereNull(column);\n break;\n }\n qb.whereRaw(`${fieldLowerFn(qb)} LIKE LOWER(?)`, [column, `${value}`]);\n break;\n }\n case '$ne': {\n if (value === null) {\n qb.whereNotNull(column);\n break;\n }\n\n qb.where(column, '<>', value);\n break;\n }\n case '$nei': {\n if (value === null) {\n qb.whereNotNull(column);\n break;\n }\n qb.whereRaw(`${fieldLowerFn(qb)} NOT LIKE LOWER(?)`, [column, `${value}`]);\n break;\n }\n case '$gt': {\n qb.where(column, '>', value);\n break;\n }\n case '$gte': {\n qb.where(column, '>=', value);\n break;\n }\n case '$lt': {\n qb.where(column, '<', value);\n break;\n }\n case '$lte': {\n qb.where(column, '<=', value);\n break;\n }\n case '$null': {\n if (value) {\n qb.whereNull(column);\n } else {\n qb.whereNotNull(column);\n }\n break;\n }\n case '$notNull': {\n if (value) {\n qb.whereNotNull(column);\n } else {\n qb.whereNull(column);\n }\n break;\n }\n case '$between': {\n qb.whereBetween(column, value);\n break;\n }\n case '$startsWith': {\n qb.where(column, 'like', `${value}%`);\n break;\n }\n case '$startsWithi': {\n qb.whereRaw(`${fieldLowerFn(qb)} LIKE LOWER(?)`, [column, `${value}%`]);\n break;\n }\n case '$endsWith': {\n qb.where(column, 'like', `%${value}`);\n break;\n }\n case '$endsWithi': {\n qb.whereRaw(`${fieldLowerFn(qb)} LIKE LOWER(?)`, [column, `%${value}`]);\n break;\n }\n case '$contains': {\n qb.where(column, 'like', `%${value}%`);\n break;\n }\n\n case '$notContains': {\n qb.whereNot(column, 'like', `%${value}%`);\n break;\n }\n\n case '$containsi': {\n qb.whereRaw(`${fieldLowerFn(qb)} LIKE LOWER(?)`, [column, `%${value}%`]);\n break;\n }\n\n case '$notContainsi': {\n qb.whereRaw(`${fieldLowerFn(qb)} NOT LIKE LOWER(?)`, [column, `%${value}%`]);\n break;\n }\n\n // Experimental, only for internal use\n // Only on MySQL, PostgreSQL and CockroachDB.\n // https://knexjs.org/guide/query-builder.html#wherejsonsupersetof\n case '$jsonSupersetOf': {\n qb.whereJsonSupersetOf(column, value);\n break;\n }\n\n // TODO: Add more JSON operators: whereJsonObject, whereJsonPath, whereJsonSubsetOf\n\n // TODO: relational operators every/some/exists/size ...\n\n default: {\n throw new Error(`Undefined attribute level operator ${operator}`);\n }\n }\n};\n\nconst applyWhereToColumn = (\n qb: Knex.QueryBuilder,\n column: string,\n columnWhere: Record<Operator, unknown> | Array<Record<Operator, unknown>>\n) => {\n if (!isRecord(columnWhere)) {\n if (Array.isArray(columnWhere)) {\n return qb.whereIn(column, columnWhere);\n }\n\n return qb.where(column, columnWhere);\n }\n\n const keys = Object.keys(columnWhere) as Operator[];\n\n keys.forEach((operator) => {\n const value = columnWhere[operator];\n\n applyOperator(qb, column, operator, value);\n });\n};\n\ntype Where =\n | {\n $and?: Where[];\n $or?: Where[];\n $not?: Where;\n [key: string]: any;\n }\n | Array<Where>;\n\nconst applyWhere = (qb: Knex.QueryBuilder, where: Where) => {\n if (!isArray(where) && !isRecord(where)) {\n throw new Error('Where must be an array or an object');\n }\n\n if (isArray(where)) {\n return qb.where((subQB: Knex.QueryBuilder) =>\n where.forEach((subWhere) => applyWhere(subQB, subWhere))\n );\n }\n\n Object.keys(where).forEach((key) => {\n if (key === '$and') {\n const value = where[key] ?? [];\n\n return qb.where((subQB: Knex.QueryBuilder) => {\n value.forEach((v) => applyWhere(subQB, v));\n });\n }\n\n if (key === '$or') {\n const value = where[key] ?? [];\n\n return qb.where((subQB: Knex.QueryBuilder) => {\n value.forEach((v) => subQB.orWhere((inner) => applyWhere(inner, v)));\n });\n }\n\n if (key === '$not') {\n const value = where[key] ?? {};\n\n return qb.whereNot((qb) => applyWhere(qb, value));\n }\n\n applyWhereToColumn(qb, key, where[key]);\n });\n};\n\nconst fieldLowerFn = (qb: Knex.QueryBuilder) => {\n // Postgres requires string to be passed\n if (qb.client.dialect === 'postgresql') {\n return 'LOWER(CAST(?? AS VARCHAR))';\n }\n\n return 'LOWER(??)';\n};\n\nexport { applyWhere, processWhere };\n"],"names":["isRecord","value","isPlainObject","castValue","attribute","types","type","isKnexQuery","field","createField","toDB","processSingleAttributeWhere","where","operator","isOperatorOfType","filters","key","Object","keys","Error","processAttributeWhere","isArray","map","sub","processNested","ctx","processWhere","processRelationWhere","qb","alias","idAlias","aliasColumn","operatorKeys","filter","isOperator","length","db","uid","meta","metadata","get","Array","attributes","subAlias","createJoin","attributeName","nestedWhere","target","assign","columnName","toColumnName","aliasedColumnName","applyOperator","column","subQB","forEach","subValue","orWhere","innerQB","whereNot","applyWhereToColumn","whereIn","castArray","whereNotIn","whereNull","whereRaw","fieldLowerFn","whereNotNull","whereBetween","whereJsonSupersetOf","columnWhere","applyWhere","subWhere","v","inner","client","dialect"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"query-builder.js","sources":["../../src/query/query-builder.ts"],"sourcesContent":["import type { Knex } from 'knex';\nimport _ from 'lodash/fp';\n\nimport type { Database } from '..';\n\nimport { DatabaseError } from '../errors';\nimport { transactionCtx } from '../transaction-context';\nimport { isKnexQuery } from '../utils/knex';\nimport * as helpers from './helpers';\nimport type { Join } from './helpers/join';\n\ninterface State {\n type: 'select' | 'insert' | 'update' | 'delete' | 'count' | 'max' | 'truncate';\n select: Array<string | Knex.Raw>;\n count: string | null;\n max: string | null;\n first: boolean;\n data: Record<string, unknown> | (null | Record<string, unknown>)[] | null;\n where: Record<string, unknown>[];\n joins: Join[];\n populate: object | null;\n limit: number | null;\n offset: number | null;\n transaction: any;\n forUpdate: boolean;\n onConflict: any;\n merge: any;\n ignore: boolean;\n orderBy: any[];\n groupBy: any[];\n increments: any[];\n decrements: any[];\n aliasCounter: number;\n filters: any;\n search: string;\n processed: boolean;\n}\n\nexport interface QueryBuilder {\n alias: string;\n state: State;\n raw: Knex.RawBuilder;\n\n getAlias(): string;\n\n clone(): QueryBuilder;\n\n select(args: string | Array<string | Knex.Raw>): QueryBuilder;\n\n addSelect(args: string | string[]): QueryBuilder;\n\n insert<TData extends Record<string, unknown> | Record<string, unknown>[]>(\n data: TData\n ): QueryBuilder;\n\n onConflict(args: any): QueryBuilder;\n\n merge(args: any): QueryBuilder;\n\n ignore(): QueryBuilder;\n\n delete(): QueryBuilder;\n\n ref(name: string): any;\n\n update<TData extends Record<string, unknown>>(data: TData): QueryBuilder;\n\n increment(column: string, amount?: number): QueryBuilder;\n\n decrement(column: string, amount?: number): QueryBuilder;\n\n count(count?: string): QueryBuilder;\n\n max(column: string): QueryBuilder;\n\n where(where?: object): QueryBuilder;\n\n limit(limit: number): QueryBuilder;\n\n offset(offset: number): QueryBuilder;\n\n orderBy(orderBy: any): QueryBuilder;\n\n groupBy(groupBy: any): QueryBuilder;\n\n populate(populate: any): QueryBuilder;\n\n search(query: string): QueryBuilder;\n\n transacting(transaction: any): QueryBuilder;\n\n forUpdate(): QueryBuilder;\n\n init(params?: any): QueryBuilder;\n\n filters(filters: any): void;\n\n first(): QueryBuilder;\n\n join(join: any): QueryBuilder;\n\n mustUseAlias(): boolean;\n\n aliasColumn(key: any, alias?: string): any;\n\n shouldUseSubQuery(): boolean;\n\n runSubQuery(): any;\n\n processState(): void;\n\n shouldUseDistinct(): boolean;\n\n shouldUseDeepSort(): boolean;\n\n processSelect(): void;\n\n getKnexQuery(): Knex.QueryBuilder;\n\n execute<T>(options?: { mapResults?: boolean }): Promise<T>;\n\n stream(options?: { mapResults?: boolean }): helpers.ReadableQuery;\n}\n\nconst createQueryBuilder = (\n uid: string,\n db: Database,\n initialState: Partial<State> = {}\n): QueryBuilder => {\n const meta = db.metadata.get(uid);\n const { tableName } = meta;\n\n const state: State = _.defaults(\n {\n type: 'select',\n select: [],\n count: null,\n max: null,\n first: false,\n data: null,\n where: [],\n joins: [],\n populate: null,\n limit: null,\n offset: null,\n transaction: null,\n forUpdate: false,\n onConflict: null,\n merge: null,\n ignore: false,\n orderBy: [],\n groupBy: [],\n increments: [],\n decrements: [],\n aliasCounter: 0,\n filters: null,\n search: null,\n processed: false,\n },\n initialState\n );\n\n const getAlias = () => {\n const alias = `t${state.aliasCounter}`;\n\n state.aliasCounter += 1;\n\n return alias;\n };\n\n return {\n alias: getAlias(),\n getAlias,\n state,\n\n clone() {\n return createQueryBuilder(uid, db, state);\n },\n\n select(args) {\n state.type = 'select';\n state.select = _.uniq(_.castArray(args));\n\n return this;\n },\n\n addSelect(args) {\n state.select = _.uniq([...state.select, ..._.castArray(args)]);\n\n return this;\n },\n\n insert(data) {\n state.type = 'insert';\n state.data = data;\n\n return this;\n },\n\n onConflict(args) {\n state.onConflict = args;\n\n return this;\n },\n\n merge(args) {\n state.merge = args;\n\n return this;\n },\n\n ignore() {\n state.ignore = true;\n\n return this;\n },\n\n delete() {\n state.type = 'delete';\n\n return this;\n },\n\n ref(name) {\n return db.connection.ref(helpers.toColumnName(meta, name));\n },\n\n update(data) {\n state.type = 'update';\n state.data = data;\n\n return this;\n },\n\n increment(column, amount = 1) {\n state.type = 'update';\n state.increments.push({ column, amount });\n\n return this;\n },\n\n decrement(column, amount = 1) {\n state.type = 'update';\n state.decrements.push({ column, amount });\n\n return this;\n },\n\n count(count = 'id') {\n state.type = 'count';\n state.count = count;\n\n return this;\n },\n\n max(column: string) {\n state.type = 'max';\n state.max = column;\n\n return this;\n },\n\n where(where: Record<string, unknown> = {}) {\n if (!_.isPlainObject(where)) {\n throw new Error('Where must be an object');\n }\n\n state.where.push(where);\n\n return this;\n },\n\n limit(limit) {\n state.limit = limit;\n return this;\n },\n\n offset(offset) {\n state.offset = offset;\n return this;\n },\n\n orderBy(orderBy) {\n state.orderBy = orderBy;\n return this;\n },\n\n groupBy(groupBy) {\n state.groupBy = groupBy;\n return this;\n },\n\n populate(populate) {\n state.populate = populate;\n return this;\n },\n\n search(query) {\n state.search = query;\n return this;\n },\n\n transacting(transaction) {\n state.transaction = transaction;\n return this;\n },\n\n forUpdate() {\n state.forUpdate = true;\n return this;\n },\n\n init(params = {}) {\n const { _q, filters, where, select, limit, offset, orderBy, groupBy, populate } = params;\n\n if (!_.isNil(where)) {\n this.where(where);\n }\n\n if (!_.isNil(_q)) {\n this.search(_q);\n }\n\n if (!_.isNil(select)) {\n this.select(select);\n } else {\n this.select('*');\n }\n\n if (!_.isNil(limit)) {\n this.limit(limit);\n }\n\n if (!_.isNil(offset)) {\n this.offset(offset);\n }\n\n if (!_.isNil(orderBy)) {\n this.orderBy(orderBy);\n }\n\n if (!_.isNil(groupBy)) {\n this.groupBy(groupBy);\n }\n\n if (!_.isNil(populate)) {\n this.populate(populate);\n }\n\n if (!_.isNil(filters)) {\n this.filters(filters);\n }\n\n return this;\n },\n\n filters(filters) {\n state.filters = filters;\n },\n\n first() {\n state.first = true;\n return this;\n },\n\n join(join) {\n if (!join.targetField) {\n state.joins.push(join);\n return this;\n }\n\n const model = db.metadata.get(uid);\n const attribute = model.attributes[join.targetField];\n\n helpers.createJoin(\n { db, qb: this, uid },\n {\n alias: this.alias,\n refAlias: join.alias,\n attributeName: join.targetField,\n attribute,\n }\n );\n\n return this;\n },\n\n mustUseAlias() {\n return ['select', 'count'].includes(state.type);\n },\n\n aliasColumn(key: string | unknown, alias: string): string | unknown {\n if (typeof key !== 'string') {\n return key;\n }\n\n if (key.indexOf('.') >= 0) {\n return key;\n }\n\n if (!_.isNil(alias)) {\n return `${alias}.${key}`;\n }\n\n return this.mustUseAlias() ? `${this.alias}.${key}` : key;\n },\n\n raw: db.connection.raw.bind(db.connection),\n\n shouldUseSubQuery() {\n return ['delete', 'update'].includes(state.type) && state.joins.length > 0;\n },\n\n runSubQuery() {\n const originalType = state.type;\n\n this.select('id');\n const subQB = this.getKnexQuery();\n\n const nestedSubQuery = db.getConnection().select('id').from(subQB.as('subQuery'));\n const connection = db.getConnection(tableName);\n\n return (connection[originalType] as Knex)().whereIn('id', nestedSubQuery);\n },\n\n processState() {\n if (this.state.processed) {\n return;\n }\n\n state.orderBy = helpers.processOrderBy(state.orderBy, { qb: this, uid, db });\n\n if (!_.isNil(state.filters)) {\n if (_.isFunction(state.filters)) {\n const filters = state.filters({ qb: this, uid, meta, db });\n\n if (!_.isNil(filters)) {\n state.where.push(filters);\n }\n } else {\n state.where.push(state.filters);\n }\n }\n\n state.where = helpers.processWhere(state.where, { qb: this, uid, db });\n state.populate = helpers.processPopulate(state.populate, { qb: this, uid, db });\n\n state.data = helpers.toRow(meta, state.data);\n\n this.processSelect();\n\n this.state.processed = true;\n },\n\n shouldUseDistinct() {\n return state.joins.length > 0 && _.isEmpty(state.groupBy);\n },\n\n shouldUseDeepSort() {\n return (\n state.orderBy\n .filter(({ column }) => column.indexOf('.') >= 0)\n .filter(({ column }) => {\n const col = column.split('.');\n\n for (let i = 0; i < col.length - 1; i += 1) {\n const el = col[i];\n\n // order by \"rel\".\"xxx\"\n const isRelationAttribute = meta.attributes[el]?.type === 'relation';\n\n // order by \"t2\".\"xxx\"\n const isAliasedRelation = Object.values(state.joins)\n .map((join) => join.alias)\n .includes(el);\n\n if (isRelationAttribute || isAliasedRelation) {\n return true;\n }\n }\n\n return false;\n }).length > 0\n );\n },\n\n processSelect() {\n state.select = state.select.map((field) => {\n if (isKnexQuery(field)) {\n return field;\n }\n\n return helpers.toColumnName(meta, field);\n });\n\n if (this.shouldUseDistinct()) {\n const joinsOrderByColumns = state.joins.flatMap((join) => {\n return _.keys(join.orderBy).map((key) => this.aliasColumn(key, join.alias));\n });\n const orderByColumns = state.orderBy.map(({ column }) => column);\n\n state.select = _.uniq([...joinsOrderByColumns, ...orderByColumns, ...state.select]);\n }\n },\n\n getKnexQuery() {\n if (!state.type) {\n this.select('*');\n }\n\n const aliasedTableName = this.mustUseAlias() ? `${tableName} as ${this.alias}` : tableName;\n\n const qb = db.getConnection(aliasedTableName);\n\n // The state should always be processed before calling shouldUseSubQuery as it\n // relies on the presence or absence of joins to determine the need of a subquery\n this.processState();\n\n if (this.shouldUseSubQuery()) {\n return this.runSubQuery();\n }\n\n switch (state.type) {\n case 'select': {\n qb.select(state.select.map((column) => this.aliasColumn(column)));\n\n if (this.shouldUseDistinct()) {\n qb.distinct();\n }\n\n break;\n }\n case 'count': {\n const dbColumnName = this.aliasColumn(helpers.toColumnName(meta, state.count));\n\n if (this.shouldUseDistinct()) {\n qb.countDistinct({ count: dbColumnName });\n } else {\n qb.count({ count: dbColumnName });\n }\n break;\n }\n case 'max': {\n const dbColumnName = this.aliasColumn(helpers.toColumnName(meta, state.max));\n qb.max({ max: dbColumnName });\n break;\n }\n case 'insert': {\n qb.insert(state.data);\n\n if (db.dialect.useReturning() && _.has('id', meta.attributes)) {\n qb.returning('id');\n }\n\n break;\n }\n case 'update': {\n if (state.data) {\n qb.update(state.data);\n }\n break;\n }\n case 'delete': {\n qb.delete();\n\n break;\n }\n case 'truncate': {\n qb.truncate();\n break;\n }\n default: {\n throw new Error('Unknown query type');\n }\n }\n\n if (state.transaction) {\n qb.transacting(state.transaction);\n }\n\n if (state.forUpdate) {\n qb.forUpdate();\n }\n\n if (!_.isEmpty(state.increments)) {\n state.increments.forEach((incr) => qb.increment(incr.column, incr.amount));\n }\n\n if (!_.isEmpty(state.decrements)) {\n state.decrements.forEach((decr) => qb.decrement(decr.column, decr.amount));\n }\n\n if (state.onConflict) {\n if (state.merge) {\n qb.onConflict(state.onConflict).merge(state.merge);\n } else if (state.ignore) {\n qb.onConflict(state.onConflict).ignore();\n }\n }\n\n if (state.limit) {\n qb.limit(state.limit);\n }\n\n if (state.offset) {\n qb.offset(state.offset);\n }\n\n if (state.orderBy.length > 0) {\n qb.orderBy(state.orderBy);\n }\n\n if (state.first) {\n qb.first();\n }\n\n if (state.groupBy.length > 0) {\n qb.groupBy(state.groupBy);\n }\n\n // if there are joins and it is a delete or update use a sub query\n if (state.where) {\n helpers.applyWhere(qb, state.where);\n }\n\n // if there are joins and it is a delete or update use a sub query\n if (state.search) {\n qb.where((subQb) => {\n helpers.applySearch(subQb, state.search, { qb: this, db, uid });\n });\n }\n\n if (state.joins.length > 0) {\n helpers.applyJoins(qb, state.joins);\n }\n\n if (this.shouldUseDeepSort()) {\n return helpers.wrapWithDeepSort(qb, { qb: this, db, uid });\n }\n\n return qb;\n },\n\n async execute({ mapResults = true } = {}) {\n try {\n const qb = this.getKnexQuery();\n\n const transaction = transactionCtx.get();\n if (transaction) {\n qb.transacting(transaction);\n }\n\n const rows = await qb;\n\n if (state.populate && !_.isNil(rows)) {\n await helpers.applyPopulate(_.castArray(rows), state.populate, {\n qb: this,\n uid,\n db,\n });\n }\n\n let results = rows;\n if (mapResults && state.type === 'select') {\n results = helpers.fromRow(meta, rows);\n }\n\n return results;\n } catch (error) {\n if (error instanceof Error) {\n db.dialect.transformErrors(error);\n } else {\n throw error;\n }\n }\n },\n\n stream({ mapResults = true } = {}) {\n if (state.type === 'select') {\n return new helpers.ReadableQuery({ qb: this, db, uid, mapResults });\n }\n\n throw new DatabaseError(\n `query-builder.stream() has been called with an unsupported query type: \"${state.type}\"`\n );\n },\n };\n};\n\nexport default createQueryBuilder;\n"],"names":["createQueryBuilder","uid","db","initialState","meta","metadata","get","tableName","state","_","defaults","type","select","count","max","first","data","where","joins","populate","limit","offset","transaction","forUpdate","onConflict","merge","ignore","orderBy","groupBy","increments","decrements","aliasCounter","filters","search","processed","getAlias","alias","clone","args","uniq","castArray","addSelect","insert","delete","ref","name","connection","helpers","update","increment","column","amount","push","decrement","isPlainObject","Error","query","transacting","init","params","_q","isNil","join","targetField","model","attribute","attributes","qb","refAlias","attributeName","mustUseAlias","includes","aliasColumn","key","indexOf","raw","bind","shouldUseSubQuery","length","runSubQuery","originalType","subQB","getKnexQuery","nestedSubQuery","getConnection","from","as","whereIn","processState","isFunction","processSelect","shouldUseDistinct","isEmpty","shouldUseDeepSort","filter","col","split","i","el","isRelationAttribute","isAliasedRelation","Object","values","map","field","isKnexQuery","joinsOrderByColumns","flatMap","keys","orderByColumns","aliasedTableName","distinct","dbColumnName","countDistinct","dialect","useReturning","has","returning","truncate","forEach","incr","decr","subQb","execute","mapResults","transactionCtx","rows","results","error","transformErrors","stream","DatabaseError"],"mappings":"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"}
1
+ {"version":3,"file":"query-builder.js","sources":["../../src/query/query-builder.ts"],"sourcesContent":["import type { Knex } from 'knex';\nimport _ from 'lodash/fp';\n\nimport type { Database } from '..';\n\nimport { DatabaseError } from '../errors';\nimport { transactionCtx } from '../transaction-context';\nimport { isKnexQuery } from '../utils/knex';\nimport * as helpers from './helpers';\nimport type { Join } from './helpers/join';\n\ninterface State {\n type: 'select' | 'insert' | 'update' | 'delete' | 'count' | 'max' | 'truncate';\n select: Array<string | Knex.Raw>;\n count: string | null;\n max: string | null;\n first: boolean;\n data: Record<string, unknown> | (null | Record<string, unknown>)[] | null;\n where: Record<string, unknown>[];\n joins: Join[];\n populate: object | null;\n limit: number | null;\n offset: number | null;\n transaction: any;\n forUpdate: boolean;\n onConflict: any;\n merge: any;\n ignore: boolean;\n orderBy: any[];\n groupBy: any[];\n increments: any[];\n decrements: any[];\n aliasCounter: number;\n filters: any;\n search: string;\n processed: boolean;\n}\n\nexport interface QueryBuilder {\n alias: string;\n state: State;\n raw: Knex.RawBuilder;\n\n getAlias(): string;\n\n clone(): QueryBuilder;\n\n select(args: string | Array<string | Knex.Raw>): QueryBuilder;\n\n addSelect(args: string | string[]): QueryBuilder;\n\n insert<TData extends Record<string, unknown> | Record<string, unknown>[]>(\n data: TData\n ): QueryBuilder;\n\n onConflict(args: any): QueryBuilder;\n\n merge(args: any): QueryBuilder;\n\n ignore(): QueryBuilder;\n\n delete(): QueryBuilder;\n\n ref(name: string): any;\n\n update<TData extends Record<string, unknown>>(data: TData): QueryBuilder;\n\n increment(column: string, amount?: number): QueryBuilder;\n\n decrement(column: string, amount?: number): QueryBuilder;\n\n count(count?: string): QueryBuilder;\n\n max(column: string): QueryBuilder;\n\n where(where?: object): QueryBuilder;\n\n limit(limit: number): QueryBuilder;\n\n offset(offset: number): QueryBuilder;\n\n orderBy(orderBy: any): QueryBuilder;\n\n groupBy(groupBy: any): QueryBuilder;\n\n populate(populate: any): QueryBuilder;\n\n search(query: string): QueryBuilder;\n\n transacting(transaction: any): QueryBuilder;\n\n forUpdate(): QueryBuilder;\n\n init(params?: any): QueryBuilder;\n\n filters(filters: any): void;\n\n first(): QueryBuilder;\n\n join(join: any): QueryBuilder;\n\n mustUseAlias(): boolean;\n\n aliasColumn(key: any, alias?: string): any;\n\n shouldUseSubQuery(): boolean;\n\n runSubQuery(): any;\n\n processState(): void;\n\n shouldUseDistinct(): boolean;\n\n shouldUseDeepSort(): boolean;\n\n processSelect(): void;\n\n getKnexQuery(): Knex.QueryBuilder;\n\n execute<T>(options?: { mapResults?: boolean }): Promise<T>;\n\n stream(options?: { mapResults?: boolean }): helpers.ReadableQuery;\n}\n\nconst createQueryBuilder = (\n uid: string,\n db: Database,\n initialState: Partial<State> = {}\n): QueryBuilder => {\n const meta = db.metadata.get(uid);\n const { tableName } = meta;\n\n const state: State = _.defaults(\n {\n type: 'select',\n select: [],\n count: null,\n max: null,\n first: false,\n data: null,\n where: [],\n joins: [],\n populate: null,\n limit: null,\n offset: null,\n transaction: null,\n forUpdate: false,\n onConflict: null,\n merge: null,\n ignore: false,\n orderBy: [],\n groupBy: [],\n increments: [],\n decrements: [],\n aliasCounter: 0,\n filters: null,\n search: null,\n processed: false,\n },\n initialState\n );\n\n const getAlias = () => {\n const alias = `t${state.aliasCounter}`;\n\n state.aliasCounter += 1;\n\n return alias;\n };\n\n return {\n alias: getAlias(),\n getAlias,\n state,\n\n clone() {\n return createQueryBuilder(uid, db, state);\n },\n\n select(args) {\n state.type = 'select';\n state.select = _.uniq(_.castArray(args));\n\n return this;\n },\n\n addSelect(args) {\n state.select = _.uniq([...state.select, ..._.castArray(args)]);\n\n return this;\n },\n\n insert(data) {\n state.type = 'insert';\n state.data = data;\n\n return this;\n },\n\n onConflict(args) {\n state.onConflict = args;\n\n return this;\n },\n\n merge(args) {\n state.merge = args;\n\n return this;\n },\n\n ignore() {\n state.ignore = true;\n\n return this;\n },\n\n delete() {\n state.type = 'delete';\n\n return this;\n },\n\n ref(name) {\n return db.connection.ref(helpers.toColumnName(meta, name));\n },\n\n update(data) {\n state.type = 'update';\n state.data = data;\n\n return this;\n },\n\n increment(column, amount = 1) {\n state.type = 'update';\n state.increments.push({ column, amount });\n\n return this;\n },\n\n decrement(column, amount = 1) {\n state.type = 'update';\n state.decrements.push({ column, amount });\n\n return this;\n },\n\n count(count = 'id') {\n state.type = 'count';\n state.count = count;\n\n return this;\n },\n\n max(column: string) {\n state.type = 'max';\n state.max = column;\n\n return this;\n },\n\n where(where: Record<string, unknown> = {}) {\n if (!_.isPlainObject(where)) {\n throw new Error('Where must be an object');\n }\n\n state.where.push(where);\n\n return this;\n },\n\n limit(limit) {\n state.limit = limit;\n return this;\n },\n\n offset(offset) {\n state.offset = offset;\n return this;\n },\n\n orderBy(orderBy) {\n state.orderBy = orderBy;\n return this;\n },\n\n groupBy(groupBy) {\n state.groupBy = groupBy;\n return this;\n },\n\n populate(populate) {\n state.populate = populate;\n return this;\n },\n\n search(query) {\n state.search = query;\n return this;\n },\n\n transacting(transaction) {\n state.transaction = transaction;\n return this;\n },\n\n forUpdate() {\n state.forUpdate = true;\n return this;\n },\n\n init(params = {}) {\n const { _q, filters, where, select, limit, offset, orderBy, groupBy, populate } = params;\n\n if (!_.isNil(where)) {\n this.where(where);\n }\n\n if (!_.isNil(_q)) {\n this.search(_q);\n }\n\n if (!_.isNil(select)) {\n this.select(select);\n } else {\n this.select('*');\n }\n\n if (!_.isNil(limit)) {\n this.limit(limit);\n }\n\n if (!_.isNil(offset)) {\n this.offset(offset);\n }\n\n if (!_.isNil(orderBy)) {\n this.orderBy(orderBy);\n }\n\n if (!_.isNil(groupBy)) {\n this.groupBy(groupBy);\n }\n\n if (!_.isNil(populate)) {\n this.populate(populate);\n }\n\n if (!_.isNil(filters)) {\n this.filters(filters);\n }\n\n return this;\n },\n\n filters(filters) {\n state.filters = filters;\n },\n\n first() {\n state.first = true;\n return this;\n },\n\n join(join) {\n if (!join.targetField) {\n state.joins.push(join);\n return this;\n }\n\n const model = db.metadata.get(uid);\n const attribute = model.attributes[join.targetField];\n\n helpers.createJoin(\n { db, qb: this, uid },\n {\n alias: this.alias,\n refAlias: join.alias,\n attributeName: join.targetField,\n attribute,\n }\n );\n\n return this;\n },\n\n mustUseAlias() {\n return ['select', 'count'].includes(state.type);\n },\n\n aliasColumn(key: string | unknown, alias: string): string | unknown {\n if (typeof key !== 'string') {\n return key;\n }\n\n if (key.indexOf('.') >= 0) {\n return key;\n }\n\n if (!_.isNil(alias)) {\n return `${alias}.${key}`;\n }\n\n return this.mustUseAlias() ? `${this.alias}.${key}` : key;\n },\n\n raw: db.connection.raw.bind(db.connection),\n\n shouldUseSubQuery() {\n return ['delete', 'update'].includes(state.type) && state.joins.length > 0;\n },\n\n runSubQuery() {\n const originalType = state.type;\n\n this.select('id');\n const subQB = this.getKnexQuery();\n\n const nestedSubQuery = db.getConnection().select('id').from(subQB.as('subQuery'));\n const connection = db.getConnection(tableName);\n\n return (connection[originalType] as Knex)().whereIn('id', nestedSubQuery);\n },\n\n processState() {\n if (this.state.processed) {\n return;\n }\n\n state.orderBy = helpers.processOrderBy(state.orderBy, { qb: this, uid, db });\n\n if (!_.isNil(state.filters)) {\n if (_.isFunction(state.filters)) {\n const filters = state.filters({ qb: this, uid, meta, db });\n\n if (!_.isNil(filters)) {\n state.where.push(filters);\n }\n } else {\n state.where.push(state.filters);\n }\n }\n\n state.where = helpers.processWhere(state.where, { qb: this, uid, db });\n state.populate = helpers.processPopulate(state.populate, { qb: this, uid, db });\n\n state.data = helpers.toRow(meta, state.data);\n\n this.processSelect();\n\n this.state.processed = true;\n },\n\n shouldUseDistinct() {\n return state.joins.length > 0 && _.isEmpty(state.groupBy);\n },\n\n shouldUseDeepSort() {\n return (\n state.orderBy\n .filter(({ column }) => column.indexOf('.') >= 0)\n .filter(({ column }) => {\n const col = column.split('.');\n\n for (let i = 0; i < col.length - 1; i += 1) {\n const el = col[i];\n\n // order by \"rel\".\"xxx\"\n const isRelationAttribute = meta.attributes[el]?.type === 'relation';\n\n // order by \"t2\".\"xxx\"\n const isAliasedRelation = Object.values(state.joins)\n .map((join) => join.alias)\n .includes(el);\n\n if (isRelationAttribute || isAliasedRelation) {\n return true;\n }\n }\n\n return false;\n }).length > 0\n );\n },\n\n processSelect() {\n state.select = state.select.map((field) => {\n if (isKnexQuery(field)) {\n return field;\n }\n\n return helpers.toColumnName(meta, field);\n });\n\n if (this.shouldUseDistinct()) {\n const joinsOrderByColumns = state.joins.flatMap((join) => {\n return _.keys(join.orderBy).map((key) => this.aliasColumn(key, join.alias));\n });\n const orderByColumns = state.orderBy.map(({ column }) => column);\n\n state.select = _.uniq([...joinsOrderByColumns, ...orderByColumns, ...state.select]);\n }\n },\n\n getKnexQuery() {\n if (!state.type) {\n this.select('*');\n }\n\n const aliasedTableName = this.mustUseAlias() ? `${tableName} as ${this.alias}` : tableName;\n\n const qb = db.getConnection(aliasedTableName);\n\n // The state should always be processed before calling shouldUseSubQuery as it\n // relies on the presence or absence of joins to determine the need of a subquery\n this.processState();\n\n if (this.shouldUseSubQuery()) {\n return this.runSubQuery();\n }\n\n switch (state.type) {\n case 'select': {\n qb.select(state.select.map((column) => this.aliasColumn(column)));\n\n if (this.shouldUseDistinct()) {\n qb.distinct();\n }\n\n break;\n }\n case 'count': {\n const dbColumnName = this.aliasColumn(helpers.toColumnName(meta, state.count));\n\n if (this.shouldUseDistinct()) {\n qb.countDistinct({ count: dbColumnName });\n } else {\n qb.count({ count: dbColumnName });\n }\n break;\n }\n case 'max': {\n const dbColumnName = this.aliasColumn(helpers.toColumnName(meta, state.max));\n qb.max({ max: dbColumnName });\n break;\n }\n case 'insert': {\n qb.insert(state.data);\n\n if (db.dialect.useReturning() && _.has('id', meta.attributes)) {\n qb.returning('id');\n }\n\n break;\n }\n case 'update': {\n if (state.data) {\n qb.update(state.data);\n }\n break;\n }\n case 'delete': {\n qb.delete();\n\n break;\n }\n case 'truncate': {\n qb.truncate();\n break;\n }\n default: {\n throw new Error('Unknown query type');\n }\n }\n\n if (state.transaction) {\n qb.transacting(state.transaction);\n }\n\n if (state.forUpdate) {\n qb.forUpdate();\n }\n\n if (!_.isEmpty(state.increments)) {\n state.increments.forEach((incr) => qb.increment(incr.column, incr.amount));\n }\n\n if (!_.isEmpty(state.decrements)) {\n state.decrements.forEach((decr) => qb.decrement(decr.column, decr.amount));\n }\n\n if (state.onConflict) {\n if (state.merge) {\n qb.onConflict(state.onConflict).merge(state.merge);\n } else if (state.ignore) {\n qb.onConflict(state.onConflict).ignore();\n }\n }\n\n if (state.limit) {\n qb.limit(state.limit);\n }\n\n if (state.offset) {\n qb.offset(state.offset);\n }\n\n if (state.orderBy.length > 0) {\n qb.orderBy(state.orderBy);\n }\n\n if (state.first) {\n qb.first();\n }\n\n if (state.groupBy.length > 0) {\n qb.groupBy(state.groupBy);\n }\n\n // if there are joins and it is a delete or update use a sub query\n if (state.where) {\n helpers.applyWhere(qb, state.where);\n }\n\n // if there are joins and it is a delete or update use a sub query\n if (state.search) {\n qb.where((subQb) => {\n helpers.applySearch(subQb, state.search, { qb: this, db, uid });\n });\n }\n\n if (state.joins.length > 0) {\n helpers.applyJoins(qb, state.joins);\n }\n\n if (this.shouldUseDeepSort()) {\n return helpers.wrapWithDeepSort(qb, { qb: this, db, uid });\n }\n\n return qb;\n },\n\n async execute({ mapResults = true } = {}) {\n try {\n const qb = this.getKnexQuery();\n\n const transaction = transactionCtx.get();\n if (transaction) {\n qb.transacting(transaction);\n }\n\n const rows = await qb;\n\n if (state.populate && !_.isNil(rows)) {\n await helpers.applyPopulate(_.castArray(rows), state.populate, {\n qb: this,\n uid,\n db,\n });\n }\n\n let results = rows;\n if (mapResults && state.type === 'select') {\n results = helpers.fromRow(meta, rows);\n }\n\n return results;\n } catch (error) {\n if (error instanceof Error) {\n db.dialect.transformErrors(error);\n } else {\n throw error;\n }\n }\n },\n\n stream({ mapResults = true } = {}) {\n if (state.type === 'select') {\n return new helpers.ReadableQuery({ qb: this, db, uid, mapResults });\n }\n\n throw new DatabaseError(\n `query-builder.stream() has been called with an unsupported query type: \"${state.type}\"`\n );\n },\n };\n};\n\nexport default createQueryBuilder;\n"],"names":["createQueryBuilder","uid","db","initialState","meta","metadata","get","tableName","state","_","defaults","type","select","count","max","first","data","where","joins","populate","limit","offset","transaction","forUpdate","onConflict","merge","ignore","orderBy","groupBy","increments","decrements","aliasCounter","filters","search","processed","getAlias","alias","clone","args","uniq","castArray","addSelect","insert","delete","ref","name","connection","helpers","update","increment","column","amount","push","decrement","isPlainObject","Error","query","transacting","init","params","_q","isNil","join","targetField","model","attribute","attributes","qb","refAlias","attributeName","mustUseAlias","includes","aliasColumn","key","indexOf","raw","bind","shouldUseSubQuery","length","runSubQuery","originalType","subQB","getKnexQuery","nestedSubQuery","getConnection","from","as","whereIn","processState","isFunction","processSelect","shouldUseDistinct","isEmpty","shouldUseDeepSort","filter","col","split","i","el","isRelationAttribute","isAliasedRelation","Object","values","map","field","isKnexQuery","joinsOrderByColumns","flatMap","keys","orderByColumns","aliasedTableName","distinct","dbColumnName","countDistinct","dialect","useReturning","has","returning","truncate","forEach","incr","decr","subQb","execute","mapResults","transactionCtx","rows","results","error","transformErrors","stream","DatabaseError"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"query-builder.mjs","sources":["../../src/query/query-builder.ts"],"sourcesContent":["import type { Knex } from 'knex';\nimport _ from 'lodash/fp';\n\nimport type { Database } from '..';\n\nimport { DatabaseError } from '../errors';\nimport { transactionCtx } from '../transaction-context';\nimport { isKnexQuery } from '../utils/knex';\nimport * as helpers from './helpers';\nimport type { Join } from './helpers/join';\n\ninterface State {\n type: 'select' | 'insert' | 'update' | 'delete' | 'count' | 'max' | 'truncate';\n select: Array<string | Knex.Raw>;\n count: string | null;\n max: string | null;\n first: boolean;\n data: Record<string, unknown> | (null | Record<string, unknown>)[] | null;\n where: Record<string, unknown>[];\n joins: Join[];\n populate: object | null;\n limit: number | null;\n offset: number | null;\n transaction: any;\n forUpdate: boolean;\n onConflict: any;\n merge: any;\n ignore: boolean;\n orderBy: any[];\n groupBy: any[];\n increments: any[];\n decrements: any[];\n aliasCounter: number;\n filters: any;\n search: string;\n processed: boolean;\n}\n\nexport interface QueryBuilder {\n alias: string;\n state: State;\n raw: Knex.RawBuilder;\n\n getAlias(): string;\n\n clone(): QueryBuilder;\n\n select(args: string | Array<string | Knex.Raw>): QueryBuilder;\n\n addSelect(args: string | string[]): QueryBuilder;\n\n insert<TData extends Record<string, unknown> | Record<string, unknown>[]>(\n data: TData\n ): QueryBuilder;\n\n onConflict(args: any): QueryBuilder;\n\n merge(args: any): QueryBuilder;\n\n ignore(): QueryBuilder;\n\n delete(): QueryBuilder;\n\n ref(name: string): any;\n\n update<TData extends Record<string, unknown>>(data: TData): QueryBuilder;\n\n increment(column: string, amount?: number): QueryBuilder;\n\n decrement(column: string, amount?: number): QueryBuilder;\n\n count(count?: string): QueryBuilder;\n\n max(column: string): QueryBuilder;\n\n where(where?: object): QueryBuilder;\n\n limit(limit: number): QueryBuilder;\n\n offset(offset: number): QueryBuilder;\n\n orderBy(orderBy: any): QueryBuilder;\n\n groupBy(groupBy: any): QueryBuilder;\n\n populate(populate: any): QueryBuilder;\n\n search(query: string): QueryBuilder;\n\n transacting(transaction: any): QueryBuilder;\n\n forUpdate(): QueryBuilder;\n\n init(params?: any): QueryBuilder;\n\n filters(filters: any): void;\n\n first(): QueryBuilder;\n\n join(join: any): QueryBuilder;\n\n mustUseAlias(): boolean;\n\n aliasColumn(key: any, alias?: string): any;\n\n shouldUseSubQuery(): boolean;\n\n runSubQuery(): any;\n\n processState(): void;\n\n shouldUseDistinct(): boolean;\n\n shouldUseDeepSort(): boolean;\n\n processSelect(): void;\n\n getKnexQuery(): Knex.QueryBuilder;\n\n execute<T>(options?: { mapResults?: boolean }): Promise<T>;\n\n stream(options?: { mapResults?: boolean }): helpers.ReadableQuery;\n}\n\nconst createQueryBuilder = (\n uid: string,\n db: Database,\n initialState: Partial<State> = {}\n): QueryBuilder => {\n const meta = db.metadata.get(uid);\n const { tableName } = meta;\n\n const state: State = _.defaults(\n {\n type: 'select',\n select: [],\n count: null,\n max: null,\n first: false,\n data: null,\n where: [],\n joins: [],\n populate: null,\n limit: null,\n offset: null,\n transaction: null,\n forUpdate: false,\n onConflict: null,\n merge: null,\n ignore: false,\n orderBy: [],\n groupBy: [],\n increments: [],\n decrements: [],\n aliasCounter: 0,\n filters: null,\n search: null,\n processed: false,\n },\n initialState\n );\n\n const getAlias = () => {\n const alias = `t${state.aliasCounter}`;\n\n state.aliasCounter += 1;\n\n return alias;\n };\n\n return {\n alias: getAlias(),\n getAlias,\n state,\n\n clone() {\n return createQueryBuilder(uid, db, state);\n },\n\n select(args) {\n state.type = 'select';\n state.select = _.uniq(_.castArray(args));\n\n return this;\n },\n\n addSelect(args) {\n state.select = _.uniq([...state.select, ..._.castArray(args)]);\n\n return this;\n },\n\n insert(data) {\n state.type = 'insert';\n state.data = data;\n\n return this;\n },\n\n onConflict(args) {\n state.onConflict = args;\n\n return this;\n },\n\n merge(args) {\n state.merge = args;\n\n return this;\n },\n\n ignore() {\n state.ignore = true;\n\n return this;\n },\n\n delete() {\n state.type = 'delete';\n\n return this;\n },\n\n ref(name) {\n return db.connection.ref(helpers.toColumnName(meta, name));\n },\n\n update(data) {\n state.type = 'update';\n state.data = data;\n\n return this;\n },\n\n increment(column, amount = 1) {\n state.type = 'update';\n state.increments.push({ column, amount });\n\n return this;\n },\n\n decrement(column, amount = 1) {\n state.type = 'update';\n state.decrements.push({ column, amount });\n\n return this;\n },\n\n count(count = 'id') {\n state.type = 'count';\n state.count = count;\n\n return this;\n },\n\n max(column: string) {\n state.type = 'max';\n state.max = column;\n\n return this;\n },\n\n where(where: Record<string, unknown> = {}) {\n if (!_.isPlainObject(where)) {\n throw new Error('Where must be an object');\n }\n\n state.where.push(where);\n\n return this;\n },\n\n limit(limit) {\n state.limit = limit;\n return this;\n },\n\n offset(offset) {\n state.offset = offset;\n return this;\n },\n\n orderBy(orderBy) {\n state.orderBy = orderBy;\n return this;\n },\n\n groupBy(groupBy) {\n state.groupBy = groupBy;\n return this;\n },\n\n populate(populate) {\n state.populate = populate;\n return this;\n },\n\n search(query) {\n state.search = query;\n return this;\n },\n\n transacting(transaction) {\n state.transaction = transaction;\n return this;\n },\n\n forUpdate() {\n state.forUpdate = true;\n return this;\n },\n\n init(params = {}) {\n const { _q, filters, where, select, limit, offset, orderBy, groupBy, populate } = params;\n\n if (!_.isNil(where)) {\n this.where(where);\n }\n\n if (!_.isNil(_q)) {\n this.search(_q);\n }\n\n if (!_.isNil(select)) {\n this.select(select);\n } else {\n this.select('*');\n }\n\n if (!_.isNil(limit)) {\n this.limit(limit);\n }\n\n if (!_.isNil(offset)) {\n this.offset(offset);\n }\n\n if (!_.isNil(orderBy)) {\n this.orderBy(orderBy);\n }\n\n if (!_.isNil(groupBy)) {\n this.groupBy(groupBy);\n }\n\n if (!_.isNil(populate)) {\n this.populate(populate);\n }\n\n if (!_.isNil(filters)) {\n this.filters(filters);\n }\n\n return this;\n },\n\n filters(filters) {\n state.filters = filters;\n },\n\n first() {\n state.first = true;\n return this;\n },\n\n join(join) {\n if (!join.targetField) {\n state.joins.push(join);\n return this;\n }\n\n const model = db.metadata.get(uid);\n const attribute = model.attributes[join.targetField];\n\n helpers.createJoin(\n { db, qb: this, uid },\n {\n alias: this.alias,\n refAlias: join.alias,\n attributeName: join.targetField,\n attribute,\n }\n );\n\n return this;\n },\n\n mustUseAlias() {\n return ['select', 'count'].includes(state.type);\n },\n\n aliasColumn(key: string | unknown, alias: string): string | unknown {\n if (typeof key !== 'string') {\n return key;\n }\n\n if (key.indexOf('.') >= 0) {\n return key;\n }\n\n if (!_.isNil(alias)) {\n return `${alias}.${key}`;\n }\n\n return this.mustUseAlias() ? `${this.alias}.${key}` : key;\n },\n\n raw: db.connection.raw.bind(db.connection),\n\n shouldUseSubQuery() {\n return ['delete', 'update'].includes(state.type) && state.joins.length > 0;\n },\n\n runSubQuery() {\n const originalType = state.type;\n\n this.select('id');\n const subQB = this.getKnexQuery();\n\n const nestedSubQuery = db.getConnection().select('id').from(subQB.as('subQuery'));\n const connection = db.getConnection(tableName);\n\n return (connection[originalType] as Knex)().whereIn('id', nestedSubQuery);\n },\n\n processState() {\n if (this.state.processed) {\n return;\n }\n\n state.orderBy = helpers.processOrderBy(state.orderBy, { qb: this, uid, db });\n\n if (!_.isNil(state.filters)) {\n if (_.isFunction(state.filters)) {\n const filters = state.filters({ qb: this, uid, meta, db });\n\n if (!_.isNil(filters)) {\n state.where.push(filters);\n }\n } else {\n state.where.push(state.filters);\n }\n }\n\n state.where = helpers.processWhere(state.where, { qb: this, uid, db });\n state.populate = helpers.processPopulate(state.populate, { qb: this, uid, db });\n\n state.data = helpers.toRow(meta, state.data);\n\n this.processSelect();\n\n this.state.processed = true;\n },\n\n shouldUseDistinct() {\n return state.joins.length > 0 && _.isEmpty(state.groupBy);\n },\n\n shouldUseDeepSort() {\n return (\n state.orderBy\n .filter(({ column }) => column.indexOf('.') >= 0)\n .filter(({ column }) => {\n const col = column.split('.');\n\n for (let i = 0; i < col.length - 1; i += 1) {\n const el = col[i];\n\n // order by \"rel\".\"xxx\"\n const isRelationAttribute = meta.attributes[el]?.type === 'relation';\n\n // order by \"t2\".\"xxx\"\n const isAliasedRelation = Object.values(state.joins)\n .map((join) => join.alias)\n .includes(el);\n\n if (isRelationAttribute || isAliasedRelation) {\n return true;\n }\n }\n\n return false;\n }).length > 0\n );\n },\n\n processSelect() {\n state.select = state.select.map((field) => {\n if (isKnexQuery(field)) {\n return field;\n }\n\n return helpers.toColumnName(meta, field);\n });\n\n if (this.shouldUseDistinct()) {\n const joinsOrderByColumns = state.joins.flatMap((join) => {\n return _.keys(join.orderBy).map((key) => this.aliasColumn(key, join.alias));\n });\n const orderByColumns = state.orderBy.map(({ column }) => column);\n\n state.select = _.uniq([...joinsOrderByColumns, ...orderByColumns, ...state.select]);\n }\n },\n\n getKnexQuery() {\n if (!state.type) {\n this.select('*');\n }\n\n const aliasedTableName = this.mustUseAlias() ? `${tableName} as ${this.alias}` : tableName;\n\n const qb = db.getConnection(aliasedTableName);\n\n // The state should always be processed before calling shouldUseSubQuery as it\n // relies on the presence or absence of joins to determine the need of a subquery\n this.processState();\n\n if (this.shouldUseSubQuery()) {\n return this.runSubQuery();\n }\n\n switch (state.type) {\n case 'select': {\n qb.select(state.select.map((column) => this.aliasColumn(column)));\n\n if (this.shouldUseDistinct()) {\n qb.distinct();\n }\n\n break;\n }\n case 'count': {\n const dbColumnName = this.aliasColumn(helpers.toColumnName(meta, state.count));\n\n if (this.shouldUseDistinct()) {\n qb.countDistinct({ count: dbColumnName });\n } else {\n qb.count({ count: dbColumnName });\n }\n break;\n }\n case 'max': {\n const dbColumnName = this.aliasColumn(helpers.toColumnName(meta, state.max));\n qb.max({ max: dbColumnName });\n break;\n }\n case 'insert': {\n qb.insert(state.data);\n\n if (db.dialect.useReturning() && _.has('id', meta.attributes)) {\n qb.returning('id');\n }\n\n break;\n }\n case 'update': {\n if (state.data) {\n qb.update(state.data);\n }\n break;\n }\n case 'delete': {\n qb.delete();\n\n break;\n }\n case 'truncate': {\n qb.truncate();\n break;\n }\n default: {\n throw new Error('Unknown query type');\n }\n }\n\n if (state.transaction) {\n qb.transacting(state.transaction);\n }\n\n if (state.forUpdate) {\n qb.forUpdate();\n }\n\n if (!_.isEmpty(state.increments)) {\n state.increments.forEach((incr) => qb.increment(incr.column, incr.amount));\n }\n\n if (!_.isEmpty(state.decrements)) {\n state.decrements.forEach((decr) => qb.decrement(decr.column, decr.amount));\n }\n\n if (state.onConflict) {\n if (state.merge) {\n qb.onConflict(state.onConflict).merge(state.merge);\n } else if (state.ignore) {\n qb.onConflict(state.onConflict).ignore();\n }\n }\n\n if (state.limit) {\n qb.limit(state.limit);\n }\n\n if (state.offset) {\n qb.offset(state.offset);\n }\n\n if (state.orderBy.length > 0) {\n qb.orderBy(state.orderBy);\n }\n\n if (state.first) {\n qb.first();\n }\n\n if (state.groupBy.length > 0) {\n qb.groupBy(state.groupBy);\n }\n\n // if there are joins and it is a delete or update use a sub query\n if (state.where) {\n helpers.applyWhere(qb, state.where);\n }\n\n // if there are joins and it is a delete or update use a sub query\n if (state.search) {\n qb.where((subQb) => {\n helpers.applySearch(subQb, state.search, { qb: this, db, uid });\n });\n }\n\n if (state.joins.length > 0) {\n helpers.applyJoins(qb, state.joins);\n }\n\n if (this.shouldUseDeepSort()) {\n return helpers.wrapWithDeepSort(qb, { qb: this, db, uid });\n }\n\n return qb;\n },\n\n async execute({ mapResults = true } = {}) {\n try {\n const qb = this.getKnexQuery();\n\n const transaction = transactionCtx.get();\n if (transaction) {\n qb.transacting(transaction);\n }\n\n const rows = await qb;\n\n if (state.populate && !_.isNil(rows)) {\n await helpers.applyPopulate(_.castArray(rows), state.populate, {\n qb: this,\n uid,\n db,\n });\n }\n\n let results = rows;\n if (mapResults && state.type === 'select') {\n results = helpers.fromRow(meta, rows);\n }\n\n return results;\n } catch (error) {\n if (error instanceof Error) {\n db.dialect.transformErrors(error);\n } else {\n throw error;\n }\n }\n },\n\n stream({ mapResults = true } = {}) {\n if (state.type === 'select') {\n return new helpers.ReadableQuery({ qb: this, db, uid, mapResults });\n }\n\n throw new DatabaseError(\n `query-builder.stream() has been called with an unsupported query type: \"${state.type}\"`\n );\n },\n };\n};\n\nexport default createQueryBuilder;\n"],"names":["createQueryBuilder","uid","db","initialState","meta","metadata","get","tableName","state","_","defaults","type","select","count","max","first","data","where","joins","populate","limit","offset","transaction","forUpdate","onConflict","merge","ignore","orderBy","groupBy","increments","decrements","aliasCounter","filters","search","processed","getAlias","alias","clone","args","uniq","castArray","addSelect","insert","delete","ref","name","connection","helpers","update","increment","column","amount","push","decrement","isPlainObject","Error","query","transacting","init","params","_q","isNil","join","targetField","model","attribute","attributes","qb","refAlias","attributeName","mustUseAlias","includes","aliasColumn","key","indexOf","raw","bind","shouldUseSubQuery","length","runSubQuery","originalType","subQB","getKnexQuery","nestedSubQuery","getConnection","from","as","whereIn","processState","isFunction","processSelect","shouldUseDistinct","isEmpty","shouldUseDeepSort","filter","col","split","i","el","isRelationAttribute","isAliasedRelation","Object","values","map","field","isKnexQuery","joinsOrderByColumns","flatMap","keys","orderByColumns","aliasedTableName","distinct","dbColumnName","countDistinct","dialect","useReturning","has","returning","truncate","forEach","incr","decr","subQb","execute","mapResults","transactionCtx","rows","results","error","transformErrors","stream","DatabaseError"],"mappings":"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"}
1
+ {"version":3,"file":"query-builder.mjs","sources":["../../src/query/query-builder.ts"],"sourcesContent":["import type { Knex } from 'knex';\nimport _ from 'lodash/fp';\n\nimport type { Database } from '..';\n\nimport { DatabaseError } from '../errors';\nimport { transactionCtx } from '../transaction-context';\nimport { isKnexQuery } from '../utils/knex';\nimport * as helpers from './helpers';\nimport type { Join } from './helpers/join';\n\ninterface State {\n type: 'select' | 'insert' | 'update' | 'delete' | 'count' | 'max' | 'truncate';\n select: Array<string | Knex.Raw>;\n count: string | null;\n max: string | null;\n first: boolean;\n data: Record<string, unknown> | (null | Record<string, unknown>)[] | null;\n where: Record<string, unknown>[];\n joins: Join[];\n populate: object | null;\n limit: number | null;\n offset: number | null;\n transaction: any;\n forUpdate: boolean;\n onConflict: any;\n merge: any;\n ignore: boolean;\n orderBy: any[];\n groupBy: any[];\n increments: any[];\n decrements: any[];\n aliasCounter: number;\n filters: any;\n search: string;\n processed: boolean;\n}\n\nexport interface QueryBuilder {\n alias: string;\n state: State;\n raw: Knex.RawBuilder;\n\n getAlias(): string;\n\n clone(): QueryBuilder;\n\n select(args: string | Array<string | Knex.Raw>): QueryBuilder;\n\n addSelect(args: string | string[]): QueryBuilder;\n\n insert<TData extends Record<string, unknown> | Record<string, unknown>[]>(\n data: TData\n ): QueryBuilder;\n\n onConflict(args: any): QueryBuilder;\n\n merge(args: any): QueryBuilder;\n\n ignore(): QueryBuilder;\n\n delete(): QueryBuilder;\n\n ref(name: string): any;\n\n update<TData extends Record<string, unknown>>(data: TData): QueryBuilder;\n\n increment(column: string, amount?: number): QueryBuilder;\n\n decrement(column: string, amount?: number): QueryBuilder;\n\n count(count?: string): QueryBuilder;\n\n max(column: string): QueryBuilder;\n\n where(where?: object): QueryBuilder;\n\n limit(limit: number): QueryBuilder;\n\n offset(offset: number): QueryBuilder;\n\n orderBy(orderBy: any): QueryBuilder;\n\n groupBy(groupBy: any): QueryBuilder;\n\n populate(populate: any): QueryBuilder;\n\n search(query: string): QueryBuilder;\n\n transacting(transaction: any): QueryBuilder;\n\n forUpdate(): QueryBuilder;\n\n init(params?: any): QueryBuilder;\n\n filters(filters: any): void;\n\n first(): QueryBuilder;\n\n join(join: any): QueryBuilder;\n\n mustUseAlias(): boolean;\n\n aliasColumn(key: any, alias?: string): any;\n\n shouldUseSubQuery(): boolean;\n\n runSubQuery(): any;\n\n processState(): void;\n\n shouldUseDistinct(): boolean;\n\n shouldUseDeepSort(): boolean;\n\n processSelect(): void;\n\n getKnexQuery(): Knex.QueryBuilder;\n\n execute<T>(options?: { mapResults?: boolean }): Promise<T>;\n\n stream(options?: { mapResults?: boolean }): helpers.ReadableQuery;\n}\n\nconst createQueryBuilder = (\n uid: string,\n db: Database,\n initialState: Partial<State> = {}\n): QueryBuilder => {\n const meta = db.metadata.get(uid);\n const { tableName } = meta;\n\n const state: State = _.defaults(\n {\n type: 'select',\n select: [],\n count: null,\n max: null,\n first: false,\n data: null,\n where: [],\n joins: [],\n populate: null,\n limit: null,\n offset: null,\n transaction: null,\n forUpdate: false,\n onConflict: null,\n merge: null,\n ignore: false,\n orderBy: [],\n groupBy: [],\n increments: [],\n decrements: [],\n aliasCounter: 0,\n filters: null,\n search: null,\n processed: false,\n },\n initialState\n );\n\n const getAlias = () => {\n const alias = `t${state.aliasCounter}`;\n\n state.aliasCounter += 1;\n\n return alias;\n };\n\n return {\n alias: getAlias(),\n getAlias,\n state,\n\n clone() {\n return createQueryBuilder(uid, db, state);\n },\n\n select(args) {\n state.type = 'select';\n state.select = _.uniq(_.castArray(args));\n\n return this;\n },\n\n addSelect(args) {\n state.select = _.uniq([...state.select, ..._.castArray(args)]);\n\n return this;\n },\n\n insert(data) {\n state.type = 'insert';\n state.data = data;\n\n return this;\n },\n\n onConflict(args) {\n state.onConflict = args;\n\n return this;\n },\n\n merge(args) {\n state.merge = args;\n\n return this;\n },\n\n ignore() {\n state.ignore = true;\n\n return this;\n },\n\n delete() {\n state.type = 'delete';\n\n return this;\n },\n\n ref(name) {\n return db.connection.ref(helpers.toColumnName(meta, name));\n },\n\n update(data) {\n state.type = 'update';\n state.data = data;\n\n return this;\n },\n\n increment(column, amount = 1) {\n state.type = 'update';\n state.increments.push({ column, amount });\n\n return this;\n },\n\n decrement(column, amount = 1) {\n state.type = 'update';\n state.decrements.push({ column, amount });\n\n return this;\n },\n\n count(count = 'id') {\n state.type = 'count';\n state.count = count;\n\n return this;\n },\n\n max(column: string) {\n state.type = 'max';\n state.max = column;\n\n return this;\n },\n\n where(where: Record<string, unknown> = {}) {\n if (!_.isPlainObject(where)) {\n throw new Error('Where must be an object');\n }\n\n state.where.push(where);\n\n return this;\n },\n\n limit(limit) {\n state.limit = limit;\n return this;\n },\n\n offset(offset) {\n state.offset = offset;\n return this;\n },\n\n orderBy(orderBy) {\n state.orderBy = orderBy;\n return this;\n },\n\n groupBy(groupBy) {\n state.groupBy = groupBy;\n return this;\n },\n\n populate(populate) {\n state.populate = populate;\n return this;\n },\n\n search(query) {\n state.search = query;\n return this;\n },\n\n transacting(transaction) {\n state.transaction = transaction;\n return this;\n },\n\n forUpdate() {\n state.forUpdate = true;\n return this;\n },\n\n init(params = {}) {\n const { _q, filters, where, select, limit, offset, orderBy, groupBy, populate } = params;\n\n if (!_.isNil(where)) {\n this.where(where);\n }\n\n if (!_.isNil(_q)) {\n this.search(_q);\n }\n\n if (!_.isNil(select)) {\n this.select(select);\n } else {\n this.select('*');\n }\n\n if (!_.isNil(limit)) {\n this.limit(limit);\n }\n\n if (!_.isNil(offset)) {\n this.offset(offset);\n }\n\n if (!_.isNil(orderBy)) {\n this.orderBy(orderBy);\n }\n\n if (!_.isNil(groupBy)) {\n this.groupBy(groupBy);\n }\n\n if (!_.isNil(populate)) {\n this.populate(populate);\n }\n\n if (!_.isNil(filters)) {\n this.filters(filters);\n }\n\n return this;\n },\n\n filters(filters) {\n state.filters = filters;\n },\n\n first() {\n state.first = true;\n return this;\n },\n\n join(join) {\n if (!join.targetField) {\n state.joins.push(join);\n return this;\n }\n\n const model = db.metadata.get(uid);\n const attribute = model.attributes[join.targetField];\n\n helpers.createJoin(\n { db, qb: this, uid },\n {\n alias: this.alias,\n refAlias: join.alias,\n attributeName: join.targetField,\n attribute,\n }\n );\n\n return this;\n },\n\n mustUseAlias() {\n return ['select', 'count'].includes(state.type);\n },\n\n aliasColumn(key: string | unknown, alias: string): string | unknown {\n if (typeof key !== 'string') {\n return key;\n }\n\n if (key.indexOf('.') >= 0) {\n return key;\n }\n\n if (!_.isNil(alias)) {\n return `${alias}.${key}`;\n }\n\n return this.mustUseAlias() ? `${this.alias}.${key}` : key;\n },\n\n raw: db.connection.raw.bind(db.connection),\n\n shouldUseSubQuery() {\n return ['delete', 'update'].includes(state.type) && state.joins.length > 0;\n },\n\n runSubQuery() {\n const originalType = state.type;\n\n this.select('id');\n const subQB = this.getKnexQuery();\n\n const nestedSubQuery = db.getConnection().select('id').from(subQB.as('subQuery'));\n const connection = db.getConnection(tableName);\n\n return (connection[originalType] as Knex)().whereIn('id', nestedSubQuery);\n },\n\n processState() {\n if (this.state.processed) {\n return;\n }\n\n state.orderBy = helpers.processOrderBy(state.orderBy, { qb: this, uid, db });\n\n if (!_.isNil(state.filters)) {\n if (_.isFunction(state.filters)) {\n const filters = state.filters({ qb: this, uid, meta, db });\n\n if (!_.isNil(filters)) {\n state.where.push(filters);\n }\n } else {\n state.where.push(state.filters);\n }\n }\n\n state.where = helpers.processWhere(state.where, { qb: this, uid, db });\n state.populate = helpers.processPopulate(state.populate, { qb: this, uid, db });\n\n state.data = helpers.toRow(meta, state.data);\n\n this.processSelect();\n\n this.state.processed = true;\n },\n\n shouldUseDistinct() {\n return state.joins.length > 0 && _.isEmpty(state.groupBy);\n },\n\n shouldUseDeepSort() {\n return (\n state.orderBy\n .filter(({ column }) => column.indexOf('.') >= 0)\n .filter(({ column }) => {\n const col = column.split('.');\n\n for (let i = 0; i < col.length - 1; i += 1) {\n const el = col[i];\n\n // order by \"rel\".\"xxx\"\n const isRelationAttribute = meta.attributes[el]?.type === 'relation';\n\n // order by \"t2\".\"xxx\"\n const isAliasedRelation = Object.values(state.joins)\n .map((join) => join.alias)\n .includes(el);\n\n if (isRelationAttribute || isAliasedRelation) {\n return true;\n }\n }\n\n return false;\n }).length > 0\n );\n },\n\n processSelect() {\n state.select = state.select.map((field) => {\n if (isKnexQuery(field)) {\n return field;\n }\n\n return helpers.toColumnName(meta, field);\n });\n\n if (this.shouldUseDistinct()) {\n const joinsOrderByColumns = state.joins.flatMap((join) => {\n return _.keys(join.orderBy).map((key) => this.aliasColumn(key, join.alias));\n });\n const orderByColumns = state.orderBy.map(({ column }) => column);\n\n state.select = _.uniq([...joinsOrderByColumns, ...orderByColumns, ...state.select]);\n }\n },\n\n getKnexQuery() {\n if (!state.type) {\n this.select('*');\n }\n\n const aliasedTableName = this.mustUseAlias() ? `${tableName} as ${this.alias}` : tableName;\n\n const qb = db.getConnection(aliasedTableName);\n\n // The state should always be processed before calling shouldUseSubQuery as it\n // relies on the presence or absence of joins to determine the need of a subquery\n this.processState();\n\n if (this.shouldUseSubQuery()) {\n return this.runSubQuery();\n }\n\n switch (state.type) {\n case 'select': {\n qb.select(state.select.map((column) => this.aliasColumn(column)));\n\n if (this.shouldUseDistinct()) {\n qb.distinct();\n }\n\n break;\n }\n case 'count': {\n const dbColumnName = this.aliasColumn(helpers.toColumnName(meta, state.count));\n\n if (this.shouldUseDistinct()) {\n qb.countDistinct({ count: dbColumnName });\n } else {\n qb.count({ count: dbColumnName });\n }\n break;\n }\n case 'max': {\n const dbColumnName = this.aliasColumn(helpers.toColumnName(meta, state.max));\n qb.max({ max: dbColumnName });\n break;\n }\n case 'insert': {\n qb.insert(state.data);\n\n if (db.dialect.useReturning() && _.has('id', meta.attributes)) {\n qb.returning('id');\n }\n\n break;\n }\n case 'update': {\n if (state.data) {\n qb.update(state.data);\n }\n break;\n }\n case 'delete': {\n qb.delete();\n\n break;\n }\n case 'truncate': {\n qb.truncate();\n break;\n }\n default: {\n throw new Error('Unknown query type');\n }\n }\n\n if (state.transaction) {\n qb.transacting(state.transaction);\n }\n\n if (state.forUpdate) {\n qb.forUpdate();\n }\n\n if (!_.isEmpty(state.increments)) {\n state.increments.forEach((incr) => qb.increment(incr.column, incr.amount));\n }\n\n if (!_.isEmpty(state.decrements)) {\n state.decrements.forEach((decr) => qb.decrement(decr.column, decr.amount));\n }\n\n if (state.onConflict) {\n if (state.merge) {\n qb.onConflict(state.onConflict).merge(state.merge);\n } else if (state.ignore) {\n qb.onConflict(state.onConflict).ignore();\n }\n }\n\n if (state.limit) {\n qb.limit(state.limit);\n }\n\n if (state.offset) {\n qb.offset(state.offset);\n }\n\n if (state.orderBy.length > 0) {\n qb.orderBy(state.orderBy);\n }\n\n if (state.first) {\n qb.first();\n }\n\n if (state.groupBy.length > 0) {\n qb.groupBy(state.groupBy);\n }\n\n // if there are joins and it is a delete or update use a sub query\n if (state.where) {\n helpers.applyWhere(qb, state.where);\n }\n\n // if there are joins and it is a delete or update use a sub query\n if (state.search) {\n qb.where((subQb) => {\n helpers.applySearch(subQb, state.search, { qb: this, db, uid });\n });\n }\n\n if (state.joins.length > 0) {\n helpers.applyJoins(qb, state.joins);\n }\n\n if (this.shouldUseDeepSort()) {\n return helpers.wrapWithDeepSort(qb, { qb: this, db, uid });\n }\n\n return qb;\n },\n\n async execute({ mapResults = true } = {}) {\n try {\n const qb = this.getKnexQuery();\n\n const transaction = transactionCtx.get();\n if (transaction) {\n qb.transacting(transaction);\n }\n\n const rows = await qb;\n\n if (state.populate && !_.isNil(rows)) {\n await helpers.applyPopulate(_.castArray(rows), state.populate, {\n qb: this,\n uid,\n db,\n });\n }\n\n let results = rows;\n if (mapResults && state.type === 'select') {\n results = helpers.fromRow(meta, rows);\n }\n\n return results;\n } catch (error) {\n if (error instanceof Error) {\n db.dialect.transformErrors(error);\n } else {\n throw error;\n }\n }\n },\n\n stream({ mapResults = true } = {}) {\n if (state.type === 'select') {\n return new helpers.ReadableQuery({ qb: this, db, uid, mapResults });\n }\n\n throw new DatabaseError(\n `query-builder.stream() has been called with an unsupported query type: \"${state.type}\"`\n );\n },\n };\n};\n\nexport default createQueryBuilder;\n"],"names":["createQueryBuilder","uid","db","initialState","meta","metadata","get","tableName","state","_","defaults","type","select","count","max","first","data","where","joins","populate","limit","offset","transaction","forUpdate","onConflict","merge","ignore","orderBy","groupBy","increments","decrements","aliasCounter","filters","search","processed","getAlias","alias","clone","args","uniq","castArray","addSelect","insert","delete","ref","name","connection","helpers","update","increment","column","amount","push","decrement","isPlainObject","Error","query","transacting","init","params","_q","isNil","join","targetField","model","attribute","attributes","qb","refAlias","attributeName","mustUseAlias","includes","aliasColumn","key","indexOf","raw","bind","shouldUseSubQuery","length","runSubQuery","originalType","subQB","getKnexQuery","nestedSubQuery","getConnection","from","as","whereIn","processState","isFunction","processSelect","shouldUseDistinct","isEmpty","shouldUseDeepSort","filter","col","split","i","el","isRelationAttribute","isAliasedRelation","Object","values","map","field","isKnexQuery","joinsOrderByColumns","flatMap","keys","orderByColumns","aliasedTableName","distinct","dbColumnName","countDistinct","dialect","useReturning","has","returning","truncate","forEach","incr","decr","subQb","execute","mapResults","transactionCtx","rows","results","error","transformErrors","stream","DatabaseError"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"remove-orphan-morph-types.js","sources":["../../../src/repairs/operations/remove-orphan-morph-types.ts"],"sourcesContent":["import type { Database } from '../..';\nimport type { Attribute, MorphRelationalAttribute } from '../../types';\n\nexport interface RemoveOrphanMorphTypeOptions {\n pivot: string;\n}\n\nconst isMorphRelationWithPivot = (\n attribute: Attribute,\n pivot: string\n): attribute is MorphRelationalAttribute => {\n return (\n attribute.type === 'relation' &&\n 'relation' in attribute &&\n 'joinTable' in attribute &&\n 'name' in attribute.joinTable &&\n 'pivotColumns' in attribute.joinTable &&\n attribute.joinTable.pivotColumns.includes(pivot)\n );\n};\n\nconst filterMorphRelationalAttributes = (\n attributes: Record<string, Attribute>,\n pivot: string\n): MorphRelationalAttribute[] => {\n return Object.values(attributes).filter((attribute): attribute is MorphRelationalAttribute =>\n isMorphRelationWithPivot(attribute, pivot)\n );\n};\n\n/**\n * Removes morph relation data with invalid or non-existent morph type.\n *\n * This function iterates over the database metadata to identify morph relationships\n * (relations with a `joinTable` containing the specified pivot column) and removes\n * any entries in the relation's join table where the morph type is invalid.\n *\n * Note: This function does not check for orphaned IDs, only orphaned morph types.\n *\n * @param db - The database object containing metadata and a Knex connection.\n * @param options.pivot - The name of the column in the join table representing the morph type.\n */\nexport const removeOrphanMorphType = async (\n db: Database,\n { pivot }: RemoveOrphanMorphTypeOptions\n) => {\n db.logger.debug(`Removing orphaned morph type: ${JSON.stringify(pivot)}`);\n\n const mdValues = db.metadata.values();\n for (const model of mdValues) {\n const attributes = filterMorphRelationalAttributes(model.attributes || {}, pivot);\n\n for (const attribute of attributes) {\n const joinTableName = attribute.joinTable.name;\n\n // Query distinct morph types from the join table\n const morphTypes = await db.connection(joinTableName).distinct(pivot).pluck(pivot);\n\n for (const morphType of morphTypes) {\n // Check if metadata for the morph type exists\n const deleteComponentType = await (async () => {\n try {\n return !db.metadata.get(morphType); // If no metadata found, mark for deletion\n } catch {\n db.logger.debug(\n `Metadata for morph type \"${morphType}\" in table \"${joinTableName}\" not found`\n );\n return true; // Return true to delete if metadata is missing\n }\n })();\n\n if (deleteComponentType) {\n db.logger.debug(\n `Removing invalid morph type \"${morphType}\" from table \"${joinTableName}\".`\n );\n try {\n await db.connection(joinTableName).where(pivot, morphType).del();\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n db.logger.error(\n `Failed to remove invalid morph type \"${morphType}\" from table \"${joinTableName}\": ${errorMessage}`\n );\n }\n }\n }\n }\n }\n};\n"],"names":["isMorphRelationWithPivot","attribute","pivot","type","joinTable","pivotColumns","includes","filterMorphRelationalAttributes","attributes","Object","values","filter","removeOrphanMorphType","db","logger","debug","JSON","stringify","mdValues","metadata","model","joinTableName","name","morphTypes","connection","distinct","pluck","morphType","deleteComponentType","get","where","del","error","errorMessage","Error","message","String"],"mappings":";;AAOA,MAAMA,wBAAAA,GAA2B,CAC/BC,SACAC,EAAAA,KAAAA,GAAAA;IAEA,OACED,SAAAA,CAAUE,IAAI,KAAK,UAAA,IACnB,cAAcF,SACd,IAAA,WAAA,IAAeA,SACf,IAAA,MAAA,IAAUA,SAAUG,CAAAA,SAAS,IAC7B,cAAkBH,IAAAA,SAAAA,CAAUG,SAAS,IACrCH,SAAAA,CAAUG,SAAS,CAACC,YAAY,CAACC,QAAQ,CAACJ,KAAAA,CAAAA;AAE9C,CAAA;AAEA,MAAMK,+BAAAA,GAAkC,CACtCC,UACAN,EAAAA,KAAAA,GAAAA;IAEA,OAAOO,MAAAA,CAAOC,MAAM,CAACF,UAAAA,CAAAA,CAAYG,MAAM,CAAC,CAACV,SACvCD,GAAAA,wBAAAA,CAAyBC,SAAWC,EAAAA,KAAAA,CAAAA,CAAAA;AAExC,CAAA;AAEA;;;;;;;;;;;AAWC,IACYU,MAAAA,qBAAAA,GAAwB,OACnCC,EACA,EAAA,EAAEX,KAAK,EAAgC,GAAA;IAEvCW,EAAGC,CAAAA,MAAM,CAACC,KAAK,CAAC,CAAC,8BAA8B,EAAEC,IAAKC,CAAAA,SAAS,CAACf,KAAAA,CAAAA,CAAO,CAAC,CAAA;AAExE,IAAA,MAAMgB,QAAWL,GAAAA,EAAAA,CAAGM,QAAQ,CAACT,MAAM,EAAA;IACnC,KAAK,MAAMU,SAASF,QAAU,CAAA;AAC5B,QAAA,MAAMV,aAAaD,+BAAgCa,CAAAA,KAAAA,CAAMZ,UAAU,IAAI,EAAIN,EAAAA,KAAAA,CAAAA;QAE3E,KAAK,MAAMD,aAAaO,UAAY,CAAA;AAClC,YAAA,MAAMa,aAAgBpB,GAAAA,SAAAA,CAAUG,SAAS,CAACkB,IAAI;;YAG9C,MAAMC,UAAAA,GAAa,MAAMV,EAAAA,CAAGW,UAAU,CAACH,eAAeI,QAAQ,CAACvB,KAAOwB,CAAAA,CAAAA,KAAK,CAACxB,KAAAA,CAAAA;YAE5E,KAAK,MAAMyB,aAAaJ,UAAY,CAAA;;gBAElC,MAAMK,mBAAAA,GAAsB,MAAO,CAAA,UAAA;oBACjC,IAAI;AACF,wBAAA,OAAO,CAACf,EAAGM,CAAAA,QAAQ,CAACU,GAAG,CAACF;AAC1B,qBAAA,CAAE,OAAM;AACNd,wBAAAA,EAAAA,CAAGC,MAAM,CAACC,KAAK,CACb,CAAC,yBAAyB,EAAEY,SAAAA,CAAU,YAAY,EAAEN,aAAc,CAAA,WAAW,CAAC,CAAA;AAEhF,wBAAA,OAAO;AACT;iBACF,GAAA;AAEA,gBAAA,IAAIO,mBAAqB,EAAA;AACvBf,oBAAAA,EAAAA,CAAGC,MAAM,CAACC,KAAK,CACb,CAAC,6BAA6B,EAAEY,SAAAA,CAAU,cAAc,EAAEN,aAAc,CAAA,EAAE,CAAC,CAAA;oBAE7E,IAAI;wBACF,MAAMR,EAAAA,CAAGW,UAAU,CAACH,aAAAA,CAAAA,CAAeS,KAAK,CAAC5B,KAAAA,EAAOyB,WAAWI,GAAG,EAAA;AAChE,qBAAA,CAAE,OAAOC,KAAO,EAAA;AACd,wBAAA,MAAMC,eAAeD,KAAiBE,YAAAA,KAAAA,GAAQF,KAAMG,CAAAA,OAAO,GAAGC,MAAOJ,CAAAA,KAAAA,CAAAA;AACrEnB,wBAAAA,EAAAA,CAAGC,MAAM,CAACkB,KAAK,CACb,CAAC,qCAAqC,EAAEL,SAAU,CAAA,cAAc,EAAEN,aAAAA,CAAc,GAAG,EAAEY,aAAa,CAAC,CAAA;AAEvG;AACF;AACF;AACF;AACF;AACF;;;;"}
1
+ {"version":3,"file":"remove-orphan-morph-types.js","sources":["../../../src/repairs/operations/remove-orphan-morph-types.ts"],"sourcesContent":["import type { Database } from '../..';\nimport type { Attribute, MorphRelationalAttribute } from '../../types';\n\nexport interface RemoveOrphanMorphTypeOptions {\n pivot: string;\n}\n\nconst isMorphRelationWithPivot = (\n attribute: Attribute,\n pivot: string\n): attribute is MorphRelationalAttribute => {\n return (\n attribute.type === 'relation' &&\n 'relation' in attribute &&\n 'joinTable' in attribute &&\n 'name' in attribute.joinTable &&\n 'pivotColumns' in attribute.joinTable &&\n attribute.joinTable.pivotColumns.includes(pivot)\n );\n};\n\nconst filterMorphRelationalAttributes = (\n attributes: Record<string, Attribute>,\n pivot: string\n): MorphRelationalAttribute[] => {\n return Object.values(attributes).filter((attribute): attribute is MorphRelationalAttribute =>\n isMorphRelationWithPivot(attribute, pivot)\n );\n};\n\n/**\n * Removes morph relation data with invalid or non-existent morph type.\n *\n * This function iterates over the database metadata to identify morph relationships\n * (relations with a `joinTable` containing the specified pivot column) and removes\n * any entries in the relation's join table where the morph type is invalid.\n *\n * Note: This function does not check for orphaned IDs, only orphaned morph types.\n *\n * @param db - The database object containing metadata and a Knex connection.\n * @param options.pivot - The name of the column in the join table representing the morph type.\n */\nexport const removeOrphanMorphType = async (\n db: Database,\n { pivot }: RemoveOrphanMorphTypeOptions\n) => {\n db.logger.debug(`Removing orphaned morph type: ${JSON.stringify(pivot)}`);\n\n const mdValues = db.metadata.values();\n for (const model of mdValues) {\n const attributes = filterMorphRelationalAttributes(model.attributes || {}, pivot);\n\n for (const attribute of attributes) {\n const joinTableName = attribute.joinTable.name;\n\n // Query distinct morph types from the join table\n const morphTypes = await db.connection(joinTableName).distinct(pivot).pluck(pivot);\n\n for (const morphType of morphTypes) {\n // Check if metadata for the morph type exists\n const deleteComponentType = await (async () => {\n try {\n return !db.metadata.get(morphType); // If no metadata found, mark for deletion\n } catch {\n db.logger.debug(\n `Metadata for morph type \"${morphType}\" in table \"${joinTableName}\" not found`\n );\n return true; // Return true to delete if metadata is missing\n }\n })();\n\n if (deleteComponentType) {\n db.logger.debug(\n `Removing invalid morph type \"${morphType}\" from table \"${joinTableName}\".`\n );\n try {\n await db.connection(joinTableName).where(pivot, morphType).del();\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n db.logger.error(\n `Failed to remove invalid morph type \"${morphType}\" from table \"${joinTableName}\": ${errorMessage}`\n );\n }\n }\n }\n }\n }\n};\n"],"names":["isMorphRelationWithPivot","attribute","pivot","type","joinTable","pivotColumns","includes","filterMorphRelationalAttributes","attributes","Object","values","filter","removeOrphanMorphType","db","logger","debug","JSON","stringify","mdValues","metadata","model","joinTableName","name","morphTypes","connection","distinct","pluck","morphType","deleteComponentType","get","where","del","error","errorMessage","Error","message","String"],"mappings":";;AAOA,MAAMA,wBAAAA,GAA2B,CAC/BC,SACAC,EAAAA,KAAAA,GAAAA;IAEA,OACED,SAAAA,CAAUE,IAAI,KAAK,UAAA,IACnB,cAAcF,SACd,IAAA,WAAA,IAAeA,SACf,IAAA,MAAA,IAAUA,SAAUG,CAAAA,SAAS,IAC7B,cAAkBH,IAAAA,SAAAA,CAAUG,SAAS,IACrCH,SAAAA,CAAUG,SAAS,CAACC,YAAY,CAACC,QAAQ,CAACJ,KAAAA,CAAAA;AAE9C,CAAA;AAEA,MAAMK,+BAAAA,GAAkC,CACtCC,UACAN,EAAAA,KAAAA,GAAAA;IAEA,OAAOO,MAAAA,CAAOC,MAAM,CAACF,UAAAA,CAAAA,CAAYG,MAAM,CAAC,CAACV,SACvCD,GAAAA,wBAAAA,CAAyBC,SAAWC,EAAAA,KAAAA,CAAAA,CAAAA;AAExC,CAAA;AAEA;;;;;;;;;;;AAWC,IACYU,MAAAA,qBAAAA,GAAwB,OACnCC,EACA,EAAA,EAAEX,KAAK,EAAgC,GAAA;IAEvCW,EAAGC,CAAAA,MAAM,CAACC,KAAK,CAAC,CAAC,8BAA8B,EAAEC,IAAAA,CAAKC,SAAS,CAACf,KAAQ,CAAA,CAAA,CAAA,CAAA;AAExE,IAAA,MAAMgB,QAAWL,GAAAA,EAAAA,CAAGM,QAAQ,CAACT,MAAM,EAAA;IACnC,KAAK,MAAMU,SAASF,QAAU,CAAA;AAC5B,QAAA,MAAMV,aAAaD,+BAAgCa,CAAAA,KAAAA,CAAMZ,UAAU,IAAI,EAAIN,EAAAA,KAAAA,CAAAA;QAE3E,KAAK,MAAMD,aAAaO,UAAY,CAAA;AAClC,YAAA,MAAMa,aAAgBpB,GAAAA,SAAAA,CAAUG,SAAS,CAACkB,IAAI;;YAG9C,MAAMC,UAAAA,GAAa,MAAMV,EAAAA,CAAGW,UAAU,CAACH,eAAeI,QAAQ,CAACvB,KAAOwB,CAAAA,CAAAA,KAAK,CAACxB,KAAAA,CAAAA;YAE5E,KAAK,MAAMyB,aAAaJ,UAAY,CAAA;;gBAElC,MAAMK,mBAAAA,GAAsB,MAAO,CAAA,UAAA;oBACjC,IAAI;AACF,wBAAA,OAAO,CAACf,EAAGM,CAAAA,QAAQ,CAACU,GAAG,CAACF;AAC1B,qBAAA,CAAE,OAAM;AACNd,wBAAAA,EAAAA,CAAGC,MAAM,CAACC,KAAK,CACb,CAAC,yBAAyB,EAAEY,SAAAA,CAAU,YAAY,EAAEN,aAAc,CAAA,WAAW,CAAC,CAAA;AAEhF,wBAAA,OAAO;AACT;iBACF,GAAA;AAEA,gBAAA,IAAIO,mBAAqB,EAAA;AACvBf,oBAAAA,EAAAA,CAAGC,MAAM,CAACC,KAAK,CACb,CAAC,6BAA6B,EAAEY,SAAAA,CAAU,cAAc,EAAEN,aAAc,CAAA,EAAE,CAAC,CAAA;oBAE7E,IAAI;wBACF,MAAMR,EAAAA,CAAGW,UAAU,CAACH,aAAAA,CAAAA,CAAeS,KAAK,CAAC5B,KAAAA,EAAOyB,WAAWI,GAAG,EAAA;AAChE,qBAAA,CAAE,OAAOC,KAAO,EAAA;AACd,wBAAA,MAAMC,eAAeD,KAAiBE,YAAAA,KAAAA,GAAQF,KAAMG,CAAAA,OAAO,GAAGC,MAAOJ,CAAAA,KAAAA,CAAAA;AACrEnB,wBAAAA,EAAAA,CAAGC,MAAM,CAACkB,KAAK,CACb,CAAC,qCAAqC,EAAEL,SAAAA,CAAU,cAAc,EAAEN,aAAc,CAAA,GAAG,EAAEY,YAAc,CAAA,CAAA,CAAA;AAEvG;AACF;AACF;AACF;AACF;AACF;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"remove-orphan-morph-types.mjs","sources":["../../../src/repairs/operations/remove-orphan-morph-types.ts"],"sourcesContent":["import type { Database } from '../..';\nimport type { Attribute, MorphRelationalAttribute } from '../../types';\n\nexport interface RemoveOrphanMorphTypeOptions {\n pivot: string;\n}\n\nconst isMorphRelationWithPivot = (\n attribute: Attribute,\n pivot: string\n): attribute is MorphRelationalAttribute => {\n return (\n attribute.type === 'relation' &&\n 'relation' in attribute &&\n 'joinTable' in attribute &&\n 'name' in attribute.joinTable &&\n 'pivotColumns' in attribute.joinTable &&\n attribute.joinTable.pivotColumns.includes(pivot)\n );\n};\n\nconst filterMorphRelationalAttributes = (\n attributes: Record<string, Attribute>,\n pivot: string\n): MorphRelationalAttribute[] => {\n return Object.values(attributes).filter((attribute): attribute is MorphRelationalAttribute =>\n isMorphRelationWithPivot(attribute, pivot)\n );\n};\n\n/**\n * Removes morph relation data with invalid or non-existent morph type.\n *\n * This function iterates over the database metadata to identify morph relationships\n * (relations with a `joinTable` containing the specified pivot column) and removes\n * any entries in the relation's join table where the morph type is invalid.\n *\n * Note: This function does not check for orphaned IDs, only orphaned morph types.\n *\n * @param db - The database object containing metadata and a Knex connection.\n * @param options.pivot - The name of the column in the join table representing the morph type.\n */\nexport const removeOrphanMorphType = async (\n db: Database,\n { pivot }: RemoveOrphanMorphTypeOptions\n) => {\n db.logger.debug(`Removing orphaned morph type: ${JSON.stringify(pivot)}`);\n\n const mdValues = db.metadata.values();\n for (const model of mdValues) {\n const attributes = filterMorphRelationalAttributes(model.attributes || {}, pivot);\n\n for (const attribute of attributes) {\n const joinTableName = attribute.joinTable.name;\n\n // Query distinct morph types from the join table\n const morphTypes = await db.connection(joinTableName).distinct(pivot).pluck(pivot);\n\n for (const morphType of morphTypes) {\n // Check if metadata for the morph type exists\n const deleteComponentType = await (async () => {\n try {\n return !db.metadata.get(morphType); // If no metadata found, mark for deletion\n } catch {\n db.logger.debug(\n `Metadata for morph type \"${morphType}\" in table \"${joinTableName}\" not found`\n );\n return true; // Return true to delete if metadata is missing\n }\n })();\n\n if (deleteComponentType) {\n db.logger.debug(\n `Removing invalid morph type \"${morphType}\" from table \"${joinTableName}\".`\n );\n try {\n await db.connection(joinTableName).where(pivot, morphType).del();\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n db.logger.error(\n `Failed to remove invalid morph type \"${morphType}\" from table \"${joinTableName}\": ${errorMessage}`\n );\n }\n }\n }\n }\n }\n};\n"],"names":["isMorphRelationWithPivot","attribute","pivot","type","joinTable","pivotColumns","includes","filterMorphRelationalAttributes","attributes","Object","values","filter","removeOrphanMorphType","db","logger","debug","JSON","stringify","mdValues","metadata","model","joinTableName","name","morphTypes","connection","distinct","pluck","morphType","deleteComponentType","get","where","del","error","errorMessage","Error","message","String"],"mappings":"AAOA,MAAMA,wBAAAA,GAA2B,CAC/BC,SACAC,EAAAA,KAAAA,GAAAA;IAEA,OACED,SAAAA,CAAUE,IAAI,KAAK,UAAA,IACnB,cAAcF,SACd,IAAA,WAAA,IAAeA,SACf,IAAA,MAAA,IAAUA,SAAUG,CAAAA,SAAS,IAC7B,cAAkBH,IAAAA,SAAAA,CAAUG,SAAS,IACrCH,SAAAA,CAAUG,SAAS,CAACC,YAAY,CAACC,QAAQ,CAACJ,KAAAA,CAAAA;AAE9C,CAAA;AAEA,MAAMK,+BAAAA,GAAkC,CACtCC,UACAN,EAAAA,KAAAA,GAAAA;IAEA,OAAOO,MAAAA,CAAOC,MAAM,CAACF,UAAAA,CAAAA,CAAYG,MAAM,CAAC,CAACV,SACvCD,GAAAA,wBAAAA,CAAyBC,SAAWC,EAAAA,KAAAA,CAAAA,CAAAA;AAExC,CAAA;AAEA;;;;;;;;;;;AAWC,IACYU,MAAAA,qBAAAA,GAAwB,OACnCC,EACA,EAAA,EAAEX,KAAK,EAAgC,GAAA;IAEvCW,EAAGC,CAAAA,MAAM,CAACC,KAAK,CAAC,CAAC,8BAA8B,EAAEC,IAAKC,CAAAA,SAAS,CAACf,KAAAA,CAAAA,CAAO,CAAC,CAAA;AAExE,IAAA,MAAMgB,QAAWL,GAAAA,EAAAA,CAAGM,QAAQ,CAACT,MAAM,EAAA;IACnC,KAAK,MAAMU,SAASF,QAAU,CAAA;AAC5B,QAAA,MAAMV,aAAaD,+BAAgCa,CAAAA,KAAAA,CAAMZ,UAAU,IAAI,EAAIN,EAAAA,KAAAA,CAAAA;QAE3E,KAAK,MAAMD,aAAaO,UAAY,CAAA;AAClC,YAAA,MAAMa,aAAgBpB,GAAAA,SAAAA,CAAUG,SAAS,CAACkB,IAAI;;YAG9C,MAAMC,UAAAA,GAAa,MAAMV,EAAAA,CAAGW,UAAU,CAACH,eAAeI,QAAQ,CAACvB,KAAOwB,CAAAA,CAAAA,KAAK,CAACxB,KAAAA,CAAAA;YAE5E,KAAK,MAAMyB,aAAaJ,UAAY,CAAA;;gBAElC,MAAMK,mBAAAA,GAAsB,MAAO,CAAA,UAAA;oBACjC,IAAI;AACF,wBAAA,OAAO,CAACf,EAAGM,CAAAA,QAAQ,CAACU,GAAG,CAACF;AAC1B,qBAAA,CAAE,OAAM;AACNd,wBAAAA,EAAAA,CAAGC,MAAM,CAACC,KAAK,CACb,CAAC,yBAAyB,EAAEY,SAAAA,CAAU,YAAY,EAAEN,aAAc,CAAA,WAAW,CAAC,CAAA;AAEhF,wBAAA,OAAO;AACT;iBACF,GAAA;AAEA,gBAAA,IAAIO,mBAAqB,EAAA;AACvBf,oBAAAA,EAAAA,CAAGC,MAAM,CAACC,KAAK,CACb,CAAC,6BAA6B,EAAEY,SAAAA,CAAU,cAAc,EAAEN,aAAc,CAAA,EAAE,CAAC,CAAA;oBAE7E,IAAI;wBACF,MAAMR,EAAAA,CAAGW,UAAU,CAACH,aAAAA,CAAAA,CAAeS,KAAK,CAAC5B,KAAAA,EAAOyB,WAAWI,GAAG,EAAA;AAChE,qBAAA,CAAE,OAAOC,KAAO,EAAA;AACd,wBAAA,MAAMC,eAAeD,KAAiBE,YAAAA,KAAAA,GAAQF,KAAMG,CAAAA,OAAO,GAAGC,MAAOJ,CAAAA,KAAAA,CAAAA;AACrEnB,wBAAAA,EAAAA,CAAGC,MAAM,CAACkB,KAAK,CACb,CAAC,qCAAqC,EAAEL,SAAU,CAAA,cAAc,EAAEN,aAAAA,CAAc,GAAG,EAAEY,aAAa,CAAC,CAAA;AAEvG;AACF;AACF;AACF;AACF;AACF;;;;"}
1
+ {"version":3,"file":"remove-orphan-morph-types.mjs","sources":["../../../src/repairs/operations/remove-orphan-morph-types.ts"],"sourcesContent":["import type { Database } from '../..';\nimport type { Attribute, MorphRelationalAttribute } from '../../types';\n\nexport interface RemoveOrphanMorphTypeOptions {\n pivot: string;\n}\n\nconst isMorphRelationWithPivot = (\n attribute: Attribute,\n pivot: string\n): attribute is MorphRelationalAttribute => {\n return (\n attribute.type === 'relation' &&\n 'relation' in attribute &&\n 'joinTable' in attribute &&\n 'name' in attribute.joinTable &&\n 'pivotColumns' in attribute.joinTable &&\n attribute.joinTable.pivotColumns.includes(pivot)\n );\n};\n\nconst filterMorphRelationalAttributes = (\n attributes: Record<string, Attribute>,\n pivot: string\n): MorphRelationalAttribute[] => {\n return Object.values(attributes).filter((attribute): attribute is MorphRelationalAttribute =>\n isMorphRelationWithPivot(attribute, pivot)\n );\n};\n\n/**\n * Removes morph relation data with invalid or non-existent morph type.\n *\n * This function iterates over the database metadata to identify morph relationships\n * (relations with a `joinTable` containing the specified pivot column) and removes\n * any entries in the relation's join table where the morph type is invalid.\n *\n * Note: This function does not check for orphaned IDs, only orphaned morph types.\n *\n * @param db - The database object containing metadata and a Knex connection.\n * @param options.pivot - The name of the column in the join table representing the morph type.\n */\nexport const removeOrphanMorphType = async (\n db: Database,\n { pivot }: RemoveOrphanMorphTypeOptions\n) => {\n db.logger.debug(`Removing orphaned morph type: ${JSON.stringify(pivot)}`);\n\n const mdValues = db.metadata.values();\n for (const model of mdValues) {\n const attributes = filterMorphRelationalAttributes(model.attributes || {}, pivot);\n\n for (const attribute of attributes) {\n const joinTableName = attribute.joinTable.name;\n\n // Query distinct morph types from the join table\n const morphTypes = await db.connection(joinTableName).distinct(pivot).pluck(pivot);\n\n for (const morphType of morphTypes) {\n // Check if metadata for the morph type exists\n const deleteComponentType = await (async () => {\n try {\n return !db.metadata.get(morphType); // If no metadata found, mark for deletion\n } catch {\n db.logger.debug(\n `Metadata for morph type \"${morphType}\" in table \"${joinTableName}\" not found`\n );\n return true; // Return true to delete if metadata is missing\n }\n })();\n\n if (deleteComponentType) {\n db.logger.debug(\n `Removing invalid morph type \"${morphType}\" from table \"${joinTableName}\".`\n );\n try {\n await db.connection(joinTableName).where(pivot, morphType).del();\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n db.logger.error(\n `Failed to remove invalid morph type \"${morphType}\" from table \"${joinTableName}\": ${errorMessage}`\n );\n }\n }\n }\n }\n }\n};\n"],"names":["isMorphRelationWithPivot","attribute","pivot","type","joinTable","pivotColumns","includes","filterMorphRelationalAttributes","attributes","Object","values","filter","removeOrphanMorphType","db","logger","debug","JSON","stringify","mdValues","metadata","model","joinTableName","name","morphTypes","connection","distinct","pluck","morphType","deleteComponentType","get","where","del","error","errorMessage","Error","message","String"],"mappings":"AAOA,MAAMA,wBAAAA,GAA2B,CAC/BC,SACAC,EAAAA,KAAAA,GAAAA;IAEA,OACED,SAAAA,CAAUE,IAAI,KAAK,UAAA,IACnB,cAAcF,SACd,IAAA,WAAA,IAAeA,SACf,IAAA,MAAA,IAAUA,SAAUG,CAAAA,SAAS,IAC7B,cAAkBH,IAAAA,SAAAA,CAAUG,SAAS,IACrCH,SAAAA,CAAUG,SAAS,CAACC,YAAY,CAACC,QAAQ,CAACJ,KAAAA,CAAAA;AAE9C,CAAA;AAEA,MAAMK,+BAAAA,GAAkC,CACtCC,UACAN,EAAAA,KAAAA,GAAAA;IAEA,OAAOO,MAAAA,CAAOC,MAAM,CAACF,UAAAA,CAAAA,CAAYG,MAAM,CAAC,CAACV,SACvCD,GAAAA,wBAAAA,CAAyBC,SAAWC,EAAAA,KAAAA,CAAAA,CAAAA;AAExC,CAAA;AAEA;;;;;;;;;;;AAWC,IACYU,MAAAA,qBAAAA,GAAwB,OACnCC,EACA,EAAA,EAAEX,KAAK,EAAgC,GAAA;IAEvCW,EAAGC,CAAAA,MAAM,CAACC,KAAK,CAAC,CAAC,8BAA8B,EAAEC,IAAAA,CAAKC,SAAS,CAACf,KAAQ,CAAA,CAAA,CAAA,CAAA;AAExE,IAAA,MAAMgB,QAAWL,GAAAA,EAAAA,CAAGM,QAAQ,CAACT,MAAM,EAAA;IACnC,KAAK,MAAMU,SAASF,QAAU,CAAA;AAC5B,QAAA,MAAMV,aAAaD,+BAAgCa,CAAAA,KAAAA,CAAMZ,UAAU,IAAI,EAAIN,EAAAA,KAAAA,CAAAA;QAE3E,KAAK,MAAMD,aAAaO,UAAY,CAAA;AAClC,YAAA,MAAMa,aAAgBpB,GAAAA,SAAAA,CAAUG,SAAS,CAACkB,IAAI;;YAG9C,MAAMC,UAAAA,GAAa,MAAMV,EAAAA,CAAGW,UAAU,CAACH,eAAeI,QAAQ,CAACvB,KAAOwB,CAAAA,CAAAA,KAAK,CAACxB,KAAAA,CAAAA;YAE5E,KAAK,MAAMyB,aAAaJ,UAAY,CAAA;;gBAElC,MAAMK,mBAAAA,GAAsB,MAAO,CAAA,UAAA;oBACjC,IAAI;AACF,wBAAA,OAAO,CAACf,EAAGM,CAAAA,QAAQ,CAACU,GAAG,CAACF;AAC1B,qBAAA,CAAE,OAAM;AACNd,wBAAAA,EAAAA,CAAGC,MAAM,CAACC,KAAK,CACb,CAAC,yBAAyB,EAAEY,SAAAA,CAAU,YAAY,EAAEN,aAAc,CAAA,WAAW,CAAC,CAAA;AAEhF,wBAAA,OAAO;AACT;iBACF,GAAA;AAEA,gBAAA,IAAIO,mBAAqB,EAAA;AACvBf,oBAAAA,EAAAA,CAAGC,MAAM,CAACC,KAAK,CACb,CAAC,6BAA6B,EAAEY,SAAAA,CAAU,cAAc,EAAEN,aAAc,CAAA,EAAE,CAAC,CAAA;oBAE7E,IAAI;wBACF,MAAMR,EAAAA,CAAGW,UAAU,CAACH,aAAAA,CAAAA,CAAeS,KAAK,CAAC5B,KAAAA,EAAOyB,WAAWI,GAAG,EAAA;AAChE,qBAAA,CAAE,OAAOC,KAAO,EAAA;AACd,wBAAA,MAAMC,eAAeD,KAAiBE,YAAAA,KAAAA,GAAQF,KAAMG,CAAAA,OAAO,GAAGC,MAAOJ,CAAAA,KAAAA,CAAAA;AACrEnB,wBAAAA,EAAAA,CAAGC,MAAM,CAACkB,KAAK,CACb,CAAC,qCAAqC,EAAEL,SAAAA,CAAU,cAAc,EAAEN,aAAc,CAAA,GAAG,EAAEY,YAAc,CAAA,CAAA,CAAA;AAEvG;AACF;AACF;AACF;AACF;AACF;;;;"}