Skip to content

Commit fe96d24

Browse files
authored
fix: Only generate code if platform is actually used (#395)
* chore(nitro-config): adds a json schema for the nitro config file * feat: allow platform-specific code generation based on `<{platform:lang}>` specified in when creating a hybrid object Currently, nitrogen generates code for all platforms (code/hybrid objects) regardless of the platform specified in `<{platform:lang}>` generic tags. This PR modifies the code generation to respect these platform tags and only generate the necessary code for the specified platforms. For example: - `<{ios:'swift'|'c++'}>` will only generate iOS-specific code - `<{android:'kotlin'|'c++'}>` will only generate Android-specific code This change improves efficiency by preventing unnecessary code generation for unused platforms. * Delete nitro.schema.json * chore: adds usedPlatforms
1 parent 518f2b2 commit fe96d24

File tree

1 file changed

+13
-3
lines changed

1 file changed

+13
-3
lines changed

packages/nitrogen/src/nitrogen.ts

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import { Logger } from './Logger.js'
1616
import { NitroConfig } from './config/NitroConfig.js'
1717
import { createIOSAutolinking } from './autolinking/createIOSAutolinking.js'
1818
import { createAndroidAutolinking } from './autolinking/createAndroidAutolinking.js'
19+
import type { Autolinking } from './autolinking/Autolinking.js'
1920

2021
interface NitrogenOptions {
2122
baseDirectory: string
@@ -78,6 +79,7 @@ export async function runNitrogen({
7879
process.exit()
7980
}
8081

82+
const usedPlatforms: Platform[] = []
8183
const filesAfter: string[] = []
8284
const writtenFiles: SourceFile[] = []
8385

@@ -102,6 +104,7 @@ export async function runNitrogen({
102104
}
103105

104106
const platforms = Object.keys(platformSpec) as Platform[]
107+
105108
if (platforms.length === 0) {
106109
console.warn(
107110
`⚠️ ${moduleName} does not declare any platforms in HybridObject<T> - nothing can be generated.`
@@ -118,6 +121,7 @@ export async function runNitrogen({
118121
// Create all files and throw it into a big list
119122
const allFiles = platforms
120123
.flatMap((p) => {
124+
usedPlatforms.push(p)
121125
const language = platformSpec[p]!
122126
return generatePlatformFiles(module.getType(), language)
123127
})
@@ -178,10 +182,16 @@ export async function runNitrogen({
178182

179183
// Autolinking
180184
Logger.info(`⛓️ Setting up build configs for autolinking...`)
181-
const iosFiles = createIOSAutolinking()
182-
const androidFiles = createAndroidAutolinking(writtenFiles)
183185

184-
const autolinkingFiles = [iosFiles, androidFiles]
186+
const autolinkingFiles: Autolinking[] = []
187+
188+
if (usedPlatforms.includes('ios')) {
189+
autolinkingFiles.push(createIOSAutolinking())
190+
}
191+
if (usedPlatforms.includes('android')) {
192+
autolinkingFiles.push(createAndroidAutolinking(writtenFiles))
193+
}
194+
185195
for (const autolinking of autolinkingFiles) {
186196
Logger.info(
187197
` Creating autolinking build setup for ${chalk.dim(autolinking.platform)}...`

0 commit comments

Comments
 (0)