From b14d7a3191b4427fab760600000554be5ab4b9d4 Mon Sep 17 00:00:00 2001 From: EndLess728 Date: Tue, 23 Dec 2025 19:49:32 +0530 Subject: [PATCH 1/3] chore: created expo config plugin to copy model assets in native dirs --- app.plugin.js | 1 + package.json | 33 ++- ...t-native-mediapipe-posedetection-0.3.2.tgz | Bin 0 -> 47629 bytes src/plugin/withCustomAssets.ts | 174 +++++++++++ yarn.lock | 279 +++++++++++++++++- 5 files changed, 476 insertions(+), 11 deletions(-) create mode 100644 app.plugin.js create mode 100644 react-native-mediapipe-posedetection-0.3.2.tgz create mode 100644 src/plugin/withCustomAssets.ts diff --git a/app.plugin.js b/app.plugin.js new file mode 100644 index 0000000..881d750 --- /dev/null +++ b/app.plugin.js @@ -0,0 +1 @@ +module.exports = require('./lib/commonjs/plugin/withCustomAssets').default; diff --git a/package.json b/package.json index 9604d4f..e82e4ff 100644 --- a/package.json +++ b/package.json @@ -2,14 +2,22 @@ "name": "react-native-mediapipe-posedetection", "version": "0.2.0", "description": "PoseDetection using google's mediapipe models using poselandmark", - "main": "./lib/module/index.js", - "types": "./lib/typescript/src/index.d.ts", + "main": "./lib/commonjs/index.js", + "module": "./lib/module/index.js", + "types": "./lib/typescript/commonjs/src/index.d.ts", + "app": "app.plugin.js", "exports": { ".": { - "source": "./src/index.tsx", - "types": "./lib/typescript/src/index.d.ts", - "default": "./lib/module/index.js" + "import": { + "types": "./lib/typescript/module/src/index.d.ts", + "default": "./lib/module/index.js" + }, + "require": { + "types": "./lib/typescript/commonjs/src/index.d.ts", + "default": "./lib/commonjs/index.js" + } }, + "./app.plugin.js": "./app.plugin.js", "./package.json": "./package.json" }, "files": [ @@ -19,6 +27,7 @@ "ios", "cpp", "*.podspec", + "app.plugin.js", "react-native.config.js", "!ios/build", "!android/build", @@ -55,6 +64,9 @@ "url": "https://github.com/EndLess728/react-native-mediapipe-posedetection/issues" }, "homepage": "https://github.com/EndLess728/react-native-mediapipe-posedetection#readme", + "dependencies": { + "fs-extra": "^11.2.0" + }, "publishConfig": { "registry": "https://registry.npmjs.org/" }, @@ -67,6 +79,7 @@ "@react-native/babel-preset": "0.81.1", "@react-native/eslint-config": "^0.81.1", "@release-it/conventional-changelog": "^10.0.1", + "@types/fs-extra": "^11.0.4", "@types/jest": "^29.5.14", "@types/react": "^19.1.0", "commitlint": "^19.8.1", @@ -87,12 +100,16 @@ "typescript": "^5.9.2" }, "peerDependencies": { + "@expo/config-plugins": ">=7", "react": "*", "react-native": ">=0.74.0", "react-native-vision-camera": "*", "react-native-worklets-core": "*" }, "peerDependenciesMeta": { + "@expo/config-plugins": { + "optional": true + }, "react-native": {} }, "workspaces": [ @@ -103,6 +120,12 @@ "source": "src", "output": "lib", "targets": [ + [ + "commonjs", + { + "esm": true + } + ], [ "module", { diff --git a/react-native-mediapipe-posedetection-0.3.2.tgz b/react-native-mediapipe-posedetection-0.3.2.tgz new file mode 100644 index 0000000000000000000000000000000000000000..2c7428a19bc21c3b7b04298f0944b8b1fda13b5e GIT binary patch literal 47629 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 = ( + config, + props +) => { + const { assetsPaths = [], ignoredPattern } = props; + + return withDangerousMod(config, [ + 'android', + async (cfg) => { + const { projectRoot } = cfg.modRequest; + + // Copy to android/app/src/main/assets/ + const assetsDir = path.join( + projectRoot, + 'android', + 'app', + 'src', + 'main', + 'assets' + ); + ensureDirSync(assetsDir); + + for (const assetSourceDir of assetsPaths) { + const assetSourcePath = path.join(projectRoot, assetSourceDir); + + let files; + try { + files = readdirSync(assetSourcePath, { withFileTypes: true }); + } catch { + console.warn( + `⚠️ [Android] Could not read directory: ${assetSourcePath}` + ); + continue; + } + + for (const file of files) { + if ( + file.isFile() && + (!ignoredPattern || !file.name.match(new RegExp(ignoredPattern))) + ) { + const srcPath = path.join(assetSourcePath, file.name); + const destPath = path.join(assetsDir, file.name); + copyFileSync(srcPath, destPath); + console.log(`✅ [Android] Copied ${file.name} to assets/`); + } + } + } + + return cfg; + }, + ]); +}; + +const withCustomAssetsIos: ConfigPlugin = (config, props) => { + const { assetsPaths = [], ignoredPattern } = props; + + return withXcodeProject(config, async (cfg) => { + const { projectRoot, platformProjectRoot } = cfg.modRequest; + const project = cfg.modResults; + const projectName = cfg.modRequest.projectName || 'App'; + + // Copy files directly to iOS root folder + ensureDirSync(platformProjectRoot); + + for (const assetSourceDir of assetsPaths) { + const assetSourcePath = path.join(projectRoot, assetSourceDir); + + let files; + try { + files = readdirSync(assetSourcePath, { withFileTypes: true }); + } catch { + console.warn(`⚠️ [iOS] Could not read directory: ${assetSourcePath}`); + continue; + } + + for (const file of files) { + if ( + file.isFile() && + (!ignoredPattern || !file.name.match(new RegExp(ignoredPattern))) + ) { + const srcPath = path.join(assetSourcePath, file.name); + const destPath = path.join(platformProjectRoot, file.name); + copyFileSync(srcPath, destPath); + console.log(`✅ [iOS] Copied ${file.name} to ios/ root`); + + // Add the file to the Xcode project with proper reference + IOSConfig.XcodeUtils.addResourceFileToGroup({ + filepath: file.name, + groupName: projectName, + project, + isBuildFile: true, + verbose: true, + }); + } + } + } + + return cfg; + }); +}; + +/** + * Main config plugin entry point + * @param config - Expo config + * @param options - Plugin options + * @param options.assetsPaths - Array of paths to asset directories (relative to project root) + * @param options.ignoredPattern - Optional regex pattern to ignore files + */ +const withCustomAssets: ConfigPlugin = ( + config, + options = {} +) => { + const { assetsPaths = [], ignoredPattern } = options; + + if (assetsPaths.length === 0) { + console.warn( + '⚠️ [react-native-mediapipe-posedetection] No assetsPaths provided to config plugin' + ); + return config; + } + + let modifiedConfig = withCustomAssetsAndroid(config, { + assetsPaths, + ignoredPattern, + }); + modifiedConfig = withCustomAssetsIos(modifiedConfig, { + assetsPaths, + ignoredPattern, + }); + + return modifiedConfig; +}; + +export default createRunOncePlugin(withCustomAssets, pkg.name, pkg.version); diff --git a/yarn.lock b/yarn.lock index ed295be..8ce0bf3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -32,6 +32,15 @@ __metadata: languageName: node linkType: hard +"@babel/code-frame@npm:~7.10.4": + version: 7.10.4 + resolution: "@babel/code-frame@npm:7.10.4" + dependencies: + "@babel/highlight": "npm:^7.10.4" + checksum: 10c0/69e0f52986a1f40231d891224f420436629b6678711b68c088e97b7bdba1607aeb5eb9cfb070275c433f0bf43c37c134845db80d1cdbf5ac88a69b0bdcce9402 + languageName: node + linkType: hard + "@babel/compat-data@npm:^7.27.2, @babel/compat-data@npm:^7.27.7, @babel/compat-data@npm:^7.28.5": version: 7.28.5 resolution: "@babel/compat-data@npm:7.28.5" @@ -255,7 +264,7 @@ __metadata: languageName: node linkType: hard -"@babel/helper-validator-identifier@npm:^7.27.1, @babel/helper-validator-identifier@npm:^7.28.5": +"@babel/helper-validator-identifier@npm:^7.25.9, @babel/helper-validator-identifier@npm:^7.27.1, @babel/helper-validator-identifier@npm:^7.28.5": version: 7.28.5 resolution: "@babel/helper-validator-identifier@npm:7.28.5" checksum: 10c0/42aaebed91f739a41f3d80b72752d1f95fd7c72394e8e4bd7cdd88817e0774d80a432451bcba17c2c642c257c483bf1d409dd4548883429ea9493a3bc4ab0847 @@ -290,6 +299,18 @@ __metadata: languageName: node linkType: hard +"@babel/highlight@npm:^7.10.4": + version: 7.25.9 + resolution: "@babel/highlight@npm:7.25.9" + dependencies: + "@babel/helper-validator-identifier": "npm:^7.25.9" + chalk: "npm:^2.4.2" + js-tokens: "npm:^4.0.0" + picocolors: "npm:^1.0.0" + checksum: 10c0/ae0ed93c151b85a07df42936117fa593ce91563a22dfc8944a90ae7088c9679645c33e00dcd20b081c1979665d65f986241172dae1fc9e5922692fc3ff685a49 + languageName: node + linkType: hard + "@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.14.7, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.23.9, @babel/parser@npm:^7.25.3, @babel/parser@npm:^7.27.2, @babel/parser@npm:^7.28.5": version: 7.28.5 resolution: "@babel/parser@npm:7.28.5" @@ -1860,6 +1881,63 @@ __metadata: languageName: node linkType: hard +"@expo/config-plugins@npm:^9.0.0": + version: 9.1.7 + resolution: "@expo/config-plugins@npm:9.1.7" + dependencies: + "@expo/config-types": "npm:^53.0.0" + "@expo/json-file": "npm:~9.1.3" + "@expo/plist": "npm:^0.3.3" + "@expo/sdk-runtime-versions": "npm:^1.0.0" + chalk: "npm:^4.1.2" + debug: "npm:^4.3.5" + getenv: "npm:^1.0.0" + glob: "npm:^10.4.2" + resolve-from: "npm:^5.0.0" + semver: "npm:^7.5.4" + slash: "npm:^3.0.0" + slugify: "npm:^1.6.6" + xcode: "npm:^3.0.1" + xml2js: "npm:0.6.0" + checksum: 10c0/fc2bbf909ebe5294ced2a0e4754c2409fa77a3d463c9b7c94973e97143489a62e3b31b20b91fdb2d8719f690b4c431915ce2e0f0f5d6129a21e2b2924d1bb2dd + languageName: node + linkType: hard + +"@expo/config-types@npm:^53.0.0": + version: 53.0.5 + resolution: "@expo/config-types@npm:53.0.5" + checksum: 10c0/a7c96f65327de5608aedaf0669bc95b721323113064bdad3473d6faa07b619100ef1df5811f3fdb5dc50d05610842aec8d6bc1902dd0345d51ba2d520884487d + languageName: node + linkType: hard + +"@expo/json-file@npm:~9.1.3": + version: 9.1.5 + resolution: "@expo/json-file@npm:9.1.5" + dependencies: + "@babel/code-frame": "npm:~7.10.4" + json5: "npm:^2.2.3" + checksum: 10c0/989e3aa6d3e31a7f499d7979c6062694f2bc1fe1a4bc81b64aff74c39f27ed5f52098861897236cdc26b86186062560f3191814a2e8ff5b821a74a71d617f135 + languageName: node + linkType: hard + +"@expo/plist@npm:^0.3.3": + version: 0.3.5 + resolution: "@expo/plist@npm:0.3.5" + dependencies: + "@xmldom/xmldom": "npm:^0.8.8" + base64-js: "npm:^1.2.3" + xmlbuilder: "npm:^15.1.1" + checksum: 10c0/d0cde0024b6363f3c96ac186a59795d7c7655986407623324083261ea7e8dcaa7014f385baa1a70422765299eb6d828515ebf0d40590caf34f81997288b74cc1 + languageName: node + linkType: hard + +"@expo/sdk-runtime-versions@npm:^1.0.0": + version: 1.0.0 + resolution: "@expo/sdk-runtime-versions@npm:1.0.0" + checksum: 10c0/f80ae78a294daf396f3eff2eb412948ced5501395a6d3b88058866da9c5135dbacbb2804f8d062222e7452159a61eebefd2f548a2939f539f0f0efe8145588a2 + languageName: node + linkType: hard + "@hapi/hoek@npm:^9.0.0, @hapi/hoek@npm:^9.3.0": version: 9.3.0 resolution: "@hapi/hoek@npm:9.3.0" @@ -3491,6 +3569,16 @@ __metadata: languageName: node linkType: hard +"@types/fs-extra@npm:^11.0.4": + version: 11.0.4 + resolution: "@types/fs-extra@npm:11.0.4" + dependencies: + "@types/jsonfile": "npm:*" + "@types/node": "npm:*" + checksum: 10c0/9e34f9b24ea464f3c0b18c3f8a82aefc36dc524cc720fc2b886e5465abc66486ff4e439ea3fb2c0acebf91f6d3f74e514f9983b1f02d4243706bdbb7511796ad + languageName: node + linkType: hard + "@types/graceful-fs@npm:^4.1.3": version: 4.1.9 resolution: "@types/graceful-fs@npm:4.1.9" @@ -3542,6 +3630,15 @@ __metadata: languageName: node linkType: hard +"@types/jsonfile@npm:*": + version: 6.1.4 + resolution: "@types/jsonfile@npm:6.1.4" + dependencies: + "@types/node": "npm:*" + checksum: 10c0/b12d068b021e4078f6ac4441353965769be87acf15326173e2aea9f3bf8ead41bd0ad29421df5bbeb0123ec3fc02eb0a734481d52903704a1454a1845896b9eb + languageName: node + linkType: hard + "@types/node@npm:*": version: 24.10.1 resolution: "@types/node@npm:24.10.1" @@ -3801,6 +3898,13 @@ __metadata: languageName: node linkType: hard +"@xmldom/xmldom@npm:^0.8.8": + version: 0.8.11 + resolution: "@xmldom/xmldom@npm:0.8.11" + checksum: 10c0/e768623de72c95d3dae6b5da8e33dda0d81665047811b5498d23a328d45b13feb5536fe921d0308b96a4a8dd8addf80b1f6ef466508051c0b581e63e0dc74ed5 + languageName: node + linkType: hard + "JSONStream@npm:^1.3.5": version: 1.3.5 resolution: "JSONStream@npm:1.3.5" @@ -3946,7 +4050,7 @@ __metadata: languageName: node linkType: hard -"ansi-styles@npm:^3.2.0": +"ansi-styles@npm:^3.2.0, ansi-styles@npm:^3.2.1": version: 3.2.1 resolution: "ansi-styles@npm:3.2.1" dependencies: @@ -4348,7 +4452,7 @@ __metadata: languageName: node linkType: hard -"base64-js@npm:^1.3.1, base64-js@npm:^1.5.1": +"base64-js@npm:^1.2.3, base64-js@npm:^1.3.1, base64-js@npm:^1.5.1": version: 1.5.1 resolution: "base64-js@npm:1.5.1" checksum: 10c0/f23823513b63173a001030fae4f2dabe283b99a9d324ade3ad3d148e218134676f1ee8568c877cd79ec1c53158dcf2d2ba527a97c606618928ba99dd930102bf @@ -4378,6 +4482,13 @@ __metadata: languageName: node linkType: hard +"big-integer@npm:1.6.x": + version: 1.6.52 + resolution: "big-integer@npm:1.6.52" + checksum: 10c0/9604224b4c2ab3c43c075d92da15863077a9f59e5d4205f4e7e76acd0cd47e8d469ec5e5dba8d9b32aa233951893b29329ca56ac80c20ce094b4a647a66abae0 + languageName: node + linkType: hard + "bl@npm:^4.1.0": version: 4.1.0 resolution: "bl@npm:4.1.0" @@ -4409,6 +4520,24 @@ __metadata: languageName: node linkType: hard +"bplist-creator@npm:0.1.1": + version: 0.1.1 + resolution: "bplist-creator@npm:0.1.1" + dependencies: + stream-buffers: "npm:2.2.x" + checksum: 10c0/427ec37263ce0e8c68a83f595fc9889a9cbf2e6fda2de18e1f8ef7f0c6ce68c0cdbb7c9c1f3bb3f2d217407af8cffbdf254bf0f71c99f2186175d07752f08a47 + languageName: node + linkType: hard + +"bplist-parser@npm:0.3.2": + version: 0.3.2 + resolution: "bplist-parser@npm:0.3.2" + dependencies: + big-integer: "npm:1.6.x" + checksum: 10c0/4dc307c11d2511a01255e87e370d4ab6f1962b35fdc27605fd4ce9a557a259c2dc9f87822617ddb1f7aa062a71e30ef20d6103329ac7ce235628f637fb0ed763 + languageName: node + linkType: hard + "brace-expansion@npm:^1.1.7": version: 1.1.12 resolution: "brace-expansion@npm:1.1.12" @@ -4598,6 +4727,17 @@ __metadata: languageName: node linkType: hard +"chalk@npm:^2.4.2": + version: 2.4.2 + resolution: "chalk@npm:2.4.2" + dependencies: + ansi-styles: "npm:^3.2.1" + escape-string-regexp: "npm:^1.0.5" + supports-color: "npm:^5.3.0" + checksum: 10c0/e6543f02ec877732e3a2d1c3c3323ddb4d39fbab687c23f526e25bd4c6a9bf3b83a696e8c769d078e04e5754921648f7821b2a2acfd16c550435fd630026e073 + languageName: node + linkType: hard + "chalk@npm:^4.0.0, chalk@npm:^4.1.0, chalk@npm:^4.1.2": version: 4.1.2 resolution: "chalk@npm:4.1.2" @@ -5230,7 +5370,7 @@ __metadata: languageName: node linkType: hard -"debug@npm:4, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.4, debug@npm:^4.4.0, debug@npm:^4.4.1": +"debug@npm:4, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.4, debug@npm:^4.3.5, debug@npm:^4.4.0, debug@npm:^4.4.1": version: 4.4.3 resolution: "debug@npm:4.4.3" dependencies: @@ -6431,6 +6571,17 @@ __metadata: languageName: node linkType: hard +"fs-extra@npm:^11.2.0": + version: 11.3.3 + resolution: "fs-extra@npm:11.3.3" + dependencies: + graceful-fs: "npm:^4.2.0" + jsonfile: "npm:^6.0.1" + universalify: "npm:^2.0.0" + checksum: 10c0/984924ff4104e3e9f351b658a864bf3b354b2c90429f57aec0acd12d92c4e6b762cbacacdffb4e745b280adce882e1f980c485d9f02c453f769ab4e7fc646ce3 + languageName: node + linkType: hard + "fs-extra@npm:^8.1.0": version: 8.1.0 resolution: "fs-extra@npm:8.1.0" @@ -6616,6 +6767,13 @@ __metadata: languageName: node linkType: hard +"getenv@npm:^1.0.0": + version: 1.0.0 + resolution: "getenv@npm:1.0.0" + checksum: 10c0/9661c5996c7622e12eab1d23448474ae51dbec6f8862eed903ebaa864dcd332895441c23d962e3ff5c180a9e3dff6cb1f569a115e1447db4acb52af2d880d655 + languageName: node + linkType: hard + "giget@npm:^2.0.0": version: 2.0.0 resolution: "giget@npm:2.0.0" @@ -6682,7 +6840,7 @@ __metadata: languageName: node linkType: hard -"glob@npm:^10.5.0": +"glob@npm:^10.4.2, glob@npm:^10.5.0": version: 10.5.0 resolution: "glob@npm:10.5.0" dependencies: @@ -6823,6 +6981,13 @@ __metadata: languageName: node linkType: hard +"has-flag@npm:^3.0.0": + version: 3.0.0 + resolution: "has-flag@npm:3.0.0" + checksum: 10c0/1c6c83b14b8b1b3c25b0727b8ba3e3b647f99e9e6e13eb7322107261de07a4c1be56fc0d45678fc376e09772a3a1642ccdaf8fc69bdf123b6c086598397ce473 + languageName: node + linkType: hard + "has-flag@npm:^4.0.0": version: 4.0.0 resolution: "has-flag@npm:4.0.0" @@ -9977,7 +10142,7 @@ __metadata: languageName: node linkType: hard -"picocolors@npm:^1.1.1": +"picocolors@npm:^1.0.0, picocolors@npm:^1.1.1": version: 1.1.1 resolution: "picocolors@npm:1.1.1" checksum: 10c0/e2e3e8170ab9d7c7421969adaa7e1b31434f789afb9b3f115f6b96d91945041ac3ceb02e9ec6fe6510ff036bcc0bf91e69a1772edc0b707e12b19c0f2d6bcf58 @@ -10025,6 +10190,17 @@ __metadata: languageName: node linkType: hard +"plist@npm:^3.0.5": + version: 3.1.0 + resolution: "plist@npm:3.1.0" + dependencies: + "@xmldom/xmldom": "npm:^0.8.8" + base64-js: "npm:^1.5.1" + xmlbuilder: "npm:^15.1.1" + checksum: 10c0/db19ba50faafc4103df8e79bcd6b08004a56db2a9dd30b3e5c8b0ef30398ef44344a674e594d012c8fc39e539a2b72cb58c60a76b4b4401cbbc7c8f6b028d93d + languageName: node + linkType: hard + "possible-typed-array-names@npm:^1.0.0": version: 1.1.0 resolution: "possible-typed-array-names@npm:1.1.0" @@ -10319,10 +10495,12 @@ __metadata: "@eslint/compat": "npm:^1.3.2" "@eslint/eslintrc": "npm:^3.3.1" "@eslint/js": "npm:^9.35.0" + "@expo/config-plugins": "npm:^9.0.0" "@react-native-community/cli": "npm:20.0.1" "@react-native/babel-preset": "npm:0.81.1" "@react-native/eslint-config": "npm:^0.81.1" "@release-it/conventional-changelog": "npm:^10.0.1" + "@types/fs-extra": "npm:^11.0.4" "@types/jest": "npm:^29.5.14" "@types/react": "npm:^19.1.0" commitlint: "npm:^19.8.1" @@ -10330,6 +10508,7 @@ __metadata: eslint: "npm:^9.35.0" eslint-config-prettier: "npm:^10.1.8" eslint-plugin-prettier: "npm:^5.5.4" + fs-extra: "npm:^11.2.0" jest: "npm:^29.7.0" lefthook: "npm:^2.0.3" prettier: "npm:^2.8.8" @@ -10342,10 +10521,14 @@ __metadata: turbo: "npm:^2.5.6" typescript: "npm:^5.9.2" peerDependencies: + "@expo/config-plugins": ">=7" react: "*" react-native: ">=0.74.0" react-native-vision-camera: "*" react-native-worklets-core: "*" + peerDependenciesMeta: + "@expo/config-plugins": + optional: true languageName: unknown linkType: soft @@ -10826,6 +11009,13 @@ __metadata: languageName: node linkType: hard +"sax@npm:>=0.6.0": + version: 1.4.3 + resolution: "sax@npm:1.4.3" + checksum: 10c0/45bba07561d93f184a8686e1a543418ced8c844b994fbe45cc49d5cd2fc8ac7ec949dae38565e35e388ad0cca2b75997a29b6857c927bf6553da3f80ed0e4e62 + languageName: node + linkType: hard + "scheduler@npm:0.26.0": version: 0.26.0 resolution: "scheduler@npm:0.26.0" @@ -11036,6 +11226,17 @@ __metadata: languageName: node linkType: hard +"simple-plist@npm:^1.1.0": + version: 1.4.0 + resolution: "simple-plist@npm:1.4.0" + dependencies: + bplist-creator: "npm:0.1.1" + bplist-parser: "npm:0.3.2" + plist: "npm:^3.0.5" + checksum: 10c0/226c283492d8518d715e4133d94bdbd15c0619561bcde583b4807b36cde106c0078c615b9b4e25c0e8758a4ae4e79ed5dd76e57cd528d8b7001ecab5ad35e343 + languageName: node + linkType: hard + "sisteransi@npm:^1.0.5": version: 1.0.5 resolution: "sisteransi@npm:1.0.5" @@ -11068,6 +11269,13 @@ __metadata: languageName: node linkType: hard +"slugify@npm:^1.6.6": + version: 1.6.6 + resolution: "slugify@npm:1.6.6" + checksum: 10c0/e7e63f08f389a371d6228bc19d64ec84360bf0a538333446cc49dbbf3971751a6d180d2f31551188dd007a65ca771e69f574e0283290a7825a818e90b75ef44d + languageName: node + linkType: hard + "smart-buffer@npm:^4.2.0": version: 4.2.0 resolution: "smart-buffer@npm:4.2.0" @@ -11250,6 +11458,13 @@ __metadata: languageName: node linkType: hard +"stream-buffers@npm:2.2.x": + version: 2.2.0 + resolution: "stream-buffers@npm:2.2.0" + checksum: 10c0/14a351f0a066eaa08c8c64a74f4aedd87dd7a8e59d4be224703da33dca3eb370828ee6c0ae3fff59a9c743e8098728fc95c5f052ae7741672a31e6b1430ba50a + languageName: node + linkType: hard + "string-hash-64@npm:^1.0.3": version: 1.0.3 resolution: "string-hash-64@npm:1.0.3" @@ -11446,6 +11661,15 @@ __metadata: languageName: node linkType: hard +"supports-color@npm:^5.3.0": + version: 5.5.0 + resolution: "supports-color@npm:5.5.0" + dependencies: + has-flag: "npm:^3.0.0" + checksum: 10c0/6ae5ff319bfbb021f8a86da8ea1f8db52fac8bd4d499492e30ec17095b58af11f0c55f8577390a749b1c4dde691b6a0315dab78f5f54c9b3d83f8fb5905c1c05 + languageName: node + linkType: hard + "supports-color@npm:^7.1.0": version: 7.2.0 resolution: "supports-color@npm:7.2.0" @@ -11995,6 +12219,15 @@ __metadata: languageName: node linkType: hard +"uuid@npm:^7.0.3": + version: 7.0.3 + resolution: "uuid@npm:7.0.3" + bin: + uuid: dist/bin/uuid + checksum: 10c0/2eee5723b0fcce8256f5bfd3112af6c453b5471db00af9c3533e3d5a6e57de83513f9a145a570890457bd7abf2c2aa05797291d950ac666e5a074895dc63168b + languageName: node + linkType: hard + "v8-to-istanbul@npm:^9.0.1": version: 9.3.0 resolution: "v8-to-istanbul@npm:9.3.0" @@ -12265,6 +12498,40 @@ __metadata: languageName: node linkType: hard +"xcode@npm:^3.0.1": + version: 3.0.1 + resolution: "xcode@npm:3.0.1" + dependencies: + simple-plist: "npm:^1.1.0" + uuid: "npm:^7.0.3" + checksum: 10c0/51bf35cee52909aeb18f868ecf9828f93b8042fadf968159320f9f11e757a52e43f6563a53b586986cfe5a34d576f3300c4c0cf1e14300084344ae206eaa53c3 + languageName: node + linkType: hard + +"xml2js@npm:0.6.0": + version: 0.6.0 + resolution: "xml2js@npm:0.6.0" + dependencies: + sax: "npm:>=0.6.0" + xmlbuilder: "npm:~11.0.0" + checksum: 10c0/db1ad659210eda4b77929aa692271308ec7e04830112161b8c707f3bcc7138947409c8461ae5c8bcb36b378d62594a8d1cb78770ff5c3dc46a68c67a0838b486 + languageName: node + linkType: hard + +"xmlbuilder@npm:^15.1.1": + version: 15.1.1 + resolution: "xmlbuilder@npm:15.1.1" + checksum: 10c0/665266a8916498ff8d82b3d46d3993913477a254b98149ff7cff060d9b7cc0db7cf5a3dae99aed92355254a808c0e2e3ec74ad1b04aa1061bdb8dfbea26c18b8 + languageName: node + linkType: hard + +"xmlbuilder@npm:~11.0.0": + version: 11.0.1 + resolution: "xmlbuilder@npm:11.0.1" + checksum: 10c0/74b979f89a0a129926bc786b913459bdbcefa809afaa551c5ab83f89b1915bdaea14c11c759284bb9b931e3b53004dbc2181e21d3ca9553eeb0b2a7b4e40c35b + languageName: node + linkType: hard + "y18n@npm:^4.0.0": version: 4.0.3 resolution: "y18n@npm:4.0.3" From e3b412c95855d57d4e0fd39a26ad6bff8f02f772 Mon Sep 17 00:00:00 2001 From: EndLess728 Date: Wed, 24 Dec 2025 20:45:39 +0530 Subject: [PATCH 2/3] chore: trying to fix invalid config plugin warning --- app.plugin.js | 2 +- package.json | 27 +- ...t-native-mediapipe-posedetection-0.3.2.tgz | Bin 47629 -> 0 bytes src/plugin/PluginProps.ts | 17 + src/plugin/android.ts | 65 +++ src/plugin/ios.ts | 67 +++ src/plugin/withCustomAssets.ts | 174 ------ src/plugin/withMediapipePosedetection.ts | 60 ++ yarn.lock | 548 +++++++++--------- 9 files changed, 490 insertions(+), 470 deletions(-) delete mode 100644 react-native-mediapipe-posedetection-0.3.2.tgz create mode 100644 src/plugin/PluginProps.ts create mode 100644 src/plugin/android.ts create mode 100644 src/plugin/ios.ts delete mode 100644 src/plugin/withCustomAssets.ts create mode 100644 src/plugin/withMediapipePosedetection.ts diff --git a/app.plugin.js b/app.plugin.js index 881d750..13f502c 100644 --- a/app.plugin.js +++ b/app.plugin.js @@ -1 +1 @@ -module.exports = require('./lib/commonjs/plugin/withCustomAssets').default; +module.exports = require('./lib/commonjs/plugin/withMediapipePosedetection'); diff --git a/package.json b/package.json index e82e4ff..7c12d14 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "main": "./lib/commonjs/index.js", "module": "./lib/module/index.js", "types": "./lib/typescript/commonjs/src/index.d.ts", - "app": "app.plugin.js", + "source": "./src/index.tsx", "exports": { ".": { "import": { @@ -17,8 +17,21 @@ "default": "./lib/commonjs/index.js" } }, - "./app.plugin.js": "./app.plugin.js", - "./package.json": "./package.json" + "./app.plugin.js": { + "require": { + "default": "./app.plugin.js" + } + }, + "./plugin": { + "import": { + "types": "./lib/typescript/module/src/plugin/withMediapipePosedetection.d.ts", + "default": "./lib/module/plugin/withMediapipePosedetection.js" + }, + "require": { + "types": "./lib/typescript/commonjs/src/plugin/withMediapipePosedetection.d.ts", + "default": "./lib/commonjs/plugin/withMediapipePosedetection.js" + } + } }, "files": [ "src", @@ -75,6 +88,7 @@ "@eslint/compat": "^1.3.2", "@eslint/eslintrc": "^3.3.1", "@eslint/js": "^9.35.0", + "@expo/config-plugins": "^9.0.0", "@react-native-community/cli": "20.0.1", "@react-native/babel-preset": "0.81.1", "@react-native/eslint-config": "^0.81.1", @@ -101,7 +115,8 @@ }, "peerDependencies": { "@expo/config-plugins": ">=7", - "react": "*", + "@types/react": ">=16.6.1", + "react": ">=16.6.1", "react-native": ">=0.74.0", "react-native-vision-camera": "*", "react-native-worklets-core": "*" @@ -110,7 +125,9 @@ "@expo/config-plugins": { "optional": true }, - "react-native": {} + "@types/react": { + "optional": true + } }, "workspaces": [ "example" diff --git a/react-native-mediapipe-posedetection-0.3.2.tgz b/react-native-mediapipe-posedetection-0.3.2.tgz deleted file mode 100644 index 2c7428a19bc21c3b7b04298f0944b8b1fda13b5e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 47629 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 = ( + config, + props +) => { + const { assetsPaths = [], ignoredPattern } = props || {}; + + return withDangerousMod(config, [ + 'android', + async (cfg) => { + const { projectRoot } = cfg.modRequest; + + // Copy to android/app/src/main/assets/ + const assetsDir = path.join( + projectRoot, + 'android', + 'app', + 'src', + 'main', + 'assets' + ); + ensureDirSync(assetsDir); + + for (const assetSourceDir of assetsPaths) { + const assetSourcePath = path.join(projectRoot, assetSourceDir); + + let files; + try { + files = readdirSync(assetSourcePath, { withFileTypes: true }); + } catch { + console.warn( + `⚠️ [Android] Could not read directory: ${assetSourcePath}` + ); + continue; + } + + for (const file of files) { + if ( + file.isFile() && + (!ignoredPattern || !file.name.match(new RegExp(ignoredPattern))) + ) { + const srcPath = path.join(assetSourcePath, file.name); + const destPath = path.join(assetsDir, file.name); + copyFileSync(srcPath, destPath); + console.log(`✅ [Android] Copied ${file.name} to assets/`); + } + } + } + + return cfg; + }, + ]); +}; + +export const android = { + withAssets, +}; diff --git a/src/plugin/ios.ts b/src/plugin/ios.ts new file mode 100644 index 0000000..fb5d1db --- /dev/null +++ b/src/plugin/ios.ts @@ -0,0 +1,67 @@ +import path from 'path'; +import { + withXcodeProject, + IOSConfig, + type ConfigPlugin, +} from '@expo/config-plugins'; +import { copyFileSync, ensureDirSync, readdirSync } from 'fs-extra'; + +import type { MediapipePluginProps } from './PluginProps'; + +/** + * iOS-specific config plugin to copy assets to iOS project with Xcode references + */ +export const withAssets: ConfigPlugin = ( + config, + props +) => { + const { assetsPaths = [], ignoredPattern } = props || {}; + + return withXcodeProject(config, async (cfg) => { + const { projectRoot, platformProjectRoot } = cfg.modRequest; + const project = cfg.modResults; + const projectName = cfg.modRequest.projectName || 'App'; + + // Copy files directly to iOS root folder + ensureDirSync(platformProjectRoot); + + for (const assetSourceDir of assetsPaths) { + const assetSourcePath = path.join(projectRoot, assetSourceDir); + + let files; + try { + files = readdirSync(assetSourcePath, { withFileTypes: true }); + } catch { + console.warn(`⚠️ [iOS] Could not read directory: ${assetSourcePath}`); + continue; + } + + for (const file of files) { + if ( + file.isFile() && + (!ignoredPattern || !file.name.match(new RegExp(ignoredPattern))) + ) { + const srcPath = path.join(assetSourcePath, file.name); + const destPath = path.join(platformProjectRoot, file.name); + copyFileSync(srcPath, destPath); + console.log(`✅ [iOS] Copied ${file.name} to ios/ root`); + + // Add the file to the Xcode project with proper reference + IOSConfig.XcodeUtils.addResourceFileToGroup({ + filepath: file.name, + groupName: projectName, + project, + isBuildFile: true, + verbose: true, + }); + } + } + } + + return cfg; + }); +}; + +export const ios = { + withAssets, +}; diff --git a/src/plugin/withCustomAssets.ts b/src/plugin/withCustomAssets.ts deleted file mode 100644 index 766540b..0000000 --- a/src/plugin/withCustomAssets.ts +++ /dev/null @@ -1,174 +0,0 @@ -import path from 'path'; -import { - withDangerousMod, - withXcodeProject, - IOSConfig, - createRunOncePlugin, - type ConfigPlugin, -} from '@expo/config-plugins'; -import { copyFileSync, ensureDirSync, readdirSync } from 'fs-extra'; - -// Read package info for createRunOncePlugin -let pkg: { name: string; version?: string } = { - name: 'react-native-mediapipe-posedetection', -}; -try { - pkg = require('react-native-mediapipe-posedetection/package.json'); -} catch { - // empty catch block -} - -interface PluginOptions { - assetsPaths?: string[]; - ignoredPattern?: string; -} - -/** - * Custom Expo config plugin to copy assets to: - * - Android: android/app/src/main/assets/ - * - iOS: ios/ (root folder with Xcode project references) - * - * Usage in app.json: - * [ - * "react-native-mediapipe-posedetection", - * { - * "assetsPaths": ["./models/"], - * "ignoredPattern": "\\.txt$" // optional regex pattern - * } - * ] - */ - -const withCustomAssetsAndroid: ConfigPlugin = ( - config, - props -) => { - const { assetsPaths = [], ignoredPattern } = props; - - return withDangerousMod(config, [ - 'android', - async (cfg) => { - const { projectRoot } = cfg.modRequest; - - // Copy to android/app/src/main/assets/ - const assetsDir = path.join( - projectRoot, - 'android', - 'app', - 'src', - 'main', - 'assets' - ); - ensureDirSync(assetsDir); - - for (const assetSourceDir of assetsPaths) { - const assetSourcePath = path.join(projectRoot, assetSourceDir); - - let files; - try { - files = readdirSync(assetSourcePath, { withFileTypes: true }); - } catch { - console.warn( - `⚠️ [Android] Could not read directory: ${assetSourcePath}` - ); - continue; - } - - for (const file of files) { - if ( - file.isFile() && - (!ignoredPattern || !file.name.match(new RegExp(ignoredPattern))) - ) { - const srcPath = path.join(assetSourcePath, file.name); - const destPath = path.join(assetsDir, file.name); - copyFileSync(srcPath, destPath); - console.log(`✅ [Android] Copied ${file.name} to assets/`); - } - } - } - - return cfg; - }, - ]); -}; - -const withCustomAssetsIos: ConfigPlugin = (config, props) => { - const { assetsPaths = [], ignoredPattern } = props; - - return withXcodeProject(config, async (cfg) => { - const { projectRoot, platformProjectRoot } = cfg.modRequest; - const project = cfg.modResults; - const projectName = cfg.modRequest.projectName || 'App'; - - // Copy files directly to iOS root folder - ensureDirSync(platformProjectRoot); - - for (const assetSourceDir of assetsPaths) { - const assetSourcePath = path.join(projectRoot, assetSourceDir); - - let files; - try { - files = readdirSync(assetSourcePath, { withFileTypes: true }); - } catch { - console.warn(`⚠️ [iOS] Could not read directory: ${assetSourcePath}`); - continue; - } - - for (const file of files) { - if ( - file.isFile() && - (!ignoredPattern || !file.name.match(new RegExp(ignoredPattern))) - ) { - const srcPath = path.join(assetSourcePath, file.name); - const destPath = path.join(platformProjectRoot, file.name); - copyFileSync(srcPath, destPath); - console.log(`✅ [iOS] Copied ${file.name} to ios/ root`); - - // Add the file to the Xcode project with proper reference - IOSConfig.XcodeUtils.addResourceFileToGroup({ - filepath: file.name, - groupName: projectName, - project, - isBuildFile: true, - verbose: true, - }); - } - } - } - - return cfg; - }); -}; - -/** - * Main config plugin entry point - * @param config - Expo config - * @param options - Plugin options - * @param options.assetsPaths - Array of paths to asset directories (relative to project root) - * @param options.ignoredPattern - Optional regex pattern to ignore files - */ -const withCustomAssets: ConfigPlugin = ( - config, - options = {} -) => { - const { assetsPaths = [], ignoredPattern } = options; - - if (assetsPaths.length === 0) { - console.warn( - '⚠️ [react-native-mediapipe-posedetection] No assetsPaths provided to config plugin' - ); - return config; - } - - let modifiedConfig = withCustomAssetsAndroid(config, { - assetsPaths, - ignoredPattern, - }); - modifiedConfig = withCustomAssetsIos(modifiedConfig, { - assetsPaths, - ignoredPattern, - }); - - return modifiedConfig; -}; - -export default createRunOncePlugin(withCustomAssets, pkg.name, pkg.version); diff --git a/src/plugin/withMediapipePosedetection.ts b/src/plugin/withMediapipePosedetection.ts new file mode 100644 index 0000000..771f7cf --- /dev/null +++ b/src/plugin/withMediapipePosedetection.ts @@ -0,0 +1,60 @@ +import { type ConfigPlugin, createRunOncePlugin } from '@expo/config-plugins'; + +import type { MediapipePluginProps } from './PluginProps'; +import { android } from './android'; +import { ios } from './ios'; + +let pkg: { name: string; version?: string } = { + name: 'react-native-mediapipe-posedetection', +}; +try { + pkg = require('react-native-mediapipe-posedetection/package.json'); +} catch { + // empty catch block +} + +/** + * Main config plugin entry point for react-native-mediapipe-posedetection + * + * Copies model assets to: + * - Android: android/app/src/main/assets/ + * - iOS: ios/ (root folder with Xcode project references) + * + * Usage in app.json: + * ```json + * [ + * "react-native-mediapipe-posedetection", + * { + * "assetsPaths": ["./models/"], + * "ignoredPattern": "\\.txt$" // optional regex pattern + * } + * ] + * ``` + */ +const withMediapipePosedetection: ConfigPlugin = ( + config, + props +) => { + const { assetsPaths = [] } = props || {}; + + if (assetsPaths.length === 0) { + console.warn( + '⚠️ [react-native-mediapipe-posedetection] No assetsPaths provided to config plugin' + ); + return config; + } + + // Android + config = android.withAssets(config, props); + + // iOS + config = ios.withAssets(config, props); + + return config; +}; + +export default createRunOncePlugin( + withMediapipePosedetection, + pkg.name, + pkg.version +); diff --git a/yarn.lock b/yarn.lock index 8ce0bf3..32eeabe 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1857,10 +1857,10 @@ __metadata: languageName: node linkType: hard -"@eslint/js@npm:9.39.1, @eslint/js@npm:^9.35.0": - version: 9.39.1 - resolution: "@eslint/js@npm:9.39.1" - checksum: 10c0/6f7f26f8cdb7ad6327bbf9741973b6278eb946f18f70e35406e88194b0d5c522d0547a34a02f2a208eec95c5d1388cdf7ccb20039efd2e4cb6655615247a50f1 +"@eslint/js@npm:9.39.2, @eslint/js@npm:^9.35.0": + version: 9.39.2 + resolution: "@eslint/js@npm:9.39.2" + checksum: 10c0/00f51c52b04ac79faebfaa65a9652b2093b9c924e945479f1f3945473f78aee83cbc76c8d70bbffbf06f7024626575b16d97b66eab16182e1d0d39daff2f26f5 languageName: node linkType: hard @@ -1985,7 +1985,7 @@ __metadata: languageName: node linkType: hard -"@inquirer/ansi@npm:^1.0.0, @inquirer/ansi@npm:^1.0.2": +"@inquirer/ansi@npm:^1.0.2": version: 1.0.2 resolution: "@inquirer/ansi@npm:1.0.2" checksum: 10c0/8e408cc628923aa93402e66657482ccaa2ad5174f9db526d9a8b443f9011e9cd8f70f0f534f5fe3857b8a9df3bce1e25f66c96f666d6750490bd46e2b4f3b829 @@ -2025,7 +2025,7 @@ __metadata: languageName: node linkType: hard -"@inquirer/core@npm:^10.2.2, @inquirer/core@npm:^10.3.2": +"@inquirer/core@npm:^10.3.2": version: 10.3.2 resolution: "@inquirer/core@npm:10.3.2" dependencies: @@ -2146,7 +2146,7 @@ __metadata: languageName: node linkType: hard -"@inquirer/prompts@npm:^7.8.6": +"@inquirer/prompts@npm:^7.10.1": version: 7.10.1 resolution: "@inquirer/prompts@npm:7.10.1" dependencies: @@ -2220,7 +2220,7 @@ __metadata: languageName: node linkType: hard -"@inquirer/type@npm:^3.0.10, @inquirer/type@npm:^3.0.8": +"@inquirer/type@npm:^3.0.10": version: 3.0.10 resolution: "@inquirer/type@npm:3.0.10" peerDependencies: @@ -2665,7 +2665,7 @@ __metadata: languageName: node linkType: hard -"@octokit/core@npm:^7.0.2": +"@octokit/core@npm:^7.0.6": version: 7.0.6 resolution: "@octokit/core@npm:7.0.6" dependencies: @@ -2701,13 +2701,6 @@ __metadata: languageName: node linkType: hard -"@octokit/openapi-types@npm:^26.0.0": - version: 26.0.0 - resolution: "@octokit/openapi-types@npm:26.0.0" - checksum: 10c0/671f12c1db70b4bc8c719ec7aa10de034925f4326db0fff22837afcc0b41fd1c015d164673ef5603c5ac787a430c514b821852bfbe6f06edc4a41ad3de342e94 - languageName: node - linkType: hard - "@octokit/openapi-types@npm:^27.0.0": version: 27.0.0 resolution: "@octokit/openapi-types@npm:27.0.0" @@ -2715,14 +2708,14 @@ __metadata: languageName: node linkType: hard -"@octokit/plugin-paginate-rest@npm:^13.0.1": - version: 13.2.1 - resolution: "@octokit/plugin-paginate-rest@npm:13.2.1" +"@octokit/plugin-paginate-rest@npm:^14.0.0": + version: 14.0.0 + resolution: "@octokit/plugin-paginate-rest@npm:14.0.0" dependencies: - "@octokit/types": "npm:^15.0.1" + "@octokit/types": "npm:^16.0.0" peerDependencies: "@octokit/core": ">=6" - checksum: 10c0/16cd034ee6426f742514d0ca553a2c4355cd68c2eb9211030f3ec2538f4c833d587b3737bb720e34f98be8fae15acb07693d17314350cf067557abb4cb1598fb + checksum: 10c0/841d79d4ccfe18fc809a4a67529b75c1dcdda13399bf4bf5b48ce7559c8b4b2cd422e3204bad4cbdea31c0cf0943521067415268e5bcfc615a3b813e058cad6b languageName: node linkType: hard @@ -2735,14 +2728,14 @@ __metadata: languageName: node linkType: hard -"@octokit/plugin-rest-endpoint-methods@npm:^16.0.0": - version: 16.1.1 - resolution: "@octokit/plugin-rest-endpoint-methods@npm:16.1.1" +"@octokit/plugin-rest-endpoint-methods@npm:^17.0.0": + version: 17.0.0 + resolution: "@octokit/plugin-rest-endpoint-methods@npm:17.0.0" dependencies: - "@octokit/types": "npm:^15.0.1" + "@octokit/types": "npm:^16.0.0" peerDependencies: "@octokit/core": ">=6" - checksum: 10c0/3d5f2aca5c206a39d55139be32f8a18037a4e6c8b98d905681da7673c9430630e963bca604e1337edccc7a6861f535583b103f2c5af90b5515fd70b7db1bca47 + checksum: 10c0/cf9984d7cf6a36ff7ff1b86078ae45fe246e3df10fcef0bccf20c8cfd27bf5e7d98dcb9cf5a7b56332b9c6fa30be28d159c2987d272a4758f77056903d94402f languageName: node linkType: hard @@ -2768,24 +2761,15 @@ __metadata: languageName: node linkType: hard -"@octokit/rest@npm:22.0.0": - version: 22.0.0 - resolution: "@octokit/rest@npm:22.0.0" +"@octokit/rest@npm:22.0.1": + version: 22.0.1 + resolution: "@octokit/rest@npm:22.0.1" dependencies: - "@octokit/core": "npm:^7.0.2" - "@octokit/plugin-paginate-rest": "npm:^13.0.1" + "@octokit/core": "npm:^7.0.6" + "@octokit/plugin-paginate-rest": "npm:^14.0.0" "@octokit/plugin-request-log": "npm:^6.0.0" - "@octokit/plugin-rest-endpoint-methods": "npm:^16.0.0" - checksum: 10c0/aea3714301f43fbadb22048045a7aef417cdefa997d1baf0b26860eaa9038fb033f7d4299eab06af57a03433871084cf38144fc5414caf80accce714e76d34e2 - languageName: node - linkType: hard - -"@octokit/types@npm:^15.0.1": - version: 15.0.2 - resolution: "@octokit/types@npm:15.0.2" - dependencies: - "@octokit/openapi-types": "npm:^26.0.0" - checksum: 10c0/873f8ade7ad21bd01c18a9887cc2098e35a75675b58c09e22ea8b998b664d31e9fecf5c3629381a468e3dcc8115502e1b5b49912a06657b732504de983493c65 + "@octokit/plugin-rest-endpoint-methods": "npm:^17.0.0" + checksum: 10c0/f3abd84e887cc837973214ce70720a9bba53f5575f40601c6122aa25206e9055d859c0388437f0a137f6cd0e4ff405e1b46b903475b0db32a17bada0c6513d5b languageName: node linkType: hard @@ -3415,8 +3399,8 @@ __metadata: linkType: hard "@release-it/conventional-changelog@npm:^10.0.1": - version: 10.0.2 - resolution: "@release-it/conventional-changelog@npm:10.0.2" + version: 10.0.4 + resolution: "@release-it/conventional-changelog@npm:10.0.4" dependencies: "@conventional-changelog/git-client": "npm:^2.5.1" concat-stream: "npm:^2.0.0" @@ -3427,7 +3411,7 @@ __metadata: semver: "npm:^7.7.3" peerDependencies: release-it: ^18.0.0 || ^19.0.0 - checksum: 10c0/bd8860daea63bbad902f7fe9bff8ae956128bbe825900c5deec2c72119063a4f83be87906d0a05438522b60c0e7e8fa989ac0dc72bdc394c17983a0b2403e611 + checksum: 10c0/d7ef21203eec23d2ded3de67664649da179beaf681bf05a1c5fad29ced9a82161ae98819756e36148fa12e21b3f5eb7760830f4990bb121702120a3f86a6f561 languageName: node linkType: hard @@ -3640,20 +3624,20 @@ __metadata: linkType: hard "@types/node@npm:*": - version: 24.10.1 - resolution: "@types/node@npm:24.10.1" + version: 25.0.3 + resolution: "@types/node@npm:25.0.3" dependencies: undici-types: "npm:~7.16.0" - checksum: 10c0/d6bca7a78f550fbb376f236f92b405d676003a8a09a1b411f55920ef34286ee3ee51f566203920e835478784df52662b5b2af89159d9d319352e9ea21801c002 + checksum: 10c0/b7568f0d765d9469621615e2bb257c7fd1953d95e9acbdb58dffb6627a2c4150d405a4600aa1ad8a40182a94fe5f903cafd3c0a2f5132814debd0e3bfd61f835 languageName: node linkType: hard "@types/node@npm:^22.0.0": - version: 22.19.1 - resolution: "@types/node@npm:22.19.1" + version: 22.19.3 + resolution: "@types/node@npm:22.19.3" dependencies: undici-types: "npm:~6.21.0" - checksum: 10c0/6edd93aea86da740cb7872626839cd6f4a67a049d3a3a6639cb592c620ec591408a30989ab7410008d1a0b2d4985ce50f1e488e79c033e4476d3bec6833b0a2f + checksum: 10c0/a30a75d503da795ddbd5f8851014f3e91925c2a63fa3f14128d54c998f25d682dfba96dc9589c73cf478b87a16d88beb790b11697bb8cd5bee913079237a58f2 languageName: node linkType: hard @@ -3933,7 +3917,7 @@ __metadata: languageName: node linkType: hard -"accepts@npm:^1.3.7, accepts@npm:~1.3.7": +"accepts@npm:^1.3.7, accepts@npm:~1.3.8": version: 1.3.8 resolution: "accepts@npm:1.3.8" dependencies: @@ -4115,23 +4099,23 @@ __metadata: languageName: node linkType: hard -"arkregex@npm:0.0.4": - version: 0.0.4 - resolution: "arkregex@npm:0.0.4" +"arkregex@npm:0.0.5": + version: 0.0.5 + resolution: "arkregex@npm:0.0.5" dependencies: "@ark/util": "npm:0.56.0" - checksum: 10c0/5cb89ac6482e0ce15aa93e6fa791b22e43b35419ff91965762a33a4cc4a92a039c71e9adf9a2e700b3819074e4b9df04245e38c4010a2baa5f3bcb38a6c66f0b + checksum: 10c0/1a39510e04d69b9287b9b53d3965afcc4ef27bdd9ff9c21a78092fcb841f35c11227d8476be66d2f76347deccfd10c202f395bd871383c328057ad004ffe7ebd languageName: node linkType: hard "arktype@npm:^2.1.15": - version: 2.1.28 - resolution: "arktype@npm:2.1.28" + version: 2.1.29 + resolution: "arktype@npm:2.1.29" dependencies: "@ark/schema": "npm:0.56.0" "@ark/util": "npm:0.56.0" - arkregex: "npm:0.0.4" - checksum: 10c0/5ca424ecb7acdf426785f95ddb1cf4b6c10123a44b16b71d8a13b0bb1e2573ae91949d2254421cdda0e6b815b603519a5631eeb707ee238bb7fceed1594e5dd0 + arkregex: "npm:0.0.5" + checksum: 10c0/c89cd5cc9eee7a5e14df0f32b228c06760b99440dabf2ed2d9272877a1607d7f27641d4105d1466b70fc620007fe864ddd826acee11c07102388c8dd301a20fe languageName: node linkType: hard @@ -4460,11 +4444,11 @@ __metadata: linkType: hard "baseline-browser-mapping@npm:^2.9.0": - version: 2.9.2 - resolution: "baseline-browser-mapping@npm:2.9.2" + version: 2.9.11 + resolution: "baseline-browser-mapping@npm:2.9.11" bin: baseline-browser-mapping: dist/cli.js - checksum: 10c0/4f9be09e20261ed26f19e9b95454dcb8d8371b87983c57cd9f70b9572e9b3053577f0d8d6d91297bdb605337747680686e22f62522a6e57ae2488fcacf641188 + checksum: 10c0/eba49fcc1b33ab994aeeb73a4848f2670e06a0886dd5b903689ae6f60d47e7f1bea9262dbb2548c48179e858f7eda2b82ddf941ae783b862f4dcc51085a246f2 languageName: node linkType: hard @@ -4623,15 +4607,15 @@ __metadata: languageName: node linkType: hard -"c12@npm:3.3.1": - version: 3.3.1 - resolution: "c12@npm:3.3.1" +"c12@npm:3.3.3": + version: 3.3.3 + resolution: "c12@npm:3.3.3" dependencies: - chokidar: "npm:^4.0.3" + chokidar: "npm:^5.0.0" confbox: "npm:^0.2.2" defu: "npm:^6.1.4" dotenv: "npm:^17.2.3" - exsolve: "npm:^1.0.7" + exsolve: "npm:^1.0.8" giget: "npm:^2.0.0" jiti: "npm:^2.6.1" ohash: "npm:^2.0.11" @@ -4640,11 +4624,11 @@ __metadata: pkg-types: "npm:^2.3.0" rc9: "npm:^2.1.2" peerDependencies: - magicast: ^0.3.5 + magicast: "*" peerDependenciesMeta: magicast: optional: true - checksum: 10c0/37b70f838980eba3836ec9754b2c28e28d4eda272baefb1e22ff997ee7569a5f2a50acd41d65ea645969cbd66e5a8334f8634b2c264a8abd0af3caeee75e6351 + checksum: 10c0/5b2ac937175717df62fc74ce7fe38685ebd02b3fa94e9cc05be9630d3e5d7f1ec437413d23d63ec0d2eaffcfeda824fb14d3d0fab3df522e60a8b4b3e32a4a33 languageName: node linkType: hard @@ -4721,9 +4705,9 @@ __metadata: linkType: hard "caniuse-lite@npm:^1.0.30001759": - version: 1.0.30001759 - resolution: "caniuse-lite@npm:1.0.30001759" - checksum: 10c0/b0f415960ba34995cda18e0d25c4e602f6917b9179290a76bdd0311423505b78cc93e558a90c98a22a1cc6b1781ab720ef6beea24ec7e29a1c1164ca72eac3a2 + version: 1.0.30001761 + resolution: "caniuse-lite@npm:1.0.30001761" + checksum: 10c0/8ea4158ccd507b9c73c03b9b3b1b897e75d095c5753a131d0f36ef9b64c19a049174467842dd9e8bebe886ac27ed7a5b1d5adcaae5fe887716b07fc1103e100b languageName: node linkType: hard @@ -4769,12 +4753,12 @@ __metadata: languageName: node linkType: hard -"chokidar@npm:^4.0.3": - version: 4.0.3 - resolution: "chokidar@npm:4.0.3" +"chokidar@npm:^5.0.0": + version: 5.0.0 + resolution: "chokidar@npm:5.0.0" dependencies: - readdirp: "npm:^4.0.1" - checksum: 10c0/a58b9df05bb452f7d105d9e7229ac82fa873741c0c40ddcc7bb82f8a909fbe3f7814c9ebe9bc9a2bef9b737c0ec6e2d699d179048ef06ad3ec46315df0ebe6ad + readdirp: "npm:^5.0.0" + checksum: 10c0/42fc907cb2a7ff5c9e220f84dae75380a77997f851c2a5e7865a2cf9ae45dd407a23557208cdcdbf3ac8c93341135a1748e4c48c31855f3bfa095e5159b6bdec languageName: node linkType: hard @@ -4827,7 +4811,7 @@ __metadata: languageName: node linkType: hard -"ci-info@npm:^4.3.0": +"ci-info@npm:^4.3.1": version: 4.3.1 resolution: "ci-info@npm:4.3.1" checksum: 10c0/7dd82000f514d76ddfe7775e4cb0d66e5c638f5fa0e2a3be29557e898da0d32ac04f231217d414d07fb968b1fbc6d980ee17ddde0d2c516f23da9cfff608f6c1 @@ -5397,14 +5381,14 @@ __metadata: linkType: hard "dedent@npm:^1.0.0": - version: 1.7.0 - resolution: "dedent@npm:1.7.0" + version: 1.7.1 + resolution: "dedent@npm:1.7.1" peerDependencies: babel-plugin-macros: ^3.1.0 peerDependenciesMeta: babel-plugin-macros: optional: true - checksum: 10c0/c5e8a8beb5072bd5e520cb64b27a82d7ec3c2a63ee5ce47dbc2a05d5b7700cefd77a992a752cd0a8b1d979c1db06b14fb9486e805f3ad6088eda6e07cd9bf2d5 + checksum: 10c0/ae29ec1c5bd5216c698c9f23acaa5b720260fd4cef3c8b5af887eb5f8c9e6fdd5fed8668767437b4efea35e2991bd798987717633411a1734807c28255769b78 languageName: node linkType: hard @@ -5634,9 +5618,9 @@ __metadata: linkType: hard "electron-to-chromium@npm:^1.5.263": - version: 1.5.266 - resolution: "electron-to-chromium@npm:1.5.266" - checksum: 10c0/74ada92ada1ace76ec5b7da8a9cc2d7f03db122a64ac8e12ae30eba3e358ffec443c0c5265bc6edcdeebfa73f449b21c361080c064eb1eec437db2d71fc03248 + version: 1.5.267 + resolution: "electron-to-chromium@npm:1.5.267" + checksum: 10c0/0732bdb891b657f2e43266a3db8cf86fff6cecdcc8d693a92beff214e136cb5c2ee7dc5945ed75fa1db16e16bad0c38695527a020d15f39e79084e0b2e447621 languageName: node linkType: hard @@ -5735,18 +5719,18 @@ __metadata: linkType: hard "errorhandler@npm:^1.5.1": - version: 1.5.1 - resolution: "errorhandler@npm:1.5.1" + version: 1.5.2 + resolution: "errorhandler@npm:1.5.2" dependencies: - accepts: "npm:~1.3.7" + accepts: "npm:~1.3.8" escape-html: "npm:~1.0.3" - checksum: 10c0/58568c7eec3f4de5dc49e4385a50af66b76759b3463a86e4a85e05c4f7a5348f51d3d23af51c3a23eceef6278045d0a47d975da11bdaaf92d1d783dc677e980e + checksum: 10c0/13fc3ba2358893f1f2da43e246105d42a78bf448bf55257b75114c757bd566dcae8b0cd76a3c8777bc451a552a9215979a5e8205bdeee066550cc4acabbfd5af languageName: node linkType: hard -"es-abstract@npm:^1.17.5, es-abstract@npm:^1.23.2, es-abstract@npm:^1.23.3, es-abstract@npm:^1.23.5, es-abstract@npm:^1.23.6, es-abstract@npm:^1.23.9, es-abstract@npm:^1.24.0": - version: 1.24.0 - resolution: "es-abstract@npm:1.24.0" +"es-abstract@npm:^1.17.5, es-abstract@npm:^1.23.2, es-abstract@npm:^1.23.3, es-abstract@npm:^1.23.5, es-abstract@npm:^1.23.6, es-abstract@npm:^1.23.9, es-abstract@npm:^1.24.0, es-abstract@npm:^1.24.1": + version: 1.24.1 + resolution: "es-abstract@npm:1.24.1" dependencies: array-buffer-byte-length: "npm:^1.0.2" arraybuffer.prototype.slice: "npm:^1.0.4" @@ -5802,7 +5786,7 @@ __metadata: typed-array-length: "npm:^1.0.7" unbox-primitive: "npm:^1.1.0" which-typed-array: "npm:^1.1.19" - checksum: 10c0/b256e897be32df5d382786ce8cce29a1dd8c97efbab77a26609bd70f2ed29fbcfc7a31758cb07488d532e7ccccdfca76c1118f2afe5a424cdc05ca007867c318 + checksum: 10c0/fca062ef8b5daacf743732167d319a212d45cb655b0bb540821d38d715416ae15b04b84fc86da9e2c89135aa7b337337b6c867f84dcde698d75d55688d5d765c languageName: node linkType: hard @@ -5821,26 +5805,26 @@ __metadata: linkType: hard "es-iterator-helpers@npm:^1.2.1": - version: 1.2.1 - resolution: "es-iterator-helpers@npm:1.2.1" + version: 1.2.2 + resolution: "es-iterator-helpers@npm:1.2.2" dependencies: call-bind: "npm:^1.0.8" - call-bound: "npm:^1.0.3" + call-bound: "npm:^1.0.4" define-properties: "npm:^1.2.1" - es-abstract: "npm:^1.23.6" + es-abstract: "npm:^1.24.1" es-errors: "npm:^1.3.0" - es-set-tostringtag: "npm:^2.0.3" + es-set-tostringtag: "npm:^2.1.0" function-bind: "npm:^1.1.2" - get-intrinsic: "npm:^1.2.6" + get-intrinsic: "npm:^1.3.0" globalthis: "npm:^1.0.4" gopd: "npm:^1.2.0" has-property-descriptors: "npm:^1.0.2" has-proto: "npm:^1.2.0" has-symbols: "npm:^1.1.0" internal-slot: "npm:^1.1.0" - iterator.prototype: "npm:^1.1.4" + iterator.prototype: "npm:^1.1.5" safe-array-concat: "npm:^1.1.3" - checksum: 10c0/97e3125ca472d82d8aceea11b790397648b52c26d8768ea1c1ee6309ef45a8755bb63225a43f3150c7591cffc17caf5752459f1e70d583b4184370a8f04ebd2f + checksum: 10c0/1ced8abf845a45e660dd77b5f3a64358421df70e4a0bd1897d5ddfefffed8409a6a2ca21241b9367e639df9eca74abc1c678b3020bffe6bee1f1826393658ddb languageName: node linkType: hard @@ -5853,7 +5837,7 @@ __metadata: languageName: node linkType: hard -"es-set-tostringtag@npm:^2.0.3, es-set-tostringtag@npm:^2.1.0": +"es-set-tostringtag@npm:^2.1.0": version: 2.1.0 resolution: "es-set-tostringtag@npm:2.1.0" dependencies: @@ -6127,8 +6111,8 @@ __metadata: linkType: hard "eslint@npm:^9.35.0": - version: 9.39.1 - resolution: "eslint@npm:9.39.1" + version: 9.39.2 + resolution: "eslint@npm:9.39.2" dependencies: "@eslint-community/eslint-utils": "npm:^4.8.0" "@eslint-community/regexpp": "npm:^4.12.1" @@ -6136,7 +6120,7 @@ __metadata: "@eslint/config-helpers": "npm:^0.4.2" "@eslint/core": "npm:^0.17.0" "@eslint/eslintrc": "npm:^3.3.1" - "@eslint/js": "npm:9.39.1" + "@eslint/js": "npm:9.39.2" "@eslint/plugin-kit": "npm:^0.4.1" "@humanfs/node": "npm:^0.16.6" "@humanwhocodes/module-importer": "npm:^1.0.1" @@ -6171,7 +6155,7 @@ __metadata: optional: true bin: eslint: bin/eslint.js - checksum: 10c0/59b2480639404ba24578ca480f973683b87b7aac8aa7e349240474a39067804fd13cd8b9cb22fee074170b8c7c563b57bab703ec0f0d3f81ea017e5d2cad299d + checksum: 10c0/bb88ca8fd16bb7e1ac3e13804c54d41c583214460c0faa7b3e7c574e69c5600c7122295500fb4b0c06067831111db740931e98da1340329527658e1cf80073d3 languageName: node linkType: hard @@ -6235,10 +6219,10 @@ __metadata: languageName: node linkType: hard -"eta@npm:4.0.1": - version: 4.0.1 - resolution: "eta@npm:4.0.1" - checksum: 10c0/a7dc8641705a01373393aba6d0998f7571735c4f5444aa9c3375b2574a93ef3be80cfd5c7d1f8d6f0e56a83a14a7db451195ed3ceeab145f23492bb5b41d1ece +"eta@npm:4.5.0": + version: 4.5.0 + resolution: "eta@npm:4.5.0" + checksum: 10c0/01c10f0f4001dfd77d5488f96980fcbc22872fe02051a768d28e3bace66003c6384b37ed8f355bc7e199529c24b6d99fcd6085471a53c34da93921b1980239b1 languageName: node linkType: hard @@ -6334,7 +6318,7 @@ __metadata: languageName: node linkType: hard -"exsolve@npm:^1.0.7": +"exsolve@npm:^1.0.7, exsolve@npm:^1.0.8": version: 1.0.8 resolution: "exsolve@npm:1.0.8" checksum: 10c0/65e44ae05bd4a4a5d87cfdbbd6b8f24389282cf9f85fa5feb17ca87ad3f354877e6af4cd99e02fc29044174891f82d1d68c77f69234410eb8f163530e6278c67 @@ -6408,11 +6392,11 @@ __metadata: linkType: hard "fastq@npm:^1.6.0": - version: 1.19.1 - resolution: "fastq@npm:1.19.1" + version: 1.20.1 + resolution: "fastq@npm:1.20.1" dependencies: reusify: "npm:^1.0.4" - checksum: 10c0/ebc6e50ac7048daaeb8e64522a1ea7a26e92b3cee5cd1c7f2316cdca81ba543aa40a136b53891446ea5c3a67ec215fbaca87ad405f102dd97012f62916905630 + checksum: 10c0/e5dd725884decb1f11e5c822221d76136f239d0236f176fab80b7b8f9e7619ae57e6b4e5b73defc21e6b9ef99437ee7b545cff8e6c2c337819633712fa9d352e languageName: node linkType: hard @@ -6553,7 +6537,7 @@ __metadata: languageName: node linkType: hard -"fresh@npm:0.5.2": +"fresh@npm:~0.5.2": version: 0.5.2 resolution: "fresh@npm:0.5.2" checksum: 10c0/c6d27f3ed86cc5b601404822f31c900dd165ba63fff8152a3ef714e2012e7535027063bc67ded4cb5b3a49fa596495d46cacd9f47d6328459cf570f08b7d9e5a @@ -7109,19 +7093,6 @@ __metadata: languageName: node linkType: hard -"http-errors@npm:2.0.0": - version: 2.0.0 - resolution: "http-errors@npm:2.0.0" - dependencies: - depd: "npm:2.0.0" - inherits: "npm:2.0.4" - setprototypeof: "npm:1.2.0" - statuses: "npm:2.0.1" - toidentifier: "npm:1.0.1" - checksum: 10c0/fc6f2715fe188d091274b5ffc8b3657bd85c63e969daa68ccb77afb05b071a4b62841acb7a21e417b5539014dff2ebf9550f0b14a9ff126f2734a7c1387f8e19 - languageName: node - linkType: hard - "http-errors@npm:~2.0.1": version: 2.0.1 resolution: "http-errors@npm:2.0.1" @@ -7186,11 +7157,11 @@ __metadata: linkType: hard "iconv-lite@npm:^0.7.0": - version: 0.7.0 - resolution: "iconv-lite@npm:0.7.0" + version: 0.7.1 + resolution: "iconv-lite@npm:0.7.1" dependencies: safer-buffer: "npm:>= 2.1.2 < 3.0.0" - checksum: 10c0/2382400469071c55b6746c531eed5fa4d033e5db6690b7331fb2a5f59a30d7a9782932e92253db26df33c1cf46fa200a3fbe524a2a7c62037c762283f188ec2f + checksum: 10c0/f5c9e2bddd7101a71b07a381ace44ebdc65ca76a10be0e9e64d372b511132acc4ee41b830962f438840d492cd6f9e08c237289f760d6a7fed754e61cffcb6757 languageName: node linkType: hard @@ -7288,7 +7259,7 @@ __metadata: languageName: node linkType: hard -"inherits@npm:2, inherits@npm:2.0.4, inherits@npm:^2.0.3, inherits@npm:^2.0.4, inherits@npm:~2.0.3, inherits@npm:~2.0.4": +"inherits@npm:2, inherits@npm:^2.0.3, inherits@npm:^2.0.4, inherits@npm:~2.0.3, inherits@npm:~2.0.4": version: 2.0.4 resolution: "inherits@npm:2.0.4" checksum: 10c0/4e531f648b29039fb7426fb94075e6545faa1eb9fe83c29f0b6d9e7263aceb4289d2d4557db0d428188eeb449cc7c5e77b0a0b2c4e248ff2a65933a0dee49ef2 @@ -7302,23 +7273,23 @@ __metadata: languageName: node linkType: hard -"inquirer@npm:12.9.6": - version: 12.9.6 - resolution: "inquirer@npm:12.9.6" +"inquirer@npm:12.11.1": + version: 12.11.1 + resolution: "inquirer@npm:12.11.1" dependencies: - "@inquirer/ansi": "npm:^1.0.0" - "@inquirer/core": "npm:^10.2.2" - "@inquirer/prompts": "npm:^7.8.6" - "@inquirer/type": "npm:^3.0.8" + "@inquirer/ansi": "npm:^1.0.2" + "@inquirer/core": "npm:^10.3.2" + "@inquirer/prompts": "npm:^7.10.1" + "@inquirer/type": "npm:^3.0.10" mute-stream: "npm:^2.0.0" - run-async: "npm:^4.0.5" + run-async: "npm:^4.0.6" rxjs: "npm:^7.8.2" peerDependencies: "@types/node": ">=18" peerDependenciesMeta: "@types/node": optional: true - checksum: 10c0/068d9acbfab5e0c19d68603f86e296d00a8c797b6c2d7f2e659dfc557176e9247c2313beaf79d5557deb7d76a514cf9a75835c7928094b8759570b7a4e3f909f + checksum: 10c0/b275a400ddc80c138cef2c741f74463b1bdbeccb3351ab38bdf14b46ce53a186077beec24330e81f1cbfa7bd5c1933267c38d14d567b63c86b101436a3b705f7 languageName: node linkType: hard @@ -7913,7 +7884,7 @@ __metadata: languageName: node linkType: hard -"iterator.prototype@npm:^1.1.4": +"iterator.prototype@npm:^1.1.5": version: 1.1.5 resolution: "iterator.prototype@npm:1.1.5" dependencies: @@ -8568,90 +8539,90 @@ __metadata: languageName: node linkType: hard -"lefthook-darwin-arm64@npm:2.0.8": - version: 2.0.8 - resolution: "lefthook-darwin-arm64@npm:2.0.8" +"lefthook-darwin-arm64@npm:2.0.12": + version: 2.0.12 + resolution: "lefthook-darwin-arm64@npm:2.0.12" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"lefthook-darwin-x64@npm:2.0.8": - version: 2.0.8 - resolution: "lefthook-darwin-x64@npm:2.0.8" +"lefthook-darwin-x64@npm:2.0.12": + version: 2.0.12 + resolution: "lefthook-darwin-x64@npm:2.0.12" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"lefthook-freebsd-arm64@npm:2.0.8": - version: 2.0.8 - resolution: "lefthook-freebsd-arm64@npm:2.0.8" +"lefthook-freebsd-arm64@npm:2.0.12": + version: 2.0.12 + resolution: "lefthook-freebsd-arm64@npm:2.0.12" conditions: os=freebsd & cpu=arm64 languageName: node linkType: hard -"lefthook-freebsd-x64@npm:2.0.8": - version: 2.0.8 - resolution: "lefthook-freebsd-x64@npm:2.0.8" +"lefthook-freebsd-x64@npm:2.0.12": + version: 2.0.12 + resolution: "lefthook-freebsd-x64@npm:2.0.12" conditions: os=freebsd & cpu=x64 languageName: node linkType: hard -"lefthook-linux-arm64@npm:2.0.8": - version: 2.0.8 - resolution: "lefthook-linux-arm64@npm:2.0.8" +"lefthook-linux-arm64@npm:2.0.12": + version: 2.0.12 + resolution: "lefthook-linux-arm64@npm:2.0.12" conditions: os=linux & cpu=arm64 languageName: node linkType: hard -"lefthook-linux-x64@npm:2.0.8": - version: 2.0.8 - resolution: "lefthook-linux-x64@npm:2.0.8" +"lefthook-linux-x64@npm:2.0.12": + version: 2.0.12 + resolution: "lefthook-linux-x64@npm:2.0.12" conditions: os=linux & cpu=x64 languageName: node linkType: hard -"lefthook-openbsd-arm64@npm:2.0.8": - version: 2.0.8 - resolution: "lefthook-openbsd-arm64@npm:2.0.8" +"lefthook-openbsd-arm64@npm:2.0.12": + version: 2.0.12 + resolution: "lefthook-openbsd-arm64@npm:2.0.12" conditions: os=openbsd & cpu=arm64 languageName: node linkType: hard -"lefthook-openbsd-x64@npm:2.0.8": - version: 2.0.8 - resolution: "lefthook-openbsd-x64@npm:2.0.8" +"lefthook-openbsd-x64@npm:2.0.12": + version: 2.0.12 + resolution: "lefthook-openbsd-x64@npm:2.0.12" conditions: os=openbsd & cpu=x64 languageName: node linkType: hard -"lefthook-windows-arm64@npm:2.0.8": - version: 2.0.8 - resolution: "lefthook-windows-arm64@npm:2.0.8" +"lefthook-windows-arm64@npm:2.0.12": + version: 2.0.12 + resolution: "lefthook-windows-arm64@npm:2.0.12" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard -"lefthook-windows-x64@npm:2.0.8": - version: 2.0.8 - resolution: "lefthook-windows-x64@npm:2.0.8" +"lefthook-windows-x64@npm:2.0.12": + version: 2.0.12 + resolution: "lefthook-windows-x64@npm:2.0.12" conditions: os=win32 & cpu=x64 languageName: node linkType: hard "lefthook@npm:^2.0.3": - version: 2.0.8 - resolution: "lefthook@npm:2.0.8" - dependencies: - lefthook-darwin-arm64: "npm:2.0.8" - lefthook-darwin-x64: "npm:2.0.8" - lefthook-freebsd-arm64: "npm:2.0.8" - lefthook-freebsd-x64: "npm:2.0.8" - lefthook-linux-arm64: "npm:2.0.8" - lefthook-linux-x64: "npm:2.0.8" - lefthook-openbsd-arm64: "npm:2.0.8" - lefthook-openbsd-x64: "npm:2.0.8" - lefthook-windows-arm64: "npm:2.0.8" - lefthook-windows-x64: "npm:2.0.8" + version: 2.0.12 + resolution: "lefthook@npm:2.0.12" + dependencies: + lefthook-darwin-arm64: "npm:2.0.12" + lefthook-darwin-x64: "npm:2.0.12" + lefthook-freebsd-arm64: "npm:2.0.12" + lefthook-freebsd-x64: "npm:2.0.12" + lefthook-linux-arm64: "npm:2.0.12" + lefthook-linux-x64: "npm:2.0.12" + lefthook-openbsd-arm64: "npm:2.0.12" + lefthook-openbsd-x64: "npm:2.0.12" + lefthook-windows-arm64: "npm:2.0.12" + lefthook-windows-x64: "npm:2.0.12" dependenciesMeta: lefthook-darwin-arm64: optional: true @@ -8675,7 +8646,7 @@ __metadata: optional: true bin: lefthook: bin/index.js - checksum: 10c0/80d320d4a374d47738b7a2fd9cf61894dd4f18b674656d936c0371decc1c14a26935d5c27c843f28d5bf3bb016ba37c1a470cf7fa578ac7db46701b476def016 + checksum: 10c0/5bc76bf69a0e13782948ad89484c52ce85593f382ae0f97c065bba36d5a6279d5cfc7c3caa087edb86645b3035d7d4d7eab612ebb8b09ac7ffca15892a1d2da6 languageName: node linkType: hard @@ -9275,12 +9246,12 @@ __metadata: languageName: node linkType: hard -"mime-types@npm:3.0.1": - version: 3.0.1 - resolution: "mime-types@npm:3.0.1" +"mime-types@npm:3.0.2": + version: 3.0.2 + resolution: "mime-types@npm:3.0.2" dependencies: mime-db: "npm:^1.54.0" - checksum: 10c0/bd8c20d3694548089cf229016124f8f40e6a60bbb600161ae13e45f793a2d5bb40f96bbc61f275836696179c77c1d6bf4967b2a75e0a8ad40fe31f4ed5be4da5 + checksum: 10c0/35a0dd1035d14d185664f346efcdb72e93ef7a9b6e9ae808bd1f6358227010267fab52657b37562c80fc888ff76becb2b2938deb5e730818b7983bf8bd359767 languageName: node linkType: hard @@ -9734,21 +9705,21 @@ __metadata: languageName: node linkType: hard -"on-finished@npm:2.4.1, on-finished@npm:~2.4.1": - version: 2.4.1 - resolution: "on-finished@npm:2.4.1" +"on-finished@npm:~2.3.0": + version: 2.3.0 + resolution: "on-finished@npm:2.3.0" dependencies: ee-first: "npm:1.1.1" - checksum: 10c0/46fb11b9063782f2d9968863d9cbba33d77aa13c17f895f56129c274318b86500b22af3a160fe9995aa41317efcd22941b6eba747f718ced08d9a73afdb087b4 + checksum: 10c0/c904f9e518b11941eb60279a3cbfaf1289bd0001f600a950255b1dede9fe3df8cd74f38483550b3bb9485165166acb5db500c3b4c4337aec2815c88c96fcc2ea languageName: node linkType: hard -"on-finished@npm:~2.3.0": - version: 2.3.0 - resolution: "on-finished@npm:2.3.0" +"on-finished@npm:~2.4.1": + version: 2.4.1 + resolution: "on-finished@npm:2.4.1" dependencies: ee-first: "npm:1.1.1" - checksum: 10c0/c904f9e518b11941eb60279a3cbfaf1289bd0001f600a950255b1dede9fe3df8cd74f38483550b3bb9485165166acb5db500c3b4c4337aec2815c88c96fcc2ea + checksum: 10c0/46fb11b9063782f2d9968863d9cbba33d77aa13c17f895f56129c274318b86500b22af3a160fe9995aa41317efcd22941b6eba747f718ced08d9a73afdb087b4 languageName: node linkType: hard @@ -10431,8 +10402,8 @@ __metadata: linkType: hard "react-native-builder-bob@npm:^0.40.16": - version: 0.40.16 - resolution: "react-native-builder-bob@npm:0.40.16" + version: 0.40.17 + resolution: "react-native-builder-bob@npm:0.40.17" dependencies: "@babel/core": "npm:^7.25.2" "@babel/plugin-transform-flow-strip-types": "npm:^7.26.5" @@ -10453,12 +10424,12 @@ __metadata: json5: "npm:^2.2.1" kleur: "npm:^4.1.4" prompts: "npm:^2.4.2" - react-native-monorepo-config: "npm:^0.1.8" + react-native-monorepo-config: "npm:^0.3.1" which: "npm:^2.0.2" yargs: "npm:^17.5.1" bin: bob: bin/bob - checksum: 10c0/d7f3c9a9cfb38863c3a2c14b1e24d182e59903244e933bf3a3f8dc0c3523ef860d005e4062cc36bab7228891c772275c5a198118f4bf6879aa2c35bd40d4e8fb + checksum: 10c0/b3bb6f907a181ea0473cbf68cbc9f594eb5f2adc885011f4d29c961258d5f123494c28565881c0190f9f1a297b11aad7a1238742dd88345b0390e4343d9c2c11 languageName: node linkType: hard @@ -10522,17 +10493,20 @@ __metadata: typescript: "npm:^5.9.2" peerDependencies: "@expo/config-plugins": ">=7" - react: "*" + "@types/react": ">=16.6.1" + react: ">=16.6.1" react-native: ">=0.74.0" react-native-vision-camera: "*" react-native-worklets-core: "*" peerDependenciesMeta: "@expo/config-plugins": optional: true + "@types/react": + optional: true languageName: unknown linkType: soft -"react-native-monorepo-config@npm:^0.1.8, react-native-monorepo-config@npm:^0.1.9": +"react-native-monorepo-config@npm:^0.1.9": version: 0.1.10 resolution: "react-native-monorepo-config@npm:0.1.10" dependencies: @@ -10542,6 +10516,16 @@ __metadata: languageName: node linkType: hard +"react-native-monorepo-config@npm:^0.3.1": + version: 0.3.2 + resolution: "react-native-monorepo-config@npm:0.3.2" + dependencies: + escape-string-regexp: "npm:^5.0.0" + fast-glob: "npm:^3.3.3" + checksum: 10c0/c711f6a898ae263b68aef3bf8bd9c3806cd489676da8c5480dd155859b47bcd49a7700f3c056896c19b3ce2c2c3ea42a5482def93b0ff03febbe023ceb128c96 + languageName: node + linkType: hard + "react-native-vision-camera@npm:^4.7.3": version: 4.7.3 resolution: "react-native-vision-camera@npm:4.7.3" @@ -10649,10 +10633,10 @@ __metadata: languageName: node linkType: hard -"readdirp@npm:^4.0.1": - version: 4.1.2 - resolution: "readdirp@npm:4.1.2" - checksum: 10c0/60a14f7619dec48c9c850255cd523e2717001b0e179dc7037cfa0895da7b9e9ab07532d324bfb118d73a710887d1e35f79c495fa91582784493e085d18c72c62 +"readdirp@npm:^5.0.0": + version: 5.0.0 + resolution: "readdirp@npm:5.0.0" + checksum: 10c0/faf1ec57cff2020f473128da3f8d2a57813cc3a08a36c38cae1c9af32c1579906cc50ba75578043b35bade77e945c098233665797cf9730ba3613a62d6e79219 languageName: node linkType: hard @@ -10742,35 +10726,35 @@ __metadata: linkType: hard "release-it@npm:^19.0.4": - version: 19.0.6 - resolution: "release-it@npm:19.0.6" + version: 19.2.1 + resolution: "release-it@npm:19.2.1" dependencies: "@nodeutils/defaults-deep": "npm:1.1.0" - "@octokit/rest": "npm:22.0.0" + "@octokit/rest": "npm:22.0.1" "@phun-ky/typeof": "npm:2.0.3" async-retry: "npm:1.3.3" - c12: "npm:3.3.1" - ci-info: "npm:^4.3.0" - eta: "npm:4.0.1" + c12: "npm:3.3.3" + ci-info: "npm:^4.3.1" + eta: "npm:4.5.0" git-url-parse: "npm:16.1.0" - inquirer: "npm:12.9.6" + inquirer: "npm:12.11.1" issue-parser: "npm:7.0.1" lodash.merge: "npm:4.6.2" - mime-types: "npm:3.0.1" + mime-types: "npm:3.0.2" new-github-release-url: "npm:2.0.0" open: "npm:10.2.0" ora: "npm:9.0.0" os-name: "npm:6.1.0" proxy-agent: "npm:6.5.0" - semver: "npm:7.7.2" + semver: "npm:7.7.3" tinyglobby: "npm:0.2.15" - undici: "npm:6.21.3" + undici: "npm:6.22.0" url-join: "npm:5.0.0" wildcard-match: "npm:5.1.4" yargs-parser: "npm:21.1.1" bin: release-it: bin/release-it.js - checksum: 10c0/75e146727831274f7dffd4eb3298e29390b8dd83353600e430588b3b40a1867c00e23f340249a83265ace2a7db0469457854eaf97810bfa15e45c8b8bc0af6ba + checksum: 10c0/44451901ac598fae39e4d197d261dbf5fb7ba075fd734f6d6dc97c92a467a9ef8899a5d674d673c26184940fef6e9e17f8c4a965bf3ae705a99deb485b4c0d47 languageName: node linkType: hard @@ -10936,7 +10920,7 @@ __metadata: languageName: node linkType: hard -"run-async@npm:^4.0.5": +"run-async@npm:^4.0.6": version: 4.0.6 resolution: "run-async@npm:4.0.6" checksum: 10c0/3e512c689d356238a06a59839deddeb09aec23bc66f780fe970fcf12b64bfc00c6880e9530ea22b8cf88a927145561f5a43343d8be87166e849ec0daaa3d4cf4 @@ -11023,12 +11007,12 @@ __metadata: languageName: node linkType: hard -"semver@npm:7.7.2": - version: 7.7.2 - resolution: "semver@npm:7.7.2" +"semver@npm:7.7.3, semver@npm:^7.1.3, semver@npm:^7.3.5, semver@npm:^7.3.7, semver@npm:^7.5.2, semver@npm:^7.5.3, semver@npm:^7.5.4, semver@npm:^7.6.0, semver@npm:^7.7.3": + version: 7.7.3 + resolution: "semver@npm:7.7.3" bin: semver: bin/semver.js - checksum: 10c0/aca305edfbf2383c22571cb7714f48cadc7ac95371b4b52362fb8eeffdfbc0de0669368b82b2b15978f8848f01d7114da65697e56cd8c37b0dab8c58e543f9ea + checksum: 10c0/4afe5c986567db82f44c8c6faef8fe9df2a9b1d98098fc1721f57c696c4c21cebd572f297fc21002f81889492345b8470473bc6f4aff5fb032a6ea59ea2bc45e languageName: node linkType: hard @@ -11041,33 +11025,24 @@ __metadata: languageName: node linkType: hard -"semver@npm:^7.1.3, semver@npm:^7.3.5, semver@npm:^7.3.7, semver@npm:^7.5.2, semver@npm:^7.5.3, semver@npm:^7.5.4, semver@npm:^7.6.0, semver@npm:^7.7.3": - version: 7.7.3 - resolution: "semver@npm:7.7.3" - bin: - semver: bin/semver.js - checksum: 10c0/4afe5c986567db82f44c8c6faef8fe9df2a9b1d98098fc1721f57c696c4c21cebd572f297fc21002f81889492345b8470473bc6f4aff5fb032a6ea59ea2bc45e - languageName: node - linkType: hard - -"send@npm:0.19.0": - version: 0.19.0 - resolution: "send@npm:0.19.0" +"send@npm:~0.19.1": + version: 0.19.2 + resolution: "send@npm:0.19.2" dependencies: debug: "npm:2.6.9" depd: "npm:2.0.0" destroy: "npm:1.2.0" - encodeurl: "npm:~1.0.2" + encodeurl: "npm:~2.0.0" escape-html: "npm:~1.0.3" etag: "npm:~1.8.1" - fresh: "npm:0.5.2" - http-errors: "npm:2.0.0" + fresh: "npm:~0.5.2" + http-errors: "npm:~2.0.1" mime: "npm:1.6.0" ms: "npm:2.1.3" - on-finished: "npm:2.4.1" + on-finished: "npm:~2.4.1" range-parser: "npm:~1.2.1" - statuses: "npm:2.0.1" - checksum: 10c0/ea3f8a67a8f0be3d6bf9080f0baed6d2c51d11d4f7b4470de96a5029c598a7011c497511ccc28968b70ef05508675cebff27da9151dd2ceadd60be4e6cf845e3 + statuses: "npm:~2.0.2" + checksum: 10c0/20c2389fe0fdf3fc499938cac598bc32272287e993c4960717381a10de8550028feadfb9076f959a3a3ebdea42e1f690e116f0d16468fa56b9fd41866d3dc267 languageName: node linkType: hard @@ -11079,14 +11054,14 @@ __metadata: linkType: hard "serve-static@npm:^1.13.1, serve-static@npm:^1.16.2": - version: 1.16.2 - resolution: "serve-static@npm:1.16.2" + version: 1.16.3 + resolution: "serve-static@npm:1.16.3" dependencies: encodeurl: "npm:~2.0.0" escape-html: "npm:~1.0.3" parseurl: "npm:~1.3.3" - send: "npm:0.19.0" - checksum: 10c0/528fff6f5e12d0c5a391229ad893910709bc51b5705962b09404a1d813857578149b8815f35d3ee5752f44cd378d0f31669d4b1d7e2d11f41e08283d5134bd1f + send: "npm:~0.19.1" + checksum: 10c0/36320397a073c71bedf58af48a4a100fe6d93f07459af4d6f08b9a7217c04ce2a4939e0effd842dc7bece93ffcd59eb52f58c4fff2a8e002dc29ae6b219cd42b languageName: node linkType: hard @@ -11134,7 +11109,7 @@ __metadata: languageName: node linkType: hard -"setprototypeof@npm:1.2.0, setprototypeof@npm:~1.2.0": +"setprototypeof@npm:~1.2.0": version: 1.2.0 resolution: "setprototypeof@npm:1.2.0" checksum: 10c0/68733173026766fa0d9ecaeb07f0483f4c2dc70ca376b3b7c40b7cda909f94b0918f6c5ad5ce27a9160bdfb475efaa9d5e705a11d8eaae18f9835d20976028bc @@ -11420,13 +11395,6 @@ __metadata: languageName: node linkType: hard -"statuses@npm:2.0.1": - version: 2.0.1 - resolution: "statuses@npm:2.0.1" - checksum: 10c0/34378b207a1620a24804ce8b5d230fea0c279f00b18a7209646d5d47e419d1cc23e7cbf33a25a1e51ac38973dc2ac2e1e9c647a8e481ef365f77668d72becfd0 - languageName: node - linkType: hard - "statuses@npm:~1.5.0": version: 1.5.0 resolution: "statuses@npm:1.5.0" @@ -11796,7 +11764,7 @@ __metadata: languageName: node linkType: hard -"toidentifier@npm:1.0.1, toidentifier@npm:~1.0.1": +"toidentifier@npm:~1.0.1": version: 1.0.1 resolution: "toidentifier@npm:1.0.1" checksum: 10c0/93937279934bd66cc3270016dd8d0afec14fb7c94a05c72dc57321f8bd1fa97e5bea6d1f7c89e728d077ca31ea125b78320a616a6c6cd0e6b9cb94cb864381c1 @@ -11837,58 +11805,58 @@ __metadata: languageName: node linkType: hard -"turbo-darwin-64@npm:2.6.3": - version: 2.6.3 - resolution: "turbo-darwin-64@npm:2.6.3" +"turbo-darwin-64@npm:2.7.2": + version: 2.7.2 + resolution: "turbo-darwin-64@npm:2.7.2" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"turbo-darwin-arm64@npm:2.6.3": - version: 2.6.3 - resolution: "turbo-darwin-arm64@npm:2.6.3" +"turbo-darwin-arm64@npm:2.7.2": + version: 2.7.2 + resolution: "turbo-darwin-arm64@npm:2.7.2" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"turbo-linux-64@npm:2.6.3": - version: 2.6.3 - resolution: "turbo-linux-64@npm:2.6.3" +"turbo-linux-64@npm:2.7.2": + version: 2.7.2 + resolution: "turbo-linux-64@npm:2.7.2" conditions: os=linux & cpu=x64 languageName: node linkType: hard -"turbo-linux-arm64@npm:2.6.3": - version: 2.6.3 - resolution: "turbo-linux-arm64@npm:2.6.3" +"turbo-linux-arm64@npm:2.7.2": + version: 2.7.2 + resolution: "turbo-linux-arm64@npm:2.7.2" conditions: os=linux & cpu=arm64 languageName: node linkType: hard -"turbo-windows-64@npm:2.6.3": - version: 2.6.3 - resolution: "turbo-windows-64@npm:2.6.3" +"turbo-windows-64@npm:2.7.2": + version: 2.7.2 + resolution: "turbo-windows-64@npm:2.7.2" conditions: os=win32 & cpu=x64 languageName: node linkType: hard -"turbo-windows-arm64@npm:2.6.3": - version: 2.6.3 - resolution: "turbo-windows-arm64@npm:2.6.3" +"turbo-windows-arm64@npm:2.7.2": + version: 2.7.2 + resolution: "turbo-windows-arm64@npm:2.7.2" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard "turbo@npm:^2.5.6": - version: 2.6.3 - resolution: "turbo@npm:2.6.3" - dependencies: - turbo-darwin-64: "npm:2.6.3" - turbo-darwin-arm64: "npm:2.6.3" - turbo-linux-64: "npm:2.6.3" - turbo-linux-arm64: "npm:2.6.3" - turbo-windows-64: "npm:2.6.3" - turbo-windows-arm64: "npm:2.6.3" + version: 2.7.2 + resolution: "turbo@npm:2.7.2" + dependencies: + turbo-darwin-64: "npm:2.7.2" + turbo-darwin-arm64: "npm:2.7.2" + turbo-linux-64: "npm:2.7.2" + turbo-linux-arm64: "npm:2.7.2" + turbo-windows-64: "npm:2.7.2" + turbo-windows-arm64: "npm:2.7.2" dependenciesMeta: turbo-darwin-64: optional: true @@ -11904,7 +11872,7 @@ __metadata: optional: true bin: turbo: bin/turbo - checksum: 10c0/3dab627a4e0f855c2ea2cc5e7d3d7abed01a7abace1197983c55e0563c413dfe45c80c121e5fa25d2cca013d895bde457d5cdf3a3d47000dc7d432a4cb68e78f + checksum: 10c0/390937a32070ac52120af56705006e831de2edf8e22a2b0146006d07740cd413b3a36335339e7617b57cf74b008f4b15931cf56e1c7c0c03808f028ed937c4de languageName: node linkType: hard @@ -12077,10 +12045,10 @@ __metadata: languageName: node linkType: hard -"undici@npm:6.21.3": - version: 6.21.3 - resolution: "undici@npm:6.21.3" - checksum: 10c0/294da109853fad7a6ef5a172ad0ca3fb3f1f60cf34703d062a5ec967daf69ad8c03b52e6d536c5cba3bb65615769bf08e5b30798915cbccdddaca01045173dda +"undici@npm:6.22.0": + version: 6.22.0 + resolution: "undici@npm:6.22.0" + checksum: 10c0/47903c489d73e26bd47960cf2f04d63282ed050818b672cb05f8dfb6403381b850cf1b1751832654fd3af22aacd9d780e5e61aff563cd97943f5c4f10d5b3e23 languageName: node linkType: hard @@ -12176,8 +12144,8 @@ __metadata: linkType: hard "update-browserslist-db@npm:^1.2.0": - version: 1.2.2 - resolution: "update-browserslist-db@npm:1.2.2" + version: 1.2.3 + resolution: "update-browserslist-db@npm:1.2.3" dependencies: escalade: "npm:^3.2.0" picocolors: "npm:^1.1.1" @@ -12185,7 +12153,7 @@ __metadata: browserslist: ">= 4.21.0" bin: update-browserslist-db: cli.js - checksum: 10c0/39c3ea08b397ffc8dc3a1c517f5c6ed5cc4179b5e185383dab9bf745879623c12062a2e6bf4f9427cc59389c7bfa0010e86858b923c1e349e32fdddd9b043bb2 + checksum: 10c0/13a00355ea822388f68af57410ce3255941d5fb9b7c49342c4709a07c9f230bbef7f7499ae0ca7e0de532e79a82cc0c4edbd125f1a323a1845bf914efddf8bec languageName: node linkType: hard From 1ef0101987302d1320ed229c7de3069c9279bd55 Mon Sep 17 00:00:00 2001 From: EndLess728 Date: Fri, 2 Jan 2026 13:46:07 +0530 Subject: [PATCH 3/3] chore: update readme to use expo config plugin --- README.md | 30 +++++++++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index f2f3bb8..89266e2 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,6 @@ npm weekly downloads - High-performance pose detection for React Native using Google's MediaPipe models with optimized frame processing for smooth real-time tracking. You can find the package on npm: [react-native-mediapipe-posedetection](https://www.npmjs.com/package/react-native-mediapipe-posedetection) @@ -42,6 +41,35 @@ npm install react-native-mediapipe-posedetection react-native-vision-camera reac yarn add react-native-mediapipe-posedetection react-native-vision-camera react-native-worklets-core ``` +### Expo Configuration + +If you are using Expo, you can use the built-in config plugin to automatically copy your MediaPipe model files to the native Android and iOS projects during prebuild. + +1. Add your model files (e.g., `pose_landmarker_lite.task`) to a directory in your project (e.g., `./assets/models/`). +2. Update your `app.json` or `app.config.js`: + +```json +{ + "expo": { + "plugins": [ + [ + "react-native-mediapipe-posedetection", + { + "assetsPaths": ["./assets/models/"] + } + ] + ] + } +} +``` + +This plugin will copy all files from the specified `assetsPaths` to: + +- **Android:** `android/app/src/main/assets/` +- **iOS:** The root of the Xcode project (and add them to the build resources). + +> **Note:** The `assetsPaths` are relative to your project root. + ### Enable New Architecture If you haven't already enabled the New Architecture in your React Native app: