@intlayer/cli 8.5.2 → 8.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -69,7 +69,7 @@ const extract = async (options) => {
69
69
  return this.input ?? "";
70
70
  }
71
71
  });
72
- selectedFiles = enquirerSelectedFiles.filter((f) => f !== SELECT_ALL);
72
+ selectedFiles = enquirerSelectedFiles.filter((file) => file !== SELECT_ALL);
73
73
  } catch {
74
74
  selectedFiles = Symbol("cancel");
75
75
  }
@@ -1 +1 @@
1
- {"version":3,"file":"extract.cjs","names":["x","ANSIColors"],"sources":["../../src/extract.ts"],"sourcesContent":["import { existsSync } from 'node:fs';\nimport { relative, resolve } from 'node:path';\nimport type { PackageName } from '@intlayer/babel';\nimport { prepareIntlayer } from '@intlayer/chokidar/build';\nimport { logConfigDetails } from '@intlayer/chokidar/cli';\nimport { buildComponentFilesList, formatPath } from '@intlayer/chokidar/utils';\nimport * as ANSIColors from '@intlayer/config/colors';\nimport { colorize, getAppLogger, x } from '@intlayer/config/logger';\nimport {\n type GetConfigurationOptions,\n getConfiguration,\n} from '@intlayer/config/node';\nimport type { FilePathPattern } from '@intlayer/types/filePathPattern';\nimport { getUnmergedDictionaries } from '@intlayer/unmerged-dictionaries-entry';\nimport enquirer from 'enquirer';\n\ntype ExtractOptions = {\n files?: string[];\n output?: FilePathPattern;\n configOptions?: GetConfigurationOptions;\n codeOnly?: boolean;\n declarationOnly?: boolean;\n};\n\nexport const extract = async (options: ExtractOptions) => {\n const configuration = getConfiguration(options.configOptions);\n\n logConfigDetails(options?.configOptions);\n\n const appLogger = getAppLogger(configuration);\n\n const { baseDir } = configuration.system;\n const { output } = configuration.compiler;\n\n if (!output) {\n appLogger(\n `${x} No output configuration found. Add a ${colorize('compiler.output', ANSIColors.BLUE)} in your configuration.`,\n {\n level: 'error',\n }\n );\n return;\n }\n\n const { detectPackageName, extractContent } = await import('@intlayer/babel');\n\n // Detect package\n const packageName: PackageName = detectPackageName(baseDir);\n\n let filesToExtract = options.files ?? [];\n\n if (filesToExtract.length === 0) {\n // Await all promises simultaneously\n const fileList = buildComponentFilesList(configuration);\n\n // Flatten the nested arrays and remove duplicates\n // Relative paths for selection\n const choices = fileList.map((file) => {\n const relPath = relative(baseDir, file);\n\n return {\n value: file,\n label: relPath,\n };\n });\n\n if (choices.length === 0) {\n appLogger('No extractable files found in the project.');\n return;\n }\n\n const SELECT_ALL = '__select_all__';\n\n type PromptChoice = {\n name: string;\n enabled: boolean;\n disabled?: boolean | string;\n };\n\n type PromptContext = {\n choices: PromptChoice[];\n render(): void | Promise<void>;\n state: { submitted: boolean };\n selected: PromptChoice[];\n input: string;\n options: { multiple?: boolean };\n };\n\n let selectedFiles: string[] | symbol;\n try {\n const maxLen = Math.max((process.stdout.columns || 80) - 15, 20);\n const truncatePath = (path: string) =>\n path.length > maxLen ? `...${path.slice(-(maxLen - 3))}` : path;\n\n const { files: enquirerSelectedFiles } = await enquirer.prompt<{\n files: string[];\n }>({\n type: 'autocomplete',\n name: 'files',\n message: 'Select files to extract (Type to search):',\n multiple: true,\n // @ts-ignore limit exist but is not typed\n limit: 40,\n choices: [\n { name: SELECT_ALL, message: '────── Select all ──────' },\n ...choices.map((choice) => ({\n name: choice.value,\n message: truncatePath(choice.label),\n })),\n ],\n async toggle(\n this: PromptContext,\n choice: PromptChoice,\n enabled?: boolean\n ) {\n if (!choice || choice.disabled) return;\n choice.enabled = enabled == null ? !choice.enabled : enabled;\n\n if (choice.name === SELECT_ALL) {\n this.choices\n .filter((choiceEl) => choiceEl.name !== SELECT_ALL)\n .forEach((choiceEl) => {\n choiceEl.enabled = choice.enabled;\n });\n }\n\n return this.render();\n },\n format(this: PromptContext) {\n if (this.state?.submitted && this.options?.multiple) {\n return `${this.selected.filter((s) => s.name !== SELECT_ALL).length} file(s) selected`;\n }\n return this.input ?? '';\n },\n });\n\n selectedFiles = enquirerSelectedFiles.filter((f) => f !== SELECT_ALL);\n } catch {\n selectedFiles = Symbol('cancel');\n }\n\n if (typeof selectedFiles === 'symbol') {\n // User cancelled\n process.exit(0);\n }\n\n filesToExtract = selectedFiles as string[];\n }\n\n if (filesToExtract.length === 0) {\n appLogger('No files selected for extraction.');\n return;\n }\n\n const absoluteFiles = filesToExtract\n .map((file) => resolve(baseDir, file))\n .filter((file) => {\n if (!existsSync(file)) {\n appLogger(`File not found: ${formatPath(file)}`);\n return false;\n }\n return true;\n });\n\n if (absoluteFiles.length === 0) {\n return;\n }\n\n const unmergedDictionaries = getUnmergedDictionaries(configuration);\n\n await Promise.all(\n absoluteFiles.map(async (filePath) => {\n try {\n await extractContent(filePath, packageName, {\n unmergedDictionaries,\n configuration,\n codeOnly: options.codeOnly,\n declarationOnly: options.declarationOnly,\n });\n } catch (error) {\n appLogger(\n `Failed to transform ${filePath}: ${(error as Error).message}`\n );\n }\n })\n );\n\n await prepareIntlayer(configuration); // Prepare Intlayer to apply the changes\n};\n"],"mappings":";;;;;;;;;;;;;;;;AAwBA,MAAa,UAAU,OAAO,YAA4B;CACxD,MAAM,4DAAiC,QAAQ,cAAc;AAE7D,8CAAiB,SAAS,cAAc;CAExC,MAAM,sDAAyB,cAAc;CAE7C,MAAM,EAAE,YAAY,cAAc;CAClC,MAAM,EAAE,WAAW,cAAc;AAEjC,KAAI,CAAC,QAAQ;AACX,YACE,GAAGA,0BAAE,8EAAiD,mBAAmBC,wBAAW,KAAK,CAAC,0BAC1F,EACE,OAAO,SACR,CACF;AACD;;CAGF,MAAM,EAAE,mBAAmB,mBAAmB,MAAM,OAAO;CAG3D,MAAM,cAA2B,kBAAkB,QAAQ;CAE3D,IAAI,iBAAiB,QAAQ,SAAS,EAAE;AAExC,KAAI,eAAe,WAAW,GAAG;EAM/B,MAAM,gEAJmC,cAAc,CAI9B,KAAK,SAAS;AAGrC,UAAO;IACL,OAAO;IACP,+BAJuB,SAAS,KAAK;IAKtC;IACD;AAEF,MAAI,QAAQ,WAAW,GAAG;AACxB,aAAU,6CAA6C;AACvD;;EAGF,MAAM,aAAa;EAiBnB,IAAI;AACJ,MAAI;GACF,MAAM,SAAS,KAAK,KAAK,QAAQ,OAAO,WAAW,MAAM,IAAI,GAAG;GAChE,MAAM,gBAAgB,SACpB,KAAK,SAAS,SAAS,MAAM,KAAK,MAAM,EAAE,SAAS,GAAG,KAAK;GAE7D,MAAM,EAAE,OAAO,0BAA0B,MAAM,iBAAS,OAErD;IACD,MAAM;IACN,MAAM;IACN,SAAS;IACT,UAAU;IAEV,OAAO;IACP,SAAS,CACP;KAAE,MAAM;KAAY,SAAS;KAA4B,EACzD,GAAG,QAAQ,KAAK,YAAY;KAC1B,MAAM,OAAO;KACb,SAAS,aAAa,OAAO,MAAM;KACpC,EAAE,CACJ;IACD,MAAM,OAEJ,QACA,SACA;AACA,SAAI,CAAC,UAAU,OAAO,SAAU;AAChC,YAAO,UAAU,WAAW,OAAO,CAAC,OAAO,UAAU;AAErD,SAAI,OAAO,SAAS,WAClB,MAAK,QACF,QAAQ,aAAa,SAAS,SAAS,WAAW,CAClD,SAAS,aAAa;AACrB,eAAS,UAAU,OAAO;OAC1B;AAGN,YAAO,KAAK,QAAQ;;IAEtB,SAA4B;AAC1B,SAAI,KAAK,OAAO,aAAa,KAAK,SAAS,SACzC,QAAO,GAAG,KAAK,SAAS,QAAQ,MAAM,EAAE,SAAS,WAAW,CAAC,OAAO;AAEtE,YAAO,KAAK,SAAS;;IAExB,CAAC;AAEF,mBAAgB,sBAAsB,QAAQ,MAAM,MAAM,WAAW;UAC/D;AACN,mBAAgB,OAAO,SAAS;;AAGlC,MAAI,OAAO,kBAAkB,SAE3B,SAAQ,KAAK,EAAE;AAGjB,mBAAiB;;AAGnB,KAAI,eAAe,WAAW,GAAG;AAC/B,YAAU,oCAAoC;AAC9C;;CAGF,MAAM,gBAAgB,eACnB,KAAK,gCAAiB,SAAS,KAAK,CAAC,CACrC,QAAQ,SAAS;AAChB,MAAI,yBAAY,KAAK,EAAE;AACrB,aAAU,4DAA8B,KAAK,GAAG;AAChD,UAAO;;AAET,SAAO;GACP;AAEJ,KAAI,cAAc,WAAW,EAC3B;CAGF,MAAM,0FAA+C,cAAc;AAEnE,OAAM,QAAQ,IACZ,cAAc,IAAI,OAAO,aAAa;AACpC,MAAI;AACF,SAAM,eAAe,UAAU,aAAa;IAC1C;IACA;IACA,UAAU,QAAQ;IAClB,iBAAiB,QAAQ;IAC1B,CAAC;WACK,OAAO;AACd,aACE,uBAAuB,SAAS,IAAK,MAAgB,UACtD;;GAEH,CACH;AAED,qDAAsB,cAAc"}
1
+ {"version":3,"file":"extract.cjs","names":["x","ANSIColors"],"sources":["../../src/extract.ts"],"sourcesContent":["import { existsSync } from 'node:fs';\nimport { relative, resolve } from 'node:path';\nimport type { PackageName } from '@intlayer/babel';\nimport { prepareIntlayer } from '@intlayer/chokidar/build';\nimport { logConfigDetails } from '@intlayer/chokidar/cli';\nimport { buildComponentFilesList, formatPath } from '@intlayer/chokidar/utils';\nimport * as ANSIColors from '@intlayer/config/colors';\nimport { colorize, getAppLogger, x } from '@intlayer/config/logger';\nimport {\n type GetConfigurationOptions,\n getConfiguration,\n} from '@intlayer/config/node';\nimport type { FilePathPattern } from '@intlayer/types/filePathPattern';\nimport { getUnmergedDictionaries } from '@intlayer/unmerged-dictionaries-entry';\nimport enquirer from 'enquirer';\n\ntype ExtractOptions = {\n files?: string[];\n output?: FilePathPattern;\n configOptions?: GetConfigurationOptions;\n codeOnly?: boolean;\n declarationOnly?: boolean;\n};\n\nexport const extract = async (options: ExtractOptions) => {\n const configuration = getConfiguration(options.configOptions);\n\n logConfigDetails(options?.configOptions);\n\n const appLogger = getAppLogger(configuration);\n\n const { baseDir } = configuration.system;\n const { output } = configuration.compiler;\n\n if (!output) {\n appLogger(\n `${x} No output configuration found. Add a ${colorize('compiler.output', ANSIColors.BLUE)} in your configuration.`,\n {\n level: 'error',\n }\n );\n return;\n }\n\n const { detectPackageName, extractContent } = await import('@intlayer/babel');\n\n // Detect package\n const packageName: PackageName = detectPackageName(baseDir);\n\n let filesToExtract = options.files ?? [];\n\n if (filesToExtract.length === 0) {\n // Await all promises simultaneously\n const fileList = buildComponentFilesList(configuration);\n\n // Flatten the nested arrays and remove duplicates\n // Relative paths for selection\n const choices = fileList.map((file) => {\n const relPath = relative(baseDir, file);\n\n return {\n value: file,\n label: relPath,\n };\n });\n\n if (choices.length === 0) {\n appLogger('No extractable files found in the project.');\n return;\n }\n\n const SELECT_ALL = '__select_all__';\n\n type PromptChoice = {\n name: string;\n enabled: boolean;\n disabled?: boolean | string;\n };\n\n type PromptContext = {\n choices: PromptChoice[];\n render(): void | Promise<void>;\n state: { submitted: boolean };\n selected: PromptChoice[];\n input: string;\n options: { multiple?: boolean };\n };\n\n let selectedFiles: string[] | symbol;\n try {\n const maxLen = Math.max((process.stdout.columns || 80) - 15, 20);\n const truncatePath = (path: string) =>\n path.length > maxLen ? `...${path.slice(-(maxLen - 3))}` : path;\n\n const { files: enquirerSelectedFiles } = await enquirer.prompt<{\n files: string[];\n }>({\n type: 'autocomplete',\n name: 'files',\n message: 'Select files to extract (Type to search):',\n multiple: true,\n // @ts-ignore limit exist but is not typed\n limit: 40,\n choices: [\n { name: SELECT_ALL, message: '────── Select all ──────' },\n ...choices.map((choice) => ({\n name: choice.value,\n message: truncatePath(choice.label),\n })),\n ],\n async toggle(\n this: PromptContext,\n choice: PromptChoice,\n enabled?: boolean\n ) {\n if (!choice || choice.disabled) return;\n choice.enabled = enabled == null ? !choice.enabled : enabled;\n\n if (choice.name === SELECT_ALL) {\n this.choices\n .filter((choiceEl) => choiceEl.name !== SELECT_ALL)\n .forEach((choiceEl) => {\n choiceEl.enabled = choice.enabled;\n });\n }\n\n return this.render();\n },\n format(this: PromptContext) {\n if (this.state?.submitted && this.options?.multiple) {\n return `${this.selected.filter((s) => s.name !== SELECT_ALL).length} file(s) selected`;\n }\n return this.input ?? '';\n },\n });\n\n selectedFiles = enquirerSelectedFiles.filter(\n (file) => file !== SELECT_ALL\n );\n } catch {\n selectedFiles = Symbol('cancel');\n }\n\n if (typeof selectedFiles === 'symbol') {\n // User cancelled\n process.exit(0);\n }\n\n filesToExtract = selectedFiles as string[];\n }\n\n if (filesToExtract.length === 0) {\n appLogger('No files selected for extraction.');\n return;\n }\n\n const absoluteFiles = filesToExtract\n .map((file) => resolve(baseDir, file))\n .filter((file) => {\n if (!existsSync(file)) {\n appLogger(`File not found: ${formatPath(file)}`);\n return false;\n }\n return true;\n });\n\n if (absoluteFiles.length === 0) {\n return;\n }\n\n const unmergedDictionaries = getUnmergedDictionaries(configuration);\n\n await Promise.all(\n absoluteFiles.map(async (filePath) => {\n try {\n await extractContent(filePath, packageName, {\n unmergedDictionaries,\n configuration,\n codeOnly: options.codeOnly,\n declarationOnly: options.declarationOnly,\n });\n } catch (error) {\n appLogger(\n `Failed to transform ${filePath}: ${(error as Error).message}`\n );\n }\n })\n );\n\n await prepareIntlayer(configuration); // Prepare Intlayer to apply the changes\n};\n"],"mappings":";;;;;;;;;;;;;;;;AAwBA,MAAa,UAAU,OAAO,YAA4B;CACxD,MAAM,4DAAiC,QAAQ,cAAc;AAE7D,8CAAiB,SAAS,cAAc;CAExC,MAAM,sDAAyB,cAAc;CAE7C,MAAM,EAAE,YAAY,cAAc;CAClC,MAAM,EAAE,WAAW,cAAc;AAEjC,KAAI,CAAC,QAAQ;AACX,YACE,GAAGA,0BAAE,8EAAiD,mBAAmBC,wBAAW,KAAK,CAAC,0BAC1F,EACE,OAAO,SACR,CACF;AACD;;CAGF,MAAM,EAAE,mBAAmB,mBAAmB,MAAM,OAAO;CAG3D,MAAM,cAA2B,kBAAkB,QAAQ;CAE3D,IAAI,iBAAiB,QAAQ,SAAS,EAAE;AAExC,KAAI,eAAe,WAAW,GAAG;EAM/B,MAAM,gEAJmC,cAAc,CAI9B,KAAK,SAAS;AAGrC,UAAO;IACL,OAAO;IACP,+BAJuB,SAAS,KAAK;IAKtC;IACD;AAEF,MAAI,QAAQ,WAAW,GAAG;AACxB,aAAU,6CAA6C;AACvD;;EAGF,MAAM,aAAa;EAiBnB,IAAI;AACJ,MAAI;GACF,MAAM,SAAS,KAAK,KAAK,QAAQ,OAAO,WAAW,MAAM,IAAI,GAAG;GAChE,MAAM,gBAAgB,SACpB,KAAK,SAAS,SAAS,MAAM,KAAK,MAAM,EAAE,SAAS,GAAG,KAAK;GAE7D,MAAM,EAAE,OAAO,0BAA0B,MAAM,iBAAS,OAErD;IACD,MAAM;IACN,MAAM;IACN,SAAS;IACT,UAAU;IAEV,OAAO;IACP,SAAS,CACP;KAAE,MAAM;KAAY,SAAS;KAA4B,EACzD,GAAG,QAAQ,KAAK,YAAY;KAC1B,MAAM,OAAO;KACb,SAAS,aAAa,OAAO,MAAM;KACpC,EAAE,CACJ;IACD,MAAM,OAEJ,QACA,SACA;AACA,SAAI,CAAC,UAAU,OAAO,SAAU;AAChC,YAAO,UAAU,WAAW,OAAO,CAAC,OAAO,UAAU;AAErD,SAAI,OAAO,SAAS,WAClB,MAAK,QACF,QAAQ,aAAa,SAAS,SAAS,WAAW,CAClD,SAAS,aAAa;AACrB,eAAS,UAAU,OAAO;OAC1B;AAGN,YAAO,KAAK,QAAQ;;IAEtB,SAA4B;AAC1B,SAAI,KAAK,OAAO,aAAa,KAAK,SAAS,SACzC,QAAO,GAAG,KAAK,SAAS,QAAQ,MAAM,EAAE,SAAS,WAAW,CAAC,OAAO;AAEtE,YAAO,KAAK,SAAS;;IAExB,CAAC;AAEF,mBAAgB,sBAAsB,QACnC,SAAS,SAAS,WACpB;UACK;AACN,mBAAgB,OAAO,SAAS;;AAGlC,MAAI,OAAO,kBAAkB,SAE3B,SAAQ,KAAK,EAAE;AAGjB,mBAAiB;;AAGnB,KAAI,eAAe,WAAW,GAAG;AAC/B,YAAU,oCAAoC;AAC9C;;CAGF,MAAM,gBAAgB,eACnB,KAAK,gCAAiB,SAAS,KAAK,CAAC,CACrC,QAAQ,SAAS;AAChB,MAAI,yBAAY,KAAK,EAAE;AACrB,aAAU,4DAA8B,KAAK,GAAG;AAChD,UAAO;;AAET,SAAO;GACP;AAEJ,KAAI,cAAc,WAAW,EAC3B;CAGF,MAAM,0FAA+C,cAAc;AAEnE,OAAM,QAAQ,IACZ,cAAc,IAAI,OAAO,aAAa;AACpC,MAAI;AACF,SAAM,eAAe,UAAU,aAAa;IAC1C;IACA;IACA,UAAU,QAAQ;IAClB,iBAAiB,QAAQ;IAC1B,CAAC;WACK,OAAO;AACd,aACE,uBAAuB,SAAS,IAAK,MAAgB,UACtD;;GAEH,CACH;AAED,qDAAsB,cAAc"}
@@ -65,7 +65,7 @@ const extract = async (options) => {
65
65
  return this.input ?? "";
66
66
  }
