@teambit/workspace-config-files 1.0.1159 → 1.0.1161

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.
Files changed (38) hide show
  1. package/dist/outputs/format-skipped-output.d.ts +5 -0
  2. package/dist/outputs/format-skipped-output.js +33 -0
  3. package/dist/outputs/format-skipped-output.js.map +1 -0
  4. package/dist/outputs/format-skipped-output.spec.d.ts +1 -0
  5. package/dist/outputs/format-skipped-output.spec.js +80 -0
  6. package/dist/outputs/format-skipped-output.spec.js.map +1 -0
  7. package/dist/outputs/format-write-output.js +16 -1
  8. package/dist/outputs/format-write-output.js.map +1 -1
  9. package/dist/outputs/index.d.ts +1 -0
  10. package/dist/outputs/index.js +13 -0
  11. package/dist/outputs/index.js.map +1 -1
  12. package/dist/outputs/verbose-format-write-output.js +16 -1
  13. package/dist/outputs/verbose-format-write-output.js.map +1 -1
  14. package/dist/{preview-1788966965383.js → preview-1789144897043.js} +1 -1
  15. package/dist/workspace-config-files.main.runtime.d.ts +16 -0
  16. package/dist/workspace-config-files.main.runtime.js +28 -4
  17. package/dist/workspace-config-files.main.runtime.js.map +1 -1
  18. package/dist/writers/extending-config-files.d.ts +15 -2
  19. package/dist/writers/extending-config-files.js +35 -7
  20. package/dist/writers/extending-config-files.js.map +1 -1
  21. package/dist/writers/extending-config-files.spec.d.ts +1 -0
  22. package/dist/writers/extending-config-files.spec.js +91 -0
  23. package/dist/writers/extending-config-files.spec.js.map +1 -0
  24. package/dist/writers/index.d.ts +2 -2
  25. package/dist/writers/index.js +6 -0
  26. package/dist/writers/index.js.map +1 -1
  27. package/dist/ws-config.cmd.d.ts +1 -0
  28. package/dist/ws-config.cmd.js +5 -3
  29. package/dist/ws-config.cmd.js.map +1 -1
  30. package/outputs/format-skipped-output.spec.ts +51 -0
  31. package/outputs/format-skipped-output.ts +14 -0
  32. package/outputs/format-write-output.ts +4 -1
  33. package/outputs/index.ts +1 -0
  34. package/outputs/verbose-format-write-output.ts +4 -1
  35. package/package.json +4 -4
  36. package/writers/extending-config-files.spec.ts +67 -0
  37. package/writers/extending-config-files.ts +54 -24
  38. package/writers/index.ts +2 -1
