@callstack/brownfield-cli 3.11.0 → 3.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/dist/brownfield/commands/packageAndroid.d.ts.map +1 -1
  3. package/dist/brownfield/commands/packageAndroid.js +3 -3
  4. package/dist/brownfield/commands/packageIos.d.ts.map +1 -1
  5. package/dist/brownfield/commands/packageIos.js +4 -2
  6. package/dist/brownfield/commands/publishAndroid.d.ts.map +1 -1
  7. package/dist/brownfield/commands/publishAndroid.js +3 -1
  8. package/dist/brownie/commands/codegen.d.ts +4 -2
  9. package/dist/brownie/commands/codegen.d.ts.map +1 -1
  10. package/dist/brownie/commands/codegen.js +15 -7
  11. package/dist/brownie/config.d.ts +19 -5
  12. package/dist/brownie/config.d.ts.map +1 -1
  13. package/dist/brownie/config.js +45 -9
  14. package/dist/brownie/helpers/runBrownieCodegenIfApplicable.d.ts +1 -1
  15. package/dist/brownie/helpers/runBrownieCodegenIfApplicable.d.ts.map +1 -1
  16. package/dist/brownie/helpers/runBrownieCodegenIfApplicable.js +1 -1
  17. package/dist/brownie/index.d.ts +0 -1
  18. package/dist/brownie/index.d.ts.map +1 -1
  19. package/dist/config.d.ts +7 -0
  20. package/dist/config.d.ts.map +1 -0
  21. package/dist/config.js +72 -0
  22. package/dist/navigation/commands/codegen.d.ts.map +1 -1
  23. package/dist/navigation/generators/ts.d.ts.map +1 -1
  24. package/dist/navigation/generators/ts.js +53 -4
  25. package/dist/navigation/runner.d.ts.map +1 -1
  26. package/dist/navigation/runner.js +16 -12
  27. package/dist/shared/utils/cli.d.ts +1 -1
  28. package/dist/shared/utils/cli.d.ts.map +1 -1
  29. package/dist/types.d.ts +30 -0
  30. package/dist/types.d.ts.map +1 -0
  31. package/package.json +9 -1
  32. package/src/brownfield/commands/packageAndroid.ts +5 -6
  33. package/src/brownfield/commands/packageIos.ts +18 -18
  34. package/src/brownfield/commands/publishAndroid.ts +4 -1
  35. package/src/brownie/commands/codegen.ts +35 -10
  36. package/src/brownie/config.ts +72 -15
  37. package/src/brownie/helpers/runBrownieCodegenIfApplicable.ts +2 -2
  38. package/src/brownie/index.ts +0 -1
  39. package/src/config.ts +119 -0
  40. package/src/navigation/commands/codegen.ts +1 -3
  41. package/src/navigation/generators/ts.ts +61 -3
  42. package/src/navigation/runner.ts +17 -12
  43. package/src/shared/utils/cli.ts +4 -2
  44. package/src/types.ts +51 -0
  45. package/dist/brownie/types.d.ts +0 -2
  46. package/dist/brownie/types.d.ts.map +0 -1
  47. package/src/brownie/types.ts +0 -1
  48. /package/dist/{brownie/types.js → types.js} +0 -0
package/CHANGELOG.md CHANGED
@@ -1,5 +1,13 @@
1
1
  # @callstack/brownfield-cli
2
2
 
3
+ ## 3.13.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [#339](https://github.com/callstack/react-native-brownfield/pull/339) [`ef835b5`](https://github.com/callstack/react-native-brownfield/commit/ef835b52a130e4cd8770a2db04402cbb066b9c27) Thanks [@Esemesek](https://github.com/Esemesek)! - Added configuration file support for react-native-brownfield packages.
8
+
9
+ ## 3.12.0
10
+
3
11
  ## 3.11.0
4
12
 
5
13
  ### Minor Changes