67
67
  });
68
- selectedFiles = enquirerSelectedFiles.filter((f) => f !== SELECT_ALL);
68
+ selectedFiles = enquirerSelectedFiles.filter((file) => file !== SELECT_ALL);
69
69
  } catch {
70
70
  selectedFiles = Symbol("cancel");
71
71
  }
@@ -1 +1 @@
1
- {"version":3,"file":"extract.mjs","names":[],"sources":["../../src/extract.ts"],"sourcesContent":["import { existsSync } from 'node:fs';\nimport { relative, resolve } from 'node:path';\nimport type { PackageName } from '@intlayer/babel';\nimport { prepareIntlayer } from '@intlayer/chokidar/build';\nimport { logConfigDetails } from '@intlayer/chokidar/cli';\nimport { buildComponentFilesList, formatPath } from '@intlayer/chokidar/utils';\nimport * as ANSIColors from '@intlayer/config/colors';\nimport { colorize, getAppLogger, x } from '@intlayer/config/logger';\nimport {\n type GetConfigurationOptions,\n getConfiguration,\n} from '@intlayer/config/node';\nimport type { FilePathPattern } from '@intlayer/types/filePathPattern';\nimport { getUnmergedDictionaries } from '@intlayer/unmerged-dictionaries-entry';\nimport enquirer from 'enquirer';\n\ntype ExtractOptions = {\n files?: string[];\n output?: FilePathPattern;\n configOptions?: GetConfigurationOptions;\n codeOnly?: boolean;\n declarationOnly?: boolean;\n};\n\nexport const extract = async (options: ExtractOptions) => {\n const configuration = getConfiguration(options.configOptions);\n\n logConfigDetails(options?.configOptions);\n\n const appLogger = getAppLogger(configuration);\n\n const { baseDir } = configuration.system;\n const { output } = configuration.compiler;\n\n if (!output) {\n appLogger(\n `${x} No output configuration found. Add a ${colorize('compiler.output', ANSIColors.BLUE)} in your configuration.`,\n {\n level: 'error',\n }\n );\n return;\n }\n\n const { detectPackageName, extractContent } = await import('@intlayer/babel');\n\n // Detect package\n const packageName: PackageName = detectPackageName(baseDir);\n\n let filesToExtract = options.files ?? [];\n\n if (filesToExtract.length === 0) {\n // Await all promises simultaneously\n const fileList = buildComponentFilesList(configuration);\n\n // Flatten the nested arrays and remove duplicates\n // Relative paths for selection\n const choices = fileList.map((file) => {\n const relPath = relative(baseDir, file);\n\n return {\n value: file,\n label: relPath,\n };\n });\n\n if (choices.length === 0) {\n appLogger('No extractable files found in the project.');\n return;\n }\n\n const SELECT_ALL = '__select_all__';\n\n type PromptChoice = {\n name: string;\n enabled: boolean;\n disabled?: boolean | string;\n };\n\n type PromptContext = {\n choices: PromptChoice[];\n render(): void | Promise<void>;\n state: { submitted: boolean };\n selected: PromptChoice[];\n input: string;\n options: { multiple?: boolean };\n };\n\n let selectedFiles: string[] | symbol;\n try {\n const maxLen = Math.max((process.stdout.columns || 80) - 15, 20);\n const truncatePath = (path: string) =>\n path.length > maxLen ? `...${path.slice(-(maxLen - 3))}` : path;\n\n const { files: enquirerSelectedFiles } = await enquirer.prompt<{\n files: string[];\n }>({\n type: 'autocomplete',\n name: 'files',\n message: 'Select files to extract (Type to search):',\n multiple: true,\n // @ts-ignore limit exist but is not typed\n limit: 40,\n choices: [\n { name: SELECT_ALL, message: '────── Select all ──────' },\n ...choices.map((choice) => ({\n name: choice.value,\n message: truncatePath(choice.label),\n })),\n ],\n async toggle(\n this: PromptContext,\n choice: PromptChoice,\n enabled?: boolean\n ) {\n if (!choice || choice.disabled) return;\n choice.enabled = enabled == null ? !choice.enabled : enabled;\n\n if (choice.name === SELECT_ALL) {\n this.choices\n .filter((choiceEl) => choiceEl.name !== SELECT_ALL)\n .forEach((choiceEl) => {\n choiceEl.enabled = choice.enabled;\n });\n }\n\n return this.render();\n },\n format(this: PromptContext) {\n if (this.state?.submitted && this.options?.multiple) {\n return `${this.selected.filter((s) => s.name !== SELECT_ALL).length} file(s) selected`;\n }\n return this.input ?? '';\n },\n });\n\n selectedFiles = enquirerSelectedFiles.filter((f) => f !== SELECT_ALL);\n } catch {\n selectedFiles = Symbol('cancel');\n }\n\n if (typeof selectedFiles === 'symbol') {\n // User cancelled\n process.exit(0);\n }\n\n filesToExtract = selectedFiles as string[];\n }\n\n if (filesToExtract.length === 0) {\n appLogger('No files selected for extraction.');\n return;\n }\n\n const absoluteFiles = filesToExtract\n .map((file) => resolve(baseDir, file))\n .filter((file) => {\n if (!existsSync(file)) {\n appLogger(`File not found: ${formatPath(file)}`);\n return false;\n }\n return true;\n });\n\n if (absoluteFiles.length === 0) {\n return;\n }\n\n const unmergedDictionaries = getUnmergedDictionaries(configuration);\n\n await Promise.all(\n absoluteFiles.map(async (filePath) => {\n try {\n await extractContent(filePath, packageName, {\n unmergedDictionaries,\n configuration,\n codeOnly: options.codeOnly,\n declarationOnly: options.declarationOnly,\n });\n } catch (error) {\n appLogger(\n `Failed to transform ${filePath}: ${(error as Error).message}`\n );\n }\n })\n );\n\n await prepareIntlayer(configuration); // Prepare Intlayer to apply the changes\n};\n"],"mappings":";;;;;;;;;;;;AAwBA,MAAa,UAAU,OAAO,YAA4B;CACxD,MAAM,gBAAgB,iBAAiB,QAAQ,cAAc;AAE7D,kBAAiB,SAAS,cAAc;CAExC,MAAM,YAAY,aAAa,cAAc;CAE7C,MAAM,EAAE,YAAY,cAAc;CAClC,MAAM,EAAE,WAAW,cAAc;AAEjC,KAAI,CAAC,QAAQ;AACX,YACE,GAAG,EAAE,wCAAwC,SAAS,mBAAmB,WAAW,KAAK,CAAC,0BAC1F,EACE,OAAO,SACR,CACF;AACD;;CAGF,MAAM,EAAE,mBAAmB,mBAAmB,MAAM,OAAO;CAG3D,MAAM,cAA2B,kBAAkB,QAAQ;CAE3D,IAAI,iBAAiB,QAAQ,SAAS,EAAE;AAExC,KAAI,eAAe,WAAW,GAAG;EAM/B,MAAM,UAJW,wBAAwB,cAAc,CAI9B,KAAK,SAAS;AAGrC,UAAO;IACL,OAAO;IACP,OAJc,SAAS,SAAS,KAAK;IAKtC;IACD;AAEF,MAAI,QAAQ,WAAW,GAAG;AACxB,aAAU,6CAA6C;AACvD;;EAGF,MAAM,aAAa;EAiBnB,IAAI;AACJ,MAAI;GACF,MAAM,SAAS,KAAK,KAAK,QAAQ,OAAO,WAAW,MAAM,IAAI,GAAG;GAChE,MAAM,gBAAgB,SACpB,KAAK,SAAS,SAAS,MAAM,KAAK,MAAM,EAAE,SAAS,GAAG,KAAK;GAE7D,MAAM,EAAE,OAAO,0BAA0B,MAAM,SAAS,OAErD;IACD,MAAM;IACN,MAAM;IACN,SAAS;IACT,UAAU;IAEV,OAAO;IACP,SAAS,CACP;KAAE,MAAM;KAAY,SAAS;KAA4B,EACzD,GAAG,QAAQ,KAAK,YAAY;KAC1B,MAAM,OAAO;KACb,SAAS,aAAa,OAAO,MAAM;KACpC,EAAE,CACJ;IACD,MAAM,OAEJ,QACA,SACA;AACA,SAAI,CAAC,UAAU,OAAO,SAAU;AAChC,YAAO,UAAU,WAAW,OAAO,CAAC,OAAO,UAAU;AAErD,SAAI,OAAO,SAAS,WAClB,MAAK,QACF,QAAQ,aAAa,SAAS,SAAS,WAAW,CAClD,SAAS,aAAa;AACrB,eAAS,UAAU,OAAO;OAC1B;AAGN,YAAO,KAAK,QAAQ;;IAEtB,SAA4B;AAC1B,SAAI,KAAK,OAAO,aAAa,KAAK,SAAS,SACzC,QAAO,GAAG,KAAK,SAAS,QAAQ,MAAM,EAAE,SAAS,WAAW,CAAC,OAAO;AAEtE,YAAO,KAAK,SAAS;;IAExB,CAAC;AAEF,mBAAgB,sBAAsB,QAAQ,MAAM,MAAM,WAAW;UAC/D;AACN,mBAAgB,OAAO,SAAS;;AAGlC,MAAI,OAAO,kBAAkB,SAE3B,SAAQ,KAAK,EAAE;AAGjB,mBAAiB;;AAGnB,KAAI,eAAe,WAAW,GAAG;AAC/B,YAAU,oCAAoC;AAC9C;;CAGF,MAAM,gBAAgB,eACnB,KAAK,SAAS,QAAQ,SAAS,KAAK,CAAC,CACrC,QAAQ,SAAS;AAChB,MAAI,CAAC,WAAW,KAAK,EAAE;AACrB,aAAU,mBAAmB,WAAW,KAAK,GAAG;AAChD,UAAO;;AAET,SAAO;GACP;AAEJ,KAAI,cAAc,WAAW,EAC3B;CAGF,MAAM,uBAAuB,wBAAwB,cAAc;AAEnE,OAAM,QAAQ,IACZ,cAAc,IAAI,OAAO,aAAa;AACpC,MAAI;AACF,SAAM,eAAe,UAAU,aAAa;IAC1C;IACA;IACA,UAAU,QAAQ;IAClB,iBAAiB,QAAQ;IAC1B,CAAC;WACK,OAAO;AACd,aACE,uBAAuB,SAAS,IAAK,MAAgB,UACtD;;GAEH,CACH;AAED,OAAM,gBAAgB,cAAc"}
1
+ {"version":3,"file":"extract.mjs","names":[],"sources":["../../src/extract.ts"],"sourcesContent":["import { existsSync } from 'node:fs';\nimport { relative, resolve } from 'node:path';\nimport type { PackageName } from '@intlayer/babel';\nimport { prepareIntlayer } from '@intlayer/chokidar/build';\nimport { logConfigDetails } from '@intlayer/chokidar/cli';\nimport { buildComponentFilesList, formatPath } from '@intlayer/chokidar/utils';\nimport * as ANSIColors from '@intlayer/config/colors';\nimport { colorize, getAppLogger, x } from '@intlayer/config/logger';\nimport {\n type GetConfigurationOptions,\n getConfiguration,\n} from '@intlayer/config/node';\nimport type { FilePathPattern } from '@intlayer/types/filePathPattern';\nimport { getUnmergedDictionaries } from '@intlayer/unmerged-dictionaries-entry';\nimport enquirer from 'enquirer';\n\ntype ExtractOptions = {\n files?: string[];\n output?: FilePathPattern;\n configOptions?: GetConfigurationOptions;\n codeOnly?: boolean;\n declarationOnly?: boolean;\n};\n\nexport const extract = async (options: ExtractOptions) => {\n const configuration = getConfiguration(options.configOptions);\n\n logConfigDetails(options?.configOptions);\n\n const appLogger = getAppLogger(configuration);\n\n const { baseDir } = configuration.system;\n const { output } = configuration.compiler;\n\n if (!output) {\n appLogger(\n `${x} No output configuration found. Add a ${colorize('compiler.output', ANSIColors.BLUE)} in your configuration.`,\n {\n level: 'error',\n }\n );\n return;\n }\n\n const { detectPackageName, extractContent } = await import('@intlayer/babel');\n\n // Detect package\n const packageName: PackageName = detectPackageName(baseDir);\n\n let filesToExtract = options.files ?? [];\n\n if (filesToExtract.length === 0) {\n // Await all promises simultaneously\n const fileList = buildComponentFilesList(configuration);\n\n // Flatten the nested arrays and remove duplicates\n // Relative paths for selection\n const choices = fileList.map((file) => {\n const relPath = relative(baseDir, file);\n\n return {\n value: file,\n label: relPath,\n };\n });\n\n if (choices.length === 0) {\n appLogger('No extractable files found in the project.');\n return;\n }\n\n const SELECT_ALL = '__select_all__';\n\n type PromptChoice = {\n name: string;\n enabled: boolean;\n disabled?: boolean | string;\n };\n\n type PromptContext = {\n choices: PromptChoice[];\n render(): void | Promise<void>;\n state: { submitted: boolean };\n selected: PromptChoice[];\n input: string;\n options: { multiple?: boolean };\n };\n\n let selectedFiles: string[] | symbol;\n try {\n const maxLen = Math.max((process.stdout.columns || 80) - 15, 20);\n const truncatePath = (path: string) =>\n path.length > maxLen ? `...${path.slice(-(maxLen - 3))}` : path;\n\n const { files: enquirerSelectedFiles } = await enquirer.prompt<{\n files: string[];\n }>({\n type: 'autocomplete',\n name: 'files',\n message: 'Select files to extract (Type to search):',\n multiple: true,\n // @ts-ignore limit exist but is not typed\n limit: 40,\n choices: [\n { name: SELECT_ALL, message: '────── Select all ──────' },\n ...choices.map((choice) => ({\n name: choice.value,\n message: truncatePath(choice.label),\n })),\n ],\n async toggle(\n this: PromptContext,\n choice: PromptChoice,\n enabled?: boolean\n ) {\n if (!choice || choice.disabled) return;\n choice.enabled = enabled == null ? !choice.enabled : enabled;\n\n if (choice.name === SELECT_ALL) {\n this.choices\n .filter((choiceEl) => choiceEl.name !== SELECT_ALL)\n .forEach((choiceEl) => {\n choiceEl.enabled = choice.enabled;\n });\n }\n\n return this.render();\n },\n format(this: PromptContext) {\n if (this.state?.submitted && this.options?.multiple) {\n return `${this.selected.filter((s) => s.name !== SELECT_ALL).length} file(s) selected`;\n }\n return this.input ?? '';\n },\n });\n\n selectedFiles = enquirerSelectedFiles.filter(\n (file) => file !== SELECT_ALL\n );\n } catch {\n selectedFiles = Symbol('cancel');\n }\n\n if (typeof selectedFiles === 'symbol') {\n // User cancelled\n process.exit(0);\n }\n\n filesToExtract = selectedFiles as string[];\n }\n\n if (filesToExtract.length === 0) {\n appLogger('No files selected for extraction.');\n return;\n }\n\n const absoluteFiles = filesToExtract\n .map((file) => resolve(baseDir, file))\n .filter((file) => {\n if (!existsSync(file)) {\n appLogger(`File not found: ${formatPath(file)}`);\n return false;\n }\n return true;\n });\n\n if (absoluteFiles.length === 0) {\n return;\n }\n\n const unmergedDictionaries = getUnmergedDictionaries(configuration);\n\n await Promise.all(\n absoluteFiles.map(async (filePath) => {\n try {\n await extractContent(filePath, packageName, {\n unmergedDictionaries,\n configuration,\n codeOnly: options.codeOnly,\n declarationOnly: options.declarationOnly,\n });\n } catch (error) {\n appLogger(\n `Failed to transform ${filePath}: ${(error as Error).message}`\n );\n }\n })\n );\n\n await prepareIntlayer(configuration); // Prepare Intlayer to apply the changes\n};\n"],"mappings":";;;;;;;;;;;;AAwBA,MAAa,UAAU,OAAO,YAA4B;CACxD,MAAM,gBAAgB,iBAAiB,QAAQ,cAAc;AAE7D,kBAAiB,SAAS,cAAc;CAExC,MAAM,YAAY,aAAa,cAAc;CAE7C,MAAM,EAAE,YAAY,cAAc;CAClC,MAAM,EAAE,WAAW,cAAc;AAEjC,KAAI,CAAC,QAAQ;AACX,YACE,GAAG,EAAE,wCAAwC,SAAS,mBAAmB,WAAW,KAAK,CAAC,0BAC1F,EACE,OAAO,SACR,CACF;AACD;;CAGF,MAAM,EAAE,mBAAmB,mBAAmB,MAAM,OAAO;CAG3D,MAAM,cAA2B,kBAAkB,QAAQ;CAE3D,IAAI,iBAAiB,QAAQ,SAAS,EAAE;AAExC,KAAI,eAAe,WAAW,GAAG;EAM/B,MAAM,UAJW,wBAAwB,cAAc,CAI9B,KAAK,SAAS;AAGrC,UAAO;IACL,OAAO;IACP,OAJc,SAAS,SAAS,KAAK;IAKtC;IACD;AAEF,MAAI,QAAQ,WAAW,GAAG;AACxB,aAAU,6CAA6C;AACvD;;EAGF,MAAM,aAAa;EAiBnB,IAAI;AACJ,MAAI;GACF,MAAM,SAAS,KAAK,KAAK,QAAQ,OAAO,WAAW,MAAM,IAAI,GAAG;GAChE,MAAM,gBAAgB,SACpB,KAAK,SAAS,SAAS,MAAM,KAAK,MAAM,EAAE,SAAS,GAAG,KAAK;GAE7D,MAAM,EAAE,OAAO,0BAA0B,MAAM,SAAS,OAErD;IACD,MAAM;IACN,MAAM;IACN,SAAS;IACT,UAAU;IAEV,OAAO;IACP,SAAS,CACP;KAAE,MAAM;KAAY,SAAS;KAA4B,EACzD,GAAG,QAAQ,KAAK,YAAY;KAC1B,MAAM,OAAO;KACb,SAAS,aAAa,OAAO,MAAM;KACpC,EAAE,CACJ;IACD,MAAM,OAEJ,QACA,SACA;AACA,SAAI,CAAC,UAAU,OAAO,SAAU;AAChC,YAAO,UAAU,WAAW,OAAO,CAAC,OAAO,UAAU;AAErD,SAAI,OAAO,SAAS,WAClB,MAAK,QACF,QAAQ,aAAa,SAAS,SAAS,WAAW,CAClD,SAAS,aAAa;AACrB,eAAS,UAAU,OAAO;OAC1B;AAGN,YAAO,KAAK,QAAQ;;IAEtB,SAA4B;AAC1B,SAAI,KAAK,OAAO,aAAa,KAAK,SAAS,SACzC,QAAO,GAAG,KAAK,SAAS,QAAQ,MAAM,EAAE,SAAS,WAAW,CAAC,OAAO;AAEtE,YAAO,KAAK,SAAS;;IAExB,CAAC;AAEF,mBAAgB,sBAAsB,QACnC,SAAS,SAAS,WACpB;UACK;AACN,mBAAgB,OAAO,SAAS;;AAGlC,MAAI,OAAO,kBAAkB,SAE3B,SAAQ,KAAK,EAAE;AAGjB,mBAAiB;;AAGnB,KAAI,eAAe,WAAW,GAAG;AAC/B,YAAU,oCAAoC;AAC9C;;CAGF,MAAM,gBAAgB,eACnB,KAAK,SAAS,QAAQ,SAAS,KAAK,CAAC,CACrC,QAAQ,SAAS;AAChB,MAAI,CAAC,WAAW,KAAK,EAAE;AACrB,aAAU,mBAAmB,WAAW,KAAK,GAAG;AAChD,UAAO;;AAET,SAAO;GACP;AAEJ,KAAI,cAAc,WAAW,EAC3B;CAGF,MAAM,uBAAuB,wBAAwB,cAAc;AAEnE,OAAM,QAAQ,IACZ,cAAc,IAAI,OAAO,aAAa;AACpC,MAAI;AACF,SAAM,eAAe,UAAU,aAAa;IAC1C;IACA;IACA,UAAU,QAAQ;IAClB,iBAAiB,QAAQ;IAC1B,CAAC;WACK,OAAO;AACd,aACE,uBAAuB,SAAS,IAAK,MAAgB,UACtD;;GAEH,CACH;AAED,OAAM,gBAAgB,cAAc"}
@@ -3,7 +3,7 @@ import { AIClient } from "../utils/setupAI.js";
3
3
  import { IntlayerConfig } from "@intlayer/types/config";
