From d6642788ddcc05049e16127cf1e3779deb889dfc Mon Sep 17 00:00:00 2001 From: Satyajit Sahoo Date: Mon, 13 Apr 2026 23:49:30 +0200 Subject: [PATCH] refactor: move to ES modules --- .gitignore | 2 + docs/tsconfig.json | 11 +- eslint.config.mjs | 3 + .../babel.config.js | 11 - .../bin/create-react-native-library | 2 +- .../create-react-native-library/package.json | 16 +- .../src/exampleApp/dependencies.ts | 4 +- .../src/exampleApp/generateExampleApp.ts | 10 +- .../create-react-native-library/src/index.ts | 30 +- .../create-react-native-library/src/inform.ts | 4 +- .../create-react-native-library/src/prompt.ts | 6 +- .../src/template.ts | 101 +++++-- .../src/utils/assert.ts | 2 +- .../src/utils/configureTools.ts | 11 +- .../src/utils/createMetadata.ts | 6 +- .../src/utils/initialCommit.ts | 2 +- .../src/utils/local.ts | 4 +- .../src/utils/resolveNpmPackageVersion.ts | 2 +- .../create-react-native-library/tsconfig.json | 12 + .../react-native-builder-bob/babel.config.js | 11 - packages/react-native-builder-bob/bin/bob | 2 +- .../{babel-config.js => babel-config.cjs} | 39 ++- .../{babel-preset.js => babel-preset.cjs} | 0 .../{metro-config.js => metro-config.mjs} | 6 +- .../react-native-builder-bob/package.json | 16 +- .../src/__tests__/babel.test.ts | 13 +- .../src/__tests__/init.test.ts | 7 +- .../react-native-builder-bob/src/babel.ts | 6 +- .../react-native-builder-bob/src/build.ts | 19 +- .../react-native-builder-bob/src/index.ts | 6 +- packages/react-native-builder-bob/src/init.ts | 14 +- .../src/targets/codegen/index.ts | 14 +- .../patchCodegenAndroidPackage.test.ts | 10 +- .../patches/patchCodegenAndroidPackage.ts | 4 +- .../patches/removeCodegenAppLevelCode.test.ts | 8 +- .../patches/removeCodegenAppLevelCode.ts | 6 +- .../src/targets/commonjs.ts | 8 +- .../src/targets/custom.ts | 10 +- .../src/targets/module.ts | 8 +- .../src/targets/typescript.ts | 8 +- .../src/utils/androidAssemble.ts | 8 +- .../src/utils/compile.ts | 11 +- .../src/utils/isGitDirty.ts | 16 ++ .../src/utils/loadConfig.ts | 12 +- .../src/utils/workerize.ts | 17 +- .../react-native-builder-bob/tsconfig.json | 12 + tsconfig.json | 31 +-- yarn.lock | 260 +----------------- 48 files changed, 350 insertions(+), 471 deletions(-) delete mode 100644 packages/create-react-native-library/babel.config.js create mode 100644 packages/create-react-native-library/tsconfig.json delete mode 100644 packages/react-native-builder-bob/babel.config.js rename packages/react-native-builder-bob/configs/{babel-config.js => babel-config.cjs} (67%) rename packages/react-native-builder-bob/configs/{babel-preset.js => babel-preset.cjs} (100%) rename packages/react-native-builder-bob/configs/{metro-config.js => metro-config.mjs} (79%) create mode 100644 packages/react-native-builder-bob/src/utils/isGitDirty.ts create mode 100644 packages/react-native-builder-bob/tsconfig.json diff --git a/.gitignore b/.gitignore index cd36b5dda..cafac21f3 100644 --- a/.gitignore +++ b/.gitignore @@ -89,3 +89,5 @@ typings/ lib/ typescript/ doc_build/ +doc_types/ +*.tsbuildinfo diff --git a/docs/tsconfig.json b/docs/tsconfig.json index fadce9c12..9267ea702 100644 --- a/docs/tsconfig.json +++ b/docs/tsconfig.json @@ -1,9 +1,18 @@ { "extends": "../tsconfig.json", "compilerOptions": { - "moduleResolution": "bundler" + "composite": true, + "rootDir": ".", + "outDir": "./doc_types", + "module": "preserve", + "moduleResolution": "bundler", + "allowImportingTsExtensions": false, + "rewriteRelativeImportExtensions": false, + "declaration": true, + "emitDeclarationOnly": true }, "include": ["**/*"], + "exclude": ["doc_build", "doc_types", "node_modules"], "mdx": { "checkMdx": true } diff --git a/eslint.config.mjs b/eslint.config.mjs index bb8f9f617..f8463b177 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -22,6 +22,8 @@ export default defineConfig( '@typescript-eslint/no-unsafe-member-access': 'off', '@typescript-eslint/no-unnecessary-condition': 'off', '@typescript-eslint/strict-boolean-expressions': 'off', + + 'import-x/extensions': ['error', 'ignorePackages'], }, }, @@ -43,6 +45,7 @@ export default defineConfig( '**/out/', '**/lib/', '**/templates/', + '**/doc_types/', '**/__fixtures__/', ]) ); diff --git a/packages/create-react-native-library/babel.config.js b/packages/create-react-native-library/babel.config.js deleted file mode 100644 index fcd585fa2..000000000 --- a/packages/create-react-native-library/babel.config.js +++ /dev/null @@ -1,11 +0,0 @@ -module.exports = { - presets: [ - [ - '@babel/preset-env', - { - targets: { node: '18' }, - }, - ], - '@babel/preset-typescript', - ], -}; diff --git a/packages/create-react-native-library/bin/create-react-native-library b/packages/create-react-native-library/bin/create-react-native-library index 4bd2d67c1..0a786feb7 100755 --- a/packages/create-react-native-library/bin/create-react-native-library +++ b/packages/create-react-native-library/bin/create-react-native-library @@ -1,3 +1,3 @@ #!/usr/bin/env node -require('../lib/index'); +import '../lib/src/index.js'; diff --git a/packages/create-react-native-library/package.json b/packages/create-react-native-library/package.json index aacefc8b0..f7edf2309 100644 --- a/packages/create-react-native-library/package.json +++ b/packages/create-react-native-library/package.json @@ -23,7 +23,12 @@ "url": "https://github.com/callstack/react-native-builder-bob/issues" }, "homepage": "https://oss.callstack.com/react-native-builder-bob/create", - "main": "lib/index.js", + "type": "module", + "exports": { + ".": { + "default": "./lib/src/index.js" + } + }, "bin": "bin/create-react-native-library", "files": [ "lib", @@ -37,7 +42,7 @@ "registry": "https://registry.npmjs.org/" }, "scripts": { - "prepare": "babel --extensions .ts,.tsx src --out-dir lib --ignore '**/__tests__/**' --source-maps --delete-dir-on-start" + "prepare": "tsc" }, "dependencies": { "cross-spawn": "^7.0.6", @@ -48,14 +53,11 @@ "github-username": "^9.0.0", "kleur": "^4.1.5", "ora": "^9.3.0", - "pigment": "^0.4.3", + "pigment": "^0.4.4", + "typescript": "^5.8.3", "validate-npm-package-name": "^7.0.2" }, "devDependencies": { - "@babel/cli": "^7.28.6", - "@babel/core": "^7.29.0", - "@babel/preset-env": "^7.29.2", - "@babel/preset-typescript": "^7.28.5", "@commitlint/config-conventional": "^20.5.0", "@types/cross-spawn": "^6.0.6", "@types/dedent": "^0.7.2", diff --git a/packages/create-react-native-library/src/exampleApp/dependencies.ts b/packages/create-react-native-library/src/exampleApp/dependencies.ts index 897031d46..661790f52 100644 --- a/packages/create-react-native-library/src/exampleApp/dependencies.ts +++ b/packages/create-react-native-library/src/exampleApp/dependencies.ts @@ -1,6 +1,6 @@ -import path from 'path'; +import path from 'node:path'; import fs from 'fs-extra'; -import sortObjectKeys from '../utils/sortObjectKeys'; +import sortObjectKeys from '../utils/sortObjectKeys.ts'; type PackageJson = { devDependencies?: Record; diff --git a/packages/create-react-native-library/src/exampleApp/generateExampleApp.ts b/packages/create-react-native-library/src/exampleApp/generateExampleApp.ts index 582c89569..c94d83958 100644 --- a/packages/create-react-native-library/src/exampleApp/generateExampleApp.ts +++ b/packages/create-react-native-library/src/exampleApp/generateExampleApp.ts @@ -1,16 +1,16 @@ +import path from 'node:path'; import dedent from 'dedent'; import fs from 'fs-extra'; import { getLatestVersion } from 'get-latest-version'; import kleur from 'kleur'; -import path from 'path'; import { SUPPORTED_EXPO_SDK_VERSION, SUPPORTED_MONOREPO_CONFIG_VERSION, SUPPORTED_REACT_NATIVE_VERSION, -} from '../constants'; -import type { TemplateConfiguration } from '../template'; -import sortObjectKeys from '../utils/sortObjectKeys'; -import { spawn } from '../utils/spawn'; +} from '../constants.ts'; +import type { TemplateConfiguration } from '../template.ts'; +import sortObjectKeys from '../utils/sortObjectKeys.ts'; +import { spawn } from '../utils/spawn.ts'; const FILES_TO_DELETE = [ '__tests__', diff --git a/packages/create-react-native-library/src/index.ts b/packages/create-react-native-library/src/index.ts index efb0c74af..729c8a504 100644 --- a/packages/create-react-native-library/src/index.ts +++ b/packages/create-react-native-library/src/index.ts @@ -1,27 +1,27 @@ -import pak from '../package.json'; +import path from 'node:path'; import fs from 'fs-extra'; import kleur from 'kleur'; import ora from 'ora'; -import path from 'path'; +import pak from '../package.json' with { type: 'json' }; import { FALLBACK_BOB_VERSION, FALLBACK_NITRO_MODULES_VERSION, -} from './constants'; -import { alignDependencyVersionsWithExampleApp } from './exampleApp/dependencies'; -import generateExampleApp from './exampleApp/generateExampleApp'; -import { printLocalLibNextSteps, printNonLocalLibNextSteps } from './inform'; -import { prompt } from './prompt'; -import { applyTemplates, generateTemplateConfiguration } from './template'; -import { assertNpxExists } from './utils/assert'; -import { configureTools } from './utils/configureTools'; -import { createInitialGitCommit } from './utils/initialCommit'; +} from './constants.ts'; +import { alignDependencyVersionsWithExampleApp } from './exampleApp/dependencies.ts'; +import generateExampleApp from './exampleApp/generateExampleApp.ts'; +import { printLocalLibNextSteps, printNonLocalLibNextSteps } from './inform.ts'; +import { prompt } from './prompt.ts'; +import { applyTemplates, generateTemplateConfiguration } from './template.ts'; +import { assertNpxExists } from './utils/assert.ts'; +import { configureTools } from './utils/configureTools.ts'; +import { createMetadata } from './utils/createMetadata.ts'; +import { createInitialGitCommit } from './utils/initialCommit.ts'; import { addNitroDependencyToLocalLibrary, linkLocalLibrary, -} from './utils/local'; -import { determinePackageManager } from './utils/packageManager'; -import { resolveNpmPackageVersion } from './utils/resolveNpmPackageVersion'; -import { createMetadata } from './utils/createMetadata'; +} from './utils/local.ts'; +import { determinePackageManager } from './utils/packageManager.ts'; +import { resolveNpmPackageVersion } from './utils/resolveNpmPackageVersion.ts'; async function create() { // Prefetch bob version in background while asking questions diff --git a/packages/create-react-native-library/src/inform.ts b/packages/create-react-native-library/src/inform.ts index 7cd0eb193..23877f4ce 100644 --- a/packages/create-react-native-library/src/inform.ts +++ b/packages/create-react-native-library/src/inform.ts @@ -1,7 +1,7 @@ -import path from 'path'; +import path from 'node:path'; import dedent from 'dedent'; -import type { TemplateConfiguration } from './template'; import kleur from 'kleur'; +import type { TemplateConfiguration } from './template.ts'; export function printNonLocalLibNextSteps(config: TemplateConfiguration) { const platforms = { diff --git a/packages/create-react-native-library/src/prompt.ts b/packages/create-react-native-library/src/prompt.ts index 98ff38407..7df66a69a 100644 --- a/packages/create-react-native-library/src/prompt.ts +++ b/packages/create-react-native-library/src/prompt.ts @@ -1,10 +1,10 @@ import fs from 'node:fs'; import path from 'node:path'; +import githubUsername from 'github-username'; import { create } from 'pigment'; import validateNpmPackage from 'validate-npm-package-name'; -import { spawn } from './utils/spawn'; -import githubUsername from 'github-username'; -import { AVAILABLE_TOOLS } from './utils/configureTools'; +import { AVAILABLE_TOOLS } from './utils/configureTools.ts'; +import { spawn } from './utils/spawn.ts'; export type Answers = NonNullable>>; diff --git a/packages/create-react-native-library/src/template.ts b/packages/create-react-native-library/src/template.ts index c13c3c977..ea7fffb2d 100644 --- a/packages/create-react-native-library/src/template.ts +++ b/packages/create-react-native-library/src/template.ts @@ -1,7 +1,7 @@ -import path from 'path'; -import fs from 'fs-extra'; +import path from 'node:path'; import ejs from 'ejs'; -import type { Answers, ExampleApp, ProjectType } from './prompt'; +import fs from 'fs-extra'; +import type { Answers, ExampleApp, ProjectType } from './prompt.ts'; export type TemplateVersions = { bob: string; @@ -51,48 +51,93 @@ const BINARIES = [ /\$\.yarn(?![a-z])/, ]; -const COMMON_FILES = path.resolve(__dirname, '../templates/common'); -const COMMON_LOCAL_FILES = path.resolve(__dirname, '../templates/common-local'); +const COMMON_FILES = path.resolve( + import.meta.dirname, + '../../templates/common' +); +const COMMON_LOCAL_FILES = path.resolve( + import.meta.dirname, + '../../templates/common-local' +); const EXAMPLE_COMMON_FILES = path.resolve( - __dirname, - '../templates/example-common' + import.meta.dirname, + '../../templates/example-common' +); +const EXAMPLE_BARE_FILES = path.resolve( + import.meta.dirname, + '../../templates/example-bare' ); -const EXAMPLE_BARE_FILES = path.resolve(__dirname, '../templates/example-bare'); const EXAMPLE_MODULE_NEW_FILES = path.resolve( - __dirname, - '../templates/example-module-new' + import.meta.dirname, + '../../templates/example-module-new' +); +const EXAMPLE_VIEW_FILES = path.resolve( + import.meta.dirname, + '../../templates/example-view' +); +const EXAMPLE_EXPO_FILES = path.resolve( + import.meta.dirname, + '../../templates/example-expo' ); -const EXAMPLE_VIEW_FILES = path.resolve(__dirname, '../templates/example-view'); -const EXAMPLE_EXPO_FILES = path.resolve(__dirname, '../templates/example-expo'); -const JS_FILES = path.resolve(__dirname, '../templates/js-library'); -const JS_VIEW_FILES = path.resolve(__dirname, '../templates/js-view'); +const JS_FILES = path.resolve( + import.meta.dirname, + '../../templates/js-library' +); +const JS_VIEW_FILES = path.resolve( + import.meta.dirname, + '../../templates/js-view' +); const NATIVE_COMMON_FILES = path.resolve( - __dirname, - '../templates/native-common' + import.meta.dirname, + '../../templates/native-common' ); const EXAMPLE_NATIVE_COMMON_FILES = path.resolve( - __dirname, - '../templates/example-native-common' + import.meta.dirname, + '../../templates/example-native-common' +); +const NITRO_COMMON_FILES = path.resolve( + import.meta.dirname, + '../../templates/nitro-common' +); +const CPP_FILES = path.resolve( + import.meta.dirname, + '../../templates/cpp-library' ); -const NITRO_COMMON_FILES = path.resolve(__dirname, '../templates/nitro-common'); -const CPP_FILES = path.resolve(__dirname, '../templates/cpp-library'); const NATIVE_FILES = { - module_new: path.resolve(__dirname, '../templates/native-library-new'), - view_new: path.resolve(__dirname, '../templates/native-view-new'), - module_nitro: path.resolve(__dirname, '../templates/nitro-module'), - view_nitro: path.resolve(__dirname, '../templates/nitro-view'), + module_new: path.resolve( + import.meta.dirname, + '../../templates/native-library-new' + ), + view_new: path.resolve( + import.meta.dirname, + '../../templates/native-view-new' + ), + module_nitro: path.resolve( + import.meta.dirname, + '../../templates/nitro-module' + ), + view_nitro: path.resolve(import.meta.dirname, '../../templates/nitro-view'), } as const; const OBJC_FILES = { - module_common: path.resolve(__dirname, '../templates/objc-library'), - view_new: path.resolve(__dirname, '../templates/objc-view-new'), + module_common: path.resolve( + import.meta.dirname, + '../../templates/objc-library' + ), + view_new: path.resolve(import.meta.dirname, '../../templates/objc-view-new'), } as const; const KOTLIN_FILES = { - module_new: path.resolve(__dirname, '../templates/kotlin-library-new'), - view_new: path.resolve(__dirname, '../templates/kotlin-view-new'), + module_new: path.resolve( + import.meta.dirname, + '../../templates/kotlin-library-new' + ), + view_new: path.resolve( + import.meta.dirname, + '../../templates/kotlin-view-new' + ), } as const; export function generateTemplateConfiguration({ diff --git a/packages/create-react-native-library/src/utils/assert.ts b/packages/create-react-native-library/src/utils/assert.ts index 3c3b2d538..11e8018b7 100644 --- a/packages/create-react-native-library/src/utils/assert.ts +++ b/packages/create-react-native-library/src/utils/assert.ts @@ -1,5 +1,5 @@ import kleur from 'kleur'; -import { spawn } from './spawn'; +import { spawn } from './spawn.ts'; export async function assertNpxExists() { try { diff --git a/packages/create-react-native-library/src/utils/configureTools.ts b/packages/create-react-native-library/src/utils/configureTools.ts index b181edc8c..da392e34f 100644 --- a/packages/create-react-native-library/src/utils/configureTools.ts +++ b/packages/create-react-native-library/src/utils/configureTools.ts @@ -1,7 +1,7 @@ -import fs from 'fs-extra'; import path from 'node:path'; -import { applyTemplate, type TemplateConfiguration } from '../template'; -import sortObjectKeys from './sortObjectKeys'; +import fs from 'fs-extra'; +import { applyTemplate, type TemplateConfiguration } from '../template.ts'; +import sortObjectKeys from './sortObjectKeys.ts'; type PackageJson = { dependencies?: Record; @@ -128,7 +128,10 @@ export async function configureTools({ continue; } - const toolDir = path.resolve(__dirname, `../../templates/tools/${key}`); + const toolDir = path.resolve( + import.meta.dirname, + `../../../templates/tools/${key}` + ); if (fs.existsSync(toolDir)) { await applyTemplate(config, toolDir, root); diff --git a/packages/create-react-native-library/src/utils/createMetadata.ts b/packages/create-react-native-library/src/utils/createMetadata.ts index d9265515c..f8b8f0e18 100644 --- a/packages/create-react-native-library/src/utils/createMetadata.ts +++ b/packages/create-react-native-library/src/utils/createMetadata.ts @@ -1,5 +1,5 @@ -import { version } from '../../package.json'; -import type { Answers } from '../prompt'; +import pack from '../../package.json' with { type: 'json' }; +import type { Answers } from '../prompt.ts'; export function createMetadata(answers: Partial) { // Some of the passed args can already be derived from the generated package.json file. @@ -27,7 +27,7 @@ export function createMetadata(answers: Partial) { ) ); - libraryMetadata.version = version; + libraryMetadata.version = pack.version; return libraryMetadata; } diff --git a/packages/create-react-native-library/src/utils/initialCommit.ts b/packages/create-react-native-library/src/utils/initialCommit.ts index 77ae2c7f6..ab09d3311 100644 --- a/packages/create-react-native-library/src/utils/initialCommit.ts +++ b/packages/create-react-native-library/src/utils/initialCommit.ts @@ -1,4 +1,4 @@ -import { spawn } from './spawn'; +import { spawn } from './spawn.ts'; export async function createInitialGitCommit( folder: string, diff --git a/packages/create-react-native-library/src/utils/local.ts b/packages/create-react-native-library/src/utils/local.ts index 4e90e6205..bfb73b6e6 100644 --- a/packages/create-react-native-library/src/utils/local.ts +++ b/packages/create-react-native-library/src/utils/local.ts @@ -1,6 +1,6 @@ +import path from 'node:path'; import fs from 'fs-extra'; -import path from 'path'; -import type { TemplateConfiguration } from '../template'; +import type { TemplateConfiguration } from '../template.ts'; type PackageJson = { dependencies?: Record; diff --git a/packages/create-react-native-library/src/utils/resolveNpmPackageVersion.ts b/packages/create-react-native-library/src/utils/resolveNpmPackageVersion.ts index 0176ea58e..e41333c83 100644 --- a/packages/create-react-native-library/src/utils/resolveNpmPackageVersion.ts +++ b/packages/create-react-native-library/src/utils/resolveNpmPackageVersion.ts @@ -1,4 +1,4 @@ -import { spawn } from './spawn'; +import { spawn } from './spawn.ts'; export async function resolveNpmPackageVersion( name: string, diff --git a/packages/create-react-native-library/tsconfig.json b/packages/create-react-native-library/tsconfig.json new file mode 100644 index 000000000..4cf18a591 --- /dev/null +++ b/packages/create-react-native-library/tsconfig.json @@ -0,0 +1,12 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "composite": true, + "rootDir": ".", + "outDir": "./lib", + "declaration": true, + "sourceMap": true + }, + "include": ["src/**/*", "package.json"], + "exclude": ["lib", "templates"] +} diff --git a/packages/react-native-builder-bob/babel.config.js b/packages/react-native-builder-bob/babel.config.js deleted file mode 100644 index fcd585fa2..000000000 --- a/packages/react-native-builder-bob/babel.config.js +++ /dev/null @@ -1,11 +0,0 @@ -module.exports = { - presets: [ - [ - '@babel/preset-env', - { - targets: { node: '18' }, - }, - ], - '@babel/preset-typescript', - ], -}; diff --git a/packages/react-native-builder-bob/bin/bob b/packages/react-native-builder-bob/bin/bob index 4bd2d67c1..0a786feb7 100755 --- a/packages/react-native-builder-bob/bin/bob +++ b/packages/react-native-builder-bob/bin/bob @@ -1,3 +1,3 @@ #!/usr/bin/env node -require('../lib/index'); +import '../lib/src/index.js'; diff --git a/packages/react-native-builder-bob/configs/babel-config.js b/packages/react-native-builder-bob/configs/babel-config.cjs similarity index 67% rename from packages/react-native-builder-bob/configs/babel-config.js rename to packages/react-native-builder-bob/configs/babel-config.cjs index 3832806b6..4938b1931 100644 --- a/packages/react-native-builder-bob/configs/babel-config.js +++ b/packages/react-native-builder-bob/configs/babel-config.cjs @@ -1,8 +1,41 @@ /* eslint-disable import-x/no-commonjs, no-undef */ const path = require('path'); -// @ts-ignore -- Ignore missing types for this module -const { loadConfig } = require('../lib/utils/loadConfig'); + +const SEARCH_PLACES = [ + 'bob.config.mjs', + 'bob.config.cjs', + 'bob.config.js', + 'package.json', +]; + +const loadConfig = (root) => { + for (const filename of SEARCH_PLACES) { + const filepath = path.join(root, filename); + + let content; + + try { + content = require(filepath); + } catch (e) { + if (e && e.code === 'MODULE_NOT_FOUND') { + continue; + } + + throw e; + } + + if (filename === 'package.json') { + if (content['react-native-builder-bob'] != null) { + return { filepath, config: content['react-native-builder-bob'] }; + } + } else { + return { filepath, config: content }; + } + } + + return undefined; +}; /** * Get Babel configuration for the example project. @@ -38,7 +71,7 @@ const getConfig = (defaultConfig, { root }) => { include: path.join(root, source), presets: [ [ - require.resolve('./babel-preset'), + require.resolve('./babel-preset.cjs'), { // Let the app's preset handle the commonjs transform // Otherwise this causes `export` statements in wrong places causing syntax error diff --git a/packages/react-native-builder-bob/configs/babel-preset.js b/packages/react-native-builder-bob/configs/babel-preset.cjs similarity index 100% rename from packages/react-native-builder-bob/configs/babel-preset.js rename to packages/react-native-builder-bob/configs/babel-preset.cjs diff --git a/packages/react-native-builder-bob/configs/metro-config.js b/packages/react-native-builder-bob/configs/metro-config.mjs similarity index 79% rename from packages/react-native-builder-bob/configs/metro-config.js rename to packages/react-native-builder-bob/configs/metro-config.mjs index c1e1254b0..de05259f9 100644 --- a/packages/react-native-builder-bob/configs/metro-config.js +++ b/packages/react-native-builder-bob/configs/metro-config.mjs @@ -1,6 +1,4 @@ -/* eslint-disable import-x/no-commonjs, no-undef */ - -const { withMetroConfig } = require('react-native-monorepo-config'); +import { withMetroConfig } from 'react-native-monorepo-config'; /** * Get Metro configuration for the example project. @@ -15,5 +13,5 @@ const { withMetroConfig } = require('react-native-monorepo-config'); * @param {string} options.project Directory containing the example project * @returns {import('metro-config').MetroConfig} Metro configuration */ -exports.getConfig = (baseConfig, { root, project }) => +export const getConfig = (baseConfig, { root, project }) => withMetroConfig(baseConfig, { root, dirname: project }); diff --git a/packages/react-native-builder-bob/package.json b/packages/react-native-builder-bob/package.json index 38542eb0c..ef80a910e 100644 --- a/packages/react-native-builder-bob/package.json +++ b/packages/react-native-builder-bob/package.json @@ -17,12 +17,15 @@ "url": "https://github.com/callstack/react-native-builder-bob/issues" }, "homepage": "https://oss.callstack.com/react-native-builder-bob/build", - "main": "lib/index.js", + "type": "module", "exports": { + ".": { + "default": "./lib/src/index.js" + }, "./package.json": "./package.json", - "./babel-config": "./configs/babel-config.js", - "./babel-preset": "./configs/babel-preset.js", - "./metro-config": "./configs/metro-config.js", + "./babel-config": "./configs/babel-config.cjs", + "./babel-preset": "./configs/babel-preset.cjs", + "./metro-config": "./configs/metro-config.mjs", "./vite-config": "./configs/vite-config.mjs" }, "bin": { @@ -41,7 +44,7 @@ "registry": "https://registry.npmjs.org/" }, "scripts": { - "prepare": "babel --extensions .ts,.tsx src --out-dir lib --source-maps --delete-dir-on-start", + "prepare": "tsc", "test": "vitest" }, "dependencies": { @@ -60,16 +63,15 @@ "escape-string-regexp": "^5.0.0", "fs-extra": "^11.3.4", "glob": "^13.0.6", - "is-git-dirty": "^2.0.2", "json5": "^2.2.3", "kleur": "^4.1.5", "prompts": "^2.4.2", "react-native-monorepo-config": "^0.3.3", + "typescript": "^5.8.3", "which": "^6.0.1", "yargs": "^18.0.0" }, "devDependencies": { - "@babel/cli": "^7.28.6", "@types/babel__core": "^7.20.5", "@types/browserslist": "^4.15.4", "@types/cross-spawn": "^6.0.6", diff --git a/packages/react-native-builder-bob/src/__tests__/babel.test.ts b/packages/react-native-builder-bob/src/__tests__/babel.test.ts index 03553723c..9e95c2bf0 100644 --- a/packages/react-native-builder-bob/src/__tests__/babel.test.ts +++ b/packages/react-native-builder-bob/src/__tests__/babel.test.ts @@ -1,12 +1,12 @@ -import { expect, test } from 'vitest'; -import { transformFileAsync } from '@babel/core'; import fs from 'node:fs'; import path from 'node:path'; -import plugin from '../babel'; +import { expect, test } from 'vitest'; +import { transformFileAsync } from '@babel/core'; +import plugin from '../babel.ts'; test.each(['imports', 'exports'])(`adds extension to %s`, async (name) => { const filepath = path.resolve( - __dirname, + import.meta.dirname, `../__fixtures__/project/code/$${name}-input.ts` ); @@ -27,7 +27,10 @@ test.each(['imports', 'exports'])(`adds extension to %s`, async (name) => { }); const expected = await fs.promises.readFile( - path.resolve(__dirname, `../__fixtures__/project/code/$${name}-output.ts`), + path.resolve( + import.meta.dirname, + `../__fixtures__/project/code/$${name}-output.ts` + ), 'utf8' ); diff --git a/packages/react-native-builder-bob/src/__tests__/init.test.ts b/packages/react-native-builder-bob/src/__tests__/init.test.ts index af97f30db..6b452aca7 100644 --- a/packages/react-native-builder-bob/src/__tests__/init.test.ts +++ b/packages/react-native-builder-bob/src/__tests__/init.test.ts @@ -1,15 +1,16 @@ +import { join } from 'node:path'; import { afterEach, beforeEach, expect, test, vi } from 'vitest'; import { readFile } from 'fs-extra'; import mockFs from 'mock-fs'; import { stdin } from 'mock-stdin'; -import { join } from 'node:path'; -import { init } from '../init'; +import { init } from '../init.ts'; vi.mock('../../package.json', () => ({ + // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion default: { name: 'react-native-builder-bob', version: '0.5.0', - }, + } as typeof import('../../package.json'), })); let io: ReturnType | undefined; diff --git a/packages/react-native-builder-bob/src/babel.ts b/packages/react-native-builder-bob/src/babel.ts index 4abf45a90..e6477db52 100644 --- a/packages/react-native-builder-bob/src/babel.ts +++ b/packages/react-native-builder-bob/src/babel.ts @@ -1,12 +1,12 @@ -import fs from 'fs'; -import path from 'path'; +import fs from 'node:fs'; +import path from 'node:path'; import type { ConfigAPI, NodePath, PluginObj, PluginPass } from '@babel/core'; import type { ImportDeclaration, ExportAllDeclaration, ExportNamedDeclaration, } from '@babel/types'; -import { isCodegenSpec } from './utils/isCodegenSpec'; +import { isCodegenSpec } from './utils/isCodegenSpec.ts'; type Options = { /** diff --git a/packages/react-native-builder-bob/src/build.ts b/packages/react-native-builder-bob/src/build.ts index 9f8897b79..50e632d44 100644 --- a/packages/react-native-builder-bob/src/build.ts +++ b/packages/react-native-builder-bob/src/build.ts @@ -1,12 +1,17 @@ import { type } from 'arktype'; import fs from 'fs-extra'; import kleur from 'kleur'; -import path from 'path'; -import type * as yargs from 'yargs'; -import { config, type Config, type Target, type TargetOptions } from './schema'; -import { loadConfig } from './utils/loadConfig'; -import * as logger from './utils/logger'; -import { run } from './utils/workerize'; +import path from 'node:path'; +import type { Options } from 'yargs'; +import { + config, + type Config, + type Target, + type TargetOptions, +} from './schema.ts'; +import { loadConfig } from './utils/loadConfig.ts'; +import * as logger from './utils/logger.ts'; +import { run } from './utils/workerize.ts'; export const args = { target: { @@ -14,7 +19,7 @@ export const args = { description: 'The target to build', choices: ['commonjs', 'module', 'typescript', 'codegen'] satisfies Target[], }, -} satisfies Record<'target', yargs.Options>; +} satisfies Record<'target', Options>; type Argv = { $0: string; diff --git a/packages/react-native-builder-bob/src/index.ts b/packages/react-native-builder-bob/src/index.ts index 3bb4f65ce..17f1aa88c 100644 --- a/packages/react-native-builder-bob/src/index.ts +++ b/packages/react-native-builder-bob/src/index.ts @@ -1,8 +1,8 @@ import yargs, { type Options } from 'yargs'; -import { build } from './build'; -import { init } from './init'; -import type { Target } from './schema'; import { hideBin } from 'yargs/helpers'; +import { build } from './build.ts'; +import { init } from './init.ts'; +import type { Target } from './schema.ts'; type ArgName = 'target'; diff --git a/packages/react-native-builder-bob/src/init.ts b/packages/react-native-builder-bob/src/init.ts index f3e777b9b..2cee16d09 100644 --- a/packages/react-native-builder-bob/src/init.ts +++ b/packages/react-native-builder-bob/src/init.ts @@ -1,11 +1,11 @@ -import path from 'path'; +import path from 'node:path'; +import dedent from 'dedent'; import fs from 'fs-extra'; import kleur from 'kleur'; -import dedent from 'dedent'; -import isGitDirty from 'is-git-dirty'; -import prompts, { type PromptObject } from './utils/prompts'; -import { loadConfig } from './utils/loadConfig'; -import pack from '../package.json'; +import pack from '../package.json' with { type: 'json' }; +import { isGitDirty } from './utils/isGitDirty.ts'; +import { loadConfig } from './utils/loadConfig.ts'; +import prompts, { type PromptObject } from './utils/prompts.ts'; const FLOW_PRGAMA_REGEX = /\*?\s*@(flow)\b/m; @@ -58,7 +58,7 @@ export async function init() { name: 'source', message: 'Where are your source files?', initial: 'src', - validate: (input) => Boolean(input), + validate: (input: string) => Boolean(input), })) as { source: string }; let entryFile; diff --git a/packages/react-native-builder-bob/src/targets/codegen/index.ts b/packages/react-native-builder-bob/src/targets/codegen/index.ts index 811dcea32..cd095cbb7 100644 --- a/packages/react-native-builder-bob/src/targets/codegen/index.ts +++ b/packages/react-native-builder-bob/src/targets/codegen/index.ts @@ -1,14 +1,14 @@ -import kleur from 'kleur'; -import type { Input } from '../../types'; -import { patchCodegenAndroidPackage } from './patches/patchCodegenAndroidPackage'; -import fs from 'fs-extra'; -import path from 'path'; +import path from 'node:path'; import { deleteAsync } from 'del'; +import fs from 'fs-extra'; +import kleur from 'kleur'; +import type { Input } from '../../types.ts'; +import { spawn } from '../../utils/spawn.ts'; +import { patchCodegenAndroidPackage } from './patches/patchCodegenAndroidPackage.ts'; import { getCodegenCLISourceSupport, removeCodegenAppLevelCode, -} from './patches/removeCodegenAppLevelCode'; -import { spawn } from '../../utils/spawn'; +} from './patches/removeCodegenAppLevelCode.ts'; type Options = Omit; diff --git a/packages/react-native-builder-bob/src/targets/codegen/patches/patchCodegenAndroidPackage.test.ts b/packages/react-native-builder-bob/src/targets/codegen/patches/patchCodegenAndroidPackage.test.ts index 7fa83008c..247116921 100644 --- a/packages/react-native-builder-bob/src/targets/codegen/patches/patchCodegenAndroidPackage.test.ts +++ b/packages/react-native-builder-bob/src/targets/codegen/patches/patchCodegenAndroidPackage.test.ts @@ -1,9 +1,9 @@ -import { expect, test, describe, beforeEach, afterEach } from 'vitest'; -import fs from 'fs-extra'; import path from 'node:path'; -import { patchCodegenAndroidPackage } from './patchCodegenAndroidPackage'; +import { afterEach, beforeEach, describe, expect, test } from 'vitest'; +import fs from 'fs-extra'; import mockfs from 'mock-fs'; -import type { Report } from '../../../types'; +import type { Report } from '../../../types.ts'; +import { patchCodegenAndroidPackage } from './patchCodegenAndroidPackage.ts'; const mockPackageJson = { codegenConfig: { @@ -50,7 +50,7 @@ public interface SomeInterface { } `; -const mockProjectPath = path.resolve(__dirname, 'mockProject'); +const mockProjectPath = path.resolve(import.meta.dirname, 'mockProject'); const mockCodegenModuleSpecsPath = path.resolve( mockProjectPath, 'android/generated/java/com/facebook/fbreact/specs' diff --git a/packages/react-native-builder-bob/src/targets/codegen/patches/patchCodegenAndroidPackage.ts b/packages/react-native-builder-bob/src/targets/codegen/patches/patchCodegenAndroidPackage.ts index 21d773ef7..fb3bc10d4 100644 --- a/packages/react-native-builder-bob/src/targets/codegen/patches/patchCodegenAndroidPackage.ts +++ b/packages/react-native-builder-bob/src/targets/codegen/patches/patchCodegenAndroidPackage.ts @@ -1,7 +1,7 @@ +import path from 'node:path'; import fs from 'fs-extra'; -import path from 'path'; -import type { Report } from '../../../types'; import kleur from 'kleur'; +import type { Report } from '../../../types.ts'; export const CODEGEN_DOCS = 'https://reactnative.dev/docs/the-new-architecture/using-codegen#configuring-codegen'; diff --git a/packages/react-native-builder-bob/src/targets/codegen/patches/removeCodegenAppLevelCode.test.ts b/packages/react-native-builder-bob/src/targets/codegen/patches/removeCodegenAppLevelCode.test.ts index 6640d900e..d80d0c936 100644 --- a/packages/react-native-builder-bob/src/targets/codegen/patches/removeCodegenAppLevelCode.test.ts +++ b/packages/react-native-builder-bob/src/targets/codegen/patches/removeCodegenAppLevelCode.test.ts @@ -1,8 +1,8 @@ -import { expect, describe, beforeEach, afterEach, test } from 'vitest'; -import fs from 'fs-extra'; import path from 'node:path'; -import { removeCodegenAppLevelCode } from './removeCodegenAppLevelCode'; +import { afterEach, beforeEach, describe, expect, test } from 'vitest'; +import fs from 'fs-extra'; import mockfs from 'mock-fs'; +import { removeCodegenAppLevelCode } from './removeCodegenAppLevelCode.ts'; const mockPackageJson = { codegenConfig: { @@ -13,7 +13,7 @@ const mockPackageJson = { }, }; -const mockProjectPath = path.resolve(__dirname, 'mockProject'); +const mockProjectPath = path.resolve(import.meta.dirname, 'mockProject'); describe('patchCodegenAndroidPackage', () => { beforeEach(() => { diff --git a/packages/react-native-builder-bob/src/targets/codegen/patches/removeCodegenAppLevelCode.ts b/packages/react-native-builder-bob/src/targets/codegen/patches/removeCodegenAppLevelCode.ts index 3ad55c8a7..c7c91d1d7 100644 --- a/packages/react-native-builder-bob/src/targets/codegen/patches/removeCodegenAppLevelCode.ts +++ b/packages/react-native-builder-bob/src/targets/codegen/patches/removeCodegenAppLevelCode.ts @@ -1,7 +1,7 @@ +import path from 'node:path'; import fs from 'fs-extra'; -import path from 'path'; -import { CODEGEN_DOCS } from './patchCodegenAndroidPackage'; -import { spawn } from '../../../utils/spawn'; +import { spawn } from '../../../utils/spawn.ts'; +import { CODEGEN_DOCS } from './patchCodegenAndroidPackage.ts'; const FILES_TO_REMOVE = [ 'RCTAppDependencyProvider.h', diff --git a/packages/react-native-builder-bob/src/targets/commonjs.ts b/packages/react-native-builder-bob/src/targets/commonjs.ts index 7dbbc95d1..0458d9c71 100644 --- a/packages/react-native-builder-bob/src/targets/commonjs.ts +++ b/packages/react-native-builder-bob/src/targets/commonjs.ts @@ -1,8 +1,8 @@ -import path from 'path'; -import kleur from 'kleur'; +import path from 'node:path'; import { deleteAsync } from 'del'; -import compile, { type CompileOptions } from '../utils/compile'; -import type { Input, Variants } from '../types'; +import kleur from 'kleur'; +import type { Input, Variants } from '../types.ts'; +import compile, { type CompileOptions } from '../utils/compile.ts'; type Options = Input & { options?: CompileOptions; diff --git a/packages/react-native-builder-bob/src/targets/custom.ts b/packages/react-native-builder-bob/src/targets/custom.ts index 74180e798..56a632e2e 100644 --- a/packages/react-native-builder-bob/src/targets/custom.ts +++ b/packages/react-native-builder-bob/src/targets/custom.ts @@ -1,9 +1,9 @@ -import kleur from 'kleur'; -import path from 'path'; -import fs from 'fs-extra'; -import type { Input } from '../types'; -import { spawn } from '../utils/spawn'; +import path from 'node:path'; import { deleteAsync } from 'del'; +import fs from 'fs-extra'; +import kleur from 'kleur'; +import type { Input } from '../types.ts'; +import { spawn } from '../utils/spawn.ts'; type Options = Omit & { options?: { diff --git a/packages/react-native-builder-bob/src/targets/module.ts b/packages/react-native-builder-bob/src/targets/module.ts index 6c760daa6..75353ddbb 100644 --- a/packages/react-native-builder-bob/src/targets/module.ts +++ b/packages/react-native-builder-bob/src/targets/module.ts @@ -1,8 +1,8 @@ -import path from 'path'; -import kleur from 'kleur'; +import path from 'node:path'; import { deleteAsync } from 'del'; -import compile, { type CompileOptions } from '../utils/compile'; -import type { Input, Variants } from '../types'; +import kleur from 'kleur'; +import type { Input, Variants } from '../types.ts'; +import compile, { type CompileOptions } from '../utils/compile.ts'; type Options = Input & { options?: CompileOptions; diff --git a/packages/react-native-builder-bob/src/targets/typescript.ts b/packages/react-native-builder-bob/src/targets/typescript.ts index 0d32a2633..84718f80e 100644 --- a/packages/react-native-builder-bob/src/targets/typescript.ts +++ b/packages/react-native-builder-bob/src/targets/typescript.ts @@ -1,12 +1,12 @@ +import { platform } from 'node:os'; +import path from 'node:path'; import { deleteAsync } from 'del'; import fs from 'fs-extra'; import JSON5 from 'json5'; import kleur from 'kleur'; -import { platform } from 'os'; -import path from 'path'; import which from 'which'; -import type { Input, Variants } from '../types'; -import { spawn } from '../utils/spawn'; +import type { Input, Variants } from '../types.ts'; +import { spawn } from '../utils/spawn.ts'; type Options = Input & { options?: { diff --git a/packages/react-native-builder-bob/src/utils/androidAssemble.ts b/packages/react-native-builder-bob/src/utils/androidAssemble.ts index e211e5432..5e7a23030 100644 --- a/packages/react-native-builder-bob/src/utils/androidAssemble.ts +++ b/packages/react-native-builder-bob/src/utils/androidAssemble.ts @@ -1,9 +1,9 @@ -import path from 'path'; +import { execFileSync } from 'node:child_process'; +import { platform } from 'node:os'; +import path from 'node:path'; import kleur from 'kleur'; import fs from 'fs-extra'; -import { execFileSync } from 'child_process'; -import { platform } from 'os'; -import type { Report } from '../types'; +import type { Report } from '../types.ts'; type Options = { root: string; diff --git a/packages/react-native-builder-bob/src/utils/compile.ts b/packages/react-native-builder-bob/src/utils/compile.ts index dc6454872..49a7dd6f9 100644 --- a/packages/react-native-builder-bob/src/utils/compile.ts +++ b/packages/react-native-builder-bob/src/utils/compile.ts @@ -1,10 +1,13 @@ -import path from 'path'; +import { createRequire } from 'node:module'; +import path from 'node:path'; import fs from 'fs-extra'; import kleur from 'kleur'; import * as babel from '@babel/core'; import { globSync } from 'glob'; -import type { Input, Variants } from '../types'; -import { isCodegenSpec } from './isCodegenSpec'; +import type { Input, Variants } from '../types.ts'; +import { isCodegenSpec } from './isCodegenSpec.ts'; + +const require = createRequire(import.meta.url); export type CompileOptions = { esm?: boolean; @@ -140,7 +143,7 @@ export default async function compile({ ...(babelrc || configFile ? null : { - presets: [require.resolve('../../configs/babel-preset')], + presets: [require.resolve('../../configs/babel-preset.cjs')], }), }); diff --git a/packages/react-native-builder-bob/src/utils/isGitDirty.ts b/packages/react-native-builder-bob/src/utils/isGitDirty.ts new file mode 100644 index 000000000..efc5620a0 --- /dev/null +++ b/packages/react-native-builder-bob/src/utils/isGitDirty.ts @@ -0,0 +1,16 @@ +import { sync as crossSpawnSync } from 'cross-spawn'; + +export const isGitDirty = (cwd: string = process.cwd()): boolean => { + const result = crossSpawnSync('git', ['status', '--short'], { + cwd, + stdio: ['ignore', 'pipe', 'ignore'], + encoding: 'utf-8', + }); + + if (result.error || result.status !== 0) { + // Not a git repo or git not available + return false; + } + + return result.stdout.length > 0; +}; diff --git a/packages/react-native-builder-bob/src/utils/loadConfig.ts b/packages/react-native-builder-bob/src/utils/loadConfig.ts index eda333482..4ceaa504f 100644 --- a/packages/react-native-builder-bob/src/utils/loadConfig.ts +++ b/packages/react-native-builder-bob/src/utils/loadConfig.ts @@ -1,5 +1,8 @@ -import { join } from 'path'; -import { name } from '../../package.json'; +import { createRequire } from 'node:module'; +import { join } from 'node:path'; +import pack from '../../package.json' with { type: 'json' }; + +const require = createRequire(import.meta.url); const searchPlaces = [ 'bob.config.mjs', @@ -15,10 +18,10 @@ export const loadConfig = ( const result = requireConfig(root, filename); if (filename === 'package.json' && result != null) { - if (result.content[name] != null) { + if (result.content[pack.name] != null) { return { filepath: result.filepath, - config: result.content[name], + config: result.content[pack.name], }; } } @@ -47,7 +50,6 @@ const requireConfig = (root: string, filename: string) => { const filepath = join(root, filename); try { - // eslint-disable-next-line @typescript-eslint/no-require-imports const content = require(filepath); return { diff --git a/packages/react-native-builder-bob/src/utils/workerize.ts b/packages/react-native-builder-bob/src/utils/workerize.ts index 7f11d5894..29cf6d6e3 100644 --- a/packages/react-native-builder-bob/src/utils/workerize.ts +++ b/packages/react-native-builder-bob/src/utils/workerize.ts @@ -1,16 +1,19 @@ +import { fileURLToPath } from 'node:url'; import { Worker, isMainThread, parentPort, workerData, } from 'node:worker_threads'; -import codegen from '../targets/codegen'; -import commonjs from '../targets/commonjs'; -import custom from '../targets/custom'; -import module from '../targets/module'; -import typescript from '../targets/typescript'; -import type { Report } from '../types'; -import type { Target } from '../schema'; +import codegen from '../targets/codegen/index.ts'; +import commonjs from '../targets/commonjs.ts'; +import custom from '../targets/custom.ts'; +import module from '../targets/module.ts'; +import typescript from '../targets/typescript.ts'; +import type { Report } from '../types.ts'; +import type { Target } from '../schema.ts'; + +const __filename = fileURLToPath(import.meta.url); type WorkerData = { target: T; diff --git a/packages/react-native-builder-bob/tsconfig.json b/packages/react-native-builder-bob/tsconfig.json new file mode 100644 index 000000000..cf06e1846 --- /dev/null +++ b/packages/react-native-builder-bob/tsconfig.json @@ -0,0 +1,12 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "composite": true, + "rootDir": ".", + "outDir": "./lib", + "declaration": true, + "sourceMap": true + }, + "include": ["src/**/*", "package.json"], + "exclude": ["lib", "**/__fixtures__"] +} diff --git a/tsconfig.json b/tsconfig.json index 5d688406c..e35f0730b 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,26 +1,17 @@ { "compilerOptions": { - "composite": true, - "rootDir": ".", - "paths": { - "create-react-native-library": [ - "./packages/create-react-native-library/src" - ], - "react-native-builder-bob": ["./packages/react-native-builder-bob/src"] - }, - "outDir": "./lib", "allowJs": true, + "allowImportingTsExtensions": true, "allowUnreachableCode": false, "allowUnusedLabels": false, "esModuleInterop": true, "erasableSyntaxOnly": true, - "emitDeclarationOnly": true, "forceConsistentCasingInFileNames": true, "isolatedModules": true, "jsx": "react-jsx", "lib": ["esnext", "dom"], - "module": "esnext", - "moduleResolution": "node", + "module": "nodenext", + "moduleResolution": "nodenext", "noFallthroughCasesInSwitch": true, "noImplicitReturns": true, "noImplicitUseStrict": false, @@ -29,23 +20,17 @@ "noUnusedLocals": true, "noUnusedParameters": true, "resolveJsonModule": true, + "rewriteRelativeImportExtensions": true, "skipLibCheck": true, "strict": true, "target": "esnext", "useDefineForClassFields": true, "verbatimModuleSyntax": true }, + "files": [], "references": [ - { "path": "docs"} - ], - "include": [ - "**/*", - "**/package.json" - ], - "exclude": [ - "**/lib", - "**/doc_build", - "packages/react-native-builder-bob/src/__fixtures__", - "packages/create-react-native-library/templates" + { "path": "docs" }, + { "path": "packages/react-native-builder-bob" }, + { "path": "packages/create-react-native-library" } ] } diff --git a/yarn.lock b/yarn.lock index 9a9f48b71..8d8b9bbdd 100644 --- a/yarn.lock +++ b/yarn.lock @@ -28,33 +28,6 @@ __metadata: languageName: node linkType: hard -"@babel/cli@npm:^7.28.6": - version: 7.28.6 - resolution: "@babel/cli@npm:7.28.6" - dependencies: - "@jridgewell/trace-mapping": "npm:^0.3.28" - "@nicolo-ribaudo/chokidar-2": "npm:2.1.8-no-fsevents.3" - chokidar: "npm:^3.6.0" - commander: "npm:^6.2.0" - convert-source-map: "npm:^2.0.0" - fs-readdir-recursive: "npm:^1.1.0" - glob: "npm:^7.2.0" - make-dir: "npm:^2.1.0" - slash: "npm:^2.0.0" - peerDependencies: - "@babel/core": ^7.0.0-0 - dependenciesMeta: - "@nicolo-ribaudo/chokidar-2": - optional: true - chokidar: - optional: true - bin: - babel: ./bin/babel.js - babel-external-helpers: ./bin/babel-external-helpers.js - checksum: 10c0/b1bde80a44ca2f23c4786278db3faf0c41b249a67e6205bf9859debd19b58face48b8d0b57d3843b08c813b5d0b93ebbe153974b67fcea493cb9829ae76b6cb4 - languageName: node - linkType: hard - "@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.28.6, @babel/code-frame@npm:^7.29.0": version: 7.29.0 resolution: "@babel/code-frame@npm:7.29.0" @@ -2379,13 +2352,6 @@ __metadata: languageName: node linkType: hard -"@nicolo-ribaudo/chokidar-2@npm:2.1.8-no-fsevents.3": - version: 2.1.8-no-fsevents.3 - resolution: "@nicolo-ribaudo/chokidar-2@npm:2.1.8-no-fsevents.3" - checksum: 10c0/27dcabaa0c9a29b3a60217bd3fff87a22cb43ed77863da570c6828e4d0b8f1c6ee52582cd3d439275a2b1f2051005e648ed866b981f2a03b61c645b7e4806ba7 - languageName: node - linkType: hard - "@nodelib/fs.scandir@npm:2.1.5": version: 2.1.5 resolution: "@nodelib/fs.scandir@npm:2.1.5" @@ -5236,13 +5202,6 @@ __metadata: languageName: node linkType: hard -"commander@npm:^6.2.0": - version: 6.2.1 - resolution: "commander@npm:6.2.1" - checksum: 10c0/85748abd9d18c8bc88febed58b98f66b7c591d9b5017cad459565761d7b29ca13b7783ea2ee5ce84bf235897333706c4ce29adf1ce15c8252780e7000e2ce9ea - languageName: node - linkType: hard - "commitlint@npm:^20.5.0": version: 20.5.0 resolution: "commitlint@npm:20.5.0" @@ -5491,10 +5450,6 @@ __metadata: version: 0.0.0-use.local resolution: "create-react-native-library@workspace:packages/create-react-native-library" dependencies: - "@babel/cli": "npm:^7.28.6" - "@babel/core": "npm:^7.29.0" - "@babel/preset-env": "npm:^7.29.2" - "@babel/preset-typescript": "npm:^7.28.5" "@commitlint/config-conventional": "npm:^20.5.0" "@types/cross-spawn": "npm:^6.0.6" "@types/dedent": "npm:^0.7.2" @@ -5509,7 +5464,8 @@ __metadata: github-username: "npm:^9.0.0" kleur: "npm:^4.1.5" ora: "npm:^9.3.0" - pigment: "npm:^0.4.3" + pigment: "npm:^0.4.4" + typescript: "npm:^5.8.3" validate-npm-package-name: "npm:^7.0.2" bin: create-react-native-library: bin/create-react-native-library @@ -5820,15 +5776,6 @@ __metadata: languageName: node linkType: hard -"end-of-stream@npm:^1.1.0": - version: 1.4.4 - resolution: "end-of-stream@npm:1.4.4" - dependencies: - once: "npm:^1.4.0" - checksum: 10c0/870b423afb2d54bb8d243c63e07c170409d41e20b47eeef0727547aea5740bd6717aca45597a9f2745525667a6b804c1e7bede41f856818faee5806dd9ff3975 - languageName: node - linkType: hard - "entities@npm:^4.2.0, entities@npm:^4.4.0": version: 4.5.0 resolution: "entities@npm:4.5.0" @@ -6469,23 +6416,6 @@ __metadata: languageName: node linkType: hard -"execa@npm:^4.0.3": - version: 4.1.0 - resolution: "execa@npm:4.1.0" - dependencies: - cross-spawn: "npm:^7.0.0" - get-stream: "npm:^5.0.0" - human-signals: "npm:^1.1.1" - is-stream: "npm:^2.0.0" - merge-stream: "npm:^2.0.0" - npm-run-path: "npm:^4.0.0" - onetime: "npm:^5.1.0" - signal-exit: "npm:^3.0.2" - strip-final-newline: "npm:^2.0.0" - checksum: 10c0/02211601bb1c52710260edcc68fb84c3c030dc68bafc697c90ada3c52cc31375337de8c24826015b8382a58d63569ffd203b79c94fef217d65503e3e8d2c52ba - languageName: node - linkType: hard - "execa@npm:^9.6.1": version: 9.6.1 resolution: "execa@npm:9.6.1" @@ -6795,13 +6725,6 @@ __metadata: languageName: node linkType: hard -"fs-readdir-recursive@npm:^1.1.0": - version: 1.1.0 - resolution: "fs-readdir-recursive@npm:1.1.0" - checksum: 10c0/7e190393952143e674b6d1ad4abcafa1b5d3e337fcc21b0cb051079a7140a54617a7df193d562ef9faf21bd7b2148a38601b3d5c16261fa76f278d88dc69989c - languageName: node - linkType: hard - "fs.realpath@npm:^1.0.0": version: 1.0.0 resolution: "fs.realpath@npm:1.0.0" @@ -6898,15 +6821,6 @@ __metadata: languageName: node linkType: hard -"get-stream@npm:^5.0.0": - version: 5.2.0 - resolution: "get-stream@npm:5.2.0" - dependencies: - pump: "npm:^3.0.0" - checksum: 10c0/43797ffd815fbb26685bf188c8cfebecb8af87b3925091dd7b9a9c915993293d78e3c9e1bce125928ff92f2d0796f3889b92b5ec6d58d1041b574682132e0a80 - languageName: node - linkType: hard - "get-stream@npm:^9.0.0": version: 9.0.1 resolution: "get-stream@npm:9.0.1" @@ -7018,7 +6932,7 @@ __metadata: languageName: node linkType: hard -"glob@npm:^7.1.3, glob@npm:^7.1.4, glob@npm:^7.2.0": +"glob@npm:^7.1.3, glob@npm:^7.1.4": version: 7.2.3 resolution: "glob@npm:7.2.3" dependencies: @@ -7484,13 +7398,6 @@ __metadata: languageName: node linkType: hard -"human-signals@npm:^1.1.1": - version: 1.1.1 - resolution: "human-signals@npm:1.1.1" - checksum: 10c0/18810ed239a7a5e23fb6c32d0fd4be75d7cd337a07ad59b8dbf0794cb0761e6e628349ee04c409e605fe55344716eab5d0a47a62ba2a2d0d367c89a2b4247b1e - languageName: node - linkType: hard - "human-signals@npm:^8.0.1": version: 8.0.1 resolution: "human-signals@npm:8.0.1" @@ -7671,16 +7578,6 @@ __metadata: languageName: node linkType: hard -"is-absolute@npm:^1.0.0": - version: 1.0.0 - resolution: "is-absolute@npm:1.0.0" - dependencies: - is-relative: "npm:^1.0.0" - is-windows: "npm:^1.0.1" - checksum: 10c0/422302ce879d4f3ca6848499b6f3ddcc8fd2dc9f3e9cad3f6bcedff58cdfbbbd7f4c28600fffa7c59a858f1b15c27fb6cfe1d5275e58a36d2bf098a44ef5abc4 - languageName: node - linkType: hard - "is-alphabetical@npm:^2.0.0": version: 2.0.1 resolution: "is-alphabetical@npm:2.0.1" @@ -7760,26 +7657,6 @@ __metadata: languageName: node linkType: hard -"is-git-dirty@npm:^2.0.2": - version: 2.0.2 - resolution: "is-git-dirty@npm:2.0.2" - dependencies: - execa: "npm:^4.0.3" - is-git-repository: "npm:^2.0.0" - checksum: 10c0/e7c223fb26416af52e0f3aba97b0147394fd96314d0a620cc4b44543538d62951ebaf049919a7f5df9bab270679dfde277b848d087a2733e00ca8481ee2fe984 - languageName: node - linkType: hard - -"is-git-repository@npm:^2.0.0": - version: 2.0.0 - resolution: "is-git-repository@npm:2.0.0" - dependencies: - execa: "npm:^4.0.3" - is-absolute: "npm:^1.0.0" - checksum: 10c0/522f41a205dab4b6bad43e69b4ea9e29612b9a2ff82281425632a4c6c7c106cf65eabaaa4967bec0b468331660cde10d88101962f913e3efa59f4fffdfb4154f - languageName: node - linkType: hard - "is-glob@npm:^4.0.0, is-glob@npm:^4.0.1, is-glob@npm:^4.0.3, is-glob@npm:~4.0.1": version: 4.0.3 resolution: "is-glob@npm:4.0.3" @@ -7859,15 +7736,6 @@ __metadata: languageName: node linkType: hard -"is-relative@npm:^1.0.0": - version: 1.0.0 - resolution: "is-relative@npm:1.0.0" - dependencies: - is-unc-path: "npm:^1.0.0" - checksum: 10c0/61157c4be8594dd25ac6f0ef29b1218c36667259ea26698367a4d9f39ff9018368bc365c490b3c79be92dfb1e389e43c4b865c95709e7b3bc72c5932f751fb60 - languageName: node - linkType: hard - "is-retry-allowed@npm:^2.2.0": version: 2.2.0 resolution: "is-retry-allowed@npm:2.2.0" @@ -7884,13 +7752,6 @@ __metadata: languageName: node linkType: hard -"is-stream@npm:^2.0.0": - version: 2.0.1 - resolution: "is-stream@npm:2.0.1" - checksum: 10c0/7c284241313fc6efc329b8d7f08e16c0efeb6baab1b4cd0ba579eb78e5af1aa5da11e68559896a2067cd6c526bd29241dda4eb1225e627d5aa1a89a76d4635a5 - languageName: node - linkType: hard - "is-stream@npm:^4.0.1": version: 4.0.1 resolution: "is-stream@npm:4.0.1" @@ -7898,15 +7759,6 @@ __metadata: languageName: node linkType: hard -"is-unc-path@npm:^1.0.0": - version: 1.0.0 - resolution: "is-unc-path@npm:1.0.0" - dependencies: - unc-path-regex: "npm:^0.1.2" - checksum: 10c0/ac1b78f9b748196e3be3d0e722cd4b0f98639247a130a8f2473a58b29baf63fdb1b1c5a12c830660c5ee6ef0279c5418ca8e346f98cbe1a29e433d7ae531d42e - languageName: node - linkType: hard - "is-unicode-supported@npm:^2.0.0, is-unicode-supported@npm:^2.1.0": version: 2.1.0 resolution: "is-unicode-supported@npm:2.1.0" @@ -7914,13 +7766,6 @@ __metadata: languageName: node linkType: hard -"is-windows@npm:^1.0.1": - version: 1.0.2 - resolution: "is-windows@npm:1.0.2" - checksum: 10c0/b32f418ab3385604a66f1b7a3ce39d25e8881dee0bd30816dc8344ef6ff9df473a732bcc1ec4e84fe99b2f229ae474f7133e8e93f9241686cfcf7eebe53ba7a5 - languageName: node - linkType: hard - "isexe@npm:^2.0.0": version: 2.0.0 resolution: "isexe@npm:2.0.0" @@ -8525,16 +8370,6 @@ __metadata: languageName: node linkType: hard -"make-dir@npm:^2.1.0": - version: 2.1.0 - resolution: "make-dir@npm:2.1.0" - dependencies: - pify: "npm:^4.0.1" - semver: "npm:^5.6.0" - checksum: 10c0/ada869944d866229819735bee5548944caef560d7a8536ecbc6536edca28c72add47cc4f6fc39c54fb25d06b58da1f8994cf7d9df7dadea047064749efc085d8 - languageName: node - linkType: hard - "make-fetch-happen@npm:^11.0.3": version: 11.1.1 resolution: "make-fetch-happen@npm:11.1.1" @@ -9537,13 +9372,6 @@ __metadata: languageName: node linkType: hard -"mimic-fn@npm:^2.1.0": - version: 2.1.0 - resolution: "mimic-fn@npm:2.1.0" - checksum: 10c0/b26f5479d7ec6cc2bce275a08f146cf78f5e7b661b18114e2506dd91ec7ec47e7a25bf4360e5438094db0560bcc868079fb3b1fb3892b833c1ecbf63f80c95a4 - languageName: node - linkType: hard - "mimic-function@npm:^5.0.0": version: 5.0.1 resolution: "mimic-function@npm:5.0.1" @@ -9969,15 +9797,6 @@ __metadata: languageName: node linkType: hard -"npm-run-path@npm:^4.0.0": - version: 4.0.1 - resolution: "npm-run-path@npm:4.0.1" - dependencies: - path-key: "npm:^3.0.0" - checksum: 10c0/6f9353a95288f8455cf64cbeb707b28826a7f29690244c1e4bb61ec573256e021b6ad6651b394eb1ccfd00d6ec50147253aba2c5fe58a57ceb111fad62c519ac - languageName: node - linkType: hard - "npm-run-path@npm:^6.0.0": version: 6.0.0 resolution: "npm-run-path@npm:6.0.0" @@ -10039,7 +9858,7 @@ __metadata: languageName: node linkType: hard -"once@npm:^1.3.0, once@npm:^1.3.1, once@npm:^1.4.0": +"once@npm:^1.3.0": version: 1.4.0 resolution: "once@npm:1.4.0" dependencies: @@ -10048,15 +9867,6 @@ __metadata: languageName: node linkType: hard -"onetime@npm:^5.1.0": - version: 5.1.2 - resolution: "onetime@npm:5.1.2" - dependencies: - mimic-fn: "npm:^2.1.0" - checksum: 10c0/ffcef6fbb2692c3c40749f31ea2e22677a876daea92959b8a80b521d95cca7a668c884d8b2045d1d8ee7d56796aa405c405462af112a1477594cc63531baeb8f - languageName: node - linkType: hard - "onetime@npm:^7.0.0": version: 7.0.0 resolution: "onetime@npm:7.0.0" @@ -10347,7 +10157,7 @@ __metadata: languageName: node linkType: hard -"path-key@npm:^3.0.0, path-key@npm:^3.1.0": +"path-key@npm:^3.1.0": version: 3.1.1 resolution: "path-key@npm:3.1.1" checksum: 10c0/748c43efd5a569c039d7a00a03b58eecd1d75f3999f5a28303d75f521288df4823bc057d8784eb72358b2895a05f29a070bc9f1f17d28226cc4e62494cc58c4c @@ -10430,20 +10240,13 @@ __metadata: languageName: node linkType: hard -"pify@npm:^4.0.1": - version: 4.0.1 - resolution: "pify@npm:4.0.1" - checksum: 10c0/6f9d404b0d47a965437403c9b90eca8bb2536407f03de165940e62e72c8c8b75adda5516c6b9b23675a5877cc0bcac6bdfb0ef0e39414cd2476d5495da40e7cf - languageName: node - linkType: hard - -"pigment@npm:^0.4.3": - version: 0.4.3 - resolution: "pigment@npm:0.4.3" +"pigment@npm:^0.4.4": + version: 0.4.4 + resolution: "pigment@npm:0.4.4" dependencies: ansi-escapes: "npm:^7.2.0" wrap-ansi: "npm:^9.0.2" - checksum: 10c0/98f0fc8a6500d25bfe1cfa149c16940f3933b6cafebf503a81af8bfbb8e6d63208bea6e2dcd3a6a4aeb5e329cbd8981696cabe5d783cb683a296fd91f94b2998 + checksum: 10c0/d2663d4e44603ed4bdab7b1c7c73c0c8a42390599c7f7f880dc91b2cb00f252667e9e22606ca7c56db6bd36e4a6067e68141afd17d1e7d03867da8866bde5bb0 languageName: node linkType: hard @@ -10605,16 +10408,6 @@ __metadata: languageName: node linkType: hard -"pump@npm:^3.0.0": - version: 3.0.0 - resolution: "pump@npm:3.0.0" - dependencies: - end-of-stream: "npm:^1.1.0" - once: "npm:^1.3.1" - checksum: 10c0/bbdeda4f747cdf47db97428f3a135728669e56a0ae5f354a9ac5b74556556f5446a46f720a8f14ca2ece5be9b4d5d23c346db02b555f46739934cc6c093a5478 - languageName: node - linkType: hard - "punycode@npm:^2.1.0": version: 2.3.0 resolution: "punycode@npm:2.3.0" @@ -10667,7 +10460,6 @@ __metadata: version: 0.0.0-use.local resolution: "react-native-builder-bob@workspace:packages/react-native-builder-bob" dependencies: - "@babel/cli": "npm:^7.28.6" "@babel/core": "npm:^7.29.0" "@babel/plugin-transform-flow-strip-types": "npm:^7.27.1" "@babel/plugin-transform-strict-mode": "npm:^7.27.1" @@ -10695,7 +10487,6 @@ __metadata: escape-string-regexp: "npm:^5.0.0" fs-extra: "npm:^11.3.4" glob: "npm:^13.0.6" - is-git-dirty: "npm:^2.0.2" json5: "npm:^2.2.3" kleur: "npm:^4.1.5" metro-config: "npm:^0.84.2" @@ -10703,6 +10494,7 @@ __metadata: mock-stdin: "npm:^1.0.0" prompts: "npm:^2.4.2" react-native-monorepo-config: "npm:^0.3.3" + typescript: "npm:^5.8.3" vitest: "npm:^4.1.2" which: "npm:^6.0.1" yargs: "npm:^18.0.0" @@ -11280,15 +11072,6 @@ __metadata: languageName: node linkType: hard -"semver@npm:^5.6.0": - version: 5.7.2 - resolution: "semver@npm:5.7.2" - bin: - semver: bin/semver - checksum: 10c0/e4cf10f86f168db772ae95d86ba65b3fd6c5967c94d97c708ccb463b778c2ee53b914cd7167620950fc07faf5a564e6efe903836639e512a1aa15fbc9667fa25 - languageName: node - linkType: hard - "semver@npm:^6.3.1": version: 6.3.1 resolution: "semver@npm:6.3.1" @@ -11367,7 +11150,7 @@ __metadata: languageName: node linkType: hard -"signal-exit@npm:^3.0.2, signal-exit@npm:^3.0.7": +"signal-exit@npm:^3.0.7": version: 3.0.7 resolution: "signal-exit@npm:3.0.7" checksum: 10c0/25d272fa73e146048565e08f3309d5b942c1979a6f4a58a8c59d5fa299728e9c2fcd1a759ec870863b1fd38653670240cd420dad2ad9330c71f36608a6a1c912 @@ -11402,13 +11185,6 @@ __metadata: languageName: node linkType: hard -"slash@npm:^2.0.0": - version: 2.0.0 - resolution: "slash@npm:2.0.0" - checksum: 10c0/f83dbd3cb62c41bb8fcbbc6bf5473f3234b97fa1d008f571710a9d3757a28c7169e1811cad1554ccb1cc531460b3d221c9a7b37f549398d9a30707f0a5af9193 - languageName: node - linkType: hard - "slash@npm:^5.1.0": version: 5.1.0 resolution: "slash@npm:5.1.0" @@ -11721,13 +11497,6 @@ __metadata: languageName: node linkType: hard -"strip-final-newline@npm:^2.0.0": - version: 2.0.0 - resolution: "strip-final-newline@npm:2.0.0" - checksum: 10c0/bddf8ccd47acd85c0e09ad7375409d81653f645fda13227a9d459642277c253d877b68f2e5e4d819fe75733b0e626bac7e954c04f3236f6d196f79c94fa4a96f - languageName: node - linkType: hard - "strip-final-newline@npm:^4.0.0": version: 4.0.0 resolution: "strip-final-newline@npm:4.0.0" @@ -12056,13 +11825,6 @@ __metadata: languageName: node linkType: hard -"unc-path-regex@npm:^0.1.2": - version: 0.1.2 - resolution: "unc-path-regex@npm:0.1.2" - checksum: 10c0/bf9c781c4e2f38e6613ea17a51072e4b416840fbe6eeb244597ce9b028fac2fb6cfd3dde1f14111b02c245e665dc461aab8168ecc30b14364d02caa37f812996 - languageName: node - linkType: hard - "undici-types@npm:~6.21.0": version: 6.21.0 resolution: "undici-types@npm:6.21.0"