@@ -1 +1 @@
1
- {"version":3,"names":["_fsExtra","data","_interopRequireDefault","require","_path","_globby","_chalk","_bitError","_pMapSeries","_legacy","_yesno","_lodash","_cli","_workspace","_envs","_logger","_workspaceConfigFiles","_wsConfig","_writeFailed","_workspaceConfigFiles2","_writers","e","__esModule","default","_defineProperty","r","t","_toPropertyKey","Object","defineProperty","value","enumerable","configurable","writable","i","_toPrimitive","Symbol","toPrimitive","call","TypeError","String","Number","PromptCanceled","BitError","constructor","chalk","yellow","WorkspaceConfigFilesMain","workspace","envs","logger","config","writeConfigFiles","options","ConsumerNotFound","defaultOpts","clean","dedupe","silent","dryRun","throw","optionsWithDefaults","defaults","execContext","getExecContext","pathsToClean","writeErr","writeResults","calcPathsToClean","writers","write","allWrittenFiles","writersResult","flatMap","writerResult","extendingConfigFiles","extendingConfigFile","filePaths","filter","pathToClean","includes","join","path","deleteFiles","err","info","WriteConfigFilesFailed","cleanResults","wsDir","writeConfigFilesIfEnabled","shouldWrite","isWorkspaceConfigWriteEnabled","undefined","cleanConfigFiles","enableWorkspaceConfigWrite","listConfigWriters","execContexts","result","map","executionContext","configWriters","getConfigWriters","envId","envRuntime","id","groupByWriterId","writerList","reduce","acc","envConfigWriter","forEach","configWriter","push","envsExecutionContext","opts","envCompDirsMap","getEnvComponentsDirsMap","configsRootDir","getConfigsRootDir","componentsRootDir","getComponentsRootDir","writerIdsToEnvEntriesMap","filteredWriterIdsToEnvEntriesMap","pick","totalRealConfigFiles","totalExtendingConfigFiles","results","pMapSeries","entries","writerId","envEntries","oneResult","handleOneIdWriter","totalWrittenFiles","envCompsDirsMap","writtenRealConfigFilesMap","handleRealConfigFiles","writtenExtendingConfigFiles","handleExtendingConfigFiles","writtenRealConfigFiles","values","length","curr","realConfigFiles","userConfiguredDir","getCacheDir","getComponentsRootDirFromComponentsRootDir","normalized","normalize","replace","getComponentsRootDirFromDefaultDir","useDefaultDirectory","defaultDir","defaultDirectory","segments","split","dynamicSegmentIndex","findIndex","segment","startsWith","slice","fromComponentsRootDir","fromDefaultDir","rootDir","components","list","runtime","createEnvironment","getEnvExecutionContext","envExecution","toString","env","paths","c","componentDir","relative","envExecutionContext","workspaceConfig","isFunction","addToEnvsNotImplementing","getFlatConfigWriters","promptForCleaning","filteredConfigWriters","uniq","patterns","currPaths","globby","sync","cwd","dot","onlyFiles","ignore","filteredPaths","fullPath","isBitGenerated","flat","envsNotImplementing","getEnvsNotImplementing","keys","clearStatusLine","ok","yesno","question","underline","bold","Promise","all","f","fs","remove","provider","cli","loggerAspect","createLogger","WorkspaceConfigFilesAspect","registerService","WorkspaceConfigFilesService","workspaceConfigFilesMain","wsConfigCmd","WsConfigCmd","commands","WsConfigWriteCmd","WsConfigCleanCmd","WsConfigListCmd","register","exports","CLIAspect","WorkspaceAspect","EnvsAspect","LoggerAspect","MainRuntime","addRuntime","_default"],"sources":["workspace-config-files.main.runtime.ts"],"sourcesContent":["import fs from 'fs-extra';\nimport { join, normalize } from 'path';\nimport globby from 'globby';\nimport chalk from 'chalk';\nimport { BitError } from '@teambit/bit-error';\n\nclass PromptCanceled extends BitError {\n constructor() {\n super(chalk.yellow('operation aborted'));\n }\n}\nimport pMapSeries from 'p-map-series';\nimport { ConsumerNotFound } from '@teambit/legacy.consumer';\nimport yesno from 'yesno';\nimport { defaults, flatMap, isFunction, pick, uniq } from 'lodash';\nimport type { CLIMain } from '@teambit/cli';\nimport { CLIAspect, MainRuntime } from '@teambit/cli';\nimport { WorkspaceAspect } from '@teambit/workspace';\nimport type { Workspace } from '@teambit/workspace';\nimport { EnvsAspect } from '@teambit/envs';\nimport type { EnvsMain, Environment, ExecutionContext } from '@teambit/envs';\nimport { LoggerAspect } from '@teambit/logger';\nimport type { LoggerMain, Logger } from '@teambit/logger';\nimport { WorkspaceConfigFilesAspect } from './workspace-config-files.aspect';\nimport type { ConfigWriterEntry } from './config-writer-entry';\nimport { WsConfigCleanCmd, WsConfigCmd, WsConfigListCmd, WsConfigWriteCmd } from './ws-config.cmd';\nimport WriteConfigFilesFailed from './exceptions/write-failed';\nimport { WorkspaceConfigFilesService } from './workspace-config-files.service';\nimport type { EnvsWrittenExtendingConfigFiles, EnvsWrittenRealConfigFiles } from './writers';\nimport { handleRealConfigFiles, handleExtendingConfigFiles } from './writers';\n\n/**\n * Configs that can be configured in the workspace.jsonc file\n */\nexport type WorkspaceConfigFilesAspectConfig = {\n /**\n * The root directory for real configuration files\n * This is usually under node_modules\n */\n configsRootDir?: string;\n /**\n * The root directory for component files\n * We will hoist config files only up to this directory\n */\n componentsRootDir?: string;\n /**\n * Whether to use the default directory as components root dir for configuration files\n * This will take the config from:\n * \"teambit.workspace/workspace\": {\n * \"componentsRootDir\": \"bit-components/{scope}/{name}\"\n * }\n * it will take the constant part from it, up until the first {\n */\n useDefaultDirectory?: boolean;\n enableWorkspaceConfigWrite?: boolean;\n};\n\nexport type EnvConfigWriter = {\n envId: string;\n executionContext: ExecutionContext;\n configWriters: ConfigWriterEntry[];\n};\n\nexport type EnvConfigWriterEntry = {\n envId: string;\n configWriter: ConfigWriterEntry;\n executionContext: ExecutionContext;\n};\n\ntype WriterIdsToEnvEntriesMap = {\n [writerId: string]: EnvConfigWriterEntry[];\n};\n\nexport type EnvConfigWritersList = Array<EnvConfigWriter>;\n\nexport type CleanConfigFilesOptions = {\n silent?: boolean; // no prompt\n dryRun?: boolean;\n writers?: string[];\n};\n\nexport type WriteConfigFilesOptions = {\n clean?: boolean;\n silent?: boolean; // no prompt\n dedupe?: boolean;\n dryRun?: boolean;\n throw?: boolean;\n writers?: string[];\n};\n\nexport type CompPathExtendingHashMap = { [compPath: string]: string };\n\nexport type EnvMapValue = { env: Environment; id: string[]; paths: string[] };\nexport type EnvCompsDirsMap = { [envId: string]: EnvMapValue };\n\nexport type OneConfigWriterIdResult = {\n writerId: string;\n totalWrittenFiles: number;\n realConfigFiles: EnvsWrittenRealConfigFiles;\n totalRealConfigFiles: number;\n extendingConfigFiles: EnvsWrittenExtendingConfigFiles;\n totalExtendingConfigFiles: number;\n};\n\nexport type WriteResults = {\n writersResult: OneConfigWriterIdResult[];\n totalWrittenFiles: number;\n totalRealConfigFiles: number;\n totalExtendingConfigFiles: number;\n};\n\nexport type WriteConfigFilesResult = {\n cleanResults?: string[];\n writeResults: WriteResults;\n wsDir: string;\n err?: Error;\n};\n\nexport class WorkspaceConfigFilesMain {\n private envsNotImplementing = {};\n\n constructor(\n private workspace: Workspace,\n private envs: EnvsMain,\n private logger: Logger,\n private config: WorkspaceConfigFilesAspectConfig\n ) {}\n\n /**\n * It writes the configuration files for the workspace\n * for example: tsconfig, eslint config and prettier config files.\n * @param {WriteConfigFilesOptions} options - WriteConfigFilesOptions = {}\n * @returns An object with the following properties:\n * - writeResults: An object with the following properties:\n * - aspectsWritersResults: An array of objects with the following properties:\n * - aspect: The aspect that was written\n * - totalWrittenFiles: The number of files that were written\n * - totalWrittenFiles: The total number of files that were written\n * - cleanResults: array of deleted paths\n */\n async writeConfigFiles(options: WriteConfigFilesOptions = {}): Promise<WriteConfigFilesResult> {\n if (!this.workspace) {\n throw new ConsumerNotFound();\n }\n const defaultOpts: WriteConfigFilesOptions = {\n clean: false,\n dedupe: false,\n silent: false,\n dryRun: false,\n throw: true,\n };\n const optionsWithDefaults = defaults(options, defaultOpts);\n const execContext = await this.getExecContext();\n\n let pathsToClean: string[] | undefined = [];\n let writeErr;\n let writeResults;\n try {\n if (optionsWithDefaults.clean) {\n pathsToClean = await this.calcPathsToClean({ writers: optionsWithDefaults.writers });\n }\n\n writeResults = await this.write(execContext, optionsWithDefaults);\n const allWrittenFiles = writeResults.writersResult.flatMap((writerResult) => {\n return writerResult.extendingConfigFiles.flatMap((extendingConfigFile) => {\n return extendingConfigFile.extendingConfigFile.filePaths;\n });\n });\n // Avoid delete and re-create files that were written by other config writers\n // instead of deleting at the beginning then write all\n // we write all and then delete the files that were not written by the config writers\n // This reduces the config files that re-created (as many times no changes needed)\n // which prevent issues with needing to restart the ts-server in the ide\n pathsToClean = pathsToClean.filter(\n (pathToClean) => !allWrittenFiles.includes(join(this.workspace.path, pathToClean))\n );\n await this.deleteFiles(pathsToClean);\n } catch (err) {\n this.logger.info('writeConfigFiles failed', err);\n if (optionsWithDefaults.throw) {\n throw new WriteConfigFilesFailed();\n }\n writeErr = err;\n }\n\n return { writeResults, cleanResults: pathsToClean, wsDir: this.workspace.path, err: writeErr };\n }\n\n /**\n * This will check the config.enableWorkspaceConfigWrite before writing the config files.\n */\n async writeConfigFilesIfEnabled(options: WriteConfigFilesOptions = {}): Promise<WriteConfigFilesResult | undefined> {\n const shouldWrite = this.isWorkspaceConfigWriteEnabled();\n if (!shouldWrite) return undefined;\n return this.writeConfigFiles(options);\n }\n\n /**\n * It cleans (delete) the config files from the workspace.\n * This will check each file and will only delete it in case it was generated by bit\n * @param {CleanConfigFilesOptions} options - CleanConfigFilesOptions = {}\n * @returns An array of strings.\n */\n async cleanConfigFiles(options: CleanConfigFilesOptions = {}): Promise<string[]> {\n // const execContext = await this.getExecContext();\n if (!this.workspace) {\n throw new ConsumerNotFound();\n }\n const cleanResults = await this.clean(options);\n return cleanResults;\n }\n\n /**\n * The function checks if the auto writing of workspace configuration is enabled.\n * if it's enabled we will re-generate the configuration files upon bit create\n * @returns the boolean value of `!!this.config.enableWorkspaceConfigWrite`.\n */\n isWorkspaceConfigWriteEnabled() {\n return !!this.config.enableWorkspaceConfigWrite;\n }\n\n /**\n * It returns a list of all the config writers that have been registered with the config writer slot\n * @returns An array of objects with aspectId and configWriter properties.\n */\n async listConfigWriters(): Promise<EnvConfigWritersList> {\n if (!this.workspace) {\n throw new ConsumerNotFound();\n }\n const execContexts = await this.getExecContext();\n\n const result: EnvConfigWritersList = execContexts.map((executionContext) => {\n const configWriters = this.getConfigWriters(executionContext);\n return { envId: executionContext.envRuntime.id, executionContext, configWriters };\n });\n return result;\n }\n\n private groupByWriterId(writerList: EnvConfigWritersList): WriterIdsToEnvEntriesMap {\n return writerList.reduce((acc, envConfigWriter: EnvConfigWriter) => {\n envConfigWriter.configWriters.forEach((configWriter: ConfigWriterEntry) => {\n acc[configWriter.id] = acc[configWriter.id] || [];\n acc[configWriter.id].push({ configWriter, envId: envConfigWriter.envId });\n });\n return acc;\n }, {});\n }\n\n private async write(envsExecutionContext: ExecutionContext[], opts: WriteConfigFilesOptions): Promise<WriteResults> {\n const envCompDirsMap = this.getEnvComponentsDirsMap(envsExecutionContext);\n const configsRootDir = this.getConfigsRootDir();\n const componentsRootDir = this.getComponentsRootDir();\n const configWriters = await this.listConfigWriters();\n const writerIdsToEnvEntriesMap = this.groupByWriterId(configWriters);\n const filteredWriterIdsToEnvEntriesMap = opts.writers\n ? pick(writerIdsToEnvEntriesMap, opts.writers)\n : writerIdsToEnvEntriesMap;\n let totalRealConfigFiles = 0;\n let totalExtendingConfigFiles = 0;\n const results = await pMapSeries(\n Object.entries(filteredWriterIdsToEnvEntriesMap),\n async ([writerId, envEntries]) => {\n const oneResult = await this.handleOneIdWriter(\n writerId,\n envEntries,\n envCompDirsMap,\n configsRootDir,\n componentsRootDir,\n opts\n );\n totalRealConfigFiles += oneResult.totalRealConfigFiles;\n totalExtendingConfigFiles += oneResult.totalExtendingConfigFiles;\n return oneResult;\n }\n );\n\n const totalWrittenFiles = totalRealConfigFiles + totalExtendingConfigFiles;\n return { writersResult: results, totalWrittenFiles, totalRealConfigFiles, totalExtendingConfigFiles };\n }\n\n private async handleOneIdWriter(\n writerId: string,\n envEntries: EnvConfigWriterEntry[],\n envCompsDirsMap: EnvCompsDirsMap,\n configsRootDir: string,\n componentsRootDir: string | undefined,\n opts: WriteConfigFilesOptions\n ): Promise<OneConfigWriterIdResult> {\n const writtenRealConfigFilesMap = await handleRealConfigFiles(\n envEntries,\n envCompsDirsMap,\n configsRootDir,\n this.workspace.path,\n opts\n );\n const writtenExtendingConfigFiles = await handleExtendingConfigFiles(\n envEntries,\n envCompsDirsMap,\n writtenRealConfigFilesMap,\n configsRootDir,\n componentsRootDir,\n this.workspace.path,\n opts\n );\n\n const writtenRealConfigFiles = Object.values(writtenRealConfigFilesMap);\n const totalRealConfigFiles = writtenRealConfigFiles.length;\n const totalExtendingConfigFiles = writtenExtendingConfigFiles.reduce(\n (acc, curr) => acc + curr.extendingConfigFile.filePaths.length,\n 0\n );\n const totalWrittenFiles = totalRealConfigFiles + totalExtendingConfigFiles;\n return {\n writerId,\n totalWrittenFiles,\n realConfigFiles: writtenRealConfigFiles,\n totalRealConfigFiles,\n extendingConfigFiles: writtenExtendingConfigFiles,\n totalExtendingConfigFiles,\n };\n }\n\n private getConfigsRootDir(): string {\n const userConfiguredDir = this.config.configsRootDir;\n return userConfiguredDir ? join(this.workspace.path, userConfiguredDir) : this.getCacheDir(this.workspace.path);\n }\n\n private getComponentsRootDirFromComponentsRootDir(): string | undefined {\n const componentsRootDir = this.config.componentsRootDir;\n if (!componentsRootDir) return undefined;\n // Remove leading './' or '/' and trailing slash\n const normalized = normalize(componentsRootDir)\n .replace(/^\\.?\\//, '')\n .replace(/\\/$/, '');\n return normalized;\n }\n\n private getComponentsRootDirFromDefaultDir(): string | undefined {\n if (!this.config.useDefaultDirectory) return undefined;\n const defaultDir = this.workspace.defaultDirectory;\n if (!defaultDir) return undefined;\n // get path until first dynamic segment (segment with {})\n const segments = defaultDir.split('/');\n const dynamicSegmentIndex = segments.findIndex((segment) => segment.startsWith('{'));\n if (dynamicSegmentIndex === -1) return defaultDir;\n return segments.slice(0, dynamicSegmentIndex).join('/');\n }\n\n private getComponentsRootDir(): string | undefined {\n const fromComponentsRootDir = this.getComponentsRootDirFromComponentsRootDir();\n if (fromComponentsRootDir) return fromComponentsRootDir;\n const fromDefaultDir = this.getComponentsRootDirFromDefaultDir();\n if (fromDefaultDir) return fromDefaultDir;\n }\n\n private getCacheDir(rootDir): string {\n return join(rootDir, 'node_modules', '.cache');\n }\n\n private async getExecContext(): Promise<ExecutionContext[]> {\n const components = await this.workspace.list();\n const runtime = await this.envs.createEnvironment(components);\n const execContext = runtime.getEnvExecutionContext();\n return execContext;\n }\n\n private getEnvComponentsDirsMap(envsExecutionContext: ExecutionContext[]): EnvCompsDirsMap {\n const envCompDirsMap = envsExecutionContext.reduce((acc, envExecution) => {\n const envRuntime = envExecution.envRuntime;\n const envId = envRuntime.id.toString();\n const value = {\n id: envRuntime.id,\n env: envRuntime.env,\n paths: envRuntime.components.map((c) => this.workspace.componentDir(c.id, undefined, { relative: true })),\n };\n acc[envId] = value;\n return acc;\n }, {});\n return envCompDirsMap;\n }\n\n private getConfigWriters(envExecutionContext: ExecutionContext): ConfigWriterEntry[] {\n if (envExecutionContext.env.workspaceConfig && isFunction(envExecutionContext.env.workspaceConfig)) {\n return envExecutionContext.env.workspaceConfig();\n }\n this.addToEnvsNotImplementing(envExecutionContext.env.id);\n return [];\n }\n\n private getFlatConfigWriters(envsExecutionContext: ExecutionContext[]): ConfigWriterEntry[] {\n return flatMap(envsExecutionContext, (envExecutionContext) => {\n return this.getConfigWriters(envExecutionContext);\n });\n }\n\n /**\n * Clean config files written by the config-writers\n * @param envsExecutionContext\n * @param param1\n * @returns Array of paths of deleted config files\n */\n async clean({ dryRun, silent, writers }: WriteConfigFilesOptions): Promise<string[]> {\n const paths = await this.calcPathsToClean({ writers });\n if (dryRun) return paths;\n if (!silent) await this.promptForCleaning(paths);\n await this.deleteFiles(paths);\n return paths;\n }\n\n private async calcPathsToClean({ writers }: WriteConfigFilesOptions): Promise<string[]> {\n const execContext = await this.getExecContext();\n const configWriters = this.getFlatConfigWriters(execContext);\n const filteredConfigWriters = writers\n ? configWriters.filter((configWriter) => writers.includes(configWriter.id))\n : configWriters;\n\n const paths = uniq(\n filteredConfigWriters\n .map((configWriter) => {\n const patterns = configWriter.patterns;\n const currPaths = globby.sync(patterns, {\n cwd: this.workspace.path,\n dot: true,\n onlyFiles: true,\n ignore: ['**/node_modules/**'],\n });\n const filteredPaths = currPaths.filter((path) => {\n const fullPath = join(this.workspace.path, path);\n return configWriter.isBitGenerated ? configWriter.isBitGenerated(fullPath) : true;\n });\n return filteredPaths;\n })\n .flat()\n );\n return paths;\n }\n\n private addToEnvsNotImplementing(envId: string) {\n this.envsNotImplementing[envId] = true;\n }\n\n getEnvsNotImplementing() {\n return Object.keys(this.envsNotImplementing);\n }\n\n private async promptForCleaning(paths: string[]) {\n this.logger.clearStatusLine();\n const ok = await yesno({\n question: `${chalk.underline('The following files will be deleted:')}\n${paths.join('\\n')}\n${chalk.bold('Do you want to continue? [yes(y)/no(n)]')}`,\n });\n if (!ok) {\n throw new PromptCanceled();\n }\n }\n\n private async deleteFiles(paths: string[]) {\n await Promise.all(paths.map((f) => fs.remove(join(this.workspace.path, f))));\n }\n\n static slots = [];\n // define your aspect dependencies here.\n // in case you need to use another aspect API.\n static dependencies = [CLIAspect, WorkspaceAspect, EnvsAspect, LoggerAspect];\n\n static runtime = MainRuntime;\n\n static defaultConfig: Partial<WorkspaceConfigFilesAspectConfig> = {\n enableWorkspaceConfigWrite: false,\n };\n\n static async provider(\n [cli, workspace, envs, loggerAspect]: [CLIMain, Workspace, EnvsMain, LoggerMain],\n config: WorkspaceConfigFilesAspectConfig\n ) {\n const logger = loggerAspect.createLogger(WorkspaceConfigFilesAspect.id);\n envs.registerService(new WorkspaceConfigFilesService(logger));\n\n const workspaceConfigFilesMain = new WorkspaceConfigFilesMain(workspace, envs, logger, config);\n const wsConfigCmd = new WsConfigCmd();\n wsConfigCmd.commands = [\n new WsConfigWriteCmd(workspaceConfigFilesMain),\n new WsConfigCleanCmd(workspaceConfigFilesMain),\n new WsConfigListCmd(workspaceConfigFilesMain),\n ];\n cli.register(wsConfigCmd);\n return workspaceConfigFilesMain;\n }\n}\n\nWorkspaceConfigFilesAspect.addRuntime(WorkspaceConfigFilesMain);\n\nexport default WorkspaceConfigFilesMain;\n"],"mappings":";;;;;;AAAA,SAAAA,SAAA;EAAA,MAAAC,IAAA,GAAAC,sBAAA,CAAAC,OAAA;EAAAH,QAAA,YAAAA,CAAA;IAAA,OAAAC,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AACA,SAAAG,MAAA;EAAA,MAAAH,IAAA,GAAAE,OAAA;EAAAC,KAAA,YAAAA,CAAA;IAAA,OAAAH,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AACA,SAAAI,QAAA;EAAA,MAAAJ,IAAA,GAAAC,sBAAA,CAAAC,OAAA;EAAAE,OAAA,YAAAA,CAAA;IAAA,OAAAJ,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AACA,SAAAK,OAAA;EAAA,MAAAL,IAAA,GAAAC,sBAAA,CAAAC,OAAA;EAAAG,MAAA,YAAAA,CAAA;IAAA,OAAAL,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AACA,SAAAM,UAAA;EAAA,MAAAN,IAAA,GAAAE,OAAA;EAAAI,SAAA,YAAAA,CAAA;IAAA,OAAAN,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAOA,SAAAO,YAAA;EAAA,MAAAP,IAAA,GAAAC,sBAAA,CAAAC,OAAA;EAAAK,WAAA,YAAAA,CAAA;IAAA,OAAAP,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AACA,SAAAQ,QAAA;EAAA,MAAAR,IAAA,GAAAE,OAAA;EAAAM,OAAA,YAAAA,CAAA;IAAA,OAAAR,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AACA,SAAAS,OAAA;EAAA,MAAAT,IAAA,GAAAC,sBAAA,CAAAC,OAAA;EAAAO,MAAA,YAAAA,CAAA;IAAA,OAAAT,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AACA,SAAAU,QAAA;EAAA,MAAAV,IAAA,GAAAE,OAAA;EAAAQ,OAAA,YAAAA,CAAA;IAAA,OAAAV,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAEA,SAAAW,KAAA;EAAA,MAAAX,IAAA,GAAAE,OAAA;EAAAS,IAAA,YAAAA,CAAA;IAAA,OAAAX,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AACA,SAAAY,WAAA;EAAA,MAAAZ,IAAA,GAAAE,OAAA;EAAAU,UAAA,YAAAA,CAAA;IAAA,OAAAZ,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAEA,SAAAa,MAAA;EAAA,MAAAb,IAAA,GAAAE,OAAA;EAAAW,KAAA,YAAAA,CAAA;IAAA,OAAAb,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAEA,SAAAc,QAAA;EAAA,MAAAd,IAAA,GAAAE,OAAA;EAAAY,OAAA,YAAAA,CAAA;IAAA,OAAAd,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAEA,SAAAe,sBAAA;EAAA,MAAAf,IAAA,GAAAE,OAAA;EAAAa,qBAAA,YAAAA,CAAA;IAAA,OAAAf,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAEA,SAAAgB,UAAA;EAAA,MAAAhB,IAAA,GAAAE,OAAA;EAAAc,SAAA,YAAAA,CAAA;IAAA,OAAAhB,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AACA,SAAAiB,aAAA;EAAA,MAAAjB,IAAA,GAAAC,sBAAA,CAAAC,OAAA;EAAAe,YAAA,YAAAA,CAAA;IAAA,OAAAjB,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AACA,SAAAkB,uBAAA;EAAA,MAAAlB,IAAA,GAAAE,OAAA;EAAAgB,sBAAA,YAAAA,CAAA;IAAA,OAAAlB,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAEA,SAAAmB,SAAA;EAAA,MAAAnB,IAAA,GAAAE,OAAA;EAAAiB,QAAA,YAAAA,CAAA;IAAA,OAAAnB,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAA8E,SAAAC,uBAAAmB,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAAA,SAAAG,gBAAAH,CAAA,EAAAI,CAAA,EAAAC,CAAA,YAAAD,CAAA,GAAAE,cAAA,CAAAF,CAAA,MAAAJ,CAAA,GAAAO,MAAA,CAAAC,cAAA,CAAAR,CAAA,EAAAI,CAAA,IAAAK,KAAA,EAAAJ,CAAA,EAAAK,UAAA,MAAAC,YAAA,MAAAC,QAAA,UAAAZ,CAAA,CAAAI,CAAA,IAAAC,CAAA,EAAAL,CAAA;AAAA,SAAAM,eAAAD,CAAA,QAAAQ,CAAA,GAAAC,YAAA,CAAAT,CAAA,uCAAAQ,CAAA,GAAAA,CAAA,GAAAA,CAAA;AAAA,SAAAC,aAAAT,CAAA,EAAAD,CAAA,2BAAAC,CAAA,KAAAA,CAAA,SAAAA,CAAA,MAAAL,CAAA,GAAAK,CAAA,CAAAU,MAAA,CAAAC,WAAA,kBAAAhB,CAAA,QAAAa,CAAA,GAAAb,CAAA,CAAAiB,IAAA,CAAAZ,CAAA,EAAAD,CAAA,uCAAAS,CAAA,SAAAA,CAAA,YAAAK,SAAA,yEAAAd,CAAA,GAAAe,MAAA,GAAAC,MAAA,EAAAf,CAAA;AAvB9E,MAAMgB,cAAc,SAASC,oBAAQ,CAAC;EACpCC,WAAWA,CAAA,EAAG;IACZ,KAAK,CAACC,gBAAK,CAACC,MAAM,CAAC,mBAAmB,CAAC,CAAC;EAC1C;AACF;AAqBA;AACA;AACA;;AAqFO,MAAMC,wBAAwB,CAAC;EAGpCH,WAAWA,CACDI,SAAoB,EACpBC,IAAc,EACdC,MAAc,EACdC,MAAwC,EAChD;IAAA,KAJQH,SAAoB,GAApBA,SAAoB;IAAA,KACpBC,IAAc,GAAdA,IAAc;IAAA,KACdC,MAAc,GAAdA,MAAc;IAAA,KACdC,MAAwC,GAAxCA,MAAwC;IAAA3B,eAAA,8BANpB,CAAC,CAAC;EAO7B;;EAEH;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACE,MAAM4B,gBAAgBA,CAACC,OAAgC,GAAG,CAAC,CAAC,EAAmC;IAC7F,IAAI,CAAC,IAAI,CAACL,SAAS,EAAE;MACnB,MAAM,KAAIM,0BAAgB,EAAC,CAAC;IAC9B;IACA,MAAMC,WAAoC,GAAG;MAC3CC,KAAK,EAAE,KAAK;MACZC,MAAM,EAAE,KAAK;MACbC,MAAM,EAAE,KAAK;MACbC,MAAM,EAAE,KAAK;MACbC,KAAK,EAAE;IACT,CAAC;IACD,MAAMC,mBAAmB,GAAG,IAAAC,kBAAQ,EAACT,OAAO,EAAEE,WAAW,CAAC;IAC1D,MAAMQ,WAAW,GAAG,MAAM,IAAI,CAACC,cAAc,CAAC,CAAC;IAE/C,IAAIC,YAAkC,GAAG,EAAE;IAC3C,IAAIC,QAAQ;IACZ,IAAIC,YAAY;IAChB,IAAI;MACF,IAAIN,mBAAmB,CAACL,KAAK,EAAE;QAC7BS,YAAY,GAAG,MAAM,IAAI,CAACG,gBAAgB,CAAC;UAAEC,OAAO,EAAER,mBAAmB,CAACQ;QAAQ,CAAC,CAAC;MACtF;MAEAF,YAAY,GAAG,MAAM,IAAI,CAACG,KAAK,CAACP,WAAW,EAAEF,mBAAmB,CAAC;MACjE,MAAMU,eAAe,GAAGJ,YAAY,CAACK,aAAa,CAACC,OAAO,CAAEC,YAAY,IAAK;QAC3E,OAAOA,YAAY,CAACC,oBAAoB,CAACF,OAAO,CAAEG,mBAAmB,IAAK;UACxE,OAAOA,mBAAmB,CAACA,mBAAmB,CAACC,SAAS;QAC1D,CAAC,CAAC;MACJ,CAAC,CAAC;MACF;MACA;MACA;MACA;MACA;MACAZ,YAAY,GAAGA,YAAY,CAACa,MAAM,CAC/BC,WAAW,IAAK,CAACR,eAAe,CAACS,QAAQ,CAAC,IAAAC,YAAI,EAAC,IAAI,CAACjC,SAAS,CAACkC,IAAI,EAAEH,WAAW,CAAC,CACnF,CAAC;MACD,MAAM,IAAI,CAACI,WAAW,CAAClB,YAAY,CAAC;IACtC,CAAC,CAAC,OAAOmB,GAAG,EAAE;MACZ,IAAI,CAAClC,MAAM,CAACmC,IAAI,CAAC,yBAAyB,EAAED,GAAG,CAAC;MAChD,IAAIvB,mBAAmB,CAACD,KAAK,EAAE;QAC7B,MAAM,KAAI0B,sBAAsB,EAAC,CAAC;MACpC;MACApB,QAAQ,GAAGkB,GAAG;IAChB;IAEA,OAAO;MAAEjB,YAAY;MAAEoB,YAAY,EAAEtB,YAAY;MAAEuB,KAAK,EAAE,IAAI,CAACxC,SAAS,CAACkC,IAAI;MAAEE,GAAG,EAAElB;IAAS,CAAC;EAChG;;EAEA;AACF;AACA;EACE,MAAMuB,yBAAyBA,CAACpC,OAAgC,GAAG,CAAC,CAAC,EAA+C;IAClH,MAAMqC,WAAW,GAAG,IAAI,CAACC,6BAA6B,CAAC,CAAC;IACxD,IAAI,CAACD,WAAW,EAAE,OAAOE,SAAS;IAClC,OAAO,IAAI,CAACxC,gBAAgB,CAACC,OAAO,CAAC;EACvC;;EAEA;AACF;AACA;AACA;AACA;AACA;EACE,MAAMwC,gBAAgBA,CAACxC,OAAgC,GAAG,CAAC,CAAC,EAAqB;IAC/E;IACA,IAAI,CAAC,IAAI,CAACL,SAAS,EAAE;MACnB,MAAM,KAAIM,0BAAgB,EAAC,CAAC;IAC9B;IACA,MAAMiC,YAAY,GAAG,MAAM,IAAI,CAAC/B,KAAK,CAACH,OAAO,CAAC;IAC9C,OAAOkC,YAAY;EACrB;;EAEA;AACF;AACA;AACA;AACA;EACEI,6BAA6BA,CAAA,EAAG;IAC9B,OAAO,CAAC,CAAC,IAAI,CAACxC,MAAM,CAAC2C,0BAA0B;EACjD;;EAEA;AACF;AACA;AACA;EACE,MAAMC,iBAAiBA,CAAA,EAAkC;IACvD,IAAI,CAAC,IAAI,CAAC/C,SAAS,EAAE;MACnB,MAAM,KAAIM,0BAAgB,EAAC,CAAC;IAC9B;IACA,MAAM0C,YAAY,GAAG,MAAM,IAAI,CAAChC,cAAc,CAAC,CAAC;IAEhD,MAAMiC,MAA4B,GAAGD,YAAY,CAACE,GAAG,CAAEC,gBAAgB,IAAK;MAC1E,MAAMC,aAAa,GAAG,IAAI,CAACC,gBAAgB,CAACF,gBAAgB,CAAC;MAC7D,OAAO;QAAEG,KAAK,EAAEH,gBAAgB,CAACI,UAAU,CAACC,EAAE;QAAEL,gBAAgB;QAAEC;MAAc,CAAC;IACnF,CAAC,CAAC;IACF,OAAOH,MAAM;EACf;EAEQQ,eAAeA,CAACC,UAAgC,EAA4B;IAClF,OAAOA,UAAU,CAACC,MAAM,CAAC,CAACC,GAAG,EAAEC,eAAgC,KAAK;MAClEA,eAAe,CAACT,aAAa,CAACU,OAAO,CAAEC,YAA+B,IAAK;QACzEH,GAAG,CAACG,YAAY,CAACP,EAAE,CAAC,GAAGI,GAAG,CAACG,YAAY,CAACP,EAAE,CAAC,IAAI,EAAE;QACjDI,GAAG,CAACG,YAAY,CAACP,EAAE,CAAC,CAACQ,IAAI,CAAC;UAAED,YAAY;UAAET,KAAK,EAAEO,eAAe,CAACP;QAAM,CAAC,CAAC;MAC3E,CAAC,CAAC;MACF,OAAOM,GAAG;IACZ,CAAC,EAAE,CAAC,CAAC,CAAC;EACR;EAEA,MAActC,KAAKA,CAAC2C,oBAAwC,EAAEC,IAA6B,EAAyB;IAClH,MAAMC,cAAc,GAAG,IAAI,CAACC,uBAAuB,CAACH,oBAAoB,CAAC;IACzE,MAAMI,cAAc,GAAG,IAAI,CAACC,iBAAiB,CAAC,CAAC;IAC/C,MAAMC,iBAAiB,GAAG,IAAI,CAACC,oBAAoB,CAAC,CAAC;IACrD,MAAMpB,aAAa,GAAG,MAAM,IAAI,CAACL,iBAAiB,CAAC,CAAC;IACpD,MAAM0B,wBAAwB,GAAG,IAAI,CAAChB,eAAe,CAACL,aAAa,CAAC;IACpE,MAAMsB,gCAAgC,GAAGR,IAAI,CAAC7C,OAAO,GACjD,IAAAsD,cAAI,EAACF,wBAAwB,EAAEP,IAAI,CAAC7C,OAAO,CAAC,GAC5CoD,wBAAwB;IAC5B,IAAIG,oBAAoB,GAAG,CAAC;IAC5B,IAAIC,yBAAyB,GAAG,CAAC;IACjC,MAAMC,OAAO,GAAG,MAAM,IAAAC,qBAAU,EAC9BnG,MAAM,CAACoG,OAAO,CAACN,gCAAgC,CAAC,EAChD,OAAO,CAACO,QAAQ,EAAEC,UAAU,CAAC,KAAK;MAChC,MAAMC,SAAS,GAAG,MAAM,IAAI,CAACC,iBAAiB,CAC5CH,QAAQ,EACRC,UAAU,EACVf,cAAc,EACdE,cAAc,EACdE,iBAAiB,EACjBL,IACF,CAAC;MACDU,oBAAoB,IAAIO,SAAS,CAACP,oBAAoB;MACtDC,yBAAyB,IAAIM,SAAS,CAACN,yBAAyB;MAChE,OAAOM,SAAS;IAClB,CACF,CAAC;IAED,MAAME,iBAAiB,GAAGT,oBAAoB,GAAGC,yBAAyB;IAC1E,OAAO;MAAErD,aAAa,EAAEsD,OAAO;MAAEO,iBAAiB;MAAET,oBAAoB;MAAEC;IAA0B,CAAC;EACvG;EAEA,MAAcO,iBAAiBA,CAC7BH,QAAgB,EAChBC,UAAkC,EAClCI,eAAgC,EAChCjB,cAAsB,EACtBE,iBAAqC,EACrCL,IAA6B,EACK;IAClC,MAAMqB,yBAAyB,GAAG,MAAM,IAAAC,gCAAqB,EAC3DN,UAAU,EACVI,eAAe,EACfjB,cAAc,EACd,IAAI,CAACrE,SAAS,CAACkC,IAAI,EACnBgC,IACF,CAAC;IACD,MAAMuB,2BAA2B,GAAG,MAAM,IAAAC,qCAA0B,EAClER,UAAU,EACVI,eAAe,EACfC,yBAAyB,EACzBlB,cAAc,EACdE,iBAAiB,EACjB,IAAI,CAACvE,SAAS,CAACkC,IAAI,EACnBgC,IACF,CAAC;IAED,MAAMyB,sBAAsB,GAAG/G,MAAM,CAACgH,MAAM,CAACL,yBAAyB,CAAC;IACvE,MAAMX,oBAAoB,GAAGe,sBAAsB,CAACE,MAAM;IAC1D,MAAMhB,yBAAyB,GAAGY,2BAA2B,CAAC9B,MAAM,CAClE,CAACC,GAAG,EAAEkC,IAAI,KAAKlC,GAAG,GAAGkC,IAAI,CAAClE,mBAAmB,CAACC,SAAS,CAACgE,MAAM,EAC9D,CACF,CAAC;IACD,MAAMR,iBAAiB,GAAGT,oBAAoB,GAAGC,yBAAyB;IAC1E,OAAO;MACLI,QAAQ;MACRI,iBAAiB;MACjBU,eAAe,EAAEJ,sBAAsB;MACvCf,oBAAoB;MACpBjD,oBAAoB,EAAE8D,2BAA2B;MACjDZ;IACF,CAAC;EACH;EAEQP,iBAAiBA,CAAA,EAAW;IAClC,MAAM0B,iBAAiB,GAAG,IAAI,CAAC7F,MAAM,CAACkE,cAAc;IACpD,OAAO2B,iBAAiB,GAAG,IAAA/D,YAAI,EAAC,IAAI,CAACjC,SAAS,CAACkC,IAAI,EAAE8D,iBAAiB,CAAC,GAAG,IAAI,CAACC,WAAW,CAAC,IAAI,CAACjG,SAAS,CAACkC,IAAI,CAAC;EACjH;EAEQgE,yCAAyCA,CAAA,EAAuB;IACtE,MAAM3B,iBAAiB,GAAG,IAAI,CAACpE,MAAM,CAACoE,iBAAiB;IACvD,IAAI,CAACA,iBAAiB,EAAE,OAAO3B,SAAS;IACxC;IACA,MAAMuD,UAAU,GAAG,IAAAC,iBAAS,EAAC7B,iBAAiB,CAAC,CAC5C8B,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CACrBA,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;IACrB,OAAOF,UAAU;EACnB;EAEQG,kCAAkCA,CAAA,EAAuB;IAC/D,IAAI,CAAC,IAAI,CAACnG,MAAM,CAACoG,mBAAmB,EAAE,OAAO3D,SAAS;IACtD,MAAM4D,UAAU,GAAG,IAAI,CAACxG,SAAS,CAACyG,gBAAgB;IAClD,IAAI,CAACD,UAAU,EAAE,OAAO5D,SAAS;IACjC;IACA,MAAM8D,QAAQ,GAAGF,UAAU,CAACG,KAAK,CAAC,GAAG,CAAC;IACtC,MAAMC,mBAAmB,GAAGF,QAAQ,CAACG,SAAS,CAAEC,OAAO,IAAKA,OAAO,CAACC,UAAU,CAAC,GAAG,CAAC,CAAC;IACpF,IAAIH,mBAAmB,KAAK,CAAC,CAAC,EAAE,OAAOJ,UAAU;IACjD,OAAOE,QAAQ,CAACM,KAAK,CAAC,CAAC,EAAEJ,mBAAmB,CAAC,CAAC3E,IAAI,CAAC,GAAG,CAAC;EACzD;EAEQuC,oBAAoBA,CAAA,EAAuB;IACjD,MAAMyC,qBAAqB,GAAG,IAAI,CAACf,yCAAyC,CAAC,CAAC;IAC9E,IAAIe,qBAAqB,EAAE,OAAOA,qBAAqB;IACvD,MAAMC,cAAc,GAAG,IAAI,CAACZ,kCAAkC,CAAC,CAAC;IAChE,IAAIY,cAAc,EAAE,OAAOA,cAAc;EAC3C;EAEQjB,WAAWA,CAACkB,OAAO,EAAU;IACnC,OAAO,IAAAlF,YAAI,EAACkF,OAAO,EAAE,cAAc,EAAE,QAAQ,CAAC;EAChD;EAEA,MAAcnG,cAAcA,CAAA,EAAgC;IAC1D,MAAMoG,UAAU,GAAG,MAAM,IAAI,CAACpH,SAAS,CAACqH,IAAI,CAAC,CAAC;IAC9C,MAAMC,OAAO,GAAG,MAAM,IAAI,CAACrH,IAAI,CAACsH,iBAAiB,CAACH,UAAU,CAAC;IAC7D,MAAMrG,WAAW,GAAGuG,OAAO,CAACE,sBAAsB,CAAC,CAAC;IACpD,OAAOzG,WAAW;EACpB;EAEQqD,uBAAuBA,CAACH,oBAAwC,EAAmB;IACzF,MAAME,cAAc,GAAGF,oBAAoB,CAACN,MAAM,CAAC,CAACC,GAAG,EAAE6D,YAAY,KAAK;MACxE,MAAMlE,UAAU,GAAGkE,YAAY,CAAClE,UAAU;MAC1C,MAAMD,KAAK,GAAGC,UAAU,CAACC,EAAE,CAACkE,QAAQ,CAAC,CAAC;MACtC,MAAM5I,KAAK,GAAG;QACZ0E,EAAE,EAAED,UAAU,CAACC,EAAE;QACjBmE,GAAG,EAAEpE,UAAU,CAACoE,GAAG;QACnBC,KAAK,EAAErE,UAAU,CAAC6D,UAAU,CAAClE,GAAG,CAAE2E,CAAC,IAAK,IAAI,CAAC7H,SAAS,CAAC8H,YAAY,CAACD,CAAC,CAACrE,EAAE,EAAEZ,SAAS,EAAE;UAAEmF,QAAQ,EAAE;QAAK,CAAC,CAAC;MAC1G,CAAC;MACDnE,GAAG,CAACN,KAAK,CAAC,GAAGxE,KAAK;MAClB,OAAO8E,GAAG;IACZ,CAAC,EAAE,CAAC,CAAC,CAAC;IACN,OAAOO,cAAc;EACvB;EAEQd,gBAAgBA,CAAC2E,mBAAqC,EAAuB;IACnF,IAAIA,mBAAmB,CAACL,GAAG,CAACM,eAAe,IAAI,IAAAC,oBAAU,EAACF,mBAAmB,CAACL,GAAG,CAACM,eAAe,CAAC,EAAE;MAClG,OAAOD,mBAAmB,CAACL,GAAG,CAACM,eAAe,CAAC,CAAC;IAClD;IACA,IAAI,CAACE,wBAAwB,CAACH,mBAAmB,CAACL,GAAG,CAACnE,EAAE,CAAC;IACzD,OAAO,EAAE;EACX;EAEQ4E,oBAAoBA,CAACnE,oBAAwC,EAAuB;IAC1F,OAAO,IAAAxC,iBAAO,EAACwC,oBAAoB,EAAG+D,mBAAmB,IAAK;MAC5D,OAAO,IAAI,CAAC3E,gBAAgB,CAAC2E,mBAAmB,CAAC;IACnD,CAAC,CAAC;EACJ;;EAEA;AACF;AACA;AACA;AACA;AACA;EACE,MAAMxH,KAAKA,CAAC;IAAEG,MAAM;IAAED,MAAM;IAAEW;EAAiC,CAAC,EAAqB;IACnF,MAAMuG,KAAK,GAAG,MAAM,IAAI,CAACxG,gBAAgB,CAAC;MAAEC;IAAQ,CAAC,CAAC;IACtD,IAAIV,MAAM,EAAE,OAAOiH,KAAK;IACxB,IAAI,CAAClH,MAAM,EAAE,MAAM,IAAI,CAAC2H,iBAAiB,CAACT,KAAK,CAAC;IAChD,MAAM,IAAI,CAACzF,WAAW,CAACyF,KAAK,CAAC;IAC7B,OAAOA,KAAK;EACd;EAEA,MAAcxG,gBAAgBA,CAAC;IAAEC;EAAiC,CAAC,EAAqB;IACtF,MAAMN,WAAW,GAAG,MAAM,IAAI,CAACC,cAAc,CAAC,CAAC;IAC/C,MAAMoC,aAAa,GAAG,IAAI,CAACgF,oBAAoB,CAACrH,WAAW,CAAC;IAC5D,MAAMuH,qBAAqB,GAAGjH,OAAO,GACjC+B,aAAa,CAACtB,MAAM,CAAEiC,YAAY,IAAK1C,OAAO,CAACW,QAAQ,CAAC+B,YAAY,CAACP,EAAE,CAAC,CAAC,GACzEJ,aAAa;IAEjB,MAAMwE,KAAK,GAAG,IAAAW,cAAI,EAChBD,qBAAqB,CAClBpF,GAAG,CAAEa,YAAY,IAAK;MACrB,MAAMyE,QAAQ,GAAGzE,YAAY,CAACyE,QAAQ;MACtC,MAAMC,SAAS,GAAGC,iBAAM,CAACC,IAAI,CAACH,QAAQ,EAAE;QACtCI,GAAG,EAAE,IAAI,CAAC5I,SAAS,CAACkC,IAAI;QACxB2G,GAAG,EAAE,IAAI;QACTC,SAAS,EAAE,IAAI;QACfC,MAAM,EAAE,CAAC,oBAAoB;MAC/B,CAAC,CAAC;MACF,MAAMC,aAAa,GAAGP,SAAS,CAAC3G,MAAM,CAAEI,IAAI,IAAK;QAC/C,MAAM+G,QAAQ,GAAG,IAAAhH,YAAI,EAAC,IAAI,CAACjC,SAAS,CAACkC,IAAI,EAAEA,IAAI,CAAC;QAChD,OAAO6B,YAAY,CAACmF,cAAc,GAAGnF,YAAY,CAACmF,cAAc,CAACD,QAAQ,CAAC,GAAG,IAAI;MACnF,CAAC,CAAC;MACF,OAAOD,aAAa;IACtB,CAAC,CAAC,CACDG,IAAI,CAAC,CACV,CAAC;IACD,OAAOvB,KAAK;EACd;EAEQO,wBAAwBA,CAAC7E,KAAa,EAAE;IAC9C,IAAI,CAAC8F,mBAAmB,CAAC9F,KAAK,CAAC,GAAG,IAAI;EACxC;EAEA+F,sBAAsBA,CAAA,EAAG;IACvB,OAAOzK,MAAM,CAAC0K,IAAI,CAAC,IAAI,CAACF,mBAAmB,CAAC;EAC9C;EAEA,MAAcf,iBAAiBA,CAACT,KAAe,EAAE;IAC/C,IAAI,CAAC1H,MAAM,CAACqJ,eAAe,CAAC,CAAC;IAC7B,MAAMC,EAAE,GAAG,MAAM,IAAAC,gBAAK,EAAC;MACrBC,QAAQ,EAAE,GAAG7J,gBAAK,CAAC8J,SAAS,CAAC,sCAAsC,CAAC;AAC1E,EAAE/B,KAAK,CAAC3F,IAAI,CAAC,IAAI,CAAC;AAClB,EAAEpC,gBAAK,CAAC+J,IAAI,CAAC,yCAAyC,CAAC;IACnD,CAAC,CAAC;IACF,IAAI,CAACJ,EAAE,EAAE;MACP,MAAM,IAAI9J,cAAc,CAAC,CAAC;IAC5B;EACF;EAEA,MAAcyC,WAAWA,CAACyF,KAAe,EAAE;IACzC,MAAMiC,OAAO,CAACC,GAAG,CAAClC,KAAK,CAAC1E,GAAG,CAAE6G,CAAC,IAAKC,kBAAE,CAACC,MAAM,CAAC,IAAAhI,YAAI,EAAC,IAAI,CAACjC,SAAS,CAACkC,IAAI,EAAE6H,CAAC,CAAC,CAAC,CAAC,CAAC;EAC9E;EAaA,aAAaG,QAAQA,CACnB,CAACC,GAAG,EAAEnK,SAAS,EAAEC,IAAI,EAAEmK,YAAY,CAA6C,EAChFjK,MAAwC,EACxC;IACA,MAAMD,MAAM,GAAGkK,YAAY,CAACC,YAAY,CAACC,kDAA0B,CAAC9G,EAAE,CAAC;IACvEvD,IAAI,CAACsK,eAAe,CAAC,KAAIC,oDAA2B,EAACtK,MAAM,CAAC,CAAC;IAE7D,MAAMuK,wBAAwB,GAAG,IAAI1K,wBAAwB,CAACC,SAAS,EAAEC,IAAI,EAAEC,MAAM,EAAEC,MAAM,CAAC;IAC9F,MAAMuK,WAAW,GAAG,KAAIC,uBAAW,EAAC,CAAC;IACrCD,WAAW,CAACE,QAAQ,GAAG,CACrB,KAAIC,4BAAgB,EAACJ,wBAAwB,CAAC,EAC9C,KAAIK,4BAAgB,EAACL,wBAAwB,CAAC,EAC9C,KAAIM,2BAAe,EAACN,wBAAwB,CAAC,CAC9C;IACDN,GAAG,CAACa,QAAQ,CAACN,WAAW,CAAC;IACzB,OAAOD,wBAAwB;EACjC;AACF;AAACQ,OAAA,CAAAlL,wBAAA,GAAAA,wBAAA;AAAAvB,eAAA,CAnXYuB,wBAAwB,WAuVpB,EAAE;AACjB;AACA;AAAAvB,eAAA,CAzVWuB,wBAAwB,kBA0Vb,CAACmL,gBAAS,EAAEC,4BAAe,EAAEC,kBAAU,EAAEC,sBAAY,CAAC;AAAA7M,eAAA,CA1VjEuB,wBAAwB,aA4VlBuL,kBAAW;AAAA9M,eAAA,CA5VjBuB,wBAAwB,mBA8V+B;EAChE+C,0BAA0B,EAAE;AAC9B,CAAC;AAqBHwH,kDAA0B,CAACiB,UAAU,CAACxL,wBAAwB,CAAC;AAAC,IAAAyL,QAAA,GAAAP,OAAA,CAAA1M,OAAA,GAEjDwB,wBAAwB","ignoreList":[]}
1
+ {"version":3,"names":["_fsExtra","data","_interopRequireDefault","require","_path","_globby","_chalk","_bitError","_pMapSeries","_legacy","_yesno","_lodash","_cli","_workspace","_envs","_logger","_workspaceConfigFiles","_wsConfig","_writeFailed","_workspaceConfigFiles2","_writers","_outputs","e","__esModule","default","_defineProperty","r","t","_toPropertyKey","Object","defineProperty","value","enumerable","configurable","writable","i","_toPrimitive","Symbol","toPrimitive","call","TypeError","String","Number","PromptCanceled","BitError","constructor","chalk","yellow","WorkspaceConfigFilesMain","workspace","envs","logger","config","writeConfigFiles","options","ConsumerNotFound","defaultOpts","clean","dedupe","silent","dryRun","throw","force","optionsWithDefaults","defaults","execContext","getExecContext","pathsToClean","writeErr","writeResults","calcPathsToClean","writers","write","allWrittenFiles","writersResult","flatMap","writerResult","extendingConfigFiles","extendingConfigFile","filePaths","filter","pathToClean","includes","join","path","deleteFiles","err","info","WriteConfigFilesFailed","cleanResults","wsDir","writeConfigFilesIfEnabled","shouldWrite","isWorkspaceConfigWriteEnabled","undefined","cleanConfigFiles","formatSkippedFilesWarning","skippedPaths","length","formatSkippedOutput","enableWorkspaceConfigWrite","listConfigWriters","execContexts","result","map","executionContext","configWriters","getConfigWriters","envId","envRuntime","id","groupByWriterId","writerList","reduce","acc","envConfigWriter","forEach","configWriter","push","envsExecutionContext","opts","envCompDirsMap","getEnvComponentsDirsMap","configsRootDir","getConfigsRootDir","componentsRootDir","getComponentsRootDir","writerIdsToEnvEntriesMap","filteredWriterIdsToEnvEntriesMap","pick","totalRealConfigFiles","totalExtendingConfigFiles","results","pMapSeries","entries","writerId","envEntries","oneResult","handleOneIdWriter","totalWrittenFiles","envCompsDirsMap","writtenRealConfigFilesMap","handleRealConfigFiles","writtenExtendingConfigFiles","handleExtendingConfigFiles","writtenRealConfigFiles","values","curr","realConfigFiles","userConfiguredDir","getCacheDir","getComponentsRootDirFromComponentsRootDir","normalized","normalize","replace","getComponentsRootDirFromDefaultDir","useDefaultDirectory","defaultDir","defaultDirectory","segments","split","dynamicSegmentIndex","findIndex","segment","startsWith","slice","fromComponentsRootDir","fromDefaultDir","rootDir","components","list","runtime","createEnvironment","getEnvExecutionContext","envExecution","toString","env","paths","c","componentDir","relative","envExecutionContext","workspaceConfig","isFunction","addToEnvsNotImplementing","getFlatConfigWriters","promptForCleaning","filteredConfigWriters","uniq","patterns","currPaths","globby","sync","cwd","dot","onlyFiles","ignore","filteredPaths","fullPath","isBitGenerated","flat","envsNotImplementing","getEnvsNotImplementing","keys","clearStatusLine","ok","yesno","question","underline","bold","Promise","all","f","fs","remove","provider","cli","loggerAspect","createLogger","WorkspaceConfigFilesAspect","registerService","WorkspaceConfigFilesService","workspaceConfigFilesMain","wsConfigCmd","WsConfigCmd","commands","WsConfigWriteCmd","WsConfigCleanCmd","WsConfigListCmd","register","exports","CLIAspect","WorkspaceAspect","EnvsAspect","LoggerAspect","MainRuntime","addRuntime","_default"],"sources":["workspace-config-files.main.runtime.ts"],"sourcesContent":["import fs from 'fs-extra';\nimport { join, normalize } from 'path';\nimport globby from 'globby';\nimport chalk from 'chalk';\nimport { BitError } from '@teambit/bit-error';\n\nclass PromptCanceled extends BitError {\n constructor() {\n super(chalk.yellow('operation aborted'));\n }\n}\nimport pMapSeries from 'p-map-series';\nimport { ConsumerNotFound } from '@teambit/legacy.consumer';\nimport yesno from 'yesno';\nimport { defaults, flatMap, isFunction, pick, uniq } from 'lodash';\nimport type { CLIMain } from '@teambit/cli';\nimport { CLIAspect, MainRuntime } from '@teambit/cli';\nimport { WorkspaceAspect } from '@teambit/workspace';\nimport type { Workspace } from '@teambit/workspace';\nimport { EnvsAspect } from '@teambit/envs';\nimport type { EnvsMain, Environment, ExecutionContext } from '@teambit/envs';\nimport { LoggerAspect } from '@teambit/logger';\nimport type { LoggerMain, Logger } from '@teambit/logger';\nimport { WorkspaceConfigFilesAspect } from './workspace-config-files.aspect';\nimport type { ConfigWriterEntry } from './config-writer-entry';\nimport { WsConfigCleanCmd, WsConfigCmd, WsConfigListCmd, WsConfigWriteCmd } from './ws-config.cmd';\nimport WriteConfigFilesFailed from './exceptions/write-failed';\nimport { WorkspaceConfigFilesService } from './workspace-config-files.service';\nimport type { EnvsWrittenExtendingConfigFiles, EnvsWrittenRealConfigFiles } from './writers';\nimport { handleRealConfigFiles, handleExtendingConfigFiles } from './writers';\nimport { formatSkippedOutput } from './outputs';\n\n/**\n * Configs that can be configured in the workspace.jsonc file\n */\nexport type WorkspaceConfigFilesAspectConfig = {\n /**\n * The root directory for real configuration files\n * This is usually under node_modules\n */\n configsRootDir?: string;\n /**\n * The root directory for component files\n * We will hoist config files only up to this directory\n */\n componentsRootDir?: string;\n /**\n * Whether to use the default directory as components root dir for configuration files\n * This will take the config from:\n * \"teambit.workspace/workspace\": {\n * \"componentsRootDir\": \"bit-components/{scope}/{name}\"\n * }\n * it will take the constant part from it, up until the first {\n */\n useDefaultDirectory?: boolean;\n enableWorkspaceConfigWrite?: boolean;\n};\n\nexport type EnvConfigWriter = {\n envId: string;\n executionContext: ExecutionContext;\n configWriters: ConfigWriterEntry[];\n};\n\nexport type EnvConfigWriterEntry = {\n envId: string;\n configWriter: ConfigWriterEntry;\n executionContext: ExecutionContext;\n};\n\ntype WriterIdsToEnvEntriesMap = {\n [writerId: string]: EnvConfigWriterEntry[];\n};\n\nexport type EnvConfigWritersList = Array<EnvConfigWriter>;\n\nexport type CleanConfigFilesOptions = {\n silent?: boolean; // no prompt\n dryRun?: boolean;\n writers?: string[];\n};\n\nexport type WriteConfigFilesOptions = {\n clean?: boolean;\n silent?: boolean; // no prompt\n dedupe?: boolean;\n dryRun?: boolean;\n throw?: boolean;\n writers?: string[];\n /**\n * override config files that already exist in the workspace and were not generated by bit.\n * by default such files are left untouched, so the user's own configuration isn't lost.\n */\n force?: boolean;\n};\n\nexport type CompPathExtendingHashMap = { [compPath: string]: string };\n\nexport type EnvMapValue = { env: Environment; id: string[]; paths: string[] };\nexport type EnvCompsDirsMap = { [envId: string]: EnvMapValue };\n\nexport type OneConfigWriterIdResult = {\n writerId: string;\n totalWrittenFiles: number;\n realConfigFiles: EnvsWrittenRealConfigFiles;\n totalRealConfigFiles: number;\n extendingConfigFiles: EnvsWrittenExtendingConfigFiles;\n totalExtendingConfigFiles: number;\n skippedPaths: string[];\n};\n\nexport type WriteResults = {\n writersResult: OneConfigWriterIdResult[];\n totalWrittenFiles: number;\n totalRealConfigFiles: number;\n totalExtendingConfigFiles: number;\n /**\n * absolute paths of config files that already existed in the workspace and were not generated by bit,\n * therefore were not overridden.\n */\n skippedPaths: string[];\n};\n\nexport type WriteConfigFilesResult = {\n cleanResults?: string[];\n writeResults: WriteResults;\n wsDir: string;\n err?: Error;\n};\n\nexport class WorkspaceConfigFilesMain {\n private envsNotImplementing = {};\n\n constructor(\n private workspace: Workspace,\n private envs: EnvsMain,\n private logger: Logger,\n private config: WorkspaceConfigFilesAspectConfig\n ) {}\n\n /**\n * It writes the configuration files for the workspace\n * for example: tsconfig, eslint config and prettier config files.\n * @param {WriteConfigFilesOptions} options - WriteConfigFilesOptions = {}\n * @returns An object with the following properties:\n * - writeResults: An object with the following properties:\n * - aspectsWritersResults: An array of objects with the following properties:\n * - aspect: The aspect that was written\n * - totalWrittenFiles: The number of files that were written\n * - totalWrittenFiles: The total number of files that were written\n * - cleanResults: array of deleted paths\n */\n async writeConfigFiles(options: WriteConfigFilesOptions = {}): Promise<WriteConfigFilesResult> {\n if (!this.workspace) {\n throw new ConsumerNotFound();\n }\n const defaultOpts: WriteConfigFilesOptions = {\n clean: false,\n dedupe: false,\n silent: false,\n dryRun: false,\n throw: true,\n force: false,\n };\n const optionsWithDefaults = defaults(options, defaultOpts);\n const execContext = await this.getExecContext();\n\n let pathsToClean: string[] | undefined = [];\n let writeErr;\n let writeResults;\n try {\n if (optionsWithDefaults.clean) {\n pathsToClean = await this.calcPathsToClean({ writers: optionsWithDefaults.writers });\n }\n\n writeResults = await this.write(execContext, optionsWithDefaults);\n const allWrittenFiles = writeResults.writersResult.flatMap((writerResult) => {\n return writerResult.extendingConfigFiles.flatMap((extendingConfigFile) => {\n return extendingConfigFile.extendingConfigFile.filePaths;\n });\n });\n // Avoid delete and re-create files that were written by other config writers\n // instead of deleting at the beginning then write all\n // we write all and then delete the files that were not written by the config writers\n // This reduces the config files that re-created (as many times no changes needed)\n // which prevent issues with needing to restart the ts-server in the ide\n pathsToClean = pathsToClean.filter(\n (pathToClean) => !allWrittenFiles.includes(join(this.workspace.path, pathToClean))\n );\n await this.deleteFiles(pathsToClean);\n } catch (err) {\n this.logger.info('writeConfigFiles failed', err);\n if (optionsWithDefaults.throw) {\n throw new WriteConfigFilesFailed();\n }\n writeErr = err;\n }\n\n return { writeResults, cleanResults: pathsToClean, wsDir: this.workspace.path, err: writeErr };\n }\n\n /**\n * This will check the config.enableWorkspaceConfigWrite before writing the config files.\n */\n async writeConfigFilesIfEnabled(options: WriteConfigFilesOptions = {}): Promise<WriteConfigFilesResult | undefined> {\n const shouldWrite = this.isWorkspaceConfigWriteEnabled();\n if (!shouldWrite) return undefined;\n return this.writeConfigFiles(options);\n }\n\n /**\n * It cleans (delete) the config files from the workspace.\n * This will check each file and will only delete it in case it was generated by bit\n * @param {CleanConfigFilesOptions} options - CleanConfigFilesOptions = {}\n * @returns An array of strings.\n */\n async cleanConfigFiles(options: CleanConfigFilesOptions = {}): Promise<string[]> {\n // const execContext = await this.getExecContext();\n if (!this.workspace) {\n throw new ConsumerNotFound();\n }\n const cleanResults = await this.clean(options);\n return cleanResults;\n }\n\n /**\n * a human readable warning about config files bit didn't override because they were authored by the user.\n * returns an empty string when there are no such files.\n */\n formatSkippedFilesWarning(skippedPaths: string[] = []): string {\n if (!skippedPaths.length) return '';\n return formatSkippedOutput(skippedPaths, this.workspace.path);\n }\n\n /**\n * The function checks if the auto writing of workspace configuration is enabled.\n * if it's enabled we will re-generate the configuration files upon bit create\n * @returns the boolean value of `!!this.config.enableWorkspaceConfigWrite`.\n */\n isWorkspaceConfigWriteEnabled() {\n return !!this.config.enableWorkspaceConfigWrite;\n }\n\n /**\n * It returns a list of all the config writers that have been registered with the config writer slot\n * @returns An array of objects with aspectId and configWriter properties.\n */\n async listConfigWriters(): Promise<EnvConfigWritersList> {\n if (!this.workspace) {\n throw new ConsumerNotFound();\n }\n const execContexts = await this.getExecContext();\n\n const result: EnvConfigWritersList = execContexts.map((executionContext) => {\n const configWriters = this.getConfigWriters(executionContext);\n return { envId: executionContext.envRuntime.id, executionContext, configWriters };\n });\n return result;\n }\n\n private groupByWriterId(writerList: EnvConfigWritersList): WriterIdsToEnvEntriesMap {\n return writerList.reduce((acc, envConfigWriter: EnvConfigWriter) => {\n envConfigWriter.configWriters.forEach((configWriter: ConfigWriterEntry) => {\n acc[configWriter.id] = acc[configWriter.id] || [];\n acc[configWriter.id].push({ configWriter, envId: envConfigWriter.envId });\n });\n return acc;\n }, {});\n }\n\n private async write(envsExecutionContext: ExecutionContext[], opts: WriteConfigFilesOptions): Promise<WriteResults> {\n const envCompDirsMap = this.getEnvComponentsDirsMap(envsExecutionContext);\n const configsRootDir = this.getConfigsRootDir();\n const componentsRootDir = this.getComponentsRootDir();\n const configWriters = await this.listConfigWriters();\n const writerIdsToEnvEntriesMap = this.groupByWriterId(configWriters);\n const filteredWriterIdsToEnvEntriesMap = opts.writers\n ? pick(writerIdsToEnvEntriesMap, opts.writers)\n : writerIdsToEnvEntriesMap;\n let totalRealConfigFiles = 0;\n let totalExtendingConfigFiles = 0;\n const skippedPaths: string[] = [];\n const results = await pMapSeries(\n Object.entries(filteredWriterIdsToEnvEntriesMap),\n async ([writerId, envEntries]) => {\n const oneResult = await this.handleOneIdWriter(\n writerId,\n envEntries,\n envCompDirsMap,\n configsRootDir,\n componentsRootDir,\n opts\n );\n totalRealConfigFiles += oneResult.totalRealConfigFiles;\n totalExtendingConfigFiles += oneResult.totalExtendingConfigFiles;\n skippedPaths.push(...oneResult.skippedPaths);\n return oneResult;\n }\n );\n\n const totalWrittenFiles = totalRealConfigFiles + totalExtendingConfigFiles;\n return { writersResult: results, totalWrittenFiles, totalRealConfigFiles, totalExtendingConfigFiles, skippedPaths };\n }\n\n private async handleOneIdWriter(\n writerId: string,\n envEntries: EnvConfigWriterEntry[],\n envCompsDirsMap: EnvCompsDirsMap,\n configsRootDir: string,\n componentsRootDir: string | undefined,\n opts: WriteConfigFilesOptions\n ): Promise<OneConfigWriterIdResult> {\n const writtenRealConfigFilesMap = await handleRealConfigFiles(\n envEntries,\n envCompsDirsMap,\n configsRootDir,\n this.workspace.path,\n opts\n );\n const { extendingConfigFiles: writtenExtendingConfigFiles, skippedPaths } = await handleExtendingConfigFiles(\n envEntries,\n envCompsDirsMap,\n writtenRealConfigFilesMap,\n configsRootDir,\n componentsRootDir,\n this.workspace.path,\n opts\n );\n\n const writtenRealConfigFiles = Object.values(writtenRealConfigFilesMap);\n const totalRealConfigFiles = writtenRealConfigFiles.length;\n const totalExtendingConfigFiles = writtenExtendingConfigFiles.reduce(\n (acc, curr) => acc + curr.extendingConfigFile.filePaths.length,\n 0\n );\n const totalWrittenFiles = totalRealConfigFiles + totalExtendingConfigFiles;\n return {\n writerId,\n totalWrittenFiles,\n realConfigFiles: writtenRealConfigFiles,\n totalRealConfigFiles,\n extendingConfigFiles: writtenExtendingConfigFiles,\n totalExtendingConfigFiles,\n skippedPaths,\n };\n }\n\n private getConfigsRootDir(): string {\n const userConfiguredDir = this.config.configsRootDir;\n return userConfiguredDir ? join(this.workspace.path, userConfiguredDir) : this.getCacheDir(this.workspace.path);\n }\n\n private getComponentsRootDirFromComponentsRootDir(): string | undefined {\n const componentsRootDir = this.config.componentsRootDir;\n if (!componentsRootDir) return undefined;\n // Remove leading './' or '/' and trailing slash\n const normalized = normalize(componentsRootDir)\n .replace(/^\\.?\\//, '')\n .replace(/\\/$/, '');\n return normalized;\n }\n\n private getComponentsRootDirFromDefaultDir(): string | undefined {\n if (!this.config.useDefaultDirectory) return undefined;\n const defaultDir = this.workspace.defaultDirectory;\n if (!defaultDir) return undefined;\n // get path until first dynamic segment (segment with {})\n const segments = defaultDir.split('/');\n const dynamicSegmentIndex = segments.findIndex((segment) => segment.startsWith('{'));\n if (dynamicSegmentIndex === -1) return defaultDir;\n return segments.slice(0, dynamicSegmentIndex).join('/');\n }\n\n private getComponentsRootDir(): string | undefined {\n const fromComponentsRootDir = this.getComponentsRootDirFromComponentsRootDir();\n if (fromComponentsRootDir) return fromComponentsRootDir;\n const fromDefaultDir = this.getComponentsRootDirFromDefaultDir();\n if (fromDefaultDir) return fromDefaultDir;\n }\n\n private getCacheDir(rootDir): string {\n return join(rootDir, 'node_modules', '.cache');\n }\n\n private async getExecContext(): Promise<ExecutionContext[]> {\n const components = await this.workspace.list();\n const runtime = await this.envs.createEnvironment(components);\n const execContext = runtime.getEnvExecutionContext();\n return execContext;\n }\n\n private getEnvComponentsDirsMap(envsExecutionContext: ExecutionContext[]): EnvCompsDirsMap {\n const envCompDirsMap = envsExecutionContext.reduce((acc, envExecution) => {\n const envRuntime = envExecution.envRuntime;\n const envId = envRuntime.id.toString();\n const value = {\n id: envRuntime.id,\n env: envRuntime.env,\n paths: envRuntime.components.map((c) => this.workspace.componentDir(c.id, undefined, { relative: true })),\n };\n acc[envId] = value;\n return acc;\n }, {});\n return envCompDirsMap;\n }\n\n private getConfigWriters(envExecutionContext: ExecutionContext): ConfigWriterEntry[] {\n if (envExecutionContext.env.workspaceConfig && isFunction(envExecutionContext.env.workspaceConfig)) {\n return envExecutionContext.env.workspaceConfig();\n }\n this.addToEnvsNotImplementing(envExecutionContext.env.id);\n return [];\n }\n\n private getFlatConfigWriters(envsExecutionContext: ExecutionContext[]): ConfigWriterEntry[] {\n return flatMap(envsExecutionContext, (envExecutionContext) => {\n return this.getConfigWriters(envExecutionContext);\n });\n }\n\n /**\n * Clean config files written by the config-writers\n * @param envsExecutionContext\n * @param param1\n * @returns Array of paths of deleted config files\n */\n async clean({ dryRun, silent, writers }: WriteConfigFilesOptions): Promise<string[]> {\n const paths = await this.calcPathsToClean({ writers });\n if (dryRun) return paths;\n if (!silent) await this.promptForCleaning(paths);\n await this.deleteFiles(paths);\n return paths;\n }\n\n private async calcPathsToClean({ writers }: WriteConfigFilesOptions): Promise<string[]> {\n const execContext = await this.getExecContext();\n const configWriters = this.getFlatConfigWriters(execContext);\n const filteredConfigWriters = writers\n ? configWriters.filter((configWriter) => writers.includes(configWriter.id))\n : configWriters;\n\n const paths = uniq(\n filteredConfigWriters\n .map((configWriter) => {\n const patterns = configWriter.patterns;\n const currPaths = globby.sync(patterns, {\n cwd: this.workspace.path,\n dot: true,\n onlyFiles: true,\n ignore: ['**/node_modules/**'],\n });\n const filteredPaths = currPaths.filter((path) => {\n const fullPath = join(this.workspace.path, path);\n return configWriter.isBitGenerated ? configWriter.isBitGenerated(fullPath) : true;\n });\n return filteredPaths;\n })\n .flat()\n );\n return paths;\n }\n\n private addToEnvsNotImplementing(envId: string) {\n this.envsNotImplementing[envId] = true;\n }\n\n getEnvsNotImplementing() {\n return Object.keys(this.envsNotImplementing);\n }\n\n private async promptForCleaning(paths: string[]) {\n this.logger.clearStatusLine();\n const ok = await yesno({\n question: `${chalk.underline('The following files will be deleted:')}\n${paths.join('\\n')}\n${chalk.bold('Do you want to continue? [yes(y)/no(n)]')}`,\n });\n if (!ok) {\n throw new PromptCanceled();\n }\n }\n\n private async deleteFiles(paths: string[]) {\n await Promise.all(paths.map((f) => fs.remove(join(this.workspace.path, f))));\n }\n\n static slots = [];\n // define your aspect dependencies here.\n // in case you need to use another aspect API.\n static dependencies = [CLIAspect, WorkspaceAspect, EnvsAspect, LoggerAspect];\n\n static runtime = MainRuntime;\n\n static defaultConfig: Partial<WorkspaceConfigFilesAspectConfig> = {\n enableWorkspaceConfigWrite: false,\n };\n\n static async provider(\n [cli, workspace, envs, loggerAspect]: [CLIMain, Workspace, EnvsMain, LoggerMain],\n config: WorkspaceConfigFilesAspectConfig\n ) {\n const logger = loggerAspect.createLogger(WorkspaceConfigFilesAspect.id);\n envs.registerService(new WorkspaceConfigFilesService(logger));\n\n const workspaceConfigFilesMain = new WorkspaceConfigFilesMain(workspace, envs, logger, config);\n const wsConfigCmd = new WsConfigCmd();\n wsConfigCmd.commands = [\n new WsConfigWriteCmd(workspaceConfigFilesMain),\n new WsConfigCleanCmd(workspaceConfigFilesMain),\n new WsConfigListCmd(workspaceConfigFilesMain),\n ];\n cli.register(wsConfigCmd);\n return workspaceConfigFilesMain;\n }\n}\n\nWorkspaceConfigFilesAspect.addRuntime(WorkspaceConfigFilesMain);\n\nexport default WorkspaceConfigFilesMain;\n"],"mappings":";;;;;;AAAA,SAAAA,SAAA;EAAA,MAAAC,IAAA,GAAAC,sBAAA,CAAAC,OAAA;EAAAH,QAAA,YAAAA,CAAA;IAAA,OAAAC,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AACA,SAAAG,MAAA;EAAA,MAAAH,IAAA,GAAAE,OAAA;EAAAC,KAAA,YAAAA,CAAA;IAAA,OAAAH,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AACA,SAAAI,QAAA;EAAA,MAAAJ,IAAA,GAAAC,sBAAA,CAAAC,OAAA;EAAAE,OAAA,YAAAA,CAAA;IAAA,OAAAJ,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AACA,SAAAK,OAAA;EAAA,MAAAL,IAAA,GAAAC,sBAAA,CAAAC,OAAA;EAAAG,MAAA,YAAAA,CAAA;IAAA,OAAAL,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AACA,SAAAM,UAAA;EAAA,MAAAN,IAAA,GAAAE,OAAA;EAAAI,SAAA,YAAAA,CAAA;IAAA,OAAAN,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAOA,SAAAO,YAAA;EAAA,MAAAP,IAAA,GAAAC,sBAAA,CAAAC,OAAA;EAAAK,WAAA,YAAAA,CAAA;IAAA,OAAAP,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AACA,SAAAQ,QAAA;EAAA,MAAAR,IAAA,GAAAE,OAAA;EAAAM,OAAA,YAAAA,CAAA;IAAA,OAAAR,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AACA,SAAAS,OAAA;EAAA,MAAAT,IAAA,GAAAC,sBAAA,CAAAC,OAAA;EAAAO,MAAA,YAAAA,CAAA;IAAA,OAAAT,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AACA,SAAAU,QAAA;EAAA,MAAAV,IAAA,GAAAE,OAAA;EAAAQ,OAAA,YAAAA,CAAA;IAAA,OAAAV,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAEA,SAAAW,KAAA;EAAA,MAAAX,IAAA,GAAAE,OAAA;EAAAS,IAAA,YAAAA,CAAA;IAAA,OAAAX,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AACA,SAAAY,WAAA;EAAA,MAAAZ,IAAA,GAAAE,OAAA;EAAAU,UAAA,YAAAA,CAAA;IAAA,OAAAZ,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAEA,SAAAa,MAAA;EAAA,MAAAb,IAAA,GAAAE,OAAA;EAAAW,KAAA,YAAAA,CAAA;IAAA,OAAAb,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAEA,SAAAc,QAAA;EAAA,MAAAd,IAAA,GAAAE,OAAA;EAAAY,OAAA,YAAAA,CAAA;IAAA,OAAAd,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAEA,SAAAe,sBAAA;EAAA,MAAAf,IAAA,GAAAE,OAAA;EAAAa,qBAAA,YAAAA,CAAA;IAAA,OAAAf,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAEA,SAAAgB,UAAA;EAAA,MAAAhB,IAAA,GAAAE,OAAA;EAAAc,SAAA,YAAAA,CAAA;IAAA,OAAAhB,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AACA,SAAAiB,aAAA;EAAA,MAAAjB,IAAA,GAAAC,sBAAA,CAAAC,OAAA;EAAAe,YAAA,YAAAA,CAAA;IAAA,OAAAjB,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AACA,SAAAkB,uBAAA;EAAA,MAAAlB,IAAA,GAAAE,OAAA;EAAAgB,sBAAA,YAAAA,CAAA;IAAA,OAAAlB,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAEA,SAAAmB,SAAA;EAAA,MAAAnB,IAAA,GAAAE,OAAA;EAAAiB,QAAA,YAAAA,CAAA;IAAA,OAAAnB,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AACA,SAAAoB,SAAA;EAAA,MAAApB,IAAA,GAAAE,OAAA;EAAAkB,QAAA,YAAAA,CAAA;IAAA,OAAApB,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAAgD,SAAAC,uBAAAoB,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAAA,SAAAG,gBAAAH,CAAA,EAAAI,CAAA,EAAAC,CAAA,YAAAD,CAAA,GAAAE,cAAA,CAAAF,CAAA,MAAAJ,CAAA,GAAAO,MAAA,CAAAC,cAAA,CAAAR,CAAA,EAAAI,CAAA,IAAAK,KAAA,EAAAJ,CAAA,EAAAK,UAAA,MAAAC,YAAA,MAAAC,QAAA,UAAAZ,CAAA,CAAAI,CAAA,IAAAC,CAAA,EAAAL,CAAA;AAAA,SAAAM,eAAAD,CAAA,QAAAQ,CAAA,GAAAC,YAAA,CAAAT,CAAA,uCAAAQ,CAAA,GAAAA,CAAA,GAAAA,CAAA;AAAA,SAAAC,aAAAT,CAAA,EAAAD,CAAA,2BAAAC,CAAA,KAAAA,CAAA,SAAAA,CAAA,MAAAL,CAAA,GAAAK,CAAA,CAAAU,MAAA,CAAAC,WAAA,kBAAAhB,CAAA,QAAAa,CAAA,GAAAb,CAAA,CAAAiB,IAAA,CAAAZ,CAAA,EAAAD,CAAA,uCAAAS,CAAA,SAAAA,CAAA,YAAAK,SAAA,yEAAAd,CAAA,GAAAe,MAAA,GAAAC,MAAA,EAAAf,CAAA;AAxBhD,MAAMgB,cAAc,SAASC,oBAAQ,CAAC;EACpCC,WAAWA,CAAA,EAAG;IACZ,KAAK,CAACC,gBAAK,CAACC,MAAM,CAAC,mBAAmB,CAAC,CAAC;EAC1C;AACF;AAsBA;AACA;AACA;;AAgGO,MAAMC,wBAAwB,CAAC;EAGpCH,WAAWA,CACDI,SAAoB,EACpBC,IAAc,EACdC,MAAc,EACdC,MAAwC,EAChD;IAAA,KAJQH,SAAoB,GAApBA,SAAoB;IAAA,KACpBC,IAAc,GAAdA,IAAc;IAAA,KACdC,MAAc,GAAdA,MAAc;IAAA,KACdC,MAAwC,GAAxCA,MAAwC;IAAA3B,eAAA,8BANpB,CAAC,CAAC;EAO7B;;EAEH;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACE,MAAM4B,gBAAgBA,CAACC,OAAgC,GAAG,CAAC,CAAC,EAAmC;IAC7F,IAAI,CAAC,IAAI,CAACL,SAAS,EAAE;MACnB,MAAM,KAAIM,0BAAgB,EAAC,CAAC;IAC9B;IACA,MAAMC,WAAoC,GAAG;MAC3CC,KAAK,EAAE,KAAK;MACZC,MAAM,EAAE,KAAK;MACbC,MAAM,EAAE,KAAK;MACbC,MAAM,EAAE,KAAK;MACbC,KAAK,EAAE,IAAI;MACXC,KAAK,EAAE;IACT,CAAC;IACD,MAAMC,mBAAmB,GAAG,IAAAC,kBAAQ,EAACV,OAAO,EAAEE,WAAW,CAAC;IAC1D,MAAMS,WAAW,GAAG,MAAM,IAAI,CAACC,cAAc,CAAC,CAAC;IAE/C,IAAIC,YAAkC,GAAG,EAAE;IAC3C,IAAIC,QAAQ;IACZ,IAAIC,YAAY;IAChB,IAAI;MACF,IAAIN,mBAAmB,CAACN,KAAK,EAAE;QAC7BU,YAAY,GAAG,MAAM,IAAI,CAACG,gBAAgB,CAAC;UAAEC,OAAO,EAAER,mBAAmB,CAACQ;QAAQ,CAAC,CAAC;MACtF;MAEAF,YAAY,GAAG,MAAM,IAAI,CAACG,KAAK,CAACP,WAAW,EAAEF,mBAAmB,CAAC;MACjE,MAAMU,eAAe,GAAGJ,YAAY,CAACK,aAAa,CAACC,OAAO,CAAEC,YAAY,IAAK;QAC3E,OAAOA,YAAY,CAACC,oBAAoB,CAACF,OAAO,CAAEG,mBAAmB,IAAK;UACxE,OAAOA,mBAAmB,CAACA,mBAAmB,CAACC,SAAS;QAC1D,CAAC,CAAC;MACJ,CAAC,CAAC;MACF;MACA;MACA;MACA;MACA;MACAZ,YAAY,GAAGA,YAAY,CAACa,MAAM,CAC/BC,WAAW,IAAK,CAACR,eAAe,CAACS,QAAQ,CAAC,IAAAC,YAAI,EAAC,IAAI,CAAClC,SAAS,CAACmC,IAAI,EAAEH,WAAW,CAAC,CACnF,CAAC;MACD,MAAM,IAAI,CAACI,WAAW,CAAClB,YAAY,CAAC;IACtC,CAAC,CAAC,OAAOmB,GAAG,EAAE;MACZ,IAAI,CAACnC,MAAM,CAACoC,IAAI,CAAC,yBAAyB,EAAED,GAAG,CAAC;MAChD,IAAIvB,mBAAmB,CAACF,KAAK,EAAE;QAC7B,MAAM,KAAI2B,sBAAsB,EAAC,CAAC;MACpC;MACApB,QAAQ,GAAGkB,GAAG;IAChB;IAEA,OAAO;MAAEjB,YAAY;MAAEoB,YAAY,EAAEtB,YAAY;MAAEuB,KAAK,EAAE,IAAI,CAACzC,SAAS,CAACmC,IAAI;MAAEE,GAAG,EAAElB;IAAS,CAAC;EAChG;;EAEA;AACF;AACA;EACE,MAAMuB,yBAAyBA,CAACrC,OAAgC,GAAG,CAAC,CAAC,EAA+C;IAClH,MAAMsC,WAAW,GAAG,IAAI,CAACC,6BAA6B,CAAC,CAAC;IACxD,IAAI,CAACD,WAAW,EAAE,OAAOE,SAAS;IAClC,OAAO,IAAI,CAACzC,gBAAgB,CAACC,OAAO,CAAC;EACvC;;EAEA;AACF;AACA;AACA;AACA;AACA;EACE,MAAMyC,gBAAgBA,CAACzC,OAAgC,GAAG,CAAC,CAAC,EAAqB;IAC/E;IACA,IAAI,CAAC,IAAI,CAACL,SAAS,EAAE;MACnB,MAAM,KAAIM,0BAAgB,EAAC,CAAC;IAC9B;IACA,MAAMkC,YAAY,GAAG,MAAM,IAAI,CAAChC,KAAK,CAACH,OAAO,CAAC;IAC9C,OAAOmC,YAAY;EACrB;;EAEA;AACF;AACA;AACA;EACEO,yBAAyBA,CAACC,YAAsB,GAAG,EAAE,EAAU;IAC7D,IAAI,CAACA,YAAY,CAACC,MAAM,EAAE,OAAO,EAAE;IACnC,OAAO,IAAAC,8BAAmB,EAACF,YAAY,EAAE,IAAI,CAAChD,SAAS,CAACmC,IAAI,CAAC;EAC/D;;EAEA;AACF;AACA;AACA;AACA;EACES,6BAA6BA,CAAA,EAAG;IAC9B,OAAO,CAAC,CAAC,IAAI,CAACzC,MAAM,CAACgD,0BAA0B;EACjD;;EAEA;AACF;AACA;AACA;EACE,MAAMC,iBAAiBA,CAAA,EAAkC;IACvD,IAAI,CAAC,IAAI,CAACpD,SAAS,EAAE;MACnB,MAAM,KAAIM,0BAAgB,EAAC,CAAC;IAC9B;IACA,MAAM+C,YAAY,GAAG,MAAM,IAAI,CAACpC,cAAc,CAAC,CAAC;IAEhD,MAAMqC,MAA4B,GAAGD,YAAY,CAACE,GAAG,CAAEC,gBAAgB,IAAK;MAC1E,MAAMC,aAAa,GAAG,IAAI,CAACC,gBAAgB,CAACF,gBAAgB,CAAC;MAC7D,OAAO;QAAEG,KAAK,EAAEH,gBAAgB,CAACI,UAAU,CAACC,EAAE;QAAEL,gBAAgB;QAAEC;MAAc,CAAC;IACnF,CAAC,CAAC;IACF,OAAOH,MAAM;EACf;EAEQQ,eAAeA,CAACC,UAAgC,EAA4B;IAClF,OAAOA,UAAU,CAACC,MAAM,CAAC,CAACC,GAAG,EAAEC,eAAgC,KAAK;MAClEA,eAAe,CAACT,aAAa,CAACU,OAAO,CAAEC,YAA+B,IAAK;QACzEH,GAAG,CAACG,YAAY,CAACP,EAAE,CAAC,GAAGI,GAAG,CAACG,YAAY,CAACP,EAAE,CAAC,IAAI,EAAE;QACjDI,GAAG,CAACG,YAAY,CAACP,EAAE,CAAC,CAACQ,IAAI,CAAC;UAAED,YAAY;UAAET,KAAK,EAAEO,eAAe,CAACP;QAAM,CAAC,CAAC;MAC3E,CAAC,CAAC;MACF,OAAOM,GAAG;IACZ,CAAC,EAAE,CAAC,CAAC,CAAC;EACR;EAEA,MAAc1C,KAAKA,CAAC+C,oBAAwC,EAAEC,IAA6B,EAAyB;IAClH,MAAMC,cAAc,GAAG,IAAI,CAACC,uBAAuB,CAACH,oBAAoB,CAAC;IACzE,MAAMI,cAAc,GAAG,IAAI,CAACC,iBAAiB,CAAC,CAAC;IAC/C,MAAMC,iBAAiB,GAAG,IAAI,CAACC,oBAAoB,CAAC,CAAC;IACrD,MAAMpB,aAAa,GAAG,MAAM,IAAI,CAACL,iBAAiB,CAAC,CAAC;IACpD,MAAM0B,wBAAwB,GAAG,IAAI,CAAChB,eAAe,CAACL,aAAa,CAAC;IACpE,MAAMsB,gCAAgC,GAAGR,IAAI,CAACjD,OAAO,GACjD,IAAA0D,cAAI,EAACF,wBAAwB,EAAEP,IAAI,CAACjD,OAAO,CAAC,GAC5CwD,wBAAwB;IAC5B,IAAIG,oBAAoB,GAAG,CAAC;IAC5B,IAAIC,yBAAyB,GAAG,CAAC;IACjC,MAAMlC,YAAsB,GAAG,EAAE;IACjC,MAAMmC,OAAO,GAAG,MAAM,IAAAC,qBAAU,EAC9BxG,MAAM,CAACyG,OAAO,CAACN,gCAAgC,CAAC,EAChD,OAAO,CAACO,QAAQ,EAAEC,UAAU,CAAC,KAAK;MAChC,MAAMC,SAAS,GAAG,MAAM,IAAI,CAACC,iBAAiB,CAC5CH,QAAQ,EACRC,UAAU,EACVf,cAAc,EACdE,cAAc,EACdE,iBAAiB,EACjBL,IACF,CAAC;MACDU,oBAAoB,IAAIO,SAAS,CAACP,oBAAoB;MACtDC,yBAAyB,IAAIM,SAAS,CAACN,yBAAyB;MAChElC,YAAY,CAACqB,IAAI,CAAC,GAAGmB,SAAS,CAACxC,YAAY,CAAC;MAC5C,OAAOwC,SAAS;IAClB,CACF,CAAC;IAED,MAAME,iBAAiB,GAAGT,oBAAoB,GAAGC,yBAAyB;IAC1E,OAAO;MAAEzD,aAAa,EAAE0D,OAAO;MAAEO,iBAAiB;MAAET,oBAAoB;MAAEC,yBAAyB;MAAElC;IAAa,CAAC;EACrH;EAEA,MAAcyC,iBAAiBA,CAC7BH,QAAgB,EAChBC,UAAkC,EAClCI,eAAgC,EAChCjB,cAAsB,EACtBE,iBAAqC,EACrCL,IAA6B,EACK;IAClC,MAAMqB,yBAAyB,GAAG,MAAM,IAAAC,gCAAqB,EAC3DN,UAAU,EACVI,eAAe,EACfjB,cAAc,EACd,IAAI,CAAC1E,SAAS,CAACmC,IAAI,EACnBoC,IACF,CAAC;IACD,MAAM;MAAE3C,oBAAoB,EAAEkE,2BAA2B;MAAE9C;IAAa,CAAC,GAAG,MAAM,IAAA+C,qCAA0B,EAC1GR,UAAU,EACVI,eAAe,EACfC,yBAAyB,EACzBlB,cAAc,EACdE,iBAAiB,EACjB,IAAI,CAAC5E,SAAS,CAACmC,IAAI,EACnBoC,IACF,CAAC;IAED,MAAMyB,sBAAsB,GAAGpH,MAAM,CAACqH,MAAM,CAACL,yBAAyB,CAAC;IACvE,MAAMX,oBAAoB,GAAGe,sBAAsB,CAAC/C,MAAM;IAC1D,MAAMiC,yBAAyB,GAAGY,2BAA2B,CAAC9B,MAAM,CAClE,CAACC,GAAG,EAAEiC,IAAI,KAAKjC,GAAG,GAAGiC,IAAI,CAACrE,mBAAmB,CAACC,SAAS,CAACmB,MAAM,EAC9D,CACF,CAAC;IACD,MAAMyC,iBAAiB,GAAGT,oBAAoB,GAAGC,yBAAyB;IAC1E,OAAO;MACLI,QAAQ;MACRI,iBAAiB;MACjBS,eAAe,EAAEH,sBAAsB;MACvCf,oBAAoB;MACpBrD,oBAAoB,EAAEkE,2BAA2B;MACjDZ,yBAAyB;MACzBlC;IACF,CAAC;EACH;EAEQ2B,iBAAiBA,CAAA,EAAW;IAClC,MAAMyB,iBAAiB,GAAG,IAAI,CAACjG,MAAM,CAACuE,cAAc;IACpD,OAAO0B,iBAAiB,GAAG,IAAAlE,YAAI,EAAC,IAAI,CAAClC,SAAS,CAACmC,IAAI,EAAEiE,iBAAiB,CAAC,GAAG,IAAI,CAACC,WAAW,CAAC,IAAI,CAACrG,SAAS,CAACmC,IAAI,CAAC;EACjH;EAEQmE,yCAAyCA,CAAA,EAAuB;IACtE,MAAM1B,iBAAiB,GAAG,IAAI,CAACzE,MAAM,CAACyE,iBAAiB;IACvD,IAAI,CAACA,iBAAiB,EAAE,OAAO/B,SAAS;IACxC;IACA,MAAM0D,UAAU,GAAG,IAAAC,iBAAS,EAAC5B,iBAAiB,CAAC,CAC5C6B,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CACrBA,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;IACrB,OAAOF,UAAU;EACnB;EAEQG,kCAAkCA,CAAA,EAAuB;IAC/D,IAAI,CAAC,IAAI,CAACvG,MAAM,CAACwG,mBAAmB,EAAE,OAAO9D,SAAS;IACtD,MAAM+D,UAAU,GAAG,IAAI,CAAC5G,SAAS,CAAC6G,gBAAgB;IAClD,IAAI,CAACD,UAAU,EAAE,OAAO/D,SAAS;IACjC;IACA,MAAMiE,QAAQ,GAAGF,UAAU,CAACG,KAAK,CAAC,GAAG,CAAC;IACtC,MAAMC,mBAAmB,GAAGF,QAAQ,CAACG,SAAS,CAAEC,OAAO,IAAKA,OAAO,CAACC,UAAU,CAAC,GAAG,CAAC,CAAC;IACpF,IAAIH,mBAAmB,KAAK,CAAC,CAAC,EAAE,OAAOJ,UAAU;IACjD,OAAOE,QAAQ,CAACM,KAAK,CAAC,CAAC,EAAEJ,mBAAmB,CAAC,CAAC9E,IAAI,CAAC,GAAG,CAAC;EACzD;EAEQ2C,oBAAoBA,CAAA,EAAuB;IACjD,MAAMwC,qBAAqB,GAAG,IAAI,CAACf,yCAAyC,CAAC,CAAC;IAC9E,IAAIe,qBAAqB,EAAE,OAAOA,qBAAqB;IACvD,MAAMC,cAAc,GAAG,IAAI,CAACZ,kCAAkC,CAAC,CAAC;IAChE,IAAIY,cAAc,EAAE,OAAOA,cAAc;EAC3C;EAEQjB,WAAWA,CAACkB,OAAO,EAAU;IACnC,OAAO,IAAArF,YAAI,EAACqF,OAAO,EAAE,cAAc,EAAE,QAAQ,CAAC;EAChD;EAEA,MAActG,cAAcA,CAAA,EAAgC;IAC1D,MAAMuG,UAAU,GAAG,MAAM,IAAI,CAACxH,SAAS,CAACyH,IAAI,CAAC,CAAC;IAC9C,MAAMC,OAAO,GAAG,MAAM,IAAI,CAACzH,IAAI,CAAC0H,iBAAiB,CAACH,UAAU,CAAC;IAC7D,MAAMxG,WAAW,GAAG0G,OAAO,CAACE,sBAAsB,CAAC,CAAC;IACpD,OAAO5G,WAAW;EACpB;EAEQyD,uBAAuBA,CAACH,oBAAwC,EAAmB;IACzF,MAAME,cAAc,GAAGF,oBAAoB,CAACN,MAAM,CAAC,CAACC,GAAG,EAAE4D,YAAY,KAAK;MACxE,MAAMjE,UAAU,GAAGiE,YAAY,CAACjE,UAAU;MAC1C,MAAMD,KAAK,GAAGC,UAAU,CAACC,EAAE,CAACiE,QAAQ,CAAC,CAAC;MACtC,MAAMhJ,KAAK,GAAG;QACZ+E,EAAE,EAAED,UAAU,CAACC,EAAE;QACjBkE,GAAG,EAAEnE,UAAU,CAACmE,GAAG;QACnBC,KAAK,EAAEpE,UAAU,CAAC4D,UAAU,CAACjE,GAAG,CAAE0E,CAAC,IAAK,IAAI,CAACjI,SAAS,CAACkI,YAAY,CAACD,CAAC,CAACpE,EAAE,EAAEhB,SAAS,EAAE;UAAEsF,QAAQ,EAAE;QAAK,CAAC,CAAC;MAC1G,CAAC;MACDlE,GAAG,CAACN,KAAK,CAAC,GAAG7E,KAAK;MAClB,OAAOmF,GAAG;IACZ,CAAC,EAAE,CAAC,CAAC,CAAC;IACN,OAAOO,cAAc;EACvB;EAEQd,gBAAgBA,CAAC0E,mBAAqC,EAAuB;IACnF,IAAIA,mBAAmB,CAACL,GAAG,CAACM,eAAe,IAAI,IAAAC,oBAAU,EAACF,mBAAmB,CAACL,GAAG,CAACM,eAAe,CAAC,EAAE;MAClG,OAAOD,mBAAmB,CAACL,GAAG,CAACM,eAAe,CAAC,CAAC;IAClD;IACA,IAAI,CAACE,wBAAwB,CAACH,mBAAmB,CAACL,GAAG,CAAClE,EAAE,CAAC;IACzD,OAAO,EAAE;EACX;EAEQ2E,oBAAoBA,CAAClE,oBAAwC,EAAuB;IAC1F,OAAO,IAAA5C,iBAAO,EAAC4C,oBAAoB,EAAG8D,mBAAmB,IAAK;MAC5D,OAAO,IAAI,CAAC1E,gBAAgB,CAAC0E,mBAAmB,CAAC;IACnD,CAAC,CAAC;EACJ;;EAEA;AACF;AACA;AACA;AACA;AACA;EACE,MAAM5H,KAAKA,CAAC;IAAEG,MAAM;IAAED,MAAM;IAAEY;EAAiC,CAAC,EAAqB;IACnF,MAAM0G,KAAK,GAAG,MAAM,IAAI,CAAC3G,gBAAgB,CAAC;MAAEC;IAAQ,CAAC,CAAC;IACtD,IAAIX,MAAM,EAAE,OAAOqH,KAAK;IACxB,IAAI,CAACtH,MAAM,EAAE,MAAM,IAAI,CAAC+H,iBAAiB,CAACT,KAAK,CAAC;IAChD,MAAM,IAAI,CAAC5F,WAAW,CAAC4F,KAAK,CAAC;IAC7B,OAAOA,KAAK;EACd;EAEA,MAAc3G,gBAAgBA,CAAC;IAAEC;EAAiC,CAAC,EAAqB;IACtF,MAAMN,WAAW,GAAG,MAAM,IAAI,CAACC,cAAc,CAAC,CAAC;IAC/C,MAAMwC,aAAa,GAAG,IAAI,CAAC+E,oBAAoB,CAACxH,WAAW,CAAC;IAC5D,MAAM0H,qBAAqB,GAAGpH,OAAO,GACjCmC,aAAa,CAAC1B,MAAM,CAAEqC,YAAY,IAAK9C,OAAO,CAACW,QAAQ,CAACmC,YAAY,CAACP,EAAE,CAAC,CAAC,GACzEJ,aAAa;IAEjB,MAAMuE,KAAK,GAAG,IAAAW,cAAI,EAChBD,qBAAqB,CAClBnF,GAAG,CAAEa,YAAY,IAAK;MACrB,MAAMwE,QAAQ,GAAGxE,YAAY,CAACwE,QAAQ;MACtC,MAAMC,SAAS,GAAGC,iBAAM,CAACC,IAAI,CAACH,QAAQ,EAAE;QACtCI,GAAG,EAAE,IAAI,CAAChJ,SAAS,CAACmC,IAAI;QACxB8G,GAAG,EAAE,IAAI;QACTC,SAAS,EAAE,IAAI;QACfC,MAAM,EAAE,CAAC,oBAAoB;MAC/B,CAAC,CAAC;MACF,MAAMC,aAAa,GAAGP,SAAS,CAAC9G,MAAM,CAAEI,IAAI,IAAK;QAC/C,MAAMkH,QAAQ,GAAG,IAAAnH,YAAI,EAAC,IAAI,CAAClC,SAAS,CAACmC,IAAI,EAAEA,IAAI,CAAC;QAChD,OAAOiC,YAAY,CAACkF,cAAc,GAAGlF,YAAY,CAACkF,cAAc,CAACD,QAAQ,CAAC,GAAG,IAAI;MACnF,CAAC,CAAC;MACF,OAAOD,aAAa;IACtB,CAAC,CAAC,CACDG,IAAI,CAAC,CACV,CAAC;IACD,OAAOvB,KAAK;EACd;EAEQO,wBAAwBA,CAAC5E,KAAa,EAAE;IAC9C,IAAI,CAAC6F,mBAAmB,CAAC7F,KAAK,CAAC,GAAG,IAAI;EACxC;EAEA8F,sBAAsBA,CAAA,EAAG;IACvB,OAAO7K,MAAM,CAAC8K,IAAI,CAAC,IAAI,CAACF,mBAAmB,CAAC;EAC9C;EAEA,MAAcf,iBAAiBA,CAACT,KAAe,EAAE;IAC/C,IAAI,CAAC9H,MAAM,CAACyJ,eAAe,CAAC,CAAC;IAC7B,MAAMC,EAAE,GAAG,MAAM,IAAAC,gBAAK,EAAC;MACrBC,QAAQ,EAAE,GAAGjK,gBAAK,CAACkK,SAAS,CAAC,sCAAsC,CAAC;AAC1E,EAAE/B,KAAK,CAAC9F,IAAI,CAAC,IAAI,CAAC;AAClB,EAAErC,gBAAK,CAACmK,IAAI,CAAC,yCAAyC,CAAC;IACnD,CAAC,CAAC;IACF,IAAI,CAACJ,EAAE,EAAE;MACP,MAAM,IAAIlK,cAAc,CAAC,CAAC;IAC5B;EACF;EAEA,MAAc0C,WAAWA,CAAC4F,KAAe,EAAE;IACzC,MAAMiC,OAAO,CAACC,GAAG,CAAClC,KAAK,CAACzE,GAAG,CAAE4G,CAAC,IAAKC,kBAAE,CAACC,MAAM,CAAC,IAAAnI,YAAI,EAAC,IAAI,CAAClC,SAAS,CAACmC,IAAI,EAAEgI,CAAC,CAAC,CAAC,CAAC,CAAC;EAC9E;EAaA,aAAaG,QAAQA,CACnB,CAACC,GAAG,EAAEvK,SAAS,EAAEC,IAAI,EAAEuK,YAAY,CAA6C,EAChFrK,MAAwC,EACxC;IACA,MAAMD,MAAM,GAAGsK,YAAY,CAACC,YAAY,CAACC,kDAA0B,CAAC7G,EAAE,CAAC;IACvE5D,IAAI,CAAC0K,eAAe,CAAC,KAAIC,oDAA2B,EAAC1K,MAAM,CAAC,CAAC;IAE7D,MAAM2K,wBAAwB,GAAG,IAAI9K,wBAAwB,CAACC,SAAS,EAAEC,IAAI,EAAEC,MAAM,EAAEC,MAAM,CAAC;IAC9F,MAAM2K,WAAW,GAAG,KAAIC,uBAAW,EAAC,CAAC;IACrCD,WAAW,CAACE,QAAQ,GAAG,CACrB,KAAIC,4BAAgB,EAACJ,wBAAwB,CAAC,EAC9C,KAAIK,4BAAgB,EAACL,wBAAwB,CAAC,EAC9C,KAAIM,2BAAe,EAACN,wBAAwB,CAAC,CAC9C;IACDN,GAAG,CAACa,QAAQ,CAACN,WAAW,CAAC;IACzB,OAAOD,wBAAwB;EACjC;AACF;AAACQ,OAAA,CAAAtL,wBAAA,GAAAA,wBAAA;AAAAvB,eAAA,CAhYYuB,wBAAwB,WAoWpB,EAAE;AACjB;AACA;AAAAvB,eAAA,CAtWWuB,wBAAwB,kBAuWb,CAACuL,gBAAS,EAAEC,4BAAe,EAAEC,kBAAU,EAAEC,sBAAY,CAAC;AAAAjN,eAAA,CAvWjEuB,wBAAwB,aAyWlB2L,kBAAW;AAAAlN,eAAA,CAzWjBuB,wBAAwB,mBA2W+B;EAChEoD,0BAA0B,EAAE;AAC9B,CAAC;AAqBHuH,kDAA0B,CAACiB,UAAU,CAAC5L,wBAAwB,CAAC;AAAC,IAAA6L,QAAA,GAAAP,OAAA,CAAA9M,OAAA,GAEjDwB,wBAAwB","ignoreList":[]}
@@ -1,4 +1,4 @@
1
- import type { ExtendingConfigFile } from '../config-writer-entry';
1
+ import type { ConfigWriterEntry, ExtendingConfigFile } from '../config-writer-entry';
2
2
  import type { EnvCompsDirsMap, EnvConfigWriterEntry, WriteConfigFilesOptions } from '../workspace-config-files.main.runtime';
