@mytechtoday/augment-extensions 0.1.2 → 0.4.0
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/README.md +614 -39
- package/augment-extensions/coding-standards/bash/README.md +196 -0
- package/augment-extensions/coding-standards/bash/module.json +163 -0
- package/augment-extensions/coding-standards/bash/rules/naming-conventions.md +336 -0
- package/augment-extensions/coding-standards/bash/rules/universal-standards.md +289 -0
- package/augment-extensions/coding-standards/css/README.md +40 -0
- package/augment-extensions/coding-standards/css/examples/css-examples.css +550 -0
- package/augment-extensions/coding-standards/css/module.json +44 -0
- package/augment-extensions/coding-standards/css/rules/css-modern-features.md +448 -0
- package/augment-extensions/coding-standards/css/rules/css-standards.md +492 -0
- package/augment-extensions/coding-standards/html/README.md +40 -0
- package/augment-extensions/coding-standards/html/examples/html-examples.html +267 -0
- package/augment-extensions/coding-standards/html/examples/responsive-layout.html +505 -0
- package/augment-extensions/coding-standards/html/module.json +44 -0
- package/augment-extensions/coding-standards/html/rules/html-standards.md +349 -0
- package/augment-extensions/coding-standards/html-css-js/README.md +194 -0
- package/augment-extensions/coding-standards/html-css-js/examples/async-examples.js +487 -0
- package/augment-extensions/coding-standards/html-css-js/examples/css-examples.css +550 -0
- package/augment-extensions/coding-standards/html-css-js/examples/dom-examples.js +667 -0
- package/augment-extensions/coding-standards/html-css-js/examples/html-examples.html +267 -0
- package/augment-extensions/coding-standards/html-css-js/examples/javascript-examples.js +612 -0
- package/augment-extensions/coding-standards/html-css-js/examples/responsive-layout.html +505 -0
- package/augment-extensions/coding-standards/html-css-js/module.json +48 -0
- package/augment-extensions/coding-standards/html-css-js/rules/async-patterns.md +515 -0
- package/augment-extensions/coding-standards/html-css-js/rules/css-modern-features.md +448 -0
- package/augment-extensions/coding-standards/html-css-js/rules/css-standards.md +492 -0
- package/augment-extensions/coding-standards/html-css-js/rules/dom-manipulation.md +439 -0
- package/augment-extensions/coding-standards/html-css-js/rules/html-standards.md +349 -0
- package/augment-extensions/coding-standards/html-css-js/rules/javascript-standards.md +486 -0
- package/augment-extensions/coding-standards/html-css-js/rules/performance.md +463 -0
- package/augment-extensions/coding-standards/html-css-js/rules/tooling.md +543 -0
- package/augment-extensions/coding-standards/js/README.md +46 -0
- package/augment-extensions/coding-standards/js/examples/async-examples.js +487 -0
- package/augment-extensions/coding-standards/js/examples/dom-examples.js +667 -0
- package/augment-extensions/coding-standards/js/examples/javascript-examples.js +612 -0
- package/augment-extensions/coding-standards/js/module.json +49 -0
- package/augment-extensions/coding-standards/js/rules/async-patterns.md +515 -0
- package/augment-extensions/coding-standards/js/rules/dom-manipulation.md +439 -0
- package/augment-extensions/coding-standards/js/rules/javascript-standards.md +486 -0
- package/augment-extensions/coding-standards/js/rules/performance.md +463 -0
- package/augment-extensions/coding-standards/js/rules/tooling.md +543 -0
- package/augment-extensions/coding-standards/php/README.md +248 -0
- package/augment-extensions/coding-standards/php/examples/api-endpoint-example.php +204 -0
- package/augment-extensions/coding-standards/php/examples/cli-command-example.php +206 -0
- package/augment-extensions/coding-standards/php/examples/legacy-refactoring-example.php +234 -0
- package/augment-extensions/coding-standards/php/examples/web-application-example.php +211 -0
- package/augment-extensions/coding-standards/php/examples/woocommerce-extension-example.php +215 -0
- package/augment-extensions/coding-standards/php/examples/wordpress-plugin-example.php +189 -0
- package/augment-extensions/coding-standards/php/module.json +166 -0
- package/augment-extensions/coding-standards/php/rules/api-development.md +480 -0
- package/augment-extensions/coding-standards/php/rules/category-configuration.md +332 -0
- package/augment-extensions/coding-standards/php/rules/cli-tools.md +472 -0
- package/augment-extensions/coding-standards/php/rules/cms-integration.md +561 -0
- package/augment-extensions/coding-standards/php/rules/code-quality.md +402 -0
- package/augment-extensions/coding-standards/php/rules/documentation.md +425 -0
- package/augment-extensions/coding-standards/php/rules/ecommerce.md +627 -0
- package/augment-extensions/coding-standards/php/rules/error-handling.md +336 -0
- package/augment-extensions/coding-standards/php/rules/legacy-migration.md +677 -0
- package/augment-extensions/coding-standards/php/rules/naming-conventions.md +279 -0
- package/augment-extensions/coding-standards/php/rules/performance.md +392 -0
- package/augment-extensions/coding-standards/php/rules/psr-standards.md +186 -0
- package/augment-extensions/coding-standards/php/rules/security.md +358 -0
- package/augment-extensions/coding-standards/php/rules/testing.md +403 -0
- package/augment-extensions/coding-standards/php/rules/type-declarations.md +331 -0
- package/augment-extensions/coding-standards/php/rules/web-applications.md +426 -0
- package/augment-extensions/coding-standards/powershell/README.md +154 -0
- package/augment-extensions/coding-standards/powershell/examples/admin-example.ps1 +272 -0
- package/augment-extensions/coding-standards/powershell/examples/automation-example.ps1 +173 -0
- package/augment-extensions/coding-standards/powershell/examples/cloud-example.ps1 +243 -0
- package/augment-extensions/coding-standards/powershell/examples/cross-platform-example.ps1 +297 -0
- package/augment-extensions/coding-standards/powershell/examples/dsc-example.ps1 +224 -0
- package/augment-extensions/coding-standards/powershell/examples/legacy-migration-example.ps1 +340 -0
- package/augment-extensions/coding-standards/powershell/examples/module-example.psm1 +255 -0
- package/augment-extensions/coding-standards/powershell/module.json +165 -0
- package/augment-extensions/coding-standards/powershell/rules/administrative-tools.md +439 -0
- package/augment-extensions/coding-standards/powershell/rules/automation-scripts.md +240 -0
- package/augment-extensions/coding-standards/powershell/rules/cloud-orchestration.md +384 -0
- package/augment-extensions/coding-standards/powershell/rules/configuration-schema.md +383 -0
- package/augment-extensions/coding-standards/powershell/rules/cross-platform-scripts.md +482 -0
- package/augment-extensions/coding-standards/powershell/rules/dsc-configurations.md +296 -0
- package/augment-extensions/coding-standards/powershell/rules/error-handling.md +314 -0
- package/augment-extensions/coding-standards/powershell/rules/legacy-migrations.md +466 -0
- package/augment-extensions/coding-standards/powershell/rules/modules-functions.md +244 -0
- package/augment-extensions/coding-standards/powershell/rules/naming-conventions.md +266 -0
- package/augment-extensions/coding-standards/powershell/rules/performance-optimization.md +209 -0
- package/augment-extensions/coding-standards/powershell/rules/security-practices.md +314 -0
- package/augment-extensions/coding-standards/powershell/rules/testing-guidelines.md +268 -0
- package/augment-extensions/coding-standards/powershell/rules/universal-standards.md +197 -0
- package/augment-extensions/coding-standards/python/README.md +12 -8
- package/augment-extensions/coding-standards/python/examples/best-practices.py +373 -0
- package/augment-extensions/coding-standards/python/module.json +8 -4
- package/augment-extensions/coding-standards/python/rules/async-patterns.md +884 -0
- package/augment-extensions/coding-standards/python/rules/documentation.md +831 -0
- package/augment-extensions/coding-standards/python/rules/error-handling.md +855 -68
- package/augment-extensions/coding-standards/python/rules/testing.md +409 -0
- package/augment-extensions/coding-standards/python/rules/tooling.md +446 -0
- package/augment-extensions/coding-standards/python/rules/type-hints.md +115 -50
- package/augment-extensions/collections/html-css-js/README.md +82 -0
- package/augment-extensions/collections/html-css-js/collection.json +41 -0
- package/augment-extensions/domain-rules/database/README.md +161 -0
- package/augment-extensions/domain-rules/database/examples/flat-database-example.md +793 -0
- package/augment-extensions/domain-rules/database/examples/hybrid-database-example.md +1132 -0
- package/augment-extensions/domain-rules/database/examples/nosql-document-example.md +868 -0
- package/augment-extensions/domain-rules/database/examples/nosql-graph-example.md +805 -0
- package/augment-extensions/domain-rules/database/examples/relational-schema-example.md +621 -0
- package/augment-extensions/domain-rules/database/examples/vector-database-example.md +965 -0
- package/augment-extensions/domain-rules/database/module.json +28 -0
- package/augment-extensions/domain-rules/database/rules/flat-databases.md +624 -0
- package/augment-extensions/domain-rules/database/rules/nosql-databases.md +588 -0
- package/augment-extensions/domain-rules/database/rules/nosql-document-stores.md +856 -0
- package/augment-extensions/domain-rules/database/rules/nosql-graph-databases.md +778 -0
- package/augment-extensions/domain-rules/database/rules/nosql-key-value-stores.md +963 -0
- package/augment-extensions/domain-rules/database/rules/performance-optimization.md +1076 -0
- package/augment-extensions/domain-rules/database/rules/relational-databases.md +697 -0
- package/augment-extensions/domain-rules/database/rules/relational-indexing.md +671 -0
- package/augment-extensions/domain-rules/database/rules/relational-query-optimization.md +607 -0
- package/augment-extensions/domain-rules/database/rules/relational-schema-design.md +907 -0
- package/augment-extensions/domain-rules/database/rules/relational-transactions.md +783 -0
- package/augment-extensions/domain-rules/database/rules/security-standards.md +980 -0
- package/augment-extensions/domain-rules/database/rules/universal-best-practices.md +485 -0
- package/augment-extensions/domain-rules/database/rules/vector-databases.md +521 -0
- package/augment-extensions/domain-rules/database/rules/vector-embeddings.md +858 -0
- package/augment-extensions/domain-rules/database/rules/vector-indexing.md +934 -0
- package/augment-extensions/domain-rules/mcp/README.md +150 -0
- package/augment-extensions/domain-rules/mcp/examples/compressed-example.md +522 -0
- package/augment-extensions/domain-rules/mcp/examples/graph-augmented-example.md +520 -0
- package/augment-extensions/domain-rules/mcp/examples/hybrid-example.md +570 -0
- package/augment-extensions/domain-rules/mcp/examples/state-based-example.md +427 -0
- package/augment-extensions/domain-rules/mcp/examples/token-based-example.md +435 -0
- package/augment-extensions/domain-rules/mcp/examples/vector-based-example.md +502 -0
- package/augment-extensions/domain-rules/mcp/module.json +49 -0
- package/augment-extensions/domain-rules/mcp/rules/compressed-mcp.md +595 -0
- package/augment-extensions/domain-rules/mcp/rules/configuration.md +345 -0
- package/augment-extensions/domain-rules/mcp/rules/graph-augmented-mcp.md +687 -0
- package/augment-extensions/domain-rules/mcp/rules/hybrid-mcp.md +636 -0
- package/augment-extensions/domain-rules/mcp/rules/state-based-mcp.md +484 -0
- package/augment-extensions/domain-rules/mcp/rules/testing-validation.md +360 -0
- package/augment-extensions/domain-rules/mcp/rules/token-based-mcp.md +393 -0
- package/augment-extensions/domain-rules/mcp/rules/universal-rules.md +194 -0
- package/augment-extensions/domain-rules/mcp/rules/vector-based-mcp.md +625 -0
- package/augment-extensions/domain-rules/wordpress/README.md +163 -0
- package/augment-extensions/domain-rules/wordpress/module.json +32 -0
- package/augment-extensions/domain-rules/wordpress/rules/coding-standards.md +617 -0
- package/augment-extensions/domain-rules/wordpress/rules/directory-structure.md +270 -0
- package/augment-extensions/domain-rules/wordpress/rules/file-patterns.md +423 -0
- package/augment-extensions/domain-rules/wordpress/rules/gutenberg-blocks.md +493 -0
- package/augment-extensions/domain-rules/wordpress/rules/performance.md +568 -0
- package/augment-extensions/domain-rules/wordpress/rules/plugin-development.md +510 -0
- package/augment-extensions/domain-rules/wordpress/rules/project-detection.md +251 -0
- package/augment-extensions/domain-rules/wordpress/rules/rest-api.md +501 -0
- package/augment-extensions/domain-rules/wordpress/rules/security.md +564 -0
- package/augment-extensions/domain-rules/wordpress/rules/theme-development.md +388 -0
- package/augment-extensions/domain-rules/wordpress/rules/woocommerce.md +441 -0
- package/augment-extensions/domain-rules/wordpress-plugin/README.md +139 -0
- package/augment-extensions/domain-rules/wordpress-plugin/examples/ajax-plugin.md +1599 -0
- package/augment-extensions/domain-rules/wordpress-plugin/examples/custom-post-type-plugin.md +1727 -0
- package/augment-extensions/domain-rules/wordpress-plugin/examples/gutenberg-block-plugin.md +428 -0
- package/augment-extensions/domain-rules/wordpress-plugin/examples/gutenberg-block.md +422 -0
- package/augment-extensions/domain-rules/wordpress-plugin/examples/mvc-plugin.md +1623 -0
- package/augment-extensions/domain-rules/wordpress-plugin/examples/object-oriented-plugin.md +1343 -0
- package/augment-extensions/domain-rules/wordpress-plugin/examples/rest-endpoint.md +734 -0
- package/augment-extensions/domain-rules/wordpress-plugin/examples/settings-page-plugin.md +1350 -0
- package/augment-extensions/domain-rules/wordpress-plugin/examples/simple-procedural-plugin.md +503 -0
- package/augment-extensions/domain-rules/wordpress-plugin/examples/singleton-plugin.md +971 -0
- package/augment-extensions/domain-rules/wordpress-plugin/module.json +53 -0
- package/augment-extensions/domain-rules/wordpress-plugin/rules/activation-hooks.md +770 -0
- package/augment-extensions/domain-rules/wordpress-plugin/rules/admin-interface.md +874 -0
- package/augment-extensions/domain-rules/wordpress-plugin/rules/ajax-handlers.md +629 -0
- package/augment-extensions/domain-rules/wordpress-plugin/rules/asset-management.md +559 -0
- package/augment-extensions/domain-rules/wordpress-plugin/rules/context-providers.md +709 -0
- package/augment-extensions/domain-rules/wordpress-plugin/rules/cron-jobs.md +736 -0
- package/augment-extensions/domain-rules/wordpress-plugin/rules/database-management.md +1057 -0
- package/augment-extensions/domain-rules/wordpress-plugin/rules/documentation-standards.md +463 -0
- package/augment-extensions/domain-rules/wordpress-plugin/rules/frontend-functionality.md +478 -0
- package/augment-extensions/domain-rules/wordpress-plugin/rules/gutenberg-blocks.md +818 -0
- package/augment-extensions/domain-rules/wordpress-plugin/rules/internationalization.md +416 -0
- package/augment-extensions/domain-rules/wordpress-plugin/rules/migration.md +667 -0
- package/augment-extensions/domain-rules/wordpress-plugin/rules/performance-optimization.md +878 -0
- package/augment-extensions/domain-rules/wordpress-plugin/rules/plugin-architecture.md +693 -0
- package/augment-extensions/domain-rules/wordpress-plugin/rules/plugin-structure.md +352 -0
- package/augment-extensions/domain-rules/wordpress-plugin/rules/rest-api.md +818 -0
- package/augment-extensions/domain-rules/wordpress-plugin/rules/scaffolding-workflow.md +624 -0
- package/augment-extensions/domain-rules/wordpress-plugin/rules/security-best-practices.md +866 -0
- package/augment-extensions/domain-rules/wordpress-plugin/rules/testing-patterns.md +1165 -0
- package/augment-extensions/domain-rules/wordpress-plugin/rules/testing.md +414 -0
- package/augment-extensions/domain-rules/wordpress-plugin/rules/vscode-integration.md +751 -0
- package/augment-extensions/domain-rules/wordpress-plugin/rules/woocommerce-integration.md +949 -0
- package/augment-extensions/domain-rules/wordpress-plugin/rules/wordpress-org-submission.md +458 -0
- package/augment-extensions/examples/gutenberg-block-plugin/README.md +101 -0
- package/augment-extensions/examples/gutenberg-block-plugin/examples/testimonial-block.md +428 -0
- package/augment-extensions/examples/gutenberg-block-plugin/module.json +40 -0
- package/augment-extensions/examples/rest-api-plugin/README.md +98 -0
- package/augment-extensions/examples/rest-api-plugin/examples/task-manager-api.md +1299 -0
- package/augment-extensions/examples/rest-api-plugin/module.json +40 -0
- package/augment-extensions/examples/woocommerce-extension/README.md +98 -0
- package/augment-extensions/examples/woocommerce-extension/examples/product-customizer.md +763 -0
- package/augment-extensions/examples/woocommerce-extension/module.json +40 -0
- package/augment-extensions/workflows/beads/module.json +4 -3
- package/augment-extensions/workflows/database/README.md +195 -0
- package/augment-extensions/workflows/database/ai-prompt-testing.md +295 -0
- package/augment-extensions/workflows/database/examples/migration-example.md +498 -0
- package/augment-extensions/workflows/database/examples/optimization-example.md +496 -0
- package/augment-extensions/workflows/database/examples/schema-design-example.md +444 -0
- package/augment-extensions/workflows/database/module.json +42 -0
- package/augment-extensions/workflows/database/rules/data-migration.md +249 -0
- package/augment-extensions/workflows/database/rules/documentation-standards.md +339 -0
- package/augment-extensions/workflows/database/rules/migration-workflow.md +352 -0
- package/augment-extensions/workflows/database/rules/optimization-workflow.md +435 -0
- package/augment-extensions/workflows/database/rules/schema-design-workflow.md +535 -0
- package/augment-extensions/workflows/database/rules/testing-patterns.md +305 -0
- package/augment-extensions/workflows/database/rules/workflow.md +458 -0
- package/augment-extensions/workflows/openspec/module.json +4 -3
- package/augment-extensions/workflows/wordpress-plugin/README.md +232 -0
- package/augment-extensions/workflows/wordpress-plugin/ai-prompts.md +839 -0
- package/augment-extensions/workflows/wordpress-plugin/bead-decomposition-patterns.md +854 -0
- package/augment-extensions/workflows/wordpress-plugin/examples/complete-plugin-example.md +540 -0
- package/augment-extensions/workflows/wordpress-plugin/examples/custom-post-type-example.md +1083 -0
- package/augment-extensions/workflows/wordpress-plugin/examples/feature-addition-workflow.md +669 -0
- package/augment-extensions/workflows/wordpress-plugin/examples/plugin-creation-workflow.md +597 -0
- package/augment-extensions/workflows/wordpress-plugin/examples/secure-form-handler-example.md +925 -0
- package/augment-extensions/workflows/wordpress-plugin/examples/security-audit-workflow.md +752 -0
- package/augment-extensions/workflows/wordpress-plugin/examples/wordpress-org-submission-workflow.md +773 -0
- package/augment-extensions/workflows/wordpress-plugin/module.json +49 -0
- package/augment-extensions/workflows/wordpress-plugin/rules/best-practices.md +942 -0
- package/augment-extensions/workflows/wordpress-plugin/rules/development-workflow.md +702 -0
- package/augment-extensions/workflows/wordpress-plugin/rules/submission-workflow.md +728 -0
- package/augment-extensions/workflows/wordpress-plugin/rules/testing-workflow.md +775 -0
- package/augment-extensions/writing-standards/screenplay/README.md +171 -0
- package/augment-extensions/writing-standards/screenplay/examples/aaa-hollywood-scene.fountain +164 -0
- package/augment-extensions/writing-standards/screenplay/module.json +124 -0
- package/augment-extensions/writing-standards/screenplay/rules/universal-formatting.md +339 -0
- package/cli/MODULES.md +302 -0
- package/cli/dist/cli.js +142 -9
- package/cli/dist/cli.js.map +1 -1
- package/cli/dist/commands/catalog.d.ts +13 -0
- package/cli/dist/commands/catalog.d.ts.map +1 -0
- package/cli/dist/commands/catalog.js +104 -0
- package/cli/dist/commands/catalog.js.map +1 -0
- package/cli/dist/commands/gui.d.ts +6 -0
- package/cli/dist/commands/gui.d.ts.map +1 -0
- package/cli/dist/commands/gui.js +211 -0
- package/cli/dist/commands/gui.js.map +1 -0
- package/cli/dist/commands/init.d.ts.map +1 -1
- package/cli/dist/commands/init.js +12 -0
- package/cli/dist/commands/init.js.map +1 -1
- package/cli/dist/commands/install-rules.d.ts +14 -0
- package/cli/dist/commands/install-rules.d.ts.map +1 -0
- package/cli/dist/commands/install-rules.js +127 -0
- package/cli/dist/commands/install-rules.js.map +1 -0
- package/cli/dist/commands/link.d.ts.map +1 -1
- package/cli/dist/commands/link.js +9 -11
- package/cli/dist/commands/link.js.map +1 -1
- package/cli/dist/commands/list.d.ts.map +1 -1
- package/cli/dist/commands/list.js +11 -28
- package/cli/dist/commands/list.js.map +1 -1
- package/cli/dist/commands/mcp.d.ts +48 -0
- package/cli/dist/commands/mcp.d.ts.map +1 -0
- package/cli/dist/commands/mcp.js +229 -0
- package/cli/dist/commands/mcp.js.map +1 -0
- package/cli/dist/commands/self-remove.d.ts +7 -0
- package/cli/dist/commands/self-remove.d.ts.map +1 -0
- package/cli/dist/commands/self-remove.js +179 -0
- package/cli/dist/commands/self-remove.js.map +1 -0
- package/cli/dist/commands/show.d.ts.map +1 -1
- package/cli/dist/commands/show.js +42 -71
- package/cli/dist/commands/show.js.map +1 -1
- package/cli/dist/commands/skill.d.ts +67 -0
- package/cli/dist/commands/skill.d.ts.map +1 -0
- package/cli/dist/commands/skill.js +513 -0
- package/cli/dist/commands/skill.js.map +1 -0
- package/cli/dist/commands/unlink.d.ts +6 -0
- package/cli/dist/commands/unlink.d.ts.map +1 -0
- package/cli/dist/commands/unlink.js +115 -0
- package/cli/dist/commands/unlink.js.map +1 -0
- package/cli/dist/commands/validate.d.ts +6 -0
- package/cli/dist/commands/validate.d.ts.map +1 -0
- package/cli/dist/commands/validate.js +159 -0
- package/cli/dist/commands/validate.js.map +1 -0
- package/cli/dist/utils/catalog-sync.d.ts +22 -0
- package/cli/dist/utils/catalog-sync.d.ts.map +1 -0
- package/cli/dist/utils/catalog-sync.js +157 -0
- package/cli/dist/utils/catalog-sync.js.map +1 -0
- package/cli/dist/utils/character-count.d.ts +56 -0
- package/cli/dist/utils/character-count.d.ts.map +1 -0
- package/cli/dist/utils/character-count.js +190 -0
- package/cli/dist/utils/character-count.js.map +1 -0
- package/cli/dist/utils/documentation-validator.d.ts +18 -0
- package/cli/dist/utils/documentation-validator.d.ts.map +1 -0
- package/cli/dist/utils/documentation-validator.js +233 -0
- package/cli/dist/utils/documentation-validator.js.map +1 -0
- package/cli/dist/utils/install-rules.d.ts +32 -0
- package/cli/dist/utils/install-rules.d.ts.map +1 -0
- package/cli/dist/utils/install-rules.js +375 -0
- package/cli/dist/utils/install-rules.js.map +1 -0
- package/cli/dist/utils/mcp-integration.d.ts +70 -0
- package/cli/dist/utils/mcp-integration.d.ts.map +1 -0
- package/cli/dist/utils/mcp-integration.js +292 -0
- package/cli/dist/utils/mcp-integration.js.map +1 -0
- package/cli/dist/utils/module-system.d.ts +153 -0
- package/cli/dist/utils/module-system.d.ts.map +1 -0
- package/cli/dist/utils/module-system.js +528 -0
- package/cli/dist/utils/module-system.js.map +1 -0
- package/cli/dist/utils/modules-catalog.d.ts +33 -0
- package/cli/dist/utils/modules-catalog.d.ts.map +1 -0
- package/cli/dist/utils/modules-catalog.js +163 -0
- package/cli/dist/utils/modules-catalog.js.map +1 -0
- package/cli/dist/utils/rule-install-hooks.d.ts +19 -0
- package/cli/dist/utils/rule-install-hooks.d.ts.map +1 -0
- package/cli/dist/utils/rule-install-hooks.js +224 -0
- package/cli/dist/utils/rule-install-hooks.js.map +1 -0
- package/cli/dist/utils/skill-system.d.ts +95 -0
- package/cli/dist/utils/skill-system.d.ts.map +1 -0
- package/cli/dist/utils/skill-system.js +313 -0
- package/cli/dist/utils/skill-system.js.map +1 -0
- package/modules.md +534 -70
- package/package.json +12 -3
|
@@ -0,0 +1,515 @@
|
|
|
1
|
+
# Async JavaScript Patterns
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
This guide provides best practices for asynchronous JavaScript, covering promises, async/await, Fetch API, and error handling.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Promises vs Async/Await
|
|
10
|
+
|
|
11
|
+
### Prefer Async/Await
|
|
12
|
+
|
|
13
|
+
**RECOMMENDED**: Use async/await over raw promises for better readability:
|
|
14
|
+
|
|
15
|
+
```javascript
|
|
16
|
+
// ✅ GOOD: Async/await
|
|
17
|
+
async function fetchUser(id) {
|
|
18
|
+
try {
|
|
19
|
+
const response = await fetch(`/api/users/${id}`);
|
|
20
|
+
const user = await response.json();
|
|
21
|
+
return user;
|
|
22
|
+
} catch (error) {
|
|
23
|
+
console.error('Failed to fetch user:', error);
|
|
24
|
+
throw error;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
// ❌ ACCEPTABLE: Raw promises (less readable)
|
|
29
|
+
function fetchUser(id) {
|
|
30
|
+
return fetch(`/api/users/${id}`)
|
|
31
|
+
.then(response => response.json())
|
|
32
|
+
.then(user => user)
|
|
33
|
+
.catch(error => {
|
|
34
|
+
console.error('Failed to fetch user:', error);
|
|
35
|
+
throw error;
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
### When to Use Promises Directly
|
|
41
|
+
|
|
42
|
+
**USE PROMISES** for:
|
|
43
|
+
- `Promise.all()` - Parallel operations
|
|
44
|
+
- `Promise.race()` - First to complete
|
|
45
|
+
- `Promise.allSettled()` - All results (success or failure)
|
|
46
|
+
|
|
47
|
+
```javascript
|
|
48
|
+
// ✅ GOOD: Promise.all for parallel operations
|
|
49
|
+
async function fetchMultipleUsers(ids) {
|
|
50
|
+
const promises = ids.map(id => fetch(`/api/users/${id}`));
|
|
51
|
+
const responses = await Promise.all(promises);
|
|
52
|
+
const users = await Promise.all(responses.map(r => r.json()));
|
|
53
|
+
return users;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
// ✅ GOOD: Promise.allSettled for handling mixed results
|
|
57
|
+
async function fetchWithFallback(urls) {
|
|
58
|
+
const promises = urls.map(url => fetch(url));
|
|
59
|
+
const results = await Promise.allSettled(promises);
|
|
60
|
+
|
|
61
|
+
return results.map((result, index) => {
|
|
62
|
+
if (result.status === 'fulfilled') {
|
|
63
|
+
return result.value;
|
|
64
|
+
} else {
|
|
65
|
+
console.error(`Failed to fetch ${urls[index]}:`, result.reason);
|
|
66
|
+
return null;
|
|
67
|
+
}
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
---
|
|
73
|
+
|
|
74
|
+
## Error Handling
|
|
75
|
+
|
|
76
|
+
### Try/Catch with Async/Await
|
|
77
|
+
|
|
78
|
+
**REQUIRED**: Always handle errors in async functions:
|
|
79
|
+
|
|
80
|
+
```javascript
|
|
81
|
+
// ✅ GOOD: Try/catch
|
|
82
|
+
async function saveUser(userData) {
|
|
83
|
+
try {
|
|
84
|
+
const response = await fetch('/api/users', {
|
|
85
|
+
method: 'POST',
|
|
86
|
+
headers: { 'Content-Type': 'application/json' },
|
|
87
|
+
body: JSON.stringify(userData)
|
|
88
|
+
});
|
|
89
|
+
|
|
90
|
+
if (!response.ok) {
|
|
91
|
+
throw new Error(`HTTP error! status: ${response.status}`);
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
const user = await response.json();
|
|
95
|
+
return user;
|
|
96
|
+
} catch (error) {
|
|
97
|
+
console.error('Failed to save user:', error);
|
|
98
|
+
throw error; // Re-throw or handle
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
// ❌ BAD: No error handling
|
|
103
|
+
async function saveUser(userData) {
|
|
104
|
+
const response = await fetch('/api/users', {
|
|
105
|
+
method: 'POST',
|
|
106
|
+
body: JSON.stringify(userData)
|
|
107
|
+
});
|
|
108
|
+
return response.json();
|
|
109
|
+
}
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
### Catch with Promises
|
|
113
|
+
|
|
114
|
+
**REQUIRED**: Use `.catch()` for promise chains:
|
|
115
|
+
|
|
116
|
+
```javascript
|
|
117
|
+
// ✅ GOOD: .catch() for promises
|
|
118
|
+
fetch('/api/users')
|
|
119
|
+
.then(response => response.json())
|
|
120
|
+
.then(users => displayUsers(users))
|
|
121
|
+
.catch(error => {
|
|
122
|
+
console.error('Failed to fetch users:', error);
|
|
123
|
+
showErrorMessage('Unable to load users');
|
|
124
|
+
});
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
### User-Friendly Error Messages
|
|
128
|
+
|
|
129
|
+
**RECOMMENDED**: Display user-friendly error messages:
|
|
130
|
+
|
|
131
|
+
```javascript
|
|
132
|
+
// ✅ GOOD: User-friendly errors
|
|
133
|
+
async function loadData() {
|
|
134
|
+
try {
|
|
135
|
+
const data = await fetchData();
|
|
136
|
+
displayData(data);
|
|
137
|
+
} catch (error) {
|
|
138
|
+
console.error('Error details:', error); // Log for debugging
|
|
139
|
+
showErrorMessage('Unable to load data. Please try again.'); // User message
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
---
|
|
145
|
+
|
|
146
|
+
## Fetch API
|
|
147
|
+
|
|
148
|
+
### Basic Fetch Usage
|
|
149
|
+
|
|
150
|
+
**RECOMMENDED**: Use Fetch API for HTTP requests:
|
|
151
|
+
|
|
152
|
+
```javascript
|
|
153
|
+
// ✅ GOOD: GET request
|
|
154
|
+
async function getUsers() {
|
|
155
|
+
const response = await fetch('/api/users');
|
|
156
|
+
|
|
157
|
+
if (!response.ok) {
|
|
158
|
+
throw new Error(`HTTP error! status: ${response.status}`);
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
const users = await response.json();
|
|
162
|
+
return users;
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
// ✅ GOOD: POST request
|
|
166
|
+
async function createUser(userData) {
|
|
167
|
+
const response = await fetch('/api/users', {
|
|
168
|
+
method: 'POST',
|
|
169
|
+
headers: {
|
|
170
|
+
'Content-Type': 'application/json',
|
|
171
|
+
},
|
|
172
|
+
body: JSON.stringify(userData)
|
|
173
|
+
});
|
|
174
|
+
|
|
175
|
+
if (!response.ok) {
|
|
176
|
+
throw new Error(`HTTP error! status: ${response.status}`);
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
return response.json();
|
|
180
|
+
}
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
### Check Response Status
|
|
184
|
+
|
|
185
|
+
**REQUIRED**: Always check response status:
|
|
186
|
+
|
|
187
|
+
```javascript
|
|
188
|
+
// ✅ GOOD: Check status
|
|
189
|
+
async function fetchData(url) {
|
|
190
|
+
const response = await fetch(url);
|
|
191
|
+
|
|
192
|
+
if (!response.ok) {
|
|
193
|
+
throw new Error(`HTTP error! status: ${response.status}`);
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
return response.json();
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
// ❌ BAD: No status check
|
|
200
|
+
async function fetchData(url) {
|
|
201
|
+
const response = await fetch(url);
|
|
202
|
+
return response.json(); // May fail silently
|
|
203
|
+
}
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
### Request Configuration
|
|
207
|
+
|
|
208
|
+
**RECOMMENDED**: Configure requests properly:
|
|
209
|
+
|
|
210
|
+
```javascript
|
|
211
|
+
// ✅ GOOD: Full configuration
|
|
212
|
+
async function updateUser(id, data) {
|
|
213
|
+
const response = await fetch(`/api/users/${id}`, {
|
|
214
|
+
method: 'PUT',
|
|
215
|
+
headers: {
|
|
216
|
+
'Content-Type': 'application/json',
|
|
217
|
+
'Authorization': `Bearer ${getToken()}`
|
|
218
|
+
},
|
|
219
|
+
body: JSON.stringify(data),
|
|
220
|
+
credentials: 'include', // Include cookies
|
|
221
|
+
mode: 'cors'
|
|
222
|
+
});
|
|
223
|
+
|
|
224
|
+
if (!response.ok) {
|
|
225
|
+
const error = await response.json();
|
|
226
|
+
throw new Error(error.message || 'Update failed');
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
return response.json();
|
|
230
|
+
}
|
|
231
|
+
```
|
|
232
|
+
|
|
233
|
+
### Timeout Handling
|
|
234
|
+
|
|
235
|
+
**RECOMMENDED**: Implement timeouts for fetch requests:
|
|
236
|
+
|
|
237
|
+
```javascript
|
|
238
|
+
// ✅ GOOD: Fetch with timeout
|
|
239
|
+
async function fetchWithTimeout(url, timeout = 5000) {
|
|
240
|
+
const controller = new AbortController();
|
|
241
|
+
const timeoutId = setTimeout(() => controller.abort(), timeout);
|
|
242
|
+
|
|
243
|
+
try {
|
|
244
|
+
const response = await fetch(url, {
|
|
245
|
+
signal: controller.signal
|
|
246
|
+
});
|
|
247
|
+
clearTimeout(timeoutId);
|
|
248
|
+
return response;
|
|
249
|
+
} catch (error) {
|
|
250
|
+
if (error.name === 'AbortError') {
|
|
251
|
+
throw new Error('Request timeout');
|
|
252
|
+
}
|
|
253
|
+
throw error;
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
```
|
|
257
|
+
|
|
258
|
+
---
|
|
259
|
+
|
|
260
|
+
## Parallel vs Sequential Operations
|
|
261
|
+
|
|
262
|
+
### Parallel Operations
|
|
263
|
+
|
|
264
|
+
**RECOMMENDED**: Use `Promise.all()` for independent parallel operations:
|
|
265
|
+
|
|
266
|
+
```javascript
|
|
267
|
+
// ✅ GOOD: Parallel (faster)
|
|
268
|
+
async function loadDashboard() {
|
|
269
|
+
const [users, posts, comments] = await Promise.all([
|
|
270
|
+
fetch('/api/users').then(r => r.json()),
|
|
271
|
+
fetch('/api/posts').then(r => r.json()),
|
|
272
|
+
fetch('/api/comments').then(r => r.json())
|
|
273
|
+
]);
|
|
274
|
+
|
|
275
|
+
return { users, posts, comments };
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
// ❌ BAD: Sequential (slower)
|
|
279
|
+
async function loadDashboard() {
|
|
280
|
+
const users = await fetch('/api/users').then(r => r.json());
|
|
281
|
+
const posts = await fetch('/api/posts').then(r => r.json());
|
|
282
|
+
const comments = await fetch('/api/comments').then(r => r.json());
|
|
283
|
+
|
|
284
|
+
return { users, posts, comments };
|
|
285
|
+
}
|
|
286
|
+
```
|
|
287
|
+
|
|
288
|
+
### Sequential Operations
|
|
289
|
+
|
|
290
|
+
**USE SEQUENTIAL** when operations depend on each other:
|
|
291
|
+
|
|
292
|
+
```javascript
|
|
293
|
+
// ✅ GOOD: Sequential (necessary)
|
|
294
|
+
async function createUserWithProfile(userData, profileData) {
|
|
295
|
+
// Must create user first to get ID
|
|
296
|
+
const user = await createUser(userData);
|
|
297
|
+
|
|
298
|
+
// Then create profile with user ID
|
|
299
|
+
const profile = await createProfile({
|
|
300
|
+
...profileData,
|
|
301
|
+
userId: user.id
|
|
302
|
+
});
|
|
303
|
+
|
|
304
|
+
return { user, profile };
|
|
305
|
+
}
|
|
306
|
+
```
|
|
307
|
+
|
|
308
|
+
---
|
|
309
|
+
|
|
310
|
+
## Advanced Patterns
|
|
311
|
+
|
|
312
|
+
### Retry Logic
|
|
313
|
+
|
|
314
|
+
**RECOMMENDED**: Implement retry logic for failed requests:
|
|
315
|
+
|
|
316
|
+
```javascript
|
|
317
|
+
// ✅ GOOD: Retry with exponential backoff
|
|
318
|
+
async function fetchWithRetry(url, maxRetries = 3) {
|
|
319
|
+
for (let i = 0; i < maxRetries; i++) {
|
|
320
|
+
try {
|
|
321
|
+
const response = await fetch(url);
|
|
322
|
+
if (response.ok) {
|
|
323
|
+
return response;
|
|
324
|
+
}
|
|
325
|
+
|
|
326
|
+
// Don't retry client errors (4xx)
|
|
327
|
+
if (response.status >= 400 && response.status < 500) {
|
|
328
|
+
throw new Error(`Client error: ${response.status}`);
|
|
329
|
+
}
|
|
330
|
+
} catch (error) {
|
|
331
|
+
if (i === maxRetries - 1) {
|
|
332
|
+
throw error;
|
|
333
|
+
}
|
|
334
|
+
|
|
335
|
+
// Exponential backoff: 1s, 2s, 4s
|
|
336
|
+
const delay = Math.pow(2, i) * 1000;
|
|
337
|
+
await new Promise(resolve => setTimeout(resolve, delay));
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
```
|
|
342
|
+
|
|
343
|
+
### Request Cancellation
|
|
344
|
+
|
|
345
|
+
**RECOMMENDED**: Use AbortController for cancellable requests:
|
|
346
|
+
|
|
347
|
+
```javascript
|
|
348
|
+
// ✅ GOOD: Cancellable request
|
|
349
|
+
class DataService {
|
|
350
|
+
constructor() {
|
|
351
|
+
this.controller = null;
|
|
352
|
+
}
|
|
353
|
+
|
|
354
|
+
async fetchData(url) {
|
|
355
|
+
// Cancel previous request
|
|
356
|
+
if (this.controller) {
|
|
357
|
+
this.controller.abort();
|
|
358
|
+
}
|
|
359
|
+
|
|
360
|
+
this.controller = new AbortController();
|
|
361
|
+
|
|
362
|
+
try {
|
|
363
|
+
const response = await fetch(url, {
|
|
364
|
+
signal: this.controller.signal
|
|
365
|
+
});
|
|
366
|
+
return response.json();
|
|
367
|
+
} catch (error) {
|
|
368
|
+
if (error.name === 'AbortError') {
|
|
369
|
+
console.log('Request cancelled');
|
|
370
|
+
return null;
|
|
371
|
+
}
|
|
372
|
+
throw error;
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
}
|
|
376
|
+
```
|
|
377
|
+
|
|
378
|
+
### Debounced Async Operations
|
|
379
|
+
|
|
380
|
+
**RECOMMENDED**: Debounce async operations (e.g., search):
|
|
381
|
+
|
|
382
|
+
```javascript
|
|
383
|
+
// ✅ GOOD: Debounced search
|
|
384
|
+
function debounce(func, wait) {
|
|
385
|
+
let timeout;
|
|
386
|
+
return function executedFunction(...args) {
|
|
387
|
+
clearTimeout(timeout);
|
|
388
|
+
return new Promise((resolve) => {
|
|
389
|
+
timeout = setTimeout(() => {
|
|
390
|
+
resolve(func(...args));
|
|
391
|
+
}, wait);
|
|
392
|
+
});
|
|
393
|
+
};
|
|
394
|
+
}
|
|
395
|
+
|
|
396
|
+
const searchUsers = debounce(async (query) => {
|
|
397
|
+
const response = await fetch(`/api/users/search?q=${query}`);
|
|
398
|
+
return response.json();
|
|
399
|
+
}, 300);
|
|
400
|
+
|
|
401
|
+
// Usage
|
|
402
|
+
searchInput.addEventListener('input', async (event) => {
|
|
403
|
+
const results = await searchUsers(event.target.value);
|
|
404
|
+
displayResults(results);
|
|
405
|
+
});
|
|
406
|
+
```
|
|
407
|
+
|
|
408
|
+
### Loading States
|
|
409
|
+
|
|
410
|
+
**RECOMMENDED**: Manage loading states properly:
|
|
411
|
+
|
|
412
|
+
```javascript
|
|
413
|
+
// ✅ GOOD: Loading state management
|
|
414
|
+
async function loadData() {
|
|
415
|
+
const loadingEl = document.querySelector('[data-js-loading]');
|
|
416
|
+
const contentEl = document.querySelector('[data-js-content]');
|
|
417
|
+
const errorEl = document.querySelector('[data-js-error]');
|
|
418
|
+
|
|
419
|
+
try {
|
|
420
|
+
loadingEl.classList.remove('hidden');
|
|
421
|
+
contentEl.classList.add('hidden');
|
|
422
|
+
errorEl.classList.add('hidden');
|
|
423
|
+
|
|
424
|
+
const data = await fetchData();
|
|
425
|
+
|
|
426
|
+
displayData(data);
|
|
427
|
+
contentEl.classList.remove('hidden');
|
|
428
|
+
} catch (error) {
|
|
429
|
+
console.error('Error loading data:', error);
|
|
430
|
+
errorEl.textContent = 'Failed to load data';
|
|
431
|
+
errorEl.classList.remove('hidden');
|
|
432
|
+
} finally {
|
|
433
|
+
loadingEl.classList.add('hidden');
|
|
434
|
+
}
|
|
435
|
+
}
|
|
436
|
+
```
|
|
437
|
+
|
|
438
|
+
---
|
|
439
|
+
|
|
440
|
+
## Common Patterns
|
|
441
|
+
|
|
442
|
+
### API Client
|
|
443
|
+
|
|
444
|
+
```javascript
|
|
445
|
+
// ✅ GOOD: Reusable API client
|
|
446
|
+
class ApiClient {
|
|
447
|
+
constructor(baseURL) {
|
|
448
|
+
this.baseURL = baseURL;
|
|
449
|
+
}
|
|
450
|
+
|
|
451
|
+
async request(endpoint, options = {}) {
|
|
452
|
+
const url = `${this.baseURL}${endpoint}`;
|
|
453
|
+
const config = {
|
|
454
|
+
headers: {
|
|
455
|
+
'Content-Type': 'application/json',
|
|
456
|
+
...options.headers
|
|
457
|
+
},
|
|
458
|
+
...options
|
|
459
|
+
};
|
|
460
|
+
|
|
461
|
+
const response = await fetch(url, config);
|
|
462
|
+
|
|
463
|
+
if (!response.ok) {
|
|
464
|
+
throw new Error(`HTTP error! status: ${response.status}`);
|
|
465
|
+
}
|
|
466
|
+
|
|
467
|
+
return response.json();
|
|
468
|
+
}
|
|
469
|
+
|
|
470
|
+
get(endpoint) {
|
|
471
|
+
return this.request(endpoint);
|
|
472
|
+
}
|
|
473
|
+
|
|
474
|
+
post(endpoint, data) {
|
|
475
|
+
return this.request(endpoint, {
|
|
476
|
+
method: 'POST',
|
|
477
|
+
body: JSON.stringify(data)
|
|
478
|
+
});
|
|
479
|
+
}
|
|
480
|
+
|
|
481
|
+
put(endpoint, data) {
|
|
482
|
+
return this.request(endpoint, {
|
|
483
|
+
method: 'PUT',
|
|
484
|
+
body: JSON.stringify(data)
|
|
485
|
+
});
|
|
486
|
+
}
|
|
487
|
+
|
|
488
|
+
delete(endpoint) {
|
|
489
|
+
return this.request(endpoint, {
|
|
490
|
+
method: 'DELETE'
|
|
491
|
+
});
|
|
492
|
+
}
|
|
493
|
+
}
|
|
494
|
+
|
|
495
|
+
// Usage
|
|
496
|
+
const api = new ApiClient('https://api.example.com');
|
|
497
|
+
const users = await api.get('/users');
|
|
498
|
+
const newUser = await api.post('/users', { name: 'John' });
|
|
499
|
+
```
|
|
500
|
+
|
|
501
|
+
---
|
|
502
|
+
|
|
503
|
+
## Summary
|
|
504
|
+
|
|
505
|
+
**Key Principles**:
|
|
506
|
+
1. Prefer async/await over raw promises
|
|
507
|
+
2. Always handle errors with try/catch or .catch()
|
|
508
|
+
3. Check response status in fetch requests
|
|
509
|
+
4. Use Promise.all() for parallel operations
|
|
510
|
+
5. Use sequential await when operations depend on each other
|
|
511
|
+
6. Implement timeouts and retry logic
|
|
512
|
+
7. Use AbortController for cancellable requests
|
|
513
|
+
8. Debounce frequent async operations
|
|
514
|
+
9. Manage loading states properly
|
|
515
|
+
10. Create reusable API clients
|