diff --git a/src/commands/infuse.ts b/src/commands/infuse.ts index 343e857..261fc53 100644 --- a/src/commands/infuse.ts +++ b/src/commands/infuse.ts @@ -90,7 +90,7 @@ export const builder = (args: Argv): Argv => { .option('ignoreFileName', { type: 'string', alias: 'i', - describe: 'ignore file names, i.e. .ignore-i18n .ignore-i18n-2' + describe: 'ignore file names, i.e. .ignore-i18n' }) .option('prettier', { type: 'string', diff --git a/src/commands/squeeze.ts b/src/commands/squeeze.ts index cbac2e0..2be4417 100644 --- a/src/commands/squeeze.ts +++ b/src/commands/squeeze.ts @@ -30,6 +30,7 @@ type SqueezeOptions = { namespace?: string output: string ignoreFileName?: string + ignoreMultipleMode?: boolean } export const command = 'squeeze' @@ -75,18 +76,24 @@ export const builder = (args: Argv): Argv => { .option('ignoreFileName', { type: 'string', alias: 'i', - describe: 'ignore file names, i.e. .ignore-i18n .ignore-i18n-2' + describe: 'ignore file names, i.e. .ignore-i18n' + }) + .option('ignoreMultipleMode', { + type: 'boolean', + default: false, + describe: 'use multiple ignore file with --ignoreFileName (NOTE: This option is EXPERIMENTAL)' }) } export const handler = async (args: Arguments) => { const targetPath = resolve(args.target) + const ignoreMultipleMode = args.ignoreMultipleMode || false let nsDictionary = {} as NamespaceDictionary let externalMessages = {} as LocaleMessages let ig = ignore() if (args.ignoreFileName) { - ig = getIgnore(args.target, args.ignoreFileName) + ig = getIgnore(args.target, args.ignoreFileName, ignoreMultipleMode) } try { diff --git a/src/utils.ts b/src/utils.ts index fb08698..98cc4cf 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -480,29 +480,48 @@ export function splitLocaleMessages ( return { sfc: messages, external: metaExternalLocaleMessages } } -export function getIgnore (target:string, ignoreFileNames: string): Ignore { +export function getIgnore (target:string, ignoreFileNames: string, ignoreMultipleMode = false): Ignore { const ig = ignore() const files = ignoreFileNames.split(',').filter(Boolean) - files.forEach(file => { - debug('ignore target file', file) - const ignoreFiles = readIgnoreFile(target, file) + files.forEach((file, index) => { + debug('ignore target file', file, index) + if (index > 0 && !ignoreMultipleMode) { + return + } + const ignoreFiles = readIgnoreFile(target, file, ignoreMultipleMode) returnIgnoreInstance(ig, ignoreFiles) }) return ig } -function readIgnoreFile (target: string, _ignoreFile: string): string[] { - const ignoreFiles = glob.sync(`${target}/**/${_ignoreFile}`) - debug('readIgnoreFile: ignoreFiles', ignoreFiles) +function readIgnoreFile (target: string, _ignoreFile: string, ignoreMultipleMode = false): string[] { const ignoreTargets = [] as string[] - ignoreFiles.forEach(ignoreFile => { - fs.readFileSync(ignoreFile, 'utf8') + if (!ignoreMultipleMode) { + const ignoreFiles = glob.sync(`${target}/**/${_ignoreFile}`) + debug('readIgnoreFile: ignoreFiles', ignoreFiles) + ignoreFiles.forEach(ignoreFile => { + fs.readFileSync(ignoreFile, 'utf8') + .split(/\r?\n/g) + .filter(line => line.trim() && !line.trim().startsWith('#')) + .filter(Boolean) + .forEach(ignoreTarget => { + ignoreTargets.push(formatPath(ignoreFile, ignoreTarget)) + }) + }) + } else { + debug(`ignoreMultipleMode target: ${target}, _ignoreFile: ${_ignoreFile}`) + const fullPath = resolve(path.join(target, path.normalize(_ignoreFile))) + debug(`ignoreMultipleMode fullpath: ${fullPath}`) + fs.readFileSync(fullPath, 'utf8') .split(/\r?\n/g) + .filter(line => line.trim() && !line.trim().startsWith('#')) .filter(Boolean) .forEach(ignoreTarget => { - ignoreTargets.push(formatPath(ignoreFile, ignoreTarget)) + const igTarget = path.join(target, ignoreTarget) + debug('ignore target', igTarget) + ignoreTargets.push(igTarget) }) - }) + } debug(`ignoreTargets ${ignoreTargets}`) return ignoreTargets }