Skip to content

Commit

Permalink
feat: add scope parameter
Browse files Browse the repository at this point in the history
  • Loading branch information
theBenForce committed Mar 10, 2020
1 parent 3264e37 commit ecd1567
Show file tree
Hide file tree
Showing 6 changed files with 48 additions and 22 deletions.
3 changes: 2 additions & 1 deletion packages/data-migration-cli/src/commands/new.ts
Expand Up @@ -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 }];
Expand All @@ -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);
Expand Down
4 changes: 4 additions & 0 deletions packages/data-migration-cli/src/default-flags.ts
Expand Up @@ -3,6 +3,7 @@ import { flags } from "@oclif/command";
export interface DefaultFlagParameters {
config: string;
stage?: string;
scope?: string;
}

export const DefaultFlags = {
Expand All @@ -13,4 +14,7 @@ export const DefaultFlags = {
stage: flags.string({
description: "Stage name to use",
}),
scope: flags.string({
description: "Script scope to use",
}),
};
11 changes: 6 additions & 5 deletions packages/data-migration-cli/src/utils/loadScripts.ts
Expand Up @@ -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<string>) =>
log: logger,
createLogger: (scriptName: string, subsriber?: Subscriber<string>) =>
createLogger(["SCRIPT", scriptName], subsriber),
tracker
);
tracker,
});

logger(`Found ${scripts.length} scripts`);

Expand Down
19 changes: 13 additions & 6 deletions packages/data-migration/src/Utils.ts
Expand Up @@ -58,18 +58,25 @@ export async function loadScript<T>(filename: string): Promise<T> {
return script;
}

export async function getAllScripts(
config: Configuration,
log: Logger
): Promise<Map<string, MigrationScript>> {
export interface GetAllScripts {
config: Configuration;
scope?: string;
log: Logger;
}
export async function getAllScripts({
config,
scope,
log,
}: GetAllScripts): Promise<Map<string, MigrationScript>> {
let scripts = new Map<string, MigrationScript>();
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<MigrationScript>(filename);

scripts.set(fname, script);
Expand Down
8 changes: 6 additions & 2 deletions 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;
}
25 changes: 17 additions & 8 deletions packages/data-migration/src/methods/GetScripts.ts
Expand Up @@ -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<string>) => Logger,
tracker?: ExecutionTrackerInstance
): Promise<Array<InitializedMigrationScript>> {
export interface GetScriptsParameters {
config: Configuration;
scope?: string;
context: ScriptContext;
log: Logger;
createLogger: (scriptName: string, subscriber?: Subscriber<string>) => Logger;
tracker?: ExecutionTrackerInstance;
}
export default async function getScripts({
config,
scope,
context,
log,
createLogger,
tracker,
}: GetScriptsParameters): Promise<Array<InitializedMigrationScript>> {
let result = new Array<InitializedMigrationScript>();

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;
Expand Down

0 comments on commit ecd1567

Please sign in to comment.