diff --git a/packages/data-migration-cli/src/commands/new.ts b/packages/data-migration-cli/src/commands/new.ts index a85d26b..f048511 100644 --- a/packages/data-migration-cli/src/commands/new.ts +++ b/packages/data-migration-cli/src/commands/new.ts @@ -12,6 +12,7 @@ export default class New extends Command { static flags = { help: flags.help({ char: "h" }), config: DefaultFlags.config, + scope: DefaultFlags.scope, }; static args = [{ name: "name", required: true }]; @@ -20,7 +21,7 @@ export default class New extends Command { const { args, flags } = this.parse(New); let config = await loadConfiguration(path.resolve(flags.config)); - const prefix = DataMigrationProcessor.getMigrationsPath(config); + const prefix = DataMigrationProcessor.getMigrationsPath(config, flags.scope); if (!fs.existsSync(prefix)) { fs.mkdirSync(prefix); diff --git a/packages/data-migration-cli/src/default-flags.ts b/packages/data-migration-cli/src/default-flags.ts index eeeafaf..9bf0d51 100644 --- a/packages/data-migration-cli/src/default-flags.ts +++ b/packages/data-migration-cli/src/default-flags.ts @@ -3,6 +3,7 @@ import { flags } from "@oclif/command"; export interface DefaultFlagParameters { config: string; stage?: string; + scope?: string; } export const DefaultFlags = { @@ -13,4 +14,7 @@ export const DefaultFlags = { stage: flags.string({ description: "Stage name to use", }), + scope: flags.string({ + description: "Script scope to use", + }), }; diff --git a/packages/data-migration-cli/src/utils/loadScripts.ts b/packages/data-migration-cli/src/utils/loadScripts.ts index cd443db..b841774 100644 --- a/packages/data-migration-cli/src/utils/loadScripts.ts +++ b/packages/data-migration-cli/src/utils/loadScripts.ts @@ -61,14 +61,15 @@ export default async function loadScripts( ); logger("Finding scripts"); - scripts = await DataMigrationProcessor.getScripts( + scripts = await DataMigrationProcessor.getScripts({ config, + scope: flags.scope, context, - logger, - (scriptName: string, subsriber?: Subscriber) => + log: logger, + createLogger: (scriptName: string, subsriber?: Subscriber) => createLogger(["SCRIPT", scriptName], subsriber), - tracker - ); + tracker, + }); logger(`Found ${scripts.length} scripts`); diff --git a/packages/data-migration/src/Utils.ts b/packages/data-migration/src/Utils.ts index 2a42200..8d280a6 100644 --- a/packages/data-migration/src/Utils.ts +++ b/packages/data-migration/src/Utils.ts @@ -58,18 +58,25 @@ export async function loadScript(filename: string): Promise { return script; } -export async function getAllScripts( - config: Configuration, - log: Logger -): Promise> { +export interface GetAllScripts { + config: Configuration; + scope?: string; + log: Logger; +} +export async function getAllScripts({ + config, + scope, + log, +}: GetAllScripts): Promise> { let scripts = new Map(); + const migrationsPath = getMigrationsPath(config, scope); let scriptFiles = fs - .readdirSync(getMigrationsPath(config)) + .readdirSync(migrationsPath) .filter((fname: string) => /\.(t|j)s$/gi.test(fname)); for (const fname of scriptFiles) { try { - const filename = path.join(getMigrationsPath(config), fname); + const filename = path.join(migrationsPath, fname); const script = await loadScript(filename); scripts.set(fname, script); diff --git a/packages/data-migration/src/methods/GetMigrationsPath.ts b/packages/data-migration/src/methods/GetMigrationsPath.ts index fa74661..cb5fa0b 100644 --- a/packages/data-migration/src/methods/GetMigrationsPath.ts +++ b/packages/data-migration/src/methods/GetMigrationsPath.ts @@ -1,8 +1,12 @@ import * as path from "path"; import Configuration from "../Config"; -export default function getMigrationsPath(config: Configuration) { +export default function getMigrationsPath(config: Configuration, scope?: string) { const folderName = config.migrationDirectory || "migrations"; - return path.join(process.cwd(), folderName); + const result = path.join(process.cwd(), folderName); + + if (scope) return path.join(result, scope); + + return result; } diff --git a/packages/data-migration/src/methods/GetScripts.ts b/packages/data-migration/src/methods/GetScripts.ts index e28ea8a..6e16634 100644 --- a/packages/data-migration/src/methods/GetScripts.ts +++ b/packages/data-migration/src/methods/GetScripts.ts @@ -5,16 +5,25 @@ import { Logger } from "../Logger"; import { ExecutionTrackerInstance, ExecutionInformation } from "../ExecutionTracker"; import { Observable, Subscriber } from "rxjs"; -export default async function getScripts( - config: Configuration, - context: ScriptContext, - log: Logger, - createLogger: (scriptName: string, subscriber?: Subscriber) => Logger, - tracker?: ExecutionTrackerInstance -): Promise> { +export interface GetScriptsParameters { + config: Configuration; + scope?: string; + context: ScriptContext; + log: Logger; + createLogger: (scriptName: string, subscriber?: Subscriber) => Logger; + tracker?: ExecutionTrackerInstance; +} +export default async function getScripts({ + config, + scope, + context, + log, + createLogger, + tracker, +}: GetScriptsParameters): Promise> { let result = new Array(); - let scripts = await getAllScripts(config, log); + let scripts = await getAllScripts({ config, scope, log }); for (const fname of scripts.keys()) { const script = scripts.get(fname) as MigrationScript;