node-server-engine 1.10.4 → 1.10.6

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.
@@ -44,11 +44,26 @@ const sequelize = exports.sequelize = new Proxy(
44
44
  function init() {
45
45
  // Ignore if already initialized
46
46
  if (sequelizeClient) return;
47
+ (0, _report.reportInfo)({
48
+ message: 'Initializing Sequelize client',
49
+ data: {
50
+ host: process.env.SQL_HOST,
51
+ database: process.env.SQL_DB,
52
+ user: process.env.SQL_USER,
53
+ port: process.env.SQL_PORT,
54
+ dialect: process.env.SQL_TYPE || 'postgres',
55
+ isUnixSocket: process.env.SQL_HOST?.startsWith('/')
56
+ }
57
+ });
47
58
  exports.sequelizeClient = sequelizeClient = createSequelizeClient();
48
59
 
49
60
  // In test environment, authentication happens automatically with SQLite
50
61
  // For other environments, authenticate and log the result
51
62
  if (process.env.NODE_ENV !== 'test') {
63
+ (0, _report.reportInfo)({
64
+ message: 'Starting database authentication'
65
+ });
66
+
52
67
  // Add timeout to prevent hanging on connection issues
53
68
  const authTimeout = setTimeout(() => {
54
69
  (0, _report.reportError)({
@@ -56,7 +71,10 @@ function init() {
56
71
  data: {
57
72
  host: process.env.SQL_HOST,
58
73
  database: process.env.SQL_DB,
59
- user: process.env.SQL_USER
74
+ user: process.env.SQL_USER,
75
+ port: process.env.SQL_PORT,
76
+ dialect: process.env.SQL_TYPE || 'postgres',
77
+ isUnixSocket: process.env.SQL_HOST?.startsWith('/')
60
78
  }
61
79
  });
62
80
  }, 30000);
@@ -76,9 +94,11 @@ function init() {
76
94
  message: 'Failed to connect to database',
77
95
  data: {
78
96
  error: err.message,
97
+ stack: err.stack,
79
98
  host: process.env.SQL_HOST,
80
99
  database: process.env.SQL_DB,
81
- user: process.env.SQL_USER
100
+ user: process.env.SQL_USER,
101
+ port: process.env.SQL_PORT
82
102
  }
83
103
  });
84
104
  (0, _report.reportError)(err);
@@ -146,6 +166,19 @@ function createSequelizeClient() {
146
166
 
147
167
  // Throw an error if there is no host initial
148
168
  (0, _Sequelize2.validateSequelizeEnvironment)();
169
+ (0, _report.reportInfo)({
170
+ message: 'Creating Sequelize client with config',
171
+ data: {
172
+ database: process.env.SQL_DB,
173
+ username: process.env.SQL_USER,
174
+ host: process.env.SQL_HOST,
175
+ port: _Sequelize.default.port,
176
+ dialect: _Sequelize.default.dialect,
177
+ isUnixSocket: process.env.SQL_HOST?.startsWith('/'),
178
+ poolMax: _Sequelize.default.pool?.max,
179
+ poolMin: _Sequelize.default.pool?.min
180
+ }
181
+ });
149
182
  return new _sequelizeTypescript.Sequelize(process.env.SQL_DB, process.env.SQL_USER, process.env.SQL_PASSWORD, _Sequelize.default);
150
183
  }
151
184
  //# sourceMappingURL=Sequelize.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Sequelize.js","names":["_sequelizeTypescript","require","_Sequelize","_interopRequireDefault","_Sequelize2","_EngineError","_LifecycleController","_report","sequelizeClient","exports","sequelize","Proxy","get","target","property","init","shutdown","addModels","EngineError","message","createSequelizeClient","process","env","NODE_ENV","authTimeout","setTimeout","reportError","data","host","SQL_HOST","database","SQL_DB","user","SQL_USER","authenticate","then","clearTimeout","reportInfo","dialect","getDialect","catch","err","error","LifecycleController","register","close","console","undefined","models","addHook","result","convertToPlain","instance","toJSON","plain","Object","keys","forEach","key","Array","isArray","sync","Sequelize","storage","logging","validateSequelizeEnvironment","SQL_PASSWORD","dbConfig"],"sources":["../../../src/entities/Sequelize/Sequelize.ts"],"sourcesContent":["import { Sequelize, ModelCtor } from 'sequelize-typescript';\nimport dbConfig from './Sequelize.config';\nimport { Sequelize as SequelizeInterface } from './Sequelize.types';\nimport { validateSequelizeEnvironment } from './Sequelize.validate';\nimport { EngineError } from 'entities/EngineError';\nimport { LifecycleController } from 'entities/LifecycleController';\nimport { reportInfo, reportError } from 'utils/report';\n\nexport let sequelizeClient: undefined | Sequelize;\n\n/**\n * We use a proxy to extend the Sequelize behavior and allow initialization of the client only when needed while keeping the same interface\n */\nexport const sequelize = new Proxy<SequelizeInterface>(\n // Due to how we do the proxying, we are forced to ignore ts-errors, we could never create an object that respects the interface properly\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n {},\n {\n get: function (target, property): unknown {\n if (property === 'init') return init;\n if (property === 'shutdown') return shutdown;\n if (property === 'addModels') return addModels;\n // Create the sequelize client if it does not exist\n if (!sequelizeClient)\n throw new EngineError({\n message: 'Sequelize client was not initialized'\n });\n // Call the function on the sequelize client\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n return sequelizeClient[property] as unknown;\n }\n }\n);\n\n/** On init create client and connect */\nexport function init(): void {\n // Ignore if already initialized\n if (sequelizeClient) return;\n sequelizeClient = createSequelizeClient();\n \n // In test environment, authentication happens automatically with SQLite\n // For other environments, authenticate and log the result\n if (process.env.NODE_ENV !== 'test') {\n // Add timeout to prevent hanging on connection issues\n const authTimeout = setTimeout(() => {\n reportError({\n message: 'Database authentication timeout after 30 seconds',\n data: {\n host: process.env.SQL_HOST,\n database: process.env.SQL_DB,\n user: process.env.SQL_USER\n }\n });\n }, 30000);\n\n void sequelizeClient\n .authenticate()\n .then(() => {\n clearTimeout(authTimeout);\n reportInfo({ \n message: 'Connected to database successfully',\n data: {\n host: process.env.SQL_HOST,\n database: process.env.SQL_DB,\n dialect: sequelizeClient?.getDialect()\n }\n });\n })\n .catch((err: Error) => {\n clearTimeout(authTimeout);\n reportError({\n message: 'Failed to connect to database',\n data: {\n error: err.message,\n host: process.env.SQL_HOST,\n database: process.env.SQL_DB,\n user: process.env.SQL_USER\n }\n });\n reportError(err);\n });\n }\n \n LifecycleController.register(sequelize);\n}\n\n/** On shutdown close connection and clear client */\nexport async function shutdown(): Promise<void> {\n if (sequelizeClient) {\n try {\n // For SQLite, just close the client (closing connection manager first causes SQLITE_MISUSE)\n // For other dialects, sequelize.close() handles everything properly\n await sequelizeClient.close();\n } catch (error) {\n // Ignore errors during shutdown\n if (process.env.NODE_ENV !== 'test') {\n console.error('Error closing sequelize client:', error);\n }\n }\n }\n sequelizeClient = undefined;\n}\n\nexport function addModels(models: Array<ModelCtor>): void {\n if (!sequelizeClient)\n throw new EngineError({\n message: 'Sequelize client was not initialized'\n });\n sequelizeClient.addModels(models);\n \n // Override toJSON behavior globally to ensure consistency between dev and prod\n // In dev (ts-node), property access works directly on instances\n // In prod (compiled), we need explicit serialization\n // This hook intercepts all afterFind results and converts them to plain objects\n sequelizeClient.addHook('afterFind', (result) => {\n if (!result) return;\n \n const convertToPlain = (instance: any) => {\n if (!instance || !instance.toJSON) return instance;\n const plain = instance.toJSON();\n // Copy the plain object properties back to the instance\n // This makes property access work without .toJSON() in compiled code\n Object.keys(plain).forEach(key => {\n instance[key] = plain[key];\n });\n };\n \n if (Array.isArray(result)) {\n result.forEach(convertToPlain);\n } else {\n convertToPlain(result);\n }\n });\n \n sequelizeClient.sync();\n}\n\n/** Create Sequelize client */\nexport function createSequelizeClient(): Sequelize {\n // Use in-memory SQLite for test environment to avoid real database connections\n if (process.env.NODE_ENV === 'test') {\n return new Sequelize({\n dialect: 'sqlite',\n storage: ':memory:',\n logging: false\n });\n }\n \n // Throw an error if there is no host initial\n validateSequelizeEnvironment();\n return new Sequelize(\n process.env.SQL_DB as string,\n process.env.SQL_USER as string,\n process.env.SQL_PASSWORD as string,\n dbConfig\n );\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"Sequelize.js","names":["_sequelizeTypescript","require","_Sequelize","_interopRequireDefault","_Sequelize2","_EngineError","_LifecycleController","_report","sequelizeClient","exports","sequelize","Proxy","get","target","property","init","shutdown","addModels","EngineError","message","reportInfo","data","host","process","env","SQL_HOST","database","SQL_DB","user","SQL_USER","port","SQL_PORT","dialect","SQL_TYPE","isUnixSocket","startsWith","createSequelizeClient","NODE_ENV","authTimeout","setTimeout","reportError","authenticate","then","clearTimeout","getDialect","catch","err","error","stack","LifecycleController","register","close","console","undefined","models","addHook","result","convertToPlain","instance","toJSON","plain","Object","keys","forEach","key","Array","isArray","sync","Sequelize","storage","logging","validateSequelizeEnvironment","username","dbConfig","poolMax","pool","max","poolMin","min","SQL_PASSWORD"],"sources":["../../../src/entities/Sequelize/Sequelize.ts"],"sourcesContent":["import { Sequelize, ModelCtor } from 'sequelize-typescript';\nimport dbConfig from './Sequelize.config';\nimport { Sequelize as SequelizeInterface } from './Sequelize.types';\nimport { validateSequelizeEnvironment } from './Sequelize.validate';\nimport { EngineError } from 'entities/EngineError';\nimport { LifecycleController } from 'entities/LifecycleController';\nimport { reportInfo, reportError } from 'utils/report';\n\nexport let sequelizeClient: undefined | Sequelize;\n\n/**\n * We use a proxy to extend the Sequelize behavior and allow initialization of the client only when needed while keeping the same interface\n */\nexport const sequelize = new Proxy<SequelizeInterface>(\n // Due to how we do the proxying, we are forced to ignore ts-errors, we could never create an object that respects the interface properly\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n {},\n {\n get: function (target, property): unknown {\n if (property === 'init') return init;\n if (property === 'shutdown') return shutdown;\n if (property === 'addModels') return addModels;\n // Create the sequelize client if it does not exist\n if (!sequelizeClient)\n throw new EngineError({\n message: 'Sequelize client was not initialized'\n });\n // Call the function on the sequelize client\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n return sequelizeClient[property] as unknown;\n }\n }\n);\n\n/** On init create client and connect */\nexport function init(): void {\n // Ignore if already initialized\n if (sequelizeClient) return;\n \n reportInfo({\n message: 'Initializing Sequelize client',\n data: {\n host: process.env.SQL_HOST,\n database: process.env.SQL_DB,\n user: process.env.SQL_USER,\n port: process.env.SQL_PORT,\n dialect: process.env.SQL_TYPE || 'postgres',\n isUnixSocket: process.env.SQL_HOST?.startsWith('/')\n }\n });\n \n sequelizeClient = createSequelizeClient();\n \n // In test environment, authentication happens automatically with SQLite\n // For other environments, authenticate and log the result\n if (process.env.NODE_ENV !== 'test') {\n reportInfo({\n message: 'Starting database authentication'\n });\n\n // Add timeout to prevent hanging on connection issues\n const authTimeout = setTimeout(() => {\n reportError({\n message: 'Database authentication timeout after 30 seconds',\n data: {\n host: process.env.SQL_HOST,\n database: process.env.SQL_DB,\n user: process.env.SQL_USER,\n port: process.env.SQL_PORT,\n dialect: process.env.SQL_TYPE || 'postgres',\n isUnixSocket: process.env.SQL_HOST?.startsWith('/')\n }\n });\n }, 30000);\n\n void sequelizeClient\n .authenticate()\n .then(() => {\n clearTimeout(authTimeout);\n reportInfo({ \n message: 'Connected to database successfully',\n data: {\n host: process.env.SQL_HOST,\n database: process.env.SQL_DB,\n dialect: sequelizeClient?.getDialect()\n }\n });\n })\n .catch((err: Error) => {\n clearTimeout(authTimeout);\n reportError({\n message: 'Failed to connect to database',\n data: {\n error: err.message,\n stack: err.stack,\n host: process.env.SQL_HOST,\n database: process.env.SQL_DB,\n user: process.env.SQL_USER,\n port: process.env.SQL_PORT\n }\n });\n reportError(err);\n });\n }\n \n LifecycleController.register(sequelize);\n}\n\n/** On shutdown close connection and clear client */\nexport async function shutdown(): Promise<void> {\n if (sequelizeClient) {\n try {\n // For SQLite, just close the client (closing connection manager first causes SQLITE_MISUSE)\n // For other dialects, sequelize.close() handles everything properly\n await sequelizeClient.close();\n } catch (error) {\n // Ignore errors during shutdown\n if (process.env.NODE_ENV !== 'test') {\n console.error('Error closing sequelize client:', error);\n }\n }\n }\n sequelizeClient = undefined;\n}\n\nexport function addModels(models: Array<ModelCtor>): void {\n if (!sequelizeClient)\n throw new EngineError({\n message: 'Sequelize client was not initialized'\n });\n sequelizeClient.addModels(models);\n \n // Override toJSON behavior globally to ensure consistency between dev and prod\n // In dev (ts-node), property access works directly on instances\n // In prod (compiled), we need explicit serialization\n // This hook intercepts all afterFind results and converts them to plain objects\n sequelizeClient.addHook('afterFind', (result) => {\n if (!result) return;\n \n const convertToPlain = (instance: any) => {\n if (!instance || !instance.toJSON) return instance;\n const plain = instance.toJSON();\n // Copy the plain object properties back to the instance\n // This makes property access work without .toJSON() in compiled code\n Object.keys(plain).forEach(key => {\n instance[key] = plain[key];\n });\n };\n \n if (Array.isArray(result)) {\n result.forEach(convertToPlain);\n } else {\n convertToPlain(result);\n }\n });\n \n sequelizeClient.sync();\n}\n\n/** Create Sequelize client */\nexport function createSequelizeClient(): Sequelize {\n // Use in-memory SQLite for test environment to avoid real database connections\n if (process.env.NODE_ENV === 'test') {\n return new Sequelize({\n dialect: 'sqlite',\n storage: ':memory:',\n logging: false\n });\n }\n \n // Throw an error if there is no host initial\n validateSequelizeEnvironment();\n \n reportInfo({\n message: 'Creating Sequelize client with config',\n data: {\n database: process.env.SQL_DB,\n username: process.env.SQL_USER,\n host: process.env.SQL_HOST,\n port: dbConfig.port,\n dialect: dbConfig.dialect,\n isUnixSocket: process.env.SQL_HOST?.startsWith('/'),\n poolMax: dbConfig.pool?.max,\n poolMin: dbConfig.pool?.min\n }\n });\n \n return new Sequelize(\n process.env.SQL_DB as string,\n process.env.SQL_USER as string,\n process.env.SQL_PASSWORD as string,\n dbConfig\n );\n}\n"],"mappings":"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","ignoreList":[]}
@@ -14,82 +14,114 @@ const namespace = 'engine:utils:dbMigration';
14
14
  * Therefore, we use a more classic approach with this function and pure SQL queries
15
15
  */
16
16
  async function migrateMetadataTable(sequelize) {
17
- (0, _report.reportDebug)({
18
- namespace,
19
- message: 'Executing metadata migration routine'
20
- });
21
- const query = `SELECT table_name FROM information_schema.tables`;
22
-
23
- // We check if we have a custom sequelize_meta table yet
24
- const tables = await sequelize.query(query, {
25
- type: _sequelize.QueryTypes.SELECT
26
- });
27
- const hasCustomSequelizeMeta = process.env.SQL_TYPE === 'postgres' ? tables.some(table => table[0] === 'sequelize_meta') : tables.some(table => Object.values(table)[0] === 'sequelize_meta');
28
- const hasLegacySequelizeMeta = process.env.SQL_TYPE === 'postgres' ? tables.some(table => table[0] === 'SequelizeMeta') : tables.some(table => Object.values(table)[0] === 'SequelizeMeta');
29
- if (!hasCustomSequelizeMeta) {
17
+ try {
18
+ (0, _report.reportDebug)({
19
+ namespace,
20
+ message: 'Executing metadata migration routine'
21
+ });
22
+ const query = `SELECT table_name FROM information_schema.tables`;
30
23
  (0, _report.reportDebug)({
31
24
  namespace,
32
- message: 'No metadata table found, creating new one'
25
+ message: 'Checking for existing metadata tables',
26
+ data: {
27
+ sqlType: process.env.SQL_TYPE
28
+ }
33
29
  });
34
30
 
35
- // Define SQL for creating the table based on the database type
36
- let createTableQuery = '';
37
- switch (process.env.SQL_TYPE) {
38
- case 'mysql':
39
- case 'postgres':
40
- createTableQuery = `
31
+ // We check if we have a custom sequelize_meta table yet
32
+ const tables = await sequelize.query(query, {
33
+ type: _sequelize.QueryTypes.SELECT
34
+ });
35
+ const hasCustomSequelizeMeta = process.env.SQL_TYPE === 'postgres' ? tables.some(table => table[0] === 'sequelize_meta') : tables.some(table => Object.values(table)[0] === 'sequelize_meta');
36
+ const hasLegacySequelizeMeta = process.env.SQL_TYPE === 'postgres' ? tables.some(table => table[0] === 'SequelizeMeta') : tables.some(table => Object.values(table)[0] === 'SequelizeMeta');
37
+ if (!hasCustomSequelizeMeta) {
38
+ (0, _report.reportDebug)({
39
+ namespace,
40
+ message: 'No metadata table found, creating new one'
41
+ });
42
+
43
+ // Define SQL for creating the table based on the database type
44
+ let createTableQuery = '';
45
+ switch (process.env.SQL_TYPE) {
46
+ case 'mysql':
47
+ case 'postgres':
48
+ createTableQuery = `
41
49
  CREATE TABLE sequelize_meta (
42
50
  name VARCHAR(100) PRIMARY KEY,
43
51
  version VARCHAR(25),
44
52
  createdAt TIMESTAMP NOT NULL,
45
53
  updatedAt TIMESTAMP NOT NULL
46
54
  )`;
47
- break;
48
- case 'mssql':
49
- createTableQuery = `
55
+ break;
56
+ case 'mssql':
57
+ createTableQuery = `
50
58
  CREATE TABLE sequelize_meta (
51
59
  name VARCHAR(100) PRIMARY KEY,
52
60
  version VARCHAR(25),
53
61
  createdAt DATETIME NOT NULL,
54
62
  updatedAt DATETIME NOT NULL
55
63
  )`;
56
- break;
57
- default:
58
- throw new Error('Unsupported SQL type');
59
- }
64
+ break;
65
+ default:
66
+ throw new Error('Unsupported SQL type');
67
+ }
60
68
 
61
- // Create the new sequelize_meta table if it does not exist
62
- await sequelize.query(createTableQuery, {
63
- type: _sequelize.QueryTypes.RAW
64
- });
65
-
66
- // Migrate the data from the old table to the new one if needed
67
- if (hasLegacySequelizeMeta) {
69
+ // Create the new sequelize_meta table if it does not exist
68
70
  (0, _report.reportDebug)({
69
71
  namespace,
70
- message: 'Legacy metadata table found, migrating data'
72
+ message: 'Creating sequelize_meta table',
73
+ data: {
74
+ sqlType: process.env.SQL_TYPE
75
+ }
76
+ });
77
+ await sequelize.query(createTableQuery, {
78
+ type: _sequelize.QueryTypes.RAW
71
79
  });
72
- const migrations = await sequelize.query('SELECT name FROM SequelizeMeta ORDER BY name', {
73
- type: _sequelize.QueryTypes.SELECT
80
+ (0, _report.reportDebug)({
81
+ namespace,
82
+ message: 'sequelize_meta table created successfully'
74
83
  });
75
- const insertQuery = `
84
+
85
+ // Migrate the data from the old table to the new one if needed
86
+ if (hasLegacySequelizeMeta) {
87
+ (0, _report.reportDebug)({
88
+ namespace,
89
+ message: 'Legacy metadata table found, migrating data'
90
+ });
91
+ const migrations = await sequelize.query('SELECT name FROM SequelizeMeta ORDER BY name', {
92
+ type: _sequelize.QueryTypes.SELECT
93
+ });
94
+ const insertQuery = `
76
95
  INSERT INTO sequelize_meta (name, version, createdAt, updatedAt) VALUES
77
96
  ${migrations.map(migration => {
78
- switch (process.env.SQL_TYPE) {
79
- case 'mysql':
80
- case 'postgres':
81
- return `('${migration.name}', NULL, NOW(), NOW())`;
82
- case 'mssql':
83
- return `('${migration.name}', NULL, GETDATE(), GETDATE())`;
84
- default:
85
- throw new Error('Unsupported SQL type');
86
- }
87
- }).join(',')}
97
+ switch (process.env.SQL_TYPE) {
98
+ case 'mysql':
99
+ case 'postgres':
100
+ return `('${migration.name}', NULL, NOW(), NOW())`;
101
+ case 'mssql':
102
+ return `('${migration.name}', NULL, GETDATE(), GETDATE())`;
103
+ default:
104
+ throw new Error('Unsupported SQL type');
105
+ }
106
+ }).join(',')}
88
107
  `;
89
- await sequelize.query(insertQuery, {
90
- type: _sequelize.QueryTypes.INSERT
91
- });
108
+ await sequelize.query(insertQuery, {
109
+ type: _sequelize.QueryTypes.INSERT
110
+ });
111
+ }
92
112
  }
113
+ } catch (error) {
114
+ (0, _report.reportError)({
115
+ namespace,
116
+ message: 'Error in metadata migration',
117
+ data: {
118
+ error: error instanceof Error ? error.message : String(error),
119
+ stack: error instanceof Error ? error.stack : undefined,
120
+ sqlType: process.env.SQL_TYPE,
121
+ sqlHost: process.env.SQL_HOST
122
+ }
123
+ });
124
+ throw error;
93
125
  }
94
126
  }
95
127
  //# sourceMappingURL=migrateMetadataTable.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"migrateMetadataTable.js","names":["_sequelize","require","_report","namespace","migrateMetadataTable","sequelize","reportDebug","message","query","tables","type","QueryTypes","SELECT","hasCustomSequelizeMeta","process","env","SQL_TYPE","some","table","Object","values","hasLegacySequelizeMeta","createTableQuery","Error","RAW","migrations","insertQuery","map","migration","name","join","INSERT"],"sources":["../../../../src/utils/dbMigration/migrateMetadataTable/migrateMetadataTable.ts"],"sourcesContent":["import { Sequelize, QueryTypes } from 'sequelize';\nimport { SequelizeMeta } from 'db/models';\nimport { reportDebug } from 'utils/report';\n\nconst namespace = 'engine:utils:dbMigration';\n\n/**\n * Run migrations on the metadata table\n * The table containing the migrations metadata cannot be handled through migrations\n * Therefore, we use a more classic approach with this function and pure SQL queries\n */\nexport async function migrateMetadataTable(\n sequelize: Sequelize\n): Promise<void> {\n reportDebug({ namespace, message: 'Executing metadata migration routine' });\n\n const query = `SELECT table_name FROM information_schema.tables`;\n\n // We check if we have a custom sequelize_meta table yet\n const tables = await sequelize.query<Array<string>>(query, {\n type: QueryTypes.SELECT\n });\n\n const hasCustomSequelizeMeta =\n process.env.SQL_TYPE === 'postgres'\n ? tables.some((table) => table[0] === 'sequelize_meta')\n : tables.some((table) => Object.values(table)[0] === 'sequelize_meta');\n const hasLegacySequelizeMeta =\n process.env.SQL_TYPE === 'postgres'\n ? tables.some((table) => table[0] === 'SequelizeMeta')\n : tables.some((table) => Object.values(table)[0] === 'SequelizeMeta');\n if (!hasCustomSequelizeMeta) {\n reportDebug({\n namespace,\n message: 'No metadata table found, creating new one'\n });\n\n // Define SQL for creating the table based on the database type\n let createTableQuery = '';\n\n switch (process.env.SQL_TYPE) {\n case 'mysql':\n case 'postgres':\n createTableQuery = `\n CREATE TABLE sequelize_meta (\n name VARCHAR(100) PRIMARY KEY,\n version VARCHAR(25),\n createdAt TIMESTAMP NOT NULL,\n updatedAt TIMESTAMP NOT NULL\n )`;\n break;\n case 'mssql':\n createTableQuery = `\n CREATE TABLE sequelize_meta (\n name VARCHAR(100) PRIMARY KEY,\n version VARCHAR(25),\n createdAt DATETIME NOT NULL,\n updatedAt DATETIME NOT NULL\n )`;\n break;\n default:\n throw new Error('Unsupported SQL type');\n }\n\n // Create the new sequelize_meta table if it does not exist\n await sequelize.query(createTableQuery, { type: QueryTypes.RAW });\n\n // Migrate the data from the old table to the new one if needed\n if (hasLegacySequelizeMeta) {\n reportDebug({\n namespace,\n message: 'Legacy metadata table found, migrating data'\n });\n\n const migrations = await sequelize.query<SequelizeMeta>(\n 'SELECT name FROM SequelizeMeta ORDER BY name',\n {\n type: QueryTypes.SELECT\n }\n );\n\n const insertQuery = `\n INSERT INTO sequelize_meta (name, version, createdAt, updatedAt) VALUES\n ${migrations\n .map((migration) => {\n switch (process.env.SQL_TYPE) {\n case 'mysql':\n case 'postgres':\n return `('${migration.name}', NULL, NOW(), NOW())`;\n case 'mssql':\n return `('${migration.name}', NULL, GETDATE(), GETDATE())`;\n default:\n throw new Error('Unsupported SQL type');\n }\n })\n .join(',')}\n `;\n\n await sequelize.query(insertQuery, { type: QueryTypes.INSERT });\n }\n }\n}\n"],"mappings":";;;;;;AAAA,IAAAA,UAAA,GAAAC,OAAA;AAEA,IAAAC,OAAA,GAAAD,OAAA;AAEA,MAAME,SAAS,GAAG,0BAA0B;;AAE5C;AACA;AACA;AACA;AACA;AACO,eAAeC,oBAAoBA,CACxCC,SAAoB,EACL;EACf,IAAAC,mBAAW,EAAC;IAAEH,SAAS;IAAEI,OAAO,EAAE;EAAuC,CAAC,CAAC;EAE3E,MAAMC,KAAK,GAAG,kDAAkD;;EAEhE;EACA,MAAMC,MAAM,GAAG,MAAMJ,SAAS,CAACG,KAAK,CAAgBA,KAAK,EAAE;IACzDE,IAAI,EAAEC,qBAAU,CAACC;EACnB,CAAC,CAAC;EAEF,MAAMC,sBAAsB,GAC1BC,OAAO,CAACC,GAAG,CAACC,QAAQ,KAAK,UAAU,GAC/BP,MAAM,CAACQ,IAAI,CAAEC,KAAK,IAAKA,KAAK,CAAC,CAAC,CAAC,KAAK,gBAAgB,CAAC,GACrDT,MAAM,CAACQ,IAAI,CAAEC,KAAK,IAAKC,MAAM,CAACC,MAAM,CAACF,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,gBAAgB,CAAC;EAC1E,MAAMG,sBAAsB,GAC1BP,OAAO,CAACC,GAAG,CAACC,QAAQ,KAAK,UAAU,GAC/BP,MAAM,CAACQ,IAAI,CAAEC,KAAK,IAAKA,KAAK,CAAC,CAAC,CAAC,KAAK,eAAe,CAAC,GACpDT,MAAM,CAACQ,IAAI,CAAEC,KAAK,IAAKC,MAAM,CAACC,MAAM,CAACF,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,eAAe,CAAC;EACzE,IAAI,CAACL,sBAAsB,EAAE;IAC3B,IAAAP,mBAAW,EAAC;MACVH,SAAS;MACTI,OAAO,EAAE;IACX,CAAC,CAAC;;IAEF;IACA,IAAIe,gBAAgB,GAAG,EAAE;IAEzB,QAAQR,OAAO,CAACC,GAAG,CAACC,QAAQ;MAC1B,KAAK,OAAO;MACZ,KAAK,UAAU;QACbM,gBAAgB,GAAG;AAC3B;AACA;AACA;AACA;AACA;AACA,YAAY;QACJ;MACF,KAAK,OAAO;QACVA,gBAAgB,GAAG;AAC3B;AACA;AACA;AACA;AACA;AACA,YAAY;QACJ;MACF;QACE,MAAM,IAAIC,KAAK,CAAC,sBAAsB,CAAC;IAC3C;;IAEA;IACA,MAAMlB,SAAS,CAACG,KAAK,CAACc,gBAAgB,EAAE;MAAEZ,IAAI,EAAEC,qBAAU,CAACa;IAAI,CAAC,CAAC;;IAEjE;IACA,IAAIH,sBAAsB,EAAE;MAC1B,IAAAf,mBAAW,EAAC;QACVH,SAAS;QACTI,OAAO,EAAE;MACX,CAAC,CAAC;MAEF,MAAMkB,UAAU,GAAG,MAAMpB,SAAS,CAACG,KAAK,CACtC,8CAA8C,EAC9C;QACEE,IAAI,EAAEC,qBAAU,CAACC;MACnB,CACF,CAAC;MAED,MAAMc,WAAW,GAAG;AAC1B;AACA,UAAUD,UAAU,CACTE,GAAG,CAAEC,SAAS,IAAK;QAClB,QAAQd,OAAO,CAACC,GAAG,CAACC,QAAQ;UAC1B,KAAK,OAAO;UACZ,KAAK,UAAU;YACb,OAAO,KAAKY,SAAS,CAACC,IAAI,wBAAwB;UACpD,KAAK,OAAO;YACV,OAAO,KAAKD,SAAS,CAACC,IAAI,gCAAgC;UAC5D;YACE,MAAM,IAAIN,KAAK,CAAC,sBAAsB,CAAC;QAC3C;MACF,CAAC,CAAC,CACDO,IAAI,CAAC,GAAG,CAAC;AACpB,KAAK;MAEC,MAAMzB,SAAS,CAACG,KAAK,CAACkB,WAAW,EAAE;QAAEhB,IAAI,EAAEC,qBAAU,CAACoB;MAAO,CAAC,CAAC;IACjE;EACF;AACF","ignoreList":[]}
1
+ {"version":3,"file":"migrateMetadataTable.js","names":["_sequelize","require","_report","namespace","migrateMetadataTable","sequelize","reportDebug","message","query","data","sqlType","process","env","SQL_TYPE","tables","type","QueryTypes","SELECT","hasCustomSequelizeMeta","some","table","Object","values","hasLegacySequelizeMeta","createTableQuery","Error","RAW","migrations","insertQuery","map","migration","name","join","INSERT","error","reportError","String","stack","undefined","sqlHost","SQL_HOST"],"sources":["../../../../src/utils/dbMigration/migrateMetadataTable/migrateMetadataTable.ts"],"sourcesContent":["import { Sequelize, QueryTypes } from 'sequelize';\nimport { SequelizeMeta } from 'db/models';\nimport { reportDebug, reportError } from 'utils/report';\n\nconst namespace = 'engine:utils:dbMigration';\n\n/**\n * Run migrations on the metadata table\n * The table containing the migrations metadata cannot be handled through migrations\n * Therefore, we use a more classic approach with this function and pure SQL queries\n */\nexport async function migrateMetadataTable(\n sequelize: Sequelize\n): Promise<void> {\n try {\n reportDebug({ namespace, message: 'Executing metadata migration routine' });\n\n const query = `SELECT table_name FROM information_schema.tables`;\n\n reportDebug({ \n namespace, \n message: 'Checking for existing metadata tables',\n data: { sqlType: process.env.SQL_TYPE }\n });\n\n // We check if we have a custom sequelize_meta table yet\n const tables = await sequelize.query<Array<string>>(query, {\n type: QueryTypes.SELECT\n });\n\n const hasCustomSequelizeMeta =\n process.env.SQL_TYPE === 'postgres'\n ? tables.some((table) => table[0] === 'sequelize_meta')\n : tables.some((table) => Object.values(table)[0] === 'sequelize_meta');\n const hasLegacySequelizeMeta =\n process.env.SQL_TYPE === 'postgres'\n ? tables.some((table) => table[0] === 'SequelizeMeta')\n : tables.some((table) => Object.values(table)[0] === 'SequelizeMeta');\n if (!hasCustomSequelizeMeta) {\n reportDebug({\n namespace,\n message: 'No metadata table found, creating new one'\n });\n\n // Define SQL for creating the table based on the database type\n let createTableQuery = '';\n\n switch (process.env.SQL_TYPE) {\n case 'mysql':\n case 'postgres':\n createTableQuery = `\n CREATE TABLE sequelize_meta (\n name VARCHAR(100) PRIMARY KEY,\n version VARCHAR(25),\n createdAt TIMESTAMP NOT NULL,\n updatedAt TIMESTAMP NOT NULL\n )`;\n break;\n case 'mssql':\n createTableQuery = `\n CREATE TABLE sequelize_meta (\n name VARCHAR(100) PRIMARY KEY,\n version VARCHAR(25),\n createdAt DATETIME NOT NULL,\n updatedAt DATETIME NOT NULL\n )`;\n break;\n default:\n throw new Error('Unsupported SQL type');\n }\n\n // Create the new sequelize_meta table if it does not exist\n reportDebug({ \n namespace, \n message: 'Creating sequelize_meta table',\n data: { sqlType: process.env.SQL_TYPE }\n });\n await sequelize.query(createTableQuery, { type: QueryTypes.RAW });\n reportDebug({ namespace, message: 'sequelize_meta table created successfully' });\n\n // Migrate the data from the old table to the new one if needed\n if (hasLegacySequelizeMeta) {\n reportDebug({\n namespace,\n message: 'Legacy metadata table found, migrating data'\n });\n\n const migrations = await sequelize.query<SequelizeMeta>(\n 'SELECT name FROM SequelizeMeta ORDER BY name',\n {\n type: QueryTypes.SELECT\n }\n );\n\n const insertQuery = `\n INSERT INTO sequelize_meta (name, version, createdAt, updatedAt) VALUES\n ${migrations\n .map((migration) => {\n switch (process.env.SQL_TYPE) {\n case 'mysql':\n case 'postgres':\n return `('${migration.name}', NULL, NOW(), NOW())`;\n case 'mssql':\n return `('${migration.name}', NULL, GETDATE(), GETDATE())`;\n default:\n throw new Error('Unsupported SQL type');\n }\n })\n .join(',')}\n `;\n\n await sequelize.query(insertQuery, { type: QueryTypes.INSERT });\n }\n }\n } catch (error) {\n reportError({\n namespace,\n message: 'Error in metadata migration',\n data: {\n error: error instanceof Error ? error.message : String(error),\n stack: error instanceof Error ? error.stack : undefined,\n sqlType: process.env.SQL_TYPE,\n sqlHost: process.env.SQL_HOST\n }\n });\n throw error;\n }\n}\n"],"mappings":"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","ignoreList":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "node-server-engine",
3
- "version": "1.10.4",
3
+ "version": "1.10.6",
4
4
  "description": "Framework used to develop backend services. This package ships with a lot of features to standardize the creation of services, letting you focus on the business logic.",
5
5
  "main": "dist/index.js",
6
6
  "scripts": {