3
3
  import type { WrittenRealConfigFilesByHash } from './real-config-files';
4
4
  export type WrittenExtendingConfigFile = ExtendingConfigFile & {
@@ -15,4 +15,17 @@ export type ExtendingConfigFilesMap = {
15
15
  extendingConfigFile: Required<ExtendingConfigFile>;
16
16
  };
17
17
  };
18
- export declare function handleExtendingConfigFiles(envEntries: EnvConfigWriterEntry[], envCompsDirsMap: EnvCompsDirsMap, writtenRealConfigFiles: WrittenRealConfigFilesByHash, configsRootDir: string, componentsRootDir: string | undefined, workspaceDir: string, opts: WriteConfigFilesOptions): Promise<EnvsWrittenExtendingConfigFiles>;
18
+ export type HandleExtendingConfigFilesResult = {
19
+ extendingConfigFiles: EnvsWrittenExtendingConfigFiles;
20
+ /**
21
+ * paths of config files that already exist in the workspace and were not generated by bit.
22
+ * they are left untouched, otherwise the user's own configuration would be lost.
23
+ */
24
+ skippedPaths: string[];
25
+ };
26
+ export declare function handleExtendingConfigFiles(envEntries: EnvConfigWriterEntry[], envCompsDirsMap: EnvCompsDirsMap, writtenRealConfigFiles: WrittenRealConfigFilesByHash, configsRootDir: string, componentsRootDir: string | undefined, workspaceDir: string, opts: WriteConfigFilesOptions): Promise<HandleExtendingConfigFilesResult>;
27
+ /**
28
+ * a config file that already exists in the workspace and wasn't generated by bit is a file the user wrote.
29
+ * overriding it silently loses their configuration, so it's skipped unless the caller explicitly asked to force it.
30
+ */
31
+ export declare function isUserAuthoredConfigFile(filePath: string, configWriter?: ConfigWriterEntry): Promise<boolean>;
@@ -4,6 +4,7 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.handleExtendingConfigFiles = handleExtendingConfigFiles;
7
+ exports.isUserAuthoredConfigFile = isUserAuthoredConfigFile;
7
8
  function _normalizePath() {
8
9
  const data = _interopRequireDefault(require("normalize-path"));
9
10
  _normalizePath = function () {
@@ -70,8 +71,10 @@ async function handleExtendingConfigFiles(envEntries, envCompsDirsMap, writtenRe
70
71
  const extendingConfigFilesMap = await buildExtendingConfigFilesMap(envEntries, writtenRealConfigFiles, envCompsDirsMap, configsRootDir, workspaceDir);
71
72
  const fileHashPerDedupedPaths = (0, _dedupPaths().dedupePaths)(extendingConfigFilesMap, envCompsDirsMap, componentsRootDir);
72
73
  await postProcessExtendingConfigFiles(envEntries, envCompsDirsMap, extendingConfigFilesMap, fileHashPerDedupedPaths, configsRootDir, workspaceDir);
73
- const envsWrittenExtendingConfigFiles = await writeExtendingConfigFiles(extendingConfigFilesMap, fileHashPerDedupedPaths, workspaceDir, opts);
74
- return envsWrittenExtendingConfigFiles;
74
+ // all the entries here share the same writer-id (they're grouped by it before getting here), so any of them
75
+ // knows how to tell whether an existing config file was generated by bit.
76
+ const configWriter = envEntries[0]?.configWriter;
77
+ return writeExtendingConfigFiles(extendingConfigFilesMap, fileHashPerDedupedPaths, workspaceDir, configWriter, opts);
75
78
  }
76
79
  async function buildExtendingConfigFilesMap(envEntries, writtenRealConfigFiles, envCompsDirsMap, configsRootDir, workspaceDir) {
77
80
  const allEnvsCalculatedExtendingConfigFiles = (0, _lodash().compact)(await (0, _pMapSeries().default)(envEntries, async envConfigFileEntry => {
@@ -192,8 +195,25 @@ async function postProcessExtendingConfigFiles(envEntries, envCompsDirsMap, exte
192
195
  return undefined;
193
196
  });
194
197
  }
195
- async function writeExtendingConfigFiles(extendingConfigFilesMap, fileHashPerDedupedPaths, workspaceDir, opts) {
196
- const finalResult = await Promise.all(fileHashPerDedupedPaths.map(async ({
198
+
199
+ /**
200
+ * a config file that already exists in the workspace and wasn't generated by bit is a file the user wrote.
201
+ * overriding it silently loses their configuration, so it's skipped unless the caller explicitly asked to force it.
202
+ */
203
+ async function isUserAuthoredConfigFile(filePath, configWriter) {
204
+ // without isBitGenerated we have no way to tell the files apart, keep the original behavior of overriding.
205
+ if (!configWriter?.isBitGenerated) return false;
206
+ if (!(await _fsExtra().default.pathExists(filePath))) return false;
207
+ try {
208
+ return !configWriter.isBitGenerated(filePath);
209
+ } catch {
210
+ // the file exists but can't be read. better to leave a file we know nothing about as is.
211
+ return true;
212
+ }
213
+ }
214
+ async function writeExtendingConfigFiles(extendingConfigFilesMap, fileHashPerDedupedPaths, workspaceDir, configWriter, opts) {
215
+ const skippedPaths = [];
216
+ const extendingConfigFiles = await Promise.all(fileHashPerDedupedPaths.map(async ({
197
217
  fileHash,
198
218
  paths
199
219
  }) => {
@@ -203,15 +223,20 @@ async function writeExtendingConfigFiles(extendingConfigFilesMap, fileHashPerDed
203
223
  const name = (0, _stringFormat().default)(configFile.name, {
204
224
  hash
205
225
  });
206
- const writtenPaths = await Promise.all(paths.map(async path => {
226
+ const writtenPaths = (0, _lodash().compact)(await Promise.all(paths.map(async path => {
207
227
  const filePath = (0, _path().join)(workspaceDir, path, name);
208
228
  const targetPath = configFile.useAbsPaths ? configFile.extendingTarget.filePath : (0, _normalizePath().default)(`./${(0, _path().relative)((0, _path().dirname)(filePath), configFile.extendingTarget.filePath)}`);
209
229
  const content = configFile.content.replace(`{${configFile.extendingTarget.name}}`, targetPath);
230
+ // the check runs for dry-run as well, so it reports what will actually happen.
231
+ if (!opts.force && (await isUserAuthoredConfigFile(filePath, configWriter))) {
232
+ skippedPaths.push(filePath);
233
+ return undefined;
234
+ }
210
235
  if (!opts.dryRun) {
211
236
  await _fsExtra().default.outputFile(filePath, content);
212
237
  }
213
238
  return filePath;
214
- }));
239
+ })));
215
240
  const res = {
216
241
  envIds: envsConfigFile.envIds,
217
242
  extendingConfigFile: {
@@ -224,7 +249,10 @@ async function writeExtendingConfigFiles(extendingConfigFilesMap, fileHashPerDed
224
249
  };
225
250
  return res;
226
251
  }));
227
- return finalResult;
252
+ return {
253
+ extendingConfigFiles,
254
+ skippedPaths
255
+ };
228
256
  }
229
257
 
230
258
  //# sourceMappingURL=extending-config-files.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["_normalizePath","data","_interopRequireDefault","require","_stringFormat","_toolboxCrypto","_fsExtra","_path","_pMapSeries","_lodash","_dedupPaths","e","__esModule","default","ownKeys","r","t","Object","keys","getOwnPropertySymbols","o","filter","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty","getOwnPropertyDescriptors","defineProperties","defineProperty","_toPropertyKey","value","configurable","writable","i","_toPrimitive","Symbol","toPrimitive","call","TypeError","String","Number","handleExtendingConfigFiles","envEntries","envCompsDirsMap","writtenRealConfigFiles","configsRootDir","componentsRootDir","workspaceDir","opts","extendingConfigFilesMap","buildExtendingConfigFilesMap","fileHashPerDedupedPaths","dedupePaths","postProcessExtendingConfigFiles","envsWrittenExtendingConfigFiles","writeExtendingConfigFiles","allEnvsCalculatedExtendingConfigFiles","compact","pMapSeries","envConfigFileEntry","envMapVal","envId","writtenConfigFilesForEnv","getEnvOnlyWrittenRealConfigFiles","extendingConfigFile","generateOneExtendingConfigFile","undefined","indexExtendingConfigFiles","values","reduce","acc","envIds","writtenRealConfigFile","includes","writtenConfigFiles","envMapValue","configWriter","executionContext","args","generateExtendingFile","hash","sha1","content","useAbsPaths","multiEnvCalculatedExtendingConfigFiles","mergedConfigFiles","curr","currentValue","postProcessFunc","extendingConfigFileEntry","find","entry","dedupEntry","fileHashPerDedupedPath","fileHash","postProcessRes","paths","supportSpecificPathChange","path","currPath","newHash","JSON","parse","stringify","foundNewHash","finalResult","Promise","all","map","envsConfigFile","configFile","name","format","writtenPaths","filePath","join","targetPath","extendingTarget","normalize","relative","dirname","replace","dryRun","fs","outputFile","res","filePaths"],"sources":["extending-config-files.ts"],"sourcesContent":["import normalize from 'normalize-path';\nimport format from 'string-format';\nimport { sha1 } from '@teambit/toolbox.crypto.sha1';\nimport fs from 'fs-extra';\nimport { dirname, join, relative } from 'path';\nimport pMapSeries from 'p-map-series';\nimport { compact } from 'lodash';\nimport type { ExtendingConfigFile } from '../config-writer-entry';\nimport type { DedupedPaths } from '../dedup-paths';\nimport { dedupePaths } from '../dedup-paths';\nimport type {\n EnvCompsDirsMap,\n EnvConfigWriterEntry,\n EnvMapValue,\n WriteConfigFilesOptions,\n} from '../workspace-config-files.main.runtime';\nimport type { WrittenConfigFile, WrittenRealConfigFilesByHash } from './real-config-files';\n\ntype EnvCalculatedExtendingConfigFile = {\n envId: string;\n extendingConfigFile: Required<ExtendingConfigFile>;\n};\nexport type WrittenExtendingConfigFile = ExtendingConfigFile & {\n filePaths: string[];\n};\nexport type EnvsWrittenExtendingConfigFile = { envIds: string[]; extendingConfigFile: WrittenExtendingConfigFile };\nexport type EnvsWrittenExtendingConfigFiles = Array<EnvsWrittenExtendingConfigFile>;\nexport type ExtendingConfigFilesMap = {\n [configFileHash: string]: {\n envIds: string[];\n extendingConfigFile: Required<ExtendingConfigFile>;\n };\n};\n\nexport async function handleExtendingConfigFiles(\n envEntries: EnvConfigWriterEntry[],\n envCompsDirsMap: EnvCompsDirsMap,\n writtenRealConfigFiles: WrittenRealConfigFilesByHash,\n configsRootDir: string,\n componentsRootDir: string | undefined,\n workspaceDir: string,\n opts: WriteConfigFilesOptions\n): Promise<EnvsWrittenExtendingConfigFiles> {\n const extendingConfigFilesMap = await buildExtendingConfigFilesMap(\n envEntries,\n writtenRealConfigFiles,\n envCompsDirsMap,\n configsRootDir,\n workspaceDir\n );\n const fileHashPerDedupedPaths = dedupePaths(extendingConfigFilesMap, envCompsDirsMap, componentsRootDir);\n await postProcessExtendingConfigFiles(\n envEntries,\n envCompsDirsMap,\n extendingConfigFilesMap,\n fileHashPerDedupedPaths,\n configsRootDir,\n workspaceDir\n );\n const envsWrittenExtendingConfigFiles = await writeExtendingConfigFiles(\n extendingConfigFilesMap,\n fileHashPerDedupedPaths,\n workspaceDir,\n opts\n );\n return envsWrittenExtendingConfigFiles;\n}\n\nasync function buildExtendingConfigFilesMap(\n envEntries: EnvConfigWriterEntry[],\n writtenRealConfigFiles: WrittenRealConfigFilesByHash,\n envCompsDirsMap: EnvCompsDirsMap,\n configsRootDir: string,\n workspaceDir: string\n): Promise<ExtendingConfigFilesMap> {\n const allEnvsCalculatedExtendingConfigFiles: EnvCalculatedExtendingConfigFile[] = compact(\n await pMapSeries(envEntries, async (envConfigFileEntry) => {\n const envMapVal = envCompsDirsMap[envConfigFileEntry.envId];\n const writtenConfigFilesForEnv: WrittenConfigFile[] = getEnvOnlyWrittenRealConfigFiles(\n envConfigFileEntry.envId,\n writtenRealConfigFiles\n );\n const extendingConfigFile = generateOneExtendingConfigFile(\n writtenConfigFilesForEnv,\n envConfigFileEntry,\n envMapVal,\n configsRootDir,\n workspaceDir\n );\n if (!extendingConfigFile) {\n return undefined;\n }\n return {\n envId: envConfigFileEntry.envId,\n extendingConfigFile,\n };\n })\n );\n const extendingConfigFilesMap: ExtendingConfigFilesMap = indexExtendingConfigFiles(\n allEnvsCalculatedExtendingConfigFiles\n );\n return extendingConfigFilesMap;\n}\n\nfunction getEnvOnlyWrittenRealConfigFiles(\n envId: string,\n writtenRealConfigFiles: WrittenRealConfigFilesByHash\n): WrittenConfigFile[] {\n return Object.values(writtenRealConfigFiles).reduce((acc, { envIds, writtenRealConfigFile }) => {\n if (envIds.includes(envId)) {\n acc.push(writtenRealConfigFile);\n }\n return acc;\n }, [] as WrittenConfigFile[]);\n}\n\nfunction generateOneExtendingConfigFile(\n writtenConfigFiles: WrittenConfigFile[],\n envConfigFileEntry: EnvConfigWriterEntry,\n envMapValue: EnvMapValue,\n configsRootDir: string,\n workspaceDir: string\n): Required<ExtendingConfigFile> | undefined {\n const { configWriter, executionContext } = envConfigFileEntry;\n const args = {\n workspaceDir,\n configsRootDir,\n writtenConfigFiles,\n executionContext,\n envMapValue,\n };\n const extendingConfigFile = configWriter.generateExtendingFile(args);\n if (!extendingConfigFile) return undefined;\n const hash = extendingConfigFile.hash || sha1(extendingConfigFile.content);\n return {\n ...extendingConfigFile,\n useAbsPaths: !!extendingConfigFile.useAbsPaths,\n hash,\n };\n}\n\nfunction indexExtendingConfigFiles(\n multiEnvCalculatedExtendingConfigFiles: EnvCalculatedExtendingConfigFile[]\n): ExtendingConfigFilesMap {\n const mergedConfigFiles = multiEnvCalculatedExtendingConfigFiles.reduce(\n (acc, curr: EnvCalculatedExtendingConfigFile) => {\n const extendingConfigFile = curr.extendingConfigFile;\n const currentValue = acc[extendingConfigFile.hash];\n if (currentValue) {\n currentValue.envIds.push(curr.envId);\n } else {\n acc[extendingConfigFile.hash] = { envIds: [curr.envId], extendingConfigFile };\n }\n return acc;\n },\n {}\n );\n return mergedConfigFiles;\n}\n\nasync function postProcessExtendingConfigFiles(\n envEntries: EnvConfigWriterEntry[],\n envCompsDirsMap: EnvCompsDirsMap,\n extendingConfigFilesMap: ExtendingConfigFilesMap,\n fileHashPerDedupedPaths: DedupedPaths,\n configsRootDir: string,\n workspaceDir: string\n) {\n await pMapSeries(envEntries, async (envConfigFileEntry) => {\n const postProcessFunc = envConfigFileEntry.configWriter.postProcessExtendingConfigFiles;\n if (!postProcessFunc) {\n return undefined;\n }\n const envMapVal = envCompsDirsMap[envConfigFileEntry.envId];\n const extendingConfigFileEntry = Object.values(extendingConfigFilesMap).find((entry) => {\n return entry.envIds.includes(envConfigFileEntry.envId);\n });\n if (!extendingConfigFileEntry) {\n return undefined;\n }\n const dedupEntry = fileHashPerDedupedPaths.find((fileHashPerDedupedPath) => {\n return fileHashPerDedupedPath.fileHash === extendingConfigFileEntry.extendingConfigFile.hash;\n });\n if (!dedupEntry) {\n return undefined;\n }\n\n const postProcessRes = await postProcessFunc({\n configsRootDir,\n extendingConfigFile: extendingConfigFileEntry.extendingConfigFile,\n envMapValue: envMapVal,\n workspaceDir,\n paths: dedupEntry.paths,\n supportSpecificPathChange: true,\n });\n if (!postProcessRes) {\n return undefined;\n }\n if (typeof postProcessRes === 'string') {\n extendingConfigFileEntry.extendingConfigFile.content = postProcessRes;\n return undefined;\n }\n postProcessRes.forEach(({ path, content }) => {\n // Remove it from the current entry\n dedupEntry.paths = dedupEntry.paths.filter((currPath) => currPath !== path);\n const newHash = sha1(content);\n extendingConfigFilesMap[newHash] = JSON.parse(JSON.stringify(extendingConfigFileEntry));\n extendingConfigFilesMap[newHash].extendingConfigFile.content = content;\n const foundNewHash = fileHashPerDedupedPaths.find((entry) => entry.fileHash === newHash);\n if (foundNewHash) {\n foundNewHash.paths.push(path);\n } else {\n fileHashPerDedupedPaths.push({ fileHash: newHash, paths: [path] });\n }\n });\n return undefined;\n });\n}\n\nasync function writeExtendingConfigFiles(\n extendingConfigFilesMap: ExtendingConfigFilesMap,\n fileHashPerDedupedPaths: DedupedPaths,\n workspaceDir: string,\n opts: WriteConfigFilesOptions\n): Promise<EnvsWrittenExtendingConfigFiles> {\n const finalResult: EnvsWrittenExtendingConfigFiles = await Promise.all(\n fileHashPerDedupedPaths.map(async ({ fileHash, paths }) => {\n const envsConfigFile = extendingConfigFilesMap[fileHash];\n const configFile = envsConfigFile.extendingConfigFile;\n const hash = configFile.hash || sha1(configFile.content);\n const name = format(configFile.name, { hash });\n const writtenPaths = await Promise.all(\n paths.map(async (path) => {\n const filePath = join(workspaceDir, path, name);\n const targetPath = configFile.useAbsPaths\n ? configFile.extendingTarget.filePath\n : normalize(`./${relative(dirname(filePath), configFile.extendingTarget.filePath)}`);\n const content = configFile.content.replace(`{${configFile.extendingTarget.name}}`, targetPath);\n if (!opts.dryRun) {\n await fs.outputFile(filePath, content);\n }\n return filePath;\n })\n );\n const res: EnvsWrittenExtendingConfigFile = {\n envIds: envsConfigFile.envIds,\n extendingConfigFile: {\n name,\n hash,\n content: configFile.content,\n extendingTarget: configFile.extendingTarget,\n filePaths: writtenPaths,\n },\n };\n return res;\n })\n );\n return finalResult;\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_normalizePath","data","_interopRequireDefault","require","_stringFormat","_toolboxCrypto","_fsExtra","_path","_pMapSeries","_lodash","_dedupPaths","e","__esModule","default","ownKeys","r","t","Object","keys","getOwnPropertySymbols","o","filter","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty","getOwnPropertyDescriptors","defineProperties","defineProperty","_toPropertyKey","value","configurable","writable","i","_toPrimitive","Symbol","toPrimitive","call","TypeError","String","Number","handleExtendingConfigFiles","envEntries","envCompsDirsMap","writtenRealConfigFiles","configsRootDir","componentsRootDir","workspaceDir","opts","extendingConfigFilesMap","buildExtendingConfigFilesMap","fileHashPerDedupedPaths","dedupePaths","postProcessExtendingConfigFiles","configWriter","writeExtendingConfigFiles","allEnvsCalculatedExtendingConfigFiles","compact","pMapSeries","envConfigFileEntry","envMapVal","envId","writtenConfigFilesForEnv","getEnvOnlyWrittenRealConfigFiles","extendingConfigFile","generateOneExtendingConfigFile","undefined","indexExtendingConfigFiles","values","reduce","acc","envIds","writtenRealConfigFile","includes","writtenConfigFiles","envMapValue","executionContext","args","generateExtendingFile","hash","sha1","content","useAbsPaths","multiEnvCalculatedExtendingConfigFiles","mergedConfigFiles","curr","currentValue","postProcessFunc","extendingConfigFileEntry","find","entry","dedupEntry","fileHashPerDedupedPath","fileHash","postProcessRes","paths","supportSpecificPathChange","path","currPath","newHash","JSON","parse","stringify","foundNewHash","isUserAuthoredConfigFile","filePath","isBitGenerated","fs","pathExists","skippedPaths","extendingConfigFiles","Promise","all","map","envsConfigFile","configFile","name","format","writtenPaths","join","targetPath","extendingTarget","normalize","relative","dirname","replace","force","dryRun","outputFile","res","filePaths"],"sources":["extending-config-files.ts"],"sourcesContent":["import normalize from 'normalize-path';\nimport format from 'string-format';\nimport { sha1 } from '@teambit/toolbox.crypto.sha1';\nimport fs from 'fs-extra';\nimport { dirname, join, relative } from 'path';\nimport pMapSeries from 'p-map-series';\nimport { compact } from 'lodash';\nimport type { ConfigWriterEntry, ExtendingConfigFile } from '../config-writer-entry';\nimport type { DedupedPaths } from '../dedup-paths';\nimport { dedupePaths } from '../dedup-paths';\nimport type {\n EnvCompsDirsMap,\n EnvConfigWriterEntry,\n EnvMapValue,\n WriteConfigFilesOptions,\n} from '../workspace-config-files.main.runtime';\nimport type { WrittenConfigFile, WrittenRealConfigFilesByHash } from './real-config-files';\n\ntype EnvCalculatedExtendingConfigFile = {\n envId: string;\n extendingConfigFile: Required<ExtendingConfigFile>;\n};\nexport type WrittenExtendingConfigFile = ExtendingConfigFile & {\n filePaths: string[];\n};\nexport type EnvsWrittenExtendingConfigFile = { envIds: string[]; extendingConfigFile: WrittenExtendingConfigFile };\nexport type EnvsWrittenExtendingConfigFiles = Array<EnvsWrittenExtendingConfigFile>;\nexport type ExtendingConfigFilesMap = {\n [configFileHash: string]: {\n envIds: string[];\n extendingConfigFile: Required<ExtendingConfigFile>;\n };\n};\nexport type HandleExtendingConfigFilesResult = {\n extendingConfigFiles: EnvsWrittenExtendingConfigFiles;\n /**\n * paths of config files that already exist in the workspace and were not generated by bit.\n * they are left untouched, otherwise the user's own configuration would be lost.\n */\n skippedPaths: string[];\n};\n\nexport async function handleExtendingConfigFiles(\n envEntries: EnvConfigWriterEntry[],\n envCompsDirsMap: EnvCompsDirsMap,\n writtenRealConfigFiles: WrittenRealConfigFilesByHash,\n configsRootDir: string,\n componentsRootDir: string | undefined,\n workspaceDir: string,\n opts: WriteConfigFilesOptions\n): Promise<HandleExtendingConfigFilesResult> {\n const extendingConfigFilesMap = await buildExtendingConfigFilesMap(\n envEntries,\n writtenRealConfigFiles,\n envCompsDirsMap,\n configsRootDir,\n workspaceDir\n );\n const fileHashPerDedupedPaths = dedupePaths(extendingConfigFilesMap, envCompsDirsMap, componentsRootDir);\n await postProcessExtendingConfigFiles(\n envEntries,\n envCompsDirsMap,\n extendingConfigFilesMap,\n fileHashPerDedupedPaths,\n configsRootDir,\n workspaceDir\n );\n // all the entries here share the same writer-id (they're grouped by it before getting here), so any of them\n // knows how to tell whether an existing config file was generated by bit.\n const configWriter = envEntries[0]?.configWriter;\n return writeExtendingConfigFiles(extendingConfigFilesMap, fileHashPerDedupedPaths, workspaceDir, configWriter, opts);\n}\n\nasync function buildExtendingConfigFilesMap(\n envEntries: EnvConfigWriterEntry[],\n writtenRealConfigFiles: WrittenRealConfigFilesByHash,\n envCompsDirsMap: EnvCompsDirsMap,\n configsRootDir: string,\n workspaceDir: string\n): Promise<ExtendingConfigFilesMap> {\n const allEnvsCalculatedExtendingConfigFiles: EnvCalculatedExtendingConfigFile[] = compact(\n await pMapSeries(envEntries, async (envConfigFileEntry) => {\n const envMapVal = envCompsDirsMap[envConfigFileEntry.envId];\n const writtenConfigFilesForEnv: WrittenConfigFile[] = getEnvOnlyWrittenRealConfigFiles(\n envConfigFileEntry.envId,\n writtenRealConfigFiles\n );\n const extendingConfigFile = generateOneExtendingConfigFile(\n writtenConfigFilesForEnv,\n envConfigFileEntry,\n envMapVal,\n configsRootDir,\n workspaceDir\n );\n if (!extendingConfigFile) {\n return undefined;\n }\n return {\n envId: envConfigFileEntry.envId,\n extendingConfigFile,\n };\n })\n );\n const extendingConfigFilesMap: ExtendingConfigFilesMap = indexExtendingConfigFiles(\n allEnvsCalculatedExtendingConfigFiles\n );\n return extendingConfigFilesMap;\n}\n\nfunction getEnvOnlyWrittenRealConfigFiles(\n envId: string,\n writtenRealConfigFiles: WrittenRealConfigFilesByHash\n): WrittenConfigFile[] {\n return Object.values(writtenRealConfigFiles).reduce((acc, { envIds, writtenRealConfigFile }) => {\n if (envIds.includes(envId)) {\n acc.push(writtenRealConfigFile);\n }\n return acc;\n }, [] as WrittenConfigFile[]);\n}\n\nfunction generateOneExtendingConfigFile(\n writtenConfigFiles: WrittenConfigFile[],\n envConfigFileEntry: EnvConfigWriterEntry,\n envMapValue: EnvMapValue,\n configsRootDir: string,\n workspaceDir: string\n): Required<ExtendingConfigFile> | undefined {\n const { configWriter, executionContext } = envConfigFileEntry;\n const args = {\n workspaceDir,\n configsRootDir,\n writtenConfigFiles,\n executionContext,\n envMapValue,\n };\n const extendingConfigFile = configWriter.generateExtendingFile(args);\n if (!extendingConfigFile) return undefined;\n const hash = extendingConfigFile.hash || sha1(extendingConfigFile.content);\n return {\n ...extendingConfigFile,\n useAbsPaths: !!extendingConfigFile.useAbsPaths,\n hash,\n };\n}\n\nfunction indexExtendingConfigFiles(\n multiEnvCalculatedExtendingConfigFiles: EnvCalculatedExtendingConfigFile[]\n): ExtendingConfigFilesMap {\n const mergedConfigFiles = multiEnvCalculatedExtendingConfigFiles.reduce(\n (acc, curr: EnvCalculatedExtendingConfigFile) => {\n const extendingConfigFile = curr.extendingConfigFile;\n const currentValue = acc[extendingConfigFile.hash];\n if (currentValue) {\n currentValue.envIds.push(curr.envId);\n } else {\n acc[extendingConfigFile.hash] = { envIds: [curr.envId], extendingConfigFile };\n }\n return acc;\n },\n {}\n );\n return mergedConfigFiles;\n}\n\nasync function postProcessExtendingConfigFiles(\n envEntries: EnvConfigWriterEntry[],\n envCompsDirsMap: EnvCompsDirsMap,\n extendingConfigFilesMap: ExtendingConfigFilesMap,\n fileHashPerDedupedPaths: DedupedPaths,\n configsRootDir: string,\n workspaceDir: string\n) {\n await pMapSeries(envEntries, async (envConfigFileEntry) => {\n const postProcessFunc = envConfigFileEntry.configWriter.postProcessExtendingConfigFiles;\n if (!postProcessFunc) {\n return undefined;\n }\n const envMapVal = envCompsDirsMap[envConfigFileEntry.envId];\n const extendingConfigFileEntry = Object.values(extendingConfigFilesMap).find((entry) => {\n return entry.envIds.includes(envConfigFileEntry.envId);\n });\n if (!extendingConfigFileEntry) {\n return undefined;\n }\n const dedupEntry = fileHashPerDedupedPaths.find((fileHashPerDedupedPath) => {\n return fileHashPerDedupedPath.fileHash === extendingConfigFileEntry.extendingConfigFile.hash;\n });\n if (!dedupEntry) {\n return undefined;\n }\n\n const postProcessRes = await postProcessFunc({\n configsRootDir,\n extendingConfigFile: extendingConfigFileEntry.extendingConfigFile,\n envMapValue: envMapVal,\n workspaceDir,\n paths: dedupEntry.paths,\n supportSpecificPathChange: true,\n });\n if (!postProcessRes) {\n return undefined;\n }\n if (typeof postProcessRes === 'string') {\n extendingConfigFileEntry.extendingConfigFile.content = postProcessRes;\n return undefined;\n }\n postProcessRes.forEach(({ path, content }) => {\n // Remove it from the current entry\n dedupEntry.paths = dedupEntry.paths.filter((currPath) => currPath !== path);\n const newHash = sha1(content);\n extendingConfigFilesMap[newHash] = JSON.parse(JSON.stringify(extendingConfigFileEntry));\n extendingConfigFilesMap[newHash].extendingConfigFile.content = content;\n const foundNewHash = fileHashPerDedupedPaths.find((entry) => entry.fileHash === newHash);\n if (foundNewHash) {\n foundNewHash.paths.push(path);\n } else {\n fileHashPerDedupedPaths.push({ fileHash: newHash, paths: [path] });\n }\n });\n return undefined;\n });\n}\n\n/**\n * a config file that already exists in the workspace and wasn't generated by bit is a file the user wrote.\n * overriding it silently loses their configuration, so it's skipped unless the caller explicitly asked to force it.\n */\nexport async function isUserAuthoredConfigFile(filePath: string, configWriter?: ConfigWriterEntry): Promise<boolean> {\n // without isBitGenerated we have no way to tell the files apart, keep the original behavior of overriding.\n if (!configWriter?.isBitGenerated) return false;\n if (!(await fs.pathExists(filePath))) return false;\n try {\n return !configWriter.isBitGenerated(filePath);\n } catch {\n // the file exists but can't be read. better to leave a file we know nothing about as is.\n return true;\n }\n}\n\nasync function writeExtendingConfigFiles(\n extendingConfigFilesMap: ExtendingConfigFilesMap,\n fileHashPerDedupedPaths: DedupedPaths,\n workspaceDir: string,\n configWriter: ConfigWriterEntry | undefined,\n opts: WriteConfigFilesOptions\n): Promise<HandleExtendingConfigFilesResult> {\n const skippedPaths: string[] = [];\n const extendingConfigFiles: EnvsWrittenExtendingConfigFiles = await Promise.all(\n fileHashPerDedupedPaths.map(async ({ fileHash, paths }) => {\n const envsConfigFile = extendingConfigFilesMap[fileHash];\n const configFile = envsConfigFile.extendingConfigFile;\n const hash = configFile.hash || sha1(configFile.content);\n const name = format(configFile.name, { hash });\n const writtenPaths = compact(\n await Promise.all(\n paths.map(async (path) => {\n const filePath = join(workspaceDir, path, name);\n const targetPath = configFile.useAbsPaths\n ? configFile.extendingTarget.filePath\n : normalize(`./${relative(dirname(filePath), configFile.extendingTarget.filePath)}`);\n const content = configFile.content.replace(`{${configFile.extendingTarget.name}}`, targetPath);\n // the check runs for dry-run as well, so it reports what will actually happen.\n if (!opts.force && (await isUserAuthoredConfigFile(filePath, configWriter))) {\n skippedPaths.push(filePath);\n return undefined;\n }\n if (!opts.dryRun) {\n await fs.outputFile(filePath, content);\n }\n return filePath;\n })\n )\n );\n const res: EnvsWrittenExtendingConfigFile = {\n envIds: envsConfigFile.envIds,\n extendingConfigFile: {\n name,\n hash,\n content: configFile.content,\n extendingTarget: configFile.extendingTarget,\n filePaths: writtenPaths,\n },\n };\n return res;\n })\n );\n return { extendingConfigFiles, skippedPaths };\n}\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,91 @@
1
+ "use strict";
2
+
3
+ function _chai() {
4
+ const data = require("chai");
5
+ _chai = function () {
6
+ return data;
7
+ };
8
+ return data;
9
+ }
10
+ function _fsExtra() {
11
+ const data = _interopRequireDefault(require("fs-extra"));
12
+ _fsExtra = function () {
13
+ return data;
14
+ };
15
+ return data;
16
+ }
17
+ function _os() {
18
+ const data = require("os");
19
+ _os = function () {
20
+ return data;
21
+ };
22
+ return data;
23
+ }
24
+ function _path() {
25
+ const data = require("path");
26
+ _path = function () {
27
+ return data;
28
+ };
29
+ return data;
30
+ }
31
+ function _extendingConfigFiles() {
32
+ const data = require("./extending-config-files");
33
+ _extendingConfigFiles = function () {
34
+ return data;
35
+ };
36
+ return data;
37
+ }
38
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
39
+ const BIT_GENERATED_COMMENT = '// bit-generated-typescript-config';
40
+ function mockConfigWriter(withIsBitGenerated = true) {
41
+ const configWriter = {
42
+ id: 'typescript',
43
+ name: 'TypescriptConfigWriter',
44
+ patterns: ['**/tsconfig.json'],
45
+ calcConfigFiles: () => undefined,
46
+ generateExtendingFile: () => undefined
47
+ };
48
+ if (withIsBitGenerated) {
49
+ configWriter.isBitGenerated = filePath => _fsExtra().default.readFileSync(filePath).toString().includes(BIT_GENERATED_COMMENT);
50
+ }
51
+ return configWriter;
52
+ }
53
+ describe('isUserAuthoredConfigFile()', () => {
54
+ let dir;
55
+ before(async () => {
56
+ dir = (0, _path().join)((0, _os().tmpdir)(), `bit-ws-config-files-${Date.now()}`);
57
+ await _fsExtra().default.ensureDir(dir);
58
+ await _fsExtra().default.outputFile((0, _path().join)(dir, 'bit-generated.json'), `${BIT_GENERATED_COMMENT}\n{ "extends": "./whatever.json" }`);
59
+ await _fsExtra().default.outputFile((0, _path().join)(dir, 'user-authored.json'), '{ "compilerOptions": { "strict": true } }');
60
+ await _fsExtra().default.ensureDir((0, _path().join)(dir, 'a-directory.json'));
61
+ });
62
+ after(async () => {
63
+ await _fsExtra().default.remove(dir);
64
+ });
65
+ it('should return false when the file does not exist', async () => {
66
+ const result = await (0, _extendingConfigFiles().isUserAuthoredConfigFile)((0, _path().join)(dir, 'does-not-exist.json'), mockConfigWriter());
67
+ (0, _chai().expect)(result).to.be.false;
68
+ });
69
+ it('should return false when the existing file was generated by bit', async () => {
70
+ const result = await (0, _extendingConfigFiles().isUserAuthoredConfigFile)((0, _path().join)(dir, 'bit-generated.json'), mockConfigWriter());
71
+ (0, _chai().expect)(result).to.be.false;
72
+ });
73
+ it('should return true when the existing file was not generated by bit', async () => {
74
+ const result = await (0, _extendingConfigFiles().isUserAuthoredConfigFile)((0, _path().join)(dir, 'user-authored.json'), mockConfigWriter());
75
+ (0, _chai().expect)(result).to.be.true;
76
+ });
77
+ it('should return false when the writer is unable to tell whether the file was generated by bit', async () => {
78
+ const result = await (0, _extendingConfigFiles().isUserAuthoredConfigFile)((0, _path().join)(dir, 'user-authored.json'), mockConfigWriter(false));
79
+ (0, _chai().expect)(result).to.be.false;
80
+ });
81
+ it('should return false when no config writer was given', async () => {
82
+ const result = await (0, _extendingConfigFiles().isUserAuthoredConfigFile)((0, _path().join)(dir, 'user-authored.json'));
83
+ (0, _chai().expect)(result).to.be.false;
84
+ });
85
+ it('should return true when the existing file cannot be read', async () => {
86
+ const result = await (0, _extendingConfigFiles().isUserAuthoredConfigFile)((0, _path().join)(dir, 'a-directory.json'), mockConfigWriter());
87
+ (0, _chai().expect)(result).to.be.true;
88
+ });
89
+ });
90
+
91
+ //# sourceMappingURL=extending-config-files.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_chai","data","require","_fsExtra","_interopRequireDefault","_os","_path","_extendingConfigFiles","e","__esModule","default","BIT_GENERATED_COMMENT","mockConfigWriter","withIsBitGenerated","configWriter","id","name","patterns","calcConfigFiles","undefined","generateExtendingFile","isBitGenerated","filePath","fs","readFileSync","toString","includes","describe","dir","before","join","tmpdir","Date","now","ensureDir","outputFile","after","remove","it","result","isUserAuthoredConfigFile","expect","to","be","false","true"],"sources":["extending-config-files.spec.ts"],"sourcesContent":["import { expect } from 'chai';\nimport fs from 'fs-extra';\nimport { tmpdir } from 'os';\nimport { join } from 'path';\nimport type { ConfigWriterEntry } from '../config-writer-entry';\nimport { isUserAuthoredConfigFile } from './extending-config-files';\n\nconst BIT_GENERATED_COMMENT = '// bit-generated-typescript-config';\n\nfunction mockConfigWriter(withIsBitGenerated = true): ConfigWriterEntry {\n const configWriter = {\n id: 'typescript',\n name: 'TypescriptConfigWriter',\n patterns: ['**/tsconfig.json'],\n calcConfigFiles: () => undefined,\n generateExtendingFile: () => undefined,\n } as unknown as ConfigWriterEntry;\n if (withIsBitGenerated) {\n configWriter.isBitGenerated = (filePath: string) =>\n fs.readFileSync(filePath).toString().includes(BIT_GENERATED_COMMENT);\n }\n return configWriter;\n}\n\ndescribe('isUserAuthoredConfigFile()', () => {\n let dir: string;\n before(async () => {\n dir = join(tmpdir(), `bit-ws-config-files-${Date.now()}`);\n await fs.ensureDir(dir);\n await fs.outputFile(join(dir, 'bit-generated.json'), `${BIT_GENERATED_COMMENT}\\n{ \"extends\": \"./whatever.json\" }`);\n await fs.outputFile(join(dir, 'user-authored.json'), '{ \"compilerOptions\": { \"strict\": true } }');\n await fs.ensureDir(join(dir, 'a-directory.json'));\n });\n after(async () => {\n await fs.remove(dir);\n });\n\n it('should return false when the file does not exist', async () => {\n const result = await isUserAuthoredConfigFile(join(dir, 'does-not-exist.json'), mockConfigWriter());\n expect(result).to.be.false;\n });\n\n it('should return false when the existing file was generated by bit', async () => {\n const result = await isUserAuthoredConfigFile(join(dir, 'bit-generated.json'), mockConfigWriter());\n expect(result).to.be.false;\n });\n\n it('should return true when the existing file was not generated by bit', async () => {\n const result = await isUserAuthoredConfigFile(join(dir, 'user-authored.json'), mockConfigWriter());\n expect(result).to.be.true;\n });\n\n it('should return false when the writer is unable to tell whether the file was generated by bit', async () => {\n const result = await isUserAuthoredConfigFile(join(dir, 'user-authored.json'), mockConfigWriter(false));\n expect(result).to.be.false;\n });\n\n it('should return false when no config writer was given', async () => {\n const result = await isUserAuthoredConfigFile(join(dir, 'user-authored.json'));\n expect(result).to.be.false;\n });\n\n it('should return true when the existing file cannot be read', async () => {\n const result = await isUserAuthoredConfigFile(join(dir, 'a-directory.json'), mockConfigWriter());\n expect(result).to.be.true;\n });\n});\n"],"mappings":"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","ignoreList":[]}
@@ -1,4 +1,4 @@
1
- export { handleExtendingConfigFiles } from './extending-config-files';
1
+ export { handleExtendingConfigFiles, isUserAuthoredConfigFile } from './extending-config-files';
2
2
  export { handleRealConfigFiles } from './real-config-files';
3
3
  export type { EnvsWrittenRealConfigFiles, EnvsWrittenRealConfigFile, WrittenConfigFile } from './real-config-files';
4
- export type { EnvsWrittenExtendingConfigFiles, EnvsWrittenExtendingConfigFile, ExtendingConfigFilesMap, } from './extending-config-files';
4
+ export type { EnvsWrittenExtendingConfigFiles, EnvsWrittenExtendingConfigFile, ExtendingConfigFilesMap, HandleExtendingConfigFilesResult, } from './extending-config-files';
@@ -15,6 +15,12 @@ Object.defineProperty(exports, "handleRealConfigFiles", {
15
15
  return _realConfigFiles().handleRealConfigFiles;
16
16
  }
17
17
  });
18
+ Object.defineProperty(exports, "isUserAuthoredConfigFile", {
19
+ enumerable: true,
20
+ get: function () {
21
+ return _extendingConfigFiles().isUserAuthoredConfigFile;
22
+ }
23
+ });
18
24
  function _extendingConfigFiles() {
19
25
  const data = require("./extending-config-files");
20
26
  _extendingConfigFiles = function () {
@@ -1 +1 @@
1
- {"version":3,"names":["_extendingConfigFiles","data","require","_realConfigFiles"],"sources":["index.ts"],"sourcesContent":["export { handleExtendingConfigFiles } from './extending-config-files';\nexport { handleRealConfigFiles } from './real-config-files';\n\nexport type { EnvsWrittenRealConfigFiles, EnvsWrittenRealConfigFile, WrittenConfigFile } from './real-config-files';\nexport type {\n EnvsWrittenExtendingConfigFiles,\n EnvsWrittenExtendingConfigFile,\n ExtendingConfigFilesMap,\n} from './extending-config-files';\n"],"mappings":";;;;;;;;;;;;;;;;;AAAA,SAAAA,sBAAA;EAAA,MAAAC,IAAA,GAAAC,OAAA;EAAAF,qBAAA,YAAAA,CAAA;IAAA,OAAAC,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AACA,SAAAE,iBAAA;EAAA,MAAAF,IAAA,GAAAC,OAAA;EAAAC,gBAAA,YAAAA,CAAA;IAAA,OAAAF,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA","ignoreList":[]}
1
+ {"version":3,"names":["_extendingConfigFiles","data","require","_realConfigFiles"],"sources":["index.ts"],"sourcesContent":["export { handleExtendingConfigFiles, isUserAuthoredConfigFile } from './extending-config-files';\nexport { handleRealConfigFiles } from './real-config-files';\n\nexport type { EnvsWrittenRealConfigFiles, EnvsWrittenRealConfigFile, WrittenConfigFile } from './real-config-files';\nexport type {\n EnvsWrittenExtendingConfigFiles,\n EnvsWrittenExtendingConfigFile,\n ExtendingConfigFilesMap,\n HandleExtendingConfigFilesResult,\n} from './extending-config-files';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAAA,SAAAA,sBAAA;EAAA,MAAAC,IAAA,GAAAC,OAAA;EAAAF,qBAAA,YAAAA,CAAA;IAAA,OAAAC,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AACA,SAAAE,iBAAA;EAAA,MAAAF,IAAA,GAAAC,OAAA;EAAAC,gBAAA,YAAAA,CAAA;IAAA,OAAAF,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA","ignoreList":[]}
@@ -12,6 +12,7 @@ export type WriteConfigCmdFlags = {
12
12
  clean?: boolean;
13
13
  silent?: boolean;
14
14
  verbose?: boolean;
15
+ force?: boolean;
15
16
  };
16
17
  export declare class WsConfigCmd implements Command {
17
18
  name: string;
@@ -49,7 +49,7 @@ class WsConfigWriteCmd {
49
49
  _defineProperty(this, "description", 'write config files in the workspace. useful for IDEs');
50
50
  _defineProperty(this, "alias", '');
51
51
  _defineProperty(this, "group", 'workspace-tools');
52
- _defineProperty(this, "options", [['c', 'clean', 'delete existing config files from the workspace. highly recommended to run it with "--dry-run" first'], ['w', 'writers <writers>', `only write config files for the given writers. use comma to separate multiple writers. use ${COMMAND_NAME} list to see all writers`], ['s', 'silent', 'do not prompt for confirmation'], ['', 'no-dedupe', "write configs inside each one of the component's dir, avoid deduping"], ['', 'dry-run', 'show the paths that configs will be written per env'], ['', 'dry-run-with-content', 'use with --json flag. show the config content and the paths that will be written per env'], ['v', 'verbose', 'showing verbose output for writing'], ['j', 'json', 'json format']]);
52
+ _defineProperty(this, "options", [['c', 'clean', 'delete existing config files from the workspace. highly recommended to run it with "--dry-run" first'], ['w', 'writers <writers>', `only write config files for the given writers. use comma to separate multiple writers. use ${COMMAND_NAME} list to see all writers`], ['s', 'silent', 'do not prompt for confirmation'], ['f', 'force', 'override config files that already exist in the workspace and were not generated by bit. by default they are left untouched'], ['', 'no-dedupe', "write configs inside each one of the component's dir, avoid deduping"], ['', 'dry-run', 'show the paths that configs will be written per env'], ['', 'dry-run-with-content', 'use with --json flag. show the config content and the paths that will be written per env'], ['v', 'verbose', 'showing verbose output for writing'], ['j', 'json', 'json format']]);
53
53
  }
54
54
  async report(_args, flags) {
55
55
  const results = await this.json(_args, flags);
@@ -67,7 +67,8 @@ class WsConfigWriteCmd {
67
67
  silent,
68
68
  noDedupe,
69
69
  dryRunWithContent,
70
- writers
70
+ writers,
71
+ force
71
72
  } = flags;
72
73
  const dryRun = dryRunWithContent ? true : !!flags.dryRun;
73
74
  const {
@@ -79,7 +80,8 @@ class WsConfigWriteCmd {
79
80
  dedupe: !noDedupe,
80
81
  dryRun,
81
82
  silent,
82
- writers: writers?.split(',')
83
+ writers: writers?.split(','),
84
+ force
83
85
  });
84
86
  if (dryRun) {
85
87
  const updatedWriteResults = writeResults;