@@ -1 +1 @@
1
- {"version":3,"file":"packageAndroid.d.ts","sourceRoot":"","sources":["../../../src/brownfield/commands/packageAndroid.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQpC,OAAO,EACL,YAAY,EAGb,MAAM,uBAAuB,CAAC;AAM/B,eAAO,MAAM,qBAAqB,SAyBjC,CAAC;AAEF,eAAO,MAAM,qBAAqB,cAGjC,CAAC"}
1
+ {"version":3,"file":"packageAndroid.d.ts","sourceRoot":"","sources":["../../../src/brownfield/commands/packageAndroid.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQpC,OAAO,EACL,YAAY,EAGb,MAAM,uBAAuB,CAAC;AAO/B,eAAO,MAAM,qBAAqB,SAuBjC,CAAC;AAEF,eAAO,MAAM,qBAAqB,cAGjC,CAAC"}
@@ -6,9 +6,9 @@ import { runExpoPrebuildIfNeeded } from '../utils/expo.js';
6
6
  import { getProjectInfo } from '../utils/project.js';
7
7
  import { runBrownieCodegenIfApplicable } from '../../brownie/helpers/runBrownieCodegenIfApplicable.js';
8
8
  import { runNavigationCodegenIfApplicable } from '../../navigation/helpers/runNavigationCodegenIfApplicable.js';
9
- export const packageAndroidCommand = curryOptions(new Command('package:android').description('Build Android AAR'), packageAarOptions.map((option) => option.name.startsWith('--variant')
10
- ? { ...option, default: 'debug' }
11
- : option)).action(actionRunner(async (options) => {
9
+ import { mergeBrownfieldConfigWithOptions } from '../../config.js';
10
+ export const packageAndroidCommand = curryOptions(new Command('package:android').description('Build Android AAR'), packageAarOptions).action(actionRunner(async (cliOptions) => {
11
+ const options = mergeBrownfieldConfigWithOptions(cliOptions, 'android');
12
12
  const { projectRoot, platformConfig } = getProjectInfo('android');
13
13
  await runExpoPrebuildIfNeeded({
14
14
  projectRoot,
@@ -1 +1 @@
1
- {"version":3,"file":"packageIos.d.ts","sourceRoot":"","sources":["../../../src/brownfield/commands/packageIos.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,OAAO,EAAU,MAAM,WAAW,CAAC;AAK5C,OAAO,EAGL,YAAY,EACb,MAAM,uBAAuB,CAAC;AAe/B,wBAAgB,8BAA8B,CAC5C,KAAK,EAAE,MAAM,GAAG,OAAO,GACtB,OAAO,CAcT;AAqBD,eAAO,MAAM,iBAAiB,SA8P3B,CAAC;AAEJ,eAAO,MAAM,iBAAiB,cAG7B,CAAC"}
1
+ {"version":3,"file":"packageIos.d.ts","sourceRoot":"","sources":["../../../src/brownfield/commands/packageIos.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,OAAO,EAAU,MAAM,WAAW,CAAC;AAK5C,OAAO,EAGL,YAAY,EACb,MAAM,uBAAuB,CAAC;AAiB/B,wBAAgB,8BAA8B,CAC5C,KAAK,EAAE,MAAM,GAAG,OAAO,GACtB,OAAO,CAcT;AAcD,eAAO,MAAM,iBAAiB,SAoQ3B,CAAC;AAEJ,eAAO,MAAM,iBAAiB,cAG7B,CAAC"}
@@ -14,6 +14,7 @@ import { copyDebugBundleToSimulatorSlice } from '../utils/copyDebugBundleToSimul
14
14
  import { resolvePackagedFrameworkName } from '../utils/resolvePackagedFrameworkName.js';
15
15
  import { stripFrameworkBinary } from '../utils/stripFrameworkBinary.js';
16
16
  import { createLocalSpmPackage } from '../utils/createLocalSpmPackage.js';
17
+ import { mergeBrownfieldConfigWithOptions } from '../../config.js';
17
18
  /** Help text for `--use-prebuilt-rn-core` (keep in sync with docs/docs/docs/getting-started/ios.mdx, "React Native Prebuilts" section). */
18
19
  const USE_PREBUILT_RN_CORE_HELP = 'Whether the Xcode build for packaging should use React Native Apple prebuilt binaries (via CocoaPods). ' +
19
20
  'If you omit this flag, Brownfield follows version-aware defaults: for React Native 0.84 and newer, prebuilts are enabled by default; for RN 0.83, they are disabled unless you opt in. ' +
@@ -48,7 +49,8 @@ export const packageIosCommand = curryOptions(new Command('package:ios').descrip
48
49
  .preset(true)
49
50
  .argParser(parseUsePrebuiltRnCoreArgument))
50
51
  .addOption(new Option('--add-spm-package', 'Generate a local Swift Package Manager manifest next to the packaged XCFramework outputs'))
51
- .action(actionRunner(async (options) => {
52
+ .action(actionRunner(async (cliOptions) => {
53
+ const options = mergeBrownfieldConfigWithOptions(cliOptions, 'ios');
52
54
  const { projectRoot, platformConfig, userConfig } = getProjectInfo('ios');
53
55
  const prebuiltRNCoreSupport = supportsPrebuiltRNCore({ projectRoot });
54
56
  // version-aware default when the flag is omitted (see ios.mdx "React Native Prebuilts")
@@ -181,7 +183,7 @@ export const packageIosCommand = curryOptions(new Command('package:ios').descrip
181
183
  });
182
184
  logger.success(`Local SPM package manifest created at ${colorLink(relativeToCwd(packageManifestPath))}`);
183
185
  logger.info(`Add the local package folder in Xcode: ${colorLink(relativeToCwd(packageDir))}`);
184
- logger.info("In Xcode, choose File > Add Package Dependencies..., click Add Local..., and select that folder.");
186
+ logger.info('In Xcode, choose File > Add Package Dependencies..., click Add Local..., and select that folder.');
185
187
  }
186
188
  }));
187
189
  export const packageIosExample = new ExampleUsage('package:ios --scheme BrownfieldLib --configuration Release', "Build iOS XCFramework for 'BrownfieldLib' scheme in Release configuration");
@@ -1 +1 @@
1
- {"version":3,"file":"publishAndroid.d.ts","sourceRoot":"","sources":["../../../src/brownfield/commands/publishAndroid.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAGL,YAAY,EACb,MAAM,uBAAuB,CAAC;AAM/B,eAAO,MAAM,qBAAqB,SAsBjC,CAAC;AAEF,eAAO,MAAM,qBAAqB,cAGjC,CAAC"}
1
+ {"version":3,"file":"publishAndroid.d.ts","sourceRoot":"","sources":["../../../src/brownfield/commands/publishAndroid.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAGL,YAAY,EACb,MAAM,uBAAuB,CAAC;AAO/B,eAAO,MAAM,qBAAqB,SAwBjC,CAAC;AAEF,eAAO,MAAM,qBAAqB,cAGjC,CAAC"}
@@ -6,7 +6,9 @@ import { getProjectInfo } from '../utils/project.js';
6
6
  import { runExpoPrebuildIfNeeded } from '../utils/expo.js';
7
7
  import { runBrownieCodegenIfApplicable } from '../../brownie/helpers/runBrownieCodegenIfApplicable.js';
8
8
  import { runNavigationCodegenIfApplicable } from '../../navigation/helpers/runNavigationCodegenIfApplicable.js';
9
- export const publishAndroidCommand = curryOptions(new Command('publish:android').description('Publish Android package to Maven local'), publishLocalAarOptions).action(actionRunner(async (options) => {
9
+ import { mergeBrownfieldConfigWithOptions } from '../../config.js';
10
+ export const publishAndroidCommand = curryOptions(new Command('publish:android').description('Publish Android package to Maven local'), publishLocalAarOptions).action(actionRunner(async (cliOptions) => {
11
+ const options = mergeBrownfieldConfigWithOptions(cliOptions, 'android');
10
12
  const { projectRoot, platformConfig } = getProjectInfo('android');
11
13
  await runExpoPrebuildIfNeeded({
12
14
  projectRoot,
@@ -1,11 +1,13 @@
1
1
  import { Command } from 'commander';
2
- import type { Platform } from '../types.js';
2
+ import type { BrownieConfig, Platform } from '../../types.js';
3
3
  export type RunCodegenOptions = {
4
4
  platform?: Platform;
5
+ brownie?: BrownieConfig;
6
+ projectRoot?: string;
5
7
  };
6
8
  /**
7
9
  * Runs the codegen command with the given arguments.
8
10
  */
9
- export declare function runCodegen({ platform }: RunCodegenOptions): Promise<void>;
11
+ export declare function runCodegen({ platform, brownie, projectRoot, }: RunCodegenOptions): Promise<void>;
10
12
  export declare const codegenCommand: Command;
11
13
  //# sourceMappingURL=codegen.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"codegen.d.ts","sourceRoot":"","sources":["../../../src/brownie/commands/codegen.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAU,MAAM,WAAW,CAAC;AAa5C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAsE5C,MAAM,MAAM,iBAAiB,GAAG;IAAE,QAAQ,CAAC,EAAE,QAAQ,CAAA;CAAE,CAAC;AAExD;;GAEG;AACH,wBAAsB,UAAU,CAAC,EAAE,QAAQ,EAAE,EAAE,iBAAiB,iBA8C/D;AAED,eAAO,MAAM,cAAc,SAYxB,CAAC"}
1
+ {"version":3,"file":"codegen.d.ts","sourceRoot":"","sources":["../../../src/brownie/commands/codegen.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAU,MAAM,WAAW,CAAC;AAc5C,OAAO,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAsE9D,MAAM,MAAM,iBAAiB,GAAG;IAC9B,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF;;GAEG;AACH,wBAAsB,UAAU,CAAC,EAC/B,QAAQ,EACR,OAAO,EACP,WAAW,GACZ,EAAE,iBAAiB,iBA8DnB;AAED,eAAO,MAAM,cAAc,SAYxB,CAAC"}
@@ -4,7 +4,8 @@ import { Command, Option } from 'commander';
4
4
  import { intro, logger, outro } from '@rock-js/tools';
5
5
  import { QuickTypeError } from 'quicktype-core';
6
6
  import { actionRunner } from '../../shared/index.js';
7
- import { loadConfig, getSwiftOutputPath, } from '../config.js';
7
+ import { getSwiftOutputPath, resolveBrownieCodegenConfig, } from '../config.js';
8
+ import { findProjectRoot } from '../../brownfield/utils/paths.js';
8
9
  import { generateSwift } from '../generators/swift.js';
9
10
  import { generateKotlin } from '../generators/kotlin.js';
10
11
  import { discoverStores } from '../store-discovery.js';
@@ -19,14 +20,14 @@ function formatQuickTypeError(error) {
19
20
  }
20
21
  return message;
21
22
  }
22
- async function generateForStore(store, config, platforms, showLabel) {
23
+ async function generateForStore(store, config, platforms, showLabel, projectRoot) {
23
24
  const { name, schemaPath } = store;
24
25
  const storeLabel = showLabel ? ` [${name}]` : '';
25
26
  logger.info(`Generating types for store ${name}`);
26
27
  for (const p of platforms) {
27
28
  let outputPath;
28
29
  if (p === 'swift') {
29
- const swiftOutputDir = getSwiftOutputPath();
30
+ const swiftOutputDir = getSwiftOutputPath(projectRoot);
30
31
  outputPath = getOutputPath(swiftOutputDir, name, 'swift');
31
32
  }
32
33
  else {
@@ -65,15 +66,22 @@ async function generateForStore(store, config, platforms, showLabel) {
65
66
  /**
66
67
  * Runs the codegen command with the given arguments.
67
68
  */
68
- export async function runCodegen({ platform }) {
69
+ export async function runCodegen({ platform, brownie, projectRoot, }) {
69
70
  intro(`Running Brownie codegen for ${platform ? `platform ${platform}` : 'all platforms'}`);
70
- const config = loadConfig();
71
+ const resolvedProjectRoot = projectRoot ?? findProjectRoot();
72
+ const { config, usedLegacyConfig } = resolveBrownieCodegenConfig({
73
+ brownie,
74
+ projectRoot: resolvedProjectRoot,
75
+ });
76
+ if (usedLegacyConfig) {
77
+ logger.warn('You are using legacy Brownie configuration. Please migrate to the new configuration format. See the documentation for more details: https://oss.callstack.com/react-native-brownfield/docs/api-reference/configuration#migrating-from-legacy-brownie-configuration');
78
+ }
71
79
  if (platform && !['swift', 'kotlin'].includes(platform)) {
72
80
  logger.error(`Invalid platform: ${platform}. Must be 'swift' or 'kotlin'`);
73
81
  process.exit(1);
74
82
  }
75
83
  try {
76
- const stores = discoverStores();
84
+ const stores = discoverStores(resolvedProjectRoot);
77
85
  const isMultipleStores = stores.length > 1;
78
86
  const schemaList = stores
79
87
  .map((s) => path.basename(s.schemaPath))
@@ -88,7 +96,7 @@ export async function runCodegen({ platform }) {
88
96
  // Generate both Swift and Kotlin by default
89
97
  platforms = ['swift', 'kotlin'];
90
98
  }
91
- await generateForStore(store, config, platforms, isMultipleStores);
99
+ await generateForStore(store, config, platforms, isMultipleStores, resolvedProjectRoot);
92
100
  }
93
101
  }
94
102
  catch (error) {
@@ -1,7 +1,4 @@
1
- export interface BrownieConfig {
2
- kotlin?: string;
3
- kotlinPackageName?: string;
4
- }
1
+ import type { BrownieConfig } from '../types.js';
5
2
  /**
6
3
  * Checks if @callstack/brownie package is installed.
7
4
  */
@@ -14,8 +11,25 @@ export declare function getBrowniePackagePath(projectRoot?: string): string;
14
11
  * Returns the output path for generated Swift files.
15
12
  */
16
13
  export declare function getSwiftOutputPath(projectRoot?: string): string;
14
+ /**
15
+ * Returns whether package.json contains legacy brownie config.
16
+ */
17
+ export declare function hasLegacyConfig(projectRoot?: string): boolean;
17
18
  /**
18
19
  * Loads brownie config from package.json in the current working directory.
19
20
  */
20
- export declare function loadConfig(): BrownieConfig;
21
+ export declare function loadConfig(projectRoot?: string): BrownieConfig;
22
+ export type ResolveBrownieCodegenConfigOptions = {
23
+ brownie?: BrownieConfig;
24
+ projectRoot?: string;
25
+ };
26
+ export type ResolvedBrownieCodegenConfig = {
27
+ config: BrownieConfig;
28
+ usedLegacyConfig: boolean;
29
+ };
30
+ /**
31
+ * Resolves Brownie codegen settings from explicit options, brownfield config,
32
+ * or legacy package.json `brownie` config.
33
+ */
34
+ export declare function resolveBrownieCodegenConfig({ brownie, projectRoot, }?: ResolveBrownieCodegenConfigOptions): ResolvedBrownieCodegenConfig;
21
35
  //# sourceMappingURL=config.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/brownie/config.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,aAAa;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAMD;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,WAAW,GAAE,MAAsB,GAClC,OAAO,CAQT;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,WAAW,GAAE,MAAsB,GAClC,MAAM,CAWR;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,WAAW,GAAE,MAAsB,GAClC,MAAM,CAGR;AAED;;GAEG;AACH,wBAAgB,UAAU,IAAI,aAAa,CAW1C"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/brownie/config.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAmBjD;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,WAAW,GAAE,MAA0B,GACtC,OAAO,CAQT;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,WAAW,GAAE,MAA0B,GACtC,MAAM,CAWR;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,WAAW,GAAE,MAA0B,GACtC,MAAM,CAGR;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,WAAW,GAAE,MAA0B,GACtC,OAAO,CAIT;AAED;;GAEG;AACH,wBAAgB,UAAU,CACxB,WAAW,GAAE,MAA0B,GACtC,aAAa,CAIf;AAED,MAAM,MAAM,kCAAkC,GAAG;IAC/C,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,4BAA4B,GAAG;IACzC,MAAM,EAAE,aAAa,CAAC;IACtB,gBAAgB,EAAE,OAAO,CAAC;CAC3B,CAAC;AAEF;;;GAGG;AACH,wBAAgB,2BAA2B,CAAC,EAC1C,OAAO,EACP,WAA+B,GAChC,GAAE,kCAAuC,GAAG,4BAA4B,CAqBxE"}
@@ -1,10 +1,20 @@
1
1
  import fs from 'node:fs';
2
2
  import path from 'node:path';
3
3
  import { createRequire } from 'node:module';
4
+ import { findProjectRoot } from '../brownfield/utils/paths.js';
5
+ import { loadBrownfieldConfig } from '../config.js';
6
+ const LEGACY_AND_NEW_BROWNIE_CONFIG_ERROR = 'Cannot use both legacy and new Brownie configuration formats simultaneously. Please migrate to the new configuration format and remove legacy configuration files: https://oss.callstack.com/react-native-brownfield/docs/api-reference/configuration#migrating-from-legacy-brownie-configuration';
7
+ function loadPackageJson(projectRoot = findProjectRoot()) {
8
+ const packageJsonPath = path.resolve(projectRoot, 'package.json');
9
+ if (!fs.existsSync(packageJsonPath)) {
10
+ throw new Error('package.json not found');
11
+ }
12
+ return JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8'));
13
+ }
4
14
  /**
5
15
  * Checks if @callstack/brownie package is installed.
6
16
  */
7
- export function isBrownieInstalled(projectRoot = process.cwd()) {
17
+ export function isBrownieInstalled(projectRoot = findProjectRoot()) {
8
18
  const require = createRequire(path.join(projectRoot, 'package.json'));
9
19
  try {
10
20
  require.resolve('@callstack/brownie/package.json');
@@ -17,7 +27,7 @@ export function isBrownieInstalled(projectRoot = process.cwd()) {
17
27
  /**
18
28
  * Resolves the path to the @callstack/brownie package.
19
29
  */
20
- export function getBrowniePackagePath(projectRoot = process.cwd()) {
30
+ export function getBrowniePackagePath(projectRoot = findProjectRoot()) {
21
31
  const require = createRequire(path.join(projectRoot, 'package.json'));
22
32
  try {
23
33
  const browniePackageJson = require.resolve('@callstack/brownie/package.json');
@@ -30,18 +40,44 @@ export function getBrowniePackagePath(projectRoot = process.cwd()) {
30
40
  /**
31
41
  * Returns the output path for generated Swift files.
32
42
  */
33
- export function getSwiftOutputPath(projectRoot = process.cwd()) {
43
+ export function getSwiftOutputPath(projectRoot = findProjectRoot()) {
34
44
  const browniePath = getBrowniePackagePath(projectRoot);
35
45
  return path.join(browniePath, 'ios', 'Generated');
36
46
  }
47
+ /**
48
+ * Returns whether package.json contains legacy brownie config.
49
+ */
50
+ export function hasLegacyConfig(projectRoot = findProjectRoot()) {
51
+ const packageJson = loadPackageJson(projectRoot);
52
+ return Object.prototype.hasOwnProperty.call(packageJson, 'brownie');
53
+ }
37
54
  /**
38
55
  * Loads brownie config from package.json in the current working directory.
39
56
  */
40
- export function loadConfig() {
41
- const packageJsonPath = path.resolve(process.cwd(), 'package.json');
42
- if (!fs.existsSync(packageJsonPath)) {
43
- throw new Error('package.json not found');
44
- }
45
- const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8'));
57
+ export function loadConfig(projectRoot = findProjectRoot()) {
58
+ const packageJson = loadPackageJson(projectRoot);
46
59
  return packageJson.brownie ?? {};
47
60
  }
61
+ /**
62
+ * Resolves Brownie codegen settings from explicit options, brownfield config,
63
+ * or legacy package.json `brownie` config.
64
+ */
65
+ export function resolveBrownieCodegenConfig({ brownie, projectRoot = findProjectRoot(), } = {}) {
66
+ const legacyConfig = hasLegacyConfig(projectRoot)
67
+ ? loadConfig(projectRoot)
68
+ : undefined;
69
+ const brownfieldBrownie = loadBrownfieldConfig(projectRoot).brownie;
70
+ if (legacyConfig !== undefined && (brownie ?? brownfieldBrownie)) {
71
+ throw new Error(LEGACY_AND_NEW_BROWNIE_CONFIG_ERROR);
72
+ }
73
+ if (legacyConfig !== undefined) {
74
+ return {
75
+ config: legacyConfig,
76
+ usedLegacyConfig: true,
77
+ };
78
+ }
79
+ return {
80
+ config: brownie ?? brownfieldBrownie ?? {},
81
+ usedLegacyConfig: false,
82
+ };
83
+ }
@@ -1,4 +1,4 @@
1
- import type { Platform } from '../types.js';
1
+ import type { Platform } from '../../types.js';
2
2
  export declare function runBrownieCodegenIfApplicable(projectRoot: string, platform: Platform): Promise<{
3
3
  hasBrownie: boolean;
4
4
  }>;
@@ -1 +1 @@
1
- {"version":3,"file":"runBrownieCodegenIfApplicable.d.ts","sourceRoot":"","sources":["../../../src/brownie/helpers/runBrownieCodegenIfApplicable.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE5C,wBAAsB,6BAA6B,CACjD,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,QAAQ;;GAQnB"}
1
+ {"version":3,"file":"runBrownieCodegenIfApplicable.d.ts","sourceRoot":"","sources":["../../../src/brownie/helpers/runBrownieCodegenIfApplicable.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE/C,wBAAsB,6BAA6B,CACjD,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,QAAQ;;GAQnB"}
@@ -3,7 +3,7 @@ import { isBrownieInstalled } from '../config.js';
3
3
  export async function runBrownieCodegenIfApplicable(projectRoot, platform) {
4
4
  const hasBrownie = isBrownieInstalled(projectRoot);
5
5
  if (hasBrownie) {
6
- await runCodegen({ platform });
6
+ await runCodegen({ platform, projectRoot });
7
7
  }
8
8
  return { hasBrownie };
9
9
  }
@@ -1,5 +1,4 @@
1
1
  import * as Commands from './commands/index.js';
2
- export type * from './types.js';
3
2
  export * from './store-discovery.js';
4
3
  export declare const groupName: string;
5
4
  export { Commands };
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/brownie/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,QAAQ,MAAM,qBAAqB,CAAC;AAEhD,mBAAmB,YAAY,CAAC;AAChC,cAAc,sBAAsB,CAAC;AAErC,eAAO,MAAM,SAAS,QAAwJ,CAAC;AAE/K,OAAO,EAAE,QAAQ,EAAE,CAAC;AACpB,eAAe,QAAQ,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/brownie/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,QAAQ,MAAM,qBAAqB,CAAC;AAEhD,cAAc,sBAAsB,CAAC;AAErC,eAAO,MAAM,SAAS,QAAwJ,CAAC;AAE/K,OAAO,EAAE,QAAQ,EAAE,CAAC;AACpB,eAAe,QAAQ,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { BrownfieldConfig } from './types.js';
2
+ export declare function validateBrownfieldCLIConfig(config: unknown): void;
3
+ export declare function loadBrownfieldConfig(projectRoot?: string): BrownfieldConfig;
4
+ type BrownfieldPlatform = 'android' | 'ios';
5
+ export declare function mergeBrownfieldConfigWithOptions<T extends object>(options: T, platform: BrownfieldPlatform): T;
6
+ export {};
7
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAenD,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,CAMjE;AAED,wBAAgB,oBAAoB,CAClC,WAAW,GAAE,MAA0B,GACtC,gBAAgB,CA2BlB;AAED,KAAK,kBAAkB,GAAG,SAAS,GAAG,KAAK,CAAC;AAe5C,wBAAgB,gCAAgC,CAAC,CAAC,SAAS,MAAM,EAC/D,OAAO,EAAE,CAAC,EACV,QAAQ,EAAE,kBAAkB,GAC3B,CAAC,CAwCH"}
package/dist/config.js ADDED
@@ -0,0 +1,72 @@
1
+ import fs from 'node:fs';
2
+ import { createRequire } from 'node:module';
3
+ import path from 'node:path';
4
+ import Ajv from 'ajv';
5
+ import { findProjectRoot } from './brownfield/utils/paths.js';
6
+ import BrownfieldSchema from '../schema.json' with { type: 'json' };
7
+ import { logger } from '@rock-js/tools';
8
+ const CONFIG_BASE_NAME = 'brownfield';
9
+ const JS_CONFIG_FILE_NAME = `${CONFIG_BASE_NAME}.config.js`;
10
+ const JSON_CONFIG_FILE_NAME = `${CONFIG_BASE_NAME}.config.json`;
11
+ const SEPARATOR = '\n● ';
12
+ const ajv = new Ajv({ allErrors: true });
13
+ const validateBrownfieldConfig = ajv.compile(BrownfieldSchema);
14
+ export function validateBrownfieldCLIConfig(config) {
15
+ if (!validateBrownfieldConfig(config)) {
16
+ logger.warn(`Brownfield configuration has some issues: ${SEPARATOR}${ajv.errorsText(validateBrownfieldConfig.errors, { separator: SEPARATOR, dataVar: 'config' })}.`);
17
+ }
18
+ }
19
+ export function loadBrownfieldConfig(projectRoot = findProjectRoot()) {
20
+ const require = createRequire(path.join(projectRoot, 'package.json'));
21
+ const jsConfigFilePath = path.join(projectRoot, JS_CONFIG_FILE_NAME);
22
+ const jsonConfigFilePath = path.join(projectRoot, JSON_CONFIG_FILE_NAME);
23
+ const packageJsonPath = path.join(projectRoot, 'package.json');
24
+ const packageJson = require(packageJsonPath);
25
+ if ([
26
+ fs.existsSync(jsConfigFilePath),
27
+ fs.existsSync(jsonConfigFilePath),
28
+ packageJson[CONFIG_BASE_NAME],
29
+ ].filter(Boolean).length > 1) {
30
+ throw new Error('Project has multiple Brownfield configuration files');
31
+ }
32
+ if (fs.existsSync(jsConfigFilePath)) {
33
+ return require(jsConfigFilePath);
34
+ }
35
+ if (fs.existsSync(jsonConfigFilePath)) {
36
+ return require(jsonConfigFilePath);
37
+ }
38
+ return packageJson[CONFIG_BASE_NAME] || {};
39
+ }
40
+ function getSharedConfig(config) {
41
+ return config.verbose === undefined ? {} : { verbose: config.verbose };
42
+ }
43
+ function formatConfigValue(value) {
44
+ return typeof value === 'string' ? value : JSON.stringify(value);
45
+ }
46
+ function areConfigValuesEqual(configValue, optionValue) {
47
+ return JSON.stringify(configValue) === JSON.stringify(optionValue);
48
+ }
49
+ export function mergeBrownfieldConfigWithOptions(options, platform) {
50
+ const reactNativeBrownfieldConfig = loadBrownfieldConfig();
51
+ validateBrownfieldCLIConfig(reactNativeBrownfieldConfig);
52
+ const platformConfig = {
53
+ ...getSharedConfig(reactNativeBrownfieldConfig),
54
+ ...reactNativeBrownfieldConfig[platform],
55
+ };
56
+ const cliOptions = Object.fromEntries(Object.entries(options).filter(([, value]) => value !== undefined));
57
+ for (const [key, value] of Object.entries(cliOptions)) {
58
+ const configValue = platformConfig[key];
59
+ if (configValue !== undefined &&
60
+ !areConfigValuesEqual(configValue, value)) {
61
+ logger.warn('CLI option "%s" is overriding the react-native-brownfield config value: %s -> %s.', key, formatConfigValue(configValue), formatConfigValue(value));
62
+ }
63
+ }
64
+ const mergedOptions = {
65
+ ...platformConfig,
66
+ ...cliOptions,
67
+ };
68
+ if (typeof mergedOptions.verbose === 'boolean') {
69
+ logger.setVerbose(mergedOptions.verbose);
70
+ }
71
+ return mergedOptions;
72
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"codegen.d.ts","sourceRoot":"","sources":["../../../src/navigation/commands/codegen.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAUpC,UAAU,8BAA8B;IACtC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,wBAAsB,2BAA2B,CAAC,EAChD,QAAQ,EACR,MAAc,GACf,EAAE,8BAA8B,GAAG,OAAO,CAAC,IAAI,CAAC,CAOhD;AAED,eAAO,MAAM,wBAAwB,SA6BlC,CAAC"}
1
+ {"version":3,"file":"codegen.d.ts","sourceRoot":"","sources":["../../../src/navigation/commands/codegen.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAUpC,UAAU,8BAA8B;IACtC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,wBAAsB,2BAA2B,CAAC,EAChD,QAAQ,EACR,MAAc,GACf,EAAE,8BAA8B,GAAG,OAAO,CAAC,IAAI,CAAC,CAOhD;AAED,eAAO,MAAM,wBAAwB,SA2BlC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"ts.d.ts","sourceRoot":"","sources":["../../../src/navigation/generators/ts.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEpE,UAAU,0BAA0B;IAClC,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;CAC3B;AAkBD,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,eAAe,EAAE,EAC1B,0BAA0B,GAAE,eAAe,EAAO,EAClD,OAAO,GAAE,0BAA+B,GACvC,MAAM,CA2BR;AAaD,wBAAgB,eAAe,CAC7B,OAAO,EAAE,eAAe,EAAE,EAC1B,0BAA0B,GAAE,eAAe,EAAO,GACjD,MAAM,CA+BR;AAED,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,GAClB,MAAM,CA0CR;AAED,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,eAAe,EAAE,EAC1B,0BAA0B,GAAE,eAAe,EAAO,GACjD,MAAM,CAiBR"}
1
+ {"version":3,"file":"ts.d.ts","sourceRoot":"","sources":["../../../src/navigation/generators/ts.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEpE,UAAU,0BAA0B;IAClC,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;CAC3B;AAkBD,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,eAAe,EAAE,EAC1B,0BAA0B,GAAE,eAAe,EAAO,EAClD,OAAO,GAAE,0BAA+B,GACvC,MAAM,CA2BR;AAuED,wBAAgB,eAAe,CAC7B,OAAO,EAAE,eAAe,EAAE,EAC1B,0BAA0B,GAAE,eAAe,EAAO,GACjD,MAAM,CA+BR;AAED,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,GAClB,MAAM,CA0CR;AAED,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,eAAe,EAAE,EAC1B,0BAA0B,GAAE,eAAe,EAAO,GACjD,MAAM,CAiBR"}
@@ -33,15 +33,64 @@ export default TurboModuleRegistry.getEnforcing<Spec>(
33
33
  );
34
34
  `;
35
35
  }
36
- function buildTypeImportLine(referencedTypeDeclarations) {
36
+ const SKIP_TYPE_TOKENS = new Set([
37
+ 'Array',
38
+ 'Date',
39
+ 'Map',
40
+ 'Object',
41
+ 'Promise',
42
+ 'ReadonlyArray',
43
+ 'Record',
44
+ 'Set',
45
+ 'any',
46
+ 'boolean',
47
+ 'false',
48
+ 'null',
49
+ 'number',
50
+ 'object',
51
+ 'string',
52
+ 'true',
53
+ 'undefined',
54
+ 'unknown',
55
+ 'void',
56
+ ]);
57
+ function collectTypesUsedByMethods(methods) {
58
+ const used = new Set();
59
+ for (const method of methods) {
60
+ const typeTexts = [
61
+ method.returnType,
62
+ ...method.params.map((param) => param.type),
63
+ ];
64
+ for (const typeText of typeTexts) {
65
+ const matches = typeText.match(/\b[A-Za-z_]\w*\b/g);
66
+ if (!matches) {
67
+ continue;
68
+ }
69
+ for (const name of matches) {
70
+ if (!SKIP_TYPE_TOKENS.has(name)) {
71
+ used.add(name);
72
+ }
73
+ }
74
+ }
75
+ }
76
+ return used;
77
+ }
78
+ function buildTypeImportLine(methods, referencedTypeDeclarations) {
37
79
  if (referencedTypeDeclarations.length === 0) {
38
80
  return '';
39
81
  }
40
- const names = referencedTypeDeclarations.map((entry) => entry.name).join(', ');
82
+ const usedTypes = collectTypesUsedByMethods(methods);
83
+ const names = referencedTypeDeclarations
84
+ .map((entry) => entry.name)
85
+ .filter((name) => usedTypes.has(name))
86
+ .join(', ');
87
+ if (names.length === 0) {
88
+ return '';
89
+ }
41
90
  return `import type { ${names} } from './NativeBrownfieldNavigation';\n`;
42
91
  }
43
92
  export function generateIndexTs(methods, referencedTypeDeclarations = []) {
44
- const typeImportLine = buildTypeImportLine(referencedTypeDeclarations);
93
+ const typeImportLine = buildTypeImportLine(methods, referencedTypeDeclarations);
45
94
  const functionImplementations = methods
46
95
  .map((method) => {
47
96
  const params = method.params
@@ -101,7 +150,7 @@ export function transpileWithConsumerBabel(tsCode, projectRoot, packageRoot) {
101
150
  return transformed.code;
102
151
  }
103
152
  export function generateIndexDts(methods, referencedTypeDeclarations = []) {
104
- const typeImportLine = buildTypeImportLine(referencedTypeDeclarations);
153
+ const typeImportLine = buildTypeImportLine(methods, referencedTypeDeclarations);
105
154
  const methodSignatures = methods
106
155
  .map((method) => {
107
156
  const params = method.params
@@ -1 +1 @@
1
- {"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/navigation/runner.ts"],"names":[],"mappings":"AA2BA,UAAU,2BAA2B;IACnC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAgLD,wBAAsB,oBAAoB,CAAC,EACzC,QAAQ,EACR,MAAc,EACd,WAA2B,GAC5B,EAAE,2BAA2B,GAAG,OAAO,CAAC,IAAI,CAAC,CA0E7C"}
1
+ {"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/navigation/runner.ts"],"names":[],"mappings":"AA2BA,UAAU,2BAA2B;IACnC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAqLD,wBAAsB,oBAAoB,CAAC,EACzC,QAAQ,EACR,MAAc,EACd,WAA2B,GAC5B,EAAE,2BAA2B,GAAG,OAAO,CAAC,IAAI,CAAC,CA0E7C"}
@@ -25,33 +25,37 @@ function getOutputPaths(packageRoot, androidJavaPackageName) {
25
25
  kotlinModels: path.join(packageRoot, 'android', 'src', 'main', 'java', ...androidPackagePathSegments, 'BrownfieldNavigationModels.kt'),
26
26
  };
27
27
  }
28
+ function writeFileEnsuringDir(filePath, content) {
29
+ fs.mkdirSync(path.dirname(filePath), { recursive: true });
30
+ fs.writeFileSync(filePath, content);
31
+ }
28
32
  function writeArtifacts(paths, artifacts) {
29
- fs.writeFileSync(paths.turboModuleSpec, artifacts.turboModuleSpec);
33
+ writeFileEnsuringDir(paths.turboModuleSpec, artifacts.turboModuleSpec);
30
34
  logger.success(`Generated ${paths.turboModuleSpec}`);
31
- fs.writeFileSync(paths.navigationTs, artifacts.indexTs);
35
+ writeFileEnsuringDir(paths.navigationTs, artifacts.indexTs);
32
36
  logger.success(`Generated ${paths.navigationTs}`);
33
- fs.writeFileSync(paths.commonjsIndexJs, artifacts.indexJs);
37
+ writeFileEnsuringDir(paths.commonjsIndexJs, artifacts.indexJs);
34
38
  logger.success(`Generated ${paths.commonjsIndexJs}`);
35
- fs.writeFileSync(paths.moduleIndexJs, artifacts.indexJs);
39
+ writeFileEnsuringDir(paths.moduleIndexJs, artifacts.indexJs);
36
40
  logger.success(`Generated ${paths.moduleIndexJs}`);
37
- fs.writeFileSync(paths.commonjsIndexDts, artifacts.indexDts);
41
+ writeFileEnsuringDir(paths.commonjsIndexDts, artifacts.indexDts);
38
42
  logger.success(`Generated ${paths.commonjsIndexDts}`);
39
- fs.writeFileSync(paths.moduleIndexDts, artifacts.indexDts);
43
+ writeFileEnsuringDir(paths.moduleIndexDts, artifacts.indexDts);
40
44
  logger.success(`Generated ${paths.moduleIndexDts}`);
41
- fs.writeFileSync(paths.swiftDelegate, artifacts.swiftDelegate);
45
+ writeFileEnsuringDir(paths.swiftDelegate, artifacts.swiftDelegate);
42
46
  logger.success(`Generated ${paths.swiftDelegate}`);
43
47
  if (artifacts.swiftModels) {
44
- fs.writeFileSync(paths.swiftModels, artifacts.swiftModels);
48
+ writeFileEnsuringDir(paths.swiftModels, artifacts.swiftModels);
45
49
  logger.success(`Generated ${paths.swiftModels}`);
46
50
  }
47
- fs.writeFileSync(paths.objcImplementation, artifacts.objcImplementation);
51
+ writeFileEnsuringDir(paths.objcImplementation, artifacts.objcImplementation);
48
52
  logger.success(`Generated ${paths.objcImplementation}`);
49
- fs.writeFileSync(paths.kotlinDelegate, artifacts.kotlinDelegate);
53
+ writeFileEnsuringDir(paths.kotlinDelegate, artifacts.kotlinDelegate);
50
54
  logger.success(`Generated ${paths.kotlinDelegate}`);
51
- fs.writeFileSync(paths.kotlinModule, artifacts.kotlinModule);
55
+ writeFileEnsuringDir(paths.kotlinModule, artifacts.kotlinModule);
52
56
  logger.success(`Generated ${paths.kotlinModule}`);
53
57
  if (artifacts.kotlinModels) {
54
- fs.writeFileSync(paths.kotlinModels, artifacts.kotlinModels);
58
+ writeFileEnsuringDir(paths.kotlinModels, artifacts.kotlinModels);
55
59
  logger.success(`Generated ${paths.kotlinModels}`);
56
60
  }
57
61
  }
@@ -1,5 +1,5 @@
1
1
  import { type RockCLIOptions } from '@rock-js/tools';
2
2
  import type { Command } from 'commander';
3
3
  export declare function curryOptions(programCommand: Command, options: RockCLIOptions): Command;
4
- export declare function actionRunner<T, R>(fn: (...args: T[]) => Promise<R>): (...args: T[]) => Promise<void>;
4
+ export declare function actionRunner<Args extends unknown[], R>(fn: (...args: Args) => Promise<R>): (...args: Args) => Promise<void>;
5
5
  //# sourceMappingURL=cli.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../../src/shared/utils/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,KAAK,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAExE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEzC,wBAAgB,YAAY,CAAC,cAAc,EAAE,OAAO,EAAE,OAAO,EAAE,cAAc,WAmB5E;AAED,wBAAgB,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,KAAK,OAAO,CAAC,CAAC,CAAC,IAC1B,GAAG,MAAM,CAAC,EAAE,mBAoBpD"}
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../../src/shared/utils/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,KAAK,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAExE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEzC,wBAAgB,YAAY,CAAC,cAAc,EAAE,OAAO,EAAE,OAAO,EAAE,cAAc,WAmB5E;AAED,wBAAgB,YAAY,CAAC,IAAI,SAAS,OAAO,EAAE,EAAE,CAAC,EACpD,EAAE,EAAE,CAAC,GAAG,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,IAEM,GAAG,MAAM,IAAI,mBAoBrD"}
@@ -0,0 +1,30 @@
1
+ import type { PublishLocalAarFlags, PackageAarFlags } from '@rock-js/platform-android';
2
+ import type { BuildFlags as AppleBuildFlags } from '@rock-js/platform-apple-helpers';
3
+ export type Platform = 'swift' | 'kotlin';
4
+ export type BrownfieldCommonOptions = Partial<{
5
+ verbose: boolean;
6
+ }>;
7
+ export type BrownfieldConfigMetadata = Partial<{
8
+ $schema: string;
9
+ }>;
10
+ export type BrownieConfig = {
11
+ kotlin?: string;
12
+ kotlinPackageName?: string;
13
+ };
14
+ export type PackageIosOptions = AppleBuildFlags & {
15
+ /** Set when `--use-prebuilt-rn-core` is passed; omitted when the flag is absent (Rock applies RN version defaults). */
16
+ usePrebuiltRnCore?: boolean;
17
+ /** When set, generate a local Swift Package Manager manifest next to the packaged XCFramework outputs. */
18
+ addSpmPackage?: boolean;
19
+ };
20
+ export type BrownfieldPackageAndroidOptions = BrownfieldCommonOptions & Partial<PackageAarFlags>;
21
+ export type BrownfieldPublishAndroidOptions = BrownfieldCommonOptions & Partial<PublishLocalAarFlags>;
22
+ export type BrownfieldPackageIosOptions = BrownfieldCommonOptions & Partial<PackageIosOptions>;
23
+ export type BrownfieldAndroidConfig = Omit<Partial<PackageAarFlags> & Partial<PublishLocalAarFlags>, keyof BrownfieldCommonOptions>;
24
+ export type BrownfieldIosConfig = Omit<Partial<PackageIosOptions>, keyof BrownfieldCommonOptions>;
25
+ export type BrownfieldConfig = BrownfieldConfigMetadata & BrownfieldCommonOptions & Partial<{
26
+ android: BrownfieldAndroidConfig;
27
+ ios: BrownfieldIosConfig;
28
+ brownie: BrownieConfig;
29
+ }>;
30
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,oBAAoB,EACpB,eAAe,EAChB,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EAAE,UAAU,IAAI,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAErF,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,QAAQ,CAAC;AAE1C,MAAM,MAAM,uBAAuB,GAAG,OAAO,CAAC;IAC5C,OAAO,EAAE,OAAO,CAAC;CAClB,CAAC,CAAC;AAEH,MAAM,MAAM,wBAAwB,GAAG,OAAO,CAAC;IAC7C,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC,CAAC;AAEH,MAAM,MAAM,aAAa,GAAG;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG,eAAe,GAAG;IAChD,uHAAuH;IACvH,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,0GAA0G;IAC1G,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,+BAA+B,GAAG,uBAAuB,GACnE,OAAO,CAAC,eAAe,CAAC,CAAC;AAC3B,MAAM,MAAM,+BAA+B,GAAG,uBAAuB,GACnE,OAAO,CAAC,oBAAoB,CAAC,CAAC;AAChC,MAAM,MAAM,2BAA2B,GAAG,uBAAuB,GAC/D,OAAO,CAAC,iBAAiB,CAAC,CAAC;AAE7B,MAAM,MAAM,uBAAuB,GAAG,IAAI,CACxC,OAAO,CAAC,eAAe,CAAC,GAAG,OAAO,CAAC,oBAAoB,CAAC,EACxD,MAAM,uBAAuB,CAC9B,CAAC;AACF,MAAM,MAAM,mBAAmB,GAAG,IAAI,CACpC,OAAO,CAAC,iBAAiB,CAAC,EAC1B,MAAM,uBAAuB,CAC9B,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG,wBAAwB,GACrD,uBAAuB,GACvB,OAAO,CAAC;IACN,OAAO,EAAE,uBAAuB,CAAC;IACjC,GAAG,EAAE,mBAAmB,CAAC;IACzB,OAAO,EAAE,aAAa,CAAC;CACxB,CAAC,CAAC"}