devendra-skill-package 1.0.2
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/.github/skills/boiler-project-generator/SKILL.md +103 -0
- package/.github/skills/boiler-project-generator/assets/templates/android/README.md +3 -0
- package/.github/skills/boiler-project-generator/assets/templates/angular/README.md +3 -0
- package/.github/skills/boiler-project-generator/assets/templates/flutter/README.md +3 -0
- package/.github/skills/boiler-project-generator/assets/templates/ios/README.md +3 -0
- package/.github/skills/boiler-project-generator/assets/templates/react/README.md +3 -0
- package/.github/skills/boiler-project-generator/assets/templates/react-native/README.md +3 -0
- package/.github/skills/boiler-project-generator/assets/templates/react-native/api-setup.ts +76 -0
- package/.github/skills/boiler-project-generator/assets/templates/react-native/component-primary-button.tsx +29 -0
- package/.github/skills/boiler-project-generator/assets/templates/react-native/env-config.env +4 -0
- package/.github/skills/boiler-project-generator/assets/templates/react-native/feature-auth-screen.tsx +45 -0
- package/.github/skills/boiler-project-generator/assets/templates/react-native/feature-dashboard-screen.tsx +45 -0
- package/.github/skills/boiler-project-generator/assets/templates/react-native/feature-profile-screen.tsx +45 -0
- package/.github/skills/boiler-project-generator/assets/templates/react-native/hook-use-app-boot.ts +11 -0
- package/.github/skills/boiler-project-generator/assets/templates/react-native/navigation-setup.tsx +25 -0
- package/.github/skills/boiler-project-generator/assets/templates/react-native/project-structure.md +24 -0
- package/.github/skills/boiler-project-generator/assets/templates/react-native/redux-hooks.ts +5 -0
- package/.github/skills/boiler-project-generator/assets/templates/react-native/redux-session-slice.ts +29 -0
- package/.github/skills/boiler-project-generator/assets/templates/react-native/redux-store.ts +15 -0
- package/.github/skills/boiler-project-generator/assets/templates/react-native/theme-index.ts +23 -0
- package/.github/skills/boiler-project-generator/assets/templates/react-native/utils-helpers.ts +7 -0
- package/.github/skills/boiler-project-generator/metadata.yaml +29 -0
- package/.github/skills/boiler-project-generator/references/android.md +19 -0
- package/.github/skills/boiler-project-generator/references/angular.md +14 -0
- package/.github/skills/boiler-project-generator/references/flutter.md +17 -0
- package/.github/skills/boiler-project-generator/references/ios.md +17 -0
- package/.github/skills/boiler-project-generator/references/react-native.md +103 -0
- package/.github/skills/boiler-project-generator/references/react.md +17 -0
- package/.github/skills/boiler-project-generator/scripts/angular.js +43 -0
- package/.github/skills/boiler-project-generator/scripts/generate-project.mjs +107 -0
- package/.github/skills/boiler-project-generator/scripts/init.js +105 -0
- package/.github/skills/boiler-project-generator/scripts/react-native.js +1041 -0
- package/.github/skills/boiler-project-generator/scripts/react.js +32 -0
- package/.github/skills/clean-architecture-generator/SKILL.md +235 -0
- package/.github/skills/clean-architecture-generator/references/architecture-core.md +126 -0
- package/.github/skills/clean-architecture-generator/references/platform-angular.md +374 -0
- package/.github/skills/clean-architecture-generator/references/platform-flutter.md +366 -0
- package/.github/skills/clean-architecture-generator/references/platform-react-native.md +590 -0
- package/.github/skills/clean-architecture-generator/references/platform-react.md +261 -0
- package/.github/skills/code-test-coverage-analyzer/SKILL.md +1358 -0
- package/.github/skills/code-test-coverage-analyzer/assets/config-questionnaire.md +118 -0
- package/.github/skills/code-test-coverage-analyzer/assets/conflict-resolution-protocol.md +99 -0
- package/.github/skills/code-test-coverage-analyzer/assets/coverage-calculation-rules.md +294 -0
- package/.github/skills/code-test-coverage-analyzer/assets/multi-strategy-search.md +145 -0
- package/.github/skills/code-test-coverage-analyzer/assets/output-file-contracts.md +651 -0
- package/.github/skills/code-test-coverage-analyzer/assets/status-definitions.md +273 -0
- package/.github/skills/code-test-coverage-analyzer/examples/example-invocation.md +208 -0
- package/.github/skills/code-test-coverage-analyzer/references/android-patterns.md +229 -0
- package/.github/skills/code-test-coverage-analyzer/references/angular-patterns.md +177 -0
- package/.github/skills/code-test-coverage-analyzer/references/backend-patterns.md +383 -0
- package/.github/skills/code-test-coverage-analyzer/references/flutter-patterns.md +254 -0
- package/.github/skills/code-test-coverage-analyzer/references/ios-patterns.md +228 -0
- package/.github/skills/code-test-coverage-analyzer/references/react-native-patterns.md +431 -0
- package/.github/skills/code-test-coverage-analyzer/references/react-patterns.md +206 -0
- package/.github/skills/code-test-coverage-analyzer/scripts/detect-platform.ps1 +261 -0
- package/.github/skills/code-test-coverage-analyzer/scripts/scan-repository.ps1 +242 -0
- package/.github/skills/code-test-coverage-analyzer/templates/brd-compliance-row.md +107 -0
- package/.github/skills/code-test-coverage-analyzer/templates/test-case-row.md +130 -0
- package/.github/skills/code-test-coverage-analyzer/templates/user-story-compliance-row.md +170 -0
- package/.github/skills/custom-font-integrator/SKILL.md +373 -0
- package/.github/skills/custom-font-integrator/assets/FontTestScreen.js +150 -0
- package/.github/skills/custom-font-integrator/references/example-info-plist.xml +21 -0
- package/.github/skills/custom-font-integrator/scripts/setup-fonts.sh +99 -0
- package/.github/skills/encryption-decryption-utility/Instructions.md +282 -0
- package/.github/skills/encryption-decryption-utility/README.md +222 -0
- package/.github/skills/encryption-decryption-utility/SKILL.md +645 -0
- package/.github/skills/encryption-decryption-utility/assets/encryption-config-template.json +13 -0
- package/.github/skills/encryption-decryption-utility/assets/platform-matrix.json +180 -0
- package/.github/skills/encryption-decryption-utility/metadata.yaml +51 -0
- package/.github/skills/encryption-decryption-utility/references/android-crypto.md +157 -0
- package/.github/skills/encryption-decryption-utility/references/angular-crypto.md +130 -0
- package/.github/skills/encryption-decryption-utility/references/approach-1-webcrypto.md +95 -0
- package/.github/skills/encryption-decryption-utility/references/approach-2-rsa-aes-cbc.md +111 -0
- package/.github/skills/encryption-decryption-utility/references/approach-3-aes-sharedkey.md +114 -0
- package/.github/skills/encryption-decryption-utility/references/architecture.md +233 -0
- package/.github/skills/encryption-decryption-utility/references/backend-alignment.md +506 -0
- package/.github/skills/encryption-decryption-utility/references/dependency-guidance.md +234 -0
- package/.github/skills/encryption-decryption-utility/references/ec-implementation.md +832 -0
- package/.github/skills/encryption-decryption-utility/references/error-handling-playbook.md +234 -0
- package/.github/skills/encryption-decryption-utility/references/flutter-crypto.md +105 -0
- package/.github/skills/encryption-decryption-utility/references/ios-crypto.md +338 -0
- package/.github/skills/encryption-decryption-utility/references/native-rsa-implementation.md +373 -0
- package/.github/skills/encryption-decryption-utility/references/node-crypto.md +86 -0
- package/.github/skills/encryption-decryption-utility/references/react-crypto.md +105 -0
- package/.github/skills/encryption-decryption-utility/references/react-native-crypto.md +1001 -0
- package/.github/skills/encryption-decryption-utility/references/react-web-crypto.md +668 -0
- package/.github/skills/encryption-decryption-utility/references/security-checklist.md +176 -0
- package/.github/skills/encryption-decryption-utility/references/web-crypto.md +74 -0
- package/.github/skills/encryption-decryption-utility/scripts/detect.js +128 -0
- package/.github/skills/encryption-decryption-utility/scripts/install.js +1713 -0
- package/.github/skills/encryption-decryption-utility/scripts/setup.js +800 -0
- package/.github/skills/encryption-decryption-utility/template.md +241 -0
- package/.github/skills/encryption-decryption-utility/templates/config-questionnaire.md +467 -0
- package/.github/skills/encryption-decryption-utility/templates/delivery-checklist.md +206 -0
- package/.github/skills/encryption-decryption-utility/templates/implementation-plan.md +304 -0
- package/.github/skills/feature-generator/SKILL.MD +2741 -0
- package/.github/skills/feature-generator/assets/fingerprint-schema.json +385 -0
- package/.github/skills/feature-generator/assets/spec-template.md +172 -0
- package/.github/skills/feature-generator/assets/transform-rules.json +82 -0
- package/.github/skills/feature-generator/references/api-envelope-patterns.md +327 -0
- package/.github/skills/feature-generator/references/screen-logic-patterns.md +399 -0
- package/.github/skills/feature-generator/references/state-library-patterns.md +464 -0
- package/.github/skills/figma-ui-mapper/README.md +34 -0
- package/.github/skills/figma-ui-mapper/SKILL.md +101 -0
- package/.github/skills/figma-ui-mapper/assets/templates/component-map-template.md +30 -0
- package/.github/skills/figma-ui-mapper/assets/templates/generation-report-template.md +49 -0
- package/.github/skills/figma-ui-mapper/metadata.yaml +22 -0
- package/.github/skills/figma-ui-mapper/references/android.md +11 -0
- package/.github/skills/figma-ui-mapper/references/angular.md +18 -0
- package/.github/skills/figma-ui-mapper/references/capacitor.md +18 -0
- package/.github/skills/figma-ui-mapper/references/common.md +23 -0
- package/.github/skills/figma-ui-mapper/references/expo.md +18 -0
- package/.github/skills/figma-ui-mapper/references/flutter.md +18 -0
- package/.github/skills/figma-ui-mapper/references/frameworks/angular/rules.md +23 -0
- package/.github/skills/figma-ui-mapper/references/frameworks/capacitor/rules.md +23 -0
- package/.github/skills/figma-ui-mapper/references/frameworks/expo/rules.md +23 -0
- package/.github/skills/figma-ui-mapper/references/frameworks/flutter/rules.md +23 -0
- package/.github/skills/figma-ui-mapper/references/frameworks/ionic/rules.md +23 -0
- package/.github/skills/figma-ui-mapper/references/frameworks/kotlin-multiplatform/rules.md +23 -0
- package/.github/skills/figma-ui-mapper/references/frameworks/native-android/rules.md +23 -0
- package/.github/skills/figma-ui-mapper/references/frameworks/native-ios/rules.md +23 -0
- package/.github/skills/figma-ui-mapper/references/frameworks/next/rules.md +23 -0
- package/.github/skills/figma-ui-mapper/references/frameworks/nuxt/rules.md +23 -0
- package/.github/skills/figma-ui-mapper/references/frameworks/react/rules.md +19 -0
- package/.github/skills/figma-ui-mapper/references/frameworks/react-native/rules.md +23 -0
- package/.github/skills/figma-ui-mapper/references/frameworks/svelte/rules.md +23 -0
- package/.github/skills/figma-ui-mapper/references/frameworks/vue/rules.md +23 -0
- package/.github/skills/figma-ui-mapper/references/ionic.md +18 -0
- package/.github/skills/figma-ui-mapper/references/ios.md +11 -0
- package/.github/skills/figma-ui-mapper/references/kotlin-multiplatform.md +18 -0
- package/.github/skills/figma-ui-mapper/references/native-android.md +18 -0
- package/.github/skills/figma-ui-mapper/references/native-ios.md +18 -0
- package/.github/skills/figma-ui-mapper/references/next.md +18 -0
- package/.github/skills/figma-ui-mapper/references/nuxt.md +18 -0
- package/.github/skills/figma-ui-mapper/references/react-figma-guideline.md +21 -0
- package/.github/skills/figma-ui-mapper/references/react-native.md +18 -0
- package/.github/skills/figma-ui-mapper/references/react.md +18 -0
- package/.github/skills/figma-ui-mapper/references/script-usage.md +46 -0
- package/.github/skills/figma-ui-mapper/references/svelte.md +18 -0
- package/.github/skills/figma-ui-mapper/references/vue.md +18 -0
- package/.github/skills/figma-ui-mapper/references/workflow.md +74 -0
- package/.github/skills/figma-ui-mapper/scripts/generate-page-through-figma.js +635 -0
- package/.github/skills/figma-ui-mapper/scripts/generate-react-page-through-figma.js +4 -0
- package/.github/skills/frontend-task-breakdown/SKILL.md +734 -0
- package/.github/skills/md-file-converter/SKILL.md +291 -0
- package/.github/skills/md-file-converter/config/formats.json +114 -0
- package/.github/skills/md-file-converter/extractors/extract-docx.sh +120 -0
- package/.github/skills/md-file-converter/extractors/extract-eml.py +108 -0
- package/.github/skills/md-file-converter/extractors/extract-pdf.sh +97 -0
- package/.github/skills/md-file-converter/extractors/extract-pptx.py +143 -0
- package/.github/skills/md-file-converter/extractors/extract-xlsx.py +175 -0
- package/.github/skills/md-file-converter/scripts/check-tools.sh +47 -0
- package/.github/skills/md-file-converter/scripts/extract-archive.sh +83 -0
- package/.github/skills/md-file-converter/scripts/extract-ocr.sh +77 -0
- package/.github/skills/md-file-converter/scripts/get-metadata.sh +57 -0
- package/.github/skills/md-file-converter/templates/output.md +73 -0
- package/.github/skills/md-file-converter/templates/unsupported-object.md +6 -0
- package/.github/skills/mockAPI-contract-generator/SKILL.md +607 -0
- package/.github/skills/test-case-validator/CHANGELOG.md +155 -0
- package/.github/skills/test-case-validator/CONFIGURATION.md +130 -0
- package/.github/skills/test-case-validator/EXAMPLES.md +50 -0
- package/.github/skills/test-case-validator/QUALITY_SCORING.md +98 -0
- package/.github/skills/test-case-validator/README.md +111 -0
- package/.github/skills/test-case-validator/REPORT_TEMPLATE.md +116 -0
- package/.github/skills/test-case-validator/SKILL.md +209 -0
- package/.github/skills/test-case-validator/SYSTEM_PROMPT.md +127 -0
- package/.github/skills/test-case-validator/TRACEABILITY_ENGINE.md +152 -0
- package/.github/skills/test-case-validator/VALIDATION_RULES.md +411 -0
- package/.github/skills/test-case-validator/config/default.config.yaml +62 -0
- package/.github/skills/test-case-validator/docs/ARCHITECTURE.md +66 -0
- package/.github/skills/test-case-validator/docs/EXTENDING.md +85 -0
- package/.github/skills/test-case-validator/docs/FAQ.md +88 -0
- package/.github/skills/test-case-validator/docs/VERSIONING.md +55 -0
- package/.github/skills/test-case-validator/examples/example-1-manual-qa-ecommerce/input-brd.md +43 -0
- package/.github/skills/test-case-validator/examples/example-1-manual-qa-ecommerce/input-test-cases.csv +9 -0
- package/.github/skills/test-case-validator/examples/example-1-manual-qa-ecommerce/input-user-story.md +29 -0
- package/.github/skills/test-case-validator/examples/example-1-manual-qa-ecommerce/output-report.md +303 -0
- package/.github/skills/test-case-validator/examples/example-2-automated-frontend-suite/input-spec.md +43 -0
- package/.github/skills/test-case-validator/examples/example-2-automated-frontend-suite/input-test-files-index.md +56 -0
- package/.github/skills/test-case-validator/examples/example-2-automated-frontend-suite/output-report.md +274 -0
- package/.github/skills/test-case-validator/prompts/00-applicability-resolution.md +61 -0
- package/.github/skills/test-case-validator/prompts/01-extraction-user-story.md +58 -0
- package/.github/skills/test-case-validator/prompts/02-extraction-brd.md +64 -0
- package/.github/skills/test-case-validator/prompts/03-extraction-test-cases.md +92 -0
- package/.github/skills/test-case-validator/prompts/04-traceability-matrix.md +41 -0
- package/.github/skills/test-case-validator/prompts/05-coverage-analysis.md +46 -0
- package/.github/skills/test-case-validator/prompts/06-missing-scenario-detection.md +32 -0
- package/.github/skills/test-case-validator/prompts/07-duplicate-detection.md +36 -0
- package/.github/skills/test-case-validator/prompts/08-risk-analysis.md +39 -0
- package/.github/skills/test-case-validator/prompts/09-gated-wiring-validation.md +53 -0
- package/.github/skills/test-case-validator/prompts/10-observation-report.md +56 -0
- package/.github/skills/test-case-validator/prompts/11-final-report-assembly.md +57 -0
- package/.github/skills/test-case-validator/templates/coverage-table.md +25 -0
- package/.github/skills/test-case-validator/templates/executive-summary.md +38 -0
- package/.github/skills/test-case-validator/templates/final-summary-block.md +87 -0
- package/.github/skills/test-case-validator/templates/observation-entry.md +41 -0
- package/.github/skills/test-case-validator/templates/rtm-row.md +25 -0
- package/.github/skills/validation-engine-builder/README.md +50 -0
- package/.github/skills/validation-engine-builder/SKILL.md +241 -0
- package/.github/skills/validation-engine-builder/references/core.md +158 -0
- package/.github/skills/validation-engine-builder/references/platform-angular.md +166 -0
- package/.github/skills/validation-engine-builder/references/platform-flutter.md +118 -0
- package/.github/skills/validation-engine-builder/references/platform-react-native.md +170 -0
- package/.github/skills/validation-engine-builder/references/platform-react.md +94 -0
- package/.github/skills/validation-engine-builder/scripts/apply-to-project.js +80 -0
- package/.github/skills/validation-engine-builder/scripts/generate-angular.js +271 -0
- package/.github/skills/validation-engine-builder/scripts/generate-flutter.js +298 -0
- package/.github/skills/validation-engine-builder/scripts/generate-react-native.js +217 -0
- package/.github/skills/validation-engine-builder/scripts/generate-react.js +163 -0
- package/.github/skills/validation-engine-builder/scripts/install-deps.js +53 -0
- package/.github/skills/validation-engine-builder/scripts/shared/detect-platform.js +68 -0
- package/.github/skills/validation-engine-builder/scripts/shared/npm-deps.js +103 -0
- package/.github/skills/validation-engine-builder/scripts/shared/rhf-hook.js +43 -0
- package/.github/skills/validation-engine-builder/scripts/shared/ts-messages-regex.js +62 -0
- package/.github/skills/validation-engine-builder/scripts/shared/util.js +44 -0
- package/.github/skills/validation-engine-builder/scripts/shared/yup-schemas.js +80 -0
- package/.github/skills/validation-engine-builder/template.md +73 -0
- package/.github/skills/validation-engine-builder/templates/messages.json +22 -0
- package/.github/skills/validation-engine-builder/templates/regex.json +16 -0
- package/.github/skills/validation-engine-builder/templates/schemas.json +48 -0
- package/bin/index.js +145 -0
- package/package.json +22 -0
- package/readme.md +0 -0
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
# React Native — Reference Guide
|
|
2
|
+
|
|
3
|
+
## Direct Script Invocation
|
|
4
|
+
|
|
5
|
+
For React Native projects, call the generator script directly with all flags:
|
|
6
|
+
|
|
7
|
+
```powershell
|
|
8
|
+
node .github/skills/boiler-project-generator/scripts/react-native.js \
|
|
9
|
+
--project MyApp \
|
|
10
|
+
--language typescript \
|
|
11
|
+
--enableNavigation yes \
|
|
12
|
+
--enableRedux yes \
|
|
13
|
+
--enableEnv yes \
|
|
14
|
+
--verificationTarget none
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
The script handles everything end-to-end: scaffold, dependencies, templates, compatibility verification, and summary.
|
|
18
|
+
|
|
19
|
+
## Progress Steps
|
|
20
|
+
|
|
21
|
+
The script prints numbered progress steps so you know it is still running:
|
|
22
|
+
|
|
23
|
+
1. `[1/6]` Installing core packages (axios, react-native-config)
|
|
24
|
+
2. `[2/6]` Installing navigation packages (or skipped)
|
|
25
|
+
3. `[3/6]` Installing Redux Toolkit (or skipped)
|
|
26
|
+
4. `[4/6]` Installing environment config (or skipped)
|
|
27
|
+
5. `[5/6]` Applying templates and wiring entry point
|
|
28
|
+
6. `[6/6]` Verifying dependency compatibility
|
|
29
|
+
|
|
30
|
+
Do NOT interrupt the script between these steps. Package installs can take several minutes.
|
|
31
|
+
|
|
32
|
+
## Navigation and Reanimated Compatibility
|
|
33
|
+
|
|
34
|
+
| React Native | Reanimated | Gesture Handler | Screens | Safe Area Context | Worklets |
|
|
35
|
+
|---|---|---|---|---|---|
|
|
36
|
+
| 0.79.x | 3.16.1 | 2.20.2 | 4.4.0 | 4.14.0 | N/A |
|
|
37
|
+
| 0.80+ / latest | 4.x | latest | latest | latest | Required |
|
|
38
|
+
|
|
39
|
+
- For RN 0.80+, always install `react-native-worklets` explicitly alongside `react-native-reanimated@4`.
|
|
40
|
+
- Do NOT use the 0.79.x pinned versions on 0.80+ — they cause Android build failures due to removed APIs (`LayoutAnimationController`, `UIManagerModuleListener`, `ChoreographerCompat`).
|
|
41
|
+
- The script automatically resolves the actual installed RN version (handles `latest` input) and selects the correct package set.
|
|
42
|
+
|
|
43
|
+
## Dependency Compatibility
|
|
44
|
+
|
|
45
|
+
After all packages are installed, the script runs `npm ls --depth=0` to detect peer dependency issues.
|
|
46
|
+
|
|
47
|
+
- If issues are found, it attempts a clean reinstall (`rm node_modules + npm install`).
|
|
48
|
+
- If version-pinned packages cause ERESOLVE conflicts during install, the script retries with unpinned versions to auto-resolve compatible ones.
|
|
49
|
+
- Remaining issues are reported as warnings in the final summary.
|
|
50
|
+
|
|
51
|
+
## Generated Project Structure
|
|
52
|
+
|
|
53
|
+
```
|
|
54
|
+
<ProjectName>/
|
|
55
|
+
src/
|
|
56
|
+
assets/image/
|
|
57
|
+
components/PrimaryButton.tsx
|
|
58
|
+
features/
|
|
59
|
+
auth/AuthScreen.tsx
|
|
60
|
+
dashboard/DashboardScreen.tsx
|
|
61
|
+
profile/ProfileScreen.tsx
|
|
62
|
+
hooks/useAppBoot.ts
|
|
63
|
+
navigation/RootNavigator.tsx (if enableNavigation=yes)
|
|
64
|
+
services/api.ts
|
|
65
|
+
store/ (if enableRedux=yes)
|
|
66
|
+
store.ts
|
|
67
|
+
hooks.ts
|
|
68
|
+
sessionSlice.ts
|
|
69
|
+
theme/index.ts
|
|
70
|
+
utils/helpers.ts
|
|
71
|
+
.env.uat (if enableEnv=yes)
|
|
72
|
+
.env.staging (if enableEnv=yes)
|
|
73
|
+
.env.prod (if enableEnv=yes)
|
|
74
|
+
App.tsx
|
|
75
|
+
babel.config.js
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
## Post-Generation
|
|
79
|
+
|
|
80
|
+
- Replace placeholder API URLs in `.env.*` with real endpoints.
|
|
81
|
+
- Add app icons and splash screen assets to `src/assets/image/`.
|
|
82
|
+
- Extend `RootNavigator.tsx` with additional screens.
|
|
83
|
+
- Wire auth token logic into `useAppBoot.ts`.
|
|
84
|
+
|
|
85
|
+
## Verification
|
|
86
|
+
|
|
87
|
+
The script runs lint, typecheck, and tests automatically after generation. Platform builds (Android/iOS) run only when `--verificationTarget` is set.
|
|
88
|
+
|
|
89
|
+
To manually verify TypeScript:
|
|
90
|
+
|
|
91
|
+
```bash
|
|
92
|
+
cd <ProjectName>
|
|
93
|
+
npx tsc --noEmit
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
## Troubleshooting
|
|
97
|
+
|
|
98
|
+
| Error | Fix |
|
|
99
|
+
|-------|-----|
|
|
100
|
+
| `ERESOLVE` dependency conflict | Script auto-retries with unpinned versions, then clean reinstall |
|
|
101
|
+
| Android build fails with reanimated/worklets error | Script auto-adds `react-native-worklets` and retries |
|
|
102
|
+
| `pod install` fails | Run `cd ios && pod install --repo-update` manually (macOS only) |
|
|
103
|
+
| Terminal appears stuck during init | The `react-native init` step takes several minutes — wait for it |
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# React Reference: Post-generation Validation and Notes
|
|
2
|
+
|
|
3
|
+
This reference contains React-specific guidance for the `boiler-project-generator` skill. Use these steps when `framework=react` or generating React projects.
|
|
4
|
+
|
|
5
|
+
1. After the generator finishes, change directory into the generated project: `cd <projectName>`.
|
|
6
|
+
2. Install dependencies: `npm install` or `yarn`.
|
|
7
|
+
3. Run static analysis and linting: `npm run lint` (ensure an ESLint config exists).
|
|
8
|
+
4. Run tests: `npm test`.
|
|
9
|
+
5. Build the production bundle: `npm run build` and verify the `build/` output.
|
|
10
|
+
|
|
11
|
+
Validation notes
|
|
12
|
+
- Capture lint warnings/errors and test failures into the skill report JSON.
|
|
13
|
+
- Verify the project includes a README, license, and CI workflow for common platforms (GitHub Actions, Azure Pipelines, etc.).
|
|
14
|
+
|
|
15
|
+
CI guidance
|
|
16
|
+
- Use Node.js official runner images and cache `node_modules` between runs.
|
|
17
|
+
- For static hosting, ensure build artifacts are uploaded to the expected artifact path.
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
const { execSync } = require('node:child_process');
|
|
2
|
+
|
|
3
|
+
function getFlag(name) {
|
|
4
|
+
const idx = process.argv.indexOf(name);
|
|
5
|
+
if (idx === -1) return null;
|
|
6
|
+
return process.argv[idx + 1] || null;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
if (process.argv.includes('--help') || process.argv.includes('-h')) {
|
|
10
|
+
console.log('Usage: node angular.js <projectName> <language> [--template <name>]');
|
|
11
|
+
process.exit(0);
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
const projectName = getFlag('--project') || process.argv[2] || 'my-angular-app';
|
|
15
|
+
const language = getFlag('--language') || process.argv[3] || 'typescript';
|
|
16
|
+
const template = getFlag('--template');
|
|
17
|
+
const buildEnv = { ...process.env, NG_CLI_ANALYTICS: 'false' };
|
|
18
|
+
|
|
19
|
+
console.log('Creating Angular project...');
|
|
20
|
+
|
|
21
|
+
if (language === 'javascript') {
|
|
22
|
+
console.log('Angular CLI generates TypeScript projects. Proceeding with TypeScript.');
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
const templateArg = '';
|
|
26
|
+
// template currently not used for Angular CLI, reserved for future templates
|
|
27
|
+
|
|
28
|
+
execSync(
|
|
29
|
+
`npx @angular/cli@latest new ${projectName} --routing --style=scss --defaults ${templateArg}`,
|
|
30
|
+
{ stdio: 'inherit', env: buildEnv }
|
|
31
|
+
);
|
|
32
|
+
|
|
33
|
+
console.log(`Validating Angular project in ${projectName}...`);
|
|
34
|
+
|
|
35
|
+
try {
|
|
36
|
+
execSync('npm run build', { cwd: projectName, stdio: 'inherit', env: buildEnv });
|
|
37
|
+
} catch (err) {
|
|
38
|
+
console.error('Build failed during validation:', err.message);
|
|
39
|
+
process.exit(2);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
console.log('Angular project ready!');
|
|
43
|
+
console.log(`Run future Angular commands from inside ${projectName}.`);
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { spawnSync } from 'node:child_process';
|
|
3
|
+
import fs from 'node:fs';
|
|
4
|
+
import path from 'node:path';
|
|
5
|
+
import { fileURLToPath } from 'node:url';
|
|
6
|
+
|
|
7
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
8
|
+
const __dirname = path.dirname(__filename);
|
|
9
|
+
|
|
10
|
+
function parseFlag(name) {
|
|
11
|
+
const idx = process.argv.indexOf(name);
|
|
12
|
+
if (idx === -1) return null;
|
|
13
|
+
return process.argv[idx + 1] || null;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
function hasFlag(name) {
|
|
17
|
+
return process.argv.includes(name);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
function showHelp() {
|
|
21
|
+
console.log('Usage: node generate-project.mjs --framework <angular|react|react-native|other> --language <javascript|typescript> --project <name> [--template <name>] [--dry-run] [--force]');
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
if (hasFlag('--help') || hasFlag('-h')) {
|
|
25
|
+
showHelp();
|
|
26
|
+
process.exit(0);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
const framework = parseFlag('--framework') || 'angular';
|
|
30
|
+
const language = parseFlag('--language') || 'javascript';
|
|
31
|
+
const project = parseFlag('--project') || `my-${framework}-app`;
|
|
32
|
+
const template = parseFlag('--template') || 'minimal';
|
|
33
|
+
const dryRun = hasFlag('--dry-run');
|
|
34
|
+
const force = hasFlag('--force');
|
|
35
|
+
|
|
36
|
+
const reportDir = path.join(process.cwd(), 'artifacts', 'boiler-generator');
|
|
37
|
+
if (!fs.existsSync(reportDir)) fs.mkdirSync(reportDir, { recursive: true });
|
|
38
|
+
const reportPath = path.join(reportDir, `${project}-report.json`);
|
|
39
|
+
|
|
40
|
+
const report = {
|
|
41
|
+
projectName: project,
|
|
42
|
+
framework,
|
|
43
|
+
language,
|
|
44
|
+
template,
|
|
45
|
+
dryRun,
|
|
46
|
+
force,
|
|
47
|
+
timestamp: new Date().toISOString(),
|
|
48
|
+
status: 'pending',
|
|
49
|
+
steps: []
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
function writeReportAndExit(code) {
|
|
53
|
+
try {
|
|
54
|
+
// Deterministic fields ordering
|
|
55
|
+
const out = {
|
|
56
|
+
projectName: report.projectName,
|
|
57
|
+
framework: report.framework,
|
|
58
|
+
language: report.language,
|
|
59
|
+
template: report.template,
|
|
60
|
+
dryRun: report.dryRun,
|
|
61
|
+
force: report.force,
|
|
62
|
+
timestamp: report.timestamp,
|
|
63
|
+
status: report.status,
|
|
64
|
+
steps: report.steps
|
|
65
|
+
};
|
|
66
|
+
fs.writeFileSync(reportPath, JSON.stringify(out, null, 2));
|
|
67
|
+
console.log('Wrote report to', reportPath);
|
|
68
|
+
} catch (err) {
|
|
69
|
+
console.error('Failed to write report:', err.message);
|
|
70
|
+
}
|
|
71
|
+
process.exit(code);
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
report.steps.push({ step: 'validate-inputs', ok: true, details: 'Inputs parsed' });
|
|
75
|
+
|
|
76
|
+
if (dryRun) {
|
|
77
|
+
report.status = 'dry-run';
|
|
78
|
+
report.steps.push({ step: 'dry-run', ok: true, details: `Would invoke framework script for ${framework} with template ${template}` });
|
|
79
|
+
writeReportAndExit(0);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
// Invoke the existing init.js orchestrator with flags for deterministic execution
|
|
83
|
+
const node = process.execPath;
|
|
84
|
+
const initScript = path.join(__dirname, 'init.js');
|
|
85
|
+
const args = [initScript, '--framework', framework, '--language', language, '--project', project];
|
|
86
|
+
if (template) args.push('--template', template);
|
|
87
|
+
if (force) args.push('--force');
|
|
88
|
+
|
|
89
|
+
report.steps.push({ step: 'invoke-orchestrator', ok: null, details: `Running: ${node} ${args.join(' ')}` });
|
|
90
|
+
|
|
91
|
+
const res = spawnSync(node, args, { stdio: 'inherit' });
|
|
92
|
+
|
|
93
|
+
if (res.error) {
|
|
94
|
+
report.status = 'failed';
|
|
95
|
+
report.steps.push({ step: 'invoke-orchestrator', ok: false, details: res.error.message });
|
|
96
|
+
writeReportAndExit(2);
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
if (res.status !== 0) {
|
|
100
|
+
report.status = 'failed';
|
|
101
|
+
report.steps.push({ step: 'orchestrator-exit', ok: false, details: `exitCode=${res.status}` });
|
|
102
|
+
writeReportAndExit(res.status);
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
report.status = 'success';
|
|
106
|
+
report.steps.push({ step: 'orchestrator-exit', ok: true, details: 'orchestrator completed successfully' });
|
|
107
|
+
writeReportAndExit(0);
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
const path = require('node:path');
|
|
2
|
+
const readline = require('node:readline');
|
|
3
|
+
const { execFileSync } = require('node:child_process');
|
|
4
|
+
|
|
5
|
+
function parseFlag(name) {
|
|
6
|
+
const idx = process.argv.indexOf(name);
|
|
7
|
+
if (idx === -1) return null;
|
|
8
|
+
return process.argv[idx + 1] || null;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
function showHelp() {
|
|
12
|
+
console.log('Usage: node init.js [--framework <angular|react|react-native|other>] [--language <javascript|typescript>] [--project <name>] [--template <name>] [-- additional flags]');
|
|
13
|
+
console.log('Additional framework-specific flags (e.g. --enableNavigation, --enableRedux) are forwarded to the child script.');
|
|
14
|
+
console.log('If no flags provided, runs interactive prompt.');
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
function runScript(scriptName, projectName, language, template) {
|
|
18
|
+
const args = [path.join(__dirname, scriptName)];
|
|
19
|
+
if (projectName) args.push(projectName);
|
|
20
|
+
if (language) args.push(language);
|
|
21
|
+
if (template) args.push('--template', template);
|
|
22
|
+
|
|
23
|
+
// Forward any additional CLI flags not consumed by init.js to the child script
|
|
24
|
+
const consumed = new Set(['--framework', '--language', '--project', '--template', '--help', '-h']);
|
|
25
|
+
for (let i = 2; i < process.argv.length; i += 1) {
|
|
26
|
+
const token = process.argv[i];
|
|
27
|
+
if (!token.startsWith('--')) continue;
|
|
28
|
+
if (consumed.has(token)) {
|
|
29
|
+
if (process.argv[i + 1] && !process.argv[i + 1].startsWith('--')) i += 1;
|
|
30
|
+
continue;
|
|
31
|
+
}
|
|
32
|
+
args.push(token);
|
|
33
|
+
if (process.argv[i + 1] && !process.argv[i + 1].startsWith('--')) {
|
|
34
|
+
i += 1;
|
|
35
|
+
args.push(process.argv[i]);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
execFileSync(process.execPath, args, { stdio: 'inherit' });
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
const frameworkFlag = parseFlag('--framework');
|
|
43
|
+
const languageFlag = parseFlag('--language');
|
|
44
|
+
const projectFlag = parseFlag('--project');
|
|
45
|
+
const templateFlag = parseFlag('--template');
|
|
46
|
+
|
|
47
|
+
if (process.argv.includes('--help') || process.argv.includes('-h')) {
|
|
48
|
+
showHelp();
|
|
49
|
+
process.exit(0);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
if (frameworkFlag) {
|
|
53
|
+
const framework = frameworkFlag.toLowerCase();
|
|
54
|
+
const language = languageFlag || 'javascript';
|
|
55
|
+
const projectName = projectFlag || 'my-app';
|
|
56
|
+
|
|
57
|
+
switch (framework) {
|
|
58
|
+
case 'angular':
|
|
59
|
+
runScript('angular.js', projectName, language, templateFlag);
|
|
60
|
+
break;
|
|
61
|
+
case 'react':
|
|
62
|
+
runScript('react.js', projectName, language, templateFlag);
|
|
63
|
+
break;
|
|
64
|
+
case 'react-native':
|
|
65
|
+
runScript('react-native.js', projectName, language, templateFlag);
|
|
66
|
+
break;
|
|
67
|
+
default:
|
|
68
|
+
console.log(`Custom framework selected: ${framework}. Extend script here.`);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
process.exit(0);
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
// Interactive fallback
|
|
75
|
+
const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
|
|
76
|
+
|
|
77
|
+
rl.question(
|
|
78
|
+
`Select technology:\n1. Angular\n2. React\n3. React Native\n4. Other\n\nEnter choice: `,
|
|
79
|
+
(choice) => {
|
|
80
|
+
rl.question(`Select language:\n1. JavaScript\n2. TypeScript\n\nEnter choice: `, (languageChoice) => {
|
|
81
|
+
const language = languageChoice === '2' ? 'typescript' : 'javascript';
|
|
82
|
+
|
|
83
|
+
rl.question('Enter project name: ', (projectName) => {
|
|
84
|
+
switch (choice) {
|
|
85
|
+
case '1':
|
|
86
|
+
runScript('angular.js', projectName, language, templateFlag);
|
|
87
|
+
break;
|
|
88
|
+
case '2':
|
|
89
|
+
runScript('react.js', projectName, language, templateFlag);
|
|
90
|
+
break;
|
|
91
|
+
case '3':
|
|
92
|
+
runScript('react-native.js', projectName, language, templateFlag);
|
|
93
|
+
break;
|
|
94
|
+
case '4':
|
|
95
|
+
console.log(`Custom framework selected with ${language}. Extend script here.`);
|
|
96
|
+
break;
|
|
97
|
+
default:
|
|
98
|
+
console.log('Invalid choice');
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
rl.close();
|
|
102
|
+
});
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
);
|