From 109f765087c71bf1e41564310c0fff6372d165e6 Mon Sep 17 00:00:00 2001 From: HubertBer Date: Mon, 29 Sep 2025 10:06:37 +0200 Subject: [PATCH 1/3] refactor 1 --- apps/bare-expo/android/gradle.properties | 3 + apps/bare-expo/metro.config.js | 11 +- .../localModulesExamples/TestView.kt | 1 - .../localModulesExamples/TestView.swift | 2 +- .../@expo/cli/src/localModules/generation.ts | 130 ++++++++---------- .../server/metro/MetroBundlerDevServer.ts | 10 +- .../@expo/config-types/build/ExpoConfig.d.ts | 3 + packages/@expo/config-types/src/ExpoConfig.ts | 3 + .../metro-config/build/ExpoMetroConfig.js | 8 +- .../metro-config/build/ExpoMetroConfig.js.map | 2 +- .../@expo/metro-config/src/ExpoMetroConfig.ts | 8 +- .../mirrorKotlinLocalModulesCommand.js | 15 +- .../mirrorKotlinLocalModulesCommand.js.map | 2 +- .../build/localModules/androidLocalModules.js | 7 +- .../localModules/androidLocalModules.js.map | 2 +- .../build/localModules/localModules.js | 12 +- .../build/localModules/localModules.js.map | 2 +- .../e2e/__tests__/monorepo-test.ts | 4 +- .../scripts/ios/autolinking_manager.rb | 4 +- .../mirrorKotlinLocalModulesCommand.ts | 23 ++-- .../src/localModules/androidLocalModules.ts | 9 +- .../src/localModules/localModules.ts | 13 +- 22 files changed, 126 insertions(+), 148 deletions(-) diff --git a/apps/bare-expo/android/gradle.properties b/apps/bare-expo/android/gradle.properties index ee1daffcbce8a3..14eb90b3a8c5e1 100644 --- a/apps/bare-expo/android/gradle.properties +++ b/apps/bare-expo/android/gradle.properties @@ -65,5 +65,8 @@ EXPO_ALLOW_GLIDE_LOGS=true android.enableMinifyInReleaseBuilds=true +# Enable support for local modules in Expo CLI and Expo Modules Autolinking. expo.localModules.enabled=true + +# List of directories watched for local modules. expo.localModules.watchedDirs=["../native-component-list/src/screens/LocalModules/localModulesExamples"] diff --git a/apps/bare-expo/metro.config.js b/apps/bare-expo/metro.config.js index 794eca9896020d..52169c12eec992 100644 --- a/apps/bare-expo/metro.config.js +++ b/apps/bare-expo/metro.config.js @@ -37,7 +37,7 @@ function findUpTSConfig(cwd) { return findUpTSConfig(parent); } -function findUpTSProjectRootOrAssert(dir) { +function findUpTSProjectRootOrThrow(dir) { const tsProjectRoot = findUpTSConfig(dir); if (!tsProjectRoot) { throw new Error('Local modules watched dir needs to be inside a TS project with tsconfig.json'); @@ -64,15 +64,15 @@ config.resolver.resolveRequest = (context, moduleName, platform) => { localModuleFileExtension = '.view.js'; } if (localModuleFileExtension) { - const tsProjectRoot = findUpTSProjectRootOrAssert(path.dirname(context.originModulePath)); - const relativePathToOriginModule = path.relative( + const tsProjectRoot = findUpTSProjectRootOrThrow(path.dirname(context.originModulePath)); + const modulePathRelativeToTSRoot = path.relative( tsProjectRoot, fs.realpathSync(path.dirname(context.originModulePath)) ); const modulePath = path.resolve( localModulesModulesPath, - relativePathToOriginModule, + modulePathRelativeToTSRoot, moduleName.substring(0, moduleName.lastIndexOf('.')) + localModuleFileExtension ); @@ -82,8 +82,7 @@ config.resolver.resolveRequest = (context, moduleName, platform) => { }; } - const resolution = context.resolveRequest(context, moduleName, platform); - return resolution; + return context.resolveRequest(context, moduleName, platform); }; // When testing on MacOS we need to include the `react-native-macos/Libraries/Core/InitializeCore` as prepended global module diff --git a/apps/native-component-list/src/screens/LocalModules/localModulesExamples/TestView.kt b/apps/native-component-list/src/screens/LocalModules/localModulesExamples/TestView.kt index 4cc0d8635a96cd..9c8e99ecc8d25c 100644 --- a/apps/native-component-list/src/screens/LocalModules/localModulesExamples/TestView.kt +++ b/apps/native-component-list/src/screens/LocalModules/localModulesExamples/TestView.kt @@ -1,4 +1,3 @@ - package localModulesExamples import expo.modules.kotlin.modules.Module diff --git a/apps/native-component-list/src/screens/LocalModules/localModulesExamples/TestView.swift b/apps/native-component-list/src/screens/LocalModules/localModulesExamples/TestView.swift index 23c2e65f05321d..c2c83896da738c 100644 --- a/apps/native-component-list/src/screens/LocalModules/localModulesExamples/TestView.swift +++ b/apps/native-component-list/src/screens/LocalModules/localModulesExamples/TestView.swift @@ -31,7 +31,7 @@ class ExpoWebView: ExpoView, WKNavigationDelegate { webView.frame = bounds } - func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) { + func webView(_ webView: WKWebView, _: WKNavigation) { if let url = webView.url { onLoad([ "url": url.absoluteString diff --git a/packages/@expo/cli/src/localModules/generation.ts b/packages/@expo/cli/src/localModules/generation.ts index d328a223674f90..fe04c3f7846e8a 100644 --- a/packages/@expo/cli/src/localModules/generation.ts +++ b/packages/@expo/cli/src/localModules/generation.ts @@ -2,7 +2,6 @@ import { getConfig } from '@expo/config'; import { getPbxproj } from '@expo/config-plugins/build/ios/utils/Xcodeproj'; import Server from '@expo/metro/metro/Server'; import type MetroServer from '@expo/metro/metro/Server'; -import { assert as consoleAssert } from 'console'; import fs from 'fs'; import path from 'path'; @@ -26,7 +25,7 @@ function findUpTSConfig(cwd: string): string | null { return findUpTSConfig(parent); } -function findUpTSProjectRootOrAssert(dir: string): string { +function findUpTSProjectRootOrThrow(dir: string): string { const tsProjectRoot = findUpTSConfig(dir); if (!tsProjectRoot) { throw new Error('Local modules watched dir needs to be inside a TS project with tsconfig.json'); @@ -71,7 +70,7 @@ function getMirrorDirectories(projectRoot: string): { }; } -function createFreshMirrorDirectories(projectRoot: string) { +function createFreshMirrorDirectories(projectRoot: string): void { const { localModulesModulesPath, localModulesTypesPath } = getMirrorDirectories(projectRoot); if (fs.existsSync(localModulesModulesPath)) { @@ -84,7 +83,7 @@ function createFreshMirrorDirectories(projectRoot: string) { fs.mkdirSync(localModulesTypesPath, { recursive: true }); } -function trimExtension(fileName: string) { +function trimExtension(fileName: string): string { return fileName.substring(0, fileName.lastIndexOf('.')); } @@ -92,18 +91,18 @@ function typesAndLocalModulePathsForFile( projectRoot: string, watchedDirRoot: string, absoluteFilePath: string -) { - consoleAssert(!!absoluteFilePath); - consoleAssert(path.isAbsolute(absoluteFilePath)); +): { + moduleTypesFilePath: string; + viewTypesFilePath: string; + viewExportPath: string; + moduleExportPath: string; + moduleName: string; +} { const { localModulesModulesPath, localModulesTypesPath } = getMirrorDirectories(projectRoot); - const splitPath = absoluteFilePath.split('/'); - const fileName = splitPath.at(-1); - if (!fileName) { - throw new Error('Invalid absoluteFilePath provided.'); - } + const fileName = path.basename(absoluteFilePath); const moduleName = trimExtension(fileName); - const watchedDirTSProjectRoot = findUpTSProjectRootOrAssert(watchedDirRoot); + const watchedDirTSProjectRoot = findUpTSProjectRootOrThrow(watchedDirRoot); const filePathRelativeToTSProjectRoot = path.relative(watchedDirTSProjectRoot, absoluteFilePath); const filePathRelativeToTSProjectRootWithoutExtension = trimExtension( filePathRelativeToTSProjectRoot @@ -117,14 +116,14 @@ function typesAndLocalModulePathsForFile( localModulesTypesPath, filePathRelativeToTSProjectRootWithoutExtension + '.view.d.ts' ); - const viewExportPath = path.resolve( - localModulesModulesPath, - filePathRelativeToTSProjectRootWithoutExtension + '.view.js' - ); const moduleExportPath = path.resolve( localModulesModulesPath, filePathRelativeToTSProjectRootWithoutExtension + '.module.js' ); + const viewExportPath = path.resolve( + localModulesModulesPath, + filePathRelativeToTSProjectRootWithoutExtension + '.view.js' + ); return { moduleTypesFilePath, viewTypesFilePath, @@ -148,7 +147,7 @@ function fileWatchedWithAnyNativeExtension( return false; } -export function updateXCodeProject(projectRoot: string) { +export function updateXCodeProject(projectRoot: string): void { const pbxProject = getPbxproj(projectRoot); const mainGroupUUID = pbxProject.getFirstProject().firstProject.mainGroup; const mainTargetUUID = pbxProject.getFirstProject().firstProject.targets[0].value; @@ -212,7 +211,7 @@ export function updateXCodeProject(projectRoot: string) { fs.writeFileSync(pbxProject.filepath, pbxProject.writeSync()); } -function fileWatchedDirAncestor(projectRoot: string, filePathAbsolute: string): string | null { +function getWatchedDirAncestor(projectRoot: string, filePathAbsolute: string): string | null { const watchedDirs = getConfig(projectRoot).exp.localModules?.watchedDirs ?? []; const realRoot = fs.realpathSync(projectRoot); for (const dir of watchedDirs) { @@ -229,7 +228,7 @@ function onSourceFileCreated( watchedDirRoot: string, absoluteFilePath: string, filesWatched?: Set -) { +): void { const { moduleTypesFilePath, viewTypesFilePath, viewExportPath, moduleExportPath, moduleName } = typesAndLocalModulePathsForFile(projectRoot, watchedDirRoot, absoluteFilePath); @@ -265,7 +264,10 @@ export default _default` fs.writeFileSync(moduleTypesFilePath, 'const _default: any\nexport default _default'); } -async function generateMirrorDirectories(projectRoot: string, filesWatched?: Set) { +async function generateMirrorDirectories( + projectRoot: string, + filesWatched?: Set +): Promise { createFreshMirrorDirectories(projectRoot); const generateExportsAndTypesForDirectory = async ( @@ -305,22 +307,16 @@ async function generateMirrorDirectories(projectRoot: string, filesWatched?: Set function excludePathsGlobs(projectRoot: string): string[] { return [ path.resolve(projectRoot, '.expo'), - path.resolve(projectRoot, '.expo', './**'), path.resolve(projectRoot, '.expo', './**/*'), path.resolve(projectRoot, 'node_modules'), - path.resolve(projectRoot, 'node_modules', './**'), path.resolve(projectRoot, 'node_modules', './**/*'), path.resolve(projectRoot, 'localModules'), - path.resolve(projectRoot, 'localModules', './**'), path.resolve(projectRoot, 'localModules', './**/*'), path.resolve(projectRoot, 'android'), - path.resolve(projectRoot, 'android', './**'), path.resolve(projectRoot, 'android', './**/*'), path.resolve(projectRoot, 'ios'), - path.resolve(projectRoot, 'ios', './**'), path.resolve(projectRoot, 'ios', './**/*'), path.resolve(projectRoot, 'modules'), - path.resolve(projectRoot, 'modules', './**'), path.resolve(projectRoot, 'modules', './**/*'), ]; } @@ -328,9 +324,8 @@ function excludePathsGlobs(projectRoot: string): string[] { export async function startModuleGenerationAsync({ projectRoot, metro, -}: ModuleGenerationArguments) { +}: ModuleGenerationArguments): Promise { const dotExpoDir = ensureDotExpoProjectDirectoryInitialized(projectRoot); - const { exp } = getConfig(projectRoot); const filesWatched = new Set(); const isFileExcluded = (absolutePath: string) => { @@ -370,55 +365,40 @@ export async function startModuleGenerationAsync({ } }; - const metroWatchKotlinAndSwiftFiles = async ({ - projectRoot, - metro, - eventTypes = ['add', 'delete'], - }: { - metro: MetroServer | null; - projectRoot: string; - eventTypes?: string[]; - }) => { - const watcher = metro?.getBundler().getBundler().getWatcher(); - - const isWatchedFileEvent = (event: Event, watchedDirAncestor: string | null): boolean => { - return ( - event.metadata?.type !== 'd' && - isValidLocalModuleFileName(path.basename(event.filePath)) && - !isFileExcluded(event.filePath) && - !!watchedDirAncestor - ); - }; + const watcher = metro?.getBundler().getBundler().getWatcher(); + const eventTypes = ['add', 'delete', 'change']; + + const isWatchedFileEvent = (event: Event, watchedDirAncestor: string | null): boolean => { + return ( + event.metadata?.type !== 'd' && + isValidLocalModuleFileName(path.basename(event.filePath)) && + !isFileExcluded(event.filePath) && + !!watchedDirAncestor + ); + }; - const listener = async ({ eventsQueue }: { eventsQueue: EventsQueue }) => { - for (const event of eventsQueue) { - const watchedDirAncestor = fileWatchedDirAncestor( - projectRoot, - fs.realpathSync(event.filePath) - ); - if ( - eventTypes.includes(event.type) && - isWatchedFileEvent(event, watchedDirAncestor) && - !!watchedDirAncestor - ) { - const { filePath } = event; - if (event.type === 'add') { - onSourceFileCreated(projectRoot, filePath, watchedDirAncestor, filesWatched); - } else if (event.type === 'delete') { - onSourceFileRemoved(filePath, watchedDirAncestor); - } + const listener = async ({ eventsQueue }: { eventsQueue: EventsQueue }) => { + for (const event of eventsQueue) { + const watchedDirAncestor = getWatchedDirAncestor( + projectRoot, + fs.realpathSync(event.filePath) + ); + if ( + eventTypes.includes(event.type) && + isWatchedFileEvent(event, watchedDirAncestor) && + !!watchedDirAncestor + ) { + const { filePath } = event; + if (event.type === 'add') { + onSourceFileCreated(projectRoot, filePath, watchedDirAncestor, filesWatched); + } else if (event.type === 'delete') { + onSourceFileRemoved(filePath, watchedDirAncestor); } } - }; - - watcher?.addListener('change', listener); - - await generateMirrorDirectories(projectRoot, filesWatched); + } }; - metroWatchKotlinAndSwiftFiles({ - projectRoot, - metro, - eventTypes: ['add', 'delete', 'change'], - }); + watcher?.addListener('change', listener); + + await generateMirrorDirectories(projectRoot, filesWatched); } diff --git a/packages/@expo/cli/src/start/server/metro/MetroBundlerDevServer.ts b/packages/@expo/cli/src/start/server/metro/MetroBundlerDevServer.ts index ff87c39d37b67c..a150cb534edb8e 100644 --- a/packages/@expo/cli/src/start/server/metro/MetroBundlerDevServer.ts +++ b/packages/@expo/cli/src/start/server/metro/MetroBundlerDevServer.ts @@ -1388,9 +1388,9 @@ export class MetroBundlerDevServer extends BundlerDevServer { }); } - public async startTypeScriptServices() { + public async startTypeScriptServices(): Promise { const { projectRoot, metro } = this; - startTypescriptTypeGenerationAsync({ + const startTypescriptTypeGenerationPromise = startTypescriptTypeGenerationAsync({ server: this.instance?.server, metro: this.metro, projectRoot: this.projectRoot, @@ -1398,8 +1398,12 @@ export class MetroBundlerDevServer extends BundlerDevServer { const { exp } = getConfig(this.projectRoot); if (exp.experiments?.localModules === true) { - startModuleGenerationAsync({ projectRoot, metro }); + return Promise.all([ + startTypescriptTypeGenerationPromise, + startModuleGenerationAsync({ projectRoot, metro }), + ]); } + return startTypescriptTypeGenerationPromise; } protected getConfigModuleIds(): string[] { diff --git a/packages/@expo/config-types/build/ExpoConfig.d.ts b/packages/@expo/config-types/build/ExpoConfig.d.ts index c953dd6ab892b6..db19891402e7ee 100644 --- a/packages/@expo/config-types/build/ExpoConfig.d.ts +++ b/packages/@expo/config-types/build/ExpoConfig.d.ts @@ -332,6 +332,9 @@ export interface ExpoConfig { * Configuration for local modules */ localModules?: { + /** + * List of directories watched for local modules. + */ watchedDirs: [string]; }; } diff --git a/packages/@expo/config-types/src/ExpoConfig.ts b/packages/@expo/config-types/src/ExpoConfig.ts index 12520895be1477..7f179e539bad5e 100644 --- a/packages/@expo/config-types/src/ExpoConfig.ts +++ b/packages/@expo/config-types/src/ExpoConfig.ts @@ -341,6 +341,9 @@ export interface ExpoConfig { * Configuration for local modules */ localModules?: { + /** + * List of directories watched for local modules. + */ watchedDirs: [string]; }; } diff --git a/packages/@expo/metro-config/build/ExpoMetroConfig.js b/packages/@expo/metro-config/build/ExpoMetroConfig.js index d3d06c1d1a9f32..b7e3d1ae83c761 100644 --- a/packages/@expo/metro-config/build/ExpoMetroConfig.js +++ b/packages/@expo/metro-config/build/ExpoMetroConfig.js @@ -96,7 +96,7 @@ function findUpTSConfig(cwd) { return null; return findUpTSConfig(parent); } -function findUpTSProjectRootOrAssert(dir) { +function findUpTSProjectRootOrThrow(dir) { const tsProjectRoot = findUpTSConfig(dir); if (!tsProjectRoot) { throw new Error('Local modules watched dir needs to be inside a TS project with tsconfig.json'); @@ -113,9 +113,9 @@ function resolveLocalModules(projectRoot, context, moduleName, platform) { localModuleFileExtension = '.view.js'; } if (localModuleFileExtension) { - const tsProjectRoot = findUpTSProjectRootOrAssert(path_1.default.dirname(context.originModulePath)); - const relativePathToOriginModule = path_1.default.relative(tsProjectRoot, fs_1.default.realpathSync(path_1.default.dirname(context.originModulePath))); - const modulePath = path_1.default.resolve(localModulesModulesPath, relativePathToOriginModule, moduleName.substring(0, moduleName.lastIndexOf('.')) + localModuleFileExtension); + const tsProjectRoot = findUpTSProjectRootOrThrow(path_1.default.dirname(context.originModulePath)); + const modulePathRelativeToTSRoot = path_1.default.relative(tsProjectRoot, fs_1.default.realpathSync(path_1.default.dirname(context.originModulePath))); + const modulePath = path_1.default.resolve(localModulesModulesPath, modulePathRelativeToTSRoot, moduleName.substring(0, moduleName.lastIndexOf('.')) + localModuleFileExtension); return { filePath: modulePath, type: 'sourceFile', diff --git a/packages/@expo/metro-config/build/ExpoMetroConfig.js.map b/packages/@expo/metro-config/build/ExpoMetroConfig.js.map index cc30713b6c3616..5995f734131a81 100644 --- a/packages/@expo/metro-config/build/ExpoMetroConfig.js.map +++ b/packages/@expo/metro-config/build/ExpoMetroConfig.js.map @@ -1 +1 @@ -{"version":3,"file":"ExpoMetroConfig.js","sourceRoot":"","sources":["../src/ExpoMetroConfig.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"ExpoMetroConfig.js","sourceRoot":"","sources":["../src/ExpoMetroConfig.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/@expo/metro-config/src/ExpoMetroConfig.ts b/packages/@expo/metro-config/src/ExpoMetroConfig.ts index 07ffe4dd221ca0..98426589e62714 100644 --- a/packages/@expo/metro-config/src/ExpoMetroConfig.ts +++ b/packages/@expo/metro-config/src/ExpoMetroConfig.ts @@ -155,7 +155,7 @@ function findUpTSConfig(cwd: string): string | null { return findUpTSConfig(parent); } -function findUpTSProjectRootOrAssert(dir: string): string { +function findUpTSProjectRootOrThrow(dir: string): string { const tsProjectRoot = findUpTSConfig(dir); if (!tsProjectRoot) { throw new Error('Local modules watched dir needs to be inside a TS project with tsconfig.json'); @@ -178,15 +178,15 @@ function resolveLocalModules( localModuleFileExtension = '.view.js'; } if (localModuleFileExtension) { - const tsProjectRoot = findUpTSProjectRootOrAssert(path.dirname(context.originModulePath)); - const relativePathToOriginModule = path.relative( + const tsProjectRoot = findUpTSProjectRootOrThrow(path.dirname(context.originModulePath)); + const modulePathRelativeToTSRoot = path.relative( tsProjectRoot, fs.realpathSync(path.dirname(context.originModulePath)) ); const modulePath = path.resolve( localModulesModulesPath, - relativePathToOriginModule, + modulePathRelativeToTSRoot, moduleName.substring(0, moduleName.lastIndexOf('.')) + localModuleFileExtension ); diff --git a/packages/expo-modules-autolinking/build/commands/mirrorKotlinLocalModulesCommand.js b/packages/expo-modules-autolinking/build/commands/mirrorKotlinLocalModulesCommand.js index 24a7bd105320d6..f95bf49e81f0cf 100644 --- a/packages/expo-modules-autolinking/build/commands/mirrorKotlinLocalModulesCommand.js +++ b/packages/expo-modules-autolinking/build/commands/mirrorKotlinLocalModulesCommand.js @@ -9,19 +9,20 @@ const path_1 = __importDefault(require("path")); const autolinkingOptions_1 = require("./autolinkingOptions"); const androidLocalModules_1 = require("../localModules/androidLocalModules"); function mirrorKotlinLocalModulesCommand(cli) { - return (0, autolinkingOptions_1.registerAutolinkingArguments)(cli.command('mirror-kotlin-local-modules ')).action(async (mirrorPath, localModulesListPath, watchedDirsSerialized) => { + return (0, autolinkingOptions_1.registerAutolinkingArguments)(cli.command('mirror-kotlin-local-modules ')).action(async (kotlinFilesMirrorDirectory, localModulesListPath, watchedDirsSerialized) => { const watchedDirs = JSON.parse(watchedDirsSerialized); - if (!mirrorPath || !localModulesListPath) { - throw new Error('Need to provide mirrorPath and localModulesListPath!'); + if (!kotlinFilesMirrorDirectory || !localModulesListPath) { + throw new Error('Need to provide kotlinFilesMirrorDirectory and localModulesListPath!'); } - if (!/.android./.test(mirrorPath) || !/.android./.test(localModulesListPath)) { + if (!/.android./.test(kotlinFilesMirrorDirectory) || + !/.android./.test(localModulesListPath)) { throw new Error('Generation path is not inside any android directory!'); } - if (!path_1.default.isAbsolute(mirrorPath) || !path_1.default.isAbsolute(localModulesListPath)) { + if (!path_1.default.isAbsolute(kotlinFilesMirrorDirectory) || !path_1.default.isAbsolute(localModulesListPath)) { throw new Error('Need to provide the absolute path to both the local modules src mirror and generated mirror directory!'); } - fs_1.default.rmSync(mirrorPath, { recursive: true, force: true }); - await (0, androidLocalModules_1.createSymlinksToKotlinFiles)(mirrorPath, watchedDirs); + fs_1.default.rmSync(kotlinFilesMirrorDirectory, { recursive: true, force: true }); + await (0, androidLocalModules_1.createSymlinksToKotlinFiles)(kotlinFilesMirrorDirectory, watchedDirs); await (0, androidLocalModules_1.generateLocalModulesListFile)(localModulesListPath, watchedDirs); }); } diff --git a/packages/expo-modules-autolinking/build/commands/mirrorKotlinLocalModulesCommand.js.map b/packages/expo-modules-autolinking/build/commands/mirrorKotlinLocalModulesCommand.js.map index 38ef06a433e318..d1a3bfa6537877 100644 --- a/packages/expo-modules-autolinking/build/commands/mirrorKotlinLocalModulesCommand.js.map +++ b/packages/expo-modules-autolinking/build/commands/mirrorKotlinLocalModulesCommand.js.map @@ -1 +1 @@ -{"version":3,"file":"mirrorKotlinLocalModulesCommand.js","sourceRoot":"","sources":["../../src/commands/mirrorKotlinLocalModulesCommand.ts"],"names":[],"mappings":";;;;;AAaA,0EAyBC;AArCD,4CAAoB;AACpB,gDAAwB;AAExB,6DAAgG;AAChG,6EAG6C;AAK7C,SAAgB,+BAA+B,CAAC,GAA8B;IAC5E,OAAO,IAAA,iDAA4B,EACjC,GAAG,CAAC,OAAO,CACT,yFAAyF,CAC1F,CACF,CAAC,MAAM,CACN,KAAK,EAAE,UAAkB,EAAE,oBAA4B,EAAE,qBAA6B,EAAE,EAAE;QACxF,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;QACtD,IAAI,CAAC,UAAU,IAAI,CAAC,oBAAoB,EAAE,CAAC;YACzC,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;QAC1E,CAAC;QACD,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,oBAAoB,CAAC,EAAE,CAAC;YAC7E,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;QAC1E,CAAC;QACD,IAAI,CAAC,cAAI,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,cAAI,CAAC,UAAU,CAAC,oBAAoB,CAAC,EAAE,CAAC;YAC3E,MAAM,IAAI,KAAK,CACb,wGAAwG,CACzG,CAAC;QACJ,CAAC;QAED,YAAE,CAAC,MAAM,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACxD,MAAM,IAAA,iDAA2B,EAAC,UAAU,EAAE,WAAW,CAAC,CAAC;QAC3D,MAAM,IAAA,kDAA4B,EAAC,oBAAoB,EAAE,WAAW,CAAC,CAAC;IACxE,CAAC,CACF,CAAC;AACJ,CAAC","sourcesContent":["import commander from 'commander';\nimport fs from 'fs';\nimport path from 'path';\n\nimport { AutolinkingCommonArguments, registerAutolinkingArguments } from './autolinkingOptions';\nimport {\n createSymlinksToKotlinFiles,\n generateLocalModulesListFile,\n} from '../localModules/androidLocalModules';\ninterface ResolveArguments extends AutolinkingCommonArguments {\n json?: boolean | null;\n}\n\nexport function mirrorKotlinLocalModulesCommand(cli: commander.CommanderStatic) {\n return registerAutolinkingArguments(\n cli.command(\n 'mirror-kotlin-local-modules '\n )\n ).action(\n async (mirrorPath: string, localModulesListPath: string, watchedDirsSerialized: string) => {\n const watchedDirs = JSON.parse(watchedDirsSerialized);\n if (!mirrorPath || !localModulesListPath) {\n throw new Error('Need to provide mirrorPath and localModulesListPath!');\n }\n if (!/.android./.test(mirrorPath) || !/.android./.test(localModulesListPath)) {\n throw new Error('Generation path is not inside any android directory!');\n }\n if (!path.isAbsolute(mirrorPath) || !path.isAbsolute(localModulesListPath)) {\n throw new Error(\n 'Need to provide the absolute path to both the local modules src mirror and generated mirror directory!'\n );\n }\n\n fs.rmSync(mirrorPath, { recursive: true, force: true });\n await createSymlinksToKotlinFiles(mirrorPath, watchedDirs);\n await generateLocalModulesListFile(localModulesListPath, watchedDirs);\n }\n );\n}\n"]} \ No newline at end of file +{"version":3,"file":"mirrorKotlinLocalModulesCommand.js","sourceRoot":"","sources":["../../src/commands/mirrorKotlinLocalModulesCommand.ts"],"names":[],"mappings":";;;;;AAaA,0EAgCC;AA5CD,4CAAoB;AACpB,gDAAwB;AAExB,6DAAgG;AAChG,6EAG6C;AAK7C,SAAgB,+BAA+B,CAAC,GAA8B;IAC5E,OAAO,IAAA,iDAA4B,EACjC,GAAG,CAAC,OAAO,CACT,yGAAyG,CAC1G,CACF,CAAC,MAAM,CACN,KAAK,EACH,0BAAkC,EAClC,oBAA4B,EAC5B,qBAA6B,EAC7B,EAAE;QACF,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;QACtD,IAAI,CAAC,0BAA0B,IAAI,CAAC,oBAAoB,EAAE,CAAC;YACzD,MAAM,IAAI,KAAK,CAAC,sEAAsE,CAAC,CAAC;QAC1F,CAAC;QACD,IACE,CAAC,WAAW,CAAC,IAAI,CAAC,0BAA0B,CAAC;YAC7C,CAAC,WAAW,CAAC,IAAI,CAAC,oBAAoB,CAAC,EACvC,CAAC;YACD,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;QAC1E,CAAC;QACD,IAAI,CAAC,cAAI,CAAC,UAAU,CAAC,0BAA0B,CAAC,IAAI,CAAC,cAAI,CAAC,UAAU,CAAC,oBAAoB,CAAC,EAAE,CAAC;YAC3F,MAAM,IAAI,KAAK,CACb,wGAAwG,CACzG,CAAC;QACJ,CAAC;QAED,YAAE,CAAC,MAAM,CAAC,0BAA0B,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACxE,MAAM,IAAA,iDAA2B,EAAC,0BAA0B,EAAE,WAAW,CAAC,CAAC;QAC3E,MAAM,IAAA,kDAA4B,EAAC,oBAAoB,EAAE,WAAW,CAAC,CAAC;IACxE,CAAC,CACF,CAAC;AACJ,CAAC","sourcesContent":["import commander from 'commander';\nimport fs from 'fs';\nimport path from 'path';\n\nimport { AutolinkingCommonArguments, registerAutolinkingArguments } from './autolinkingOptions';\nimport {\n createSymlinksToKotlinFiles,\n generateLocalModulesListFile,\n} from '../localModules/androidLocalModules';\ninterface ResolveArguments extends AutolinkingCommonArguments {\n json?: boolean | null;\n}\n\nexport function mirrorKotlinLocalModulesCommand(cli: commander.CommanderStatic) {\n return registerAutolinkingArguments(\n cli.command(\n 'mirror-kotlin-local-modules '\n )\n ).action(\n async (\n kotlinFilesMirrorDirectory: string,\n localModulesListPath: string,\n watchedDirsSerialized: string\n ) => {\n const watchedDirs = JSON.parse(watchedDirsSerialized);\n if (!kotlinFilesMirrorDirectory || !localModulesListPath) {\n throw new Error('Need to provide kotlinFilesMirrorDirectory and localModulesListPath!');\n }\n if (\n !/.android./.test(kotlinFilesMirrorDirectory) ||\n !/.android./.test(localModulesListPath)\n ) {\n throw new Error('Generation path is not inside any android directory!');\n }\n if (!path.isAbsolute(kotlinFilesMirrorDirectory) || !path.isAbsolute(localModulesListPath)) {\n throw new Error(\n 'Need to provide the absolute path to both the local modules src mirror and generated mirror directory!'\n );\n }\n\n fs.rmSync(kotlinFilesMirrorDirectory, { recursive: true, force: true });\n await createSymlinksToKotlinFiles(kotlinFilesMirrorDirectory, watchedDirs);\n await generateLocalModulesListFile(localModulesListPath, watchedDirs);\n }\n );\n}\n"]} \ No newline at end of file diff --git a/packages/expo-modules-autolinking/build/localModules/androidLocalModules.js b/packages/expo-modules-autolinking/build/localModules/androidLocalModules.js index 26865ba20729f8..5194f92facda93 100644 --- a/packages/expo-modules-autolinking/build/localModules/androidLocalModules.js +++ b/packages/expo-modules-autolinking/build/localModules/androidLocalModules.js @@ -10,13 +10,12 @@ const path_1 = __importDefault(require("path")); const localModules_1 = require("./localModules"); async function createSymlinksToKotlinFiles(mirrorPath, watchedDirs) { const localModulesObject = await (0, localModules_1.getMirrorStateObject)(watchedDirs); - const appRoot = await (0, localModules_1.getAppRoot)(); for (const { filePath, watchedDirRoot } of localModulesObject.files) { if (!filePath.endsWith('.kt')) { continue; } - const filePathRelativeToRoot = path_1.default.relative(watchedDirRoot, filePath); - const targetPath = path_1.default.resolve(mirrorPath, filePathRelativeToRoot); + const filePathRelativeToWatchedDirRoot = path_1.default.relative(watchedDirRoot, filePath); + const targetPath = path_1.default.resolve(mirrorPath, filePathRelativeToWatchedDirRoot); fs_1.default.mkdirSync(path_1.default.dirname(targetPath), { recursive: true }); fs_1.default.symlinkSync(filePath, targetPath); } @@ -36,7 +35,7 @@ public class ExpoLocalModulesList implements ModulesProvider { @Override public List> getModulesList() { return Arrays.>asList( - ${localModulesObject.kotlinClasses.map((moduleClass) => ` ${moduleClass}.class`).join(',\n')} +${localModulesObject.kotlinClasses.map((moduleClass) => ` ${moduleClass}.class`).join(',\n')} ); } } diff --git a/packages/expo-modules-autolinking/build/localModules/androidLocalModules.js.map b/packages/expo-modules-autolinking/build/localModules/androidLocalModules.js.map index 657706afff2f3d..a1e94e20b5b3ac 100644 --- a/packages/expo-modules-autolinking/build/localModules/androidLocalModules.js.map +++ b/packages/expo-modules-autolinking/build/localModules/androidLocalModules.js.map @@ -1 +1 @@ -{"version":3,"file":"androidLocalModules.js","sourceRoot":"","sources":["../../src/localModules/androidLocalModules.ts"],"names":[],"mappings":";;;;;AAKA,kEAcC;AAED,oEA0BC;AA/CD,4CAAoB;AACpB,gDAAwB;AAExB,iDAAkE;AAE3D,KAAK,UAAU,2BAA2B,CAAC,UAAkB,EAAE,WAAqB;IACzF,MAAM,kBAAkB,GAAG,MAAM,IAAA,mCAAoB,EAAC,WAAW,CAAC,CAAC;IACnE,MAAM,OAAO,GAAG,MAAM,IAAA,yBAAU,GAAE,CAAC;IAEnC,KAAK,MAAM,EAAE,QAAQ,EAAE,cAAc,EAAE,IAAI,kBAAkB,CAAC,KAAK,EAAE,CAAC;QACpE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YAC9B,SAAS;QACX,CAAC;QACD,MAAM,sBAAsB,GAAG,cAAI,CAAC,QAAQ,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;QACvE,MAAM,UAAU,GAAG,cAAI,CAAC,OAAO,CAAC,UAAU,EAAE,sBAAsB,CAAC,CAAC;QAEpE,YAAE,CAAC,SAAS,CAAC,cAAI,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5D,YAAE,CAAC,WAAW,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;IACvC,CAAC;AACH,CAAC;AAEM,KAAK,UAAU,4BAA4B,CAChD,oBAA4B,EAC5B,WAAqB;IAErB,MAAM,kBAAkB,GAAG,MAAM,IAAA,mCAAoB,EAAC,WAAW,CAAC,CAAC;IACnE,MAAM,WAAW,GAAG;;;;;;;;;;;;;QAad,kBAAkB,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,SAAS,WAAW,QAAQ,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;;;;CAItG,CAAC;IAEA,YAAE,CAAC,SAAS,CAAC,oBAAoB,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACxD,YAAE,CAAC,aAAa,CAAC,cAAI,CAAC,OAAO,CAAC,oBAAoB,EAAE,2BAA2B,CAAC,EAAE,WAAW,CAAC,CAAC;AACjG,CAAC","sourcesContent":["import fs from 'fs';\nimport path from 'path';\n\nimport { getAppRoot, getMirrorStateObject } from './localModules';\n\nexport async function createSymlinksToKotlinFiles(mirrorPath: string, watchedDirs: string[]) {\n const localModulesObject = await getMirrorStateObject(watchedDirs);\n const appRoot = await getAppRoot();\n\n for (const { filePath, watchedDirRoot } of localModulesObject.files) {\n if (!filePath.endsWith('.kt')) {\n continue;\n }\n const filePathRelativeToRoot = path.relative(watchedDirRoot, filePath);\n const targetPath = path.resolve(mirrorPath, filePathRelativeToRoot);\n\n fs.mkdirSync(path.dirname(targetPath), { recursive: true });\n fs.symlinkSync(filePath, targetPath);\n }\n}\n\nexport async function generateLocalModulesListFile(\n localModulesListPath: string,\n watchedDirs: string[]\n) {\n const localModulesObject = await getMirrorStateObject(watchedDirs);\n const fileContent = `\npackage local.modules;\n\nimport java.util.Arrays;\nimport java.util.List;\n\nimport expo.modules.kotlin.ModulesProvider;\nimport expo.modules.kotlin.modules.Module;\n\npublic class ExpoLocalModulesList implements ModulesProvider {\n @Override\n public List> getModulesList() {\n return Arrays.>asList(\n ${localModulesObject.kotlinClasses.map((moduleClass) => ` ${moduleClass}.class`).join(',\\n')}\n );\n }\n}\n`;\n\n fs.mkdirSync(localModulesListPath, { recursive: true });\n fs.writeFileSync(path.resolve(localModulesListPath, 'ExpoLocalModulesList.java'), fileContent);\n}\n"]} \ No newline at end of file +{"version":3,"file":"androidLocalModules.js","sourceRoot":"","sources":["../../src/localModules/androidLocalModules.ts"],"names":[],"mappings":";;;;;AAKA,kEAaC;AAED,oEA0BC;AA9CD,4CAAoB;AACpB,gDAAwB;AAExB,iDAAsD;AAE/C,KAAK,UAAU,2BAA2B,CAAC,UAAkB,EAAE,WAAqB;IACzF,MAAM,kBAAkB,GAAG,MAAM,IAAA,mCAAoB,EAAC,WAAW,CAAC,CAAC;IAEnE,KAAK,MAAM,EAAE,QAAQ,EAAE,cAAc,EAAE,IAAI,kBAAkB,CAAC,KAAK,EAAE,CAAC;QACpE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YAC9B,SAAS;QACX,CAAC;QACD,MAAM,gCAAgC,GAAG,cAAI,CAAC,QAAQ,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;QACjF,MAAM,UAAU,GAAG,cAAI,CAAC,OAAO,CAAC,UAAU,EAAE,gCAAgC,CAAC,CAAC;QAE9E,YAAE,CAAC,SAAS,CAAC,cAAI,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5D,YAAE,CAAC,WAAW,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;IACvC,CAAC;AACH,CAAC;AAEM,KAAK,UAAU,4BAA4B,CAChD,oBAA4B,EAC5B,WAAqB;IAErB,MAAM,kBAAkB,GAAG,MAAM,IAAA,mCAAoB,EAAC,WAAW,CAAC,CAAC;IACnE,MAAM,WAAW,GAAG;;;;;;;;;;;;;EAapB,kBAAkB,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,SAAS,WAAW,QAAQ,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;;;;CAIhG,CAAC;IAEA,YAAE,CAAC,SAAS,CAAC,oBAAoB,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACxD,YAAE,CAAC,aAAa,CAAC,cAAI,CAAC,OAAO,CAAC,oBAAoB,EAAE,2BAA2B,CAAC,EAAE,WAAW,CAAC,CAAC;AACjG,CAAC","sourcesContent":["import fs from 'fs';\nimport path from 'path';\n\nimport { getMirrorStateObject } from './localModules';\n\nexport async function createSymlinksToKotlinFiles(mirrorPath: string, watchedDirs: string[]) {\n const localModulesObject = await getMirrorStateObject(watchedDirs);\n\n for (const { filePath, watchedDirRoot } of localModulesObject.files) {\n if (!filePath.endsWith('.kt')) {\n continue;\n }\n const filePathRelativeToWatchedDirRoot = path.relative(watchedDirRoot, filePath);\n const targetPath = path.resolve(mirrorPath, filePathRelativeToWatchedDirRoot);\n\n fs.mkdirSync(path.dirname(targetPath), { recursive: true });\n fs.symlinkSync(filePath, targetPath);\n }\n}\n\nexport async function generateLocalModulesListFile(\n localModulesListPath: string,\n watchedDirs: string[]\n) {\n const localModulesObject = await getMirrorStateObject(watchedDirs);\n const fileContent = `\npackage local.modules;\n\nimport java.util.Arrays;\nimport java.util.List;\n\nimport expo.modules.kotlin.ModulesProvider;\nimport expo.modules.kotlin.modules.Module;\n\npublic class ExpoLocalModulesList implements ModulesProvider {\n @Override\n public List> getModulesList() {\n return Arrays.>asList(\n${localModulesObject.kotlinClasses.map((moduleClass) => ` ${moduleClass}.class`).join(',\\n')}\n );\n }\n}\n`;\n\n fs.mkdirSync(localModulesListPath, { recursive: true });\n fs.writeFileSync(path.resolve(localModulesListPath, 'ExpoLocalModulesList.java'), fileContent);\n}\n"]} \ No newline at end of file diff --git a/packages/expo-modules-autolinking/build/localModules/localModules.js b/packages/expo-modules-autolinking/build/localModules/localModules.js index 9976a2e4d20ff2..0de4b067f8552a 100644 --- a/packages/expo-modules-autolinking/build/localModules/localModules.js +++ b/packages/expo-modules-autolinking/build/localModules/localModules.js @@ -7,14 +7,6 @@ exports.getAppRoot = getAppRoot; exports.getMirrorStateObject = getMirrorStateObject; const fs_1 = __importDefault(require("fs")); const path_1 = __importDefault(require("path")); -/** Look up directories until one with a `package.json` can be found, assert if none can be found. */ -function findUpProjectRootOrAssert(cwd) { - const projectRoot = findUpProjectRoot(cwd); - if (!projectRoot) { - throw new Error(`Project root directory not found (working directory: ${cwd})`); - } - return projectRoot; -} function findUpProjectRoot(cwd) { const packageJsonPath = path_1.default.resolve(cwd, './package.json'); if (fs_1.default.existsSync(packageJsonPath)) { @@ -27,7 +19,7 @@ function findUpProjectRoot(cwd) { } async function getAppRoot() { const cwd = process.cwd(); - const result = await findUpProjectRootOrAssert(cwd); + const result = findUpProjectRoot(cwd); if (!result) { throw new Error(`Couldn't find "package.json" up from path "${cwd}"`); } @@ -61,7 +53,7 @@ function getKotlinFileNameWithItsPackage(absoluteFilePath) { return ''; } const packageName = lines[packageLine].substring('package '.length); - return packageName + '.' + trimExtension(path_1.default.basename(absoluteFilePath)); + return `${packageName}.${trimExtension(path_1.default.basename(absoluteFilePath))}`; } function getSwiftModuleClassName(absoluteFilePath) { return trimExtension(path_1.default.basename(absoluteFilePath)); diff --git a/packages/expo-modules-autolinking/build/localModules/localModules.js.map b/packages/expo-modules-autolinking/build/localModules/localModules.js.map index 9eaa2ac31ce53a..9a57c2d9341406 100644 --- a/packages/expo-modules-autolinking/build/localModules/localModules.js.map +++ b/packages/expo-modules-autolinking/build/localModules/localModules.js.map @@ -1 +1 @@ -{"version":3,"file":"localModules.js","sourceRoot":"","sources":["../../src/localModules/localModules.ts"],"names":[],"mappings":"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","sourcesContent":["import fs from 'fs';\nimport path from 'path';\n\nexport type LocalModulesMirror = {\n files: { filePath: string; watchedDirRoot: string }[];\n swiftModuleClassNames: string[];\n kotlinClasses: string[];\n};\n\n/** Look up directories until one with a `package.json` can be found, assert if none can be found. */\nfunction findUpProjectRootOrAssert(cwd: string): string {\n const projectRoot = findUpProjectRoot(cwd);\n if (!projectRoot) {\n throw new Error(`Project root directory not found (working directory: ${cwd})`);\n }\n return projectRoot;\n}\n\nfunction findUpProjectRoot(cwd: string): string | null {\n const packageJsonPath = path.resolve(cwd, './package.json');\n if (fs.existsSync(packageJsonPath)) {\n return path.dirname(packageJsonPath);\n }\n\n const parent = path.dirname(cwd);\n if (parent === cwd) return null;\n\n return findUpProjectRoot(parent);\n}\n\nexport async function getAppRoot(): Promise {\n const cwd = process.cwd();\n const result = await findUpProjectRootOrAssert(cwd);\n if (!result) {\n throw new Error(`Couldn't find \"package.json\" up from path \"${cwd}\"`);\n }\n return result;\n}\n\nconst nativeExtensions = ['.kt', '.swift'];\n\nfunction isValidLocalModuleFileName(fileName: string): boolean {\n let numberOfDots = 0;\n for (const character of fileName) {\n if (character === '.') {\n numberOfDots += 1;\n }\n }\n\n let hasNativeExtension: boolean = false;\n for (const extension of nativeExtensions) {\n if (fileName.endsWith(extension)) {\n hasNativeExtension = true;\n break;\n }\n }\n\n return hasNativeExtension && numberOfDots === 1;\n}\n\nfunction trimExtension(fileName: string) {\n return fileName.substring(0, fileName.lastIndexOf('.'));\n}\n\nfunction getKotlinFileNameWithItsPackage(absoluteFilePath: string): string {\n const pacakgeRegex = /^package\\s+/;\n const lines = fs.readFileSync(absoluteFilePath).toString().split('\\n');\n const packageLine = lines.findIndex((line) => pacakgeRegex.test(line));\n if (packageLine < 0) {\n return '';\n }\n const packageName = lines[packageLine].substring('package '.length);\n return packageName + '.' + trimExtension(path.basename(absoluteFilePath));\n}\n\nfunction getSwiftModuleClassName(absoluteFilePath: string): string {\n return trimExtension(path.basename(absoluteFilePath));\n}\n\nexport async function getMirrorStateObject(watchedDirs: string[]): Promise {\n const appRoot = await getAppRoot();\n const localModulesMirror: LocalModulesMirror = {\n kotlinClasses: [],\n swiftModuleClassNames: [],\n files: [],\n };\n\n const recursivelyScanDirectory = async (absoluteDirPath: string, watchedDirRoot: string) => {\n const dir = fs.opendirSync(absoluteDirPath);\n for await (const dirent of dir) {\n const absoluteDirentPath = path.resolve(absoluteDirPath, dirent.name);\n if (dirent.isDirectory()) {\n await recursivelyScanDirectory(absoluteDirentPath, watchedDirRoot);\n }\n if (!dirent.isFile() || !isValidLocalModuleFileName(dirent.name)) {\n continue;\n }\n\n if (/\\.(kt)$/.test(dirent.name)) {\n const kotlinFileWithPackage = getKotlinFileNameWithItsPackage(absoluteDirentPath);\n localModulesMirror.kotlinClasses.push(kotlinFileWithPackage);\n localModulesMirror.files.push({ filePath: absoluteDirentPath, watchedDirRoot });\n } else if (/\\.(swift)$/.test(dirent.name)) {\n const swiftClassName = getSwiftModuleClassName(absoluteDirentPath);\n localModulesMirror.swiftModuleClassNames.push(swiftClassName);\n localModulesMirror.files.push({ filePath: absoluteDirentPath, watchedDirRoot });\n }\n }\n };\n\n for (const dir of watchedDirs ?? []) {\n await recursivelyScanDirectory(\n path.resolve(appRoot, dir),\n fs.realpathSync(path.resolve(appRoot, dir))\n );\n }\n return localModulesMirror;\n}\n"]} \ No newline at end of file +{"version":3,"file":"localModules.js","sourceRoot":"","sources":["../../src/localModules/localModules.ts"],"names":[],"mappings":"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","sourcesContent":["import fs from 'fs';\nimport path from 'path';\n\nexport type LocalModulesMirror = {\n files: { filePath: string; watchedDirRoot: string }[];\n swiftModuleClassNames: string[];\n kotlinClasses: string[];\n};\n\nfunction findUpProjectRoot(cwd: string): string | null {\n const packageJsonPath = path.resolve(cwd, './package.json');\n if (fs.existsSync(packageJsonPath)) {\n return path.dirname(packageJsonPath);\n }\n\n const parent = path.dirname(cwd);\n if (parent === cwd) return null;\n\n return findUpProjectRoot(parent);\n}\n\nexport async function getAppRoot(): Promise {\n const cwd = process.cwd();\n const result = findUpProjectRoot(cwd);\n if (!result) {\n throw new Error(`Couldn't find \"package.json\" up from path \"${cwd}\"`);\n }\n return result;\n}\n\nconst nativeExtensions = ['.kt', '.swift'];\n\nfunction isValidLocalModuleFileName(fileName: string): boolean {\n let numberOfDots = 0;\n for (const character of fileName) {\n if (character === '.') {\n numberOfDots += 1;\n }\n }\n\n let hasNativeExtension: boolean = false;\n for (const extension of nativeExtensions) {\n if (fileName.endsWith(extension)) {\n hasNativeExtension = true;\n break;\n }\n }\n\n return hasNativeExtension && numberOfDots === 1;\n}\n\nfunction trimExtension(fileName: string) {\n return fileName.substring(0, fileName.lastIndexOf('.'));\n}\n\nfunction getKotlinFileNameWithItsPackage(absoluteFilePath: string): string {\n const pacakgeRegex = /^package\\s+/;\n const lines = fs.readFileSync(absoluteFilePath).toString().split('\\n');\n const packageLine = lines.findIndex((line) => pacakgeRegex.test(line));\n if (packageLine < 0) {\n return '';\n }\n const packageName = lines[packageLine].substring('package '.length);\n return `${packageName}.${trimExtension(path.basename(absoluteFilePath))}`;\n}\n\nfunction getSwiftModuleClassName(absoluteFilePath: string): string {\n return trimExtension(path.basename(absoluteFilePath));\n}\n\nexport async function getMirrorStateObject(watchedDirs: string[]): Promise {\n const appRoot = await getAppRoot();\n const localModulesMirror: LocalModulesMirror = {\n kotlinClasses: [],\n swiftModuleClassNames: [],\n files: [],\n };\n\n const recursivelyScanDirectory = async (absoluteDirPath: string, watchedDirRoot: string) => {\n const dir = fs.opendirSync(absoluteDirPath);\n for await (const dirent of dir) {\n const absoluteDirentPath = path.resolve(absoluteDirPath, dirent.name);\n if (dirent.isDirectory()) {\n await recursivelyScanDirectory(absoluteDirentPath, watchedDirRoot);\n }\n if (!dirent.isFile() || !isValidLocalModuleFileName(dirent.name)) {\n continue;\n }\n\n if (/\\.(kt)$/.test(dirent.name)) {\n const kotlinFileWithPackage = getKotlinFileNameWithItsPackage(absoluteDirentPath);\n localModulesMirror.kotlinClasses.push(kotlinFileWithPackage);\n localModulesMirror.files.push({ filePath: absoluteDirentPath, watchedDirRoot });\n } else if (/\\.(swift)$/.test(dirent.name)) {\n const swiftClassName = getSwiftModuleClassName(absoluteDirentPath);\n localModulesMirror.swiftModuleClassNames.push(swiftClassName);\n localModulesMirror.files.push({ filePath: absoluteDirentPath, watchedDirRoot });\n }\n }\n };\n\n for (const dir of watchedDirs ?? []) {\n await recursivelyScanDirectory(\n path.resolve(appRoot, dir),\n fs.realpathSync(path.resolve(appRoot, dir))\n );\n }\n return localModulesMirror;\n}\n"]} \ No newline at end of file diff --git a/packages/expo-modules-autolinking/e2e/__tests__/monorepo-test.ts b/packages/expo-modules-autolinking/e2e/__tests__/monorepo-test.ts index c61119b3b5131d..51ebe1b3e93aa3 100644 --- a/packages/expo-modules-autolinking/e2e/__tests__/monorepo-test.ts +++ b/packages/expo-modules-autolinking/e2e/__tests__/monorepo-test.ts @@ -114,13 +114,13 @@ describe('monorepo', () => { platform === 'android' ? 'generate-package-list' : 'generate-modules-provider'; const appPath = projectPath(app); const target = join(appPath, 'generated', 'file.txt'); - const androidExtreArgs = ['--namespace', 'com.test']; + const androidExtraArgs = ['--namespace', 'com.test']; const watchedDirsSerialized = JSON.stringify([]); const generatePackageListResult = platform === 'android' ? await autolinkingRunAsync( - [command, '--platform', platform, '--target', target, ...androidExtreArgs], + [command, '--platform', platform, '--target', target, ...androidExtraArgs], { cwd: appPath, } diff --git a/packages/expo-modules-autolinking/scripts/ios/autolinking_manager.rb b/packages/expo-modules-autolinking/scripts/ios/autolinking_manager.rb index f591095168b5b0..64103aabdb2ccd 100644 --- a/packages/expo-modules-autolinking/scripts/ios/autolinking_manager.rb +++ b/packages/expo-modules-autolinking/scripts/ios/autolinking_manager.rb @@ -200,9 +200,7 @@ class AutolinkingManager search_paths = @options.fetch(:searchPaths, @options.fetch(:modules_paths, nil)) ignore_paths = @options.fetch(:ignorePaths, nil) exclude = @options.fetch(:exclude, []) - args = [] - - args.concat([@watched_dirs]) + args = [@watched_dirs] if !search_paths.nil? && !search_paths.empty? args.concat(search_paths) diff --git a/packages/expo-modules-autolinking/src/commands/mirrorKotlinLocalModulesCommand.ts b/packages/expo-modules-autolinking/src/commands/mirrorKotlinLocalModulesCommand.ts index a82eb06589c92e..53962242967e5d 100644 --- a/packages/expo-modules-autolinking/src/commands/mirrorKotlinLocalModulesCommand.ts +++ b/packages/expo-modules-autolinking/src/commands/mirrorKotlinLocalModulesCommand.ts @@ -14,25 +14,32 @@ interface ResolveArguments extends AutolinkingCommonArguments { export function mirrorKotlinLocalModulesCommand(cli: commander.CommanderStatic) { return registerAutolinkingArguments( cli.command( - 'mirror-kotlin-local-modules ' + 'mirror-kotlin-local-modules ' ) ).action( - async (mirrorPath: string, localModulesListPath: string, watchedDirsSerialized: string) => { + async ( + kotlinFilesMirrorDirectory: string, + localModulesListPath: string, + watchedDirsSerialized: string + ) => { const watchedDirs = JSON.parse(watchedDirsSerialized); - if (!mirrorPath || !localModulesListPath) { - throw new Error('Need to provide mirrorPath and localModulesListPath!'); + if (!kotlinFilesMirrorDirectory || !localModulesListPath) { + throw new Error('Need to provide kotlinFilesMirrorDirectory and localModulesListPath!'); } - if (!/.android./.test(mirrorPath) || !/.android./.test(localModulesListPath)) { + if ( + !/.android./.test(kotlinFilesMirrorDirectory) || + !/.android./.test(localModulesListPath) + ) { throw new Error('Generation path is not inside any android directory!'); } - if (!path.isAbsolute(mirrorPath) || !path.isAbsolute(localModulesListPath)) { + if (!path.isAbsolute(kotlinFilesMirrorDirectory) || !path.isAbsolute(localModulesListPath)) { throw new Error( 'Need to provide the absolute path to both the local modules src mirror and generated mirror directory!' ); } - fs.rmSync(mirrorPath, { recursive: true, force: true }); - await createSymlinksToKotlinFiles(mirrorPath, watchedDirs); + fs.rmSync(kotlinFilesMirrorDirectory, { recursive: true, force: true }); + await createSymlinksToKotlinFiles(kotlinFilesMirrorDirectory, watchedDirs); await generateLocalModulesListFile(localModulesListPath, watchedDirs); } ); diff --git a/packages/expo-modules-autolinking/src/localModules/androidLocalModules.ts b/packages/expo-modules-autolinking/src/localModules/androidLocalModules.ts index 4699b94d946f28..7912a1fe9b8bb4 100644 --- a/packages/expo-modules-autolinking/src/localModules/androidLocalModules.ts +++ b/packages/expo-modules-autolinking/src/localModules/androidLocalModules.ts @@ -1,18 +1,17 @@ import fs from 'fs'; import path from 'path'; -import { getAppRoot, getMirrorStateObject } from './localModules'; +import { getMirrorStateObject } from './localModules'; export async function createSymlinksToKotlinFiles(mirrorPath: string, watchedDirs: string[]) { const localModulesObject = await getMirrorStateObject(watchedDirs); - const appRoot = await getAppRoot(); for (const { filePath, watchedDirRoot } of localModulesObject.files) { if (!filePath.endsWith('.kt')) { continue; } - const filePathRelativeToRoot = path.relative(watchedDirRoot, filePath); - const targetPath = path.resolve(mirrorPath, filePathRelativeToRoot); + const filePathRelativeToWatchedDirRoot = path.relative(watchedDirRoot, filePath); + const targetPath = path.resolve(mirrorPath, filePathRelativeToWatchedDirRoot); fs.mkdirSync(path.dirname(targetPath), { recursive: true }); fs.symlinkSync(filePath, targetPath); @@ -37,7 +36,7 @@ public class ExpoLocalModulesList implements ModulesProvider { @Override public List> getModulesList() { return Arrays.>asList( - ${localModulesObject.kotlinClasses.map((moduleClass) => ` ${moduleClass}.class`).join(',\n')} +${localModulesObject.kotlinClasses.map((moduleClass) => ` ${moduleClass}.class`).join(',\n')} ); } } diff --git a/packages/expo-modules-autolinking/src/localModules/localModules.ts b/packages/expo-modules-autolinking/src/localModules/localModules.ts index b531d2455e3fa9..fbbc39444aee81 100644 --- a/packages/expo-modules-autolinking/src/localModules/localModules.ts +++ b/packages/expo-modules-autolinking/src/localModules/localModules.ts @@ -7,15 +7,6 @@ export type LocalModulesMirror = { kotlinClasses: string[]; }; -/** Look up directories until one with a `package.json` can be found, assert if none can be found. */ -function findUpProjectRootOrAssert(cwd: string): string { - const projectRoot = findUpProjectRoot(cwd); - if (!projectRoot) { - throw new Error(`Project root directory not found (working directory: ${cwd})`); - } - return projectRoot; -} - function findUpProjectRoot(cwd: string): string | null { const packageJsonPath = path.resolve(cwd, './package.json'); if (fs.existsSync(packageJsonPath)) { @@ -30,7 +21,7 @@ function findUpProjectRoot(cwd: string): string | null { export async function getAppRoot(): Promise { const cwd = process.cwd(); - const result = await findUpProjectRootOrAssert(cwd); + const result = findUpProjectRoot(cwd); if (!result) { throw new Error(`Couldn't find "package.json" up from path "${cwd}"`); } @@ -70,7 +61,7 @@ function getKotlinFileNameWithItsPackage(absoluteFilePath: string): string { return ''; } const packageName = lines[packageLine].substring('package '.length); - return packageName + '.' + trimExtension(path.basename(absoluteFilePath)); + return `${packageName}.${trimExtension(path.basename(absoluteFilePath))}`; } function getSwiftModuleClassName(absoluteFilePath: string): string { From fbed89df33ba9a3092e3f39aab8d1bc4059b8bf3 Mon Sep 17 00:00:00 2001 From: HubertBer Date: Mon, 29 Sep 2025 11:14:40 +0200 Subject: [PATCH 2/3] bugfix & refactor --- .../@expo/cli/src/localModules/generation.ts | 38 +++++++++++-------- 1 file changed, 23 insertions(+), 15 deletions(-) diff --git a/packages/@expo/cli/src/localModules/generation.ts b/packages/@expo/cli/src/localModules/generation.ts index fe04c3f7846e8a..cb1eb74e1dc580 100644 --- a/packages/@expo/cli/src/localModules/generation.ts +++ b/packages/@expo/cli/src/localModules/generation.ts @@ -89,7 +89,7 @@ function trimExtension(fileName: string): string { function typesAndLocalModulePathsForFile( projectRoot: string, - watchedDirRoot: string, + watchedDirRootAbolutePath: string, absoluteFilePath: string ): { moduleTypesFilePath: string; @@ -102,7 +102,7 @@ function typesAndLocalModulePathsForFile( const fileName = path.basename(absoluteFilePath); const moduleName = trimExtension(fileName); - const watchedDirTSProjectRoot = findUpTSProjectRootOrThrow(watchedDirRoot); + const watchedDirTSProjectRoot = findUpTSProjectRootOrThrow(watchedDirRootAbolutePath); const filePathRelativeToTSProjectRoot = path.relative(watchedDirTSProjectRoot, absoluteFilePath); const filePathRelativeToTSProjectRootWithoutExtension = trimExtension( filePathRelativeToTSProjectRoot @@ -211,9 +211,12 @@ export function updateXCodeProject(projectRoot: string): void { fs.writeFileSync(pbxProject.filepath, pbxProject.writeSync()); } -function getWatchedDirAncestor(projectRoot: string, filePathAbsolute: string): string | null { +function getWatchedDirAncestorAbsolutePath( + projectRoot: string, + filePathAbsolute: string +): string | null { const watchedDirs = getConfig(projectRoot).exp.localModules?.watchedDirs ?? []; - const realRoot = fs.realpathSync(projectRoot); + const realRoot = path.resolve(projectRoot); for (const dir of watchedDirs) { const dirPathAbsolute = path.resolve(realRoot, dir); if (filePathAbsolute.startsWith(dirPathAbsolute)) { @@ -225,12 +228,12 @@ function getWatchedDirAncestor(projectRoot: string, filePathAbsolute: string): s function onSourceFileCreated( projectRoot: string, - watchedDirRoot: string, + watchedDirRootAbolutePath: string, absoluteFilePath: string, filesWatched?: Set ): void { const { moduleTypesFilePath, viewTypesFilePath, viewExportPath, moduleExportPath, moduleName } = - typesAndLocalModulePathsForFile(projectRoot, watchedDirRoot, absoluteFilePath); + typesAndLocalModulePathsForFile(projectRoot, watchedDirRootAbolutePath, absoluteFilePath); if (filesWatched && fileWatchedWithAnyNativeExtension(absoluteFilePath, filesWatched)) { filesWatched.add(absoluteFilePath); @@ -272,7 +275,7 @@ async function generateMirrorDirectories( const generateExportsAndTypesForDirectory = async ( absoluteDirPath: string, - watchedDirRoot: string + watchedDirRootAbolutePath: string ) => { for (const glob of excludePathsGlobs(projectRoot)) { if (path.matchesGlob(absoluteDirPath, glob)) { @@ -286,11 +289,16 @@ async function generateMirrorDirectories( if ( dirent.isFile() && isValidLocalModuleFileName(dirent.name) && - absoluteDirentPath.startsWith(watchedDirRoot) + absoluteDirentPath.startsWith(watchedDirRootAbolutePath) ) { - onSourceFileCreated(projectRoot, watchedDirRoot, absoluteDirentPath, filesWatched); + onSourceFileCreated( + projectRoot, + watchedDirRootAbolutePath, + absoluteDirentPath, + filesWatched + ); } else if (dirent.isDirectory()) { - await generateExportsAndTypesForDirectory(absoluteDirentPath, watchedDirRoot); + await generateExportsAndTypesForDirectory(absoluteDirentPath, watchedDirRootAbolutePath); } } }; @@ -352,9 +360,9 @@ export async function startModuleGenerationAsync({ } }; - const onSourceFileRemoved = (absoluteFilePath: string, watchedDirRoot: string) => { + const onSourceFileRemoved = (absoluteFilePath: string, watchedDirRootAbolutePath: string) => { const { moduleTypesFilePath, moduleExportPath, viewExportPath, viewTypesFilePath } = - typesAndLocalModulePathsForFile(projectRoot, watchedDirRoot, absoluteFilePath); + typesAndLocalModulePathsForFile(projectRoot, watchedDirRootAbolutePath, absoluteFilePath); filesWatched.delete(absoluteFilePath); if (!fileWatchedWithAnyNativeExtension(absoluteFilePath, filesWatched)) { @@ -379,9 +387,9 @@ export async function startModuleGenerationAsync({ const listener = async ({ eventsQueue }: { eventsQueue: EventsQueue }) => { for (const event of eventsQueue) { - const watchedDirAncestor = getWatchedDirAncestor( + const watchedDirAncestor = getWatchedDirAncestorAbsolutePath( projectRoot, - fs.realpathSync(event.filePath) + path.resolve(event.filePath) ); if ( eventTypes.includes(event.type) && @@ -390,7 +398,7 @@ export async function startModuleGenerationAsync({ ) { const { filePath } = event; if (event.type === 'add') { - onSourceFileCreated(projectRoot, filePath, watchedDirAncestor, filesWatched); + onSourceFileCreated(projectRoot, watchedDirAncestor, filePath, filesWatched); } else if (event.type === 'delete') { onSourceFileRemoved(filePath, watchedDirAncestor); } From 240e4f91a1bdee7c2680da4fa808fe1d9a189ccc Mon Sep 17 00:00:00 2001 From: HubertBer Date: Mon, 29 Sep 2025 11:38:29 +0200 Subject: [PATCH 3/3] simplify watcher --- packages/@expo/cli/src/localModules/generation.ts | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/packages/@expo/cli/src/localModules/generation.ts b/packages/@expo/cli/src/localModules/generation.ts index cb1eb74e1dc580..789a243b974706 100644 --- a/packages/@expo/cli/src/localModules/generation.ts +++ b/packages/@expo/cli/src/localModules/generation.ts @@ -348,11 +348,7 @@ export async function startModuleGenerationAsync({ createFreshMirrorDirectories(projectRoot); const removeFileAndEmptyDirectories = (absoluteFilePath: string) => { - if (fs.lstatSync(absoluteFilePath).isSymbolicLink()) { - fs.unlinkSync(absoluteFilePath); - } else { - fs.rmSync(absoluteFilePath); - } + fs.rmSync(absoluteFilePath); let dirNow: string = path.dirname(absoluteFilePath); while (fs.readdirSync(dirNow).length === 0 && dirNow !== dotExpoDir) { fs.rmdirSync(dirNow);