alp-migrations 5.1.1 → 6.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/.eslintrc.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "root": true,
3
- "extends": ["@pob/eslint-config/root", "@pob/eslint-config-node"],
3
+ "extends": ["@pob/eslint-config/root-module"],
4
4
  "ignorePatterns": ["*.d.ts", "/dist"]
5
5
  }
package/CHANGELOG.md CHANGED
@@ -3,6 +3,54 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ ## [6.0.1](https://github.com/christophehurpeau/alp/compare/alp-migrations@6.0.0...alp-migrations@6.0.1) (2022-01-15)
7
+
8
+ **Note:** Version bump only for package alp-migrations
9
+
10
+
11
+
12
+
13
+
14
+ # [6.0.0](https://github.com/christophehurpeau/alp/compare/alp-migrations@5.2.1...alp-migrations@6.0.0) (2022-01-02)
15
+
16
+
17
+ ### Bug Fixes
18
+
19
+ * update nightingale and fix tests ([3691716](https://github.com/christophehurpeau/alp/commit/36917162d0ee3dccc07384caf018b7760d98b744))
20
+
21
+
22
+ ### Features
23
+
24
+ * use ESM and drop node 12 ([f45054e](https://github.com/christophehurpeau/alp/commit/f45054e931eea88451d183722797eba057511236))
25
+
26
+
27
+ ### BREAKING CHANGES
28
+
29
+ * requires node 14 and ESM
30
+
31
+
32
+
33
+
34
+
35
+ ## [5.2.1](https://github.com/christophehurpeau/alp/compare/alp-migrations@5.2.0...alp-migrations@5.2.1) (2021-04-10)
36
+
37
+ **Note:** Version bump only for package alp-migrations
38
+
39
+
40
+
41
+
42
+
43
+ # [5.2.0](https://github.com/christophehurpeau/alp/compare/alp-migrations@5.1.1...alp-migrations@5.2.0) (2021-03-28)
44
+
45
+
46
+ ### Features
47
+
48
+ * update semver ([d5428fd](https://github.com/christophehurpeau/alp/commit/d5428fdd2d7e63ea2ed2770f95cbd1849ba10b4f))
49
+
50
+
51
+
52
+
53
+
6
54
  ## [5.1.1](https://github.com/christophehurpeau/alp/compare/alp-migrations@5.1.0...alp-migrations@5.1.1) (2021-03-28)
7
55
 
8
56
  **Note:** Version bump only for package alp-migrations
@@ -1,4 +1,4 @@
1
- import Logger from 'nightingale-logger';
1
+ import { Logger } from 'nightingale-logger';
2
2
  import semver from 'semver';
3
3
  import { readdir, stat } from 'fs/promises';
4
4
 
@@ -8,7 +8,7 @@ async function readRecursiveDirectory(directory, callback) {
8
8
  const path = `${directory}/${file}`;
9
9
  const stat$1 = await stat(path);
10
10
 
11
- if (stat$1 !== null && stat$1 !== void 0 && stat$1.isDirectory()) {
11
+ if (stat$1?.isDirectory()) {
12
12
  await readRecursiveDirectory(path, callback);
13
13
  return;
14
14
  }
@@ -30,7 +30,7 @@ class MigrationsManager {
30
30
  findLastVersion() {
31
31
  return this.store.findOne({}, {
32
32
  created: -1
33
- }).then(row => row === null || row === void 0 ? void 0 : row.version);
33
+ }).then(row => row?.version);
34
34
  }
35
35
 
36
36
  addMigrationDone(migration) {
@@ -89,8 +89,8 @@ async function migrate({
89
89
  logger.info(`Migration to ${migration.fileName}`);
90
90
 
91
91
  try {
92
- // eslint-disable-next-line import/no-dynamic-require, @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call, @typescript-eslint/no-var-requires
93
- await require(`${dirname}/${migration.fileName}`).default();
92
+ const migrateFn = await import(`${dirname}/${migration.fileName}`);
93
+ await migrateFn();
94
94
  } catch (err) {
95
95
  logger.error(`Migration to ${migration.version} Failed !`);
96
96
  throw err;
@@ -110,6 +110,5 @@ async function migrate({
110
110
  process.removeListener('unhandledRejection', unhandledRejectionHandler);
111
111
  }
112
112
 
113
- export default migrate;
114
- export { MigrationsManager };
115
- //# sourceMappingURL=index-node12.mjs.map
113
+ export { MigrationsManager, migrate as default };
114
+ //# sourceMappingURL=index-node14.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-node14.mjs","sources":["../src/readRecursiveDirectory.ts","../src/Manager.ts","../src/index.ts"],"sourcesContent":["import type { Stats } from 'fs';\nimport { readdir, stat as fsStat } from 'fs/promises';\n\nexport interface CallbackParam {\n filename: string;\n basedir: string;\n path: string;\n stat: Stats;\n}\n\nexport default async function readRecursiveDirectory(\n directory: string,\n callback: (param: CallbackParam) => void | Promise<void>,\n): Promise<void> {\n const files = await readdir(directory);\n\n await Promise.all(\n files.map(async (file): Promise<void> => {\n const path = `${directory}/${file}`;\n const stat = await fsStat(path);\n\n if (stat?.isDirectory()) {\n await readRecursiveDirectory(path, callback);\n return;\n }\n await callback({\n filename: file,\n basedir: directory,\n path,\n stat,\n });\n }),\n );\n}\n","import type { MongoStore, MongoInsertType, MongoBaseModel } from 'liwi-mongo';\n\nexport interface Migration extends MongoBaseModel {\n version: string;\n fileName: string;\n}\n\nexport default class MigrationsManager {\n store: MongoStore<Migration>;\n\n constructor(store: MongoStore<Migration>) {\n this.store = store;\n }\n\n findLastVersion(): Promise<string | undefined> {\n return this.store.findOne({}, { created: -1 }).then((row) => row?.version);\n }\n\n addMigrationDone(migration: MongoInsertType<Migration>): Promise<Migration> {\n return this.store.insertOne(migration);\n }\n}\n","/* eslint-disable unicorn/no-process-exit */\nimport type { NodeApplication, NodeConfig } from 'alp-types';\nimport { Logger } from 'nightingale-logger';\nimport semver from 'semver';\nimport type MigrationsManager from './Manager';\nimport type { CallbackParam } from './readRecursiveDirectory';\nimport readRecursiveDirectory from './readRecursiveDirectory';\n\nconst logger = new Logger('alp:migrations');\n\nexport { default as MigrationsManager } from './Manager';\n\nexport interface Options {\n app: NodeApplication;\n migrationsManager: MigrationsManager;\n config?: NodeConfig;\n dirname?: string;\n}\n\nexport default async function migrate({\n app,\n migrationsManager,\n config = app.config,\n dirname = `${app.dirname}/migrations`,\n}: Options): Promise<void> {\n const unhandledRejectionHandler = (reason: unknown): void => {\n logger.error('unhandledRejection', { err: reason });\n process.exit(1);\n };\n process.on('unhandledRejection', unhandledRejectionHandler);\n\n const packageVersion = config.packageConfig.version as string;\n const currentVersion = await migrationsManager.findLastVersion();\n\n let migrations: { version: string; fileName: string }[] = [];\n\n logger.info('migrate', { packageVersion, currentVersion });\n\n await readRecursiveDirectory(dirname, (res: CallbackParam) => {\n const fileName = res.path.slice(dirname.length + 1);\n\n if (!fileName.endsWith('.js')) {\n return;\n }\n\n const versionExecResult = /([\\d.]+)(_.*|\\.js)$/.exec(fileName);\n\n if (!versionExecResult || !versionExecResult[1]) {\n return;\n }\n\n const version: string = versionExecResult[1];\n\n if (currentVersion && semver.lte(version, currentVersion)) return;\n\n migrations.push({ version, fileName });\n });\n\n migrations = migrations.sort((a, b) =>\n semver.gt(a.version, b.version) ? 1 : -1,\n );\n\n try {\n for (const migration of migrations) {\n logger.info(`Migration to ${migration.fileName}`);\n try {\n const migrateFn: unknown = await import(\n `${dirname}/${migration.fileName}`\n );\n await (migrateFn as () => Promise<void>)();\n } catch (err) {\n logger.error(`Migration to ${migration.version} Failed !`);\n throw err;\n }\n\n logger.success(`Migration to ${migration.fileName} done !`);\n\n // only add to db if migration version <= package version\n if (semver.lte(migration.version, packageVersion)) {\n await migrationsManager.addMigrationDone(migration);\n }\n }\n } catch (err: any) {\n logger.error(err as Error);\n process.exit(1);\n }\n\n process.removeListener('unhandledRejection', unhandledRejectionHandler);\n}\n"],"names":["readRecursiveDirectory","directory","callback","files","readdir","Promise","all","map","file","path","stat","fsStat","isDirectory","filename","basedir","MigrationsManager","constructor","store","findLastVersion","findOne","created","then","row","version","addMigrationDone","migration","insertOne","logger","Logger","migrate","app","migrationsManager","config","dirname","unhandledRejectionHandler","reason","error","err","process","exit","on","packageVersion","packageConfig","currentVersion","migrations","info","res","fileName","slice","length","endsWith","versionExecResult","exec","semver","lte","push","sort","a","b","gt","migrateFn","success","removeListener"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAG7D,OAAO,KAAK,iBAAiB,MAAM,WAAW,CAAC;AAM/C,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAEzD,MAAM,WAAW,OAAO;IACtB,GAAG,EAAE,eAAe,CAAC;IACrB,iBAAiB,EAAE,iBAAiB,CAAC;IACrC,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,wBAA8B,OAAO,CAAC,EACpC,GAAG,EACH,iBAAiB,EACjB,MAAmB,EACnB,OAAqC,GACtC,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CA8DzB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAG7D,OAAO,KAAK,iBAAiB,MAAM,WAAW,CAAC;AAM/C,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAEzD,MAAM,WAAW,OAAO;IACtB,GAAG,EAAE,eAAe,CAAC;IACrB,iBAAiB,EAAE,iBAAiB,CAAC;IACrC,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,wBAA8B,OAAO,CAAC,EACpC,GAAG,EACH,iBAAiB,EACjB,MAAmB,EACnB,OAAqC,GACtC,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAgEzB"}
@@ -1 +1 @@
1
- {"version":3,"file":"readRecursiveDirectory.d.ts","sourceRoot":"","sources":["../src/readRecursiveDirectory.ts"],"names":[],"mappings":";AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,IAAI,CAAC;AAGhC,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,KAAK,CAAC;CACb;AAED,wBAA8B,sBAAsB,CAClD,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GACvD,OAAO,CAAC,IAAI,CAAC,CAsBf"}
1
+ {"version":3,"file":"readRecursiveDirectory.d.ts","sourceRoot":"","sources":["../src/readRecursiveDirectory.ts"],"names":[],"mappings":";AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,IAAI,CAAC;AAGhC,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,KAAK,CAAC;CACb;AAED,wBAA8B,sBAAsB,CAClD,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GACvD,OAAO,CAAC,IAAI,CAAC,CAoBf"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "alp-migrations",
3
- "version": "5.1.1",
3
+ "version": "6.0.1",
4
4
  "description": "migrations scripts in alp",
5
5
  "keywords": [],
6
6
  "author": "Christophe Hurpeau <christophe@hurpeau.com> (https://christophe.hurpeau.com)",
@@ -11,32 +11,28 @@
11
11
  "directory": "packages/alp-migrations"
12
12
  },
13
13
  "homepage": "https://github.com/christophehurpeau/alp",
14
+ "type": "module",
14
15
  "engines": {
15
- "node": ">=12.10.0"
16
+ "node": "^14.13.1 || >=16.0.0"
16
17
  },
17
- "main": "./index.js",
18
+ "main": "./dist/index-node14.mjs",
18
19
  "types": "./dist/index.d.ts",
19
20
  "exports": {
21
+ "./package.json": "./package.json",
20
22
  ".": {
21
23
  "node": {
22
- "development": {
23
- "import": "./dist/index-node12-dev.mjs",
24
- "require": "./dist/index-node12-dev.cjs.js"
25
- },
26
- "import": "./dist/index-node12.mjs",
27
- "require": "./dist/index-node12.cjs.js"
24
+ "import": "./dist/index-node14.mjs"
28
25
  }
29
26
  }
30
27
  },
31
- "module:node": "./dist/index-node12.mjs",
32
- "module:node-dev": "./dist/index-node12-dev.mjs",
28
+ "module:node": "./dist/index-node14.mjs",
33
29
  "sideEffects": false,
34
30
  "scripts": {
35
31
  "build": "pob-build && yarn run build:definitions",
36
32
  "build:definitions": "tsc -p tsconfig.build.json",
37
- "clean": "rm -Rf docs dist test/node6 coverage",
33
+ "clean": "rm -Rf dist",
38
34
  "lint": "yarn run lint:eslint",
39
- "lint:eslint": "yarn --cwd ../.. run eslint --ext .js,.mjs,.ts --report-unused-disable-directives --quiet packages/alp-migrations",
35
+ "lint:eslint": "cd ../.. && yarn run eslint --report-unused-disable-directives --resolve-plugins-relative-to . --quiet packages/alp-migrations",
40
36
  "watch": "pob-watch"
41
37
  },
42
38
  "prettier": {
@@ -48,9 +44,8 @@
48
44
  "babelEnvs": [
49
45
  {
50
46
  "target": "node",
51
- "version": "12",
47
+ "version": "14",
52
48
  "formats": [
53
- "cjs",
54
49
  "es"
55
50
  ]
56
51
  }
@@ -64,17 +59,16 @@
64
59
  },
65
60
  "dependencies": {
66
61
  "alp-types": "^3.0.0",
67
- "nightingale-logger": "^11.0.5",
68
- "semver": "^7.0.0"
62
+ "nightingale-logger": "^12.1.2",
63
+ "semver": "^7.3.5"
69
64
  },
70
65
  "devDependencies": {
71
- "@babel/core": "7.13.10",
72
- "@types/node": "14.14.35",
73
- "@types/semver": "7.3.4",
74
- "babel-preset-latest-node": "5.5.1",
75
- "liwi-mongo": "8.0.3",
76
- "pob-babel": "26.8.0",
77
- "rollup": "2.42.1"
66
+ "@babel/core": "7.16.7",
67
+ "@types/node": "16.11.19",
68
+ "@types/semver": "7.3.9",
69
+ "liwi-mongo": "8.3.1",
70
+ "pob-babel": "29.6.1",
71
+ "typescript": "4.5.4"
78
72
  },
79
- "gitHead": "79c867903744bff28dd6074834f9dd304f8d89ba"
73
+ "gitHead": "a69797c459e219e09fcf22cc2ea46aa60dce396b"
80
74
  }
@@ -0,0 +1,3 @@
1
+ import createRollupConfig from 'pob-babel/createRollupConfig.js';
2
+
3
+ export default createRollupConfig({});
@@ -7,7 +7,24 @@
7
7
  "plugins": ["@typescript-eslint"],
8
8
  "extends": [
9
9
  "@pob/eslint-config-typescript",
10
- "@pob/eslint-config-typescript-node"
10
+ "@pob/eslint-config-typescript/node"
11
11
  ],
12
- "ignorePatterns": ["*.d.ts"]
12
+ "ignorePatterns": ["*.d.ts"],
13
+ "overrides": [
14
+ {
15
+ "files": ["**/*.test.ts", "__tests__/**/*.ts"],
16
+ "extends": ["@pob/eslint-config-typescript/test"],
17
+ "env": {
18
+ "jest": true
19
+ },
20
+ "rules": {
21
+ "import/no-extraneous-dependencies": [
22
+ "error",
23
+ {
24
+ "devDependencies": true
25
+ }
26
+ ]
27
+ }
28
+ }
29
+ ]
13
30
  }
package/src/index.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  /* eslint-disable unicorn/no-process-exit */
2
2
  import type { NodeApplication, NodeConfig } from 'alp-types';
3
- import Logger from 'nightingale-logger';
3
+ import { Logger } from 'nightingale-logger';
4
4
  import semver from 'semver';
5
5
  import type MigrationsManager from './Manager';
6
6
  import type { CallbackParam } from './readRecursiveDirectory';
@@ -64,8 +64,10 @@ export default async function migrate({
64
64
  for (const migration of migrations) {
65
65
  logger.info(`Migration to ${migration.fileName}`);
66
66
  try {
67
- // eslint-disable-next-line import/no-dynamic-require, @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call, @typescript-eslint/no-var-requires
68
- await require(`${dirname}/${migration.fileName}`).default();
67
+ const migrateFn: unknown = await import(
68
+ `${dirname}/${migration.fileName}`
69
+ );
70
+ await (migrateFn as () => Promise<void>)();
69
71
  } catch (err) {
70
72
  logger.error(`Migration to ${migration.version} Failed !`);
71
73
  throw err;
@@ -78,8 +80,8 @@ export default async function migrate({
78
80
  await migrationsManager.addMigrationDone(migration);
79
81
  }
80
82
  }
81
- } catch (err) {
82
- logger.error(err);
83
+ } catch (err: any) {
84
+ logger.error(err as Error);
83
85
  process.exit(1);
84
86
  }
85
87
 
@@ -15,22 +15,20 @@ export default async function readRecursiveDirectory(
15
15
  const files = await readdir(directory);
16
16
 
17
17
  await Promise.all(
18
- files.map(
19
- async (file): Promise<void> => {
20
- const path = `${directory}/${file}`;
21
- const stat = await fsStat(path);
18
+ files.map(async (file): Promise<void> => {
19
+ const path = `${directory}/${file}`;
20
+ const stat = await fsStat(path);
22
21
 
23
- if (stat?.isDirectory()) {
24
- await readRecursiveDirectory(path, callback);
25
- return;
26
- }
27
- await callback({
28
- filename: file,
29
- basedir: directory,
30
- path,
31
- stat,
32
- });
33
- },
34
- ),
22
+ if (stat?.isDirectory()) {
23
+ await readRecursiveDirectory(path, callback);
24
+ return;
25
+ }
26
+ await callback({
27
+ filename: file,
28
+ basedir: directory,
29
+ path,
30
+ stat,
31
+ });
32
+ }),
35
33
  );
36
34
  }
@@ -1,124 +0,0 @@
1
- 'use strict';
2
-
3
- Object.defineProperty(exports, '__esModule', { value: true });
4
-
5
- const Logger = require('nightingale-logger');
6
- const semver = require('semver');
7
- const promises = require('fs/promises');
8
-
9
- function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e['default'] : e; }
10
-
11
- const Logger__default = /*#__PURE__*/_interopDefaultLegacy(Logger);
12
- const semver__default = /*#__PURE__*/_interopDefaultLegacy(semver);
13
-
14
- async function readRecursiveDirectory(directory, callback) {
15
- const files = await promises.readdir(directory);
16
- await Promise.all(files.map(async file => {
17
- const path = `${directory}/${file}`;
18
- const stat = await promises.stat(path);
19
-
20
- if (stat !== null && stat !== void 0 && stat.isDirectory()) {
21
- await readRecursiveDirectory(path, callback);
22
- return;
23
- }
24
-
25
- await callback({
26
- filename: file,
27
- basedir: directory,
28
- path,
29
- stat
30
- });
31
- }));
32
- }
33
-
34
- class MigrationsManager {
35
- constructor(store) {
36
- this.store = store;
37
- }
38
-
39
- findLastVersion() {
40
- return this.store.findOne({}, {
41
- created: -1
42
- }).then(row => row === null || row === void 0 ? void 0 : row.version);
43
- }
44
-
45
- addMigrationDone(migration) {
46
- return this.store.insertOne(migration);
47
- }
48
-
49
- }
50
-
51
- /* eslint-disable unicorn/no-process-exit */
52
- const logger = new Logger__default('alp:migrations');
53
- async function migrate({
54
- app,
55
- migrationsManager,
56
- config = app.config,
57
- dirname = `${app.dirname}/migrations`
58
- }) {
59
- const unhandledRejectionHandler = reason => {
60
- logger.error('unhandledRejection', {
61
- err: reason
62
- });
63
- process.exit(1);
64
- };
65
-
66
- process.on('unhandledRejection', unhandledRejectionHandler);
67
- const packageVersion = config.packageConfig.version;
68
- const currentVersion = await migrationsManager.findLastVersion();
69
- let migrations = [];
70
- logger.info('migrate', {
71
- packageVersion,
72
- currentVersion
73
- });
74
- await readRecursiveDirectory(dirname, res => {
75
- const fileName = res.path.slice(dirname.length + 1);
76
-
77
- if (!fileName.endsWith('.js')) {
78
- return;
79
- }
80
-
81
- const versionExecResult = /([\d.]+)(_.*|\.js)$/.exec(fileName);
82
-
83
- if (!versionExecResult || !versionExecResult[1]) {
84
- return;
85
- }
86
-
87
- const version = versionExecResult[1];
88
- if (currentVersion && semver__default.lte(version, currentVersion)) return;
89
- migrations.push({
90
- version,
91
- fileName
92
- });
93
- });
94
- migrations = migrations.sort((a, b) => semver__default.gt(a.version, b.version) ? 1 : -1);
95
-
96
- try {
97
- for (const migration of migrations) {
98
- logger.info(`Migration to ${migration.fileName}`);
99
-
100
- try {
101
- // eslint-disable-next-line import/no-dynamic-require, @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call, @typescript-eslint/no-var-requires
102
- await require(`${dirname}/${migration.fileName}`).default();
103
- } catch (err) {
104
- logger.error(`Migration to ${migration.version} Failed !`);
105
- throw err;
106
- }
107
-
108
- logger.success(`Migration to ${migration.fileName} done !`); // only add to db if migration version <= package version
109
-
110
- if (semver__default.lte(migration.version, packageVersion)) {
111
- await migrationsManager.addMigrationDone(migration);
112
- }
113
- }
114
- } catch (err) {
115
- logger.error(err);
116
- process.exit(1);
117
- }
118
-
119
- process.removeListener('unhandledRejection', unhandledRejectionHandler);
120
- }
121
-
122
- exports.MigrationsManager = MigrationsManager;
123
- exports.default = migrate;
124
- //# sourceMappingURL=index-node12-dev.cjs.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index-node12-dev.cjs.js","sources":["../src/readRecursiveDirectory.ts","../src/Manager.ts","../src/index.ts"],"sourcesContent":["import type { Stats } from 'fs';\nimport { readdir, stat as fsStat } from 'fs/promises';\n\nexport interface CallbackParam {\n filename: string;\n basedir: string;\n path: string;\n stat: Stats;\n}\n\nexport default async function readRecursiveDirectory(\n directory: string,\n callback: (param: CallbackParam) => void | Promise<void>,\n): Promise<void> {\n const files = await readdir(directory);\n\n await Promise.all(\n files.map(\n async (file): Promise<void> => {\n const path = `${directory}/${file}`;\n const stat = await fsStat(path);\n\n if (stat?.isDirectory()) {\n await readRecursiveDirectory(path, callback);\n return;\n }\n await callback({\n filename: file,\n basedir: directory,\n path,\n stat,\n });\n },\n ),\n );\n}\n","import type { MongoStore, MongoInsertType, MongoBaseModel } from 'liwi-mongo';\n\nexport interface Migration extends MongoBaseModel {\n version: string;\n fileName: string;\n}\n\nexport default class MigrationsManager {\n store: MongoStore<Migration>;\n\n constructor(store: MongoStore<Migration>) {\n this.store = store;\n }\n\n findLastVersion(): Promise<string | undefined> {\n return this.store.findOne({}, { created: -1 }).then((row) => row?.version);\n }\n\n addMigrationDone(migration: MongoInsertType<Migration>): Promise<Migration> {\n return this.store.insertOne(migration);\n }\n}\n","/* eslint-disable unicorn/no-process-exit */\nimport type { NodeApplication, NodeConfig } from 'alp-types';\nimport Logger from 'nightingale-logger';\nimport semver from 'semver';\nimport type MigrationsManager from './Manager';\nimport type { CallbackParam } from './readRecursiveDirectory';\nimport readRecursiveDirectory from './readRecursiveDirectory';\n\nconst logger = new Logger('alp:migrations');\n\nexport { default as MigrationsManager } from './Manager';\n\nexport interface Options {\n app: NodeApplication;\n migrationsManager: MigrationsManager;\n config?: NodeConfig;\n dirname?: string;\n}\n\nexport default async function migrate({\n app,\n migrationsManager,\n config = app.config,\n dirname = `${app.dirname}/migrations`,\n}: Options): Promise<void> {\n const unhandledRejectionHandler = (reason: unknown): void => {\n logger.error('unhandledRejection', { err: reason });\n process.exit(1);\n };\n process.on('unhandledRejection', unhandledRejectionHandler);\n\n const packageVersion = config.packageConfig.version as string;\n const currentVersion = await migrationsManager.findLastVersion();\n\n let migrations: { version: string; fileName: string }[] = [];\n\n logger.info('migrate', { packageVersion, currentVersion });\n\n await readRecursiveDirectory(dirname, (res: CallbackParam) => {\n const fileName = res.path.slice(dirname.length + 1);\n\n if (!fileName.endsWith('.js')) {\n return;\n }\n\n const versionExecResult = /([\\d.]+)(_.*|\\.js)$/.exec(fileName);\n\n if (!versionExecResult || !versionExecResult[1]) {\n return;\n }\n\n const version: string = versionExecResult[1];\n\n if (currentVersion && semver.lte(version, currentVersion)) return;\n\n migrations.push({ version, fileName });\n });\n\n migrations = migrations.sort((a, b) =>\n semver.gt(a.version, b.version) ? 1 : -1,\n );\n\n try {\n for (const migration of migrations) {\n logger.info(`Migration to ${migration.fileName}`);\n try {\n // eslint-disable-next-line import/no-dynamic-require, @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call, @typescript-eslint/no-var-requires\n await require(`${dirname}/${migration.fileName}`).default();\n } catch (err) {\n logger.error(`Migration to ${migration.version} Failed !`);\n throw err;\n }\n\n logger.success(`Migration to ${migration.fileName} done !`);\n\n // only add to db if migration version <= package version\n if (semver.lte(migration.version, packageVersion)) {\n await migrationsManager.addMigrationDone(migration);\n }\n }\n } catch (err) {\n logger.error(err);\n process.exit(1);\n }\n\n process.removeListener('unhandledRejection', unhandledRejectionHandler);\n}\n"],"names":["readRecursiveDirectory","directory","callback","files","readdir","Promise","all","map","file","path","stat","fsStat","isDirectory","filename","basedir","MigrationsManager","constructor","store","findLastVersion","findOne","created","then","row","version","addMigrationDone","migration","insertOne","logger","Logger","migrate","app","migrationsManager","config","dirname","unhandledRejectionHandler","reason","error","err","process","exit","on","packageVersion","packageConfig","currentVersion","migrations","info","res","fileName","slice","length","endsWith","versionExecResult","exec","semver","lte","push","sort","a","b","gt","require","default","success","removeListener"],"mappings":"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"}
@@ -1,115 +0,0 @@
1
- import Logger from 'nightingale-logger';
2
- import semver from 'semver';
3
- import { readdir, stat } from 'fs/promises';
4
-
5
- async function readRecursiveDirectory(directory, callback) {
6
- const files = await readdir(directory);
7
- await Promise.all(files.map(async file => {
8
- const path = `${directory}/${file}`;
9
- const stat$1 = await stat(path);
10
-
11
- if (stat$1 !== null && stat$1 !== void 0 && stat$1.isDirectory()) {
12
- await readRecursiveDirectory(path, callback);
13
- return;
14
- }
15
-
16
- await callback({
17
- filename: file,
18
- basedir: directory,
19
- path,
20
- stat: stat$1
21
- });
22
- }));
23
- }
24
-
25
- class MigrationsManager {
26
- constructor(store) {
27
- this.store = store;
28
- }
29
-
30
- findLastVersion() {
31
- return this.store.findOne({}, {
32
- created: -1
33
- }).then(row => row === null || row === void 0 ? void 0 : row.version);
34
- }
35
-
36
- addMigrationDone(migration) {
37
- return this.store.insertOne(migration);
38
- }
39
-
40
- }
41
-
42
- /* eslint-disable unicorn/no-process-exit */
43
- const logger = new Logger('alp:migrations');
44
- async function migrate({
45
- app,
46
- migrationsManager,
47
- config = app.config,
48
- dirname = `${app.dirname}/migrations`
49
- }) {
50
- const unhandledRejectionHandler = reason => {
51
- logger.error('unhandledRejection', {
52
- err: reason
53
- });
54
- process.exit(1);
55
- };
56
-
57
- process.on('unhandledRejection', unhandledRejectionHandler);
58
- const packageVersion = config.packageConfig.version;
59
- const currentVersion = await migrationsManager.findLastVersion();
60
- let migrations = [];
61
- logger.info('migrate', {
62
- packageVersion,
63
- currentVersion
64
- });
65
- await readRecursiveDirectory(dirname, res => {
66
- const fileName = res.path.slice(dirname.length + 1);
67
-
68
- if (!fileName.endsWith('.js')) {
69
- return;
70
- }
71
-
72
- const versionExecResult = /([\d.]+)(_.*|\.js)$/.exec(fileName);
73
-
74
- if (!versionExecResult || !versionExecResult[1]) {
75
- return;
76
- }
77
-
78
- const version = versionExecResult[1];
79
- if (currentVersion && semver.lte(version, currentVersion)) return;
80
- migrations.push({
81
- version,
82
- fileName
83
- });
84
- });
85
- migrations = migrations.sort((a, b) => semver.gt(a.version, b.version) ? 1 : -1);
86
-
87
- try {
88
- for (const migration of migrations) {
89
- logger.info(`Migration to ${migration.fileName}`);
90
-
91
- try {
92
- // eslint-disable-next-line import/no-dynamic-require, @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call, @typescript-eslint/no-var-requires
93
- await require(`${dirname}/${migration.fileName}`).default();
94
- } catch (err) {
95
- logger.error(`Migration to ${migration.version} Failed !`);
96
- throw err;
97
- }
98
-
99
- logger.success(`Migration to ${migration.fileName} done !`); // only add to db if migration version <= package version
100
-
101
- if (semver.lte(migration.version, packageVersion)) {
102
- await migrationsManager.addMigrationDone(migration);
103
- }
104
- }
105
- } catch (err) {
106
- logger.error(err);
107
- process.exit(1);
108
- }
109
-
110
- process.removeListener('unhandledRejection', unhandledRejectionHandler);
111
- }
112
-
113
- export default migrate;
114
- export { MigrationsManager };
115
- //# sourceMappingURL=index-node12-dev.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index-node12-dev.mjs","sources":["../src/readRecursiveDirectory.ts","../src/Manager.ts","../src/index.ts"],"sourcesContent":["import type { Stats } from 'fs';\nimport { readdir, stat as fsStat } from 'fs/promises';\n\nexport interface CallbackParam {\n filename: string;\n basedir: string;\n path: string;\n stat: Stats;\n}\n\nexport default async function readRecursiveDirectory(\n directory: string,\n callback: (param: CallbackParam) => void | Promise<void>,\n): Promise<void> {\n const files = await readdir(directory);\n\n await Promise.all(\n files.map(\n async (file): Promise<void> => {\n const path = `${directory}/${file}`;\n const stat = await fsStat(path);\n\n if (stat?.isDirectory()) {\n await readRecursiveDirectory(path, callback);\n return;\n }\n await callback({\n filename: file,\n basedir: directory,\n path,\n stat,\n });\n },\n ),\n );\n}\n","import type { MongoStore, MongoInsertType, MongoBaseModel } from 'liwi-mongo';\n\nexport interface Migration extends MongoBaseModel {\n version: string;\n fileName: string;\n}\n\nexport default class MigrationsManager {\n store: MongoStore<Migration>;\n\n constructor(store: MongoStore<Migration>) {\n this.store = store;\n }\n\n findLastVersion(): Promise<string | undefined> {\n return this.store.findOne({}, { created: -1 }).then((row) => row?.version);\n }\n\n addMigrationDone(migration: MongoInsertType<Migration>): Promise<Migration> {\n return this.store.insertOne(migration);\n }\n}\n","/* eslint-disable unicorn/no-process-exit */\nimport type { NodeApplication, NodeConfig } from 'alp-types';\nimport Logger from 'nightingale-logger';\nimport semver from 'semver';\nimport type MigrationsManager from './Manager';\nimport type { CallbackParam } from './readRecursiveDirectory';\nimport readRecursiveDirectory from './readRecursiveDirectory';\n\nconst logger = new Logger('alp:migrations');\n\nexport { default as MigrationsManager } from './Manager';\n\nexport interface Options {\n app: NodeApplication;\n migrationsManager: MigrationsManager;\n config?: NodeConfig;\n dirname?: string;\n}\n\nexport default async function migrate({\n app,\n migrationsManager,\n config = app.config,\n dirname = `${app.dirname}/migrations`,\n}: Options): Promise<void> {\n const unhandledRejectionHandler = (reason: unknown): void => {\n logger.error('unhandledRejection', { err: reason });\n process.exit(1);\n };\n process.on('unhandledRejection', unhandledRejectionHandler);\n\n const packageVersion = config.packageConfig.version as string;\n const currentVersion = await migrationsManager.findLastVersion();\n\n let migrations: { version: string; fileName: string }[] = [];\n\n logger.info('migrate', { packageVersion, currentVersion });\n\n await readRecursiveDirectory(dirname, (res: CallbackParam) => {\n const fileName = res.path.slice(dirname.length + 1);\n\n if (!fileName.endsWith('.js')) {\n return;\n }\n\n const versionExecResult = /([\\d.]+)(_.*|\\.js)$/.exec(fileName);\n\n if (!versionExecResult || !versionExecResult[1]) {\n return;\n }\n\n const version: string = versionExecResult[1];\n\n if (currentVersion && semver.lte(version, currentVersion)) return;\n\n migrations.push({ version, fileName });\n });\n\n migrations = migrations.sort((a, b) =>\n semver.gt(a.version, b.version) ? 1 : -1,\n );\n\n try {\n for (const migration of migrations) {\n logger.info(`Migration to ${migration.fileName}`);\n try {\n // eslint-disable-next-line import/no-dynamic-require, @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call, @typescript-eslint/no-var-requires\n await require(`${dirname}/${migration.fileName}`).default();\n } catch (err) {\n logger.error(`Migration to ${migration.version} Failed !`);\n throw err;\n }\n\n logger.success(`Migration to ${migration.fileName} done !`);\n\n // only add to db if migration version <= package version\n if (semver.lte(migration.version, packageVersion)) {\n await migrationsManager.addMigrationDone(migration);\n }\n }\n } catch (err) {\n logger.error(err);\n process.exit(1);\n }\n\n process.removeListener('unhandledRejection', unhandledRejectionHandler);\n}\n"],"names":["readRecursiveDirectory","directory","callback","files","readdir","Promise","all","map","file","path","stat","fsStat","isDirectory","filename","basedir","MigrationsManager","constructor","store","findLastVersion","findOne","created","then","row","version","addMigrationDone","migration","insertOne","logger","Logger","migrate","app","migrationsManager","config","dirname","unhandledRejectionHandler","reason","error","err","process","exit","on","packageVersion","packageConfig","currentVersion","migrations","info","res","fileName","slice","length","endsWith","versionExecResult","exec","semver","lte","push","sort","a","b","gt","require","default","success","removeListener"],"mappings":"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"}
@@ -1,124 +0,0 @@
1
- 'use strict';
2
-
3
- Object.defineProperty(exports, '__esModule', { value: true });
4
-
5
- const Logger = require('nightingale-logger');
6
- const semver = require('semver');
7
- const promises = require('fs/promises');
8
-
9
- function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e['default'] : e; }
10
-
11
- const Logger__default = /*#__PURE__*/_interopDefaultLegacy(Logger);
12
- const semver__default = /*#__PURE__*/_interopDefaultLegacy(semver);
13
-
14
- async function readRecursiveDirectory(directory, callback) {
15
- const files = await promises.readdir(directory);
16
- await Promise.all(files.map(async file => {
17
- const path = `${directory}/${file}`;
18
- const stat = await promises.stat(path);
19
-
20
- if (stat !== null && stat !== void 0 && stat.isDirectory()) {
21
- await readRecursiveDirectory(path, callback);
22
- return;
23
- }
24
-
25
- await callback({
26
- filename: file,
27
- basedir: directory,
28
- path,
29
- stat
30
- });
31
- }));
32
- }
33
-
34
- class MigrationsManager {
35
- constructor(store) {
36
- this.store = store;
37
- }
38
-
39
- findLastVersion() {
40
- return this.store.findOne({}, {
41
- created: -1
42
- }).then(row => row === null || row === void 0 ? void 0 : row.version);
43
- }
44
-
45
- addMigrationDone(migration) {
46
- return this.store.insertOne(migration);
47
- }
48
-
49
- }
50
-
51
- /* eslint-disable unicorn/no-process-exit */
52
- const logger = new Logger__default('alp:migrations');
53
- async function migrate({
54
- app,
55
- migrationsManager,
56
- config = app.config,
57
- dirname = `${app.dirname}/migrations`
58
- }) {
59
- const unhandledRejectionHandler = reason => {
60
- logger.error('unhandledRejection', {
61
- err: reason
62
- });
63
- process.exit(1);
64
- };
65
-
66
- process.on('unhandledRejection', unhandledRejectionHandler);
67
- const packageVersion = config.packageConfig.version;
68
- const currentVersion = await migrationsManager.findLastVersion();
69
- let migrations = [];
70
- logger.info('migrate', {
71
- packageVersion,
72
- currentVersion
73
- });
74
- await readRecursiveDirectory(dirname, res => {
75
- const fileName = res.path.slice(dirname.length + 1);
76
-
77
- if (!fileName.endsWith('.js')) {
78
- return;
79
- }
80
-
81
- const versionExecResult = /([\d.]+)(_.*|\.js)$/.exec(fileName);
82
-
83
- if (!versionExecResult || !versionExecResult[1]) {
84
- return;
85
- }
86
-
87
- const version = versionExecResult[1];
88
- if (currentVersion && semver__default.lte(version, currentVersion)) return;
89
- migrations.push({
90
- version,
91
- fileName
92
- });
93
- });
94
- migrations = migrations.sort((a, b) => semver__default.gt(a.version, b.version) ? 1 : -1);
95
-
96
- try {
97
- for (const migration of migrations) {
98
- logger.info(`Migration to ${migration.fileName}`);
99
-
100
- try {
101
- // eslint-disable-next-line import/no-dynamic-require, @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call, @typescript-eslint/no-var-requires
102
- await require(`${dirname}/${migration.fileName}`).default();
103
- } catch (err) {
104
- logger.error(`Migration to ${migration.version} Failed !`);
105
- throw err;
106
- }
107
-
108
- logger.success(`Migration to ${migration.fileName} done !`); // only add to db if migration version <= package version
109
-
110
- if (semver__default.lte(migration.version, packageVersion)) {
111
- await migrationsManager.addMigrationDone(migration);
112
- }
113
- }
114
- } catch (err) {
115
- logger.error(err);
116
- process.exit(1);
117
- }
118
-
119
- process.removeListener('unhandledRejection', unhandledRejectionHandler);
120
- }
121
-
122
- exports.MigrationsManager = MigrationsManager;
123
- exports.default = migrate;
124
- //# sourceMappingURL=index-node12.cjs.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index-node12.cjs.js","sources":["../src/readRecursiveDirectory.ts","../src/Manager.ts","../src/index.ts"],"sourcesContent":["import type { Stats } from 'fs';\nimport { readdir, stat as fsStat } from 'fs/promises';\n\nexport interface CallbackParam {\n filename: string;\n basedir: string;\n path: string;\n stat: Stats;\n}\n\nexport default async function readRecursiveDirectory(\n directory: string,\n callback: (param: CallbackParam) => void | Promise<void>,\n): Promise<void> {\n const files = await readdir(directory);\n\n await Promise.all(\n files.map(\n async (file): Promise<void> => {\n const path = `${directory}/${file}`;\n const stat = await fsStat(path);\n\n if (stat?.isDirectory()) {\n await readRecursiveDirectory(path, callback);\n return;\n }\n await callback({\n filename: file,\n basedir: directory,\n path,\n stat,\n });\n },\n ),\n );\n}\n","import type { MongoStore, MongoInsertType, MongoBaseModel } from 'liwi-mongo';\n\nexport interface Migration extends MongoBaseModel {\n version: string;\n fileName: string;\n}\n\nexport default class MigrationsManager {\n store: MongoStore<Migration>;\n\n constructor(store: MongoStore<Migration>) {\n this.store = store;\n }\n\n findLastVersion(): Promise<string | undefined> {\n return this.store.findOne({}, { created: -1 }).then((row) => row?.version);\n }\n\n addMigrationDone(migration: MongoInsertType<Migration>): Promise<Migration> {\n return this.store.insertOne(migration);\n }\n}\n","/* eslint-disable unicorn/no-process-exit */\nimport type { NodeApplication, NodeConfig } from 'alp-types';\nimport Logger from 'nightingale-logger';\nimport semver from 'semver';\nimport type MigrationsManager from './Manager';\nimport type { CallbackParam } from './readRecursiveDirectory';\nimport readRecursiveDirectory from './readRecursiveDirectory';\n\nconst logger = new Logger('alp:migrations');\n\nexport { default as MigrationsManager } from './Manager';\n\nexport interface Options {\n app: NodeApplication;\n migrationsManager: MigrationsManager;\n config?: NodeConfig;\n dirname?: string;\n}\n\nexport default async function migrate({\n app,\n migrationsManager,\n config = app.config,\n dirname = `${app.dirname}/migrations`,\n}: Options): Promise<void> {\n const unhandledRejectionHandler = (reason: unknown): void => {\n logger.error('unhandledRejection', { err: reason });\n process.exit(1);\n };\n process.on('unhandledRejection', unhandledRejectionHandler);\n\n const packageVersion = config.packageConfig.version as string;\n const currentVersion = await migrationsManager.findLastVersion();\n\n let migrations: { version: string; fileName: string }[] = [];\n\n logger.info('migrate', { packageVersion, currentVersion });\n\n await readRecursiveDirectory(dirname, (res: CallbackParam) => {\n const fileName = res.path.slice(dirname.length + 1);\n\n if (!fileName.endsWith('.js')) {\n return;\n }\n\n const versionExecResult = /([\\d.]+)(_.*|\\.js)$/.exec(fileName);\n\n if (!versionExecResult || !versionExecResult[1]) {\n return;\n }\n\n const version: string = versionExecResult[1];\n\n if (currentVersion && semver.lte(version, currentVersion)) return;\n\n migrations.push({ version, fileName });\n });\n\n migrations = migrations.sort((a, b) =>\n semver.gt(a.version, b.version) ? 1 : -1,\n );\n\n try {\n for (const migration of migrations) {\n logger.info(`Migration to ${migration.fileName}`);\n try {\n // eslint-disable-next-line import/no-dynamic-require, @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call, @typescript-eslint/no-var-requires\n await require(`${dirname}/${migration.fileName}`).default();\n } catch (err) {\n logger.error(`Migration to ${migration.version} Failed !`);\n throw err;\n }\n\n logger.success(`Migration to ${migration.fileName} done !`);\n\n // only add to db if migration version <= package version\n if (semver.lte(migration.version, packageVersion)) {\n await migrationsManager.addMigrationDone(migration);\n }\n }\n } catch (err) {\n logger.error(err);\n process.exit(1);\n }\n\n process.removeListener('unhandledRejection', unhandledRejectionHandler);\n}\n"],"names":["readRecursiveDirectory","directory","callback","files","readdir","Promise","all","map","file","path","stat","fsStat","isDirectory","filename","basedir","MigrationsManager","constructor","store","findLastVersion","findOne","created","then","row","version","addMigrationDone","migration","insertOne","logger","Logger","migrate","app","migrationsManager","config","dirname","unhandledRejectionHandler","reason","error","err","process","exit","on","packageVersion","packageConfig","currentVersion","migrations","info","res","fileName","slice","length","endsWith","versionExecResult","exec","semver","lte","push","sort","a","b","gt","require","default","success","removeListener"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index-node12.mjs","sources":["../src/readRecursiveDirectory.ts","../src/Manager.ts","../src/index.ts"],"sourcesContent":["import type { Stats } from 'fs';\nimport { readdir, stat as fsStat } from 'fs/promises';\n\nexport interface CallbackParam {\n filename: string;\n basedir: string;\n path: string;\n stat: Stats;\n}\n\nexport default async function readRecursiveDirectory(\n directory: string,\n callback: (param: CallbackParam) => void | Promise<void>,\n): Promise<void> {\n const files = await readdir(directory);\n\n await Promise.all(\n files.map(\n async (file): Promise<void> => {\n const path = `${directory}/${file}`;\n const stat = await fsStat(path);\n\n if (stat?.isDirectory()) {\n await readRecursiveDirectory(path, callback);\n return;\n }\n await callback({\n filename: file,\n basedir: directory,\n path,\n stat,\n });\n },\n ),\n );\n}\n","import type { MongoStore, MongoInsertType, MongoBaseModel } from 'liwi-mongo';\n\nexport interface Migration extends MongoBaseModel {\n version: string;\n fileName: string;\n}\n\nexport default class MigrationsManager {\n store: MongoStore<Migration>;\n\n constructor(store: MongoStore<Migration>) {\n this.store = store;\n }\n\n findLastVersion(): Promise<string | undefined> {\n return this.store.findOne({}, { created: -1 }).then((row) => row?.version);\n }\n\n addMigrationDone(migration: MongoInsertType<Migration>): Promise<Migration> {\n return this.store.insertOne(migration);\n }\n}\n","/* eslint-disable unicorn/no-process-exit */\nimport type { NodeApplication, NodeConfig } from 'alp-types';\nimport Logger from 'nightingale-logger';\nimport semver from 'semver';\nimport type MigrationsManager from './Manager';\nimport type { CallbackParam } from './readRecursiveDirectory';\nimport readRecursiveDirectory from './readRecursiveDirectory';\n\nconst logger = new Logger('alp:migrations');\n\nexport { default as MigrationsManager } from './Manager';\n\nexport interface Options {\n app: NodeApplication;\n migrationsManager: MigrationsManager;\n config?: NodeConfig;\n dirname?: string;\n}\n\nexport default async function migrate({\n app,\n migrationsManager,\n config = app.config,\n dirname = `${app.dirname}/migrations`,\n}: Options): Promise<void> {\n const unhandledRejectionHandler = (reason: unknown): void => {\n logger.error('unhandledRejection', { err: reason });\n process.exit(1);\n };\n process.on('unhandledRejection', unhandledRejectionHandler);\n\n const packageVersion = config.packageConfig.version as string;\n const currentVersion = await migrationsManager.findLastVersion();\n\n let migrations: { version: string; fileName: string }[] = [];\n\n logger.info('migrate', { packageVersion, currentVersion });\n\n await readRecursiveDirectory(dirname, (res: CallbackParam) => {\n const fileName = res.path.slice(dirname.length + 1);\n\n if (!fileName.endsWith('.js')) {\n return;\n }\n\n const versionExecResult = /([\\d.]+)(_.*|\\.js)$/.exec(fileName);\n\n if (!versionExecResult || !versionExecResult[1]) {\n return;\n }\n\n const version: string = versionExecResult[1];\n\n if (currentVersion && semver.lte(version, currentVersion)) return;\n\n migrations.push({ version, fileName });\n });\n\n migrations = migrations.sort((a, b) =>\n semver.gt(a.version, b.version) ? 1 : -1,\n );\n\n try {\n for (const migration of migrations) {\n logger.info(`Migration to ${migration.fileName}`);\n try {\n // eslint-disable-next-line import/no-dynamic-require, @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call, @typescript-eslint/no-var-requires\n await require(`${dirname}/${migration.fileName}`).default();\n } catch (err) {\n logger.error(`Migration to ${migration.version} Failed !`);\n throw err;\n }\n\n logger.success(`Migration to ${migration.fileName} done !`);\n\n // only add to db if migration version <= package version\n if (semver.lte(migration.version, packageVersion)) {\n await migrationsManager.addMigrationDone(migration);\n }\n }\n } catch (err) {\n logger.error(err);\n process.exit(1);\n }\n\n process.removeListener('unhandledRejection', unhandledRejectionHandler);\n}\n"],"names":["readRecursiveDirectory","directory","callback","files","readdir","Promise","all","map","file","path","stat","fsStat","isDirectory","filename","basedir","MigrationsManager","constructor","store","findLastVersion","findOne","created","then","row","version","addMigrationDone","migration","insertOne","logger","Logger","migrate","app","migrationsManager","config","dirname","unhandledRejectionHandler","reason","error","err","process","exit","on","packageVersion","packageConfig","currentVersion","migrations","info","res","fileName","slice","length","endsWith","versionExecResult","exec","semver","lte","push","sort","a","b","gt","require","default","success","removeListener"],"mappings":"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"}
package/index.js DELETED
@@ -1,6 +0,0 @@
1
- /* eslint-disable import/no-dynamic-require */
2
-
3
- 'use strict';
4
-
5
- const production = process.env.NODE_ENV === 'production';
6
- module.exports = require(`./dist/index-node12${production ? '' : '-dev'}.cjs`);