create-disposabl-app 0.0.4 → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +490 -105
- package/dist/templates/default/LICENSE +21 -0
- package/dist/templates/default/apps/blog/package.json +1 -0
- package/dist/templates/default/apps/changelog/package.json +1 -0
- package/dist/templates/default/apps/desktop/.oxfmtrc.json +5 -0
- package/dist/templates/default/apps/desktop/.oxlintrc.json +6 -0
- package/dist/templates/default/apps/desktop/README.md +58 -0
- package/dist/templates/default/apps/desktop/forge.config.mts +90 -0
- package/dist/templates/default/apps/desktop/index.html +12 -0
- package/dist/templates/default/apps/desktop/package.json +55 -0
- package/dist/templates/default/apps/desktop/src/declarations.d.ts +2 -0
- package/dist/templates/default/apps/desktop/src/index.css +8 -0
- package/dist/templates/default/apps/desktop/src/main.ts +58 -0
- package/dist/templates/default/apps/desktop/src/preload.ts +3 -0
- package/dist/templates/default/apps/desktop/src/renderer.ts +19 -0
- package/dist/templates/default/apps/desktop/tsconfig.json +14 -0
- package/dist/templates/default/apps/desktop/vite.main.config.mts +4 -0
- package/dist/templates/default/apps/desktop/vite.preload.config.mts +4 -0
- package/dist/templates/default/apps/desktop/vite.renderer.config.mts +4 -0
- package/dist/templates/default/apps/docs/package.json +1 -0
- package/dist/templates/default/apps/mobile/.agents/skills/agent-device/SKILL.md +22 -0
- package/dist/templates/default/apps/mobile/.agents/skills/android-emulator/SKILL.md +32 -0
- package/dist/templates/default/apps/mobile/.agents/skills/dogfood/SKILL.md +27 -0
- package/dist/templates/default/apps/mobile/.agents/skills/eas-app-stores/SKILL.md +176 -0
- package/dist/templates/default/apps/mobile/.agents/skills/eas-app-stores/agents/openai.yaml +4 -0
- package/dist/templates/default/apps/mobile/.agents/skills/eas-app-stores/references/app-store-metadata.md +497 -0
- package/dist/templates/default/apps/mobile/.agents/skills/eas-app-stores/references/ios-app-store.md +376 -0
- package/dist/templates/default/apps/mobile/.agents/skills/eas-app-stores/references/native-ios.md +167 -0
- package/dist/templates/default/apps/mobile/.agents/skills/eas-app-stores/references/play-store.md +244 -0
- package/dist/templates/default/apps/mobile/.agents/skills/eas-app-stores/references/testflight.md +62 -0
- package/dist/templates/default/apps/mobile/.agents/skills/eas-app-stores/references/workflows.md +120 -0
- package/dist/templates/default/apps/mobile/.agents/skills/eas-hosting/SKILL.md +431 -0
- package/dist/templates/default/apps/mobile/.agents/skills/eas-hosting/agents/openai.yaml +4 -0
- package/dist/templates/default/apps/mobile/.agents/skills/eas-observe/SKILL.md +46 -0
- package/dist/templates/default/apps/mobile/.agents/skills/eas-observe/agents/openai.yaml +4 -0
- package/dist/templates/default/apps/mobile/.agents/skills/eas-observe/references/metrics.md +98 -0
- package/dist/templates/default/apps/mobile/.agents/skills/eas-observe/references/queries.md +444 -0
- package/dist/templates/default/apps/mobile/.agents/skills/eas-observe/references/setup.md +529 -0
- package/dist/templates/default/apps/mobile/.agents/skills/eas-observe/references/third-party.md +136 -0
- package/dist/templates/default/apps/mobile/.agents/skills/eas-simulator/SKILL.md +237 -0
- package/dist/templates/default/apps/mobile/.agents/skills/eas-simulator/agents/openai.yaml +4 -0
- package/dist/templates/default/apps/mobile/.agents/skills/eas-simulator/references/controllers.md +139 -0
- package/dist/templates/default/apps/mobile/.agents/skills/eas-simulator/references/logs-and-crashes.md +101 -0
- package/dist/templates/default/apps/mobile/.agents/skills/eas-simulator/references/run-your-app.md +256 -0
- package/dist/templates/default/apps/mobile/.agents/skills/eas-simulator/references/troubleshooting.md +56 -0
- package/dist/templates/default/apps/mobile/.agents/skills/eas-update/SKILL.md +146 -0
- package/dist/templates/default/apps/mobile/.agents/skills/eas-update/agents/openai.yaml +4 -0
- package/dist/templates/default/apps/mobile/.agents/skills/eas-update-insights/SKILL.md +238 -0
- package/dist/templates/default/apps/mobile/.agents/skills/eas-update-insights/agents/openai.yaml +4 -0
- package/dist/templates/default/apps/mobile/.agents/skills/eas-update-insights/references/channel-insights-schema.md +47 -0
- package/dist/templates/default/apps/mobile/.agents/skills/eas-update-insights/references/update-insights-schema.md +69 -0
- package/dist/templates/default/apps/mobile/.agents/skills/eas-workflows/SKILL.md +99 -0
- package/dist/templates/default/apps/mobile/.agents/skills/eas-workflows/agents/openai.yaml +4 -0
- package/dist/templates/default/apps/mobile/.agents/skills/eas-workflows/scripts/fetch.js +109 -0
- package/dist/templates/default/apps/mobile/.agents/skills/eas-workflows/scripts/package.json +6 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-animation/LICENSE +21 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-animation/RECIPES.md +385 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-animation/SKILL.md +274 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-animation/agents/openai.yaml +4 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-app-clip/SKILL.md +290 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-app-clip/agents/openai.yaml +4 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-app-clip/references/native-module.md +96 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-brownfield/SKILL.md +69 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-brownfield/agents/openai.yaml +4 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-brownfield/references/brownfield-integrated.md +551 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-brownfield/references/brownfield-isolated.md +449 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-brownfield/references/comparison.md +63 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-brownfield/references/feature-integration.md +163 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-brownfield/references/troubleshooting.md +88 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-brownfield/references/version-compatibility.md +40 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-data-fetching/SKILL.md +478 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-data-fetching/agents/openai.yaml +4 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-data-fetching/references/expo-router-loaders.md +341 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-data-fetching/references/offline-and-cancellation.md +68 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-design-system/SKILL.md +376 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-design-system/agents/openai.yaml +4 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-design-system/references/audit.md +190 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-design-system/references/native-slop.md +74 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-dev-client/SKILL.md +184 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-dev-client/agents/openai.yaml +4 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-dom/SKILL.md +425 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-dom/agents/openai.yaml +4 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-examples/SKILL.md +106 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-examples/agents/openai.yaml +4 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-examples/references/catalog.md +105 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-migrate-module/SKILL.md +124 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-migrate-module/agents/openai.yaml +4 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-migrate-module/references/compatibility.md +130 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-migrate-module/references/example.md +212 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-migrate-module/references/migration-map.md +457 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-module/SKILL.md +151 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-module/agents/openai.yaml +4 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-module/references/config-plugin.md +90 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-module/references/create-expo-module.md +206 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-module/references/lifecycle.md +127 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-module/references/module-config.md +48 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-module/references/native-module.md +286 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-module/references/native-view.md +171 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-native-ui/SKILL.md +201 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-native-ui/agents/openai.yaml +4 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-native-ui/references/controls.md +231 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-native-ui/references/gradients.md +106 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-native-ui/references/icons.md +232 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-native-ui/references/media.md +193 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-native-ui/references/storage.md +121 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-native-ui/references/visual-effects.md +198 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-native-ui/references/webgpu-three.md +605 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-overview/SKILL.md +120 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-overview/agents/openai.yaml +4 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-overview/references/launch-without-dev-menu.md +24 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-project-structure/SKILL.md +114 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-project-structure/agents/openai.yaml +4 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-router/SKILL.md +240 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-router/agents/openai.yaml +4 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-router/references/form-sheet.md +253 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-router/references/route-structure.md +229 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-router/references/search.md +248 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-router/references/tabs.md +433 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-router/references/toolbar-and-headers.md +284 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-router/references/zoom-transitions.md +158 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-skill-eval/SKILL.md +314 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-skill-eval/agents/visual-grader.md +52 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-skill-eval/references/design-rubric.md +45 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-skill-eval/references/runtime-matrix.md +34 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-skill-eval/scripts/check-static.sh +64 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-skill-eval/scripts/clean-fixture.sh +56 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-skill-eval/scripts/generate_viewer.py +450 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-skill-eval/scripts/latest-sdk.sh +46 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-skill-eval/scripts/make-fixture.sh +95 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-skill-eval/scripts/make-workspace.sh +31 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-skill-eval/scripts/snapshot-android.sh +284 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-skill-eval/scripts/snapshot-ios.sh +132 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-skill-eval/scripts/snapshot-web.sh +61 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-ui/SKILL.md +101 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-ui/agents/openai.yaml +4 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-ui/references/drop-in-replacements.md +27 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-ui/references/jetpack-compose.md +73 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-ui/references/swift-ui.md +73 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-ui/references/universal.md +104 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-ui/scripts/list-components.js +193 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-upgrade/SKILL.md +150 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-upgrade/agents/openai.yaml +4 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-upgrade/references/expo-av-to-audio.md +132 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-upgrade/references/expo-av-to-video.md +160 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-upgrade/references/native-tabs.md +124 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-upgrade/references/new-architecture.md +79 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-upgrade/references/react-19.md +79 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-upgrade/references/react-compiler.md +59 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-upgrade/references/react-navigation-to-expo-router.md +61 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-web-to-native/SKILL.md +91 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-web-to-native/agents/openai.yaml +4 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-web-to-native/references/false-friends.md +119 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-web-to-native/references/native-patterns.md +39 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-web-to-native/references/run-as-goal.md +48 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-web-to-native/references/verify-on-device.md +45 -0
- package/dist/templates/default/apps/mobile/.agents/skills/ios-simulator/SKILL.md +32 -0
- package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/POWER.md +172 -0
- package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/SKILL.md +238 -0
- package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/agents/openai.yaml +4 -0
- package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/bundle-analyze-app.md +208 -0
- package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/bundle-analyze-js.md +264 -0
- package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/bundle-barrel-exports.md +250 -0
- package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/bundle-code-splitting.md +255 -0
- package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/bundle-hermes-mmap.md +167 -0
- package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/bundle-library-size.md +164 -0
- package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/bundle-native-assets.md +208 -0
- package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/bundle-r8-android.md +231 -0
- package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/bundle-tree-shaking.md +215 -0
- package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/images/bundle-treemap-source-map-explorer.png +0 -0
- package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/images/controlled-textinput-pingpong.png +0 -0
- package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/images/devtools-flamegraph.png +0 -0
- package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/images/emerge-xray-ios.png +0 -0
- package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/images/expo-atlas-treemap.png +0 -0
- package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/images/flashlight-flatlist-vs-flashlist.png +0 -0
- package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/images/fps-drop-graph.png +0 -0
- package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/images/memory-heap-snapshot.png +0 -0
- package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/images/tti-warm-start-diagram.png +0 -0
- package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/images/view-hierarchy-flattening.png +0 -0
- package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/images/xcode-instruments-templates.png +0 -0
- package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/images/xcode-thread-view.png +0 -0
- package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/js-animations-reanimated.md +273 -0
- package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/js-atomic-state.md +190 -0
- package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/js-bottomsheet.md +339 -0
- package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/js-concurrent-react.md +238 -0
- package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/js-lists-flatlist-flashlist.md +223 -0
- package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/js-measure-fps.md +178 -0
- package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/js-memory-leaks.md +168 -0
- package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/js-profile-react.md +138 -0
- package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/js-react-compiler.md +261 -0
- package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/js-uncontrolled-components.md +219 -0
- package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/native-android-16kb-alignment.md +114 -0
- package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/native-measure-tti.md +221 -0
- package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/native-memory-leaks.md +206 -0
- package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/native-memory-patterns.md +240 -0
- package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/native-platform-setup.md +112 -0
- package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/native-profiling.md +140 -0
- package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/native-sdks-over-polyfills.md +192 -0
- package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/native-threading-model.md +230 -0
- package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/native-turbo-modules.md +210 -0
- package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/native-view-flattening.md +180 -0
- package/dist/templates/default/apps/mobile/AGENTS.md +41 -0
- package/dist/templates/default/apps/mobile/app.json +38 -0
- package/dist/templates/default/apps/mobile/assets/expo.icon/Assets/expo-symbol 2.svg +3 -0
- package/dist/templates/default/apps/mobile/assets/expo.icon/Assets/grid.png +0 -0
- package/dist/templates/default/apps/mobile/assets/expo.icon/icon.json +40 -0
- package/dist/templates/default/apps/mobile/assets/images/android-icon-background.png +0 -0
- package/dist/templates/default/apps/mobile/assets/images/android-icon-foreground.png +0 -0
- package/dist/templates/default/apps/mobile/assets/images/android-icon-monochrome.png +0 -0
- package/dist/templates/default/apps/mobile/assets/images/icon.png +0 -0
- package/dist/templates/default/apps/mobile/assets/images/splash-icon.png +0 -0
- package/dist/templates/default/apps/mobile/eslint.config.js +10 -0
- package/dist/templates/default/apps/mobile/package.json +43 -0
- package/dist/templates/default/apps/mobile/skills-lock.json +185 -0
- package/dist/templates/default/apps/mobile/src/app/_layout.tsx +5 -0
- package/dist/templates/default/apps/mobile/src/app/index.tsx +17 -0
- package/dist/templates/default/apps/mobile/tsconfig.json +20 -0
- package/dist/templates/default/apps/web/.agents/skills/frontend-design/SKILL.md +71 -0
- package/dist/templates/default/apps/web/.agents/skills/web-design-guidelines/SKILL.md +39 -0
- package/dist/templates/default/apps/web/.env.example +3 -0
- package/dist/templates/default/apps/web/components.json +23 -0
- package/dist/templates/default/apps/web/eslint.config.ts +21 -0
- package/dist/templates/default/apps/web/package.json +39 -0
- package/dist/templates/default/apps/web/public/disposabl-logo.svg +8 -0
- package/dist/templates/default/apps/web/public/favicon.ico +0 -0
- package/dist/templates/default/apps/web/public/manifest.json +25 -0
- package/dist/templates/default/apps/web/skills-lock.json +17 -0
- package/dist/templates/default/apps/web/src/index.css +92 -0
- package/dist/templates/default/apps/web/src/routeTree.gen.ts +282 -0
- package/dist/templates/default/apps/web/src/router/__root.tsx +63 -0
- package/dist/templates/default/apps/web/src/router/_authenticated/dashboard.tsx +9 -0
- package/dist/templates/default/apps/web/src/router/_authenticated/todos/$id.tsx +27 -0
- package/dist/templates/default/apps/web/src/router/_authenticated/todos/index.tsx +33 -0
- package/dist/templates/default/apps/web/src/router/index.tsx +15 -0
- package/dist/templates/default/apps/web/src/router.tsx +20 -0
- package/dist/templates/default/apps/web/tsconfig.json +33 -0
- package/dist/templates/default/apps/web/tsr.config.json +6 -0
- package/dist/templates/default/apps/web/vite.config.ts +67 -0
- package/dist/templates/default/bun.lock +3932 -0
- package/dist/templates/default/bunfig.toml +5 -0
- package/dist/templates/default/disposabl.json +5 -0
- package/dist/templates/default/gitignore +10 -0
- package/dist/templates/default/package.json +31 -10
- package/dist/templates/default/packages/backend/.agents/skills/convex/SKILL.md +69 -0
- package/dist/templates/default/packages/backend/.agents/skills/convex-add/SKILL.md +26 -0
- package/dist/templates/default/packages/backend/.agents/skills/convex-advisor/SKILL.md +32 -0
- package/dist/templates/default/packages/backend/.agents/skills/convex-agent/SKILL.md +25 -0
- package/dist/templates/default/packages/backend/.agents/skills/convex-auth/SKILL.md +29 -0
- package/dist/templates/default/packages/backend/.agents/skills/convex-authz/SKILL.md +36 -0
- package/dist/templates/default/packages/backend/.agents/skills/convex-backup/SKILL.md +33 -0
- package/dist/templates/default/packages/backend/.agents/skills/convex-billing/SKILL.md +69 -0
- package/dist/templates/default/packages/backend/.agents/skills/convex-cost/SKILL.md +29 -0
- package/dist/templates/default/packages/backend/.agents/skills/convex-create-component/SKILL.md +325 -0
- package/dist/templates/default/packages/backend/.agents/skills/convex-create-component/agents/openai.yaml +14 -0
- package/dist/templates/default/packages/backend/.agents/skills/convex-create-component/assets/icon.svg +3 -0
- package/dist/templates/default/packages/backend/.agents/skills/convex-create-component/references/advanced-patterns.md +146 -0
- package/dist/templates/default/packages/backend/.agents/skills/convex-create-component/references/hybrid-components.md +38 -0
- package/dist/templates/default/packages/backend/.agents/skills/convex-create-component/references/local-components.md +39 -0
- package/dist/templates/default/packages/backend/.agents/skills/convex-create-component/references/packaged-components.md +54 -0
- package/dist/templates/default/packages/backend/.agents/skills/convex-crons/SKILL.md +23 -0
- package/dist/templates/default/packages/backend/.agents/skills/convex-deploy-guard/SKILL.md +29 -0
- package/dist/templates/default/packages/backend/.agents/skills/convex-design/SKILL.md +30 -0
- package/dist/templates/default/packages/backend/.agents/skills/convex-docs/SKILL.md +31 -0
- package/dist/templates/default/packages/backend/.agents/skills/convex-domains/SKILL.md +26 -0
- package/dist/templates/default/packages/backend/.agents/skills/convex-env/SKILL.md +24 -0
- package/dist/templates/default/packages/backend/.agents/skills/convex-expert/SKILL.md +38 -0
- package/dist/templates/default/packages/backend/.agents/skills/convex-explain-app/SKILL.md +29 -0
- package/dist/templates/default/packages/backend/.agents/skills/convex-improve-convex-plugin/SKILL.md +24 -0
- package/dist/templates/default/packages/backend/.agents/skills/convex-insights/SKILL.md +32 -0
- package/dist/templates/default/packages/backend/.agents/skills/convex-launch-readiness/SKILL.md +35 -0
- package/dist/templates/default/packages/backend/.agents/skills/convex-migrate/SKILL.md +23 -0
- package/dist/templates/default/packages/backend/.agents/skills/convex-migrate-rehearse/SKILL.md +31 -0
- package/dist/templates/default/packages/backend/.agents/skills/convex-monitor/SKILL.md +22 -0
- package/dist/templates/default/packages/backend/.agents/skills/convex-optimize/SKILL.md +26 -0
- package/dist/templates/default/packages/backend/.agents/skills/convex-quickstart/SKILL.md +29 -0
- package/dist/templates/default/packages/backend/.agents/skills/convex-quickstart/agents/openai.yaml +14 -0
- package/dist/templates/default/packages/backend/.agents/skills/convex-quickstart/assets/icon.svg +4 -0
- package/dist/templates/default/packages/backend/.agents/skills/convex-reviewer/SKILL.md +26 -0
- package/dist/templates/default/packages/backend/.agents/skills/convex-seed/SKILL.md +23 -0
- package/dist/templates/default/packages/backend/.agents/skills/convex-self-heal/SKILL.md +38 -0
- package/dist/templates/default/packages/backend/.agents/skills/convex-sentinel/SKILL.md +25 -0
- package/dist/templates/default/packages/backend/.agents/skills/convex-suggest/SKILL.md +27 -0
- package/dist/templates/default/packages/backend/.agents/skills/convex-test/SKILL.md +23 -0
- package/dist/templates/default/packages/backend/.agents/skills/convex-verify/SKILL.md +34 -0
- package/dist/templates/default/packages/backend/.prettierignore +4 -0
- package/dist/templates/default/packages/backend/AGENTS.md +18 -0
- package/dist/templates/default/packages/backend/CLAUDE.md +13 -0
- package/dist/templates/default/packages/backend/README.md +25 -0
- package/dist/templates/default/packages/backend/convex/_generated/ai/ai-files.state.json +6 -0
- package/dist/templates/default/packages/backend/convex/_generated/ai/guidelines.md +286 -0
- package/dist/templates/default/packages/backend/convex/_generated/api.d.ts +66 -0
- package/dist/templates/default/packages/backend/convex/_generated/api.js +23 -0
- package/dist/templates/default/packages/backend/convex/_generated/dataModel.d.ts +60 -0
- package/dist/templates/default/packages/backend/convex/_generated/server.d.ts +164 -0
- package/dist/templates/default/packages/backend/convex/_generated/server.js +101 -0
- package/dist/templates/default/packages/backend/convex/auth.config.ts +14 -0
- package/dist/templates/default/packages/backend/convex/auth.ts +15 -0
- package/dist/templates/default/packages/backend/convex/convex.config.ts +30 -0
- package/dist/templates/default/packages/backend/convex/http.ts +5 -0
- package/dist/templates/default/packages/backend/convex/mcp.ts +8 -0
- package/dist/templates/default/packages/backend/convex/schema.ts +10 -0
- package/dist/templates/default/packages/backend/convex/todos/index.ts +26 -0
- package/dist/templates/default/packages/backend/convex/todos/internal.ts +43 -0
- package/dist/templates/default/packages/backend/convex/tsconfig.json +27 -0
- package/dist/templates/default/packages/backend/convex/users.ts +20 -0
- package/dist/templates/default/packages/backend/eslint.config.mjs +62 -0
- package/dist/templates/default/packages/backend/package.json +36 -0
- package/dist/templates/default/packages/backend/skills-lock.json +203 -0
- package/dist/templates/default/packages/disposabl-kit/client/components/ui/accordion.tsx +77 -0
- package/dist/templates/default/packages/disposabl-kit/client/components/ui/alert-dialog.tsx +185 -0
- package/dist/templates/default/packages/disposabl-kit/client/components/ui/alert.tsx +75 -0
- package/dist/templates/default/packages/disposabl-kit/client/components/ui/aspect-ratio.tsx +22 -0
- package/dist/templates/default/packages/disposabl-kit/client/components/ui/attachment.tsx +207 -0
- package/dist/templates/default/packages/disposabl-kit/client/components/ui/avatar.tsx +106 -0
- package/dist/templates/default/packages/disposabl-kit/client/components/ui/badge.tsx +51 -0
- package/dist/templates/default/packages/disposabl-kit/client/components/ui/breadcrumb.tsx +121 -0
- package/dist/templates/default/packages/disposabl-kit/client/components/ui/bubble.tsx +127 -0
- package/dist/templates/default/packages/disposabl-kit/client/components/ui/button-group.tsx +87 -0
- package/dist/templates/default/packages/disposabl-kit/client/components/ui/button.tsx +57 -0
- package/dist/templates/default/packages/disposabl-kit/client/components/ui/calendar.tsx +241 -0
- package/dist/templates/default/packages/disposabl-kit/client/components/ui/card.tsx +102 -0
- package/dist/templates/default/packages/disposabl-kit/client/components/ui/carousel.tsx +239 -0
- package/dist/templates/default/packages/disposabl-kit/client/components/ui/chart.tsx +368 -0
- package/dist/templates/default/packages/disposabl-kit/client/components/ui/checkbox.tsx +27 -0
- package/dist/templates/default/packages/disposabl-kit/client/components/ui/code-block.tsx +243 -0
- package/dist/templates/default/packages/disposabl-kit/client/components/ui/collapsible.tsx +19 -0
- package/dist/templates/default/packages/disposabl-kit/client/components/ui/combobox.tsx +300 -0
- package/dist/templates/default/packages/disposabl-kit/client/components/ui/command.tsx +194 -0
- package/dist/templates/default/packages/disposabl-kit/client/components/ui/context-menu.tsx +271 -0
- package/dist/templates/default/packages/disposabl-kit/client/components/ui/dialog.tsx +156 -0
- package/dist/templates/default/packages/disposabl-kit/client/components/ui/direction.tsx +4 -0
- package/dist/templates/default/packages/disposabl-kit/client/components/ui/drawer.tsx +224 -0
- package/dist/templates/default/packages/disposabl-kit/client/components/ui/dropdown-menu.tsx +269 -0
- package/dist/templates/default/packages/disposabl-kit/client/components/ui/empty.tsx +103 -0
- package/dist/templates/default/packages/disposabl-kit/client/components/ui/field.tsx +236 -0
- package/dist/templates/default/packages/disposabl-kit/client/components/ui/hover-card.tsx +50 -0
- package/dist/templates/default/packages/disposabl-kit/client/components/ui/input-group.tsx +158 -0
- package/dist/templates/default/packages/disposabl-kit/client/components/ui/input-otp.tsx +83 -0
- package/dist/templates/default/packages/disposabl-kit/client/components/ui/input.tsx +19 -0
- package/dist/templates/default/packages/disposabl-kit/client/components/ui/item.tsx +201 -0
- package/dist/templates/default/packages/disposabl-kit/client/components/ui/kbd.tsx +26 -0
- package/dist/templates/default/packages/disposabl-kit/client/components/ui/label.tsx +19 -0
- package/dist/templates/default/packages/disposabl-kit/client/components/ui/marker.tsx +70 -0
- package/dist/templates/default/packages/disposabl-kit/client/components/ui/menubar.tsx +284 -0
- package/dist/templates/default/packages/disposabl-kit/client/components/ui/message-scroller.tsx +128 -0
- package/dist/templates/default/packages/disposabl-kit/client/components/ui/message.tsx +91 -0
- package/dist/templates/default/packages/disposabl-kit/client/components/ui/native-select.tsx +64 -0
- package/dist/templates/default/packages/disposabl-kit/client/components/ui/navigation-menu.tsx +170 -0
- package/dist/templates/default/packages/disposabl-kit/client/components/ui/pagination.tsx +133 -0
- package/dist/templates/default/packages/disposabl-kit/client/components/ui/popover.tsx +87 -0
- package/dist/templates/default/packages/disposabl-kit/client/components/ui/progress.tsx +82 -0
- package/dist/templates/default/packages/disposabl-kit/client/components/ui/questionnaire.tsx +330 -0
- package/dist/templates/default/packages/disposabl-kit/client/components/ui/radio-group.tsx +35 -0
- package/dist/templates/default/packages/disposabl-kit/client/components/ui/resizable.tsx +49 -0
- package/dist/templates/default/packages/disposabl-kit/client/components/ui/scroll-area.tsx +51 -0
- package/dist/templates/default/packages/disposabl-kit/client/components/ui/select.tsx +201 -0
- package/dist/templates/default/packages/disposabl-kit/client/components/ui/separator.tsx +22 -0
- package/dist/templates/default/packages/disposabl-kit/client/components/ui/sheet.tsx +132 -0
- package/dist/templates/default/packages/disposabl-kit/client/components/ui/sidebar.tsx +723 -0
- package/dist/templates/default/packages/disposabl-kit/client/components/ui/skeleton.tsx +13 -0
- package/dist/templates/default/packages/disposabl-kit/client/components/ui/slider.tsx +51 -0
- package/dist/templates/default/packages/disposabl-kit/client/components/ui/spinner.tsx +16 -0
- package/dist/templates/default/packages/disposabl-kit/client/components/ui/switch.tsx +31 -0
- package/dist/templates/default/packages/disposabl-kit/client/components/ui/table.tsx +113 -0
- package/dist/templates/default/packages/disposabl-kit/client/components/ui/tabs.tsx +81 -0
- package/dist/templates/default/packages/disposabl-kit/client/components/ui/textarea.tsx +17 -0
- package/dist/templates/default/packages/disposabl-kit/client/components/ui/toast.tsx +229 -0
- package/dist/templates/default/packages/disposabl-kit/client/components/ui/toggle-group.tsx +87 -0
- package/dist/templates/default/packages/disposabl-kit/client/components/ui/toggle.tsx +42 -0
- package/dist/templates/default/packages/disposabl-kit/client/components/ui/tooltip.tsx +65 -0
- package/dist/templates/default/packages/disposabl-kit/client/components/ui/trace.tsx +161 -0
- package/dist/templates/default/packages/disposabl-kit/client/hooks/use-mobile.ts +21 -0
- package/dist/templates/default/packages/disposabl-kit/client/lib/prerender.ts +89 -0
- package/dist/templates/default/packages/disposabl-kit/client/lib/return-to.ts +12 -0
- package/dist/templates/default/packages/disposabl-kit/client/lib/utils.ts +1 -0
- package/dist/templates/default/packages/disposabl-kit/client/routes/_auth-pages/login.tsx +114 -0
- package/dist/templates/default/packages/disposabl-kit/client/routes/_auth-pages/signUp.tsx +120 -0
- package/dist/templates/default/packages/disposabl-kit/client/routes/_authenticated/route.tsx +38 -0
- package/dist/templates/default/packages/disposabl-kit/client/routes/consent.tsx +137 -0
- package/dist/templates/default/packages/disposabl-kit/client/routes/route.tsx +30 -0
- package/dist/templates/default/packages/disposabl-kit/client/styles/globals.css +60 -0
- package/dist/templates/default/packages/disposabl-kit/client/vite.config.ts +32 -0
- package/dist/templates/default/packages/disposabl-kit/components.json +23 -0
- package/dist/templates/default/packages/disposabl-kit/eslint.config.js +21 -0
- package/dist/templates/default/packages/disposabl-kit/package.json +60 -0
- package/dist/templates/default/packages/disposabl-kit/server/http.ts +86 -0
- package/dist/templates/default/packages/disposabl-kit/server/lib/functions.ts +40 -0
- package/dist/templates/default/packages/disposabl-kit/server/lib/platforms.ts +20 -0
- package/dist/templates/default/packages/disposabl-kit/server/lib/static-routes.ts +56 -0
- package/dist/templates/default/packages/disposabl-kit/tsconfig.json +17 -0
- package/dist/templates/default/patches/@convex-dev%2Fauth@2.0.0-beta.0.patch +310 -0
- package/dist/templates/default/patches/@convex-dev%2Fstatic-hosting@0.2.1.patch +187 -0
- package/dist/templates/default/tsconfig.json +9 -0
- package/dist/templates/default/turbo.json +51 -0
- package/package.json +21 -5
- package/README.md +0 -34
- package/dist/templates/default/README.md +0 -12
- package/dist/templates/default/docs/index.html +0 -8
- package/dist/templates/default/eslint.config.js +0 -18
- package/dist/templates/default/index.ts +0 -14
|
@@ -0,0 +1,264 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Analyze JS Bundle Size
|
|
3
|
+
impact: CRITICAL
|
|
4
|
+
tags: bundle, analysis, source-map-explorer, expo-atlas
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Skill: Analyze JS Bundle Size
|
|
8
|
+
|
|
9
|
+
Use source-map-explorer and Expo Atlas to visualize what's in your JavaScript bundle.
|
|
10
|
+
|
|
11
|
+
## Quick Command
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
# React Native CLI
|
|
15
|
+
npx react-native bundle \
|
|
16
|
+
--entry-file index.js \
|
|
17
|
+
--bundle-output output.js \
|
|
18
|
+
--platform ios \
|
|
19
|
+
--sourcemap-output output.js.map \
|
|
20
|
+
--dev false --minify true && \
|
|
21
|
+
npx source-map-explorer output.js --no-border-checks
|
|
22
|
+
|
|
23
|
+
# Expo
|
|
24
|
+
EXPO_UNSTABLE_ATLAS=true npx expo export --platform ios && npx expo-atlas
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## When to Use
|
|
28
|
+
|
|
29
|
+
- JS bundle seems too large
|
|
30
|
+
- Want to identify heavy dependencies
|
|
31
|
+
- Investigating startup time issues
|
|
32
|
+
- Before/after optimization comparison
|
|
33
|
+
|
|
34
|
+
> **Note**: This skill involves visual treemap output (source-map-explorer, Expo Atlas). When regression checks include device flows, use `agent-device` for app evidence; install it through the environment's approved/trusted path or ask the user if verification needs it and it is missing. Treemap analysis itself may still require exported reports, browser screenshots, or human review. Record the largest modules and before/after bundle sizes in text when asking an agent to reason about them.
|
|
35
|
+
|
|
36
|
+
## Understanding Hermes Bytecode
|
|
37
|
+
|
|
38
|
+
Release builds using Hermes, the default engine in modern React Native, ship Hermes bytecode rather than raw JavaScript:
|
|
39
|
+
- Skips parsing at runtime
|
|
40
|
+
- Still benefits from smaller bundles
|
|
41
|
+
- Heavy imports still execute on startup
|
|
42
|
+
|
|
43
|
+
**Impact of bundle size:**
|
|
44
|
+
- Larger bytecode = longer download from store
|
|
45
|
+
- More imports on init path = slower TTI
|
|
46
|
+
|
|
47
|
+
Development builds fetch JS from the dev server, and non-Hermes engines have different startup tradeoffs. Smaller bytecode helps app size and startup, but startup also depends on what executes on the initialization path. Imports that eagerly touch native modules can defeat Turbo Module lazy loading and hurt TTI.
|
|
48
|
+
|
|
49
|
+
## Method 1: source-map-explorer
|
|
50
|
+
|
|
51
|
+
### Generate Bundle with Source Map
|
|
52
|
+
|
|
53
|
+
**React Native CLI:**
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
npx react-native bundle \
|
|
57
|
+
--entry-file index.js \
|
|
58
|
+
--bundle-output output.js \
|
|
59
|
+
--platform ios \
|
|
60
|
+
--sourcemap-output output.js.map \
|
|
61
|
+
--dev false \
|
|
62
|
+
--minify true
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
**Expo (SDK 51+):**
|
|
66
|
+
|
|
67
|
+
```bash
|
|
68
|
+
npx expo export --platform ios --source-maps --output-dir dist
|
|
69
|
+
# Bundle at: dist/ios/_expo/static/js/ios/*.js
|
|
70
|
+
# Source map at: dist/ios/_expo/static/js/ios/*.map
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
### Analyze
|
|
74
|
+
|
|
75
|
+
```bash
|
|
76
|
+
npx source-map-explorer output.js --no-border-checks
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
**Note**: `--no-border-checks` needed due to Metro's non-standard source maps.
|
|
80
|
+
|
|
81
|
+
Opens browser with treemap visualization:
|
|
82
|
+
|
|
83
|
+

