From 2db331e19f928fe3fa090b089d761ae7216ffa4b Mon Sep 17 00:00:00 2001 From: Gao Sun Date: Wed, 28 Sep 2022 15:25:54 +0800 Subject: [PATCH] refactor(core): copy alteration scripts before executing (#2021) --- packages/core/.gitignore | 1 + packages/core/package.json | 2 ++ packages/core/src/alteration/constants.ts | 3 ++- packages/core/src/alteration/index.ts | 11 +++++---- pnpm-lock.yaml | 28 ++++++++++++++++++----- 5 files changed, 34 insertions(+), 11 deletions(-) create mode 100644 packages/core/.gitignore diff --git a/packages/core/.gitignore b/packages/core/.gitignore new file mode 100644 index 000000000..83783958b --- /dev/null +++ b/packages/core/.gitignore @@ -0,0 +1 @@ +/alterations diff --git a/packages/core/package.json b/packages/core/package.json index 5dcbe3ff3..82adf9b28 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -34,6 +34,7 @@ "deepmerge": "^4.2.2", "dotenv": "^16.0.0", "etag": "^1.8.1", + "fs-extra": "^10.1.0", "got": "^11.8.2", "hash-wasm": "^4.9.0", "i18next": "^21.8.16", @@ -72,6 +73,7 @@ "@silverhand/ts-config": "1.0.0", "@types/debug": "^4.1.7", "@types/etag": "^1.8.1", + "@types/fs-extra": "^9.0.13", "@types/http-errors": "^1.8.2", "@types/inquirer": "^8.2.1", "@types/jest": "^28.1.6", diff --git a/packages/core/src/alteration/constants.ts b/packages/core/src/alteration/constants.ts index f051dad39..4c419c472 100644 --- a/packages/core/src/alteration/constants.ts +++ b/packages/core/src/alteration/constants.ts @@ -1,3 +1,4 @@ export const alterationStateKey = 'alterationState'; export const logtoConfigsTableFilePath = 'node_modules/@logto/schemas/tables/logto_configs.sql'; -export const alterationFilesDirectory = 'node_modules/@logto/schemas/alterations'; +export const alterationFilesDirectorySource = 'node_modules/@logto/schemas/alterations'; +export const alterationFilesDirectory = 'alterations/'; diff --git a/packages/core/src/alteration/index.ts b/packages/core/src/alteration/index.ts index 7880d3284..ae6382ae2 100644 --- a/packages/core/src/alteration/index.ts +++ b/packages/core/src/alteration/index.ts @@ -10,6 +10,7 @@ import { } from '@logto/schemas/lib/types/alteration'; import { conditionalString } from '@silverhand/essentials'; import chalk from 'chalk'; +import { copy, remove } from 'fs-extra'; import { DatabasePool, sql } from 'slonik'; import { raw } from 'slonik-sql-tag-raw'; @@ -19,6 +20,7 @@ import { logtoConfigsTableFilePath, alterationStateKey, alterationFilesDirectory, + alterationFilesDirectorySource, } from './constants'; import { getTimestampFromFileName, alterationFileNameRegex } from './utils'; @@ -87,10 +89,13 @@ export const getLatestAlterationTimestamp = async () => { }; export const getAlterationFiles = async () => { - if (!existsSync(alterationFilesDirectory)) { + if (!existsSync(alterationFilesDirectorySource)) { return []; } + await remove(alterationFilesDirectory); + await copy(alterationFilesDirectorySource, alterationFilesDirectory); + const directory = await readdir(alterationFilesDirectory); const files = directory.filter((file) => alterationFileNameRegex.test(file)); @@ -111,9 +116,7 @@ export const getUndeployedAlterations = async (pool: DatabasePool) => { const importAlteration = async (file: string): Promise => { // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment - const module = await import( - path.join(alterationFilesDirectory, file).replace('node_modules/', '') - ); + const module = await import(path.join(process.cwd(), alterationFilesDirectory, file)); // eslint-disable-next-line no-restricted-syntax return module.default as AlterationScript; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 234cbcfc2..989e92fa0 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -161,6 +161,7 @@ importers: '@silverhand/ts-config': 1.0.0 '@types/debug': ^4.1.7 '@types/etag': ^1.8.1 + '@types/fs-extra': ^9.0.13 '@types/http-errors': ^1.8.2 '@types/inquirer': ^8.2.1 '@types/jest': ^28.1.6 @@ -185,6 +186,7 @@ importers: dotenv: ^16.0.0 eslint: ^8.21.0 etag: ^1.8.1 + fs-extra: ^10.1.0 got: ^11.8.2 hash-wasm: ^4.9.0 http-errors: ^1.6.3 @@ -238,6 +240,7 @@ importers: deepmerge: 4.2.2 dotenv: 16.0.0 etag: 1.8.1 + fs-extra: 10.1.0 got: 11.8.3 hash-wasm: 4.9.0 i18next: 21.8.16 @@ -275,6 +278,7 @@ importers: '@silverhand/ts-config': 1.0.0_typescript@4.7.4 '@types/debug': 4.1.7 '@types/etag': 1.8.1 + '@types/fs-extra': 9.0.13 '@types/http-errors': 1.8.2 '@types/inquirer': 8.2.1 '@types/jest': 28.1.6 @@ -3840,7 +3844,7 @@ packages: '@jest/types': 28.1.3 deepmerge: 4.2.2 identity-obj-proxy: 3.0.0 - jest: 28.1.3_k5ytkvaprncdyzidqqws5bqksq + jest: 28.1.3_@types+node@16.11.12 jest-matcher-specific-error: 1.0.0 jest-transform-stub: 2.0.0 ts-jest: 28.0.7_lhw3xkmzugq5tscs3x2ndm4sby @@ -4238,6 +4242,12 @@ packages: '@types/node': 17.0.23 dev: false + /@types/fs-extra/9.0.13: + resolution: {integrity: sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==} + dependencies: + '@types/node': 17.0.23 + dev: true + /@types/glob/8.0.0: resolution: {integrity: sha512-l6NQsDDyQUVeoTynNpC9uRvCUint/gSUXQA2euwmTuWGvPY5LSDUu6tkCtJB2SvGQlJQzLaKqcGZP4//7EDveA==} dependencies: @@ -5909,8 +5919,8 @@ packages: engines: {node: '>=10'} hasBin: true dependencies: - is-text-path: 1.0.1 JSONStream: 1.3.5 + is-text-path: 1.0.1 lodash: 4.17.21 meow: 8.1.2 split2: 3.2.2 @@ -7507,6 +7517,15 @@ packages: universalify: 2.0.0 dev: true + /fs-extra/10.1.0: + resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} + engines: {node: '>=12'} + dependencies: + graceful-fs: 4.2.9 + jsonfile: 6.1.0 + universalify: 2.0.0 + dev: false + /fs-extra/9.1.0: resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==} engines: {node: '>=10'} @@ -7859,7 +7878,6 @@ packages: /graceful-fs/4.2.9: resolution: {integrity: sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==} - dev: true /grapheme-splitter/1.0.4: resolution: {integrity: sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==} @@ -9821,7 +9839,6 @@ packages: universalify: 2.0.0 optionalDependencies: graceful-fs: 4.2.9 - dev: true /jsonparse/1.3.1: resolution: {integrity: sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=} @@ -14801,7 +14818,7 @@ packages: '@jest/types': 28.1.3 bs-logger: 0.2.6 fast-json-stable-stringify: 2.1.0 - jest: 28.1.3_k5ytkvaprncdyzidqqws5bqksq + jest: 28.1.3_@types+node@16.11.12 jest-util: 28.1.3 json5: 2.2.1 lodash.memoize: 4.1.2 @@ -15185,7 +15202,6 @@ packages: /universalify/2.0.0: resolution: {integrity: sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==} engines: {node: '>= 10.0.0'} - dev: true /unpipe/1.0.0: resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==}