{"_id":"@amplitude/babel-plugin-autocapture-transformer","_rev":"2-db3dfe09a8600430ac25f2913ccf9dbd","name":"@amplitude/babel-plugin-autocapture-transformer","dist-tags":{"alpha":"0.0.1","latest":"0.1.1"},"versions":{"0.0.1":{"name":"@amplitude/babel-plugin-autocapture-transformer","version":"0.0.1","_id":"@amplitude/babel-plugin-autocapture-transformer@0.0.1","maintainers":[{"name":"curtisbliu","email":"curtis@amplitude.com"},{"name":"kelson.warner","email":"kelson.warner@amplitude.com"},{"name":"sdk.dev","email":"sdk.dev@amplitude.com"},{"name":"eric_amplitude","email":"eric.kim@amplitude.com"},{"name":"daniel-graham-amplitude","email":"daniel.graham@amplitude.com"},{"name":"jjwang123","email":"jesse.wang@amplitude.com"}],"dist":{"shasum":"6a62c8fb835c90b484b68b18e4c6f02ffef48125","tarball":"https://registry.npmjs.org/@amplitude/babel-plugin-autocapture-transformer/-/babel-plugin-autocapture-transformer-0.0.1.tgz","fileCount":1,"integrity":"sha512-AqvnaXLbSkDyzvIEedn+oa4/H5nFFcM5t4xJBdOLtTw49m4HSKMaJlpdW8l8pxLuDi/Ml0TmSFV8DfRiKomQog==","signatures":[{"sig":"MEUCIQDhx35QRlvrDoviKBl1iRKZ7rcVuk8MBu/UeDRTsWzB1QIgPMS1+T1yEBcUCWCEbkj6XS+uI42FnfH/fFrfqGfXS4U=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":239},"private":false,"_npmUser":{"name":"sdk.dev","email":"sdk.dev@amplitude.com"},"_npmVersion":"10.9.2","description":"Bootstrap placeholder for Trusted Publishing setup. Do not use.","directories":{},"_nodeVersion":"22.14.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/babel-plugin-autocapture-transformer_0.0.1_1784328987233_0.7809905189051733","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@amplitude/babel-plugin-autocapture-transformer","version":"0.1.1","description":"Babel plugin that transforms JSX for Amplitude autocapture at compile time.","author":{"name":"Amplitude Inc"},"homepage":"https://github.com/amplitude/Amplitude-TypeScript","license":"MIT","main":"lib/cjs/index.js","module":"lib/esm/index.js","types":"lib/esm/index.d.ts","sideEffects":false,"publishConfig":{"access":"public","tag":"beta"},"repository":{"type":"git","url":"git+https://github.com/amplitude/Amplitude-TypeScript.git"},"bugs":{"url":"https://github.com/amplitude/Amplitude-TypeScript/issues"},"peerDependencies":{"@babel/core":"^7.0.0"},"dependencies":{"tslib":"^2.4.1"},"devDependencies":{"@babel/core":"^7.24.7","@babel/parser":"^7.24.7","@babel/plugin-syntax-jsx":"^7.24.7","@babel/preset-react":"^7.24.7","@babel/preset-typescript":"^7.24.7","@types/babel__core":"^7.20.5","@types/babel__traverse":"^7.20.7"},"scripts":{"build":"pnpm build:es5 & pnpm build:esm","build:es5":"tsc -p ./tsconfig.es5.json","build:esm":"tsc -p ./tsconfig.esm.json","watch":"tsc -p ./tsconfig.esm.json --watch","clean":"rimraf node_modules lib coverage","fix":"pnpm fix:eslint & pnpm fix:prettier","fix:eslint":"eslint '{src,test}/**/*.ts' --fix","fix:prettier":"prettier --write \"{src,test}/**/*.ts\"","lint":"pnpm lint:eslint & pnpm lint:prettier","lint:eslint":"eslint '{src,test}/**/*.ts'","lint:prettier":"prettier --check \"{src,test}/**/*.ts\"","test":"jest","typecheck":"tsc -p ./tsconfig.json"},"_id":"@amplitude/babel-plugin-autocapture-transformer@0.1.1","_integrity":"sha512-rCrvYpZ170noIqmNxR/T2Z3D1yZ1k7hbw+IK1w7A9PeoS2hWfKfraJdH81YstGRAXZ4oXkkh20gbe30PR5Q+LQ==","_resolved":"/tmp/679ce725e88d4399a227ad4ff3edaf50/amplitude-babel-plugin-autocapture-transformer-0.1.1.tgz","_from":"file:amplitude-babel-plugin-autocapture-transformer-0.1.1.tgz","_nodeVersion":"24.18.0","_npmVersion":"11.16.0","dist":{"integrity":"sha512-rCrvYpZ170noIqmNxR/T2Z3D1yZ1k7hbw+IK1w7A9PeoS2hWfKfraJdH81YstGRAXZ4oXkkh20gbe30PR5Q+LQ==","shasum":"70af1e7d5ced56f59f8b0553b026d3ff453a76d8","tarball":"https://registry.npmjs.org/@amplitude/babel-plugin-autocapture-transformer/-/babel-plugin-autocapture-transformer-0.1.1.tgz","fileCount":19,"unpackedSize":86002,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@amplitude%2fbabel-plugin-autocapture-transformer@0.1.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDa1yp+cQrKCdRJjo1mDrlFNRVGXLuX6L0M/0mTtSnbdgIgDe1YNeg3z/RFGGeqpJ9CP3QQEK5A2F3COUNlW56+cdM="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:4a36b8f2-ab54-4160-98ae-3fe2ca770144"}},"directories":{},"maintainers":[{"name":"curtisbliu","email":"curtis@amplitude.com"},{"name":"kelson.warner","email":"kelson.warner@amplitude.com"},{"name":"sdk.dev","email":"sdk.dev@amplitude.com"},{"name":"eric_amplitude","email":"eric.kim@amplitude.com"},{"name":"daniel-graham-amplitude","email":"daniel.graham@amplitude.com"},{"name":"jjwang123","email":"jesse.wang@amplitude.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/babel-plugin-autocapture-transformer_0.1.1_1785260255828_0.7780427512873622"},"_hasShrinkwrap":false}},"time":{"created":"2026-07-17T22:56:26.974Z","modified":"2026-07-28T17:37:36.500Z","0.0.1":"2026-07-17T22:56:27.353Z","0.1.1":"2026-07-28T17:37:35.970Z"},"description":"Babel plugin that transforms JSX for Amplitude autocapture at compile time.","maintainers":[{"name":"curtisbliu","email":"curtis@amplitude.com"},{"name":"kelson.warner","email":"kelson.warner@amplitude.com"},{"name":"sdk.dev","email":"sdk.dev@amplitude.com"},{"name":"eric_amplitude","email":"eric.kim@amplitude.com"},{"name":"daniel-graham-amplitude","email":"daniel.graham@amplitude.com"},{"name":"jjwang123","email":"jesse.wang@amplitude.com"}],"readme":"# @amplitude/babel-plugin-autocapture-transformer\n\nA Babel plugin that wraps React Native interaction handlers with Amplitude's `ampCapture` helper at compile time, so element clicks and other UI events can be autocaptured without changing your source JSX by hand.\n\n## Install\n\n```sh\nnpm install --save-dev @amplitude/babel-plugin-autocapture-transformer\n```\n\nThis plugin expects `@amplitude/analytics-react-native` to be installed in your app (it auto-imports `ampCapture` from that package).\n\n## Example\n\n**In**\n\n```jsx\nfunction HomeScreen() {\n  return (\n    <Button\n      accessibilityLabel=\"Online test label\"\n      testID=\"12345\"\n      title=\"Online test\"\n      onPress={func}\n    />\n  );\n}\n```\n\n**Out**\n\n```jsx\nimport { ampCapture } from '@amplitude/analytics-react-native';\n\nfunction HomeScreen() {\n  return (\n    <Button\n      accessibilityLabel=\"Online test label\"\n      testID=\"12345\"\n      title=\"Online test\"\n      onPress={ampCapture(func, {\n        action: 'Press',\n        accessibilityLabel: 'Online test label',\n        testID: '12345',\n        element: 'Button',\n        component: 'HomeScreen',\n      })}\n    />\n  );\n}\n```\n\nWhen a file already imports from `@amplitude/analytics-react-native`, the plugin adds `ampCapture` to that import instead of inserting a second one.\n\n## Usage\n\n### `.babelrc` / `babel.config.json`\n\n```json\n{\n  \"plugins\": [\"@amplitude/babel-plugin-autocapture-transformer\"]\n}\n```\n\n### `babel.config.js` (Expo / React Native)\n\n```js\nmodule.exports = function (api) {\n  api.cache(true);\n  return {\n    presets: ['babel-preset-expo'],\n    plugins: ['@amplitude/babel-plugin-autocapture-transformer'],\n  };\n};\n```\n\n### With options\n\n```json\n{\n  \"plugins\": [\n    [\n      \"@amplitude/babel-plugin-autocapture-transformer\",\n      {\n        \"pressableElements\": [\"CustomButton\"],\n        \"valueChangeElements\": [\"Toggle\"],\n        \"textChangeElements\": [\"SearchField\"]\n      }\n    ]\n  ]\n}\n```\n\n## What gets transformed\n\nThe plugin only rewrites known interactive JSX elements that already have an expression handler (for example `onPress={handler}`). String handlers and elements without handlers are left alone.\n\n| Category | Default elements | Attributes → action |\n| --- | --- | --- |\n| Pressable | `Button`, `TouchableOpacity`, `TouchableHighlight`, `TouchableWithoutFeedback`, `Pressable`, `Touchable`, `TouchableNativeFeedback`, `Link` | `onPress` → `Press`, `onLongPress` → `LongPress` |\n| Value change | `Switch`, `Slider`, `Picker` | `onValueChange` → `ValueChange` |\n| Text change | `TextInput` | `onChangeText` → `ChangeText`, `onSubmitEditing` → `SubmitEditing` |\n\nIf the element also has `accessibilityLabel` and/or `testID`, those values are copied into the `ampCapture` properties object. The plugin also adds:\n\n- `element` — the JSX tag name (for example `Button`)\n- `component` — the enclosing React component or function name when it can be resolved (for example `HomeScreen`)\n\n## Options\n\n| Name | Type | Default | Description |\n| --- | --- | --- | --- |\n| `pressableElements` | `string[]` | `[]` | Additional JSX component names treated as pressable (`onPress` / `onLongPress`). Merged with the built-in defaults. |\n| `valueChangeElements` | `string[]` | `[]` | Additional JSX component names treated as value-change elements (`onValueChange`). Merged with the built-in defaults. |\n| `textChangeElements` | `string[]` | `[]` | Additional JSX component names treated as text-change elements (`onChangeText` / `onSubmitEditing`). Merged with the built-in defaults. |\n\n## Limitations\n\n- Only plain JSX identifiers are transformed (`<Button />`). Member expressions like `<RN.Button />` are ignored and need to be included in the options array.\n- Custom components are not transformed unless you list them in the matching options array.\n- Spread attributes (for example `{...props}`) are not inspected for `accessibilityLabel` / `testID`; only attributes written directly on the element are collected.\n- `component` is omitted when the enclosing function is anonymous (for example `export default () => …`).\n\n## License\n\nMIT\n","readmeFilename":"README.md","homepage":"https://github.com/amplitude/Amplitude-TypeScript","repository":{"type":"git","url":"git+https://github.com/amplitude/Amplitude-TypeScript.git"},"author":{"name":"Amplitude Inc"},"bugs":{"url":"https://github.com/amplitude/Amplitude-TypeScript/issues"},"license":"MIT"}