|
|
84
|
+
|
|
85
|
+
The treemap shows:
|
|
86
|
+
- **Hierarchy**: `node_modules/` → `react-native/` → `Libraries/` → individual files
|
|
87
|
+
- **Size**: Box area proportional to file size (KB shown in labels)
|
|
88
|
+
- **Major components visible**:
|
|
89
|
+
- `react-native` (724.18 KB, 80.5%)
|
|
90
|
+
- `Renderer` (208.44 KB) - ReactNativeRenderer-prod.js, ReactFabric-prod.js
|
|
91
|
+
- `Components` (125.29 KB) - Touchable, ScrollView, etc.
|
|
92
|
+
- `Animated` (79.48 KB) - Animation system
|
|
93
|
+
- `virtualized-lists` (57.57 KB) - FlatList internals
|
|
94
|
+
|
|
95
|
+
Click on any section to drill down into that directory.
|
|
96
|
+
|
|
97
|
+
**Limitation**: May lose ~30% info due to mapping issues.
|
|
98
|
+
|
|
99
|
+
## Method 2: Expo Atlas
|
|
100
|
+
|
|
101
|
+
More accurate for Expo projects (or with workaround for bare RN).
|
|
102
|
+
|
|
103
|
+
### For Expo Projects
|
|
104
|
+
|
|
105
|
+
```bash
|
|
106
|
+
# Start with Atlas enabled
|
|
107
|
+
EXPO_UNSTABLE_ATLAS=true npx expo start --no-dev
|
|
108
|
+
|
|
109
|
+
# Or export
|
|
110
|
+
EXPO_UNSTABLE_ATLAS=true npx expo export
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
Then launch UI:
|
|
114
|
+
|
|
115
|
+
```bash
|
|
116
|
+
npx expo-atlas
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+

