From 0bb4ef4b2252d823501a8338b12d4ab6fbd038d6 Mon Sep 17 00:00:00 2001 From: artus9033 Date: Thu, 15 Jan 2026 22:08:03 +0100 Subject: [PATCH 1/5] feat: bin script wrappers for brownie & brownfield packages --- packages/brownie/package.json | 3 +++ packages/brownie/src/scripts/brownfield.ts | 5 +++++ packages/cli/package.json | 5 +++-- packages/cli/src/index.ts | 10 +++++----- packages/cli/src/main.ts | 5 +++++ packages/cli/tsconfig.json | 4 ++-- packages/react-native-brownfield/package.json | 3 +++ .../react-native-brownfield/src/scripts/brownfield.ts | 5 +++++ yarn.lock | 8 +++++--- 9 files changed, 36 insertions(+), 12 deletions(-) create mode 100644 packages/brownie/src/scripts/brownfield.ts create mode 100644 packages/cli/src/main.ts create mode 100644 packages/react-native-brownfield/src/scripts/brownfield.ts diff --git a/packages/brownie/package.json b/packages/brownie/package.json index e7fbda0c..3ba3c8e3 100644 --- a/packages/brownie/package.json +++ b/packages/brownie/package.json @@ -3,6 +3,9 @@ "version": "0.0.1", "license": "MIT", "author": "Oskar Kwaƛniewski ", + "bin": { + "brownfield": "./lib/commonjs/scripts/brownfield.js" + }, "contributors": [ "Artur Morys-Magiera ", "Oskar Kwasniewski " diff --git a/packages/brownie/src/scripts/brownfield.ts b/packages/brownie/src/scripts/brownfield.ts new file mode 100644 index 00000000..0b38f185 --- /dev/null +++ b/packages/brownie/src/scripts/brownfield.ts @@ -0,0 +1,5 @@ +#!/usr/bin/env node + +import { runCLI } from '@callstack/brownfield-cli'; + +runCLI(process.argv); diff --git a/packages/cli/package.json b/packages/cli/package.json index c0b089bb..b3a176a2 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -4,7 +4,7 @@ "license": "MIT", "author": "Artur Morys-Magiera ", "bin": { - "brownfield": "./dist/index.js" + "brownfield": "./dist/main.js" }, "type": "module", "contributors": [ @@ -15,7 +15,8 @@ "description": "Brownfield CLI for React Native, gathering all packages of the RN brownfield ecosystem", "exports": { ".": { - "source": "./src/index.ts" + "source": "./src/index.ts", + "default": "./dist/main.js" }, "./package.json": "./package.json" }, diff --git a/packages/cli/src/index.ts b/packages/cli/src/index.ts index 57d8fd48..1c6ff762 100644 --- a/packages/cli/src/index.ts +++ b/packages/cli/src/index.ts @@ -1,5 +1,3 @@ -#!/usr/bin/env node - import { styleText } from 'node:util'; import { logger } from '@rock-js/tools'; @@ -77,8 +75,10 @@ registrationHelper(brownieCommands, brownieCommandsGroupName); program.commandsGroup('Utility commands').helpCommand('help [command]'); -program.parse(process.argv); +export function runCLI(argv: string[]): void { + program.parse(argv); -if (!process.argv.slice(2).length) { - program.outputHelp(); + if (!argv.slice(2).length) { + program.outputHelp(); + } } diff --git a/packages/cli/src/main.ts b/packages/cli/src/main.ts new file mode 100644 index 00000000..e49223db --- /dev/null +++ b/packages/cli/src/main.ts @@ -0,0 +1,5 @@ +#!/usr/bin/env node + +import { runCLI } from './index.js'; + +runCLI(process.argv); diff --git a/packages/cli/tsconfig.json b/packages/cli/tsconfig.json index 61320ae8..417b0251 100644 --- a/packages/cli/tsconfig.json +++ b/packages/cli/tsconfig.json @@ -26,9 +26,9 @@ // "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */ /* Modules */ - "module": "node16", /* Specify what module code is generated. */ + "module": "esnext", /* Specify what module code is generated. */ "rootDir": "./src", /* Specify the root folder within your source files. */ - "moduleResolution": "node16", /* Specify how TypeScript looks up a file from a given module specifier. */ + "moduleResolution": "bundler", /* Specify how TypeScript looks up a file from a given module specifier. */ // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */ // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */ // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ diff --git a/packages/react-native-brownfield/package.json b/packages/react-native-brownfield/package.json index 8823b557..9a783be3 100644 --- a/packages/react-native-brownfield/package.json +++ b/packages/react-native-brownfield/package.json @@ -3,6 +3,9 @@ "version": "2.0.1", "license": "MIT", "author": "Michal Chudziak ", + "bin": { + "brownfield": "./lib/commonjs/scripts/brownfield.js" + }, "contributors": [ "Piotr Drapich " ], diff --git a/packages/react-native-brownfield/src/scripts/brownfield.ts b/packages/react-native-brownfield/src/scripts/brownfield.ts new file mode 100644 index 00000000..0b38f185 --- /dev/null +++ b/packages/react-native-brownfield/src/scripts/brownfield.ts @@ -0,0 +1,5 @@ +#!/usr/bin/env node + +import { runCLI } from '@callstack/brownfield-cli'; + +runCLI(process.argv); diff --git a/yarn.lock b/yarn.lock index 788c25c2..f1d7dd83 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2176,7 +2176,7 @@ __metadata: "@react-native-community/cli-config": "*" "@react-native-community/cli-config-android": "*" bin: - brownfield: ./dist/index.js + brownfield: ./dist/main.js languageName: unknown linkType: soft @@ -2199,7 +2199,6 @@ __metadata: "@babel/core": "npm:^7.25.2" "@babel/preset-env": "npm:^7.25.3" "@babel/runtime": "npm:^7.25.0" - "@callstack/brownfield-cli": "workspace:^" "@callstack/brownie": "npm:*" "@callstack/react-native-brownfield": "npm:*" "@react-native-community/cli": "npm:20.0.0" @@ -2284,6 +2283,8 @@ __metadata: peerDependencies: react: "*" react-native: "*" + bin: + brownfield: ./lib/commonjs/scripts/brownfield.js languageName: unknown linkType: soft @@ -2294,7 +2295,6 @@ __metadata: "@babel/core": "npm:^7.25.2" "@babel/preset-env": "npm:^7.25.3" "@babel/runtime": "npm:^7.25.0" - "@callstack/brownfield-cli": "workspace:^" "@callstack/brownie": "npm:*" "@callstack/react-native-brownfield": "npm:*" "@react-native-community/cli": "npm:20.0.0" @@ -2336,6 +2336,8 @@ __metadata: peerDependencies: react: "*" react-native: "*" + bin: + brownfield: ./lib/commonjs/scripts/brownfield.js languageName: unknown linkType: soft From 62183117f5a2645c6a750269b94791d2fbccd3ef Mon Sep 17 00:00:00 2001 From: artus9033 Date: Thu, 15 Jan 2026 23:30:04 +0100 Subject: [PATCH 2/5] fix: typescript compilation issues --- packages/cli/src/brownfield/utils/rn-cli.ts | 2 +- packages/cli/src/brownie/__fixtures__/SecondStore.brownie.ts | 1 - packages/cli/src/brownie/__fixtures__/TestStore.brownie.ts | 1 - packages/cli/src/brownie/commands/codegen.ts | 2 +- 4 files changed, 2 insertions(+), 4 deletions(-) diff --git a/packages/cli/src/brownfield/utils/rn-cli.ts b/packages/cli/src/brownfield/utils/rn-cli.ts index 9e900a9f..13cfd6bd 100644 --- a/packages/cli/src/brownfield/utils/rn-cli.ts +++ b/packages/cli/src/brownfield/utils/rn-cli.ts @@ -22,7 +22,7 @@ export function getProjectInfo( } { const projectRoot = findProjectRoot(); - const userConfig = cliConfig.default({ + const userConfig = cliConfig({ projectRoot, selectedPlatform: platform, }); diff --git a/packages/cli/src/brownie/__fixtures__/SecondStore.brownie.ts b/packages/cli/src/brownie/__fixtures__/SecondStore.brownie.ts index b2cec366..2d5a6162 100644 --- a/packages/cli/src/brownie/__fixtures__/SecondStore.brownie.ts +++ b/packages/cli/src/brownie/__fixtures__/SecondStore.brownie.ts @@ -3,7 +3,6 @@ type SecondStore = { enabled: boolean; }; -// @ts-expect-error: inexistent module augmentation declare module '@callstack/brownie' { interface BrownieStores { SecondStore: SecondStore; diff --git a/packages/cli/src/brownie/__fixtures__/TestStore.brownie.ts b/packages/cli/src/brownie/__fixtures__/TestStore.brownie.ts index f84ed5e3..06e40f1f 100644 --- a/packages/cli/src/brownie/__fixtures__/TestStore.brownie.ts +++ b/packages/cli/src/brownie/__fixtures__/TestStore.brownie.ts @@ -4,7 +4,6 @@ type TestStore = { isActive: boolean; }; -// @ts-expect-error: inexistent module augmentation declare module '@callstack/brownie' { interface BrownieStores { TestStore: TestStore; diff --git a/packages/cli/src/brownie/commands/codegen.ts b/packages/cli/src/brownie/commands/codegen.ts index 184642bf..43c27484 100644 --- a/packages/cli/src/brownie/commands/codegen.ts +++ b/packages/cli/src/brownie/commands/codegen.ts @@ -14,7 +14,7 @@ import { import { generateSwift } from '../generators/swift.js'; import { generateKotlin } from '../generators/kotlin.js'; import { discoverStores, type DiscoveredStore } from '../store-discovery.js'; -import { Platform } from '../types.js'; +import type { Platform } from '../types.js'; function getOutputPath(dir: string, name: string, ext: string): string { return path.join(dir, `${name}.${ext}`); From 14f1556399e9f2abcc0733bbc4d42442cc7480ea Mon Sep 17 00:00:00 2001 From: artus9033 Date: Thu, 15 Jan 2026 23:30:38 +0100 Subject: [PATCH 3/5] chore: use CLI script provided by brownfield & brownie in demo apps --- apps/RNApp/package.json | 1 - apps/TesterIntegrated/package.json | 1 - 2 files changed, 2 deletions(-) diff --git a/apps/RNApp/package.json b/apps/RNApp/package.json index c2046bc8..cb1c0aaa 100644 --- a/apps/RNApp/package.json +++ b/apps/RNApp/package.json @@ -30,7 +30,6 @@ "@babel/core": "^7.25.2", "@babel/preset-env": "^7.25.3", "@babel/runtime": "^7.25.0", - "@callstack/brownfield-cli": "workspace:^", "@react-native-community/cli": "20.0.0", "@react-native-community/cli-platform-android": "20.0.0", "@react-native-community/cli-platform-ios": "20.0.0", diff --git a/apps/TesterIntegrated/package.json b/apps/TesterIntegrated/package.json index f70fc8c6..f1ebedaa 100644 --- a/apps/TesterIntegrated/package.json +++ b/apps/TesterIntegrated/package.json @@ -23,7 +23,6 @@ "@babel/core": "^7.25.2", "@babel/preset-env": "^7.25.3", "@babel/runtime": "^7.25.0", - "@callstack/brownfield-cli": "workspace:^", "@react-native-community/cli": "20.0.0", "@react-native-community/cli-platform-android": "20.0.0", "@react-native-community/cli-platform-ios": "20.0.0", From e23627c2fadbef04f5bd65a0b2d7bf65b0852cf5 Mon Sep 17 00:00:00 2001 From: artus9033 Date: Fri, 16 Jan 2026 12:34:39 +0100 Subject: [PATCH 4/5] fix: exports in cli package.json --- packages/cli/package.json | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/packages/cli/package.json b/packages/cli/package.json index b3a176a2..c022d00a 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -16,7 +16,18 @@ "exports": { ".": { "source": "./src/index.ts", - "default": "./dist/main.js" + "types": "./dist/index.d.ts", + "default": "./dist/index.js" + }, + "./brownfield": { + "source": "./src/brownfield/index.ts", + "types": "./dist/brownfield/index.d.ts", + "default": "./dist/brownfield/index.js" + }, + "./brownie": { + "source": "./src/brownie/index.ts", + "types": "./dist/brownie/index.d.ts", + "default": "./dist/brownie/index.js" }, "./package.json": "./package.json" }, From 2cb47487ddf6531466fce497cd292a363c5f3dec Mon Sep 17 00:00:00 2001 From: artus9033 Date: Fri, 16 Jan 2026 13:09:01 +0100 Subject: [PATCH 5/5] fix: normalize CJS/ESM interop for cli-config --- packages/cli/src/brownfield/utils/rn-cli.ts | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/packages/cli/src/brownfield/utils/rn-cli.ts b/packages/cli/src/brownfield/utils/rn-cli.ts index 13cfd6bd..e38f6428 100644 --- a/packages/cli/src/brownfield/utils/rn-cli.ts +++ b/packages/cli/src/brownfield/utils/rn-cli.ts @@ -4,7 +4,13 @@ import type { Config as UserConfig, ProjectConfig, } from '@react-native-community/cli-types'; -import cliConfig from '@react-native-community/cli-config'; +import cliConfigImport from '@react-native-community/cli-config'; + +const cliConfig: typeof cliConfigImport = + typeof cliConfigImport === 'function' + ? cliConfigImport + : // @ts-expect-error: interop default + cliConfigImport.default; import { findProjectRoot, makeRelativeProjectConfigPaths } from './paths.js';