@strapi/database 5.48.1 → 5.50.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 (116) hide show
  1. package/dist/connection.d.ts.map +1 -1
  2. package/dist/connection.js +5 -1
  3. package/dist/connection.js.map +1 -1
  4. package/dist/dialects/index.d.ts.map +1 -1
  5. package/dist/dialects/postgresql/index.d.ts +0 -1
  6. package/dist/dialects/postgresql/index.d.ts.map +1 -1
  7. package/dist/dialects/sqlite/index.d.ts +0 -1
  8. package/dist/dialects/sqlite/index.d.ts.map +1 -1
  9. package/dist/dialects/sqlite/index.js +8 -3
  10. package/dist/dialects/sqlite/index.js.map +1 -1
  11. package/dist/entity-manager/entity-repository.d.ts.map +1 -1
  12. package/dist/entity-manager/index.d.ts.map +1 -1
  13. package/dist/entity-manager/morph-relations.d.ts +0 -1
  14. package/dist/entity-manager/morph-relations.d.ts.map +1 -1
  15. package/dist/entity-manager/regular-relations.d.ts +1 -7
  16. package/dist/entity-manager/regular-relations.d.ts.map +1 -1
  17. package/dist/entity-manager/relations-orderer.d.ts +3 -3
  18. package/dist/entity-manager/relations-orderer.d.ts.map +1 -1
  19. package/dist/entity-manager/relations-orderer.js +5 -1
  20. package/dist/entity-manager/relations-orderer.js.map +1 -1
  21. package/dist/fields/datetime.js +3 -2
  22. package/dist/fields/datetime.js.map +1 -1
  23. package/dist/fields/index.d.ts.map +1 -1
  24. package/dist/fields/index.js +5 -1
  25. package/dist/fields/index.js.map +1 -1
  26. package/dist/fields/shared/parsers.d.ts.map +1 -1
  27. package/dist/fields/shared/parsers.js +3 -2
  28. package/dist/fields/shared/parsers.js.map +1 -1
  29. package/dist/fields/timestamp.js +3 -2
  30. package/dist/fields/timestamp.js.map +1 -1
  31. package/dist/index.d.ts +2 -1
  32. package/dist/index.d.ts.map +1 -1
  33. package/dist/index.js +5 -1
  34. package/dist/index.js.map +1 -1
  35. package/dist/index.mjs.map +1 -1
  36. package/dist/lifecycles/index.d.ts.map +1 -1
  37. package/dist/lifecycles/subscribers/index.d.ts +1 -1
  38. package/dist/lifecycles/subscribers/index.d.ts.map +1 -1
  39. package/dist/lifecycles/subscribers/timestamps.js +10 -6
  40. package/dist/lifecycles/subscribers/timestamps.js.map +1 -1
  41. package/dist/metadata/index.d.ts.map +1 -1
  42. package/dist/metadata/metadata.d.ts +1 -1
  43. package/dist/metadata/metadata.d.ts.map +1 -1
  44. package/dist/metadata/relations.d.ts +2 -2
  45. package/dist/metadata/relations.d.ts.map +1 -1
  46. package/dist/metadata/relations.js +6 -2
  47. package/dist/metadata/relations.js.map +1 -1
  48. package/dist/migrations/common.d.ts.map +1 -1
  49. package/dist/migrations/index.d.ts.map +1 -1
  50. package/dist/migrations/internal-migrations/5.0.0-01-convert-identifiers-long-than-max-length.js +5 -1
  51. package/dist/migrations/internal-migrations/5.0.0-01-convert-identifiers-long-than-max-length.js.map +1 -1
  52. package/dist/migrations/internal.d.ts.map +1 -1
  53. package/dist/migrations/logger.d.ts.map +1 -1
  54. package/dist/migrations/storage.d.ts.map +1 -1
  55. package/dist/migrations/users.d.ts.map +1 -1
  56. package/dist/migrations/users.js +6 -2
  57. package/dist/migrations/users.js.map +1 -1
  58. package/dist/query/helpers/join.d.ts.map +1 -1
  59. package/dist/query/helpers/order-by.d.ts.map +1 -1
  60. package/dist/query/helpers/order-by.js +11 -7
  61. package/dist/query/helpers/order-by.js.map +1 -1
  62. package/dist/query/helpers/populate/apply.d.ts.map +1 -1
  63. package/dist/query/helpers/populate/apply.js +50 -47
  64. package/dist/query/helpers/populate/apply.js.map +1 -1
  65. package/dist/query/helpers/populate/apply.mjs +7 -8
  66. package/dist/query/helpers/populate/apply.mjs.map +1 -1
  67. package/dist/query/helpers/populate/process.d.ts.map +1 -1
  68. package/dist/query/helpers/populate/process.js +7 -3
  69. package/dist/query/helpers/populate/process.js.map +1 -1
  70. package/dist/query/helpers/search.d.ts.map +1 -1
  71. package/dist/query/helpers/search.js +5 -1
  72. package/dist/query/helpers/search.js.map +1 -1
  73. package/dist/query/helpers/streams/readable.d.ts +0 -1
  74. package/dist/query/helpers/streams/readable.d.ts.map +1 -1
  75. package/dist/query/helpers/transform.d.ts.map +1 -1
  76. package/dist/query/helpers/transform.js +10 -6
  77. package/dist/query/helpers/transform.js.map +1 -1
  78. package/dist/query/helpers/where.d.ts +1 -1
  79. package/dist/query/helpers/where.d.ts.map +1 -1
  80. package/dist/query/helpers/where.js.map +1 -1
  81. package/dist/query/helpers/where.mjs.map +1 -1
  82. package/dist/query/query-builder.d.ts.map +1 -1
  83. package/dist/query/query-builder.js +30 -26
  84. package/dist/query/query-builder.js.map +1 -1
  85. package/dist/repairs/index.d.ts.map +1 -1
  86. package/dist/repairs/operations/process-unidirectional-join-tables.d.ts.map +1 -1
  87. package/dist/repairs/operations/remove-orphan-morph-types.d.ts.map +1 -1
  88. package/dist/schema/builder.d.ts +1 -1
  89. package/dist/schema/builder.d.ts.map +1 -1
  90. package/dist/schema/builder.js +5 -1
  91. package/dist/schema/builder.js.map +1 -1
  92. package/dist/schema/diff.d.ts.map +1 -1
  93. package/dist/schema/diff.js +19 -15
  94. package/dist/schema/diff.js.map +1 -1
  95. package/dist/schema/index.d.ts.map +1 -1
  96. package/dist/schema/index.js +5 -1
  97. package/dist/schema/index.js.map +1 -1
  98. package/dist/schema/schema.d.ts.map +1 -1
  99. package/dist/schema/storage.d.ts.map +1 -1
  100. package/dist/schema/storage.js +5 -1
  101. package/dist/schema/storage.js.map +1 -1
  102. package/dist/transaction-context.d.ts.map +1 -1
  103. package/dist/utils/async-curry.d.ts.map +1 -1
  104. package/dist/utils/identifiers/hash.js +5 -1
  105. package/dist/utils/identifiers/hash.js.map +1 -1
  106. package/dist/utils/identifiers/index.d.ts.map +1 -1
  107. package/dist/utils/identifiers/index.js +5 -1
  108. package/dist/utils/identifiers/index.js.map +1 -1
  109. package/dist/utils/knex.d.ts.map +1 -1
  110. package/dist/utils/knex.js +6 -1
  111. package/dist/utils/knex.js.map +1 -1
  112. package/dist/utils/types.d.ts +1 -1
  113. package/dist/utils/types.d.ts.map +1 -1
  114. package/dist/validations/relations/bidirectional.d.ts.map +1 -1
  115. package/dist/validations/relations/index.d.ts.map +1 -1
  116. package/package.json +8 -4
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/index.ts"],"sourcesContent":["import type { Knex } from 'knex';\n\nimport path from 'node:path';\n\nimport { Dialect, getDialect } from './dialects';\nimport { createSchemaProvider, SchemaProvider } from './schema';\nimport { createMetadata, Metadata } from './metadata';\nimport { createEntityManager, EntityManager } from './entity-manager';\nimport { createMigrationsProvider, MigrationProvider, type Migration } from './migrations';\nimport { createLifecyclesProvider, LifecycleProvider } from './lifecycles';\nimport { createConnection } from './connection';\nimport * as errors from './errors';\nimport { Callback, transactionCtx, TransactionObject } from './transaction-context';\nimport { validateDatabase } from './validations';\nimport type { Model, JoinTable } from './types';\nimport type { Identifiers } from './utils/identifiers';\nimport { createRepairManager, type RepairManager } from './repairs';\n\nexport { isKnexQuery } from './utils/knex';\n\ninterface Settings {\n forceMigration?: boolean;\n runMigrations?: boolean;\n migrations: {\n dir: string;\n };\n [key: string]: unknown;\n}\n\nexport type Logger = Record<\n 'info' | 'warn' | 'error' | 'debug',\n (message: string | Record<string, unknown>) => void\n>;\n\nexport interface DatabaseConfig {\n connection: Knex.Config;\n settings: Settings;\n logger?: Logger;\n}\n\nconst afterCreate =\n (db: Database) =>\n (\n nativeConnection: unknown,\n done: (error: Error | null, nativeConnection: unknown) => Promise<void>\n ) => {\n // run initialize for it since commands such as postgres SET and sqlite PRAGMA are per-connection\n db.dialect.initialize(nativeConnection).then(() => {\n return done(null, nativeConnection);\n });\n };\n\nclass Database {\n connection: Knex;\n\n dialect: Dialect;\n\n config: DatabaseConfig;\n\n metadata: Metadata;\n\n schema: SchemaProvider;\n\n migrations: MigrationProvider;\n\n lifecycles: LifecycleProvider;\n\n entityManager: EntityManager;\n\n repair: RepairManager;\n\n logger: Logger;\n\n constructor(config: DatabaseConfig) {\n this.config = {\n ...config,\n settings: {\n forceMigration: true,\n runMigrations: true,\n ...(config.settings ?? {}),\n },\n };\n\n this.logger = config.logger ?? console;\n\n this.dialect = getDialect(this);\n\n let knexConfig: Knex.Config = this.config.connection;\n\n // for object connections, we can configure the dialect synchronously\n if (typeof this.config.connection.connection !== 'function') {\n this.dialect.configure();\n }\n // for connection functions, we wrap it so that we can modify it with dialect configure before it reaches knex\n else {\n this.logger.warn(\n 'Knex connection functions are currently experimental. Attempting to access the connection object before database initialization will result in errors.'\n );\n\n knexConfig = {\n ...this.config.connection,\n connection: async () => {\n // @ts-expect-error confirmed it was a function above\n const conn = await this.config.connection.connection();\n this.dialect.configure(conn);\n return conn;\n },\n };\n }\n\n this.metadata = createMetadata([]);\n\n this.connection = createConnection(knexConfig, {\n pool: { afterCreate: afterCreate(this) },\n });\n\n this.schema = createSchemaProvider(this);\n\n this.migrations = createMigrationsProvider(this);\n this.lifecycles = createLifecyclesProvider(this);\n\n this.entityManager = createEntityManager(this);\n\n this.repair = createRepairManager(this);\n }\n\n async init({ models }: { models: Model[] }) {\n if (typeof this.config.connection.connection === 'function') {\n /*\n * User code needs to be able to access `connection.connection` directly as if\n * it were always an object. For a connection function, that doesn't happen\n * until the pool is created, so we need to do that here\n *\n * TODO: In the next major version, we need to replace all internal code that\n * directly references `connection.connection` prior to init, and make a breaking\n * change that it cannot be relied on to exist before init so that we can call\n * this feature stable.\n */\n this.logger.debug('Forcing Knex to make real connection to db');\n\n // sqlite does not support connection pooling so acquireConnection doesn't work\n if (this.config.connection.client === 'sqlite') {\n await this.connection.raw('SELECT 1');\n } else {\n await this.connection.client.acquireConnection();\n }\n }\n\n this.metadata.loadModels(models);\n await validateDatabase(this);\n return this;\n }\n\n query(uid: string) {\n if (!this.metadata.has(uid)) {\n throw new Error(`Model ${uid} not found`);\n }\n\n return this.entityManager.getRepository(uid);\n }\n\n inTransaction() {\n return !!transactionCtx.get();\n }\n\n /**\n * Run work inside a DB transaction. On a fulfilled callback, the transaction\n * is committed; on rejection, it is rolled back. The callback receives Knex\n * `commit` and `rollback` helpers: if you call `rollback` and return without\n * throwing, the implementation avoids attempting a second `commit` on an\n * already-finalised transactor.\n */\n transaction(): Promise<TransactionObject>;\n transaction<TCallback extends Callback>(c: TCallback): Promise<ReturnType<TCallback>>;\n async transaction<TCallback extends Callback>(\n cb?: TCallback\n ): Promise<ReturnType<TCallback> | TransactionObject> {\n const notNestedTransaction = !transactionCtx.get();\n const trx = notNestedTransaction\n ? await this.connection.transaction()\n : (transactionCtx.get() as Knex.Transaction);\n\n async function commit() {\n if (notNestedTransaction) {\n await transactionCtx.commit(trx);\n }\n }\n\n async function rollback() {\n if (notNestedTransaction) {\n await transactionCtx.rollback(trx);\n }\n }\n\n if (!cb) {\n return { commit, rollback, get: () => trx };\n }\n\n return transactionCtx.run(trx, async () => {\n try {\n const callbackParams = {\n trx,\n commit,\n rollback,\n onCommit: transactionCtx.onCommit,\n onRollback: transactionCtx.onRollback,\n };\n const res = await cb(callbackParams);\n await commit();\n return res;\n } catch (error) {\n await rollback();\n throw error;\n }\n });\n }\n\n getSchemaName(): string | undefined {\n return this.connection.client.connectionSettings.schema;\n }\n\n getConnection(): Knex;\n getConnection(tableName?: string): Knex.QueryBuilder;\n getConnection(tableName?: string): Knex | Knex.QueryBuilder {\n const schema = this.getSchemaName();\n const connection = tableName ? this.connection(tableName) : this.connection;\n return schema ? connection.withSchema(schema) : connection;\n }\n\n // Returns basic info about the database connection\n getInfo() {\n const connectionSettings = this.connection?.client?.connectionSettings || {};\n const client = this.dialect?.client || '';\n\n let displayName = '';\n let schema;\n\n // For SQLite, get the relative filename\n if (client === 'sqlite') {\n const absolutePath = connectionSettings?.filename;\n if (absolutePath) {\n displayName = path.relative(process.cwd(), absolutePath);\n }\n }\n // For other dialects, get the database name\n else {\n displayName = connectionSettings?.database;\n schema = connectionSettings?.schema;\n }\n\n return {\n displayName,\n schema,\n client,\n };\n }\n\n getSchemaConnection(trx = this.connection) {\n const schema = this.getSchemaName();\n return schema ? trx.schema.withSchema(schema) : trx.schema;\n }\n\n queryBuilder(uid: string) {\n return this.entityManager.createQueryBuilder(uid);\n }\n\n async destroy() {\n await this.lifecycles.clear();\n await this.connection.destroy();\n }\n}\n\nexport { Database, errors };\nexport type { Model, JoinTable, Identifiers, Migration };\n"],"names":["afterCreate","db","nativeConnection","done","dialect","initialize","then","Database","init","models","config","connection","logger","debug","client","raw","acquireConnection","metadata","loadModels","validateDatabase","query","uid","has","Error","entityManager","getRepository","inTransaction","transactionCtx","get","transaction","cb","notNestedTransaction","trx","commit","rollback","run","callbackParams","onCommit","onRollback","res","error","getSchemaName","connectionSettings","schema","getConnection","tableName","withSchema","getInfo","displayName","absolutePath","filename","path","relative","process","cwd","database","getSchemaConnection","queryBuilder","createQueryBuilder","destroy","lifecycles","clear","settings","forceMigration","runMigrations","console","getDialect","knexConfig","configure","warn","conn","createMetadata","createConnection","pool","createSchemaProvider","migrations","createMigrationsProvider","createLifecyclesProvider","createEntityManager","repair","createRepairManager"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../src/index.ts"],"sourcesContent":["import type { Knex } from 'knex';\n\nimport path from 'node:path';\n\nimport { Dialect, getDialect } from './dialects';\nimport { createSchemaProvider, SchemaProvider } from './schema';\nimport { createMetadata, Metadata } from './metadata';\nimport { createEntityManager, EntityManager } from './entity-manager';\nimport { createMigrationsProvider, MigrationProvider, type Migration } from './migrations';\nimport { createLifecyclesProvider, LifecycleProvider } from './lifecycles';\nimport type { Event } from './lifecycles';\nimport { createConnection } from './connection';\nimport * as errors from './errors';\nimport { Callback, transactionCtx, TransactionObject } from './transaction-context';\nimport { validateDatabase } from './validations';\nimport type { Model, JoinTable } from './types';\nimport type { Identifiers } from './utils/identifiers';\nimport { createRepairManager, type RepairManager } from './repairs';\n\nexport { isKnexQuery } from './utils/knex';\n\ninterface Settings {\n forceMigration?: boolean;\n runMigrations?: boolean;\n migrations: {\n dir: string;\n };\n [key: string]: unknown;\n}\n\nexport type Logger = Record<\n 'info' | 'warn' | 'error' | 'debug',\n (message: string | Record<string, unknown>) => void\n>;\n\nexport interface DatabaseConfig {\n connection: Knex.Config;\n settings: Settings;\n logger?: Logger;\n}\n\nconst afterCreate =\n (db: Database) =>\n (\n nativeConnection: unknown,\n done: (error: Error | null, nativeConnection: unknown) => Promise<void>\n ) => {\n // run initialize for it since commands such as postgres SET and sqlite PRAGMA are per-connection\n db.dialect.initialize(nativeConnection).then(() => {\n return done(null, nativeConnection);\n });\n };\n\nclass Database {\n connection: Knex;\n\n dialect: Dialect;\n\n config: DatabaseConfig;\n\n metadata: Metadata;\n\n schema: SchemaProvider;\n\n migrations: MigrationProvider;\n\n lifecycles: LifecycleProvider;\n\n entityManager: EntityManager;\n\n repair: RepairManager;\n\n logger: Logger;\n\n constructor(config: DatabaseConfig) {\n this.config = {\n ...config,\n settings: {\n forceMigration: true,\n runMigrations: true,\n ...(config.settings ?? {}),\n },\n };\n\n this.logger = config.logger ?? console;\n\n this.dialect = getDialect(this);\n\n let knexConfig: Knex.Config = this.config.connection;\n\n // for object connections, we can configure the dialect synchronously\n if (typeof this.config.connection.connection !== 'function') {\n this.dialect.configure();\n }\n // for connection functions, we wrap it so that we can modify it with dialect configure before it reaches knex\n else {\n this.logger.warn(\n 'Knex connection functions are currently experimental. Attempting to access the connection object before database initialization will result in errors.'\n );\n\n knexConfig = {\n ...this.config.connection,\n connection: async () => {\n // @ts-expect-error confirmed it was a function above\n const conn = await this.config.connection.connection();\n this.dialect.configure(conn);\n return conn;\n },\n };\n }\n\n this.metadata = createMetadata([]);\n\n this.connection = createConnection(knexConfig, {\n pool: { afterCreate: afterCreate(this) },\n });\n\n this.schema = createSchemaProvider(this);\n\n this.migrations = createMigrationsProvider(this);\n this.lifecycles = createLifecyclesProvider(this);\n\n this.entityManager = createEntityManager(this);\n\n this.repair = createRepairManager(this);\n }\n\n async init({ models }: { models: Model[] }) {\n if (typeof this.config.connection.connection === 'function') {\n /*\n * User code needs to be able to access `connection.connection` directly as if\n * it were always an object. For a connection function, that doesn't happen\n * until the pool is created, so we need to do that here\n *\n * TODO: In the next major version, we need to replace all internal code that\n * directly references `connection.connection` prior to init, and make a breaking\n * change that it cannot be relied on to exist before init so that we can call\n * this feature stable.\n */\n this.logger.debug('Forcing Knex to make real connection to db');\n\n // sqlite does not support connection pooling so acquireConnection doesn't work\n if (this.config.connection.client === 'sqlite') {\n await this.connection.raw('SELECT 1');\n } else {\n await this.connection.client.acquireConnection();\n }\n }\n\n this.metadata.loadModels(models);\n await validateDatabase(this);\n return this;\n }\n\n query(uid: string) {\n if (!this.metadata.has(uid)) {\n throw new Error(`Model ${uid} not found`);\n }\n\n return this.entityManager.getRepository(uid);\n }\n\n inTransaction() {\n return !!transactionCtx.get();\n }\n\n /**\n * Run work inside a DB transaction. On a fulfilled callback, the transaction\n * is committed; on rejection, it is rolled back. The callback receives Knex\n * `commit` and `rollback` helpers: if you call `rollback` and return without\n * throwing, the implementation avoids attempting a second `commit` on an\n * already-finalised transactor.\n */\n transaction(): Promise<TransactionObject>;\n transaction<TCallback extends Callback>(c: TCallback): Promise<ReturnType<TCallback>>;\n async transaction<TCallback extends Callback>(\n cb?: TCallback\n ): Promise<ReturnType<TCallback> | TransactionObject> {\n const notNestedTransaction = !transactionCtx.get();\n const trx = notNestedTransaction\n ? await this.connection.transaction()\n : (transactionCtx.get() as Knex.Transaction);\n\n async function commit() {\n if (notNestedTransaction) {\n await transactionCtx.commit(trx);\n }\n }\n\n async function rollback() {\n if (notNestedTransaction) {\n await transactionCtx.rollback(trx);\n }\n }\n\n if (!cb) {\n return { commit, rollback, get: () => trx };\n }\n\n return transactionCtx.run(trx, async () => {\n try {\n const callbackParams = {\n trx,\n commit,\n rollback,\n onCommit: transactionCtx.onCommit,\n onRollback: transactionCtx.onRollback,\n };\n const res = await cb(callbackParams);\n await commit();\n return res;\n } catch (error) {\n await rollback();\n throw error;\n }\n });\n }\n\n getSchemaName(): string | undefined {\n return this.connection.client.connectionSettings.schema;\n }\n\n getConnection(): Knex;\n getConnection(tableName?: string): Knex.QueryBuilder;\n getConnection(tableName?: string): Knex | Knex.QueryBuilder {\n const schema = this.getSchemaName();\n const connection = tableName ? this.connection(tableName) : this.connection;\n return schema ? connection.withSchema(schema) : connection;\n }\n\n // Returns basic info about the database connection\n getInfo() {\n const connectionSettings = this.connection?.client?.connectionSettings || {};\n const client = this.dialect?.client || '';\n\n let displayName = '';\n let schema;\n\n // For SQLite, get the relative filename\n if (client === 'sqlite') {\n const absolutePath = connectionSettings?.filename;\n if (absolutePath) {\n displayName = path.relative(process.cwd(), absolutePath);\n }\n }\n // For other dialects, get the database name\n else {\n displayName = connectionSettings?.database;\n schema = connectionSettings?.schema;\n }\n\n return {\n displayName,\n schema,\n client,\n };\n }\n\n getSchemaConnection(trx = this.connection) {\n const schema = this.getSchemaName();\n return schema ? trx.schema.withSchema(schema) : trx.schema;\n }\n\n queryBuilder(uid: string) {\n return this.entityManager.createQueryBuilder(uid);\n }\n\n async destroy() {\n await this.lifecycles.clear();\n await this.connection.destroy();\n }\n}\n\nexport { Database, errors };\nexport type { Model, JoinTable, Identifiers, Migration, Event };\n"],"names":["afterCreate","db","nativeConnection","done","dialect","initialize","then","Database","init","models","config","connection","logger","debug","client","raw","acquireConnection","metadata","loadModels","validateDatabase","query","uid","has","Error","entityManager","getRepository","inTransaction","transactionCtx","get","transaction","cb","notNestedTransaction","trx","commit","rollback","run","callbackParams","onCommit","onRollback","res","error","getSchemaName","connectionSettings","schema","getConnection","tableName","withSchema","getInfo","displayName","absolutePath","filename","path","relative","process","cwd","database","getSchemaConnection","queryBuilder","createQueryBuilder","destroy","lifecycles","clear","settings","forceMigration","runMigrations","console","getDialect","knexConfig","configure","warn","conn","createMetadata","createConnection","pool","createSchemaProvider","migrations","createMigrationsProvider","createLifecyclesProvider","createEntityManager","repair","createRepairManager"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../src/index.ts"],"sourcesContent":["import type { Knex } from 'knex';\n\nimport path from 'node:path';\n\nimport { Dialect, getDialect } from './dialects';\nimport { createSchemaProvider, SchemaProvider } from './schema';\nimport { createMetadata, Metadata } from './metadata';\nimport { createEntityManager, EntityManager } from './entity-manager';\nimport { createMigrationsProvider, MigrationProvider, type Migration } from './migrations';\nimport { createLifecyclesProvider, LifecycleProvider } from './lifecycles';\nimport { createConnection } from './connection';\nimport * as errors from './errors';\nimport { Callback, transactionCtx, TransactionObject } from './transaction-context';\nimport { validateDatabase } from './validations';\nimport type { Model, JoinTable } from './types';\nimport type { Identifiers } from './utils/identifiers';\nimport { createRepairManager, type RepairManager } from './repairs';\n\nexport { isKnexQuery } from './utils/knex';\n\ninterface Settings {\n forceMigration?: boolean;\n runMigrations?: boolean;\n migrations: {\n dir: string;\n };\n [key: string]: unknown;\n}\n\nexport type Logger = Record<\n 'info' | 'warn' | 'error' | 'debug',\n (message: string | Record<string, unknown>) => void\n>;\n\nexport interface DatabaseConfig {\n connection: Knex.Config;\n settings: Settings;\n logger?: Logger;\n}\n\nconst afterCreate =\n (db: Database) =>\n (\n nativeConnection: unknown,\n done: (error: Error | null, nativeConnection: unknown) => Promise<void>\n ) => {\n // run initialize for it since commands such as postgres SET and sqlite PRAGMA are per-connection\n db.dialect.initialize(nativeConnection).then(() => {\n return done(null, nativeConnection);\n });\n };\n\nclass Database {\n connection: Knex;\n\n dialect: Dialect;\n\n config: DatabaseConfig;\n\n metadata: Metadata;\n\n schema: SchemaProvider;\n\n migrations: MigrationProvider;\n\n lifecycles: LifecycleProvider;\n\n entityManager: EntityManager;\n\n repair: RepairManager;\n\n logger: Logger;\n\n constructor(config: DatabaseConfig) {\n this.config = {\n ...config,\n settings: {\n forceMigration: true,\n runMigrations: true,\n ...(config.settings ?? {}),\n },\n };\n\n this.logger = config.logger ?? console;\n\n this.dialect = getDialect(this);\n\n let knexConfig: Knex.Config = this.config.connection;\n\n // for object connections, we can configure the dialect synchronously\n if (typeof this.config.connection.connection !== 'function') {\n this.dialect.configure();\n }\n // for connection functions, we wrap it so that we can modify it with dialect configure before it reaches knex\n else {\n this.logger.warn(\n 'Knex connection functions are currently experimental. Attempting to access the connection object before database initialization will result in errors.'\n );\n\n knexConfig = {\n ...this.config.connection,\n connection: async () => {\n // @ts-expect-error confirmed it was a function above\n const conn = await this.config.connection.connection();\n this.dialect.configure(conn);\n return conn;\n },\n };\n }\n\n this.metadata = createMetadata([]);\n\n this.connection = createConnection(knexConfig, {\n pool: { afterCreate: afterCreate(this) },\n });\n\n this.schema = createSchemaProvider(this);\n\n this.migrations = createMigrationsProvider(this);\n this.lifecycles = createLifecyclesProvider(this);\n\n this.entityManager = createEntityManager(this);\n\n this.repair = createRepairManager(this);\n }\n\n async init({ models }: { models: Model[] }) {\n if (typeof this.config.connection.connection === 'function') {\n /*\n * User code needs to be able to access `connection.connection` directly as if\n * it were always an object. For a connection function, that doesn't happen\n * until the pool is created, so we need to do that here\n *\n * TODO: In the next major version, we need to replace all internal code that\n * directly references `connection.connection` prior to init, and make a breaking\n * change that it cannot be relied on to exist before init so that we can call\n * this feature stable.\n */\n this.logger.debug('Forcing Knex to make real connection to db');\n\n // sqlite does not support connection pooling so acquireConnection doesn't work\n if (this.config.connection.client === 'sqlite') {\n await this.connection.raw('SELECT 1');\n } else {\n await this.connection.client.acquireConnection();\n }\n }\n\n this.metadata.loadModels(models);\n await validateDatabase(this);\n return this;\n }\n\n query(uid: string) {\n if (!this.metadata.has(uid)) {\n throw new Error(`Model ${uid} not found`);\n }\n\n return this.entityManager.getRepository(uid);\n }\n\n inTransaction() {\n return !!transactionCtx.get();\n }\n\n /**\n * Run work inside a DB transaction. On a fulfilled callback, the transaction\n * is committed; on rejection, it is rolled back. The callback receives Knex\n * `commit` and `rollback` helpers: if you call `rollback` and return without\n * throwing, the implementation avoids attempting a second `commit` on an\n * already-finalised transactor.\n */\n transaction(): Promise<TransactionObject>;\n transaction<TCallback extends Callback>(c: TCallback): Promise<ReturnType<TCallback>>;\n async transaction<TCallback extends Callback>(\n cb?: TCallback\n ): Promise<ReturnType<TCallback> | TransactionObject> {\n const notNestedTransaction = !transactionCtx.get();\n const trx = notNestedTransaction\n ? await this.connection.transaction()\n : (transactionCtx.get() as Knex.Transaction);\n\n async function commit() {\n if (notNestedTransaction) {\n await transactionCtx.commit(trx);\n }\n }\n\n async function rollback() {\n if (notNestedTransaction) {\n await transactionCtx.rollback(trx);\n }\n }\n\n if (!cb) {\n return { commit, rollback, get: () => trx };\n }\n\n return transactionCtx.run(trx, async () => {\n try {\n const callbackParams = {\n trx,\n commit,\n rollback,\n onCommit: transactionCtx.onCommit,\n onRollback: transactionCtx.onRollback,\n };\n const res = await cb(callbackParams);\n await commit();\n return res;\n } catch (error) {\n await rollback();\n throw error;\n }\n });\n }\n\n getSchemaName(): string | undefined {\n return this.connection.client.connectionSettings.schema;\n }\n\n getConnection(): Knex;\n getConnection(tableName?: string): Knex.QueryBuilder;\n getConnection(tableName?: string): Knex | Knex.QueryBuilder {\n const schema = this.getSchemaName();\n const connection = tableName ? this.connection(tableName) : this.connection;\n return schema ? connection.withSchema(schema) : connection;\n }\n\n // Returns basic info about the database connection\n getInfo() {\n const connectionSettings = this.connection?.client?.connectionSettings || {};\n const client = this.dialect?.client || '';\n\n let displayName = '';\n let schema;\n\n // For SQLite, get the relative filename\n if (client === 'sqlite') {\n const absolutePath = connectionSettings?.filename;\n if (absolutePath) {\n displayName = path.relative(process.cwd(), absolutePath);\n }\n }\n // For other dialects, get the database name\n else {\n displayName = connectionSettings?.database;\n schema = connectionSettings?.schema;\n }\n\n return {\n displayName,\n schema,\n client,\n };\n }\n\n getSchemaConnection(trx = this.connection) {\n const schema = this.getSchemaName();\n return schema ? trx.schema.withSchema(schema) : trx.schema;\n }\n\n queryBuilder(uid: string) {\n return this.entityManager.createQueryBuilder(uid);\n }\n\n async destroy() {\n await this.lifecycles.clear();\n await this.connection.destroy();\n }\n}\n\nexport { Database, errors };\nexport type { Model, JoinTable, Identifiers, Migration };\n"],"names":["afterCreate","db","nativeConnection","done","dialect","initialize","then","Database","init","models","config","connection","logger","debug","client","raw","acquireConnection","metadata","loadModels","validateDatabase","query","uid","has","Error","entityManager","getRepository","inTransaction","transactionCtx","get","transaction","cb","notNestedTransaction","trx","commit","rollback","run","callbackParams","onCommit","onRollback","res","error","getSchemaName","connectionSettings","schema","getConnection","tableName","withSchema","getInfo","displayName","absolutePath","filename","path","relative","process","cwd","database","getSchemaConnection","queryBuilder","createQueryBuilder","destroy","lifecycles","clear","settings","forceMigration","runMigrations","console","getDialect","knexConfig","configure","warn","conn","createMetadata","createConnection","pool","createSchemaProvider","migrations","createMigrationsProvider","createLifecyclesProvider","createEntityManager","repair","createRepairManager"],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","sources":["../src/index.ts"],"sourcesContent":["import type { Knex } from 'knex';\n\nimport path from 'node:path';\n\nimport { Dialect, getDialect } from './dialects';\nimport { createSchemaProvider, SchemaProvider } from './schema';\nimport { createMetadata, Metadata } from './metadata';\nimport { createEntityManager, EntityManager } from './entity-manager';\nimport { createMigrationsProvider, MigrationProvider, type Migration } from './migrations';\nimport { createLifecyclesProvider, LifecycleProvider } from './lifecycles';\nimport type { Event } from './lifecycles';\nimport { createConnection } from './connection';\nimport * as errors from './errors';\nimport { Callback, transactionCtx, TransactionObject } from './transaction-context';\nimport { validateDatabase } from './validations';\nimport type { Model, JoinTable } from './types';\nimport type { Identifiers } from './utils/identifiers';\nimport { createRepairManager, type RepairManager } from './repairs';\n\nexport { isKnexQuery } from './utils/knex';\n\ninterface Settings {\n forceMigration?: boolean;\n runMigrations?: boolean;\n migrations: {\n dir: string;\n };\n [key: string]: unknown;\n}\n\nexport type Logger = Record<\n 'info' | 'warn' | 'error' | 'debug',\n (message: string | Record<string, unknown>) => void\n>;\n\nexport interface DatabaseConfig {\n connection: Knex.Config;\n settings: Settings;\n logger?: Logger;\n}\n\nconst afterCreate =\n (db: Database) =>\n (\n nativeConnection: unknown,\n done: (error: Error | null, nativeConnection: unknown) => Promise<void>\n ) => {\n // run initialize for it since commands such as postgres SET and sqlite PRAGMA are per-connection\n db.dialect.initialize(nativeConnection).then(() => {\n return done(null, nativeConnection);\n });\n };\n\nclass Database {\n connection: Knex;\n\n dialect: Dialect;\n\n config: DatabaseConfig;\n\n metadata: Metadata;\n\n schema: SchemaProvider;\n\n migrations: MigrationProvider;\n\n lifecycles: LifecycleProvider;\n\n entityManager: EntityManager;\n\n repair: RepairManager;\n\n logger: Logger;\n\n constructor(config: DatabaseConfig) {\n this.config = {\n ...config,\n settings: {\n forceMigration: true,\n runMigrations: true,\n ...(config.settings ?? {}),\n },\n };\n\n this.logger = config.logger ?? console;\n\n this.dialect = getDialect(this);\n\n let knexConfig: Knex.Config = this.config.connection;\n\n // for object connections, we can configure the dialect synchronously\n if (typeof this.config.connection.connection !== 'function') {\n this.dialect.configure();\n }\n // for connection functions, we wrap it so that we can modify it with dialect configure before it reaches knex\n else {\n this.logger.warn(\n 'Knex connection functions are currently experimental. Attempting to access the connection object before database initialization will result in errors.'\n );\n\n knexConfig = {\n ...this.config.connection,\n connection: async () => {\n // @ts-expect-error confirmed it was a function above\n const conn = await this.config.connection.connection();\n this.dialect.configure(conn);\n return conn;\n },\n };\n }\n\n this.metadata = createMetadata([]);\n\n this.connection = createConnection(knexConfig, {\n pool: { afterCreate: afterCreate(this) },\n });\n\n this.schema = createSchemaProvider(this);\n\n this.migrations = createMigrationsProvider(this);\n this.lifecycles = createLifecyclesProvider(this);\n\n this.entityManager = createEntityManager(this);\n\n this.repair = createRepairManager(this);\n }\n\n async init({ models }: { models: Model[] }) {\n if (typeof this.config.connection.connection === 'function') {\n /*\n * User code needs to be able to access `connection.connection` directly as if\n * it were always an object. For a connection function, that doesn't happen\n * until the pool is created, so we need to do that here\n *\n * TODO: In the next major version, we need to replace all internal code that\n * directly references `connection.connection` prior to init, and make a breaking\n * change that it cannot be relied on to exist before init so that we can call\n * this feature stable.\n */\n this.logger.debug('Forcing Knex to make real connection to db');\n\n // sqlite does not support connection pooling so acquireConnection doesn't work\n if (this.config.connection.client === 'sqlite') {\n await this.connection.raw('SELECT 1');\n } else {\n await this.connection.client.acquireConnection();\n }\n }\n\n this.metadata.loadModels(models);\n await validateDatabase(this);\n return this;\n }\n\n query(uid: string) {\n if (!this.metadata.has(uid)) {\n throw new Error(`Model ${uid} not found`);\n }\n\n return this.entityManager.getRepository(uid);\n }\n\n inTransaction() {\n return !!transactionCtx.get();\n }\n\n /**\n * Run work inside a DB transaction. On a fulfilled callback, the transaction\n * is committed; on rejection, it is rolled back. The callback receives Knex\n * `commit` and `rollback` helpers: if you call `rollback` and return without\n * throwing, the implementation avoids attempting a second `commit` on an\n * already-finalised transactor.\n */\n transaction(): Promise<TransactionObject>;\n transaction<TCallback extends Callback>(c: TCallback): Promise<ReturnType<TCallback>>;\n async transaction<TCallback extends Callback>(\n cb?: TCallback\n ): Promise<ReturnType<TCallback> | TransactionObject> {\n const notNestedTransaction = !transactionCtx.get();\n const trx = notNestedTransaction\n ? await this.connection.transaction()\n : (transactionCtx.get() as Knex.Transaction);\n\n async function commit() {\n if (notNestedTransaction) {\n await transactionCtx.commit(trx);\n }\n }\n\n async function rollback() {\n if (notNestedTransaction) {\n await transactionCtx.rollback(trx);\n }\n }\n\n if (!cb) {\n return { commit, rollback, get: () => trx };\n }\n\n return transactionCtx.run(trx, async () => {\n try {\n const callbackParams = {\n trx,\n commit,\n rollback,\n onCommit: transactionCtx.onCommit,\n onRollback: transactionCtx.onRollback,\n };\n const res = await cb(callbackParams);\n await commit();\n return res;\n } catch (error) {\n await rollback();\n throw error;\n }\n });\n }\n\n getSchemaName(): string | undefined {\n return this.connection.client.connectionSettings.schema;\n }\n\n getConnection(): Knex;\n getConnection(tableName?: string): Knex.QueryBuilder;\n getConnection(tableName?: string): Knex | Knex.QueryBuilder {\n const schema = this.getSchemaName();\n const connection = tableName ? this.connection(tableName) : this.connection;\n return schema ? connection.withSchema(schema) : connection;\n }\n\n // Returns basic info about the database connection\n getInfo() {\n const connectionSettings = this.connection?.client?.connectionSettings || {};\n const client = this.dialect?.client || '';\n\n let displayName = '';\n let schema;\n\n // For SQLite, get the relative filename\n if (client === 'sqlite') {\n const absolutePath = connectionSettings?.filename;\n if (absolutePath) {\n displayName = path.relative(process.cwd(), absolutePath);\n }\n }\n // For other dialects, get the database name\n else {\n displayName = connectionSettings?.database;\n schema = connectionSettings?.schema;\n }\n\n return {\n displayName,\n schema,\n client,\n };\n }\n\n getSchemaConnection(trx = this.connection) {\n const schema = this.getSchemaName();\n return schema ? trx.schema.withSchema(schema) : trx.schema;\n }\n\n queryBuilder(uid: string) {\n return this.entityManager.createQueryBuilder(uid);\n }\n\n async destroy() {\n await this.lifecycles.clear();\n await this.connection.destroy();\n }\n}\n\nexport { Database, errors };\nexport type { Model, JoinTable, Identifiers, Migration, Event };\n"],"names":["afterCreate","db","nativeConnection","done","dialect","initialize","then","Database","init","models","config","connection","logger","debug","client","raw","acquireConnection","metadata","loadModels","validateDatabase","query","uid","has","Error","entityManager","getRepository","inTransaction","transactionCtx","get","transaction","cb","notNestedTransaction","trx","commit","rollback","run","callbackParams","onCommit","onRollback","res","error","getSchemaName","connectionSettings","schema","getConnection","tableName","withSchema","getInfo","displayName","absolutePath","filename","path","relative","process","cwd","database","getSchemaConnection","queryBuilder","createQueryBuilder","destroy","lifecycles","clear","settings","forceMigration","runMigrations","console","getDialect","knexConfig","configure","warn","conn","createMetadata","createConnection","pool","createSchemaProvider","migrations","createMigrationsProvider","createLifecyclesProvider","createEntityManager","repair","createRepairManager"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/lifecycles/index.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACjE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,IAAI,CAAC;AAEnC,mBAAmB,SAAS,CAAC;AAE7B,MAAM,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAC5C,MAAM,MAAM,MAAM,GAAG,GAAG,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;AAE5C,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,iBAAiB;IAChC,SAAS,CAAC,UAAU,EAAE,UAAU,GAAG,MAAM,IAAI,CAAC;IAC9C,KAAK,IAAI,IAAI,CAAC;IACd,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC3F,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,GAAG,KAAK,CAAC;IACtF,OAAO,IAAI,IAAI,CAAC;IAChB,MAAM,IAAI,IAAI,CAAC;CAChB;AAED,eAAO,MAAM,wBAAwB,OAAQ,QAAQ,KAAG,iBAgFvD,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/lifecycles/index.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACjE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,IAAI,CAAC;AAEnC,mBAAmB,SAAS,CAAC;AAE7B,MAAM,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAC5C,MAAM,MAAM,MAAM,GAAG,GAAG,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;AAE5C,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,iBAAiB;IAChC,SAAS,CAAC,UAAU,EAAE,UAAU,GAAG,MAAM,IAAI,CAAC;IAC9C,KAAK,IAAI,IAAI,CAAC;IACd,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC3F,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,GAAG,KAAK,CAAC;IACtF,OAAO,IAAI,IAAI,CAAC;IAChB,MAAM,IAAI,IAAI,CAAC;CAChB;AAED,eAAO,MAAM,wBAAwB,GAAI,IAAI,QAAQ,KAAG,iBAgFvD,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import type { Subscriber } from '../types';
2
- export declare const isValidSubscriber: (subscriber: Subscriber) => boolean;
2
+ export declare const isValidSubscriber: (subscriber: Subscriber) => subscriber is import("..").SubscriberFn | import("..").SubscriberMap;
3
3
  export { modelsLifecyclesSubscriber } from './models-lifecycles';
4
4
  export { timestampsLifecyclesSubscriber } from './timestamps';
5
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lifecycles/subscribers/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAE3C,eAAO,MAAM,iBAAiB,eAAgB,UAAU,YAIvD,CAAC;AAEF,OAAO,EAAE,0BAA0B,EAAE,MAAM,qBAAqB,CAAC;AACjE,OAAO,EAAE,8BAA8B,EAAE,MAAM,cAAc,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lifecycles/subscribers/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAE3C,eAAO,MAAM,iBAAiB,GAAI,YAAY,UAAU,yEAIvD,CAAC;AAEF,OAAO,EAAE,0BAA0B,EAAE,MAAM,qBAAqB,CAAC;AACjE,OAAO,EAAE,8BAA8B,EAAE,MAAM,cAAc,CAAC"}
@@ -2,6 +2,10 @@
2
2
 
3
3
  var _ = require('lodash');
4
4
 
5
+ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
6
+
7
+ var ___default = /*#__PURE__*/_interopDefault(_);
8
+
5
9
  // NOTE: we could add onCreate & onUpdate on field level to do this instead
6
10
  const timestampsLifecyclesSubscriber = {
7
11
  /**
@@ -9,7 +13,7 @@ const timestampsLifecyclesSubscriber = {
9
13
  */ beforeCreate (event) {
10
14
  const { data } = event.params;
11
15
  const now = new Date();
12
- _.defaults(data, {
16
+ ___default.default.defaults(data, {
13
17
  createdAt: now,
14
18
  updatedAt: now
15
19
  });
@@ -20,8 +24,8 @@ const timestampsLifecyclesSubscriber = {
20
24
  */ beforeCreateMany (event) {
21
25
  const { data } = event.params;
22
26
  const now = new Date();
23
- if (_.isArray(data)) {
24
- data.forEach((data)=>_.defaults(data, {
27
+ if (___default.default.isArray(data)) {
28
+ data.forEach((data)=>___default.default.defaults(data, {
25
29
  createdAt: now,
26
30
  updatedAt: now
27
31
  }));
@@ -33,7 +37,7 @@ const timestampsLifecyclesSubscriber = {
33
37
  */ beforeUpdate (event) {
34
38
  const { data } = event.params;
35
39
  const now = new Date();
36
- _.assign(data, {
40
+ ___default.default.assign(data, {
37
41
  updatedAt: now
38
42
  });
39
43
  },
@@ -43,8 +47,8 @@ const timestampsLifecyclesSubscriber = {
43
47
  */ beforeUpdateMany (event) {
44
48
  const { data } = event.params;
45
49
  const now = new Date();
46
- if (_.isArray(data)) {
47
- data.forEach((data)=>_.assign(data, {
50
+ if (___default.default.isArray(data)) {
51
+ data.forEach((data)=>___default.default.assign(data, {
48
52
  updatedAt: now
49
53
  }));
50
54
  }
@@ -1 +1 @@
1
- {"version":3,"file":"timestamps.js","sources":["../../../src/lifecycles/subscribers/timestamps.ts"],"sourcesContent":["import _ from 'lodash';\nimport type { Event, Subscriber } from '../types';\n\n// NOTE: we could add onCreate & onUpdate on field level to do this instead\nexport const timestampsLifecyclesSubscriber: Subscriber = {\n /**\n * Init createdAt & updatedAt before create\n */\n beforeCreate(event: Event) {\n const { data } = event.params;\n\n const now = new Date();\n _.defaults(data, { createdAt: now, updatedAt: now });\n },\n\n /**\n * Init createdAt & updatedAt before create\n * @param {Event} event\n */\n beforeCreateMany(event) {\n const { data } = event.params;\n\n const now = new Date();\n if (_.isArray(data)) {\n data.forEach((data) => _.defaults(data, { createdAt: now, updatedAt: now }));\n }\n },\n\n /**\n * Update updatedAt before update\n * @param {Event} event\n */\n beforeUpdate(event) {\n const { data } = event.params;\n\n const now = new Date();\n _.assign(data, { updatedAt: now });\n },\n\n /**\n * Update updatedAt before update\n * @param {Event} event\n */\n beforeUpdateMany(event) {\n const { data } = event.params;\n\n const now = new Date();\n if (_.isArray(data)) {\n data.forEach((data) => _.assign(data, { updatedAt: now }));\n }\n },\n};\n"],"names":["timestampsLifecyclesSubscriber","beforeCreate","event","data","params","now","Date","_","defaults","createdAt","updatedAt","beforeCreateMany","isArray","forEach","beforeUpdate","assign","beforeUpdateMany"],"mappings":";;;;AAGA;MACaA,8BAAAA,GAA6C;AACxD;;AAEC,MACDC,cAAaC,KAAY,EAAA;AACvB,QAAA,MAAM,EAAEC,IAAI,EAAE,GAAGD,MAAME,MAAM;AAE7B,QAAA,MAAMC,MAAM,IAAIC,IAAAA,EAAAA;QAChBC,CAAAA,CAAEC,QAAQ,CAACL,IAAAA,EAAM;YAAEM,SAAAA,EAAWJ,GAAAA;YAAKK,SAAAA,EAAWL;AAAI,SAAA,CAAA;AACpD,IAAA,CAAA;AAEA;;;AAGC,MACDM,kBAAiBT,KAAK,EAAA;AACpB,QAAA,MAAM,EAAEC,IAAI,EAAE,GAAGD,MAAME,MAAM;AAE7B,QAAA,MAAMC,MAAM,IAAIC,IAAAA,EAAAA;QAChB,IAAIC,CAAAA,CAAEK,OAAO,CAACT,IAAAA,CAAAA,EAAO;AACnBA,YAAAA,IAAAA,CAAKU,OAAO,CAAC,CAACV,OAASI,CAAAA,CAAEC,QAAQ,CAACL,IAAAA,EAAM;oBAAEM,SAAAA,EAAWJ,GAAAA;oBAAKK,SAAAA,EAAWL;AAAI,iBAAA,CAAA,CAAA;AAC3E,QAAA;AACF,IAAA,CAAA;AAEA;;;AAGC,MACDS,cAAaZ,KAAK,EAAA;AAChB,QAAA,MAAM,EAAEC,IAAI,EAAE,GAAGD,MAAME,MAAM;AAE7B,QAAA,MAAMC,MAAM,IAAIC,IAAAA,EAAAA;QAChBC,CAAAA,CAAEQ,MAAM,CAACZ,IAAAA,EAAM;YAAEO,SAAAA,EAAWL;AAAI,SAAA,CAAA;AAClC,IAAA,CAAA;AAEA;;;AAGC,MACDW,kBAAiBd,KAAK,EAAA;AACpB,QAAA,MAAM,EAAEC,IAAI,EAAE,GAAGD,MAAME,MAAM;AAE7B,QAAA,MAAMC,MAAM,IAAIC,IAAAA,EAAAA;QAChB,IAAIC,CAAAA,CAAEK,OAAO,CAACT,IAAAA,CAAAA,EAAO;AACnBA,YAAAA,IAAAA,CAAKU,OAAO,CAAC,CAACV,OAASI,CAAAA,CAAEQ,MAAM,CAACZ,IAAAA,EAAM;oBAAEO,SAAAA,EAAWL;AAAI,iBAAA,CAAA,CAAA;AACzD,QAAA;AACF,IAAA;AACF;;;;"}
1
+ {"version":3,"file":"timestamps.js","sources":["../../../src/lifecycles/subscribers/timestamps.ts"],"sourcesContent":["import _ from 'lodash';\nimport type { Event, Subscriber } from '../types';\n\n// NOTE: we could add onCreate & onUpdate on field level to do this instead\nexport const timestampsLifecyclesSubscriber: Subscriber = {\n /**\n * Init createdAt & updatedAt before create\n */\n beforeCreate(event: Event) {\n const { data } = event.params;\n\n const now = new Date();\n _.defaults(data, { createdAt: now, updatedAt: now });\n },\n\n /**\n * Init createdAt & updatedAt before create\n * @param {Event} event\n */\n beforeCreateMany(event) {\n const { data } = event.params;\n\n const now = new Date();\n if (_.isArray(data)) {\n data.forEach((data) => _.defaults(data, { createdAt: now, updatedAt: now }));\n }\n },\n\n /**\n * Update updatedAt before update\n * @param {Event} event\n */\n beforeUpdate(event) {\n const { data } = event.params;\n\n const now = new Date();\n _.assign(data, { updatedAt: now });\n },\n\n /**\n * Update updatedAt before update\n * @param {Event} event\n */\n beforeUpdateMany(event) {\n const { data } = event.params;\n\n const now = new Date();\n if (_.isArray(data)) {\n data.forEach((data) => _.assign(data, { updatedAt: now }));\n }\n },\n};\n"],"names":["timestampsLifecyclesSubscriber","beforeCreate","event","data","params","now","Date","_","defaults","createdAt","updatedAt","beforeCreateMany","isArray","forEach","beforeUpdate","assign","beforeUpdateMany"],"mappings":";;;;;;;;AAGA;MACaA,8BAAAA,GAA6C;AACxD;;AAEC,MACDC,cAAaC,KAAY,EAAA;AACvB,QAAA,MAAM,EAAEC,IAAI,EAAE,GAAGD,MAAME,MAAM;AAE7B,QAAA,MAAMC,MAAM,IAAIC,IAAAA,EAAAA;QAChBC,kBAAAA,CAAEC,QAAQ,CAACL,IAAAA,EAAM;YAAEM,SAAAA,EAAWJ,GAAAA;YAAKK,SAAAA,EAAWL;AAAI,SAAA,CAAA;AACpD,IAAA,CAAA;AAEA;;;AAGC,MACDM,kBAAiBT,KAAK,EAAA;AACpB,QAAA,MAAM,EAAEC,IAAI,EAAE,GAAGD,MAAME,MAAM;AAE7B,QAAA,MAAMC,MAAM,IAAIC,IAAAA,EAAAA;QAChB,IAAIC,kBAAAA,CAAEK,OAAO,CAACT,IAAAA,CAAAA,EAAO;AACnBA,YAAAA,IAAAA,CAAKU,OAAO,CAAC,CAACV,OAASI,kBAAAA,CAAEC,QAAQ,CAACL,IAAAA,EAAM;oBAAEM,SAAAA,EAAWJ,GAAAA;oBAAKK,SAAAA,EAAWL;AAAI,iBAAA,CAAA,CAAA;AAC3E,QAAA;AACF,IAAA,CAAA;AAEA;;;AAGC,MACDS,cAAaZ,KAAK,EAAA;AAChB,QAAA,MAAM,EAAEC,IAAI,EAAE,GAAGD,MAAME,MAAM;AAE7B,QAAA,MAAMC,MAAM,IAAIC,IAAAA,EAAAA;QAChBC,kBAAAA,CAAEQ,MAAM,CAACZ,IAAAA,EAAM;YAAEO,SAAAA,EAAWL;AAAI,SAAA,CAAA;AAClC,IAAA,CAAA;AAEA;;;AAGC,MACDW,kBAAiBd,KAAK,EAAA;AACpB,QAAA,MAAM,EAAEC,IAAI,EAAE,GAAGD,MAAME,MAAM;AAE7B,QAAA,MAAMC,MAAM,IAAIC,IAAAA,EAAAA;QAChB,IAAIC,kBAAAA,CAAEK,OAAO,CAACT,IAAAA,CAAAA,EAAO;AACnBA,YAAAA,IAAAA,CAAKU,OAAO,CAAC,CAACV,OAASI,kBAAAA,CAAEQ,MAAM,CAACZ,IAAAA,EAAM;oBAAEO,SAAAA,EAAWL;AAAI,iBAAA,CAAA,CAAA;AACzD,QAAA;AACF,IAAA;AACF;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/metadata/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,eAAe,EACf,UAAU,EACV,UAAU,EACV,cAAc,EACd,qBAAqB,EACrB,WAAW,EACZ,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAEtC,YAAY,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAC/B,OAAO,EACL,aAAa,EACb,eAAe,EACf,UAAU,EACV,UAAU,EACV,cAAc,EACd,qBAAqB,EACrB,WAAW,GACZ,CAAC;AAGF;;GAEG;AACH,eAAO,MAAM,cAAc,WAAY,KAAK,EAAE,KAAG,QAQhD,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/metadata/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,eAAe,EACf,UAAU,EACV,UAAU,EACV,cAAc,EACd,qBAAqB,EACrB,WAAW,EACZ,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAEtC,YAAY,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAC/B,OAAO,EACL,aAAa,EACb,eAAe,EACf,UAAU,EACV,UAAU,EACV,cAAc,EACd,qBAAqB,EACrB,WAAW,GACZ,CAAC;AAGF;;GAEG;AACH,eAAO,MAAM,cAAc,GAAI,QAAQ,KAAK,EAAE,KAAG,QAQhD,CAAC"}
@@ -8,7 +8,7 @@ export interface Meta extends Model {
8
8
  lifecycles: Partial<Record<Action, SubscriberFn>>;
9
9
  }
10
10
  export declare class Metadata extends Map<string, Meta> {
11
- get identifiers(): import("../utils/identifiers").Identifiers;
11
+ get identifiers(): import("..").Identifiers;
12
12
  get(key: string): Meta;
13
13
  add(meta: Meta): this;
14
14
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"metadata.d.ts","sourceRoot":"","sources":["../../src/metadata/metadata.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAa,KAAK,EAAE,MAAM,UAAU,CAAC;AACjD,OAAO,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAE1D,MAAM,WAAW,IAAK,SAAQ,KAAK;IACjC,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC1C,OAAO,EAAE,KAAK,EAAE,CAAC;IACjB,WAAW,EAAE,UAAU,EAAE,CAAC;IAC1B,UAAU,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC;CACnD;AAED,qBAAa,QAAS,SAAQ,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC;IAI7C,IAAI,WAAW,+CAEd;IAED,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAQtB,GAAG,CAAC,IAAI,EAAE,IAAI;IAId;;OAEG;IACH,QAAQ;IAYR,UAAU,CAAC,MAAM,EAAE,KAAK,EAAE;CAwD3B"}
1
+ {"version":3,"file":"metadata.d.ts","sourceRoot":"","sources":["../../src/metadata/metadata.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAa,KAAK,EAAE,MAAM,UAAU,CAAC;AACjD,OAAO,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAE1D,MAAM,WAAW,IAAK,SAAQ,KAAK;IACjC,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC1C,OAAO,EAAE,KAAK,EAAE,CAAC;IACjB,WAAW,EAAE,UAAU,EAAE,CAAC;IAC1B,UAAU,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC;CACnD;AAED,qBAAa,QAAS,SAAQ,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC;IAI7C,IAAI,WAAW,6BAEd;IAED,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAQtB,GAAG,CAAC,IAAI,EAAE,IAAI;IAId;;OAEG;IACH,QAAQ;IAYR,UAAU,CAAC,MAAM,EAAE,KAAK,EAAE;CAwD3B"}
@@ -6,8 +6,8 @@ export declare const isManyToAny: (attribute: RelationalAttribute) => attribute
6
6
  export declare const isAnyToOne: (attribute: RelationalAttribute) => attribute is Relation.OneToOne | Relation.ManyToOne;
7
7
  export declare const isAnyToMany: (attribute: RelationalAttribute) => attribute is Relation.OneToMany | Relation.ManyToMany;
8
8
  export declare const isBidirectional: (attribute: RelationalAttribute) => attribute is Relation.Bidirectional;
9
- export declare const hasOrderColumn: (attribute: RelationalAttribute) => boolean;
10
- export declare const hasInverseOrderColumn: (attribute: RelationalAttribute) => boolean;
9
+ export declare const hasOrderColumn: (attribute: RelationalAttribute) => attribute is Relation.OneToMany | Relation.ManyToMany;
10
+ export declare const hasInverseOrderColumn: (attribute: RelationalAttribute) => attribute is Relation.ManyToOne | Relation.ManyToMany;
11
11
  /**
12
12
  * Creates a relation metadata
13
13
  */
@@ -1 +1 @@
1
- {"version":3,"file":"relations.d.ts","sourceRoot":"","sources":["../../src/metadata/relations.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,KAAK,EAAE,mBAAmB,EAAE,QAAQ,EAAkB,MAAM,UAAU,CAAC;AA0B9E,eAAO,MAAM,aAAa,cAAe,mBAAmB,gCACyB,CAAC;AAEtF,eAAO,MAAM,UAAU,cACV,mBAAmB,wDAEwB,CAAC;AAEzD,eAAO,MAAM,WAAW,cACX,mBAAmB,0DAE0B,CAAC;AAE3D,eAAO,MAAM,UAAU,cACV,mBAAmB,wDAEwB,CAAC;AAEzD,eAAO,MAAM,WAAW,cACX,mBAAmB,0DAE0B,CAAC;AAE3D,eAAO,MAAM,eAAe,cACf,mBAAmB,wCAC4D,CAAC;AAU7F,eAAO,MAAM,cAAc,cAAe,mBAAmB,YAA2B,CAAC;AACzF,eAAO,MAAM,qBAAqB,cAAe,mBAAmB,YACd,CAAC;AAuiBvD;;GAEG;AACH,eAAO,MAAM,cAAc,kBACV,MAAM,aACV,mBAAmB,QACxB,IAAI,YACA,QAAQ,SAuBnB,CAAC"}
1
+ {"version":3,"file":"relations.d.ts","sourceRoot":"","sources":["../../src/metadata/relations.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,KAAK,EAAE,mBAAmB,EAAE,QAAQ,EAAkB,MAAM,UAAU,CAAC;AA0B9E,eAAO,MAAM,aAAa,GAAI,WAAW,mBAAmB,KAAG,SAAS,IAAI,QAAQ,CAAC,KACA,CAAC;AAEtF,eAAO,MAAM,UAAU,GACrB,WAAW,mBAAmB,KAC7B,SAAS,IAAI,QAAQ,CAAC,QAAQ,GAAG,QAAQ,CAAC,SACW,CAAC;AAEzD,eAAO,MAAM,WAAW,GACtB,WAAW,mBAAmB,KAC7B,SAAS,IAAI,QAAQ,CAAC,SAAS,GAAG,QAAQ,CAAC,UACY,CAAC;AAE3D,eAAO,MAAM,UAAU,GACrB,WAAW,mBAAmB,KAC7B,SAAS,IAAI,QAAQ,CAAC,QAAQ,GAAG,QAAQ,CAAC,SACW,CAAC;AAEzD,eAAO,MAAM,WAAW,GACtB,WAAW,mBAAmB,KAC7B,SAAS,IAAI,QAAQ,CAAC,SAAS,GAAG,QAAQ,CAAC,UACY,CAAC;AAE3D,eAAO,MAAM,eAAe,GAC1B,WAAW,mBAAmB,KAC7B,SAAS,IAAI,QAAQ,CAAC,aAAmE,CAAC;AAU7F,eAAO,MAAM,cAAc,GAAI,WAAW,mBAAmB,0DAA2B,CAAC;AACzF,eAAO,MAAM,qBAAqB,GAAI,WAAW,mBAAmB,0DACd,CAAC;AAuiBvD;;GAEG;AACH,eAAO,MAAM,cAAc,GACzB,eAAe,MAAM,EACrB,WAAW,mBAAmB,EAC9B,MAAM,IAAI,EACV,UAAU,QAAQ,SAuBnB,CAAC"}
@@ -3,6 +3,10 @@
3
3
  var _ = require('lodash/fp');
4
4
  var index = require('../utils/identifiers/index.js');
5
5
 
6
+ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
7
+
8
+ var ___default = /*#__PURE__*/_interopDefault(_);
9
+
6
10
  const ID = index.identifiers.ID_COLUMN;
7
11
  const ORDER = index.identifiers.ORDER_COLUMN;
8
12
  const FIELD = index.identifiers.FIELD_COLUMN;
@@ -269,7 +273,7 @@ const hasInverseOrderColumn = (attribute)=>isBidirectional(attribute) && isManyT
269
273
  if (!targetMeta) {
270
274
  throw new Error(`Morph target not found. Looking for ${attribute.target}`);
271
275
  }
272
- if (attribute.morphBy && !_.has(attribute.morphBy, targetMeta.attributes)) {
276
+ if (attribute.morphBy && !___default.default.has(attribute.morphBy, targetMeta.attributes)) {
273
277
  throw new Error(`Morph target attribute not found. Looking for ${attribute.morphBy}`);
274
278
  }
275
279
  };
@@ -280,7 +284,7 @@ const hasInverseOrderColumn = (attribute)=>isBidirectional(attribute) && isManyT
280
284
  if (!targetMeta) {
281
285
  throw new Error(`Morph target not found. Looking for ${attribute.target}`);
282
286
  }
283
- if (attribute.morphBy && !_.has(attribute.morphBy, targetMeta.attributes)) {
287
+ if (attribute.morphBy && !___default.default.has(attribute.morphBy, targetMeta.attributes)) {
284
288
  throw new Error(`Morph target attribute not found. Looking for ${attribute.morphBy}`);
285
289
  }
286
290
  };
@@ -1 +1 @@
1
- {"version":3,"file":"relations.js","sources":["../../src/metadata/relations.ts"],"sourcesContent":["import _, { snakeCase } from 'lodash/fp';\n\nimport { identifiers } from '../utils/identifiers';\nimport type { Meta, Metadata } from './metadata';\nimport type { RelationalAttribute, Relation, MorphJoinTable } from '../types';\n\ninterface JoinColumnOptions {\n attribute: (Relation.OneToOne | Relation.ManyToOne) & Relation.Owner;\n attributeName: string;\n meta: Meta;\n}\n\ninterface JoinTableOptions {\n attribute: RelationalAttribute & Relation.WithTarget & Relation.Bidirectional;\n attributeName: string;\n meta: Meta;\n}\n\nconst ID = identifiers.ID_COLUMN;\nconst ORDER = identifiers.ORDER_COLUMN;\nconst FIELD = identifiers.FIELD_COLUMN;\n\nconst hasInversedBy = (\n attr: RelationalAttribute\n): attr is RelationalAttribute & { inversedBy: boolean } => 'inversedBy' in attr;\nconst hasMappedBy = (\n attr: RelationalAttribute\n): attr is RelationalAttribute & { inversedBy: boolean } => 'mappedBy' in attr;\n\n// TODO: use strapi/utils relations for all of these\nexport const isPolymorphic = (attribute: RelationalAttribute): attribute is Relation.Morph =>\n ['morphOne', 'morphMany', 'morphToOne', 'morphToMany'].includes(attribute.relation);\n\nexport const isOneToAny = (\n attribute: RelationalAttribute\n): attribute is Relation.OneToOne | Relation.OneToMany =>\n ['oneToOne', 'oneToMany'].includes(attribute.relation);\n\nexport const isManyToAny = (\n attribute: RelationalAttribute\n): attribute is Relation.ManyToOne | Relation.ManyToMany =>\n ['manyToMany', 'manyToOne'].includes(attribute.relation);\n\nexport const isAnyToOne = (\n attribute: RelationalAttribute\n): attribute is Relation.OneToOne | Relation.ManyToOne =>\n ['oneToOne', 'manyToOne'].includes(attribute.relation);\n\nexport const isAnyToMany = (\n attribute: RelationalAttribute\n): attribute is Relation.OneToMany | Relation.ManyToMany =>\n ['oneToMany', 'manyToMany'].includes(attribute.relation);\n\nexport const isBidirectional = (\n attribute: RelationalAttribute\n): attribute is Relation.Bidirectional => hasInversedBy(attribute) || hasMappedBy(attribute);\n\nconst isOwner = (\n attribute: RelationalAttribute\n): attribute is RelationalAttribute & Relation.Owner =>\n !isBidirectional(attribute) || hasInversedBy(attribute);\n\nconst shouldUseJoinTable = (attribute: RelationalAttribute) =>\n !('useJoinTable' in attribute) || attribute.useJoinTable !== false;\n\nexport const hasOrderColumn = (attribute: RelationalAttribute) => isAnyToMany(attribute);\nexport const hasInverseOrderColumn = (attribute: RelationalAttribute) =>\n isBidirectional(attribute) && isManyToAny(attribute);\n\n/**\n * Creates a oneToOne relation metadata\n *\n * if owner then\n * if with join table then\n * create join table\n * else\n * create joinColumn\n * if bidirectional then\n * set inverse attribute joinCol or joinTable info correctly\n * else\n * this property must be set by the owner side\n * verify the owner side is valid // should be done before or at the same time ?\n */\nconst createOneToOne = (\n attributeName: string,\n attribute: Relation.OneToOne,\n meta: Meta,\n metadata: Metadata\n) => {\n if (isOwner(attribute)) {\n if (shouldUseJoinTable(attribute)) {\n createJoinTable(metadata, {\n attribute,\n attributeName,\n meta,\n });\n } else {\n createJoinColumn(metadata, {\n attribute,\n attributeName,\n meta,\n });\n }\n } else {\n // TODO: verify other side is valid\n }\n};\n\n/**\n * Creates a oneToMany relation metadata\n *\n * if unidirectional then\n * create join table\n * if bidirectional then\n * cannot be owning side\n * do nothing\n */\nconst createOneToMany = (\n attributeName: string,\n attribute: Relation.OneToMany,\n meta: Meta,\n metadata: Metadata\n) => {\n if (shouldUseJoinTable(attribute) && !isBidirectional(attribute)) {\n createJoinTable(metadata, {\n attribute,\n attributeName,\n meta,\n });\n } else if (isOwner(attribute)) {\n throw new Error('one side of a oneToMany cannot be the owner side in a bidirectional relation');\n }\n};\n\n/**\n * Creates a manyToOne relation metadata\n *\n * if unidirectional then\n * if with join table then\n * create join table\n * else\n * create join column\n * else\n * must be the owner side\n * if with join table then\n * create join table\n * else\n * create join column\n * set inverse attribute joinCol or joinTable info correctly\n */\nconst createManyToOne = (\n attributeName: string,\n attribute: Relation.ManyToOne,\n meta: Meta,\n metadata: Metadata\n) => {\n if (isBidirectional(attribute) && !isOwner(attribute)) {\n throw new Error('The many side of a manyToOne must be the owning side');\n }\n\n if (shouldUseJoinTable(attribute)) {\n createJoinTable(metadata, {\n attribute,\n attributeName,\n meta,\n });\n } else {\n createJoinColumn(metadata, {\n attribute,\n attributeName,\n meta,\n });\n }\n};\n\n/**\n * Creates a manyToMany relation metadata\n *\n * if unidirectional\n * create join table\n * else\n * if owner then\n * if with join table then\n * create join table\n * else\n * do nothing\n */\nconst createManyToMany = (\n attributeName: string,\n attribute: Relation.ManyToMany,\n meta: Meta,\n metadata: Metadata\n) => {\n if (shouldUseJoinTable(attribute) && (!isBidirectional(attribute) || isOwner(attribute))) {\n createJoinTable(metadata, {\n attribute,\n attributeName,\n meta,\n });\n }\n};\n\n/**\n * Creates a morphToOne relation metadata\n *\n * if with join table then\n * create join table\n * else\n * create join columnsa\n *\n * if bidirectionnal\n * set info in the traget\n */\nconst createMorphToOne = (attributeName: string, attribute: Relation.MorphToOne) => {\n const idColumnName = identifiers.getJoinColumnAttributeIdName('target');\n const typeColumnName = identifiers.getMorphColumnTypeName('target');\n\n Object.assign(attribute, {\n owner: true,\n morphColumn: attribute.morphColumn ?? {\n typeColumn: {\n name: typeColumnName,\n },\n idColumn: {\n name: idColumnName,\n referencedColumn: ID,\n },\n },\n });\n};\n\n/**\n * Creates a morphToMany relation metadata\n */\nconst createMorphToMany = (\n attributeName: string,\n attribute: Relation.MorphToMany,\n meta: Meta,\n metadata: Metadata\n) => {\n if ('joinTable' in attribute && attribute.joinTable && !attribute.joinTable.__internal__) {\n return;\n }\n\n const joinTableName = identifiers.getMorphTableName(meta.tableName, attributeName);\n const joinColumnName = identifiers.getMorphColumnJoinTableIdName(snakeCase(meta.singularName));\n const idColumnName = identifiers.getMorphColumnAttributeIdName(attributeName);\n const typeColumnName = identifiers.getMorphColumnTypeName(attributeName);\n\n const fkIndexName = identifiers.getFkIndexName(joinTableName);\n\n metadata.add({\n singularName: joinTableName,\n uid: joinTableName,\n tableName: joinTableName,\n attributes: {\n [ID]: {\n type: 'increments',\n },\n [joinColumnName]: {\n type: 'integer',\n column: {\n unsigned: true,\n },\n // This must be set explicitly so that it is used instead of shortening the attribute name, which is already shortened\n columnName: joinColumnName,\n },\n [idColumnName]: {\n type: 'integer',\n column: {\n unsigned: true,\n },\n },\n [typeColumnName]: {\n type: 'string',\n },\n [FIELD]: {\n type: 'string',\n },\n [ORDER]: {\n type: 'float',\n column: {\n unsigned: true,\n },\n },\n },\n indexes: [\n {\n name: fkIndexName,\n columns: [joinColumnName],\n },\n {\n name: identifiers.getOrderIndexName(joinTableName),\n columns: [ORDER],\n },\n {\n name: identifiers.getIdColumnIndexName(joinTableName),\n columns: [idColumnName],\n },\n ],\n foreignKeys: [\n {\n name: fkIndexName,\n columns: [joinColumnName],\n referencedColumns: [ID],\n referencedTable: meta.tableName,\n onDelete: 'CASCADE',\n },\n ],\n lifecycles: {},\n columnToAttribute: {},\n });\n\n const joinTable: MorphJoinTable = {\n __internal__: true,\n name: joinTableName,\n joinColumn: {\n name: joinColumnName,\n referencedColumn: ID,\n },\n morphColumn: {\n typeColumn: {\n name: typeColumnName,\n },\n idColumn: {\n name: idColumnName,\n referencedColumn: ID,\n },\n },\n orderBy: {\n order: 'asc' as const,\n },\n pivotColumns: [joinColumnName, typeColumnName, idColumnName],\n };\n\n attribute.joinTable = joinTable;\n};\n\n/**\n * Creates a morphOne relation metadata\n */\nconst createMorphOne = (\n attributeName: string,\n attribute: Relation.MorphOne,\n meta: Meta,\n metadata: Metadata\n) => {\n const targetMeta = metadata.get(attribute.target);\n\n if (!targetMeta) {\n throw new Error(`Morph target not found. Looking for ${attribute.target}`);\n }\n\n if (attribute.morphBy && !_.has(attribute.morphBy, targetMeta.attributes)) {\n throw new Error(`Morph target attribute not found. Looking for ${attribute.morphBy}`);\n }\n};\n\n/**\n * Creates a morphMany relation metadata\n */\nconst createMorphMany = (\n attributeName: string,\n attribute: Relation.MorphMany,\n meta: Meta,\n metadata: Metadata\n) => {\n const targetMeta = metadata.get(attribute.target);\n\n if (!targetMeta) {\n throw new Error(`Morph target not found. Looking for ${attribute.target}`);\n }\n\n if (attribute.morphBy && !_.has(attribute.morphBy, targetMeta.attributes)) {\n throw new Error(`Morph target attribute not found. Looking for ${attribute.morphBy}`);\n }\n};\n\n/**\n * Creates a join column info and add them to the attribute meta\n */\nconst createJoinColumn = (metadata: Metadata, { attribute, attributeName }: JoinColumnOptions) => {\n const targetMeta = metadata.get(attribute.target);\n\n if (!targetMeta) {\n throw new Error(`Unknown target ${attribute.target}`);\n }\n\n const joinColumnName = identifiers.getJoinColumnAttributeIdName(snakeCase(attributeName));\n const joinColumn = {\n name: joinColumnName,\n referencedColumn: ID,\n referencedTable: targetMeta.tableName,\n };\n\n if ('joinColumn' in attribute) {\n Object.assign(joinColumn, attribute.joinColumn);\n }\n\n Object.assign(attribute, { owner: true, joinColumn });\n\n if (isBidirectional(attribute)) {\n const inverseAttribute = targetMeta.attributes[attribute.inversedBy];\n\n Object.assign(inverseAttribute, {\n joinColumn: {\n name: joinColumn.referencedColumn,\n referencedColumn: joinColumnName,\n },\n });\n }\n};\n\n/**\n * Creates a join table and add it to the attribute meta\n */\nconst createJoinTable = (\n metadata: Metadata,\n { attributeName, attribute, meta }: JoinTableOptions\n) => {\n if (!shouldUseJoinTable(attribute)) {\n throw new Error('Attempted to create join table when useJoinTable is false');\n }\n\n const targetMeta = metadata.get(attribute.target);\n\n if (!targetMeta) {\n throw new Error(`Unknown target ${attribute.target}`);\n }\n\n // TODO: implement overwrite logic instead\n if ('joinTable' in attribute && attribute.joinTable && !attribute.joinTable.__internal__) {\n return;\n }\n\n const joinTableName = identifiers.getJoinTableName(\n snakeCase(meta.tableName),\n snakeCase(attributeName)\n );\n\n const joinColumnName = identifiers.getJoinColumnAttributeIdName(snakeCase(meta.singularName));\n\n let inverseJoinColumnName = identifiers.getJoinColumnAttributeIdName(\n snakeCase(targetMeta.singularName)\n );\n\n // if relation is self referencing\n if (joinColumnName === inverseJoinColumnName) {\n inverseJoinColumnName = identifiers.getInverseJoinColumnAttributeIdName(\n snakeCase(targetMeta.singularName)\n );\n }\n\n const orderColumnName = identifiers.getOrderColumnName(snakeCase(targetMeta.singularName));\n // TODO: should this plus the conditional below be rolled into one method?\n let inverseOrderColumnName = identifiers.getOrderColumnName(snakeCase(meta.singularName));\n\n // if relation is self referencing\n if (attribute.relation === 'manyToMany' && orderColumnName === inverseOrderColumnName) {\n inverseOrderColumnName = identifiers.getInverseOrderColumnName(snakeCase(meta.singularName));\n }\n\n const fkIndexName = identifiers.getFkIndexName(joinTableName);\n const invFkIndexName = identifiers.getInverseFkIndexName(joinTableName);\n\n const metadataSchema: Meta = {\n singularName: joinTableName,\n uid: joinTableName,\n tableName: joinTableName,\n attributes: {\n [ID]: {\n type: 'increments',\n },\n [joinColumnName]: {\n type: 'integer',\n column: {\n unsigned: true,\n },\n // This must be set explicitly so that it is used instead of shortening the attribute name, which is already shortened\n columnName: joinColumnName,\n },\n [inverseJoinColumnName]: {\n type: 'integer',\n column: {\n unsigned: true,\n },\n // This must be set explicitly so that it is used instead of shortening the attribute name, which is already shortened\n columnName: inverseJoinColumnName,\n },\n // TODO: add extra pivot attributes -> user should use an intermediate entity\n },\n indexes: [\n {\n name: fkIndexName,\n columns: [joinColumnName],\n },\n {\n name: invFkIndexName,\n columns: [inverseJoinColumnName],\n },\n {\n name: identifiers.getUniqueIndexName(joinTableName),\n columns: [joinColumnName, inverseJoinColumnName],\n type: 'unique',\n },\n ],\n foreignKeys: [\n {\n name: fkIndexName,\n columns: [joinColumnName],\n referencedColumns: [ID],\n referencedTable: meta.tableName,\n onDelete: 'CASCADE',\n },\n {\n name: invFkIndexName,\n columns: [inverseJoinColumnName],\n referencedColumns: [ID],\n referencedTable: targetMeta.tableName,\n onDelete: 'CASCADE',\n },\n ],\n lifecycles: {},\n columnToAttribute: {},\n };\n\n const joinTable = {\n __internal__: true,\n name: joinTableName,\n joinColumn: {\n name: joinColumnName,\n referencedColumn: ID,\n referencedTable: meta.tableName,\n },\n inverseJoinColumn: {\n name: inverseJoinColumnName,\n referencedColumn: ID,\n referencedTable: targetMeta.tableName,\n },\n pivotColumns: [joinColumnName, inverseJoinColumnName],\n } as any;\n\n // order\n if (isAnyToMany(attribute)) {\n metadataSchema.attributes[orderColumnName] = {\n type: 'float',\n column: {\n unsigned: true,\n defaultTo: null,\n },\n columnName: orderColumnName,\n };\n metadataSchema.indexes.push({\n name: identifiers.getOrderFkIndexName(joinTableName),\n columns: [orderColumnName],\n });\n joinTable.orderColumnName = orderColumnName;\n joinTable.orderBy = { [orderColumnName]: 'asc' };\n }\n\n // inv order\n if (isBidirectional(attribute) && isManyToAny(attribute)) {\n metadataSchema.attributes[inverseOrderColumnName] = {\n type: 'float',\n column: {\n unsigned: true,\n defaultTo: null,\n },\n columnName: inverseOrderColumnName,\n };\n\n metadataSchema.indexes.push({\n name: identifiers.getOrderInverseFkIndexName(joinTableName),\n columns: [inverseOrderColumnName],\n });\n\n joinTable.inverseOrderColumnName = inverseOrderColumnName;\n }\n\n metadata.add(metadataSchema);\n\n attribute.joinTable = joinTable;\n\n if (isBidirectional(attribute)) {\n const inverseAttribute = attribute.inversedBy\n ? (targetMeta.attributes[attribute.inversedBy] as Relation.Bidirectional)\n : null;\n\n if (!inverseAttribute) {\n throw new Error(\n `inversedBy attribute ${attribute.inversedBy} not found target ${targetMeta.uid}`\n );\n }\n\n if (inverseAttribute.type !== 'relation') {\n throw new Error(\n `inversedBy attribute ${attribute.inversedBy} targets non relational attribute in ${targetMeta.uid}`\n );\n }\n\n inverseAttribute.joinTable = {\n __internal__: true,\n name: joinTableName,\n joinColumn: joinTable.inverseJoinColumn,\n inverseJoinColumn: joinTable.joinColumn,\n pivotColumns: joinTable.pivotColumns,\n } as any;\n\n if (isManyToAny(attribute)) {\n inverseAttribute.joinTable.orderColumnName = inverseOrderColumnName;\n inverseAttribute.joinTable.orderBy = { [inverseOrderColumnName]: 'asc' };\n }\n if (isAnyToMany(attribute)) {\n inverseAttribute.joinTable.inverseOrderColumnName = orderColumnName;\n }\n }\n};\n\n/**\n * Creates a relation metadata\n */\nexport const createRelation = (\n attributeName: string,\n attribute: RelationalAttribute,\n meta: Meta,\n metadata: Metadata\n) => {\n switch (attribute.relation) {\n case 'oneToOne':\n return createOneToOne(attributeName, attribute, meta, metadata);\n case 'oneToMany':\n return createOneToMany(attributeName, attribute, meta, metadata);\n case 'manyToOne':\n return createManyToOne(attributeName, attribute, meta, metadata);\n case 'manyToMany':\n return createManyToMany(attributeName, attribute, meta, metadata);\n case 'morphToOne':\n return createMorphToOne(attributeName, attribute);\n case 'morphToMany':\n return createMorphToMany(attributeName, attribute, meta, metadata);\n case 'morphOne':\n return createMorphOne(attributeName, attribute, meta, metadata);\n case 'morphMany':\n return createMorphMany(attributeName, attribute, meta, metadata);\n default: {\n throw new Error(`Unknown relation`);\n }\n }\n};\n"],"names":["ID","identifiers","ID_COLUMN","ORDER","ORDER_COLUMN","FIELD","FIELD_COLUMN","hasInversedBy","attr","hasMappedBy","isOneToAny","attribute","includes","relation","isManyToAny","isAnyToOne","isAnyToMany","isBidirectional","isOwner","shouldUseJoinTable","useJoinTable","hasOrderColumn","hasInverseOrderColumn","createOneToOne","attributeName","meta","metadata","createJoinTable","createJoinColumn","createOneToMany","Error","createManyToOne","createManyToMany","createMorphToOne","idColumnName","getJoinColumnAttributeIdName","typeColumnName","getMorphColumnTypeName","Object","assign","owner","morphColumn","typeColumn","name","idColumn","referencedColumn","createMorphToMany","joinTable","__internal__","joinTableName","getMorphTableName","tableName","joinColumnName","getMorphColumnJoinTableIdName","snakeCase","singularName","getMorphColumnAttributeIdName","fkIndexName","getFkIndexName","add","uid","attributes","type","column","unsigned","columnName","indexes","columns","getOrderIndexName","getIdColumnIndexName","foreignKeys","referencedColumns","referencedTable","onDelete","lifecycles","columnToAttribute","joinColumn","orderBy","order","pivotColumns","createMorphOne","targetMeta","get","target","morphBy","_","has","createMorphMany","inverseAttribute","inversedBy","getJoinTableName","inverseJoinColumnName","getInverseJoinColumnAttributeIdName","orderColumnName","getOrderColumnName","inverseOrderColumnName","getInverseOrderColumnName","invFkIndexName","getInverseFkIndexName","metadataSchema","getUniqueIndexName","inverseJoinColumn","defaultTo","push","getOrderFkIndexName","getOrderInverseFkIndexName","createRelation"],"mappings":"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"}
1
+ {"version":3,"file":"relations.js","sources":["../../src/metadata/relations.ts"],"sourcesContent":["import _, { snakeCase } from 'lodash/fp';\n\nimport { identifiers } from '../utils/identifiers';\nimport type { Meta, Metadata } from './metadata';\nimport type { RelationalAttribute, Relation, MorphJoinTable } from '../types';\n\ninterface JoinColumnOptions {\n attribute: (Relation.OneToOne | Relation.ManyToOne) & Relation.Owner;\n attributeName: string;\n meta: Meta;\n}\n\ninterface JoinTableOptions {\n attribute: RelationalAttribute & Relation.WithTarget & Relation.Bidirectional;\n attributeName: string;\n meta: Meta;\n}\n\nconst ID = identifiers.ID_COLUMN;\nconst ORDER = identifiers.ORDER_COLUMN;\nconst FIELD = identifiers.FIELD_COLUMN;\n\nconst hasInversedBy = (\n attr: RelationalAttribute\n): attr is RelationalAttribute & { inversedBy: boolean } => 'inversedBy' in attr;\nconst hasMappedBy = (\n attr: RelationalAttribute\n): attr is RelationalAttribute & { inversedBy: boolean } => 'mappedBy' in attr;\n\n// TODO: use strapi/utils relations for all of these\nexport const isPolymorphic = (attribute: RelationalAttribute): attribute is Relation.Morph =>\n ['morphOne', 'morphMany', 'morphToOne', 'morphToMany'].includes(attribute.relation);\n\nexport const isOneToAny = (\n attribute: RelationalAttribute\n): attribute is Relation.OneToOne | Relation.OneToMany =>\n ['oneToOne', 'oneToMany'].includes(attribute.relation);\n\nexport const isManyToAny = (\n attribute: RelationalAttribute\n): attribute is Relation.ManyToOne | Relation.ManyToMany =>\n ['manyToMany', 'manyToOne'].includes(attribute.relation);\n\nexport const isAnyToOne = (\n attribute: RelationalAttribute\n): attribute is Relation.OneToOne | Relation.ManyToOne =>\n ['oneToOne', 'manyToOne'].includes(attribute.relation);\n\nexport const isAnyToMany = (\n attribute: RelationalAttribute\n): attribute is Relation.OneToMany | Relation.ManyToMany =>\n ['oneToMany', 'manyToMany'].includes(attribute.relation);\n\nexport const isBidirectional = (\n attribute: RelationalAttribute\n): attribute is Relation.Bidirectional => hasInversedBy(attribute) || hasMappedBy(attribute);\n\nconst isOwner = (\n attribute: RelationalAttribute\n): attribute is RelationalAttribute & Relation.Owner =>\n !isBidirectional(attribute) || hasInversedBy(attribute);\n\nconst shouldUseJoinTable = (attribute: RelationalAttribute) =>\n !('useJoinTable' in attribute) || attribute.useJoinTable !== false;\n\nexport const hasOrderColumn = (attribute: RelationalAttribute) => isAnyToMany(attribute);\nexport const hasInverseOrderColumn = (attribute: RelationalAttribute) =>\n isBidirectional(attribute) && isManyToAny(attribute);\n\n/**\n * Creates a oneToOne relation metadata\n *\n * if owner then\n * if with join table then\n * create join table\n * else\n * create joinColumn\n * if bidirectional then\n * set inverse attribute joinCol or joinTable info correctly\n * else\n * this property must be set by the owner side\n * verify the owner side is valid // should be done before or at the same time ?\n */\nconst createOneToOne = (\n attributeName: string,\n attribute: Relation.OneToOne,\n meta: Meta,\n metadata: Metadata\n) => {\n if (isOwner(attribute)) {\n if (shouldUseJoinTable(attribute)) {\n createJoinTable(metadata, {\n attribute,\n attributeName,\n meta,\n });\n } else {\n createJoinColumn(metadata, {\n attribute,\n attributeName,\n meta,\n });\n }\n } else {\n // TODO: verify other side is valid\n }\n};\n\n/**\n * Creates a oneToMany relation metadata\n *\n * if unidirectional then\n * create join table\n * if bidirectional then\n * cannot be owning side\n * do nothing\n */\nconst createOneToMany = (\n attributeName: string,\n attribute: Relation.OneToMany,\n meta: Meta,\n metadata: Metadata\n) => {\n if (shouldUseJoinTable(attribute) && !isBidirectional(attribute)) {\n createJoinTable(metadata, {\n attribute,\n attributeName,\n meta,\n });\n } else if (isOwner(attribute)) {\n throw new Error('one side of a oneToMany cannot be the owner side in a bidirectional relation');\n }\n};\n\n/**\n * Creates a manyToOne relation metadata\n *\n * if unidirectional then\n * if with join table then\n * create join table\n * else\n * create join column\n * else\n * must be the owner side\n * if with join table then\n * create join table\n * else\n * create join column\n * set inverse attribute joinCol or joinTable info correctly\n */\nconst createManyToOne = (\n attributeName: string,\n attribute: Relation.ManyToOne,\n meta: Meta,\n metadata: Metadata\n) => {\n if (isBidirectional(attribute) && !isOwner(attribute)) {\n throw new Error('The many side of a manyToOne must be the owning side');\n }\n\n if (shouldUseJoinTable(attribute)) {\n createJoinTable(metadata, {\n attribute,\n attributeName,\n meta,\n });\n } else {\n createJoinColumn(metadata, {\n attribute,\n attributeName,\n meta,\n });\n }\n};\n\n/**\n * Creates a manyToMany relation metadata\n *\n * if unidirectional\n * create join table\n * else\n * if owner then\n * if with join table then\n * create join table\n * else\n * do nothing\n */\nconst createManyToMany = (\n attributeName: string,\n attribute: Relation.ManyToMany,\n meta: Meta,\n metadata: Metadata\n) => {\n if (shouldUseJoinTable(attribute) && (!isBidirectional(attribute) || isOwner(attribute))) {\n createJoinTable(metadata, {\n attribute,\n attributeName,\n meta,\n });\n }\n};\n\n/**\n * Creates a morphToOne relation metadata\n *\n * if with join table then\n * create join table\n * else\n * create join columnsa\n *\n * if bidirectionnal\n * set info in the traget\n */\nconst createMorphToOne = (attributeName: string, attribute: Relation.MorphToOne) => {\n const idColumnName = identifiers.getJoinColumnAttributeIdName('target');\n const typeColumnName = identifiers.getMorphColumnTypeName('target');\n\n Object.assign(attribute, {\n owner: true,\n morphColumn: attribute.morphColumn ?? {\n typeColumn: {\n name: typeColumnName,\n },\n idColumn: {\n name: idColumnName,\n referencedColumn: ID,\n },\n },\n });\n};\n\n/**\n * Creates a morphToMany relation metadata\n */\nconst createMorphToMany = (\n attributeName: string,\n attribute: Relation.MorphToMany,\n meta: Meta,\n metadata: Metadata\n) => {\n if ('joinTable' in attribute && attribute.joinTable && !attribute.joinTable.__internal__) {\n return;\n }\n\n const joinTableName = identifiers.getMorphTableName(meta.tableName, attributeName);\n const joinColumnName = identifiers.getMorphColumnJoinTableIdName(snakeCase(meta.singularName));\n const idColumnName = identifiers.getMorphColumnAttributeIdName(attributeName);\n const typeColumnName = identifiers.getMorphColumnTypeName(attributeName);\n\n const fkIndexName = identifiers.getFkIndexName(joinTableName);\n\n metadata.add({\n singularName: joinTableName,\n uid: joinTableName,\n tableName: joinTableName,\n attributes: {\n [ID]: {\n type: 'increments',\n },\n [joinColumnName]: {\n type: 'integer',\n column: {\n unsigned: true,\n },\n // This must be set explicitly so that it is used instead of shortening the attribute name, which is already shortened\n columnName: joinColumnName,\n },\n [idColumnName]: {\n type: 'integer',\n column: {\n unsigned: true,\n },\n },\n [typeColumnName]: {\n type: 'string',\n },\n [FIELD]: {\n type: 'string',\n },\n [ORDER]: {\n type: 'float',\n column: {\n unsigned: true,\n },\n },\n },\n indexes: [\n {\n name: fkIndexName,\n columns: [joinColumnName],\n },\n {\n name: identifiers.getOrderIndexName(joinTableName),\n columns: [ORDER],\n },\n {\n name: identifiers.getIdColumnIndexName(joinTableName),\n columns: [idColumnName],\n },\n ],\n foreignKeys: [\n {\n name: fkIndexName,\n columns: [joinColumnName],\n referencedColumns: [ID],\n referencedTable: meta.tableName,\n onDelete: 'CASCADE',\n },\n ],\n lifecycles: {},\n columnToAttribute: {},\n });\n\n const joinTable: MorphJoinTable = {\n __internal__: true,\n name: joinTableName,\n joinColumn: {\n name: joinColumnName,\n referencedColumn: ID,\n },\n morphColumn: {\n typeColumn: {\n name: typeColumnName,\n },\n idColumn: {\n name: idColumnName,\n referencedColumn: ID,\n },\n },\n orderBy: {\n order: 'asc' as const,\n },\n pivotColumns: [joinColumnName, typeColumnName, idColumnName],\n };\n\n attribute.joinTable = joinTable;\n};\n\n/**\n * Creates a morphOne relation metadata\n */\nconst createMorphOne = (\n attributeName: string,\n attribute: Relation.MorphOne,\n meta: Meta,\n metadata: Metadata\n) => {\n const targetMeta = metadata.get(attribute.target);\n\n if (!targetMeta) {\n throw new Error(`Morph target not found. Looking for ${attribute.target}`);\n }\n\n if (attribute.morphBy && !_.has(attribute.morphBy, targetMeta.attributes)) {\n throw new Error(`Morph target attribute not found. Looking for ${attribute.morphBy}`);\n }\n};\n\n/**\n * Creates a morphMany relation metadata\n */\nconst createMorphMany = (\n attributeName: string,\n attribute: Relation.MorphMany,\n meta: Meta,\n metadata: Metadata\n) => {\n const targetMeta = metadata.get(attribute.target);\n\n if (!targetMeta) {\n throw new Error(`Morph target not found. Looking for ${attribute.target}`);\n }\n\n if (attribute.morphBy && !_.has(attribute.morphBy, targetMeta.attributes)) {\n throw new Error(`Morph target attribute not found. Looking for ${attribute.morphBy}`);\n }\n};\n\n/**\n * Creates a join column info and add them to the attribute meta\n */\nconst createJoinColumn = (metadata: Metadata, { attribute, attributeName }: JoinColumnOptions) => {\n const targetMeta = metadata.get(attribute.target);\n\n if (!targetMeta) {\n throw new Error(`Unknown target ${attribute.target}`);\n }\n\n const joinColumnName = identifiers.getJoinColumnAttributeIdName(snakeCase(attributeName));\n const joinColumn = {\n name: joinColumnName,\n referencedColumn: ID,\n referencedTable: targetMeta.tableName,\n };\n\n if ('joinColumn' in attribute) {\n Object.assign(joinColumn, attribute.joinColumn);\n }\n\n Object.assign(attribute, { owner: true, joinColumn });\n\n if (isBidirectional(attribute)) {\n const inverseAttribute = targetMeta.attributes[attribute.inversedBy];\n\n Object.assign(inverseAttribute, {\n joinColumn: {\n name: joinColumn.referencedColumn,\n referencedColumn: joinColumnName,\n },\n });\n }\n};\n\n/**\n * Creates a join table and add it to the attribute meta\n */\nconst createJoinTable = (\n metadata: Metadata,\n { attributeName, attribute, meta }: JoinTableOptions\n) => {\n if (!shouldUseJoinTable(attribute)) {\n throw new Error('Attempted to create join table when useJoinTable is false');\n }\n\n const targetMeta = metadata.get(attribute.target);\n\n if (!targetMeta) {\n throw new Error(`Unknown target ${attribute.target}`);\n }\n\n // TODO: implement overwrite logic instead\n if ('joinTable' in attribute && attribute.joinTable && !attribute.joinTable.__internal__) {\n return;\n }\n\n const joinTableName = identifiers.getJoinTableName(\n snakeCase(meta.tableName),\n snakeCase(attributeName)\n );\n\n const joinColumnName = identifiers.getJoinColumnAttributeIdName(snakeCase(meta.singularName));\n\n let inverseJoinColumnName = identifiers.getJoinColumnAttributeIdName(\n snakeCase(targetMeta.singularName)\n );\n\n // if relation is self referencing\n if (joinColumnName === inverseJoinColumnName) {\n inverseJoinColumnName = identifiers.getInverseJoinColumnAttributeIdName(\n snakeCase(targetMeta.singularName)\n );\n }\n\n const orderColumnName = identifiers.getOrderColumnName(snakeCase(targetMeta.singularName));\n // TODO: should this plus the conditional below be rolled into one method?\n let inverseOrderColumnName = identifiers.getOrderColumnName(snakeCase(meta.singularName));\n\n // if relation is self referencing\n if (attribute.relation === 'manyToMany' && orderColumnName === inverseOrderColumnName) {\n inverseOrderColumnName = identifiers.getInverseOrderColumnName(snakeCase(meta.singularName));\n }\n\n const fkIndexName = identifiers.getFkIndexName(joinTableName);\n const invFkIndexName = identifiers.getInverseFkIndexName(joinTableName);\n\n const metadataSchema: Meta = {\n singularName: joinTableName,\n uid: joinTableName,\n tableName: joinTableName,\n attributes: {\n [ID]: {\n type: 'increments',\n },\n [joinColumnName]: {\n type: 'integer',\n column: {\n unsigned: true,\n },\n // This must be set explicitly so that it is used instead of shortening the attribute name, which is already shortened\n columnName: joinColumnName,\n },\n [inverseJoinColumnName]: {\n type: 'integer',\n column: {\n unsigned: true,\n },\n // This must be set explicitly so that it is used instead of shortening the attribute name, which is already shortened\n columnName: inverseJoinColumnName,\n },\n // TODO: add extra pivot attributes -> user should use an intermediate entity\n },\n indexes: [\n {\n name: fkIndexName,\n columns: [joinColumnName],\n },\n {\n name: invFkIndexName,\n columns: [inverseJoinColumnName],\n },\n {\n name: identifiers.getUniqueIndexName(joinTableName),\n columns: [joinColumnName, inverseJoinColumnName],\n type: 'unique',\n },\n ],\n foreignKeys: [\n {\n name: fkIndexName,\n columns: [joinColumnName],\n referencedColumns: [ID],\n referencedTable: meta.tableName,\n onDelete: 'CASCADE',\n },\n {\n name: invFkIndexName,\n columns: [inverseJoinColumnName],\n referencedColumns: [ID],\n referencedTable: targetMeta.tableName,\n onDelete: 'CASCADE',\n },\n ],\n lifecycles: {},\n columnToAttribute: {},\n };\n\n const joinTable = {\n __internal__: true,\n name: joinTableName,\n joinColumn: {\n name: joinColumnName,\n referencedColumn: ID,\n referencedTable: meta.tableName,\n },\n inverseJoinColumn: {\n name: inverseJoinColumnName,\n referencedColumn: ID,\n referencedTable: targetMeta.tableName,\n },\n pivotColumns: [joinColumnName, inverseJoinColumnName],\n } as any;\n\n // order\n if (isAnyToMany(attribute)) {\n metadataSchema.attributes[orderColumnName] = {\n type: 'float',\n column: {\n unsigned: true,\n defaultTo: null,\n },\n columnName: orderColumnName,\n };\n metadataSchema.indexes.push({\n name: identifiers.getOrderFkIndexName(joinTableName),\n columns: [orderColumnName],\n });\n joinTable.orderColumnName = orderColumnName;\n joinTable.orderBy = { [orderColumnName]: 'asc' };\n }\n\n // inv order\n if (isBidirectional(attribute) && isManyToAny(attribute)) {\n metadataSchema.attributes[inverseOrderColumnName] = {\n type: 'float',\n column: {\n unsigned: true,\n defaultTo: null,\n },\n columnName: inverseOrderColumnName,\n };\n\n metadataSchema.indexes.push({\n name: identifiers.getOrderInverseFkIndexName(joinTableName),\n columns: [inverseOrderColumnName],\n });\n\n joinTable.inverseOrderColumnName = inverseOrderColumnName;\n }\n\n metadata.add(metadataSchema);\n\n attribute.joinTable = joinTable;\n\n if (isBidirectional(attribute)) {\n const inverseAttribute = attribute.inversedBy\n ? (targetMeta.attributes[attribute.inversedBy] as Relation.Bidirectional)\n : null;\n\n if (!inverseAttribute) {\n throw new Error(\n `inversedBy attribute ${attribute.inversedBy} not found target ${targetMeta.uid}`\n );\n }\n\n if (inverseAttribute.type !== 'relation') {\n throw new Error(\n `inversedBy attribute ${attribute.inversedBy} targets non relational attribute in ${targetMeta.uid}`\n );\n }\n\n inverseAttribute.joinTable = {\n __internal__: true,\n name: joinTableName,\n joinColumn: joinTable.inverseJoinColumn,\n inverseJoinColumn: joinTable.joinColumn,\n pivotColumns: joinTable.pivotColumns,\n } as any;\n\n if (isManyToAny(attribute)) {\n inverseAttribute.joinTable.orderColumnName = inverseOrderColumnName;\n inverseAttribute.joinTable.orderBy = { [inverseOrderColumnName]: 'asc' };\n }\n if (isAnyToMany(attribute)) {\n inverseAttribute.joinTable.inverseOrderColumnName = orderColumnName;\n }\n }\n};\n\n/**\n * Creates a relation metadata\n */\nexport const createRelation = (\n attributeName: string,\n attribute: RelationalAttribute,\n meta: Meta,\n metadata: Metadata\n) => {\n switch (attribute.relation) {\n case 'oneToOne':\n return createOneToOne(attributeName, attribute, meta, metadata);\n case 'oneToMany':\n return createOneToMany(attributeName, attribute, meta, metadata);\n case 'manyToOne':\n return createManyToOne(attributeName, attribute, meta, metadata);\n case 'manyToMany':\n return createManyToMany(attributeName, attribute, meta, metadata);\n case 'morphToOne':\n return createMorphToOne(attributeName, attribute);\n case 'morphToMany':\n return createMorphToMany(attributeName, attribute, meta, metadata);\n case 'morphOne':\n return createMorphOne(attributeName, attribute, meta, metadata);\n case 'morphMany':\n return createMorphMany(attributeName, attribute, meta, metadata);\n default: {\n throw new Error(`Unknown relation`);\n }\n }\n};\n"],"names":["ID","identifiers","ID_COLUMN","ORDER","ORDER_COLUMN","FIELD","FIELD_COLUMN","hasInversedBy","attr","hasMappedBy","isOneToAny","attribute","includes","relation","isManyToAny","isAnyToOne","isAnyToMany","isBidirectional","isOwner","shouldUseJoinTable","useJoinTable","hasOrderColumn","hasInverseOrderColumn","createOneToOne","attributeName","meta","metadata","createJoinTable","createJoinColumn","createOneToMany","Error","createManyToOne","createManyToMany","createMorphToOne","idColumnName","getJoinColumnAttributeIdName","typeColumnName","getMorphColumnTypeName","Object","assign","owner","morphColumn","typeColumn","name","idColumn","referencedColumn","createMorphToMany","joinTable","__internal__","joinTableName","getMorphTableName","tableName","joinColumnName","getMorphColumnJoinTableIdName","snakeCase","singularName","getMorphColumnAttributeIdName","fkIndexName","getFkIndexName","add","uid","attributes","type","column","unsigned","columnName","indexes","columns","getOrderIndexName","getIdColumnIndexName","foreignKeys","referencedColumns","referencedTable","onDelete","lifecycles","columnToAttribute","joinColumn","orderBy","order","pivotColumns","createMorphOne","targetMeta","get","target","morphBy","_","has","createMorphMany","inverseAttribute","inversedBy","getJoinTableName","inverseJoinColumnName","getInverseJoinColumnAttributeIdName","orderColumnName","getOrderColumnName","inverseOrderColumnName","getInverseOrderColumnName","invFkIndexName","getInverseFkIndexName","metadataSchema","getUniqueIndexName","inverseJoinColumn","defaultTo","push","getOrderFkIndexName","getOrderInverseFkIndexName","createRelation"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../src/migrations/common.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACtC,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAEjC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,IAAI,CAAC;AAEnC,MAAM,WAAW,qBAAqB;IACpC,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IAC9B,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACpB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACvB;AAED,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI,CAAC;IACrC,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IAC9B,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACpB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACvB;AACD,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE;QAAE,QAAQ,EAAE,yBAAyB,CAAA;KAAE,CAAC;IACnD,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IAC9B,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACpB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACvB;AAED,MAAM,MAAM,OAAO,GAAG;IAAE,EAAE,EAAE,QAAQ,CAAA;CAAE,CAAC;AAEvC,MAAM,MAAM,iBAAiB,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC;AAElD,MAAM,MAAM,WAAW,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE,EAAE,EAAE,QAAQ,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAElF,MAAM,MAAM,SAAS,GAAG;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,WAAW,CAAC;IAChB,IAAI,EAAE,WAAW,CAAC;CACnB,CAAC;AAEF,eAAO,MAAM,eAAe,OAAQ,QAAQ,UAAU,WAAW,iCAEhE,CAAC"}
1
+ {"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../src/migrations/common.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACtC,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAEjC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,IAAI,CAAC;AAEnC,MAAM,WAAW,qBAAqB;IACpC,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IAC9B,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACpB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACvB;AAED,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI,CAAC;IACrC,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IAC9B,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACpB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACvB;AACD,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE;QAAE,QAAQ,EAAE,yBAAyB,CAAA;KAAE,CAAC;IACnD,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IAC9B,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACpB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACvB;AAED,MAAM,MAAM,OAAO,GAAG;IAAE,EAAE,EAAE,QAAQ,CAAA;CAAE,CAAC;AAEvC,MAAM,MAAM,iBAAiB,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC;AAElD,MAAM,MAAM,WAAW,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE,EAAE,EAAE,QAAQ,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAElF,MAAM,MAAM,SAAS,GAAG;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,WAAW,CAAC;IAChB,IAAI,EAAE,WAAW,CAAC;CACnB,CAAC;AAEF,eAAO,MAAM,eAAe,GAAI,IAAI,QAAQ,MAAM,IAAI,WAAW,iCAEhE,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/migrations/index.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAC7D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,IAAI,CAAC;AAEnC,YAAY,EAAE,iBAAiB,EAAE,SAAS,EAAE,CAAC;AAE7C,eAAO,MAAM,wBAAwB,OAAQ,QAAQ,KAAG,iBA+BvD,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/migrations/index.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAC7D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,IAAI,CAAC;AAEnC,YAAY,EAAE,iBAAiB,EAAE,SAAS,EAAE,CAAC;AAE7C,eAAO,MAAM,wBAAwB,GAAI,IAAI,QAAQ,KAAG,iBA+BvD,CAAC"}
@@ -3,7 +3,11 @@
3
3
  var createDebug = require('debug');
4
4
  var index = require('../../utils/identifiers/index.js');
5
5
 
6
- const debug = createDebug('strapi::database::migration');
6
+ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
7
+
8
+ var createDebug__default = /*#__PURE__*/_interopDefault(createDebug);
9
+
10
+ const debug = createDebug__default.default('strapi::database::migration');
7
11
  const renameIdentifiersLongerThanMaxLength = {
8
12
  name: '5.0.0-rename-identifiers-longer-than-max-length',
9
13
  async up (knex, db) {
@@ -1 +1 @@
1
- {"version":3,"file":"5.0.0-01-convert-identifiers-long-than-max-length.js","sources":["../../../src/migrations/internal-migrations/5.0.0-01-convert-identifiers-long-than-max-length.ts"],"sourcesContent":["import type { Knex } from 'knex';\nimport createDebug from 'debug';\nimport type { Migration } from '../common';\nimport type { Metadata } from '../../metadata';\nimport { type Database } from '../..';\nimport { identifiers } from '../../utils/identifiers';\n\nconst debug = createDebug('strapi::database::migration');\n\ntype NameDiff<T> = {\n short: T;\n full: T;\n};\n\ntype IndexDiff = NameDiff<{ index: number; key: string; tableName: string; indexName: string }>;\n\n// key isn't really used except for debugging, but it's helpful to track down problems\ntype IdentifierDiffs = {\n indexes: IndexDiff[];\n tables: NameDiff<{ index: number; key: string; tableName: string }>[];\n columns: NameDiff<{ index: number; key: string; tableName: string; columnName: string }>[];\n};\n\nexport const renameIdentifiersLongerThanMaxLength: Migration = {\n name: '5.0.0-rename-identifiers-longer-than-max-length',\n async up(knex, db) {\n const md = db.metadata;\n\n const diffs = findDiffs(md);\n // migrate indexes before tables so we know to target the original tableName\n for (const indexDiff of diffs.indexes) {\n await renameIndex(knex, db, indexDiff);\n }\n\n // migrate columns before table names so we know to target the original tableName\n for (const columnDiff of diffs.columns) {\n const { full, short } = columnDiff;\n const tableName = full.tableName;\n\n const hasTable = await knex.schema.hasTable(tableName);\n\n if (hasTable) {\n // tablebuilder methods MUST be synchronous and so you cannot use async inside it, which is why we check the column here\n const hasColumn = await knex.schema.hasColumn(tableName, full.columnName);\n\n if (hasColumn) {\n await knex.schema.alterTable(tableName, async (table) => {\n debug(`renaming column ${full.columnName} to ${short.columnName}`);\n table.renameColumn(full.columnName, short.columnName);\n });\n }\n }\n }\n\n // migrate table names\n for (const tableDiff of diffs.tables) {\n const hasTable = await knex.schema.hasTable(tableDiff.full.tableName);\n\n if (hasTable) {\n debug(`renaming table ${tableDiff.full.tableName} to ${tableDiff.short.tableName}`);\n await knex.schema.renameTable(tableDiff.full.tableName, tableDiff.short.tableName);\n }\n }\n },\n async down() {\n throw new Error('not implemented');\n },\n};\n\nconst renameIndex = async (knex: Knex, db: Database, diff: IndexDiff) => {\n const client = db.config.connection.client;\n const short = diff.short;\n const full = diff.full;\n\n if (full.indexName === short.indexName) {\n debug(`not renaming index ${full.indexName} because name hasn't changed`);\n return;\n }\n\n // fk indexes can't be easily renamed, and will be recreated by db sync\n // if this misses something due to the loose string matching, it's not critical, it just means index will be rebuilt in db sync\n if (short.indexName.endsWith('fk') || full.indexName.endsWith('fk')) {\n return;\n }\n\n debug(`renaming index from ${full.indexName} to ${short.indexName}`);\n\n // If schema creation has never actually run before, none of these will exist, and they will throw an error\n // we have no way of running an \"if exists\" other than a per-dialect manual check, which we won't do\n // because even if it fails for some other reason, the schema sync will recreate them anyway\n // Therefore, we wrap this in a nested transaction (considering we are running this migration in a transaction)\n // so that we can suppress the error\n try {\n await knex.transaction(async (trx) => {\n if (client === 'mysql' || client === 'mariadb') {\n await knex\n .raw('ALTER TABLE ?? RENAME INDEX ?? TO ??', [\n full.tableName,\n full.indexName,\n short.indexName,\n ])\n .transacting(trx);\n } else if (client === 'pg' || client === 'postgres') {\n await knex\n .raw('ALTER INDEX ?? RENAME TO ??', [full.indexName, short.indexName])\n .transacting(trx);\n } else if (['sqlite', 'sqlite3', 'better-sqlite3'].includes(client as any)) {\n // SQLite doesn't support renaming, so rather than trying to drop/recreate we'll let db sync handle it\n debug(`SQLite does not support index renaming, not renaming index ${full.indexName}`);\n } else {\n debug(`No db client name matches, not renaming index ${full.indexName}`);\n }\n });\n } catch (err) {\n debug(`error creating index: ${JSON.stringify(err)}`);\n }\n};\n\nconst findDiffs = (shortMap: Metadata) => {\n const diffs = {\n tables: [],\n columns: [],\n indexes: [],\n } as IdentifierDiffs;\n\n const shortArr = Array.from(shortMap.entries());\n\n shortArr.forEach(([, shortObj], index) => {\n const fullTableName = identifiers.getUnshortenedName(shortObj.tableName);\n if (!fullTableName) {\n throw new Error(`Missing full table name for ${shortObj.tableName}`);\n }\n\n // find table name diffs\n if (shortObj.tableName !== fullTableName) {\n diffs.tables.push({\n full: {\n index,\n key: 'tableName',\n tableName: fullTableName,\n },\n short: {\n index,\n key: 'tableName',\n tableName: shortObj.tableName,\n },\n });\n }\n\n // find column name diffs\n // eslint-disable-next-line guard-for-in\n for (const attrKey in shortObj.attributes) {\n if (shortObj.attributes[attrKey].type === 'relation') {\n continue;\n }\n\n // TODO: add more type checks so we don't need any\n const attr = shortObj.attributes[attrKey] as any;\n const shortColumnName = attr.columnName;\n const longColumnName = identifiers.getUnshortenedName(shortColumnName);\n\n if (!shortColumnName || !longColumnName) {\n throw new Error(`missing column name(s) for attribute ${JSON.stringify(attr, null, 2)}`);\n }\n if (shortColumnName && longColumnName && shortColumnName !== longColumnName) {\n diffs.columns.push({\n short: {\n index,\n tableName: fullTableName, // NOTE: this means that we must rename columns before tables\n key: `attributes.${attrKey}`,\n columnName: shortColumnName,\n },\n full: {\n index,\n tableName: fullTableName,\n key: `attributes.${attrKey}`,\n columnName: longColumnName,\n },\n });\n }\n }\n\n // find index name diffs\n // eslint-disable-next-line guard-for-in\n for (const attrKey in shortObj.indexes) {\n const shortIndexName = shortObj.indexes[attrKey].name;\n const longIndexName = identifiers.getUnshortenedName(shortIndexName);\n if (!longIndexName) {\n throw new Error(`Missing full index name for ${shortIndexName}`);\n }\n\n if (shortIndexName && longIndexName && shortIndexName !== longIndexName) {\n diffs.indexes.push({\n short: {\n index,\n tableName: fullTableName, // NOTE: this means that we must rename columns before tables\n key: `indexes.${attrKey}`,\n indexName: shortIndexName,\n },\n full: {\n index,\n tableName: fullTableName,\n key: `indexes.${attrKey}`,\n indexName: longIndexName,\n },\n });\n }\n }\n });\n\n return diffs;\n};\n"],"names":["debug","createDebug","renameIdentifiersLongerThanMaxLength","name","up","knex","db","md","metadata","diffs","findDiffs","indexDiff","indexes","renameIndex","columnDiff","columns","full","short","tableName","hasTable","schema","hasColumn","columnName","alterTable","table","renameColumn","tableDiff","tables","renameTable","down","Error","diff","client","config","connection","indexName","endsWith","transaction","trx","raw","transacting","includes","err","JSON","stringify","shortMap","shortArr","Array","from","entries","forEach","shortObj","index","fullTableName","identifiers","getUnshortenedName","push","key","attrKey","attributes","type","attr","shortColumnName","longColumnName","shortIndexName","longIndexName"],"mappings":"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"}
1
+ {"version":3,"file":"5.0.0-01-convert-identifiers-long-than-max-length.js","sources":["../../../src/migrations/internal-migrations/5.0.0-01-convert-identifiers-long-than-max-length.ts"],"sourcesContent":["import type { Knex } from 'knex';\nimport createDebug from 'debug';\nimport type { Migration } from '../common';\nimport type { Metadata } from '../../metadata';\nimport { type Database } from '../..';\nimport { identifiers } from '../../utils/identifiers';\n\nconst debug = createDebug('strapi::database::migration');\n\ntype NameDiff<T> = {\n short: T;\n full: T;\n};\n\ntype IndexDiff = NameDiff<{ index: number; key: string; tableName: string; indexName: string }>;\n\n// key isn't really used except for debugging, but it's helpful to track down problems\ntype IdentifierDiffs = {\n indexes: IndexDiff[];\n tables: NameDiff<{ index: number; key: string; tableName: string }>[];\n columns: NameDiff<{ index: number; key: string; tableName: string; columnName: string }>[];\n};\n\nexport const renameIdentifiersLongerThanMaxLength: Migration = {\n name: '5.0.0-rename-identifiers-longer-than-max-length',\n async up(knex, db) {\n const md = db.metadata;\n\n const diffs = findDiffs(md);\n // migrate indexes before tables so we know to target the original tableName\n for (const indexDiff of diffs.indexes) {\n await renameIndex(knex, db, indexDiff);\n }\n\n // migrate columns before table names so we know to target the original tableName\n for (const columnDiff of diffs.columns) {\n const { full, short } = columnDiff;\n const tableName = full.tableName;\n\n const hasTable = await knex.schema.hasTable(tableName);\n\n if (hasTable) {\n // tablebuilder methods MUST be synchronous and so you cannot use async inside it, which is why we check the column here\n const hasColumn = await knex.schema.hasColumn(tableName, full.columnName);\n\n if (hasColumn) {\n await knex.schema.alterTable(tableName, async (table) => {\n debug(`renaming column ${full.columnName} to ${short.columnName}`);\n table.renameColumn(full.columnName, short.columnName);\n });\n }\n }\n }\n\n // migrate table names\n for (const tableDiff of diffs.tables) {\n const hasTable = await knex.schema.hasTable(tableDiff.full.tableName);\n\n if (hasTable) {\n debug(`renaming table ${tableDiff.full.tableName} to ${tableDiff.short.tableName}`);\n await knex.schema.renameTable(tableDiff.full.tableName, tableDiff.short.tableName);\n }\n }\n },\n async down() {\n throw new Error('not implemented');\n },\n};\n\nconst renameIndex = async (knex: Knex, db: Database, diff: IndexDiff) => {\n const client = db.config.connection.client;\n const short = diff.short;\n const full = diff.full;\n\n if (full.indexName === short.indexName) {\n debug(`not renaming index ${full.indexName} because name hasn't changed`);\n return;\n }\n\n // fk indexes can't be easily renamed, and will be recreated by db sync\n // if this misses something due to the loose string matching, it's not critical, it just means index will be rebuilt in db sync\n if (short.indexName.endsWith('fk') || full.indexName.endsWith('fk')) {\n return;\n }\n\n debug(`renaming index from ${full.indexName} to ${short.indexName}`);\n\n // If schema creation has never actually run before, none of these will exist, and they will throw an error\n // we have no way of running an \"if exists\" other than a per-dialect manual check, which we won't do\n // because even if it fails for some other reason, the schema sync will recreate them anyway\n // Therefore, we wrap this in a nested transaction (considering we are running this migration in a transaction)\n // so that we can suppress the error\n try {\n await knex.transaction(async (trx) => {\n if (client === 'mysql' || client === 'mariadb') {\n await knex\n .raw('ALTER TABLE ?? RENAME INDEX ?? TO ??', [\n full.tableName,\n full.indexName,\n short.indexName,\n ])\n .transacting(trx);\n } else if (client === 'pg' || client === 'postgres') {\n await knex\n .raw('ALTER INDEX ?? RENAME TO ??', [full.indexName, short.indexName])\n .transacting(trx);\n } else if (['sqlite', 'sqlite3', 'better-sqlite3'].includes(client as any)) {\n // SQLite doesn't support renaming, so rather than trying to drop/recreate we'll let db sync handle it\n debug(`SQLite does not support index renaming, not renaming index ${full.indexName}`);\n } else {\n debug(`No db client name matches, not renaming index ${full.indexName}`);\n }\n });\n } catch (err) {\n debug(`error creating index: ${JSON.stringify(err)}`);\n }\n};\n\nconst findDiffs = (shortMap: Metadata) => {\n const diffs = {\n tables: [],\n columns: [],\n indexes: [],\n } as IdentifierDiffs;\n\n const shortArr = Array.from(shortMap.entries());\n\n shortArr.forEach(([, shortObj], index) => {\n const fullTableName = identifiers.getUnshortenedName(shortObj.tableName);\n if (!fullTableName) {\n throw new Error(`Missing full table name for ${shortObj.tableName}`);\n }\n\n // find table name diffs\n if (shortObj.tableName !== fullTableName) {\n diffs.tables.push({\n full: {\n index,\n key: 'tableName',\n tableName: fullTableName,\n },\n short: {\n index,\n key: 'tableName',\n tableName: shortObj.tableName,\n },\n });\n }\n\n // find column name diffs\n // eslint-disable-next-line guard-for-in\n for (const attrKey in shortObj.attributes) {\n if (shortObj.attributes[attrKey].type === 'relation') {\n continue;\n }\n\n // TODO: add more type checks so we don't need any\n const attr = shortObj.attributes[attrKey] as any;\n const shortColumnName = attr.columnName;\n const longColumnName = identifiers.getUnshortenedName(shortColumnName);\n\n if (!shortColumnName || !longColumnName) {\n throw new Error(`missing column name(s) for attribute ${JSON.stringify(attr, null, 2)}`);\n }\n if (shortColumnName && longColumnName && shortColumnName !== longColumnName) {\n diffs.columns.push({\n short: {\n index,\n tableName: fullTableName, // NOTE: this means that we must rename columns before tables\n key: `attributes.${attrKey}`,\n columnName: shortColumnName,\n },\n full: {\n index,\n tableName: fullTableName,\n key: `attributes.${attrKey}`,\n columnName: longColumnName,\n },\n });\n }\n }\n\n // find index name diffs\n // eslint-disable-next-line guard-for-in\n for (const attrKey in shortObj.indexes) {\n const shortIndexName = shortObj.indexes[attrKey].name;\n const longIndexName = identifiers.getUnshortenedName(shortIndexName);\n if (!longIndexName) {\n throw new Error(`Missing full index name for ${shortIndexName}`);\n }\n\n if (shortIndexName && longIndexName && shortIndexName !== longIndexName) {\n diffs.indexes.push({\n short: {\n index,\n tableName: fullTableName, // NOTE: this means that we must rename columns before tables\n key: `indexes.${attrKey}`,\n indexName: shortIndexName,\n },\n full: {\n index,\n tableName: fullTableName,\n key: `indexes.${attrKey}`,\n indexName: longIndexName,\n },\n });\n }\n }\n });\n\n return diffs;\n};\n"],"names":["debug","createDebug","renameIdentifiersLongerThanMaxLength","name","up","knex","db","md","metadata","diffs","findDiffs","indexDiff","indexes","renameIndex","columnDiff","columns","full","short","tableName","hasTable","schema","hasColumn","columnName","alterTable","table","renameColumn","tableDiff","tables","renameTable","down","Error","diff","client","config","connection","indexName","endsWith","transaction","trx","raw","transacting","includes","err","JSON","stringify","shortMap","shortArr","Array","from","entries","forEach","shortObj","index","fullTableName","identifiers","getUnshortenedName","push","key","attrKey","attributes","type","attr","shortColumnName","longColumnName","shortIndexName","longIndexName"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"internal.d.ts","sourceRoot":"","sources":["../../src/migrations/internal.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,yBAAyB,EAAa,MAAM,UAAU,CAAC;AACrE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,IAAI,CAAC;AAEnC,eAAO,MAAM,+BAA+B,OAAQ,QAAQ,KAAG,yBAuD9D,CAAC"}
1
+ {"version":3,"file":"internal.d.ts","sourceRoot":"","sources":["../../src/migrations/internal.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,yBAAyB,EAAa,MAAM,UAAU,CAAC;AACrE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,IAAI,CAAC;AAEnC,eAAO,MAAM,+BAA+B,GAAI,IAAI,QAAQ,KAAG,yBAuD9D,CAAC"}