|
|
120
|
+
|
|
121
|
+
Expo Atlas provides more accurate visualization for Expo projects, with similar treemap interface showing module sizes and dependencies.
|
|
122
|
+
|
|
123
|
+
### For Non-Expo Projects
|
|
124
|
+
|
|
125
|
+
Use `expo-atlas-without-expo` package.
|
|
126
|
+
|
|
127
|
+
## Method 3: Re.Pack Bundle Analysis (Webpack/Rspack)
|
|
128
|
+
|
|
129
|
+
If using Re.Pack:
|
|
130
|
+
|
|
131
|
+
### webpack-bundle-analyzer
|
|
132
|
+
|
|
133
|
+
```bash
|
|
134
|
+
rspack build --analyze
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
### bundle-stats / statoscope
|
|
138
|
+
|
|
139
|
+
```bash
|
|
140
|
+
# Generate stats
|
|
141
|
+
npx react-native bundle \
|
|
142
|
+
--platform android \
|
|
143
|
+
--entry-file index.js \
|
|
144
|
+
--dev false \
|
|
145
|
+
--minify true \
|
|
146
|
+
--json stats.json
|
|
147
|
+
|
|
148
|
+
# Analyze
|
|
149
|
+
npx bundle-stats --html --json stats.json
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
### Rsdoctor
|
|
153
|
+
|
|
154
|
+
```javascript
|
|
155
|
+
// rspack.config.js
|
|
156
|
+
const { RsdoctorRspackPlugin } = require('@rsdoctor/rspack-plugin');
|
|
157
|
+
|
|
158
|
+
module.exports = {
|
|
159
|
+
plugins: [
|
|
160
|
+
process.env.RSDOCTOR && new RsdoctorRspackPlugin(),
|
|
161
|
+
].filter(Boolean),
|
|
162
|
+
};
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
Run with:
|
|
166
|
+
|
|
167
|
+
```bash
|
|
168
|
+
RSDOCTOR=true npx react-native start
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
## What to Look For
|
|
172
|
+
|
|
173
|
+
### Red Flags
|
|
174
|
+
|
|
175
|
+
| Finding | Problem | Solution |
|
|
176
|
+
|---------|---------|----------|
|
|
177
|
+
| Entire library imported | Barrel exports | Use direct imports |
|
|
178
|
+
| Duplicate packages | Multiple versions | Dedupe in package.json |
|
|
179
|
+
| Dev dependencies in bundle | Incorrect imports | Check conditional imports |
|
|
180
|
+
| Large polyfills | Unnecessary for Hermes | Remove (see native-sdks-over-polyfills.md) |
|
|
181
|
+
| Moment.js with locales | Bloated date library | Switch to date-fns or dayjs |
|
|
182
|
+
|
|
183
|
+
### Common Offenders
|
|
184
|
+
|
|
185
|
+
- **Lodash full import**: Prefer built-ins or specific imports
|
|
186
|
+
- **Moment.js**: Replace with `date-fns` or `dayjs`
|
|
187
|
+
- **Intl polyfills**: Check Hermes API and method coverage before removing them
|
|
188
|
+
- **AWS SDK**: Import specific services only
|
|
189
|
+
|
|
190
|
+
## Code Examples
|
|
191
|
+
|
|
192
|
+
### Identify Barrel Import Impact
|
|
193
|
+
|
|
194
|
+
```tsx
|
|
195
|
+
// BAD: Imports entire library through barrel
|
|
196
|
+
import { format } from 'date-fns';
|
|
197
|
+
|
|
198
|
+
// In bundle: All of date-fns loaded
|
|
199
|
+
|
|
200
|
+
// GOOD: Direct import
|
|
201
|
+
import format from 'date-fns/format';
|
|
202
|
+
|
|
203
|
+
// In bundle: Only format function
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
## Comparing Bundles
|
|
207
|
+
|
|
208
|
+
### source-map-explorer
|
|
209
|
+
|
|
210
|
+
```bash
|
|
211
|
+
# Generate baseline
|
|
212
|
+
npx react-native bundle ... --bundle-output baseline.js --sourcemap-output baseline.js.map
|
|
213
|
+
|
|
214
|
+
# Make changes, generate new bundle
|
|
215
|
+
npx react-native bundle ... --bundle-output current.js --sourcemap-output current.js.map
|
|
216
|
+
|
|
217
|
+
# Compare manually in browser
|
|
218
|
+
```
|
|
219
|
+
|
|
220
|
+
### Re.Pack (automated)
|
|
221
|
+
|
|
222
|
+
```bash
|
|
223
|
+
npx bundle-stats compare baseline-stats.json current-stats.json
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
## Quick Commands
|
|
227
|
+
|
|
228
|
+
**React Native CLI:**
|
|
229
|
+
|
|
230
|
+
```bash
|
|
231
|
+
# iOS bundle analysis
|
|
232
|
+
npx react-native bundle \
|
|
233
|
+
--entry-file index.js \
|
|
234
|
+
--bundle-output ios-bundle.js \
|
|
235
|
+
--platform ios \
|
|
236
|
+
--sourcemap-output ios-bundle.js.map \
|
|
237
|
+
--dev false \
|
|
238
|
+
--minify true && \
|
|
239
|
+
npx source-map-explorer ios-bundle.js --no-border-checks
|
|
240
|
+
|
|
241
|
+
# Android bundle analysis
|
|
242
|
+
npx react-native bundle \
|
|
243
|
+
--entry-file index.js \
|
|
244
|
+
--bundle-output android-bundle.js \
|
|
245
|
+
--platform android \
|
|
246
|
+
--sourcemap-output android-bundle.js.map \
|
|
247
|
+
--dev false \
|
|
248
|
+
--minify true && \
|
|
249
|
+
npx source-map-explorer android-bundle.js --no-border-checks
|
|
250
|
+
```
|
|
251
|
+
|
|
252
|
+
**Expo:**
|
|
253
|
+
|
|
254
|
+
```bash
|
|
255
|
+
# Use Expo Atlas (recommended for Expo projects)
|
|
256
|
+
EXPO_UNSTABLE_ATLAS=true npx expo export --platform ios
|
|
257
|
+
npx expo-atlas
|
|
258
|
+
```
|
|
259
|
+
|
|
260
|
+
## Related Skills
|
|
261
|
+
|
|
262
|
+
- [bundle-barrel-exports.md](./bundle-barrel-exports.md) - Fix barrel import issues
|
|
263
|
+
- [bundle-tree-shaking.md](./bundle-tree-shaking.md) - Enable dead code elimination
|
|
264
|
+
- [bundle-library-size.md](./bundle-library-size.md) - Check library sizes before adding
|
|
@@ -0,0 +1,250 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Avoid Barrel Exports
|
|
3
|
+
impact: CRITICAL
|
|
4
|
+
tags: bundle, imports, barrel, tree-shaking
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Skill: Avoid Barrel Exports
|
|
8
|
+
|
|
9
|
+
Refactor barrel imports (index files) to reduce bundle size and improve startup time.
|
|
10
|
+
|
|
11
|
+
## Quick Pattern
|
|
12
|
+
|
|
13
|
+
**Incorrect:**
|
|
14
|
+
|
|
15
|
+
```tsx
|
|
16
|
+
import { Button } from './components';
|
|
17
|
+
// Loads ALL exports from components/index.ts
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
**Correct:**
|
|
21
|
+
|
|
22
|
+
```tsx
|
|
23
|
+
import Button from './components/Button';
|
|
24
|
+
// Loads only Button
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## When to Use
|
|
28
|
+
|
|
29
|
+
- Bundle contains unused code from libraries
|
|
30
|
+
- Circular dependency warnings in Metro
|
|
31
|
+
- Hot Module Replacement (HMR) breaks frequently
|
|
32
|
+
- TTI is slow due to module evaluation
|
|
33
|
+
|
|
34
|
+
## What Are Barrel Exports?
|
|
35
|
+
|
|
36
|
+
```tsx
|
|
37
|
+
// components/index.ts (barrel file)
|
|
38
|
+
export { Button } from './Button';
|
|
39
|
+
export { Card } from './Card';
|
|
40
|
+
export { Modal } from './Modal';
|
|
41
|
+
export { Sidebar } from './Sidebar';
|
|
42
|
+
|
|
43
|
+
// Usage (barrel import)
|
|
44
|
+
import { Button } from './components';
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
## Problems with Barrel Imports
|
|
48
|
+
|
|
49
|
+
### 1. Bundle Size Overhead
|
|
50
|
+
|
|
51
|
+
Without effective tree shaking or a library-specific Babel plugin, barrel imports can make all re-exported modules reachable and evaluated even when only one export is used:
|
|
52
|
+
|
|
53
|
+
```tsx
|
|
54
|
+
// Only need Button, but entire barrel is bundled
|
|
55
|
+
import { Button } from './components';
|
|
56
|
+
// Card, Modal, Sidebar also included!
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
### 2. Runtime Overhead
|
|
60
|
+
|
|
61
|
+
All modules evaluate before returning your import:
|
|
62
|
+
|
|
63
|
+
```tsx
|
|
64
|
+
import { Button } from './components';
|
|
65
|
+
// JavaScript must evaluate:
|
|
66
|
+
// - Button.tsx
|
|
67
|
+
// - Card.tsx
|
|
68
|
+
// - Modal.tsx
|
|
69
|
+
// - Sidebar.tsx
|
|
70
|
+
// Even though you only use Button
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
### 3. Circular Dependencies
|
|
74
|
+
|
|
75
|
+
Barrel files make cycles easier to create accidentally:
|
|
76
|
+
|
|
77
|
+
```
|
|
78
|
+
Warning: Require cycle:
|
|
79
|
+
components/index.ts -> Button.tsx -> utils/index.ts -> components/index.ts
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
Breaks HMR, causes unpredictable behavior.
|
|
83
|
+
|
|
84
|
+
## Solution 1: Direct Imports
|
|
85
|
+
|
|
86
|
+
Replace barrel imports with direct paths:
|
|
87
|
+
|
|
88
|
+
```tsx
|
|
89
|
+
// BEFORE: Barrel import
|
|
90
|
+
import { Button, Card } from './components';
|
|
91
|
+
|
|
92
|
+
// AFTER: Direct imports
|
|
93
|
+
import Button from './components/Button';
|
|
94
|
+
import Card from './components/Card';
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
### Enforce with ESLint
|
|
98
|
+
|
|
99
|
+
```bash
|
|
100
|
+
npm install -D eslint-plugin-no-barrel-files
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
```javascript
|
|
104
|
+
// eslint.config.js
|
|
105
|
+
import noBarrelFiles from 'eslint-plugin-no-barrel-files';
|
|
106
|
+
|
|
107
|
+
export default [
|
|
108
|
+
{
|
|
109
|
+
plugins: { 'no-barrel-files': noBarrelFiles },
|
|
110
|
+
rules: {
|
|
111
|
+
'no-barrel-files/no-barrel-files': 'error',
|
|
112
|
+
},
|
|
113
|
+
},
|
|
114
|
+
];
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
## Solution 2: Tree Shaking (Automatic)
|
|
118
|
+
|
|
119
|
+
Enable tree shaking to automatically remove unused barrel exports.
|
|
120
|
+
|
|
121
|
+
### Expo SDK 52+
|
|
122
|
+
|
|
123
|
+
```tsx
|
|
124
|
+
// metro.config.js
|
|
125
|
+
const { getDefaultConfig } = require('expo/metro-config');
|
|
126
|
+
const config = getDefaultConfig(__dirname);
|
|
127
|
+
|
|
128
|
+
config.transformer.getTransformOptions = async () => ({
|
|
129
|
+
transform: {
|
|
130
|
+
experimentalImportSupport: true,
|
|
131
|
+
},
|
|
132
|
+
});
|
|
133
|
+
|
|
134
|
+
module.exports = config;
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
```bash
|
|
138
|
+
# .env
|
|
139
|
+
EXPO_UNSTABLE_METRO_OPTIMIZE_GRAPH=1
|
|
140
|
+
EXPO_UNSTABLE_TREE_SHAKING=1
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
### metro-serializer-esbuild
|
|
144
|
+
|
|
145
|
+
```bash
|
|
146
|
+
npm install @rnx-kit/metro-serializer-esbuild
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
### Re.Pack (Webpack/Rspack)
|
|
150
|
+
|
|
151
|
+
Tree shaking built-in.
|
|
152
|
+
|
|
153
|
+
## Real-World Example: date-fns
|
|
154
|
+
|
|
155
|
+
```tsx
|
|
156
|
+
// BAD: Imports entire library
|
|
157
|
+
import { format, addDays, isToday } from 'date-fns';
|
|
158
|
+
|
|
159
|
+
// GOOD: Direct imports
|
|
160
|
+
import format from 'date-fns/format';
|
|
161
|
+
import addDays from 'date-fns/addDays';
|
|
162
|
+
import isToday from 'date-fns/isToday';
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
If the project uses a bundler/configuration with working tree shaking, top-level ESM imports from libraries such as `date-fns` may be optimized automatically. Without that, submodule imports are still the safer pattern. Measure with bundle analysis.
|
|
166
|
+
|
|
167
|
+
## Library-Specific Solutions
|
|
168
|
+
|
|
169
|
+
Some libraries provide Babel plugins:
|
|
170
|
+
|
|
171
|
+
### React Native Paper
|
|
172
|
+
|
|
173
|
+
```javascript
|
|
174
|
+
// babel.config.js
|
|
175
|
+
module.exports = {
|
|
176
|
+
plugins: [
|
|
177
|
+
'react-native-paper/babel', // Auto-transforms imports
|
|
178
|
+
],
|
|
179
|
+
};
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
Transforms:
|
|
183
|
+
```tsx
|
|
184
|
+
import { Button } from 'react-native-paper';
|
|
185
|
+
// Into:
|
|
186
|
+
import Button from 'react-native-paper/lib/module/components/Button';
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
## Refactoring Strategy
|
|
190
|
+
|
|
191
|
+
### Step 1: Identify Barrel Files
|
|
192
|
+
|
|
193
|
+
Look for `index.ts` files with multiple exports:
|
|
194
|
+
|
|
195
|
+
```bash
|
|
196
|
+
grep -r "export \* from" src/
|
|
197
|
+
grep -r "export { .* } from" src/
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
### Step 2: Update Imports
|
|
201
|
+
|
|
202
|
+
```tsx
|
|
203
|
+
// Find all usages
|
|
204
|
+
// VS Code: Cmd+Shift+F for "from './components'"
|
|
205
|
+
|
|
206
|
+
// Replace each with direct import
|
|
207
|
+
import Button from './components/Button';
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
### Step 3: (Optional) Keep Barrel for External API
|
|
211
|
+
|
|
212
|
+
If your package is consumed by others:
|
|
213
|
+
|
|
214
|
+
```tsx
|
|
215
|
+
// Keep index.ts for package API
|
|
216
|
+
// components/index.ts
|
|
217
|
+
export { Button } from './Button';
|
|
218
|
+
|
|
219
|
+
// Internal code uses direct imports
|
|
220
|
+
// src/screens/Home.tsx
|
|
221
|
+
import Button from '../components/Button';
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
## Migration Script Example
|
|
225
|
+
|
|
226
|
+
```bash
|
|
227
|
+
# Use codemod or search-replace
|
|
228
|
+
# Find: import { (\w+) } from '\.\/components';
|
|
229
|
+
# Replace: import $1 from './components/$1';
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
## Verification
|
|
233
|
+
|
|
234
|
+
After refactoring:
|
|
235
|
+
|
|
236
|
+
1. Run bundle analysis (see [bundle-analyze-js.md](./bundle-analyze-js.md))
|
|
237
|
+
2. Compare sizes before/after
|
|
238
|
+
3. Check for circular dependency warnings
|
|
239
|
+
|
|
240
|
+
## Common Pitfalls
|
|
241
|
+
|
|
242
|
+
- **Breaking external consumers**: If publishing a library, keep barrel for public API
|
|
243
|
+
- **IDE auto-imports**: Configure IDE to prefer direct imports
|
|
244
|
+
- **Inconsistent patterns**: Enforce with ESLint across team
|
|
245
|
+
|
|
246
|
+
## Related Skills
|
|
247
|
+
|
|
248
|
+
- [bundle-analyze-js.md](./bundle-analyze-js.md) - Verify impact
|
|
249
|
+
- [bundle-tree-shaking.md](./bundle-tree-shaking.md) - Automatic solution
|
|
250
|
+
- [bundle-library-size.md](./bundle-library-size.md) - Check library patterns
|