{"_id":"vitest-mobile","_rev":"12-bdf6536f5fea738cfe3e38ff344e6c82","name":"vitest-mobile","dist-tags":{"latest":"0.4.3"},"versions":{"0.0.0":{"name":"vitest-mobile","version":"0.0.0","author":"","license":"ISC","_id":"vitest-mobile@0.0.0","maintainers":[{"name":"pzuraq","email":"opensource@pzuraq.com"}],"dist":{"shasum":"9aaeea0698b1d3bd8a4827239b9b37c590a4287c","tarball":"https://registry.npmjs.org/vitest-mobile/-/vitest-mobile-0.0.0.tgz","fileCount":2,"integrity":"sha512-4ZI4CHWpa/v93fat6mrcpMXsRTxKv4wWK3AqrQt15Koie3LXYR7NHj/6iBaD3nBgUA3HOVzWMiQlMyCVsEOh8w==","signatures":[{"sig":"MEUCIQDK5/Z4B2zFJ42a90PkqybcciWrUtSt8GLkDXS3aZC+CAIgHJFihFNX2CElt3truyLg6xAYIPkiqBijSOhpIEExxkY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":259},"main":"index.js","type":"commonjs","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"pzuraq","email":"opensource@pzuraq.com"},"_npmVersion":"11.11.0","description":"","directories":{},"_nodeVersion":"24.14.1","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/vitest-mobile_0.0.0_1776096414149_0.8477966471369689","host":"s3://npm-registry-packages-npm-production"}},"0.1.0":{"name":"vitest-mobile","version":"0.1.0","keywords":["vitest","react-native","testing","native","component-testing"],"license":"MIT","_id":"vitest-mobile@0.1.0","maintainers":[{"name":"pzuraq","email":"opensource@pzuraq.com"}],"homepage":"https://github.com/pzuraq/vitest-mobile#readme","bugs":{"url":"https://github.com/pzuraq/vitest-mobile/issues"},"bin":{"vitest-mobile":"bin/vitest-mobile.mjs"},"dist":{"shasum":"50702b0a94fa1386c0f101028474161784be3b65","tarball":"https://registry.npmjs.org/vitest-mobile/-/vitest-mobile-0.1.0.tgz","fileCount":176,"integrity":"sha512-vZT5Fu+B2cR5rZhkLAKXwrdzZrAW651DEpYQGrPusNlqTEpJNnouv2iGO3DNH1+sUT3AfF8oqu186XjYaiGs9w==","signatures":[{"sig":"MEYCIQD3dE7DvG8oX0fo+/dOBcobpXfHwhzCTJtfN30dZeTOWgIhAPqQcL8iWnh9f2LLp3o/vCnrg/30aCV4yDrSPwNP3nip","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/vitest-mobile@0.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":3332977},"main":"dist/node/index.cjs","type":"module","types":"matchers.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/node/index.d.ts","import":"./dist/node/index.js","require":"./dist/node/index.cjs"},"./metro":{"default":"./dist/metro/withNativeTests.cjs","require":"./dist/metro/withNativeTests.cjs"},"./runtime":{"types":"./src/runtime/index.ts","default":"./dist/runtime/index.cjs","require":"./dist/runtime/index.cjs","react-native":"./src/runtime/index.ts"},"./vitest-shim":{"types":"./src/runtime/vitest-shim.ts","default":"./dist/runtime/vitest-shim.cjs","require":"./dist/runtime/vitest-shim.cjs","react-native":"./src/runtime/vitest-shim.ts"},"./babel-plugin":{"default":"./dist/babel/test-wrapper-plugin.cjs","require":"./dist/babel/test-wrapper-plugin.cjs"},"./test-registry":{"types":"./test-registry.d.ts"}},"gitHead":"53cf5a083eea0b78ded2f50f052e49088ad90170","scripts":{"dev":"tsup --watch","test":"vitest run tests/unit tests/integration","build":"tsup","prepack":"cp ../../README.md .","test:e2e":"vitest run --config vitest.config.e2e.ts","test:unit":"vitest run tests/unit","prepublishOnly":"npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:eda57c33-d596-49fd-bf8b-168c13862b41"}},"repository":{"url":"git+https://github.com/pzuraq/vitest-mobile.git","type":"git"},"_npmVersion":"11.12.1","description":"Run Vitest component tests inside a real React Native app with native touch synthesis","directories":{},"_nodeVersion":"25.9.0","dependencies":{"ws":"^8.18.0","cac":"^6.7.14","glob":"^10.0.0","birpc":"^2.3.0","flatted":"^3.4.2","picocolors":"^1.1.1","tinyhighlight":"^0.3.2","@shopify/restyle":"^2.4.4"},"codegenConfig":{"name":"VitestMobileHarnessSpec","type":"modules","android":{"javaPackageName":"com.vitestmobileharness"},"jsSrcsDir":"src/native"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","vitest":"^4.0.0","@types/ws":"^8.5.13","@types/node":"^25.5.2","@types/react-native":"^0.72.8","@babel/preset-typescript":"^7.28.5"},"peerDependencies":{"metro":">=0.81.5","react":">=18","vitest":"^4.0.0","metro-config":">=0.81.5","react-native":">=0.81.5","@vitest/expect":"^4.0.0","@vitest/runner":"^4.0.0","@react-native/metro-config":">=0.74","react-native-safe-area-context":">=4.0.0"},"peerDependenciesMeta":{},"_npmOperationalInternal":{"tmp":"tmp/vitest-mobile_0.1.0_1776446983342_0.9987361513140778","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"vitest-mobile","version":"0.1.1","keywords":["vitest","react-native","testing","native","component-testing"],"license":"MIT","_id":"vitest-mobile@0.1.1","maintainers":[{"name":"pzuraq","email":"opensource@pzuraq.com"}],"homepage":"https://github.com/pzuraq/vitest-mobile#readme","bugs":{"url":"https://github.com/pzuraq/vitest-mobile/issues"},"bin":{"vitest-mobile":"bin/vitest-mobile.mjs"},"dist":{"shasum":"c0fe3674897145a96ce5fc04e08be05fcab9add1","tarball":"https://registry.npmjs.org/vitest-mobile/-/vitest-mobile-0.1.1.tgz","fileCount":178,"integrity":"sha512-8XgOCwIicaNVdnPq7mbI5vDptntnVkMkwCBWyXDgH1jZGejRgQBJnK29tnnoseA8V4qcKES77IDAzz4WMREmlg==","signatures":[{"sig":"MEUCIQCcoMefQifListp7XxQxCexeNqKDmigbSHFVjXJZ2JHGQIgXJKuioMluv3NRwu6Fp6vdbj0XjOH+hmRcGrAZiDQ8xc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/vitest-mobile@0.1.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":3494083},"main":"dist/node/index.cjs","type":"module","types":"matchers.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/node/index.d.ts","import":"./dist/node/index.js","require":"./dist/node/index.cjs"},"./metro":{"default":"./dist/metro/withNativeTests.cjs","require":"./dist/metro/withNativeTests.cjs"},"./runtime":{"types":"./src/runtime/index.ts","default":"./dist/runtime/index.cjs","require":"./dist/runtime/index.cjs","react-native":"./src/runtime/index.ts"},"./vitest-shim":{"types":"./src/runtime/vitest-shim.ts","default":"./dist/runtime/vitest-shim.cjs","require":"./dist/runtime/vitest-shim.cjs","react-native":"./src/runtime/vitest-shim.ts"},"./babel-plugin":{"default":"./dist/babel/test-wrapper-plugin.cjs","require":"./dist/babel/test-wrapper-plugin.cjs"},"./package.json":"./package.json","./test-registry":{"types":"./test-registry.d.ts"}},"gitHead":"f1152452cad6471f84d1e07204f99a453cadf079","scripts":{"dev":"tsup --watch","test":"vitest run tests/unit tests/integration","build":"tsup","prepack":"cp ../../README.md .","test:e2e":"vitest run --config vitest.config.e2e.ts","test:unit":"vitest run tests/unit","prepublishOnly":"npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:eda57c33-d596-49fd-bf8b-168c13862b41"}},"repository":{"url":"git+https://github.com/pzuraq/vitest-mobile.git","type":"git"},"_npmVersion":"11.12.1","description":"Run Vitest component tests inside a real React Native app with native touch synthesis","directories":{},"_nodeVersion":"25.9.0","dependencies":{"ws":"^8.18.0","cac":"^6.7.14","glob":"^10.0.0","birpc":"^2.3.0","flatted":"^3.4.2","picocolors":"^1.1.1","tinyhighlight":"^0.3.2","@shopify/restyle":"^2.4.4","react-native-safe-area-context":">=4.0.0"},"codegenConfig":{"name":"VitestMobileHarnessSpec","type":"modules","android":{"javaPackageName":"com.vitestmobileharness"},"jsSrcsDir":"src/native"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","vitest":"^4.0.0","@types/ws":"^8.5.13","@types/node":"^25.5.2","@types/react":"^19.2.14"},"peerDependencies":{"react":">=18","vitest":"^4.0.0","react-native":">=0.81.5","@vitest/expect":"^4.0.0","@vitest/runner":"^4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/vitest-mobile_0.1.1_1776482066838_0.7743657886868649","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"vitest-mobile","version":"0.2.0","keywords":["vitest","react-native","testing","native","component-testing"],"license":"MIT","_id":"vitest-mobile@0.2.0","maintainers":[{"name":"pzuraq","email":"opensource@pzuraq.com"}],"homepage":"https://github.com/pzuraq/vitest-mobile#readme","bugs":{"url":"https://github.com/pzuraq/vitest-mobile/issues"},"bin":{"vitest-mobile":"bin/vitest-mobile.mjs"},"dist":{"shasum":"9c4d76ae627825a9c1dc2a2eb0f42fcc1c339f31","tarball":"https://registry.npmjs.org/vitest-mobile/-/vitest-mobile-0.2.0.tgz","fileCount":207,"integrity":"sha512-cM2c9ho+hDsJRlkzoSs1ReRUUkH7w+thFVq7lDahTb6OPoehpvTojKuTICQKQbzHAFhmZ22sk+apZvavTs6AaQ==","signatures":[{"sig":"MEYCIQD/39cFMnonr0bdbO9QGVSiVhqPSvGwopX2vrmgO8l2zQIhAJLazkR8z4xo5Z1Sm7MyR2SGFMvIw/+csXfW98FVHyWs","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/vitest-mobile@0.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":4205169},"main":"dist/node/index.cjs","type":"module","types":"matchers.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/node/index.d.ts","import":"./dist/node/index.js","require":"./dist/node/index.cjs"},"./runtime":{"types":"./src/runtime/index.ts","default":"./dist/runtime/index.cjs","require":"./dist/runtime/index.cjs","react-native":"./src/runtime/index.ts"},"./vitest-shim":{"types":"./src/runtime/vitest-shim.ts","default":"./dist/runtime/vitest-shim.cjs","require":"./dist/runtime/vitest-shim.cjs","react-native":"./src/runtime/vitest-shim.ts"},"./babel-plugin":{"default":"./dist/babel/test-wrapper-plugin.cjs","require":"./dist/babel/test-wrapper-plugin.cjs"},"./package.json":"./package.json","./test-context":{"types":"./src/runtime/test-context.ts","default":"./dist/runtime/test-context.cjs","require":"./dist/runtime/test-context.cjs","react-native":"./src/runtime/test-context.ts"},"./vitest-compat-plugin":{"default":"./dist/babel/vitest-compat-plugin.cjs","require":"./dist/babel/vitest-compat-plugin.cjs"},"./inline-app-root-plugin":{"default":"./dist/babel/inline-app-root-plugin.cjs","require":"./dist/babel/inline-app-root-plugin.cjs"}},"gitHead":"383cab95b74582f61342b8d847780137711ed041","scripts":{"dev":"tsup --watch","test":"vitest run tests/unit tests/integration","build":"tsup","prepack":"cp ../../README.md .","test:e2e":"vitest run --config vitest.config.e2e.ts","test:unit":"vitest run tests/unit","prepublishOnly":"npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:eda57c33-d596-49fd-bf8b-168c13862b41"}},"repository":{"url":"git+https://github.com/pzuraq/vitest-mobile.git","type":"git"},"_npmVersion":"11.12.1","description":"Run Vitest component tests inside a real React Native app with native touch synthesis","directories":{},"_nodeVersion":"25.9.0","dependencies":{"ws":"^8.18.0","cac":"^6.7.14","glob":"^10.0.0","birpc":"^2.3.0","flatted":"^3.4.2","picomatch":"^4.0.0","signalium":"^2.4.0","picocolors":"^1.1.1","tinyhighlight":"^0.3.2","@clack/prompts":"^1.2.0","@shopify/restyle":"^2.4.4","react-native-safe-area-context":">=4.0.0"},"codegenConfig":{"name":"VitestMobileHarnessSpec","type":"modules","android":{"javaPackageName":"com.vitestmobileharness"},"jsSrcsDir":"src/native"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","vitest":"^4.0.0","@types/ws":"^8.5.13","@types/node":"^25.5.2","@types/react":"^19.2.14","@types/picomatch":"^4.0.0"},"peerDependencies":{"react":">=18","vitest":"^4.0.0","react-native":">=0.81.5","@vitest/utils":"^4.0.0","@vitest/expect":"^4.0.0","@vitest/runner":"^4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/vitest-mobile_0.2.0_1777402345082_0.026704020758096636","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"vitest-mobile","version":"0.2.1","keywords":["vitest","react-native","testing","native","component-testing"],"license":"MIT","_id":"vitest-mobile@0.2.1","maintainers":[{"name":"pzuraq","email":"opensource@pzuraq.com"}],"homepage":"https://github.com/pzuraq/vitest-mobile#readme","bugs":{"url":"https://github.com/pzuraq/vitest-mobile/issues"},"bin":{"vitest-mobile":"bin/vitest-mobile.mjs"},"dist":{"shasum":"e8c0793f73f43e04cba9c351904fa0051fc59887","tarball":"https://registry.npmjs.org/vitest-mobile/-/vitest-mobile-0.2.1.tgz","fileCount":207,"integrity":"sha512-lg+wVl1uLaf/w84adQRIhCHuGvcmyKB5AMVmOl/zOv5badrV7irkT03nvSbOC87UrMynQd+hXkbILLinDC3tCA==","signatures":[{"sig":"MEUCIQC6M4BT9p58EeVRj39UpaMouaXO1FUaem68EGA5EXcilQIgTAHT7F4CmVWj2mGsl3r01wREyk3/2voFVGtIAenSSdQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/vitest-mobile@0.2.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":4238392},"main":"dist/node/index.cjs","type":"module","types":"matchers.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/node/index.d.ts","import":"./dist/node/index.js","require":"./dist/node/index.cjs"},"./runtime":{"types":"./src/runtime/index.ts","default":"./dist/runtime/index.cjs","require":"./dist/runtime/index.cjs","react-native":"./src/runtime/index.ts"},"./vitest-shim":{"types":"./src/runtime/vitest-shim.ts","default":"./dist/runtime/vitest-shim.cjs","require":"./dist/runtime/vitest-shim.cjs","react-native":"./src/runtime/vitest-shim.ts"},"./babel-plugin":{"default":"./dist/babel/test-wrapper-plugin.cjs","require":"./dist/babel/test-wrapper-plugin.cjs"},"./package.json":"./package.json","./test-context":{"types":"./src/runtime/test-context.ts","default":"./dist/runtime/test-context.cjs","require":"./dist/runtime/test-context.cjs","react-native":"./src/runtime/test-context.ts"},"./vitest-compat-plugin":{"default":"./dist/babel/vitest-compat-plugin.cjs","require":"./dist/babel/vitest-compat-plugin.cjs"},"./inline-app-root-plugin":{"default":"./dist/babel/inline-app-root-plugin.cjs","require":"./dist/babel/inline-app-root-plugin.cjs"}},"gitHead":"6d712934fdcb749276c9a3c669a2d12a9f40927e","scripts":{"dev":"tsup --watch","test":"vitest run tests/unit tests/integration","build":"tsup","prepack":"cp ../../README.md .","test:e2e":"vitest run --config vitest.config.e2e.ts","test:unit":"vitest run tests/unit","prepublishOnly":"npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:eda57c33-d596-49fd-bf8b-168c13862b41"}},"repository":{"url":"git+https://github.com/pzuraq/vitest-mobile.git","type":"git"},"_npmVersion":"11.12.1","description":"Run Vitest component tests inside a real React Native app with native touch synthesis","directories":{},"_nodeVersion":"25.9.0","dependencies":{"ws":"^8.18.0","cac":"^6.7.14","glob":"^10.0.0","birpc":"^2.3.0","flatted":"^3.4.2","picomatch":"^4.0.0","signalium":"^2.4.0","picocolors":"^1.1.1","tinyhighlight":"^0.3.2","@clack/prompts":"^1.2.0","@shopify/restyle":"^2.4.4","react-native-safe-area-context":">=4.0.0"},"codegenConfig":{"name":"VitestMobileHarnessSpec","type":"modules","android":{"javaPackageName":"com.vitestmobileharness"},"jsSrcsDir":"src/native"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","vitest":"^4.0.0","@types/ws":"^8.5.13","@types/node":"^25.5.2","@types/react":"^19.2.14","@types/picomatch":"^4.0.0"},"peerDependencies":{"react":">=18","vitest":"^4.0.0","react-native":">=0.81.5","@vitest/utils":"^4.0.0","@vitest/expect":"^4.0.0","@vitest/runner":"^4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/vitest-mobile_0.2.1_1777414755739_0.46010601162441245","host":"s3://npm-registry-packages-npm-production"}},"0.2.2":{"name":"vitest-mobile","version":"0.2.2","keywords":["vitest","react-native","testing","native","component-testing"],"license":"MIT","_id":"vitest-mobile@0.2.2","maintainers":[{"name":"pzuraq","email":"opensource@pzuraq.com"}],"homepage":"https://github.com/pzuraq/vitest-mobile#readme","bugs":{"url":"https://github.com/pzuraq/vitest-mobile/issues"},"bin":{"vitest-mobile":"bin/vitest-mobile.mjs"},"dist":{"shasum":"886ddf5f0880c5c778704a22855df138d96ba835","tarball":"https://registry.npmjs.org/vitest-mobile/-/vitest-mobile-0.2.2.tgz","fileCount":208,"integrity":"sha512-IWPlPK6x9uGzs63RvSlnDrtJT4k8LQeGLE/9fqDNEz+7/YzV1Vlxwr3b94ETqGlvAe76PMQQOmPrAoJa5rW4ZQ==","signatures":[{"sig":"MEUCIAjB0WmO4EkRMF+NMMt/NLnS/s7BO9IMS0FXqk4BQZtHAiEAwGyfHfuRBphDc+7/ybVZa6zsgGidmQSadd7tQN6RA5I=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/vitest-mobile@0.2.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":4241350},"main":"dist/node/index.cjs","type":"module","types":"matchers.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/node/index.d.ts","import":"./dist/node/index.js","require":"./dist/node/index.cjs"},"./runtime":{"types":"./src/runtime/index.ts","default":"./dist/runtime/index.cjs","require":"./dist/runtime/index.cjs","react-native":"./src/runtime/index.ts"},"./vitest-shim":{"types":"./src/runtime/vitest-shim.ts","default":"./dist/runtime/vitest-shim.cjs","require":"./dist/runtime/vitest-shim.cjs","react-native":"./src/runtime/vitest-shim.ts"},"./babel-plugin":{"default":"./dist/babel/test-wrapper-plugin.cjs","require":"./dist/babel/test-wrapper-plugin.cjs"},"./package.json":"./package.json","./test-context":{"types":"./src/runtime/test-context.ts","default":"./dist/runtime/test-context.cjs","require":"./dist/runtime/test-context.cjs","react-native":"./src/runtime/test-context.ts"},"./vitest-compat-plugin":{"default":"./dist/babel/vitest-compat-plugin.cjs","require":"./dist/babel/vitest-compat-plugin.cjs"},"./inline-app-root-plugin":{"default":"./dist/babel/inline-app-root-plugin.cjs","require":"./dist/babel/inline-app-root-plugin.cjs"}},"gitHead":"f74981f610bd9ca5ae0acc04435db257dd1322d9","scripts":{"dev":"tsup --watch","test":"vitest run tests/unit tests/integration","build":"tsup","prepack":"cp ../../README.md .","test:e2e":"vitest run --config vitest.config.e2e.ts","test:unit":"vitest run tests/unit","prepublishOnly":"npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:eda57c33-d596-49fd-bf8b-168c13862b41"}},"repository":{"url":"git+https://github.com/pzuraq/vitest-mobile.git","type":"git"},"_npmVersion":"11.12.1","description":"Run Vitest component tests inside a real React Native app with native touch synthesis","directories":{},"_nodeVersion":"25.9.0","dependencies":{"ws":"^8.18.0","cac":"^6.7.14","glob":"^10.0.0","birpc":"^2.3.0","flatted":"^3.4.2","picomatch":"^4.0.0","signalium":"^2.4.0","picocolors":"^1.1.1","tinyhighlight":"^0.3.2","@clack/prompts":"^1.2.0","@shopify/restyle":"^2.4.4","react-native-safe-area-context":">=4.0.0"},"codegenConfig":{"name":"VitestMobileHarnessSpec","type":"modules","android":{"javaPackageName":"com.vitestmobileharness"},"jsSrcsDir":"src/native"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","vitest":"^4.0.0","@types/ws":"^8.5.13","@types/node":"^25.5.2","@types/react":"^19.2.14","@types/picomatch":"^4.0.0"},"peerDependencies":{"react":">=18","vitest":"^4.0.0","react-native":">=0.81.5","@vitest/utils":"^4.0.0","@vitest/expect":"^4.0.0","@vitest/runner":"^4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/vitest-mobile_0.2.2_1778112059873_0.9181381009131091","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"vitest-mobile","version":"0.3.0","keywords":["vitest","react-native","testing","native","component-testing"],"license":"MIT","_id":"vitest-mobile@0.3.0","maintainers":[{"name":"pzuraq","email":"opensource@pzuraq.com"}],"homepage":"https://github.com/pzuraq/vitest-mobile#readme","bugs":{"url":"https://github.com/pzuraq/vitest-mobile/issues"},"bin":{"vitest-mobile":"bin/vitest-mobile.mjs"},"dist":{"shasum":"e750b938d10cf97010f5554f128c45eec9f934ab","tarball":"https://registry.npmjs.org/vitest-mobile/-/vitest-mobile-0.3.0.tgz","fileCount":208,"integrity":"sha512-2CrcNL7RYNrbx6l2vL59jlzecNVzKL1sGabJ6BpJXZbo4OjH8bdZMj7pnAsP2//pOQY4skeVoQb5KKpbO0FBow==","signatures":[{"sig":"MEUCIQDX5dh5mfi0NwB3GxiHwG+I9nfZkSYepksKrYigMcenOAIgV/smtlGtrHa116GlMfKw23+FAYkZH3tqiubVJSXf3+g=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/vitest-mobile@0.3.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":4282647},"main":"dist/node/index.cjs","type":"module","types":"matchers.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/node/index.d.ts","import":"./dist/node/index.js","require":"./dist/node/index.cjs"},"./runtime":{"types":"./src/runtime/index.ts","default":"./dist/runtime/index.cjs","require":"./dist/runtime/index.cjs","react-native":"./src/runtime/index.ts"},"./vitest-shim":{"types":"./src/runtime/vitest-shim.ts","default":"./dist/runtime/vitest-shim.cjs","require":"./dist/runtime/vitest-shim.cjs","react-native":"./src/runtime/vitest-shim.ts"},"./babel-plugin":{"default":"./dist/babel/test-wrapper-plugin.cjs","require":"./dist/babel/test-wrapper-plugin.cjs"},"./package.json":"./package.json","./test-context":{"types":"./src/runtime/test-context.ts","default":"./dist/runtime/test-context.cjs","require":"./dist/runtime/test-context.cjs","react-native":"./src/runtime/test-context.ts"},"./vitest-compat-plugin":{"default":"./dist/babel/vitest-compat-plugin.cjs","require":"./dist/babel/vitest-compat-plugin.cjs"},"./inline-app-root-plugin":{"default":"./dist/babel/inline-app-root-plugin.cjs","require":"./dist/babel/inline-app-root-plugin.cjs"}},"gitHead":"d43a28dd6234341c9e55cd6c59dca097d7f58eb5","scripts":{"dev":"tsup --watch","test":"vitest run tests/unit tests/integration","build":"tsup","prepack":"cp ../../README.md .","test:e2e":"vitest run --config vitest.config.e2e.ts","test:unit":"vitest run tests/unit","prepublishOnly":"npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:eda57c33-d596-49fd-bf8b-168c13862b41"}},"repository":{"url":"git+https://github.com/pzuraq/vitest-mobile.git","type":"git"},"_npmVersion":"11.12.1","description":"Run Vitest component tests inside a real React Native app with native touch synthesis","directories":{},"_nodeVersion":"25.9.0","dependencies":{"ws":"^8.18.0","cac":"^6.7.14","glob":"^10.0.0","birpc":"^2.3.0","flatted":"^3.4.2","picomatch":"^4.0.0","signalium":"^2.4.0","picocolors":"^1.1.1","tinyhighlight":"^0.3.2","@clack/prompts":"^1.2.0","@shopify/restyle":"^2.4.4","react-native-safe-area-context":">=4.0.0"},"codegenConfig":{"name":"VitestMobileHarnessSpec","type":"modules","android":{"javaPackageName":"com.vitestmobileharness"},"jsSrcsDir":"src/native"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","vitest":"^4.0.0","@types/ws":"^8.5.13","@types/node":"^25.5.2","@types/react":"^19.2.14","@types/picomatch":"^4.0.0"},"peerDependencies":{"react":">=18","vitest":"^4.0.0","react-native":">=0.81.5","@vitest/utils":"^4.0.0","@vitest/expect":"^4.0.0","@vitest/runner":"^4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/vitest-mobile_0.3.0_1778177728861_0.22177657033797105","host":"s3://npm-registry-packages-npm-production"}},"0.3.1":{"name":"vitest-mobile","version":"0.3.1","keywords":["vitest","react-native","testing","native","component-testing"],"license":"MIT","_id":"vitest-mobile@0.3.1","maintainers":[{"name":"pzuraq","email":"opensource@pzuraq.com"}],"homepage":"https://github.com/pzuraq/vitest-mobile#readme","bugs":{"url":"https://github.com/pzuraq/vitest-mobile/issues"},"bin":{"vitest-mobile":"bin/vitest-mobile.mjs"},"dist":{"shasum":"298652e83ac9bb9ad0205b30757bf874f883a73d","tarball":"https://registry.npmjs.org/vitest-mobile/-/vitest-mobile-0.3.1.tgz","fileCount":208,"integrity":"sha512-5qUBZK3UCJao9cTxhv6iiEoTDhfS9qrsXFj2LUo7JDlaPKXoWyKgRJ0mdbidUN4pyRKdZBZGzi6fhhGfyG8xMQ==","signatures":[{"sig":"MEQCIGaioeEkjn3yUCbkCGB4dpg/t/EyYXdF0C7hTgcUSCy/AiBSXksMLcu5rcBHwM3JneuWQgs0v2PDIOCYTFmOWkbwcA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/vitest-mobile@0.3.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":4287429},"main":"dist/node/index.cjs","type":"module","types":"matchers.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/node/index.d.ts","import":"./dist/node/index.js","require":"./dist/node/index.cjs"},"./runtime":{"types":"./src/runtime/index.ts","default":"./dist/runtime/index.cjs","require":"./dist/runtime/index.cjs","react-native":"./src/runtime/index.ts"},"./vitest-shim":{"types":"./src/runtime/vitest-shim.ts","default":"./dist/runtime/vitest-shim.cjs","require":"./dist/runtime/vitest-shim.cjs","react-native":"./src/runtime/vitest-shim.ts"},"./babel-plugin":{"default":"./dist/babel/test-wrapper-plugin.cjs","require":"./dist/babel/test-wrapper-plugin.cjs"},"./package.json":"./package.json","./test-context":{"types":"./src/runtime/test-context.ts","default":"./dist/runtime/test-context.cjs","require":"./dist/runtime/test-context.cjs","react-native":"./src/runtime/test-context.ts"},"./vitest-compat-plugin":{"default":"./dist/babel/vitest-compat-plugin.cjs","require":"./dist/babel/vitest-compat-plugin.cjs"},"./inline-app-root-plugin":{"default":"./dist/babel/inline-app-root-plugin.cjs","require":"./dist/babel/inline-app-root-plugin.cjs"}},"gitHead":"bfe6609c324fe26e3936a241ee0c7edda47385f9","scripts":{"dev":"tsup --watch","test":"vitest run tests/unit tests/integration","build":"tsup","prepack":"cp ../../README.md .","test:e2e":"vitest run --config vitest.config.e2e.ts","test:unit":"vitest run tests/unit","prepublishOnly":"npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:eda57c33-d596-49fd-bf8b-168c13862b41"}},"repository":{"url":"git+https://github.com/pzuraq/vitest-mobile.git","type":"git"},"_npmVersion":"11.12.1","description":"Run Vitest component tests inside a real React Native app with native touch synthesis","directories":{},"_nodeVersion":"25.9.0","dependencies":{"ws":"^8.18.0","cac":"^6.7.14","glob":"^10.0.0","birpc":"^2.3.0","flatted":"^3.4.2","picomatch":"^4.0.0","signalium":"^2.4.0","picocolors":"^1.1.1","tinyhighlight":"^0.3.2","@clack/prompts":"^1.2.0","@shopify/restyle":"^2.4.4","react-native-safe-area-context":">=4.0.0"},"codegenConfig":{"name":"VitestMobileHarnessSpec","type":"modules","android":{"javaPackageName":"com.vitestmobileharness"},"jsSrcsDir":"src/native"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","vitest":"^4.0.0","@types/ws":"^8.5.13","@types/node":"^25.5.2","@types/react":"^19.2.14","@types/picomatch":"^4.0.0"},"peerDependencies":{"react":">=18","vitest":"^4.0.0","react-native":">=0.81.5","@vitest/utils":"^4.0.0","@vitest/expect":"^4.0.0","@vitest/runner":"^4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/vitest-mobile_0.3.1_1778197538760_0.03678550272560388","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"vitest-mobile","version":"0.4.0","keywords":["vitest","react-native","testing","native","component-testing"],"license":"MIT","_id":"vitest-mobile@0.4.0","maintainers":[{"name":"pzuraq","email":"opensource@pzuraq.com"}],"homepage":"https://github.com/pzuraq/vitest-mobile#readme","bugs":{"url":"https://github.com/pzuraq/vitest-mobile/issues"},"bin":{"vitest-mobile":"bin/vitest-mobile.mjs"},"dist":{"shasum":"9df62aeea4618fcf3aa69c38e6325a168448ec67","tarball":"https://registry.npmjs.org/vitest-mobile/-/vitest-mobile-0.4.0.tgz","fileCount":208,"integrity":"sha512-JZ27L2LfZ/NPI6zKWy5oQOBph252IN2ov4HD5viKS9ftAcVdM7/swTQc+HBLO0agnnxnwy0ivkRoFB2uLug9dw==","signatures":[{"sig":"MEYCIQC7xPVi3gq8cVzD5nVY5o8gLDWLMy/UnTQHqE0a1ylmkwIhANfIEqklcg4VRNK+rUFEnrXVg7qd5VwMXQwuUVoYqqJS","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/vitest-mobile@0.4.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":4324663},"main":"dist/node/index.cjs","type":"module","types":"matchers.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/node/index.d.ts","import":"./dist/node/index.js","require":"./dist/node/index.cjs"},"./runtime":{"types":"./src/runtime/index.ts","default":"./dist/runtime/index.cjs","require":"./dist/runtime/index.cjs","react-native":"./src/runtime/index.ts"},"./vitest-shim":{"types":"./src/runtime/vitest-shim.ts","default":"./dist/runtime/vitest-shim.cjs","require":"./dist/runtime/vitest-shim.cjs","react-native":"./src/runtime/vitest-shim.ts"},"./babel-plugin":{"default":"./dist/babel/test-wrapper-plugin.cjs","require":"./dist/babel/test-wrapper-plugin.cjs"},"./package.json":"./package.json","./test-context":{"types":"./src/runtime/test-context.ts","default":"./dist/runtime/test-context.cjs","require":"./dist/runtime/test-context.cjs","react-native":"./src/runtime/test-context.ts"},"./vitest-compat-plugin":{"default":"./dist/babel/vitest-compat-plugin.cjs","require":"./dist/babel/vitest-compat-plugin.cjs"},"./inline-app-root-plugin":{"default":"./dist/babel/inline-app-root-plugin.cjs","require":"./dist/babel/inline-app-root-plugin.cjs"}},"gitHead":"1e1f383c4ee64c4b6009271dbe92b5085fd0d879","scripts":{"dev":"tsup --watch","test":"vitest run tests/unit tests/integration","build":"tsup","prepack":"cp ../../README.md .","test:e2e":"vitest run --config vitest.config.e2e.ts","test:unit":"vitest run tests/unit","prepublishOnly":"npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:eda57c33-d596-49fd-bf8b-168c13862b41"}},"repository":{"url":"git+https://github.com/pzuraq/vitest-mobile.git","type":"git"},"_npmVersion":"11.12.1","description":"Run Vitest component tests inside a real React Native app with native touch synthesis","directories":{},"_nodeVersion":"25.9.0","dependencies":{"ws":"^8.18.0","cac":"^6.7.14","glob":"^10.0.0","birpc":"^2.3.0","flatted":"^3.4.2","picomatch":"^4.0.0","signalium":"^2.4.0","picocolors":"^1.1.1","tinyhighlight":"^0.3.2","@clack/prompts":"^1.2.0","@shopify/restyle":"^2.4.4","react-native-safe-area-context":">=4.0.0"},"codegenConfig":{"name":"VitestMobileHarnessSpec","type":"modules","android":{"javaPackageName":"com.vitestmobileharness"},"jsSrcsDir":"src/native"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","vitest":"^4.0.0","@types/ws":"^8.5.13","@types/node":"^25.5.2","@types/react":"^19.2.14","@types/picomatch":"^4.0.0"},"peerDependencies":{"react":">=18","vitest":"^4.0.0","react-native":">=0.81.5","@vitest/utils":"^4.0.0","@vitest/expect":"^4.0.0","@vitest/runner":"^4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/vitest-mobile_0.4.0_1779311929905_0.42191118999167343","host":"s3://npm-registry-packages-npm-production"}},"0.4.1":{"name":"vitest-mobile","version":"0.4.1","keywords":["vitest","react-native","testing","native","component-testing"],"license":"MIT","_id":"vitest-mobile@0.4.1","maintainers":[{"name":"pzuraq","email":"opensource@pzuraq.com"}],"homepage":"https://github.com/pzuraq/vitest-mobile#readme","bugs":{"url":"https://github.com/pzuraq/vitest-mobile/issues"},"bin":{"vitest-mobile":"bin/vitest-mobile.mjs"},"dist":{"shasum":"f1d34b4a5b7207c09e830c04afe052ba8518f8a4","tarball":"https://registry.npmjs.org/vitest-mobile/-/vitest-mobile-0.4.1.tgz","fileCount":208,"integrity":"sha512-zWbVF2WR4F2MqyrOn4eqvckSc3EghUKbS8VbbdOqs+OXjuQhxn0K8ygrxNeJYhd7qSBaEco/hogGMpwtxMSZlw==","signatures":[{"sig":"MEQCIFdyWDOQ7pdMziNgP8m9Xzquzsi7g3f7tAe4vE07m8NlAiA3fkGQOr86RkGQjj+UouB0ZbuUDq9QuH6LjRsTZGYEYg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/vitest-mobile@0.4.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":4327932},"main":"dist/node/index.cjs","type":"module","types":"matchers.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/node/index.d.ts","import":"./dist/node/index.js","require":"./dist/node/index.cjs"},"./runtime":{"types":"./src/runtime/index.ts","default":"./dist/runtime/index.cjs","require":"./dist/runtime/index.cjs","react-native":"./src/runtime/index.ts"},"./vitest-shim":{"types":"./src/runtime/vitest-shim.ts","default":"./dist/runtime/vitest-shim.cjs","require":"./dist/runtime/vitest-shim.cjs","react-native":"./src/runtime/vitest-shim.ts"},"./babel-plugin":{"default":"./dist/babel/test-wrapper-plugin.cjs","require":"./dist/babel/test-wrapper-plugin.cjs"},"./package.json":"./package.json","./test-context":{"types":"./src/runtime/test-context.ts","default":"./dist/runtime/test-context.cjs","require":"./dist/runtime/test-context.cjs","react-native":"./src/runtime/test-context.ts"},"./vitest-compat-plugin":{"default":"./dist/babel/vitest-compat-plugin.cjs","require":"./dist/babel/vitest-compat-plugin.cjs"},"./inline-app-root-plugin":{"default":"./dist/babel/inline-app-root-plugin.cjs","require":"./dist/babel/inline-app-root-plugin.cjs"}},"gitHead":"13775400597ddc57d08a451eeb88ce995d1ba32f","scripts":{"dev":"tsup --watch","test":"vitest run tests/unit tests/integration","build":"tsup","prepack":"cp ../../README.md .","test:e2e":"vitest run --config vitest.config.e2e.ts","test:unit":"vitest run tests/unit","prepublishOnly":"npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:eda57c33-d596-49fd-bf8b-168c13862b41"}},"repository":{"url":"git+https://github.com/pzuraq/vitest-mobile.git","type":"git"},"_npmVersion":"11.12.1","description":"Run Vitest component tests inside a real React Native app with native touch synthesis","directories":{},"_nodeVersion":"25.9.0","dependencies":{"ws":"^8.18.0","cac":"^6.7.14","glob":"^10.0.0","birpc":"^2.3.0","flatted":"^3.4.2","picomatch":"^4.0.0","signalium":"^2.4.0","picocolors":"^1.1.1","tinyhighlight":"^0.3.2","@clack/prompts":"^1.2.0","@shopify/restyle":"^2.4.4","react-native-safe-area-context":">=4.0.0"},"codegenConfig":{"name":"VitestMobileHarnessSpec","type":"modules","android":{"javaPackageName":"com.vitestmobileharness"},"jsSrcsDir":"src/native"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","vitest":"^4.0.0","@types/ws":"^8.5.13","@types/node":"^25.5.2","@types/react":"^19.2.14","@types/picomatch":"^4.0.0"},"peerDependencies":{"react":">=18","vitest":"^4.0.0","react-native":">=0.81.5","@vitest/utils":"^4.0.0","@vitest/expect":"^4.0.0","@vitest/runner":"^4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/vitest-mobile_0.4.1_1779397339883_0.6351717190479631","host":"s3://npm-registry-packages-npm-production"}},"0.4.2":{"name":"vitest-mobile","version":"0.4.2","keywords":["vitest","react-native","testing","native","component-testing"],"license":"MIT","_id":"vitest-mobile@0.4.2","maintainers":[{"name":"pzuraq","email":"opensource@pzuraq.com"}],"homepage":"https://github.com/pzuraq/vitest-mobile#readme","bugs":{"url":"https://github.com/pzuraq/vitest-mobile/issues"},"bin":{"vitest-mobile":"bin/vitest-mobile.mjs"},"dist":{"shasum":"fab0f36911f8dc1bf32c6462390ba9a6463e8d2f","tarball":"https://registry.npmjs.org/vitest-mobile/-/vitest-mobile-0.4.2.tgz","fileCount":208,"integrity":"sha512-yfNWBII0iWizFFON1mYKczYwiBRoNhGcwd5/UO+TGddJAqC/2fUOVlTCxvYWPLKBhteRWeU5uk09KgLCIDbECw==","signatures":[{"sig":"MEYCIQCRjvx3uQrq6qVYfn4w1u3ptgelWl4b49jUWLDCYFexqAIhAKHHjvSt7Uk9cUqOut5cDFpvN20xD5HKAUslkx8hzIYe","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/vitest-mobile@0.4.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":4348771},"main":"dist/node/index.cjs","type":"module","types":"matchers.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/node/index.d.ts","import":"./dist/node/index.js","require":"./dist/node/index.cjs"},"./runtime":{"types":"./src/runtime/index.ts","default":"./dist/runtime/index.cjs","require":"./dist/runtime/index.cjs","react-native":"./src/runtime/index.ts"},"./vitest-shim":{"types":"./src/runtime/vitest-shim.ts","default":"./dist/runtime/vitest-shim.cjs","require":"./dist/runtime/vitest-shim.cjs","react-native":"./src/runtime/vitest-shim.ts"},"./babel-plugin":{"default":"./dist/babel/test-wrapper-plugin.cjs","require":"./dist/babel/test-wrapper-plugin.cjs"},"./package.json":"./package.json","./test-context":{"types":"./src/runtime/test-context.ts","default":"./dist/runtime/test-context.cjs","require":"./dist/runtime/test-context.cjs","react-native":"./src/runtime/test-context.ts"},"./vitest-compat-plugin":{"default":"./dist/babel/vitest-compat-plugin.cjs","require":"./dist/babel/vitest-compat-plugin.cjs"},"./inline-app-root-plugin":{"default":"./dist/babel/inline-app-root-plugin.cjs","require":"./dist/babel/inline-app-root-plugin.cjs"}},"gitHead":"d0f1b66985c463e7e21132f574a7162628dfe475","scripts":{"dev":"tsup --watch","test":"vitest run tests/unit tests/integration","build":"tsup","prepack":"cp ../../README.md .","test:e2e":"vitest run --config vitest.config.e2e.ts","test:unit":"vitest run tests/unit","prepublishOnly":"npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:eda57c33-d596-49fd-bf8b-168c13862b41"}},"repository":{"url":"git+https://github.com/pzuraq/vitest-mobile.git","type":"git"},"_npmVersion":"11.12.1","description":"Run Vitest component tests inside a real React Native app with native touch synthesis","directories":{},"_nodeVersion":"25.9.0","dependencies":{"ws":"^8.18.0","cac":"^6.7.14","glob":"^10.0.0","birpc":"^2.3.0","flatted":"^3.4.2","picomatch":"^4.0.0","signalium":"^2.4.0","picocolors":"^1.1.1","tinyhighlight":"^0.3.2","@clack/prompts":"^1.2.0","@shopify/restyle":"^2.4.4","react-native-safe-area-context":">=4.0.0"},"codegenConfig":{"name":"VitestMobileHarnessSpec","type":"modules","android":{"javaPackageName":"com.vitestmobileharness"},"jsSrcsDir":"src/native"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","vitest":"^4.0.0","@types/ws":"^8.5.13","@types/node":"^25.5.2","@types/react":"^19.2.14","@types/picomatch":"^4.0.0"},"peerDependencies":{"react":">=18","vitest":"^4.0.0","react-native":">=0.81.5","@vitest/utils":"^4.0.0","@vitest/expect":"^4.0.0","@vitest/runner":"^4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/vitest-mobile_0.4.2_1779414797093_0.21319155584898097","host":"s3://npm-registry-packages-npm-production"}},"0.4.3":{"name":"vitest-mobile","version":"0.4.3","description":"Run Vitest component tests inside a real React Native app with native touch synthesis","license":"MIT","type":"module","repository":{"type":"git","url":"git+https://github.com/pzuraq/vitest-mobile.git"},"exports":{".":{"types":"./dist/node/index.d.ts","import":"./dist/node/index.js","require":"./dist/node/index.cjs"},"./runtime":{"types":"./src/runtime/index.ts","react-native":"./src/runtime/index.ts","require":"./dist/runtime/index.cjs","default":"./dist/runtime/index.cjs"},"./vitest-shim":{"types":"./src/runtime/vitest-shim.ts","react-native":"./src/runtime/vitest-shim.ts","require":"./dist/runtime/vitest-shim.cjs","default":"./dist/runtime/vitest-shim.cjs"},"./babel-plugin":{"require":"./dist/babel/test-wrapper-plugin.cjs","default":"./dist/babel/test-wrapper-plugin.cjs"},"./vitest-compat-plugin":{"require":"./dist/babel/vitest-compat-plugin.cjs","default":"./dist/babel/vitest-compat-plugin.cjs"},"./inline-app-root-plugin":{"require":"./dist/babel/inline-app-root-plugin.cjs","default":"./dist/babel/inline-app-root-plugin.cjs"},"./test-context":{"types":"./src/runtime/test-context.ts","react-native":"./src/runtime/test-context.ts","require":"./dist/runtime/test-context.cjs","default":"./dist/runtime/test-context.cjs"},"./package.json":"./package.json"},"types":"matchers.d.ts","main":"dist/node/index.cjs","bin":{"vitest-mobile":"bin/vitest-mobile.mjs"},"scripts":{"build":"tsup","dev":"tsup --watch","test":"vitest run tests/unit tests/integration","test:unit":"vitest run tests/unit","test:e2e":"vitest run --config vitest.config.e2e.ts","prepublishOnly":"npm run build","prepack":"cp ../../README.md ."},"keywords":["vitest","react-native","testing","native","component-testing"],"engines":{"node":">=18"},"dependencies":{"@clack/prompts":"^1.2.0","@shopify/restyle":"^2.4.4","birpc":"^2.3.0","cac":"^6.7.14","flatted":"^3.4.2","glob":"^10.0.0","picocolors":"^1.1.1","picomatch":"^4.0.0","react-native-safe-area-context":">=4.0.0","signalium":"^2.4.0","tinyhighlight":"^0.3.2","ws":"^8.18.0"},"peerDependencies":{"@vitest/expect":"^4.0.0","@vitest/runner":"^4.0.0","@vitest/utils":"^4.0.0","react":">=18","react-native":">=0.81.5","vitest":"^4.0.0"},"devDependencies":{"@types/node":"^25.5.2","@types/picomatch":"^4.0.0","@types/react":"^19.2.14","@types/ws":"^8.5.13","tsup":"^8.5.1","vitest":"^4.0.0"},"codegenConfig":{"name":"VitestMobileHarnessSpec","type":"modules","jsSrcsDir":"src/native","android":{"javaPackageName":"com.vitestmobileharness"}},"gitHead":"17542e72a90a24b15c0eaf3374996f8ec730aaad","_id":"vitest-mobile@0.4.3","bugs":{"url":"https://github.com/pzuraq/vitest-mobile/issues"},"homepage":"https://github.com/pzuraq/vitest-mobile#readme","_nodeVersion":"25.9.0","_npmVersion":"11.12.1","dist":{"integrity":"sha512-PdpxePeMjdIrCHzb/poR9m1yUeej3ZZrhfekACB/rDKRLn8X64IeRhEb8CNwyiWgAqPgLTV1TOJoT2FKwamNqw==","shasum":"2334b4e684aabaaa50f01152244b16865192a933","tarball":"https://registry.npmjs.org/vitest-mobile/-/vitest-mobile-0.4.3.tgz","fileCount":208,"unpackedSize":4340796,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/vitest-mobile@0.4.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCw4muUMy2bIGVVivhp1awrVfSCvqEfH3CvxzvIAFvidQIhAICWV7MILXFTFAviIFTWExKXs80/BVeJYX14JoNMNqOK"}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:eda57c33-d596-49fd-bf8b-168c13862b41"}},"directories":{},"maintainers":[{"name":"pzuraq","email":"opensource@pzuraq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/vitest-mobile_0.4.3_1779419166280_0.033456307208452385"},"_hasShrinkwrap":false}},"time":{"created":"2026-04-13T16:06:54.048Z","modified":"2026-05-22T03:06:06.778Z","0.0.0":"2026-04-13T16:06:54.285Z","0.1.0":"2026-04-17T17:29:43.569Z","0.1.1":"2026-04-18T03:14:27.045Z","0.2.0":"2026-04-28T18:52:25.262Z","0.2.1":"2026-04-28T22:19:15.958Z","0.2.2":"2026-05-07T00:01:00.111Z","0.3.0":"2026-05-07T18:15:29.114Z","0.3.1":"2026-05-07T23:45:38.999Z","0.4.0":"2026-05-20T21:18:50.123Z","0.4.1":"2026-05-21T21:02:20.075Z","0.4.2":"2026-05-22T01:53:17.371Z","0.4.3":"2026-05-22T03:06:06.492Z"},"bugs":{"url":"https://github.com/pzuraq/vitest-mobile/issues"},"license":"MIT","homepage":"https://github.com/pzuraq/vitest-mobile#readme","keywords":["vitest","react-native","testing","native","component-testing"],"repository":{"type":"git","url":"git+https://github.com/pzuraq/vitest-mobile.git"},"description":"Run Vitest component tests inside a real React Native app with native touch synthesis","maintainers":[{"name":"pzuraq","email":"opensource@pzuraq.com"}],"readme":"# vitest-mobile\n\nRun Vitest component tests inside a real React Native app. Tests execute using real native views and real touch events, not mocked renderers or simulated interactions.\n\n![vitest-mobile demo](./demo.webp)\n\nThe pool boots an emulator/simulator, launches a React Native app, connects over WebSocket, and sends test files to run.\n\n## Table of Contents\n\n- [Prerequisites](#prerequisites)\n- [Quick Start](#quick-start)\n- [Vitest Config](#vitest-config)\n- [Writing Tests](#writing-tests)\n- [Test API Reference](#test-api-reference)\n- [CLI Reference](#cli-reference)\n- [CI/CD](#cicd)\n- [Troubleshooting](#troubleshooting)\n\n## Prerequisites\n\n| Tool         | Version      | Notes                                             |\n| ------------ | ------------ | ------------------------------------------------- |\n| Node.js      | >= 18        | LTS recommended                                   |\n| npm          | >= 9         | Ships with Node 18+                               |\n| Xcode        | >= 15        | iOS only — includes `xcrun simctl`                |\n| Android SDK  | API 35       | Android only — includes `adb`, `avdmanager`       |\n| Java         | 17 (Temurin) | Android only                                      |\n| Vitest       | ^4.0         | Peer dependency                                   |\n| React Native | >= 0.81.5    | New Architecture (Fabric + TurboModules) required |\n\n## Quick Start\n\nInstall the package:\n\n```bash\nnpm install vitest-mobile\n```\n\nCreate a `vitest.config.ts` at the root of your project with the `nativePlugin`:\n\n```typescript\nimport { defineConfig } from 'vitest/config';\nimport { nativePlugin } from 'vitest-mobile';\n\nexport default defineConfig({\n  test: {\n    projects: [\n      {\n        plugins: [nativePlugin({ platform: 'ios' })],\n        test: {\n          name: 'ios',\n          include: ['test-packages/**/tests/**/*.test.tsx'],\n        },\n      },\n      {\n        plugins: [nativePlugin({ platform: 'android' })],\n        test: {\n          name: 'android',\n          include: ['test-packages/**/tests/**/*.test.tsx'],\n        },\n      },\n    ],\n  },\n});\n```\n\nBootstrap the test harness app and run the tests:\n\n```bash\n# Generate, build, and install the test harness app (~5 min first build)\nnpx vitest-mobile bootstrap --platform ios\n\n# Run tests\nnpx vitest run --project ios\n```\n\nFor Android:\n\n```bash\n# Generate, build, and install the test harness app (~5 min first build)\nnpx vitest-mobile bootstrap --platform android\nnpx vitest run --project android\n```\n\n## Writing Tests\n\nTests look like standard Vitest tests, but use `vitest-mobile/runtime` for rendering into real native views:\n\n```tsx\nimport React from 'react';\nimport { describe, it, expect, afterEach } from 'vitest';\nimport { render, cleanup, waitFor } from 'vitest-mobile/runtime';\nimport { CounterModule } from '../CounterModule';\n\nafterEach(async () => {\n  await cleanup();\n});\n\ndescribe('CounterModule', () => {\n  it('renders initial count of zero', async () => {\n    const screen = await render(<CounterModule userId=\"123\" />);\n    await expect.element(screen.getByTestId('count-display')).toHaveText('0');\n  });\n\n  it('increments on press', async () => {\n    const screen = await render(<CounterModule userId=\"123\" />);\n    await screen.getByTestId('increment-btn').tap();\n    await expect.element(screen.getByTestId('count-display')).toHaveText('1');\n  });\n});\n```\n\n## Test API Reference\n\n### Rendering\n\n```typescript\nimport { render, cleanup, waitFor, screenshot, pause } from 'vitest-mobile/runtime';\n```\n\n| Function                         | Description                                                                         |\n| -------------------------------- | ----------------------------------------------------------------------------------- |\n| `render(<Component />)`          | Mount a component into the test container. Returns a `Screen` with locator methods. |\n| `cleanup()`                      | Unmount the rendered component and flush the UI queue.                              |\n| `waitFor(fn, opts?)`             | Retry an assertion until it passes. Default 3s timeout, 50ms interval.              |\n| `pause({ label?, screenshot? })` | Block test execution until resumed.                                                 |\n\n### Screen\n\n| Method                      | Description                                                       |\n| --------------------------- | ----------------------------------------------------------------- |\n| `screen.getByTestId(id)`    | Find element by `testID`. Returns `Locator`. Throws if not found. |\n| `screen.getByText(text)`    | Find element containing text. Returns `Locator`.                  |\n| `screen.getAllByTestId(id)` | Find all matching elements.                                       |\n| `screen.queryByTestId(id)`  | Returns `Locator \\| null` (no throw).                             |\n| `screen.findByTestId(id)`   | Async — waits until element appears.                              |\n| `screen.findByText(text)`   | Async — waits until text appears.                                 |\n| `screen.dumpTree()`         | Returns an indented text representation of the view tree.         |\n| `screen.getTree()`          | Returns a structured `ViewTreeNode` object.                       |\n\n### Locator\n\n| Method                | Description                                           |\n| --------------------- | ----------------------------------------------------- |\n| `locator.tap()`       | Dispatch a real native tap event via the TurboModule. |\n| `locator.longPress()` | Dispatch a real native long press.                    |\n| `locator.type(text)`  | Type text into a focused input via native text input. |\n| `locator.text`        | Current text content (sync, re-queries on access).    |\n| `locator.exists`      | Whether the element is in the tree.                   |\n\n### Custom Matchers\n\n| Matcher                                | Description                       |\n| -------------------------------------- | --------------------------------- |\n| `expect(locator).toBeVisible()`        | Element exists and is not hidden. |\n| `expect(locator).toHaveText('...')`    | Text content matches exactly.     |\n| `expect(locator).toContainText('...')` | Text content contains the string. |\n\nUse `expect.element(locator)` for automatic retrying:\n\n```tsx\nawait expect.element(screen.getByTestId('count')).toHaveText('1');\n```\n\n## CLI Reference\n\nAll commands are run via `npx vitest-mobile <command>`.\n\n### Device & App Lifecycle\n\n```bash\n# Boot a simulator / emulator\nnpx vitest-mobile boot-device --platform ios\nnpx vitest-mobile boot-device --platform android\n\n# Build the native harness binary (~5 min first time, cached after)\nnpx vitest-mobile build --platform ios\nnpx vitest-mobile build --platform android\n\n# Install the built binary onto the device\nnpx vitest-mobile install --platform ios\n\n# Build + install in one step\nnpx vitest-mobile bootstrap --platform ios\nnpx vitest-mobile bootstrap --platform android --headless --api-level 35\n```\n\n### Debugging & Inspection\n\n```bash\n# Evaluate a JS expression in the running app via CDP\nnpx vitest-mobile debug eval \"<expression>\"\n\n# Open the JS debugger\nnpx vitest-mobile debug open\n\n# Take a screenshot of the simulator\nnpx vitest-mobile screenshot --platform ios\n```\n\n### Running Tests\n\n```bash\n# Run all tests on iOS\nnpx vitest run --project ios\n\n# Run all tests on Android\nnpx vitest run --project android\n\n# Watch mode (re-runs on file changes)\nnpx vitest --project ios\n```\n\n### Useful CDP Eval Expressions\n\n```bash\n# Check test file registry\nnpx vitest-mobile debug eval \"JSON.stringify(Object.keys(globalThis.__TEST_FILES__ || {}))\"\n\n# Check if a test module has the babel plugin's __run wrapper\nnpx vitest-mobile debug eval \"(function() { var f = globalThis.__TEST_FILES__; var m = f && f['counter/counter.test.tsx'](); return JSON.stringify({ hasRun: typeof m?.__run, keys: Object.keys(m || {}) }); })()\"\n```\n\n## CI/CD\n\nTo add vitest-mobile E2E tests to your CI pipeline:\n\n#### Android\n\n```yaml\nname: Native Tests (Android)\non: [push, pull_request]\n\njobs:\n  e2e-android:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v4\n      - uses: actions/setup-node@v4\n        with:\n          node-version: 20\n          cache: npm\n      - uses: actions/setup-java@v4\n        with:\n          distribution: temurin\n          java-version: 17\n\n      - run: npm ci\n\n      # Enable KVM for hardware-accelerated Android emulator\n      - name: Enable KVM\n        run: |\n          echo 'KERNEL==\"kvm\", GROUP=\"kvm\", MODE=\"0666\", OPTIONS+=\"static_node=kvm\"' \\\n            | sudo tee /etc/udev/rules.d/99-kvm4all.rules\n          sudo udevadm control --reload-rules\n          sudo udevadm trigger --name-match=kvm\n\n      # Build native binary, boot emulator, install app\n      - run: npx vitest-mobile bootstrap --platform android --headless --api-level 35\n\n      # Pre-build the JS bundle for faster test startup\n      - run: npx vitest-mobile bundle --platform android\n\n      # Run tests\n      - run: npx vitest run --project android\n```\n\n#### iOS\n\n```yaml\nname: Native Tests (iOS)\non: [push, pull_request]\n\njobs:\n  e2e-ios:\n    runs-on: macos-latest\n    steps:\n      - uses: actions/checkout@v4\n      - uses: actions/setup-node@v4\n        with:\n          node-version: 20\n          cache: npm\n\n      - run: npm ci\n      - run: npx vitest-mobile bootstrap --platform ios --headless\n      - run: npx vitest-mobile bundle --platform ios\n      - run: npx vitest run --project ios\n```\n\n#### Adding Build Caching\n\nTo avoid rebuilding the native binary on every CI run, cache the `~/.cache/vitest-mobile` directory. The `cache-key` command generates a deterministic key:\n\n```yaml\n- name: Compute cache key\n  id: cache-key\n  run: echo \"key=android-e2e-$(npx vitest-mobile cache-key --platform android)\" >> \"$GITHUB_OUTPUT\"\n\n- uses: actions/cache/restore@v4\n  with:\n    path: ~/.cache/vitest-mobile\n    key: ${{ steps.cache-key.outputs.key }}\n    restore-keys: android-e2e-\n\n# ... bootstrap + test steps ...\n\n- uses: actions/cache/save@v4\n  with:\n    path: ~/.cache/vitest-mobile\n    key: ${{ steps.cache-key.outputs.key }}\n```\n\nFor Android, also cache the system image to avoid re-downloading:\n\n```yaml\npath: |\n  ~/.cache/vitest-mobile\n  /usr/local/lib/android/sdk/system-images/android-35\n```\n\n## Troubleshooting\n\n### \"Requiring unknown module NNN\"\n\nModule code is not in the bundle. Caused by lazy bundling or missing static dependencies. Try clearing the Metro cache:\n\n```bash\nnpx expo start --dev-client --clear\n```\n\n### \"Vitest failed to find the current suite\"\n\n`describe()`/`it()` called without runner context. The babel plugin should prevent this. Check:\n\n1. Clear Metro cache\n2. Verify the test file is being transformed (check for `exports.__run` in the bundled output)\n\n### App crashes on reload\n\nThe dev client sometimes serves a 1-module bundle. Workaround — terminate and relaunch:\n\n```bash\nxcrun simctl terminate booted com.vitest.mobile.harness\nxcrun simctl launch booted com.vitest.mobile.harness --initialUrl \"http://127.0.0.1:8081\"\n```\n\n### \"No development build installed\"\n\nRebuild the native binary:\n\n```bash\nnpx vitest-mobile bootstrap --platform ios\n```\n\n## License\n\nMIT\n","readmeFilename":"README.md"}