4
4
  import { AIOptions } from "@intlayer/api";
5
5
  import { Dictionary } from "@intlayer/types/dictionary";
6
- import * as _intlayer_chokidar_utils0 from "@intlayer/chokidar/utils";
6
+ import * as _$_intlayer_chokidar_utils0 from "@intlayer/chokidar/utils";
7
7
  import { AIConfig } from "@intlayer/ai";
8
8
 
9
9
  //#region src/fill/translateDictionary.d.ts
@@ -14,7 +14,7 @@ type TranslateDictionaryOptions = {
14
14
  mode: 'complete' | 'review';
15
15
  aiOptions?: AIOptions;
16
16
  fillMetadata?: boolean;
17
- onHandle?: ReturnType<typeof _intlayer_chokidar_utils0.getGlobalLimiter>;
17
+ onHandle?: ReturnType<typeof _$_intlayer_chokidar_utils0.getGlobalLimiter>;
18
18
  onSuccess?: () => void;
19
19
  onError?: (error: unknown) => void;
20
20
  getAbortError?: () => Error | null;
@@ -1 +1 @@
1
- {"version":3,"file":"translateDictionary.d.ts","names":[],"sources":["../../../src/fill/translateDictionary.ts"],"mappings":";;;;;;;;;KAoCK,yBAAA,GAA4B,eAAA;EAC/B,gBAAA,EAAkB,UAAA;AAAA;AAAA,KAGf,0BAAA;EACH,IAAA;EACA,SAAA,GAAY,SAAA;EACZ,YAAA;EACA,QAAA,GAAW,UAAA,QAFU,yBAAA,CAGuB,gBAAA;EAE5C,SAAA;EACA,OAAA,IAAW,KAAA;EACX,aAAA,SAAsB,KAAA;EACtB,QAAA,GAAW,QAAA;EACX,QAAA,GAAW,QAAA;AAAA;AAAA,cA+CA,mBAAA,GACX,IAAA,EAAM,eAAA,EACN,aAAA,EAAe,cAAA,EACf,OAAA,GAAU,0BAAA,KACT,OAAA,CAAQ,yBAAA"}
1
+ {"version":3,"file":"translateDictionary.d.ts","names":[],"sources":["../../../src/fill/translateDictionary.ts"],"mappings":";;;;;;;;;KAoCK,yBAAA,GAA4B,eAAA;EAC/B,gBAAA,EAAkB,UAAA;AAAA;AAAA,KAGf,0BAAA;EACH,IAAA;EACA,SAAA,GAAY,SAAA;EACZ,YAAA;EACA,QAAA,GAAW,UAAA,QAFU,2BAAA,CAGuB,gBAAA;EAE5C,SAAA;EACA,OAAA,IAAW,KAAA;EACX,aAAA,SAAsB,KAAA;EACtB,QAAA,GAAW,QAAA;EACX,QAAA,GAAW,QAAA;AAAA;AAAA,cA+CA,mBAAA,GACX,IAAA,EAAM,eAAA,EACN,aAAA,EAAe,cAAA,EACf,OAAA,GAAU,0BAAA,KACT,OAAA,CAAQ,yBAAA"}
@@ -1,9 +1,9 @@
1
1
  import { IntlayerConfig } from "@intlayer/types/config";
2
- import * as _intlayer_ai0 from "@intlayer/ai";
2
+ import * as _$_intlayer_ai0 from "@intlayer/ai";
3
3
  import { AIConfig, AIOptions } from "@intlayer/ai";
4
4
 
5
5
  //#region src/utils/setupAI.d.ts
6
- type AIClient = typeof _intlayer_ai0;
6
+ type AIClient = typeof _$_intlayer_ai0;
7
7
  type SetupAIResult = {
8
8
  aiClient?: AIClient;
9
9
  aiConfig?: AIConfig;
@@ -1 +1 @@
1
- {"version":3,"file":"setupAI.d.ts","names":[],"sources":["../../../src/utils/setupAI.ts"],"mappings":";;;;;KAMY,QAAA,UAAQ,aAAA;AAAA,KAEf,aAAA;EACH,QAAA,GAAW,QAAA;EACX,QAAA,GAAW,QAAA;EACX,UAAA;EACA,WAAA;AAAA;;AANmD;;;;cA4BxC,OAAA,GACX,aAAA,EAAe,cAAA,EACf,SAAA,GAAY,SAAA,KACX,OAAA,CAAQ,aAAA"}
1
+ {"version":3,"file":"setupAI.d.ts","names":[],"sources":["../../../src/utils/setupAI.ts"],"mappings":";;;;;KAMY,QAAA,UAAQ,eAAA;AAAA,KAEf,aAAA;EACH,QAAA,GAAW,QAAA;EACX,QAAA,GAAW,QAAA;EACX,UAAA;EACA,WAAA;AAAA;;AANmD;;;;cA4BxC,OAAA,GACX,aAAA,EAAe,cAAA,EACf,SAAA,GAAY,SAAA,KACX,OAAA,CAAQ,aAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@intlayer/cli",
3
- "version": "8.5.2",
3
+ "version": "8.6.0",
4
4
  "private": false,
5
5
  "description": "Provides uniform command-line interface scripts for Intlayer, used in packages like intlayer-cli and intlayer.",
6
6
  "keywords": [
@@ -67,16 +67,16 @@
67
67
  },
68
68
  "dependencies": {
69
69
  "@clack/prompts": "0.11.0",
70
- "@intlayer/ai": "8.5.2",
71
- "@intlayer/api": "8.5.2",
72
- "@intlayer/babel": "8.5.2",
73
- "@intlayer/chokidar": "8.5.2",
74
- "@intlayer/config": "8.5.1",
75
- "@intlayer/core": "8.5.2",
76
- "@intlayer/dictionaries-entry": "8.5.2",
77
- "@intlayer/remote-dictionaries-entry": "8.5.2",
78
- "@intlayer/types": "8.5.2",
79
- "@intlayer/unmerged-dictionaries-entry": "8.5.2",
70
+ "@intlayer/ai": "8.6.0",
71
+ "@intlayer/api": "8.6.0",
72
+ "@intlayer/babel": "8.6.0",
73
+ "@intlayer/chokidar": "8.6.0",
74
+ "@intlayer/config": "8.6.0",
75
+ "@intlayer/core": "8.6.0",
76
+ "@intlayer/dictionaries-entry": "8.6.0",
77
+ "@intlayer/remote-dictionaries-entry": "8.6.0",
78
+ "@intlayer/types": "8.6.0",
79
+ "@intlayer/unmerged-dictionaries-entry": "8.6.0",
80
80
  "commander": "14.0.3",
81
81
  "enquirer": "^2.4.1",
82
82
  "eventsource": "4.1.0",
@@ -88,12 +88,12 @@
88
88
  "@utils/ts-config-types": "1.0.4",
89
89
  "@utils/tsdown-config": "1.0.4",
90
90
  "rimraf": "6.1.3",
91
- "tsdown": "0.21.4",
91
+ "tsdown": "0.21.7",
92
92
  "typescript": "6.0.2",
93
- "vitest": "4.1.1"
93
+ "vitest": "4.1.2"
94
94
  },
95
95
  "peerDependencies": {
96
- "@intlayer/ai": "8.5.2"
96
+ "@intlayer/ai": "8.6.0"
97
97
  },
98
98
  "peerDependenciesMeta": {
99
99
  "@intlayer/ai": {