skuba 13.0.1-handle-extra-cases-20251015055510 → 13.0.1-handle-extra-cases-20251015062657
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.
- package/lib/cli/lint/internalLints/upgrade/patches/12.4.1/configureTsConfigForESM.js +3 -0
- package/lib/cli/lint/internalLints/upgrade/patches/12.4.1/configureTsConfigForESM.js.map +2 -2
- package/lib/cli/lint/internalLints/upgrade/patches/12.4.1/rewriteSrcImports.d.ts +1 -0
- package/lib/cli/lint/internalLints/upgrade/patches/12.4.1/rewriteSrcImports.js +7 -0
- package/lib/cli/lint/internalLints/upgrade/patches/12.4.1/rewriteSrcImports.js.map +2 -2
- package/package.json +1 -1
- package/template/greeter/package.json +1 -1
- package/template/lambda-sqs-worker-cdk/package.json +1 -1
|
@@ -249,6 +249,9 @@ const tryConfigureTsConfigForESM = async ({
|
|
|
249
249
|
)
|
|
250
250
|
)
|
|
251
251
|
];
|
|
252
|
+
if (!allSrcPaths.length) {
|
|
253
|
+
return { result: "skip", reason: "no src paths found" };
|
|
254
|
+
}
|
|
252
255
|
const packageJsonPatterns = allSrcPaths.map(
|
|
253
256
|
(srcPath) => import_path.default.join(srcPath, "package.json")
|
|
254
257
|
);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../../../src/cli/lint/internalLints/upgrade/patches/12.4.1/configureTsConfigForESM.ts"],
|
|
4
|
-
"sourcesContent": ["import path from 'path';\nimport { inspect } from 'util';\n\nimport { glob } from 'fast-glob';\nimport fs from 'fs-extra';\nimport ts from 'typescript';\nimport * as z from 'zod';\n\nimport { Git } from '../../../../../../index.js';\nimport { log } from '../../../../../../utils/logging.js';\nimport type { PatchFunction, PatchReturnType } from '../../index.js';\n\nconst packageJsonSchema = z.looseObject({\n imports: z.record(z.string(), z.record(z.string(), z.string())).optional(),\n});\n\ntype PackageJson = z.infer<typeof packageJsonSchema>;\n\nconst tsConfigSchema = z.looseObject({\n compilerOptions: z\n .looseObject({\n customConditions: z.array(z.string()).optional(),\n rootDir: z.string().optional(),\n paths: z\n .record(z.string(), z.union([z.array(z.string()), z.null()]))\n .optional(),\n })\n .optional(),\n});\n\ntype TsConfig = z.infer<typeof tsConfigSchema>;\n\nconst fetchFiles = async (patterns: string[]) => {\n const files = await glob(patterns, {\n ignore: ['**/.git', '**/node_modules'],\n });\n\n return Promise.all(\n files.map(async (file) => {\n const contents = await fs.promises.readFile(file, 'utf8');\n\n return {\n file,\n contents,\n };\n }),\n );\n};\n\nexport const addJestModuleNameMapper = (\n contents: string,\n srcPaths: string[],\n) => {\n if (!srcPaths.length) {\n return contents;\n }\n const moduleNameRegex = /moduleNameMapper:\\s*\\{([\\s\\S]*?)\\}/;\n const match = moduleNameRegex.exec(contents);\n\n const srcPathArray = srcPaths.map((subfolderPath) =>\n subfolderPath === '.' || subfolderPath === './'\n ? '<rootDir>/src/$1'\n : `<rootDir>/${subfolderPath}/src/$1`,\n );\n\n const srcModuleMappers = JSON.stringify({\n '^#src/(.*)\\\\.js$': srcPathArray,\n '^#src/(.*)$': srcPathArray,\n });\n\n // strip the surrounding { } from the JSON stringify result\n const newModuleNameMapper = srcModuleMappers\n .replace(/^{/, '')\n .replace(/}$/, '');\n\n if (match?.[1] !== undefined) {\n // insert srcModuleMappers into existing moduleNameMapper\n const existingModuleMappers = match[1];\n\n const optionalComma = !/[,\\s]*$/.test(existingModuleMappers) ? '' : ',';\n const newContents = `${contents.slice(\n 0,\n match.index,\n )}moduleNameMapper: {${existingModuleMappers}${optionalComma}${newModuleNameMapper}}${contents.slice(\n match.index + match[0].length,\n )}`;\n\n return newContents;\n }\n\n // match against function calls\n\n // Match function calls like moduleNameMapper: getMapper()\n const moduleNameMapperFunctionRegex =\n /moduleNameMapper:\\s*([a-zA-Z_$][\\w$]*(?:\\([^)]*\\))?)/;\n const functionMatch = moduleNameMapperFunctionRegex.exec(contents);\n\n if (functionMatch?.[1] !== undefined) {\n const functionBody = functionMatch[1];\n const optionalComma = !/[,\\s]*$/.test(functionBody) ? '' : ',';\n const newContents = `${contents.slice(\n 0,\n functionMatch.index,\n )}moduleNameMapper: {...${functionBody}${optionalComma}${newModuleNameMapper}}${contents.slice(\n functionMatch.index + functionMatch[0].length,\n )}}`;\n\n return newContents;\n }\n\n // Add moduleNameMapper if not present\n\n const insertionPointRegex = /(\\b(jest|export\\s+default)\\b[\\s\\S]*?{)/;\n const insertionMatch = insertionPointRegex.exec(contents);\n\n if (insertionMatch?.[1] !== undefined) {\n const insertionIndex = insertionMatch.index + insertionMatch[0].length;\n const moduleNameMapperString = `\\n moduleNameMapper: {${newModuleNameMapper}},`;\n\n const newContents =\n contents.slice(0, insertionIndex) +\n moduleNameMapperString +\n contents.slice(insertionIndex);\n\n return newContents;\n }\n\n log.warn(\n 'Could not find a suitable place to insert moduleNameMapper in jest config',\n );\n return contents;\n};\n\nexport const parsePackageJson = (\n contents: string,\n): {\n original: PackageJson;\n parsed: PackageJson;\n} | null => {\n try {\n const parsedJson: unknown = JSON.parse(contents);\n return {\n original: parsedJson as PackageJson,\n parsed: packageJsonSchema.parse(parsedJson),\n };\n } catch (error) {\n log.warn(`Failed to parse package.json as JSON: ${String(error)}`);\n return null;\n }\n};\n\nexport const updatePackageJson = ({\n parsed,\n customCondition,\n}: {\n parsed: PackageJson;\n customCondition: string;\n}) => {\n parsed.imports ??= {};\n parsed.imports['#src/*'] ??= {\n [customCondition]: './src/*',\n default: './lib/*',\n };\n\n return {\n parsed,\n };\n};\n\nconst parseTsconfig = (\n file: string,\n contents: string,\n): {\n original: TsConfig;\n parsed: TsConfig;\n srcPaths: string[];\n} | null => {\n try {\n const parsedJson = ts.parseConfigFileTextToJson(file, contents);\n const tsconfig = tsConfigSchema.parse(parsedJson.config);\n\n return {\n original: parsedJson.config as TsConfig,\n parsed: tsconfig,\n srcPaths: tsconfig.compilerOptions?.paths?.['./src/*'] ?? [],\n };\n } catch (error) {\n log.warn(`Failed to parse root tsconfig.json as JSON: ${String(error)}`);\n return null;\n }\n};\n\nconst updateTsConfig = ({\n parsed,\n customCondition,\n file,\n}: {\n parsed: TsConfig;\n customCondition: string;\n file: string;\n}) => {\n if (file === 'tsconfig.json') {\n parsed.compilerOptions ??= {};\n parsed.compilerOptions.customConditions ??= [];\n\n if (\n parsed.compilerOptions.customConditions.includes(customCondition) &&\n customCondition !== '@seek/skuba/source'\n ) {\n throw new Error(\n `Custom condition ${customCondition} already exists in tsconfig.json`,\n );\n }\n\n if (!parsed.compilerOptions.customConditions.includes(customCondition)) {\n parsed.compilerOptions.customConditions.push(customCondition);\n }\n }\n\n let srcPaths: string[] = [];\n ['./src/*', 'src/*', 'src'].forEach((key) => {\n if (parsed.compilerOptions?.paths?.[key]) {\n srcPaths = parsed.compilerOptions.paths[key];\n delete parsed.compilerOptions.paths[key];\n }\n });\n\n if (\n parsed.compilerOptions?.paths &&\n Object.keys(parsed.compilerOptions.paths).length === 0\n ) {\n delete parsed.compilerOptions.paths;\n }\n\n return {\n parsed,\n srcPaths,\n };\n};\n\nexport const tryConfigureTsConfigForESM: PatchFunction = async ({\n mode,\n}): Promise<PatchReturnType> => {\n let customCondition: string;\n try {\n const { repo } = await Git.getOwnerAndRepo({ dir: process.cwd() });\n customCondition = `@seek/${repo}/source`;\n } catch {\n return { result: 'skip', reason: 'no repository name found' };\n }\n\n const tsconfigJsonPatterns = ['**/tsconfig.json'];\n const tsconfigBuildJsonPatterns = ['**/tsconfig.build.json'];\n const jestConfigPatterns = ['**/jest.config.ts', '**/jest.config.*.ts'];\n\n const [tsconfigJsonFiles, tsconfigBuildJsonFiles, jestConfigFiles] =\n await Promise.all([\n fetchFiles(tsconfigJsonPatterns),\n fetchFiles(tsconfigBuildJsonPatterns),\n fetchFiles(jestConfigPatterns),\n ]);\n\n const parsedTsconfigFiles = tsconfigJsonFiles.flatMap(\n ({ file, contents }) => {\n const parsed = parseTsconfig(file, contents);\n return parsed ? [{ file, ...parsed }] : [];\n },\n );\n\n const parsedTsconfigBuildFiles = tsconfigBuildJsonFiles.flatMap(\n ({ file, contents }) => {\n const parsed = parseTsconfig(file, contents);\n return parsed ? [{ file, ...parsed }] : [];\n },\n );\n\n if (parsedTsconfigFiles.length === 0) {\n return { result: 'skip', reason: 'no valid tsconfig.json files found' };\n }\n\n const updatedTsconfigFiles = parsedTsconfigFiles.map(\n ({ file, parsed, original }) => ({\n file,\n original,\n ...updateTsConfig({ parsed, customCondition, file }),\n }),\n );\n\n const allSrcPaths = [\n ...new Set(\n updatedTsconfigFiles.flatMap(({ srcPaths, file }) =>\n srcPaths.flatMap((p) => {\n const regex = /(.*)src\\/?\\*?$/;\n const match = regex.exec(p);\n if (match?.[1] !== undefined) {\n return [\n path.join(path.dirname(file), match[1].replace(/\\/?$/, '')),\n ];\n }\n\n log.warn(\n `Unexpected src path format in ${file}: ${p}. Expected format like \"apps/api/src/*\"`,\n );\n return [];\n }),\n ),\n ),\n ];\n\n // Fetch all package.json paths which may be in allSrcPaths\n const packageJsonPatterns = allSrcPaths.map((srcPath) =>\n path.join(srcPath, 'package.json'),\n );\n\n const packageJsonFiles = await fetchFiles(packageJsonPatterns);\n\n const parsedPackageJsonFiles = packageJsonFiles.flatMap(\n ({ file, contents }) => {\n const parsed = parsePackageJson(contents);\n return parsed ? [{ file, ...parsed }] : [];\n },\n );\n\n parsedPackageJsonFiles.forEach(({ parsed, file }) => {\n updatePackageJson({ parsed, customCondition });\n\n const relativeTsconfigPath = path.join(path.dirname(file), 'tsconfig.json');\n\n const relativeTsconfig = updatedTsconfigFiles.find(\n (tsconfig) => tsconfig.file === relativeTsconfigPath,\n );\n\n if (relativeTsconfig) {\n relativeTsconfig.parsed.compilerOptions ??= {};\n relativeTsconfig.parsed.compilerOptions.rootDir ??= '.';\n } else {\n log.warn(\n `No corresponding tsconfig.json found for package.json at ${file}. Expected at ${relativeTsconfigPath}`,\n );\n }\n\n const relativeTsconfigBuildPath = path.join(\n path.dirname(file),\n 'tsconfig.build.json',\n );\n\n const relativeTsconfigBuild = parsedTsconfigBuildFiles.find(\n (tsconfig) => tsconfig.file === relativeTsconfigBuildPath,\n );\n\n if (relativeTsconfigBuild) {\n relativeTsconfigBuild.parsed.compilerOptions ??= {};\n relativeTsconfigBuild.parsed.compilerOptions.rootDir ??= 'src';\n } else {\n log.warn(\n `No corresponding tsconfig.build.json found for package.json at ${file}. Expected at ${relativeTsconfigBuildPath}`,\n );\n }\n });\n\n const updatedJestConfigFiles = jestConfigFiles.map(({ file, contents }) => {\n const parsed = addJestModuleNameMapper(contents, allSrcPaths);\n return { file, original: contents, parsed };\n });\n\n const hasJestConfigsChanged = updatedJestConfigFiles.some(\n ({ parsed, original }) => original !== parsed,\n );\n\n const hasRelativeTsconfigBuildsChanged = parsedTsconfigBuildFiles.some(\n ({ original, parsed }) =>\n JSON.stringify(original) !== JSON.stringify(parsed),\n );\n\n const hasPackageJsonsChanged = parsedPackageJsonFiles.some(\n ({ original, parsed }) =>\n JSON.stringify(original) !== JSON.stringify(parsed),\n );\n\n const hasRootTsconfigChanged = updatedTsconfigFiles.some(\n ({ original, parsed }) =>\n JSON.stringify(original) !== JSON.stringify(parsed),\n );\n\n if (\n mode === 'lint' &&\n (hasRootTsconfigChanged ||\n hasPackageJsonsChanged ||\n hasRelativeTsconfigBuildsChanged ||\n hasJestConfigsChanged)\n ) {\n return { result: 'apply' };\n }\n\n if (\n !hasRootTsconfigChanged &&\n !hasPackageJsonsChanged &&\n !hasRelativeTsconfigBuildsChanged &&\n !hasJestConfigsChanged\n ) {\n return { result: 'skip', reason: 'no changes required' };\n }\n\n const jsonFilePromises = Promise.all(\n [\n ...updatedTsconfigFiles,\n ...parsedTsconfigBuildFiles,\n ...parsedPackageJsonFiles,\n ].map(async ({ file, parsed, original }) => {\n if (JSON.stringify(original) === JSON.stringify(parsed)) {\n return;\n }\n const updatedContents = JSON.stringify(parsed, null, 2);\n await fs.promises.writeFile(file, updatedContents);\n }),\n );\n\n const otherFilePromises = Promise.all(\n updatedJestConfigFiles.map(async ({ file, parsed, original }) => {\n if (original === parsed) {\n return;\n }\n await fs.promises.writeFile(file, parsed);\n }),\n );\n\n await Promise.all([jsonFilePromises, otherFilePromises]);\n\n return { result: 'apply' };\n};\n\nexport const configureTsConfigForESM: PatchFunction = async (config) => {\n try {\n return await tryConfigureTsConfigForESM(config);\n } catch (err) {\n log.warn('Failed to write configure `tsconfig.json` and `package.json`');\n log.subtle(inspect(err));\n return { result: 'skip', reason: 'due to an error' };\n }\n};\n"],
|
|
5
|
-
"mappings": "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",
|
|
4
|
+
"sourcesContent": ["import path from 'path';\nimport { inspect } from 'util';\n\nimport { glob } from 'fast-glob';\nimport fs from 'fs-extra';\nimport ts from 'typescript';\nimport * as z from 'zod';\n\nimport { Git } from '../../../../../../index.js';\nimport { log } from '../../../../../../utils/logging.js';\nimport type { PatchFunction, PatchReturnType } from '../../index.js';\n\nconst packageJsonSchema = z.looseObject({\n imports: z.record(z.string(), z.record(z.string(), z.string())).optional(),\n});\n\ntype PackageJson = z.infer<typeof packageJsonSchema>;\n\nconst tsConfigSchema = z.looseObject({\n compilerOptions: z\n .looseObject({\n customConditions: z.array(z.string()).optional(),\n rootDir: z.string().optional(),\n paths: z\n .record(z.string(), z.union([z.array(z.string()), z.null()]))\n .optional(),\n })\n .optional(),\n});\n\ntype TsConfig = z.infer<typeof tsConfigSchema>;\n\nconst fetchFiles = async (patterns: string[]) => {\n const files = await glob(patterns, {\n ignore: ['**/.git', '**/node_modules'],\n });\n\n return Promise.all(\n files.map(async (file) => {\n const contents = await fs.promises.readFile(file, 'utf8');\n\n return {\n file,\n contents,\n };\n }),\n );\n};\n\nexport const addJestModuleNameMapper = (\n contents: string,\n srcPaths: string[],\n) => {\n if (!srcPaths.length) {\n return contents;\n }\n const moduleNameRegex = /moduleNameMapper:\\s*\\{([\\s\\S]*?)\\}/;\n const match = moduleNameRegex.exec(contents);\n\n const srcPathArray = srcPaths.map((subfolderPath) =>\n subfolderPath === '.' || subfolderPath === './'\n ? '<rootDir>/src/$1'\n : `<rootDir>/${subfolderPath}/src/$1`,\n );\n\n const srcModuleMappers = JSON.stringify({\n '^#src/(.*)\\\\.js$': srcPathArray,\n '^#src/(.*)$': srcPathArray,\n });\n\n // strip the surrounding { } from the JSON stringify result\n const newModuleNameMapper = srcModuleMappers\n .replace(/^{/, '')\n .replace(/}$/, '');\n\n if (match?.[1] !== undefined) {\n // insert srcModuleMappers into existing moduleNameMapper\n const existingModuleMappers = match[1];\n\n const optionalComma = !/[,\\s]*$/.test(existingModuleMappers) ? '' : ',';\n const newContents = `${contents.slice(\n 0,\n match.index,\n )}moduleNameMapper: {${existingModuleMappers}${optionalComma}${newModuleNameMapper}}${contents.slice(\n match.index + match[0].length,\n )}`;\n\n return newContents;\n }\n\n // match against function calls\n\n // Match function calls like moduleNameMapper: getMapper()\n const moduleNameMapperFunctionRegex =\n /moduleNameMapper:\\s*([a-zA-Z_$][\\w$]*(?:\\([^)]*\\))?)/;\n const functionMatch = moduleNameMapperFunctionRegex.exec(contents);\n\n if (functionMatch?.[1] !== undefined) {\n const functionBody = functionMatch[1];\n const optionalComma = !/[,\\s]*$/.test(functionBody) ? '' : ',';\n const newContents = `${contents.slice(\n 0,\n functionMatch.index,\n )}moduleNameMapper: {...${functionBody}${optionalComma}${newModuleNameMapper}}${contents.slice(\n functionMatch.index + functionMatch[0].length,\n )}}`;\n\n return newContents;\n }\n\n // Add moduleNameMapper if not present\n\n const insertionPointRegex = /(\\b(jest|export\\s+default)\\b[\\s\\S]*?{)/;\n const insertionMatch = insertionPointRegex.exec(contents);\n\n if (insertionMatch?.[1] !== undefined) {\n const insertionIndex = insertionMatch.index + insertionMatch[0].length;\n const moduleNameMapperString = `\\n moduleNameMapper: {${newModuleNameMapper}},`;\n\n const newContents =\n contents.slice(0, insertionIndex) +\n moduleNameMapperString +\n contents.slice(insertionIndex);\n\n return newContents;\n }\n\n log.warn(\n 'Could not find a suitable place to insert moduleNameMapper in jest config',\n );\n return contents;\n};\n\nexport const parsePackageJson = (\n contents: string,\n): {\n original: PackageJson;\n parsed: PackageJson;\n} | null => {\n try {\n const parsedJson: unknown = JSON.parse(contents);\n return {\n original: parsedJson as PackageJson,\n parsed: packageJsonSchema.parse(parsedJson),\n };\n } catch (error) {\n log.warn(`Failed to parse package.json as JSON: ${String(error)}`);\n return null;\n }\n};\n\nexport const updatePackageJson = ({\n parsed,\n customCondition,\n}: {\n parsed: PackageJson;\n customCondition: string;\n}) => {\n parsed.imports ??= {};\n parsed.imports['#src/*'] ??= {\n [customCondition]: './src/*',\n default: './lib/*',\n };\n\n return {\n parsed,\n };\n};\n\nconst parseTsconfig = (\n file: string,\n contents: string,\n): {\n original: TsConfig;\n parsed: TsConfig;\n srcPaths: string[];\n} | null => {\n try {\n const parsedJson = ts.parseConfigFileTextToJson(file, contents);\n const tsconfig = tsConfigSchema.parse(parsedJson.config);\n\n return {\n original: parsedJson.config as TsConfig,\n parsed: tsconfig,\n srcPaths: tsconfig.compilerOptions?.paths?.['./src/*'] ?? [],\n };\n } catch (error) {\n log.warn(`Failed to parse root tsconfig.json as JSON: ${String(error)}`);\n return null;\n }\n};\n\nconst updateTsConfig = ({\n parsed,\n customCondition,\n file,\n}: {\n parsed: TsConfig;\n customCondition: string;\n file: string;\n}) => {\n if (file === 'tsconfig.json') {\n parsed.compilerOptions ??= {};\n parsed.compilerOptions.customConditions ??= [];\n\n if (\n parsed.compilerOptions.customConditions.includes(customCondition) &&\n customCondition !== '@seek/skuba/source'\n ) {\n throw new Error(\n `Custom condition ${customCondition} already exists in tsconfig.json`,\n );\n }\n\n if (!parsed.compilerOptions.customConditions.includes(customCondition)) {\n parsed.compilerOptions.customConditions.push(customCondition);\n }\n }\n\n let srcPaths: string[] = [];\n ['./src/*', 'src/*', 'src'].forEach((key) => {\n if (parsed.compilerOptions?.paths?.[key]) {\n srcPaths = parsed.compilerOptions.paths[key];\n delete parsed.compilerOptions.paths[key];\n }\n });\n\n if (\n parsed.compilerOptions?.paths &&\n Object.keys(parsed.compilerOptions.paths).length === 0\n ) {\n delete parsed.compilerOptions.paths;\n }\n\n return {\n parsed,\n srcPaths,\n };\n};\n\nexport const tryConfigureTsConfigForESM: PatchFunction = async ({\n mode,\n}): Promise<PatchReturnType> => {\n let customCondition: string;\n try {\n const { repo } = await Git.getOwnerAndRepo({ dir: process.cwd() });\n customCondition = `@seek/${repo}/source`;\n } catch {\n return { result: 'skip', reason: 'no repository name found' };\n }\n\n const tsconfigJsonPatterns = ['**/tsconfig.json'];\n const tsconfigBuildJsonPatterns = ['**/tsconfig.build.json'];\n const jestConfigPatterns = ['**/jest.config.ts', '**/jest.config.*.ts'];\n\n const [tsconfigJsonFiles, tsconfigBuildJsonFiles, jestConfigFiles] =\n await Promise.all([\n fetchFiles(tsconfigJsonPatterns),\n fetchFiles(tsconfigBuildJsonPatterns),\n fetchFiles(jestConfigPatterns),\n ]);\n\n const parsedTsconfigFiles = tsconfigJsonFiles.flatMap(\n ({ file, contents }) => {\n const parsed = parseTsconfig(file, contents);\n return parsed ? [{ file, ...parsed }] : [];\n },\n );\n\n const parsedTsconfigBuildFiles = tsconfigBuildJsonFiles.flatMap(\n ({ file, contents }) => {\n const parsed = parseTsconfig(file, contents);\n return parsed ? [{ file, ...parsed }] : [];\n },\n );\n\n if (parsedTsconfigFiles.length === 0) {\n return { result: 'skip', reason: 'no valid tsconfig.json files found' };\n }\n\n const updatedTsconfigFiles = parsedTsconfigFiles.map(\n ({ file, parsed, original }) => ({\n file,\n original,\n ...updateTsConfig({ parsed, customCondition, file }),\n }),\n );\n\n const allSrcPaths = [\n ...new Set(\n updatedTsconfigFiles.flatMap(({ srcPaths, file }) =>\n srcPaths.flatMap((p) => {\n const regex = /(.*)src\\/?\\*?$/;\n const match = regex.exec(p);\n if (match?.[1] !== undefined) {\n return [\n path.join(path.dirname(file), match[1].replace(/\\/?$/, '')),\n ];\n }\n\n log.warn(\n `Unexpected src path format in ${file}: ${p}. Expected format like \"apps/api/src/*\"`,\n );\n return [];\n }),\n ),\n ),\n ];\n\n if (!allSrcPaths.length) {\n return { result: 'skip', reason: 'no src paths found' };\n }\n\n // Fetch all package.json paths which may be in allSrcPaths\n const packageJsonPatterns = allSrcPaths.map((srcPath) =>\n path.join(srcPath, 'package.json'),\n );\n\n const packageJsonFiles = await fetchFiles(packageJsonPatterns);\n\n const parsedPackageJsonFiles = packageJsonFiles.flatMap(\n ({ file, contents }) => {\n const parsed = parsePackageJson(contents);\n return parsed ? [{ file, ...parsed }] : [];\n },\n );\n\n parsedPackageJsonFiles.forEach(({ parsed, file }) => {\n updatePackageJson({ parsed, customCondition });\n\n const relativeTsconfigPath = path.join(path.dirname(file), 'tsconfig.json');\n\n const relativeTsconfig = updatedTsconfigFiles.find(\n (tsconfig) => tsconfig.file === relativeTsconfigPath,\n );\n\n if (relativeTsconfig) {\n relativeTsconfig.parsed.compilerOptions ??= {};\n relativeTsconfig.parsed.compilerOptions.rootDir ??= '.';\n } else {\n log.warn(\n `No corresponding tsconfig.json found for package.json at ${file}. Expected at ${relativeTsconfigPath}`,\n );\n }\n\n const relativeTsconfigBuildPath = path.join(\n path.dirname(file),\n 'tsconfig.build.json',\n );\n\n const relativeTsconfigBuild = parsedTsconfigBuildFiles.find(\n (tsconfig) => tsconfig.file === relativeTsconfigBuildPath,\n );\n\n if (relativeTsconfigBuild) {\n relativeTsconfigBuild.parsed.compilerOptions ??= {};\n relativeTsconfigBuild.parsed.compilerOptions.rootDir ??= 'src';\n } else {\n log.warn(\n `No corresponding tsconfig.build.json found for package.json at ${file}. Expected at ${relativeTsconfigBuildPath}`,\n );\n }\n });\n\n const updatedJestConfigFiles = jestConfigFiles.map(({ file, contents }) => {\n const parsed = addJestModuleNameMapper(contents, allSrcPaths);\n return { file, original: contents, parsed };\n });\n\n const hasJestConfigsChanged = updatedJestConfigFiles.some(\n ({ parsed, original }) => original !== parsed,\n );\n\n const hasRelativeTsconfigBuildsChanged = parsedTsconfigBuildFiles.some(\n ({ original, parsed }) =>\n JSON.stringify(original) !== JSON.stringify(parsed),\n );\n\n const hasPackageJsonsChanged = parsedPackageJsonFiles.some(\n ({ original, parsed }) =>\n JSON.stringify(original) !== JSON.stringify(parsed),\n );\n\n const hasRootTsconfigChanged = updatedTsconfigFiles.some(\n ({ original, parsed }) =>\n JSON.stringify(original) !== JSON.stringify(parsed),\n );\n\n if (\n mode === 'lint' &&\n (hasRootTsconfigChanged ||\n hasPackageJsonsChanged ||\n hasRelativeTsconfigBuildsChanged ||\n hasJestConfigsChanged)\n ) {\n return { result: 'apply' };\n }\n\n if (\n !hasRootTsconfigChanged &&\n !hasPackageJsonsChanged &&\n !hasRelativeTsconfigBuildsChanged &&\n !hasJestConfigsChanged\n ) {\n return { result: 'skip', reason: 'no changes required' };\n }\n\n const jsonFilePromises = Promise.all(\n [\n ...updatedTsconfigFiles,\n ...parsedTsconfigBuildFiles,\n ...parsedPackageJsonFiles,\n ].map(async ({ file, parsed, original }) => {\n if (JSON.stringify(original) === JSON.stringify(parsed)) {\n return;\n }\n const updatedContents = JSON.stringify(parsed, null, 2);\n await fs.promises.writeFile(file, updatedContents);\n }),\n );\n\n const otherFilePromises = Promise.all(\n updatedJestConfigFiles.map(async ({ file, parsed, original }) => {\n if (original === parsed) {\n return;\n }\n await fs.promises.writeFile(file, parsed);\n }),\n );\n\n await Promise.all([jsonFilePromises, otherFilePromises]);\n\n return { result: 'apply' };\n};\n\nexport const configureTsConfigForESM: PatchFunction = async (config) => {\n try {\n return await tryConfigureTsConfigForESM(config);\n } catch (err) {\n log.warn('Failed to write configure `tsconfig.json` and `package.json`');\n log.subtle(inspect(err));\n return { result: 'skip', reason: 'due to an error' };\n }\n};\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAAiB;AACjB,kBAAwB;AAExB,uBAAqB;AACrB,sBAAe;AACf,wBAAe;AACf,QAAmB;AAEnB,eAAoB;AACpB,qBAAoB;AAGpB,MAAM,oBAAoB,EAAE,YAAY;AAAA,EACtC,SAAS,EAAE,OAAO,EAAE,OAAO,GAAG,EAAE,OAAO,EAAE,OAAO,GAAG,EAAE,OAAO,CAAC,CAAC,EAAE,SAAS;AAC3E,CAAC;AAID,MAAM,iBAAiB,EAAE,YAAY;AAAA,EACnC,iBAAiB,EACd,YAAY;AAAA,IACX,kBAAkB,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,SAAS;AAAA,IAC/C,SAAS,EAAE,OAAO,EAAE,SAAS;AAAA,IAC7B,OAAO,EACJ,OAAO,EAAE,OAAO,GAAG,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,EAC3D,SAAS;AAAA,EACd,CAAC,EACA,SAAS;AACd,CAAC;AAID,MAAM,aAAa,OAAO,aAAuB;AAC/C,QAAM,QAAQ,UAAM,uBAAK,UAAU;AAAA,IACjC,QAAQ,CAAC,WAAW,iBAAiB;AAAA,EACvC,CAAC;AAED,SAAO,QAAQ;AAAA,IACb,MAAM,IAAI,OAAO,SAAS;AACxB,YAAM,WAAW,MAAM,gBAAAA,QAAG,SAAS,SAAS,MAAM,MAAM;AAExD,aAAO;AAAA,QACL;AAAA,QACA;AAAA,MACF;AAAA,IACF,CAAC;AAAA,EACH;AACF;AAEO,MAAM,0BAA0B,CACrC,UACA,aACG;AACH,MAAI,CAAC,SAAS,QAAQ;AACpB,WAAO;AAAA,EACT;AACA,QAAM,kBAAkB;AACxB,QAAM,QAAQ,gBAAgB,KAAK,QAAQ;AAE3C,QAAM,eAAe,SAAS;AAAA,IAAI,CAAC,kBACjC,kBAAkB,OAAO,kBAAkB,OACvC,qBACA,aAAa,aAAa;AAAA,EAChC;AAEA,QAAM,mBAAmB,KAAK,UAAU;AAAA,IACtC,oBAAoB;AAAA,IACpB,eAAe;AAAA,EACjB,CAAC;AAGD,QAAM,sBAAsB,iBACzB,QAAQ,MAAM,EAAE,EAChB,QAAQ,MAAM,EAAE;AAEnB,MAAI,QAAQ,CAAC,MAAM,QAAW;AAE5B,UAAM,wBAAwB,MAAM,CAAC;AAErC,UAAM,gBAAgB,CAAC,UAAU,KAAK,qBAAqB,IAAI,KAAK;AACpE,UAAM,cAAc,GAAG,SAAS;AAAA,MAC9B;AAAA,MACA,MAAM;AAAA,IACR,CAAC,sBAAsB,qBAAqB,GAAG,aAAa,GAAG,mBAAmB,IAAI,SAAS;AAAA,MAC7F,MAAM,QAAQ,MAAM,CAAC,EAAE;AAAA,IACzB,CAAC;AAED,WAAO;AAAA,EACT;AAKA,QAAM,gCACJ;AACF,QAAM,gBAAgB,8BAA8B,KAAK,QAAQ;AAEjE,MAAI,gBAAgB,CAAC,MAAM,QAAW;AACpC,UAAM,eAAe,cAAc,CAAC;AACpC,UAAM,gBAAgB,CAAC,UAAU,KAAK,YAAY,IAAI,KAAK;AAC3D,UAAM,cAAc,GAAG,SAAS;AAAA,MAC9B;AAAA,MACA,cAAc;AAAA,IAChB,CAAC,yBAAyB,YAAY,GAAG,aAAa,GAAG,mBAAmB,IAAI,SAAS;AAAA,MACvF,cAAc,QAAQ,cAAc,CAAC,EAAE;AAAA,IACzC,CAAC;AAED,WAAO;AAAA,EACT;AAIA,QAAM,sBAAsB;AAC5B,QAAM,iBAAiB,oBAAoB,KAAK,QAAQ;AAExD,MAAI,iBAAiB,CAAC,MAAM,QAAW;AACrC,UAAM,iBAAiB,eAAe,QAAQ,eAAe,CAAC,EAAE;AAChE,UAAM,yBAAyB;AAAA,uBAA0B,mBAAmB;AAE5E,UAAM,cACJ,SAAS,MAAM,GAAG,cAAc,IAChC,yBACA,SAAS,MAAM,cAAc;AAE/B,WAAO;AAAA,EACT;AAEA,qBAAI;AAAA,IACF;AAAA,EACF;AACA,SAAO;AACT;AAEO,MAAM,mBAAmB,CAC9B,aAIU;AACV,MAAI;AACF,UAAM,aAAsB,KAAK,MAAM,QAAQ;AAC/C,WAAO;AAAA,MACL,UAAU;AAAA,MACV,QAAQ,kBAAkB,MAAM,UAAU;AAAA,IAC5C;AAAA,EACF,SAAS,OAAO;AACd,uBAAI,KAAK,yCAAyC,OAAO,KAAK,CAAC,EAAE;AACjE,WAAO;AAAA,EACT;AACF;AAEO,MAAM,oBAAoB,CAAC;AAAA,EAChC;AAAA,EACA;AACF,MAGM;AACJ,SAAO,YAAY,CAAC;AACpB,SAAO,QAAQ,QAAQ,MAAM;AAAA,IAC3B,CAAC,eAAe,GAAG;AAAA,IACnB,SAAS;AAAA,EACX;AAEA,SAAO;AAAA,IACL;AAAA,EACF;AACF;AAEA,MAAM,gBAAgB,CACpB,MACA,aAKU;AACV,MAAI;AACF,UAAM,aAAa,kBAAAC,QAAG,0BAA0B,MAAM,QAAQ;AAC9D,UAAM,WAAW,eAAe,MAAM,WAAW,MAAM;AAEvD,WAAO;AAAA,MACL,UAAU,WAAW;AAAA,MACrB,QAAQ;AAAA,MACR,UAAU,SAAS,iBAAiB,QAAQ,SAAS,KAAK,CAAC;AAAA,IAC7D;AAAA,EACF,SAAS,OAAO;AACd,uBAAI,KAAK,+CAA+C,OAAO,KAAK,CAAC,EAAE;AACvE,WAAO;AAAA,EACT;AACF;AAEA,MAAM,iBAAiB,CAAC;AAAA,EACtB;AAAA,EACA;AAAA,EACA;AACF,MAIM;AACJ,MAAI,SAAS,iBAAiB;AAC5B,WAAO,oBAAoB,CAAC;AAC5B,WAAO,gBAAgB,qBAAqB,CAAC;AAE7C,QACE,OAAO,gBAAgB,iBAAiB,SAAS,eAAe,KAChE,oBAAoB,sBACpB;AACA,YAAM,IAAI;AAAA,QACR,oBAAoB,eAAe;AAAA,MACrC;AAAA,IACF;AAEA,QAAI,CAAC,OAAO,gBAAgB,iBAAiB,SAAS,eAAe,GAAG;AACtE,aAAO,gBAAgB,iBAAiB,KAAK,eAAe;AAAA,IAC9D;AAAA,EACF;AAEA,MAAI,WAAqB,CAAC;AAC1B,GAAC,WAAW,SAAS,KAAK,EAAE,QAAQ,CAAC,QAAQ;AAC3C,QAAI,OAAO,iBAAiB,QAAQ,GAAG,GAAG;AACxC,iBAAW,OAAO,gBAAgB,MAAM,GAAG;AAC3C,aAAO,OAAO,gBAAgB,MAAM,GAAG;AAAA,IACzC;AAAA,EACF,CAAC;AAED,MACE,OAAO,iBAAiB,SACxB,OAAO,KAAK,OAAO,gBAAgB,KAAK,EAAE,WAAW,GACrD;AACA,WAAO,OAAO,gBAAgB;AAAA,EAChC;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,EACF;AACF;AAEO,MAAM,6BAA4C,OAAO;AAAA,EAC9D;AACF,MAAgC;AAC9B,MAAI;AACJ,MAAI;AACF,UAAM,EAAE,KAAK,IAAI,MAAM,aAAI,gBAAgB,EAAE,KAAK,QAAQ,IAAI,EAAE,CAAC;AACjE,sBAAkB,SAAS,IAAI;AAAA,EACjC,QAAQ;AACN,WAAO,EAAE,QAAQ,QAAQ,QAAQ,2BAA2B;AAAA,EAC9D;AAEA,QAAM,uBAAuB,CAAC,kBAAkB;AAChD,QAAM,4BAA4B,CAAC,wBAAwB;AAC3D,QAAM,qBAAqB,CAAC,qBAAqB,qBAAqB;AAEtE,QAAM,CAAC,mBAAmB,wBAAwB,eAAe,IAC/D,MAAM,QAAQ,IAAI;AAAA,IAChB,WAAW,oBAAoB;AAAA,IAC/B,WAAW,yBAAyB;AAAA,IACpC,WAAW,kBAAkB;AAAA,EAC/B,CAAC;AAEH,QAAM,sBAAsB,kBAAkB;AAAA,IAC5C,CAAC,EAAE,MAAM,SAAS,MAAM;AACtB,YAAM,SAAS,cAAc,MAAM,QAAQ;AAC3C,aAAO,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;AAAA,IAC3C;AAAA,EACF;AAEA,QAAM,2BAA2B,uBAAuB;AAAA,IACtD,CAAC,EAAE,MAAM,SAAS,MAAM;AACtB,YAAM,SAAS,cAAc,MAAM,QAAQ;AAC3C,aAAO,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;AAAA,IAC3C;AAAA,EACF;AAEA,MAAI,oBAAoB,WAAW,GAAG;AACpC,WAAO,EAAE,QAAQ,QAAQ,QAAQ,qCAAqC;AAAA,EACxE;AAEA,QAAM,uBAAuB,oBAAoB;AAAA,IAC/C,CAAC,EAAE,MAAM,QAAQ,SAAS,OAAO;AAAA,MAC/B;AAAA,MACA;AAAA,MACA,GAAG,eAAe,EAAE,QAAQ,iBAAiB,KAAK,CAAC;AAAA,IACrD;AAAA,EACF;AAEA,QAAM,cAAc;AAAA,IAClB,GAAG,IAAI;AAAA,MACL,qBAAqB;AAAA,QAAQ,CAAC,EAAE,UAAU,KAAK,MAC7C,SAAS,QAAQ,CAAC,MAAM;AACtB,gBAAM,QAAQ;AACd,gBAAM,QAAQ,MAAM,KAAK,CAAC;AAC1B,cAAI,QAAQ,CAAC,MAAM,QAAW;AAC5B,mBAAO;AAAA,cACL,YAAAC,QAAK,KAAK,YAAAA,QAAK,QAAQ,IAAI,GAAG,MAAM,CAAC,EAAE,QAAQ,QAAQ,EAAE,CAAC;AAAA,YAC5D;AAAA,UACF;AAEA,6BAAI;AAAA,YACF,iCAAiC,IAAI,KAAK,CAAC;AAAA,UAC7C;AACA,iBAAO,CAAC;AAAA,QACV,CAAC;AAAA,MACH;AAAA,IACF;AAAA,EACF;AAEA,MAAI,CAAC,YAAY,QAAQ;AACvB,WAAO,EAAE,QAAQ,QAAQ,QAAQ,qBAAqB;AAAA,EACxD;AAGA,QAAM,sBAAsB,YAAY;AAAA,IAAI,CAAC,YAC3C,YAAAA,QAAK,KAAK,SAAS,cAAc;AAAA,EACnC;AAEA,QAAM,mBAAmB,MAAM,WAAW,mBAAmB;AAE7D,QAAM,yBAAyB,iBAAiB;AAAA,IAC9C,CAAC,EAAE,MAAM,SAAS,MAAM;AACtB,YAAM,SAAS,iBAAiB,QAAQ;AACxC,aAAO,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;AAAA,IAC3C;AAAA,EACF;AAEA,yBAAuB,QAAQ,CAAC,EAAE,QAAQ,KAAK,MAAM;AACnD,sBAAkB,EAAE,QAAQ,gBAAgB,CAAC;AAE7C,UAAM,uBAAuB,YAAAA,QAAK,KAAK,YAAAA,QAAK,QAAQ,IAAI,GAAG,eAAe;AAE1E,UAAM,mBAAmB,qBAAqB;AAAA,MAC5C,CAAC,aAAa,SAAS,SAAS;AAAA,IAClC;AAEA,QAAI,kBAAkB;AACpB,uBAAiB,OAAO,oBAAoB,CAAC;AAC7C,uBAAiB,OAAO,gBAAgB,YAAY;AAAA,IACtD,OAAO;AACL,yBAAI;AAAA,QACF,4DAA4D,IAAI,iBAAiB,oBAAoB;AAAA,MACvG;AAAA,IACF;AAEA,UAAM,4BAA4B,YAAAA,QAAK;AAAA,MACrC,YAAAA,QAAK,QAAQ,IAAI;AAAA,MACjB;AAAA,IACF;AAEA,UAAM,wBAAwB,yBAAyB;AAAA,MACrD,CAAC,aAAa,SAAS,SAAS;AAAA,IAClC;AAEA,QAAI,uBAAuB;AACzB,4BAAsB,OAAO,oBAAoB,CAAC;AAClD,4BAAsB,OAAO,gBAAgB,YAAY;AAAA,IAC3D,OAAO;AACL,yBAAI;AAAA,QACF,kEAAkE,IAAI,iBAAiB,yBAAyB;AAAA,MAClH;AAAA,IACF;AAAA,EACF,CAAC;AAED,QAAM,yBAAyB,gBAAgB,IAAI,CAAC,EAAE,MAAM,SAAS,MAAM;AACzE,UAAM,SAAS,wBAAwB,UAAU,WAAW;AAC5D,WAAO,EAAE,MAAM,UAAU,UAAU,OAAO;AAAA,EAC5C,CAAC;AAED,QAAM,wBAAwB,uBAAuB;AAAA,IACnD,CAAC,EAAE,QAAQ,SAAS,MAAM,aAAa;AAAA,EACzC;AAEA,QAAM,mCAAmC,yBAAyB;AAAA,IAChE,CAAC,EAAE,UAAU,OAAO,MAClB,KAAK,UAAU,QAAQ,MAAM,KAAK,UAAU,MAAM;AAAA,EACtD;AAEA,QAAM,yBAAyB,uBAAuB;AAAA,IACpD,CAAC,EAAE,UAAU,OAAO,MAClB,KAAK,UAAU,QAAQ,MAAM,KAAK,UAAU,MAAM;AAAA,EACtD;AAEA,QAAM,yBAAyB,qBAAqB;AAAA,IAClD,CAAC,EAAE,UAAU,OAAO,MAClB,KAAK,UAAU,QAAQ,MAAM,KAAK,UAAU,MAAM;AAAA,EACtD;AAEA,MACE,SAAS,WACR,0BACC,0BACA,oCACA,wBACF;AACA,WAAO,EAAE,QAAQ,QAAQ;AAAA,EAC3B;AAEA,MACE,CAAC,0BACD,CAAC,0BACD,CAAC,oCACD,CAAC,uBACD;AACA,WAAO,EAAE,QAAQ,QAAQ,QAAQ,sBAAsB;AAAA,EACzD;AAEA,QAAM,mBAAmB,QAAQ;AAAA,IAC/B;AAAA,MACE,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,IACL,EAAE,IAAI,OAAO,EAAE,MAAM,QAAQ,SAAS,MAAM;AAC1C,UAAI,KAAK,UAAU,QAAQ,MAAM,KAAK,UAAU,MAAM,GAAG;AACvD;AAAA,MACF;AACA,YAAM,kBAAkB,KAAK,UAAU,QAAQ,MAAM,CAAC;AACtD,YAAM,gBAAAF,QAAG,SAAS,UAAU,MAAM,eAAe;AAAA,IACnD,CAAC;AAAA,EACH;AAEA,QAAM,oBAAoB,QAAQ;AAAA,IAChC,uBAAuB,IAAI,OAAO,EAAE,MAAM,QAAQ,SAAS,MAAM;AAC/D,UAAI,aAAa,QAAQ;AACvB;AAAA,MACF;AACA,YAAM,gBAAAA,QAAG,SAAS,UAAU,MAAM,MAAM;AAAA,IAC1C,CAAC;AAAA,EACH;AAEA,QAAM,QAAQ,IAAI,CAAC,kBAAkB,iBAAiB,CAAC;AAEvD,SAAO,EAAE,QAAQ,QAAQ;AAC3B;AAEO,MAAM,0BAAyC,OAAO,WAAW;AACtE,MAAI;AACF,WAAO,MAAM,2BAA2B,MAAM;AAAA,EAChD,SAAS,KAAK;AACZ,uBAAI,KAAK,8DAA8D;AACvE,uBAAI,WAAO,qBAAQ,GAAG,CAAC;AACvB,WAAO,EAAE,QAAQ,QAAQ,QAAQ,kBAAkB;AAAA,EACrD;AACF;",
|
|
6
6
|
"names": ["fs", "ts", "path"]
|
|
7
7
|
}
|
|
@@ -3,6 +3,7 @@ export declare const hasSkubaDiveRegisterImportRegex: RegExp;
|
|
|
3
3
|
export declare const hasRelativeRegisterImportRegex: RegExp;
|
|
4
4
|
export declare const hasRelativeImportRegex: RegExp;
|
|
5
5
|
export declare const hasSrcImportRegex: RegExp;
|
|
6
|
+
export declare const hasSrcSideEffectImportRegex: RegExp;
|
|
6
7
|
export declare const hasImportRegex: RegExp;
|
|
7
8
|
export declare const hasJestMockRegex: RegExp;
|
|
8
9
|
export declare const isFileEmpty: (contents: string) => boolean;
|
|
@@ -34,6 +34,7 @@ __export(rewriteSrcImports_exports, {
|
|
|
34
34
|
hasRelativeRegisterImportRegex: () => hasRelativeRegisterImportRegex,
|
|
35
35
|
hasSkubaDiveRegisterImportRegex: () => hasSkubaDiveRegisterImportRegex,
|
|
36
36
|
hasSrcImportRegex: () => hasSrcImportRegex,
|
|
37
|
+
hasSrcSideEffectImportRegex: () => hasSrcSideEffectImportRegex,
|
|
37
38
|
isFileEmpty: () => isFileEmpty,
|
|
38
39
|
replaceSrcImport: () => replaceSrcImport,
|
|
39
40
|
replaceSrcImportWithConditionalRegisterRemoval: () => replaceSrcImportWithConditionalRegisterRemoval,
|
|
@@ -60,6 +61,7 @@ const hasSkubaDiveRegisterImportRegex = /import\s+['"](?:skuba-dive\/register)(?
|
|
|
60
61
|
const hasRelativeRegisterImportRegex = /import\s+['"](\.\.?\/.*?register)(?:\.js)?['"];?\s*/gm;
|
|
61
62
|
const hasRelativeImportRegex = /import\s+['"](\.\.?\/[^'"]*?)(?:\.js)?['"];?\s*/gm;
|
|
62
63
|
const hasSrcImportRegex = /import\s+(?:type\s+(?:\{[^}]*\}|\*\s+as\s+\w+)|\{[^}]*\}|\*\s+as\s+\w+|\w+(?:\s*,\s*\{[^}]*\})?)\s+from\s+['"]src\/[^'"]*['"]/gm;
|
|
64
|
+
const hasSrcSideEffectImportRegex = /import\s+['"]src\/[^'"]*['"];?\s*/gm;
|
|
63
65
|
const hasImportRegex = /import\(\s*["']src\/[^'"]*["']\s*\)/gm;
|
|
64
66
|
const hasJestMockRegex = /jest\.(mock|doMock)\(\s*["']src\/[^'"]*["']/gm;
|
|
65
67
|
const multiLineCommentRegex = /\/\*[\s\S]*?\*\//g;
|
|
@@ -87,6 +89,7 @@ const replaceSrcImport = (contents) => {
|
|
|
87
89
|
const combinedSrcRegex = new RegExp(
|
|
88
90
|
[
|
|
89
91
|
hasSrcImportRegex.source,
|
|
92
|
+
hasSrcSideEffectImportRegex.source,
|
|
90
93
|
hasImportRegex.source,
|
|
91
94
|
hasJestMockRegex.source
|
|
92
95
|
].join("|"),
|
|
@@ -102,6 +105,7 @@ const replaceSrcImportWithConditionalRegisterRemoval = (contents, shouldRemoveRe
|
|
|
102
105
|
const combinedSrcRegex = new RegExp(
|
|
103
106
|
[
|
|
104
107
|
hasSrcImportRegex.source,
|
|
108
|
+
hasSrcSideEffectImportRegex.source,
|
|
105
109
|
hasImportRegex.source,
|
|
106
110
|
hasJestMockRegex.source
|
|
107
111
|
].join("|"),
|
|
@@ -120,6 +124,7 @@ const replaceSrcImportWithSelectiveRegisterRemoval = (contents, file, deletionSe
|
|
|
120
124
|
const combinedSrcRegex = new RegExp(
|
|
121
125
|
[
|
|
122
126
|
hasSrcImportRegex.source,
|
|
127
|
+
hasSrcSideEffectImportRegex.source,
|
|
123
128
|
hasImportRegex.source,
|
|
124
129
|
hasJestMockRegex.source
|
|
125
130
|
].join("|"),
|
|
@@ -159,6 +164,7 @@ const tryRewriteSrcImports = async ({
|
|
|
159
164
|
new RegExp(
|
|
160
165
|
[
|
|
161
166
|
hasSrcImportRegex.source,
|
|
167
|
+
hasSrcSideEffectImportRegex.source,
|
|
162
168
|
hasImportRegex.source,
|
|
163
169
|
hasJestMockRegex.source
|
|
164
170
|
].join("|"),
|
|
@@ -215,6 +221,7 @@ const rewriteSrcImports = async (config) => {
|
|
|
215
221
|
hasRelativeRegisterImportRegex,
|
|
216
222
|
hasSkubaDiveRegisterImportRegex,
|
|
217
223
|
hasSrcImportRegex,
|
|
224
|
+
hasSrcSideEffectImportRegex,
|
|
218
225
|
isFileEmpty,
|
|
219
226
|
replaceSrcImport,
|
|
220
227
|
replaceSrcImportWithConditionalRegisterRemoval,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../../../src/cli/lint/internalLints/upgrade/patches/12.4.1/rewriteSrcImports.ts"],
|
|
4
|
-
"sourcesContent": ["import path from 'path';\nimport { inspect } from 'util';\n\nimport { glob } from 'fast-glob';\nimport fs from 'fs-extra';\n\nimport { log } from '../../../../../../utils/logging.js';\nimport type { PatchFunction, PatchReturnType } from '../../index.js';\n\nconst fetchFiles = async (files: string[]) =>\n Promise.all(\n files.map(async (file) => {\n const contents = await fs.promises.readFile(file, 'utf8');\n\n return {\n file,\n contents,\n };\n }),\n );\n\nexport const hasSkubaDiveRegisterImportRegex =\n /import\\s+['\"](?:skuba-dive\\/register)(?:\\.js)?['\"];?\\s*/gm;\n\nexport const hasRelativeRegisterImportRegex =\n /import\\s+['\"](\\.\\.?\\/.*?register)(?:\\.js)?['\"];?\\s*/gm;\n\nexport const hasRelativeImportRegex =\n /import\\s+['\"](\\.\\.?\\/[^'\"]*?)(?:\\.js)?['\"];?\\s*/gm;\n\nexport const hasSrcImportRegex =\n /import\\s+(?:type\\s+(?:\\{[^}]*\\}|\\*\\s+as\\s+\\w+)|\\{[^}]*\\}|\\*\\s+as\\s+\\w+|\\w+(?:\\s*,\\s*\\{[^}]*\\})?)\\s+from\\s+['\"]src\\/[^'\"]*['\"]/gm;\n\nexport const hasImportRegex = /import\\(\\s*[\"']src\\/[^'\"]*[\"']\\s*\\)/gm;\n\nexport const hasJestMockRegex = /jest\\.(mock|doMock)\\(\\s*[\"']src\\/[^'\"]*[\"']/gm;\n\nconst multiLineCommentRegex = /\\/\\*[\\s\\S]*?\\*\\//g;\n\nconst singleLineCommentRegex = /\\/\\/.*$/gm;\n\nconst whitespaceRegex = /\\s/g;\n\nconst removeSkubaDiveRegisterImport = (contents: string) =>\n contents.replace(hasSkubaDiveRegisterImportRegex, '');\n\nconst removeRelativeRegisterImport = (contents: string) =>\n contents.replace(hasRelativeRegisterImportRegex, '');\n\nconst removeSelectiveRelativeImports = (\n contents: string,\n file: string,\n deletionSet: Set<string>,\n): string =>\n contents.replace(hasRelativeImportRegex, (match, relativePath: string) => {\n if (!relativePath) {\n return match;\n }\n\n const fileDir = path.dirname(file);\n const resolvedPath = path.resolve(fileDir, relativePath);\n\n if (path.extname(relativePath)) {\n return deletionSet.has(resolvedPath) ? '' : match;\n }\n\n const possiblePaths = [`${resolvedPath}.ts`, `${resolvedPath}.js`];\n const shouldRemove = possiblePaths.some((possiblePath) =>\n deletionSet.has(possiblePath),\n );\n\n return shouldRemove ? '' : match;\n });\n\nexport const isFileEmpty = (contents: string): boolean =>\n contents\n .replace(multiLineCommentRegex, '')\n .replace(singleLineCommentRegex, '')\n .replace(whitespaceRegex, '').length === 0;\n\nexport const replaceSrcImport = (contents: string) => {\n const combinedSrcRegex = new RegExp(\n [\n hasSrcImportRegex.source,\n hasImportRegex.source,\n hasJestMockRegex.source,\n ].join('|'),\n 'gm',\n );\n\n const withReplacedSrcImports = contents.replace(combinedSrcRegex, (match) =>\n match.replace(/(['\"])src\\//g, '$1#src/'),\n );\n\n return removeSkubaDiveRegisterImport(withReplacedSrcImports);\n};\n\nexport const replaceSrcImportWithConditionalRegisterRemoval = (\n contents: string,\n shouldRemoveRelativeRegister: boolean,\n) => {\n const combinedSrcRegex = new RegExp(\n [\n hasSrcImportRegex.source,\n hasImportRegex.source,\n hasJestMockRegex.source,\n ].join('|'),\n 'gm',\n );\n\n const withReplacedSrcImports = contents.replace(combinedSrcRegex, (match) =>\n match.replace(/(['\"])src\\//g, '$1#src/'),\n );\n\n const withoutSkubaDive = removeSkubaDiveRegisterImport(\n withReplacedSrcImports,\n );\n\n return shouldRemoveRelativeRegister\n ? removeRelativeRegisterImport(withoutSkubaDive)\n : withoutSkubaDive;\n};\n\nexport const replaceSrcImportWithSelectiveRegisterRemoval = (\n contents: string,\n file: string,\n deletionSet: Set<string>,\n) => {\n const combinedSrcRegex = new RegExp(\n [\n hasSrcImportRegex.source,\n hasImportRegex.source,\n hasJestMockRegex.source,\n ].join('|'),\n 'gm',\n );\n\n const withReplacedSrcImports = contents.replace(combinedSrcRegex, (match) =>\n match.replace(/(['\"])src\\//g, '$1#src/'),\n );\n\n const withoutSkubaDive = removeSkubaDiveRegisterImport(\n withReplacedSrcImports,\n );\n\n return removeSelectiveRelativeImports(withoutSkubaDive, file, deletionSet);\n};\n\nexport const tryRewriteSrcImports: PatchFunction = async ({\n mode,\n}): Promise<PatchReturnType> => {\n const tsFileNames = await glob(['**/*.ts', '**/*.test.ts'], {\n ignore: [\n '**/.git',\n '**/node_modules',\n 'src/cli/lint/internalLints/upgrade/patches/**/*',\n ],\n });\n\n if (!tsFileNames.length) {\n return {\n result: 'skip',\n reason: 'no .ts or test.ts files found',\n };\n }\n\n const tsFiles = await fetchFiles(tsFileNames);\n\n const filesWithSkubaDiveRemoved = tsFiles.map(({ file, contents }) => ({\n file,\n before: contents,\n afterSkubaDiveRemoval: removeSkubaDiveRegisterImport(\n contents.replace(\n new RegExp(\n [\n hasSrcImportRegex.source,\n hasImportRegex.source,\n hasJestMockRegex.source,\n ].join('|'),\n 'gm',\n ),\n (match) => match.replace(/(['\"])src\\//g, '$1#src/'),\n ),\n ),\n }));\n\n const filesToDelete = new Set(\n filesWithSkubaDiveRemoved\n .filter(({ afterSkubaDiveRemoval }) => isFileEmpty(afterSkubaDiveRemoval))\n .map(({ file }) => path.resolve(file)),\n );\n\n const mapped = tsFiles.map(({ file, contents }) => ({\n file,\n before: contents,\n after: replaceSrcImportWithSelectiveRegisterRemoval(\n contents,\n file,\n filesToDelete,\n ),\n }));\n\n if (mode === 'lint') {\n return {\n result: 'apply',\n };\n }\n\n await Promise.all(\n mapped.map(async ({ file, before, after }) => {\n if (isFileEmpty(after)) {\n await fs.promises.unlink(file);\n return;\n }\n\n if (before !== after) {\n await fs.promises.writeFile(file, after);\n }\n }),\n );\n\n return { result: 'apply' };\n};\n\nexport const rewriteSrcImports: PatchFunction = async (config) => {\n try {\n return await tryRewriteSrcImports(config);\n } catch (err) {\n log.warn('Failed to rewrite src imports to #src');\n log.subtle(inspect(err));\n return { result: 'skip', reason: 'due to an error' };\n }\n};\n"],
|
|
5
|
-
"mappings": "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",
|
|
4
|
+
"sourcesContent": ["import path from 'path';\nimport { inspect } from 'util';\n\nimport { glob } from 'fast-glob';\nimport fs from 'fs-extra';\n\nimport { log } from '../../../../../../utils/logging.js';\nimport type { PatchFunction, PatchReturnType } from '../../index.js';\n\nconst fetchFiles = async (files: string[]) =>\n Promise.all(\n files.map(async (file) => {\n const contents = await fs.promises.readFile(file, 'utf8');\n\n return {\n file,\n contents,\n };\n }),\n );\n\nexport const hasSkubaDiveRegisterImportRegex =\n /import\\s+['\"](?:skuba-dive\\/register)(?:\\.js)?['\"];?\\s*/gm;\n\nexport const hasRelativeRegisterImportRegex =\n /import\\s+['\"](\\.\\.?\\/.*?register)(?:\\.js)?['\"];?\\s*/gm;\n\nexport const hasRelativeImportRegex =\n /import\\s+['\"](\\.\\.?\\/[^'\"]*?)(?:\\.js)?['\"];?\\s*/gm;\n\nexport const hasSrcImportRegex =\n /import\\s+(?:type\\s+(?:\\{[^}]*\\}|\\*\\s+as\\s+\\w+)|\\{[^}]*\\}|\\*\\s+as\\s+\\w+|\\w+(?:\\s*,\\s*\\{[^}]*\\})?)\\s+from\\s+['\"]src\\/[^'\"]*['\"]/gm;\n\nexport const hasSrcSideEffectImportRegex =\n /import\\s+['\"]src\\/[^'\"]*['\"];?\\s*/gm;\n\nexport const hasImportRegex = /import\\(\\s*[\"']src\\/[^'\"]*[\"']\\s*\\)/gm;\n\nexport const hasJestMockRegex = /jest\\.(mock|doMock)\\(\\s*[\"']src\\/[^'\"]*[\"']/gm;\n\nconst multiLineCommentRegex = /\\/\\*[\\s\\S]*?\\*\\//g;\n\nconst singleLineCommentRegex = /\\/\\/.*$/gm;\n\nconst whitespaceRegex = /\\s/g;\n\nconst removeSkubaDiveRegisterImport = (contents: string) =>\n contents.replace(hasSkubaDiveRegisterImportRegex, '');\n\nconst removeRelativeRegisterImport = (contents: string) =>\n contents.replace(hasRelativeRegisterImportRegex, '');\n\nconst removeSelectiveRelativeImports = (\n contents: string,\n file: string,\n deletionSet: Set<string>,\n): string =>\n contents.replace(hasRelativeImportRegex, (match, relativePath: string) => {\n if (!relativePath) {\n return match;\n }\n\n const fileDir = path.dirname(file);\n const resolvedPath = path.resolve(fileDir, relativePath);\n\n if (path.extname(relativePath)) {\n return deletionSet.has(resolvedPath) ? '' : match;\n }\n\n const possiblePaths = [`${resolvedPath}.ts`, `${resolvedPath}.js`];\n const shouldRemove = possiblePaths.some((possiblePath) =>\n deletionSet.has(possiblePath),\n );\n\n return shouldRemove ? '' : match;\n });\n\nexport const isFileEmpty = (contents: string): boolean =>\n contents\n .replace(multiLineCommentRegex, '')\n .replace(singleLineCommentRegex, '')\n .replace(whitespaceRegex, '').length === 0;\n\nexport const replaceSrcImport = (contents: string) => {\n const combinedSrcRegex = new RegExp(\n [\n hasSrcImportRegex.source,\n hasSrcSideEffectImportRegex.source,\n hasImportRegex.source,\n hasJestMockRegex.source,\n ].join('|'),\n 'gm',\n );\n\n const withReplacedSrcImports = contents.replace(combinedSrcRegex, (match) =>\n match.replace(/(['\"])src\\//g, '$1#src/'),\n );\n\n return removeSkubaDiveRegisterImport(withReplacedSrcImports);\n};\n\nexport const replaceSrcImportWithConditionalRegisterRemoval = (\n contents: string,\n shouldRemoveRelativeRegister: boolean,\n) => {\n const combinedSrcRegex = new RegExp(\n [\n hasSrcImportRegex.source,\n hasSrcSideEffectImportRegex.source,\n hasImportRegex.source,\n hasJestMockRegex.source,\n ].join('|'),\n 'gm',\n );\n\n const withReplacedSrcImports = contents.replace(combinedSrcRegex, (match) =>\n match.replace(/(['\"])src\\//g, '$1#src/'),\n );\n\n const withoutSkubaDive = removeSkubaDiveRegisterImport(\n withReplacedSrcImports,\n );\n\n return shouldRemoveRelativeRegister\n ? removeRelativeRegisterImport(withoutSkubaDive)\n : withoutSkubaDive;\n};\n\nexport const replaceSrcImportWithSelectiveRegisterRemoval = (\n contents: string,\n file: string,\n deletionSet: Set<string>,\n) => {\n const combinedSrcRegex = new RegExp(\n [\n hasSrcImportRegex.source,\n hasSrcSideEffectImportRegex.source,\n hasImportRegex.source,\n hasJestMockRegex.source,\n ].join('|'),\n 'gm',\n );\n\n const withReplacedSrcImports = contents.replace(combinedSrcRegex, (match) =>\n match.replace(/(['\"])src\\//g, '$1#src/'),\n );\n\n const withoutSkubaDive = removeSkubaDiveRegisterImport(\n withReplacedSrcImports,\n );\n\n return removeSelectiveRelativeImports(withoutSkubaDive, file, deletionSet);\n};\n\nexport const tryRewriteSrcImports: PatchFunction = async ({\n mode,\n}): Promise<PatchReturnType> => {\n const tsFileNames = await glob(['**/*.ts', '**/*.test.ts'], {\n ignore: [\n '**/.git',\n '**/node_modules',\n 'src/cli/lint/internalLints/upgrade/patches/**/*',\n ],\n });\n\n if (!tsFileNames.length) {\n return {\n result: 'skip',\n reason: 'no .ts or test.ts files found',\n };\n }\n\n const tsFiles = await fetchFiles(tsFileNames);\n\n const filesWithSkubaDiveRemoved = tsFiles.map(({ file, contents }) => ({\n file,\n before: contents,\n afterSkubaDiveRemoval: removeSkubaDiveRegisterImport(\n contents.replace(\n new RegExp(\n [\n hasSrcImportRegex.source,\n hasSrcSideEffectImportRegex.source,\n hasImportRegex.source,\n hasJestMockRegex.source,\n ].join('|'),\n 'gm',\n ),\n (match) => match.replace(/(['\"])src\\//g, '$1#src/'),\n ),\n ),\n }));\n\n const filesToDelete = new Set(\n filesWithSkubaDiveRemoved\n .filter(({ afterSkubaDiveRemoval }) => isFileEmpty(afterSkubaDiveRemoval))\n .map(({ file }) => path.resolve(file)),\n );\n\n const mapped = tsFiles.map(({ file, contents }) => ({\n file,\n before: contents,\n after: replaceSrcImportWithSelectiveRegisterRemoval(\n contents,\n file,\n filesToDelete,\n ),\n }));\n\n if (mode === 'lint') {\n return {\n result: 'apply',\n };\n }\n\n await Promise.all(\n mapped.map(async ({ file, before, after }) => {\n if (isFileEmpty(after)) {\n await fs.promises.unlink(file);\n return;\n }\n\n if (before !== after) {\n await fs.promises.writeFile(file, after);\n }\n }),\n );\n\n return { result: 'apply' };\n};\n\nexport const rewriteSrcImports: PatchFunction = async (config) => {\n try {\n return await tryRewriteSrcImports(config);\n } catch (err) {\n log.warn('Failed to rewrite src imports to #src');\n log.subtle(inspect(err));\n return { result: 'skip', reason: 'due to an error' };\n }\n};\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["fs", "path"]
|
|
7
7
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "skuba",
|
|
3
|
-
"version": "13.0.1-handle-extra-cases-
|
|
3
|
+
"version": "13.0.1-handle-extra-cases-20251015062657",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "SEEK development toolkit for backend applications and packages",
|
|
6
6
|
"homepage": "https://github.com/seek-oss/skuba#readme",
|