diff --git a/tdrive/backend/node/src/cli/cmds/search_cmds/index_all.ts b/tdrive/backend/node/src/cli/cmds/search_cmds/index_all.ts index 8c7c3136..a8bec93a 100644 --- a/tdrive/backend/node/src/cli/cmds/search_cmds/index_all.ts +++ b/tdrive/backend/node/src/cli/cmds/search_cmds/index_all.ts @@ -15,6 +15,7 @@ import { EntityTarget, SearchServiceAPI } from "../../../core/platform/services/ import CompanyUser, { TYPE as CompanyUserTYPE } from "../../../services/user/entities/company_user"; import runWithPlatform from "../../lib/run_with_platform"; import SearchRepository from "src/core/platform/services/search/repository"; +import parseYargsCommaSeparatedStringArray from "../../utils/yargs_comma_array"; type Options = { spinner: ora.Ora; @@ -180,22 +181,12 @@ const command: yargs.CommandModule = { }, }, handler: async argv => { - const repositoryArg = argv[repositoryArgumentName]; - const repositories = - typeof repositoryArg === "string" ? [repositoryArg] : (repositoryArg as [string]); - - function* eachOnlyOnce(list: Iterable): Iterable { - const seen = new Set(); - for (const item of list) { - if (seen.has(item)) continue; - seen.add(item); - yield item; - } - } - + const repositories = parseYargsCommaSeparatedStringArray( + argv[repositoryArgumentName] as string /* ignore typechecker */, + ); runWithPlatform("Re-index", async ({ spinner, platform }) => { try { - for (const repositoryName of eachOnlyOnce(repositories)) + for (const repositoryName of repositories) await RepositoryNameToCTOR.get(repositoryName)(platform, { spinner, repairEntities: !!argv.repairEntities, diff --git a/tdrive/backend/node/src/cli/utils/yargs_comma_array.ts b/tdrive/backend/node/src/cli/utils/yargs_comma_array.ts new file mode 100644 index 00000000..38010a19 --- /dev/null +++ b/tdrive/backend/node/src/cli/utils/yargs_comma_array.ts @@ -0,0 +1,14 @@ +import _ from "lodash"; + +/** Take potentially repeated string yarg arguments and make into garanteed string array; comma separated and whitespace trimed */ +export default function parseYargsCommaSeparatedStringArray( + args: undefined | string | string[], +): string[] { + return _.uniq( + (typeof args === "string" ? [args] : ((args || []) as string[])) + .join(",") + .split(",") + .map(x => (x || "").trim()) + .filter(x => x), + ); +}