{"_id":"@danieljaurellmevorach/javascript-recipe-starter","_rev":"6-3d915dfa54f25bb052dc69556787f3cb","name":"@danieljaurellmevorach/javascript-recipe-starter","dist-tags":{"latest":"1.0.5"},"versions":{"1.0.0":{"name":"@danieljaurellmevorach/javascript-recipe-starter","version":"1.0.0","keywords":["openrewrite","moderne","recipe","refactoring","javascript","typescript","codemods","ast"],"license":"Apache-2.0","_id":"@danieljaurellmevorach/javascript-recipe-starter@1.0.0","maintainers":[{"name":"danieljaurellmevorach","email":"daniel.jaurellmevorach@student.ucll.be"}],"homepage":"https://docs.openrewrite.org/","bugs":{"url":"https://github.com/moderneinc/javascript-recipe-starter/issues"},"dist":{"shasum":"7c1a6afa3eeba69c25a41fa96ee1503db3177e48","tarball":"https://registry.npmjs.org/@danieljaurellmevorach/javascript-recipe-starter/-/javascript-recipe-starter-1.0.0.tgz","fileCount":31,"integrity":"sha512-/nGUifJA4wK1ji6gd+24mImr1RllMm8Cic3DbZNNtfr1eMC4HxAz+lniuOuPUMl0MOIEEetEAolmTGAXR+n5Qw==","signatures":[{"sig":"MEQCIFXZSQ34wyjjAwkVFnbBQo/GX2zRUTsvABFSKEjcvWr7AiB909eH0tgcsvkD9Q2fi0uwSLurr891I4+hsylB+Wp/jg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":54353},"main":"./dist/index.js","types":"./dist/index.d.ts","gitHead":"d35eff734bf4e1c61f7de48962668e55bcb53c47","scripts":{"test":"npm run build && jest","build":"rimraf ./dist && tsc --build tsconfig.build.json","test:watch":"jest --watch","prepublishOnly":"npm run build"},"_npmUser":{"name":"danieljaurellmevorach","email":"daniel.jaurellmevorach@student.ucll.be"},"overrides":{"glob":"^11.0.0","inflight":"^2.0.0"},"repository":{"url":"git+https://github.com/moderneinc/javascript-recipe-starter.git","type":"git"},"_npmVersion":"10.9.3","description":"Example OpenRewrite JavaScript recipes and tests to help you get started","directories":{},"_nodeVersion":"22.19.0","dependencies":{"@openrewrite/rewrite":"^8.70.4"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","rimraf":"^6.1.0","ts-jest":"^29.2.5","mutative":"^1.2.0","typescript":"^5.7.2","@types/jest":"^29.5.14","@types/node":"^22.9.0","tmp-promise":"^3.0.3","@types/react":"^18.3.0"},"_npmOperationalInternal":{"tmp":"tmp/javascript-recipe-starter_1.0.0_1774269472740_0.46393464855512545","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@danieljaurellmevorach/javascript-recipe-starter","version":"1.0.1","keywords":["openrewrite","moderne","recipe","refactoring","javascript","typescript","codemods","ast"],"license":"Apache-2.0","_id":"@danieljaurellmevorach/javascript-recipe-starter@1.0.1","maintainers":[{"name":"danieljaurellmevorach","email":"daniel.jaurellmevorach@student.ucll.be"}],"homepage":"https://docs.openrewrite.org/","bugs":{"url":"https://github.com/moderneinc/javascript-recipe-starter/issues"},"dist":{"shasum":"c1a911af22ca20fd2d054734618371e8add1532d","tarball":"https://registry.npmjs.org/@danieljaurellmevorach/javascript-recipe-starter/-/javascript-recipe-starter-1.0.1.tgz","fileCount":31,"integrity":"sha512-sC3k9D2Z24hxGT8y6Grz+/0agAIbbWVWphvJmhgFO2RbqQMxffbW9BEP5MXNlfASyoK3RWiOSrdKTEbZFrawCA==","signatures":[{"sig":"MEUCIQDM8PYowtyQ3PzqfE059wNlDkRHpRS7IURwIpigib1HFgIgHSI8Z5mAKobqESBah2bbk86Qlw6TkwHY2FUDa4njdOY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":54353},"main":"./dist/index.js","types":"./dist/index.d.ts","gitHead":"d35eff734bf4e1c61f7de48962668e55bcb53c47","scripts":{"test":"npm run build && jest","build":"rimraf ./dist && tsc --build tsconfig.build.json","test:watch":"jest --watch","prepublishOnly":"npm run build"},"_npmUser":{"name":"danieljaurellmevorach","email":"daniel.jaurellmevorach@student.ucll.be"},"overrides":{"glob":"^11.0.0","inflight":"^2.0.0"},"repository":{"url":"git+https://github.com/moderneinc/javascript-recipe-starter.git","type":"git"},"_npmVersion":"10.9.3","description":"Example OpenRewrite JavaScript recipes and tests to help you get started","directories":{},"_nodeVersion":"22.19.0","dependencies":{"@openrewrite/rewrite":"^8.70.4"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","rimraf":"^6.1.0","ts-jest":"^29.2.5","mutative":"^1.2.0","typescript":"^5.7.2","@types/jest":"^29.5.14","@types/node":"^22.9.0","tmp-promise":"^3.0.3","@types/react":"^18.3.0"},"_npmOperationalInternal":{"tmp":"tmp/javascript-recipe-starter_1.0.1_1774269679352_0.23645407923086736","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@danieljaurellmevorach/javascript-recipe-starter","version":"1.0.2","keywords":["openrewrite","moderne","recipe","refactoring","javascript","typescript","codemods","ast"],"license":"Apache-2.0","_id":"@danieljaurellmevorach/javascript-recipe-starter@1.0.2","maintainers":[{"name":"danieljaurellmevorach","email":"daniel.jaurellmevorach@student.ucll.be"}],"homepage":"https://docs.openrewrite.org/","bugs":{"url":"https://github.com/moderneinc/javascript-recipe-starter/issues"},"dist":{"shasum":"c8cf75ddfcf9ac197558122fdfdcb71fae3d8b6c","tarball":"https://registry.npmjs.org/@danieljaurellmevorach/javascript-recipe-starter/-/javascript-recipe-starter-1.0.2.tgz","fileCount":31,"integrity":"sha512-I0rV1m943/xiYGqBnN0V+tVd4uOvARebO8OONHQ5EQFqdBaVMVcqmasouVaj2BGI9qliBorhVQHFiYtNOYuxfA==","signatures":[{"sig":"MEUCICKpErn6wDMfc/I9ofMzF0e8CyRx+nTHmyYMvvV0vapaAiEA+HWfGKEscc0nfHhzw10Aa9YDR3TBdQZCvWENlY/JVgw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":54372},"main":"./dist/index.js","types":"./dist/index.d.ts","gitHead":"d35eff734bf4e1c61f7de48962668e55bcb53c47","scripts":{"test":"npm run build && jest","build":"rimraf ./dist && tsc --build tsconfig.build.json","test:watch":"jest --watch","prepublishOnly":"npm run build"},"_npmUser":{"name":"danieljaurellmevorach","email":"daniel.jaurellmevorach@student.ucll.be"},"overrides":{"glob":"^11.0.0","inflight":"^2.0.0"},"repository":{"url":"git+https://github.com/moderneinc/javascript-recipe-starter.git","type":"git"},"_npmVersion":"10.9.3","description":"Example OpenRewrite JavaScript recipes and tests to help you get started","directories":{},"_nodeVersion":"22.19.0","dependencies":{"@openrewrite/rewrite":"^8.70.4"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","rimraf":"^6.1.0","ts-jest":"^29.2.5","mutative":"^1.2.0","typescript":"^5.7.2","@types/jest":"^29.5.14","@types/node":"^22.9.0","tmp-promise":"^3.0.3","@types/react":"^18.3.0"},"_npmOperationalInternal":{"tmp":"tmp/javascript-recipe-starter_1.0.2_1774277160776_0.6978243125499985","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"@danieljaurellmevorach/javascript-recipe-starter","version":"1.0.3","keywords":["openrewrite","moderne","recipe","refactoring","javascript","typescript","codemods","ast"],"license":"Apache-2.0","_id":"@danieljaurellmevorach/javascript-recipe-starter@1.0.3","maintainers":[{"name":"danieljaurellmevorach","email":"daniel.jaurellmevorach@student.ucll.be"}],"homepage":"https://docs.openrewrite.org/","bugs":{"url":"https://github.com/moderneinc/javascript-recipe-starter/issues"},"dist":{"shasum":"c5c8286b4ea0a167f569545bfbfb4805ba88c6fa","tarball":"https://registry.npmjs.org/@danieljaurellmevorach/javascript-recipe-starter/-/javascript-recipe-starter-1.0.3.tgz","fileCount":31,"integrity":"sha512-4aPYeBlAxkz/WxJFHObOxV9atx6kRY4e2nNNE0LIy/WMtsz9ABOCuTvdgD4BfeKdw40sqogzPzgcuUQ6fTv4UA==","signatures":[{"sig":"MEUCICQwP79sAxC3mJjvoZ8XsZkVLGmzDFjBeM2li89CB4KSAiEA3HW6yGIlqRePR6gmgkHN9bwI8SQYvOFoINLmQjkpEoU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":54355},"main":"./dist/index.js","types":"./dist/index.d.ts","gitHead":"d35eff734bf4e1c61f7de48962668e55bcb53c47","scripts":{"test":"npm run build && jest","build":"rimraf ./dist && tsc --build tsconfig.build.json","test:watch":"jest --watch","prepublishOnly":"npm run build"},"_npmUser":{"name":"danieljaurellmevorach","email":"daniel.jaurellmevorach@student.ucll.be"},"overrides":{"glob":"^11.0.0","inflight":"^2.0.0"},"repository":{"url":"git+https://github.com/moderneinc/javascript-recipe-starter.git","type":"git"},"_npmVersion":"10.9.3","description":"Example OpenRewrite JavaScript recipes and tests to help you get started","directories":{},"_nodeVersion":"22.19.0","dependencies":{"@openrewrite/rewrite":"^8.70.4"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","rimraf":"^6.1.0","ts-jest":"^29.2.5","mutative":"^1.2.0","typescript":"^5.7.2","@types/jest":"^29.5.14","@types/node":"^22.9.0","tmp-promise":"^3.0.3","@types/react":"^18.3.0"},"_npmOperationalInternal":{"tmp":"tmp/javascript-recipe-starter_1.0.3_1774279055740_0.40477552089091895","host":"s3://npm-registry-packages-npm-production"}},"1.0.4":{"name":"@danieljaurellmevorach/javascript-recipe-starter","version":"1.0.4","keywords":["openrewrite","moderne","recipe","refactoring","javascript","typescript","codemods","ast"],"license":"Apache-2.0","_id":"@danieljaurellmevorach/javascript-recipe-starter@1.0.4","maintainers":[{"name":"danieljaurellmevorach","email":"daniel.jaurellmevorach@student.ucll.be"}],"homepage":"https://docs.openrewrite.org/","bugs":{"url":"https://github.com/moderneinc/javascript-recipe-starter/issues"},"dist":{"shasum":"86441b45d6aa620305d3235af74754c1a393471b","tarball":"https://registry.npmjs.org/@danieljaurellmevorach/javascript-recipe-starter/-/javascript-recipe-starter-1.0.4.tgz","fileCount":31,"integrity":"sha512-AqPQkn2k8UXjdRI0ty2g7n2++u+lMCFeRhV84DIL/idxacpQGcpZZ4cPD9xbWnWd7h46sE5aE6QOObbVLzxIcw==","signatures":[{"sig":"MEQCIEe/KC2fLO0WsckzUTWni3uewraiZ1qlaTfV+OUidy4xAiBm5aT7HdrV/BoZAFHh5GUGserU6adtrBI160JN/tAo3w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":55328},"main":"./dist/index.js","types":"./dist/index.d.ts","gitHead":"d35eff734bf4e1c61f7de48962668e55bcb53c47","scripts":{"test":"npm run build && jest","build":"rimraf ./dist && tsc --build tsconfig.build.json","test:watch":"jest --watch","prepublishOnly":"npm run build"},"_npmUser":{"name":"danieljaurellmevorach","email":"daniel.jaurellmevorach@student.ucll.be"},"overrides":{"glob":"^11.0.0","inflight":"^2.0.0"},"repository":{"url":"git+https://github.com/moderneinc/javascript-recipe-starter.git","type":"git"},"_npmVersion":"10.9.3","description":"Example OpenRewrite JavaScript recipes and tests to help you get started","directories":{},"_nodeVersion":"22.19.0","dependencies":{"@openrewrite/rewrite":"^8.70.4"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","rimraf":"^6.1.0","ts-jest":"^29.2.5","mutative":"^1.2.0","typescript":"^5.7.2","@types/jest":"^29.5.14","@types/node":"^22.9.0","tmp-promise":"^3.0.3","@types/react":"^18.3.0"},"_npmOperationalInternal":{"tmp":"tmp/javascript-recipe-starter_1.0.4_1774280038728_0.7308008342832115","host":"s3://npm-registry-packages-npm-production"}},"1.0.5":{"name":"@danieljaurellmevorach/javascript-recipe-starter","version":"1.0.5","description":"Example OpenRewrite JavaScript recipes and tests to help you get started","main":"./dist/index.js","types":"./dist/index.d.ts","license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/moderneinc/javascript-recipe-starter.git"},"keywords":["openrewrite","moderne","recipe","refactoring","javascript","typescript","codemods","ast"],"bugs":{"url":"https://github.com/moderneinc/javascript-recipe-starter/issues"},"homepage":"https://docs.openrewrite.org/","scripts":{"build":"rimraf ./dist && tsc --build tsconfig.build.json","test":"npm run build && jest","test:watch":"jest --watch","prepublishOnly":"npm run build"},"dependencies":{"@openrewrite/rewrite":"^8.70.4"},"devDependencies":{"@types/jest":"^29.5.14","@types/node":"^22.9.0","@types/react":"^18.3.0","mutative":"^1.2.0","jest":"^29.7.0","rimraf":"^6.1.0","tmp-promise":"^3.0.3","ts-jest":"^29.2.5","typescript":"^5.7.2"},"overrides":{"glob":"^11.0.0","inflight":"^2.0.0"},"_id":"@danieljaurellmevorach/javascript-recipe-starter@1.0.5","gitHead":"d35eff734bf4e1c61f7de48962668e55bcb53c47","_nodeVersion":"22.19.0","_npmVersion":"10.9.3","dist":{"integrity":"sha512-KZ22eW7ZV/1WY+UDKAXQSI9ftRmeXKygwoZjD+9Msx9O36UCROSZXquo7lH0KnbhRf/QAgxVt/Iw2eCT58VShg==","shasum":"1ab3f26c730dbf49ca274ab788257c65114bbb40","tarball":"https://registry.npmjs.org/@danieljaurellmevorach/javascript-recipe-starter/-/javascript-recipe-starter-1.0.5.tgz","fileCount":35,"unpackedSize":104597,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQC20ceahXnIPC22wCjXT5I2r4SuDSEza6JpsEEGWueSlwIhAKTxr7Jb2llliDRQQTIg2P0w4LqEGAHcO6tI3c0fKVkM"}]},"_npmUser":{"name":"danieljaurellmevorach","email":"daniel.jaurellmevorach@student.ucll.be"},"directories":{},"maintainers":[{"name":"danieljaurellmevorach","email":"daniel.jaurellmevorach@student.ucll.be"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/javascript-recipe-starter_1.0.5_1774336782700_0.6618614057548833"},"_hasShrinkwrap":false}},"time":{"created":"2026-03-23T12:37:52.676Z","modified":"2026-03-24T07:19:42.954Z","1.0.0":"2026-03-23T12:37:52.878Z","1.0.1":"2026-03-23T12:41:19.572Z","1.0.2":"2026-03-23T14:46:00.933Z","1.0.3":"2026-03-23T15:17:35.889Z","1.0.4":"2026-03-23T15:33:58.869Z","1.0.5":"2026-03-24T07:19:42.830Z"},"bugs":{"url":"https://github.com/moderneinc/javascript-recipe-starter/issues"},"license":"Apache-2.0","homepage":"https://docs.openrewrite.org/","keywords":["openrewrite","moderne","recipe","refactoring","javascript","typescript","codemods","ast"],"repository":{"type":"git","url":"git+https://github.com/moderneinc/javascript-recipe-starter.git"},"description":"Example OpenRewrite JavaScript recipes and tests to help you get started","maintainers":[{"name":"danieljaurellmevorach","email":"daniel.jaurellmevorach@student.ucll.be"}],"readme":"# JavaScript Recipe Starter\n\nA starter repository for learning how to create [OpenRewrite](https://github.com/openrewrite/rewrite) recipes for JavaScript and TypeScript. This repo includes example recipes with comprehensive tests, demonstrating the full project setup you need to author and test your own recipes.\n\n## Getting started\n\nNew to OpenRewrite JavaScript recipe development? Start by checking out the [OpenRewrite documentation](https://docs.openrewrite.org/) and our [JavaScript LST examples doc](https://docs.openrewrite.org/concepts-and-explanations/javascript-lst-examples).\n\n## Quick start\n\nClone this repository and install dependencies:\n\n```bash\ngit clone git@github.com:moderneinc/javascript-recipe-starter.git\ncd javascript-recipe-starter\nnpm install\n```\n\nRun the tests:\n\n```bash\nnpm test\n```\n\n## Example recipes\n\nThis repository includes example recipes that demonstrate different authoring approaches and OpenRewrite capabilities:\n\n### Transformation recipes\n\n- **[MigrateUtilFunctions](./src/migrate-util-functions.ts)** - Replaces deprecated Node.js `util` type checking methods (like `util.isArray()`) with native JavaScript equivalents (like `Array.isArray()`). Demonstrates pattern-based, declarative recipe authoring using `pattern` and `rewrite()` rules with type context.\n\n- **[SayHelloRecipe](./src/say-hello-recipe.ts)** - Adds a `hello()` method to JavaScript/TypeScript classes that don't already have one. Demonstrates visitor-based recipe authoring with manual LST manipulation and the template API.\n\n- **[SemanticForwardRefMigration](./src/semantic-matching.ts)** - Wraps React `forwardRef()` calls with `memo()` for better performance. Demonstrates **semantic type matching** that works across different import styles (named, namespace, default, and aliased imports). Shows how one pattern with type context can match syntactically different but semantically equivalent code.\n\n### Search recipes\n\n- **[FindMethodCalls](./src/find-method-calls.ts)** - Finds and records all calls to a specified method name in a data table. Demonstrates **search recipes** that collect findings without modifying code, useful for impact analysis before migrations. Shows the `@Option` decorator for configurable recipes and `@Column` for data table structure. Results can be exported to CSV.\n\n## Project structure\n\n```\njavascript-recipe-starter/\n├── src/\n│   ├── migrate-util-functions.ts\n│   ├── say-hello-recipe.ts\n│   ├── semantic-matching.ts\n│   ├── find-method-calls.ts\n│   └── index.ts\n├── test/\n│   ├── migrate-util-functions.test.ts\n│   ├── say-hello-recipe.test.ts\n│   ├── semantic-matching.test.ts\n│   └── find-method-calls.test.ts\n├── package.json\n├── tsconfig.json\n└── jest.config.js\n```\n\n## Running your recipes\n\nTo run these recipes against your own JavaScript/TypeScript codebase, you'll need to use the [Moderne CLI](https://docs.moderne.io/user-documentation/moderne-cli/getting-started/cli-intro) and [configure it to use JavaScript LSTs](https://docs.moderne.io/user-documentation/moderne-cli/how-to-guides/javascript):\n\n```bash\nmod run . --recipe=MigrateUtilFunctions\n```\n\n## License\n\nSee [LICENSE](./LICENSE) file for details.\n","readmeFilename":"README.md"}