alp-migrations 5.2.0 → 6.0.2
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 +1 -1
- package/CHANGELOG.md +48 -0
- package/dist/{index-node12.mjs → index-node14.mjs} +7 -8
- package/dist/index-node14.mjs.map +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/readRecursiveDirectory.d.ts.map +1 -1
- package/package.json +22 -27
- package/rollup.config.mjs +5 -0
- package/src/.eslintrc.json +19 -2
- package/src/index.ts +7 -5
- package/src/readRecursiveDirectory.ts +14 -16
- package/dist/index-node12-dev.cjs.js +0 -124
- package/dist/index-node12-dev.cjs.js.map +0 -1
- package/dist/index-node12-dev.mjs +0 -115
- package/dist/index-node12-dev.mjs.map +0 -1
- package/dist/index-node12.cjs.js +0 -124
- package/dist/index-node12.cjs.js.map +0 -1
- package/dist/index-node12.mjs.map +0 -1
- package/index.js +0 -6
package/.eslintrc.json
CHANGED
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.2](https://github.com/christophehurpeau/alp/compare/alp-migrations@6.0.1...alp-migrations@6.0.2) (2022-02-06)
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
### Bug Fixes
|
|
10
|
+
|
|
11
|
+
* request.searchParams ([d4552c6](https://github.com/christophehurpeau/alp/commit/d4552c6ce41dc3bf7aeeaa24f5e4ddc16164ae7f))
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
## [6.0.1](https://github.com/christophehurpeau/alp/compare/alp-migrations@6.0.0...alp-migrations@6.0.1) (2022-01-15)
|
|
18
|
+
|
|
19
|
+
**Note:** Version bump only for package alp-migrations
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
# [6.0.0](https://github.com/christophehurpeau/alp/compare/alp-migrations@5.2.1...alp-migrations@6.0.0) (2022-01-02)
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
### Bug Fixes
|
|
29
|
+
|
|
30
|
+
* update nightingale and fix tests ([3691716](https://github.com/christophehurpeau/alp/commit/36917162d0ee3dccc07384caf018b7760d98b744))
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
### Features
|
|
34
|
+
|
|
35
|
+
* use ESM and drop node 12 ([f45054e](https://github.com/christophehurpeau/alp/commit/f45054e931eea88451d183722797eba057511236))
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
### BREAKING CHANGES
|
|
39
|
+
|
|
40
|
+
* requires node 14 and ESM
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
## [5.2.1](https://github.com/christophehurpeau/alp/compare/alp-migrations@5.2.0...alp-migrations@5.2.1) (2021-04-10)
|
|
47
|
+
|
|
48
|
+
**Note:** Version bump only for package alp-migrations
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
|
|
6
54
|
# [5.2.0](https://github.com/christophehurpeau/alp/compare/alp-migrations@5.1.1...alp-migrations@5.2.0) (2021-03-28)
|
|
7
55
|
|
|
8
56
|
|
|
@@ -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
|
|
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
|
|
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
|
-
|
|
93
|
-
await
|
|
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
|
|
114
|
-
|
|
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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"}
|
package/dist/index.d.ts.map
CHANGED
|
@@ -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,
|
|
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,
|
|
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": "
|
|
3
|
+
"version": "6.0.2",
|
|
4
4
|
"description": "migrations scripts in alp",
|
|
5
5
|
"keywords": [],
|
|
6
6
|
"author": "Christophe Hurpeau <christophe@hurpeau.com> (https://christophe.hurpeau.com)",
|
|
@@ -11,33 +11,30 @@
|
|
|
11
11
|
"directory": "packages/alp-migrations"
|
|
12
12
|
},
|
|
13
13
|
"homepage": "https://github.com/christophehurpeau/alp",
|
|
14
|
+
"type": "module",
|
|
14
15
|
"engines": {
|
|
15
|
-
"node": ">=
|
|
16
|
+
"node": "^14.13.1 || >=16.0.0"
|
|
16
17
|
},
|
|
17
|
-
"main": "./index.
|
|
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
|
-
"
|
|
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-
|
|
32
|
-
"module:node-dev": "./dist/index-node12-dev.mjs",
|
|
28
|
+
"module:node": "./dist/index-node14.mjs",
|
|
33
29
|
"sideEffects": false,
|
|
34
30
|
"scripts": {
|
|
35
|
-
"build": "
|
|
31
|
+
"build": "yarn clean:build && rollup --config rollup.config.mjs && yarn run build:definitions",
|
|
36
32
|
"build:definitions": "tsc -p tsconfig.build.json",
|
|
37
|
-
"clean": "
|
|
33
|
+
"clean": "yarn clean:build",
|
|
34
|
+
"clean:build": "rm -Rf dist",
|
|
38
35
|
"lint": "yarn run lint:eslint",
|
|
39
|
-
"lint:eslint": "
|
|
40
|
-
"watch": "
|
|
36
|
+
"lint:eslint": "cd ../.. && yarn run eslint --report-unused-disable-directives --resolve-plugins-relative-to . --quiet packages/alp-migrations",
|
|
37
|
+
"watch": "yarn clean:build && rollup --config rollup.config.mjs --watch"
|
|
41
38
|
},
|
|
42
39
|
"prettier": {
|
|
43
40
|
"trailingComma": "all",
|
|
@@ -48,9 +45,8 @@
|
|
|
48
45
|
"babelEnvs": [
|
|
49
46
|
{
|
|
50
47
|
"target": "node",
|
|
51
|
-
"version": "
|
|
48
|
+
"version": "14",
|
|
52
49
|
"formats": [
|
|
53
|
-
"cjs",
|
|
54
50
|
"es"
|
|
55
51
|
]
|
|
56
52
|
}
|
|
@@ -63,18 +59,17 @@
|
|
|
63
59
|
"liwi-mongo": "^8.0.1"
|
|
64
60
|
},
|
|
65
61
|
"dependencies": {
|
|
66
|
-
"alp-types": "
|
|
67
|
-
"nightingale-logger": "^
|
|
62
|
+
"alp-types": "3.1.0",
|
|
63
|
+
"nightingale-logger": "^12.1.4",
|
|
68
64
|
"semver": "^7.3.5"
|
|
69
65
|
},
|
|
70
66
|
"devDependencies": {
|
|
71
|
-
"@babel/core": "7.
|
|
72
|
-
"@types/node": "
|
|
73
|
-
"@types/semver": "7.3.
|
|
74
|
-
"
|
|
75
|
-
"
|
|
76
|
-
"
|
|
77
|
-
"rollup": "2.43.1"
|
|
67
|
+
"@babel/core": "7.17.0",
|
|
68
|
+
"@types/node": "16.11.22",
|
|
69
|
+
"@types/semver": "7.3.9",
|
|
70
|
+
"liwi-mongo": "8.3.1",
|
|
71
|
+
"pob-babel": "31.0.0",
|
|
72
|
+
"typescript": "4.5.5"
|
|
78
73
|
},
|
|
79
|
-
"gitHead": "
|
|
74
|
+
"gitHead": "1af3cf2eb4bba25ab23f174cda860416ff68a63d"
|
|
80
75
|
}
|
package/src/.eslintrc.json
CHANGED
|
@@ -7,7 +7,24 @@
|
|
|
7
7
|
"plugins": ["@typescript-eslint"],
|
|
8
8
|
"extends": [
|
|
9
9
|
"@pob/eslint-config-typescript",
|
|
10
|
-
"@pob/eslint-config-typescript
|
|
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
|
-
|
|
68
|
-
|
|
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
|
-
|
|
20
|
-
|
|
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
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
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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"}
|
package/dist/index-node12.cjs.js
DELETED
|
@@ -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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"}
|