@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,612 @@
|
|
|
1
|
+
// ========================================
|
|
2
|
+
// VARIABLE DECLARATIONS
|
|
3
|
+
// ========================================
|
|
4
|
+
|
|
5
|
+
// ✅ GOOD: Use const for values that won't be reassigned
|
|
6
|
+
const API_URL = 'https://api.example.com';
|
|
7
|
+
const MAX_RETRIES = 3;
|
|
8
|
+
const user = { name: 'John', age: 30 };
|
|
9
|
+
const items = [1, 2, 3, 4, 5];
|
|
10
|
+
|
|
11
|
+
// ✅ GOOD: Use let for values that will be reassigned
|
|
12
|
+
let count = 0;
|
|
13
|
+
let status = 'pending';
|
|
14
|
+
|
|
15
|
+
// ❌ BAD: Never use var
|
|
16
|
+
// var x = 10;
|
|
17
|
+
|
|
18
|
+
// ========================================
|
|
19
|
+
// ARROW FUNCTIONS
|
|
20
|
+
// ========================================
|
|
21
|
+
|
|
22
|
+
// ✅ GOOD: Arrow functions for callbacks
|
|
23
|
+
const numbers = [1, 2, 3, 4, 5];
|
|
24
|
+
const doubled = numbers.map(n => n * 2);
|
|
25
|
+
const evens = numbers.filter(n => n % 2 === 0);
|
|
26
|
+
const sum = numbers.reduce((acc, n) => acc + n, 0);
|
|
27
|
+
|
|
28
|
+
// ✅ GOOD: Arrow function with multiple statements
|
|
29
|
+
const processUser = (user) => {
|
|
30
|
+
const fullName = `${user.firstName} ${user.lastName}`;
|
|
31
|
+
const age = calculateAge(user.birthDate);
|
|
32
|
+
return { fullName, age };
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
// ✅ GOOD: Traditional function for methods
|
|
36
|
+
const calculator = {
|
|
37
|
+
value: 0,
|
|
38
|
+
add(n) {
|
|
39
|
+
this.value += n;
|
|
40
|
+
return this;
|
|
41
|
+
},
|
|
42
|
+
multiply(n) {
|
|
43
|
+
this.value *= n;
|
|
44
|
+
return this;
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
// ========================================
|
|
49
|
+
// TEMPLATE LITERALS
|
|
50
|
+
// ========================================
|
|
51
|
+
|
|
52
|
+
// ✅ GOOD: Template literals for string interpolation
|
|
53
|
+
const name = 'Alice';
|
|
54
|
+
const age = 25;
|
|
55
|
+
const greeting = `Hello, ${name}! You are ${age} years old.`;
|
|
56
|
+
|
|
57
|
+
// ✅ GOOD: Multi-line strings
|
|
58
|
+
const html = `
|
|
59
|
+
<div class="card">
|
|
60
|
+
<h2>${name}</h2>
|
|
61
|
+
<p>Age: ${age}</p>
|
|
62
|
+
</div>
|
|
63
|
+
`;
|
|
64
|
+
|
|
65
|
+
// ✅ GOOD: Expression evaluation
|
|
66
|
+
const price = 19.99;
|
|
67
|
+
const quantity = 3;
|
|
68
|
+
const total = `Total: $${(price * quantity).toFixed(2)}`;
|
|
69
|
+
|
|
70
|
+
// ========================================
|
|
71
|
+
// DESTRUCTURING
|
|
72
|
+
// ========================================
|
|
73
|
+
|
|
74
|
+
// ✅ GOOD: Object destructuring
|
|
75
|
+
const userObj = { firstName: 'John', lastName: 'Doe', email: 'john@example.com' };
|
|
76
|
+
const { firstName, lastName, email } = userObj;
|
|
77
|
+
|
|
78
|
+
// ✅ GOOD: Destructuring with default values
|
|
79
|
+
const { theme = 'light', language = 'en' } = {};
|
|
80
|
+
|
|
81
|
+
// ✅ GOOD: Nested destructuring
|
|
82
|
+
const response = {
|
|
83
|
+
data: {
|
|
84
|
+
user: { id: 1, name: 'Alice' }
|
|
85
|
+
}
|
|
86
|
+
};
|
|
87
|
+
const { data: { user: { id, name } } } = response;
|
|
88
|
+
|
|
89
|
+
// ✅ GOOD: Array destructuring
|
|
90
|
+
const colors = ['red', 'green', 'blue'];
|
|
91
|
+
const [primary, secondary, tertiary] = colors;
|
|
92
|
+
|
|
93
|
+
// ✅ GOOD: Rest operator in destructuring
|
|
94
|
+
const [first, ...rest] = [1, 2, 3, 4, 5];
|
|
95
|
+
const { id: userId, ...userDetails } = { id: 1, name: 'Bob', age: 30 };
|
|
96
|
+
|
|
97
|
+
// ========================================
|
|
98
|
+
// SPREAD OPERATOR
|
|
99
|
+
// ========================================
|
|
100
|
+
|
|
101
|
+
// ✅ GOOD: Array spreading
|
|
102
|
+
const arr1 = [1, 2, 3];
|
|
103
|
+
const arr2 = [4, 5, 6];
|
|
104
|
+
const combined = [...arr1, ...arr2];
|
|
105
|
+
|
|
106
|
+
// ✅ GOOD: Object spreading
|
|
107
|
+
const defaults = { theme: 'light', fontSize: 14 };
|
|
108
|
+
const userPrefs = { fontSize: 16, language: 'en' };
|
|
109
|
+
const settings = { ...defaults, ...userPrefs };
|
|
110
|
+
|
|
111
|
+
// ✅ GOOD: Copying arrays/objects
|
|
112
|
+
const originalArray = [1, 2, 3];
|
|
113
|
+
const copiedArray = [...originalArray];
|
|
114
|
+
|
|
115
|
+
const originalObject = { a: 1, b: 2 };
|
|
116
|
+
const copiedObject = { ...originalObject };
|
|
117
|
+
|
|
118
|
+
// ========================================
|
|
119
|
+
// DEFAULT PARAMETERS
|
|
120
|
+
// ========================================
|
|
121
|
+
|
|
122
|
+
// ✅ GOOD: Default function parameters
|
|
123
|
+
function greet(name = 'Guest', greeting = 'Hello') {
|
|
124
|
+
return `${greeting}, ${name}!`;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
// ✅ GOOD: Default with destructuring
|
|
128
|
+
function createUser({ name = 'Anonymous', role = 'user' } = {}) {
|
|
129
|
+
return { name, role, createdAt: new Date() };
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
// ========================================
|
|
133
|
+
// OPTIONAL CHAINING
|
|
134
|
+
// ========================================
|
|
135
|
+
|
|
136
|
+
// ✅ GOOD: Optional chaining for nested properties
|
|
137
|
+
const userData = { profile: { address: { city: 'New York' } } };
|
|
138
|
+
const city = userData?.profile?.address?.city;
|
|
139
|
+
const zipCode = userData?.profile?.address?.zipCode; // undefined, no error
|
|
140
|
+
|
|
141
|
+
// ✅ GOOD: Optional chaining with arrays
|
|
142
|
+
const firstItem = items?.[0];
|
|
143
|
+
|
|
144
|
+
// ✅ GOOD: Optional chaining with methods
|
|
145
|
+
const result = obj?.method?.();
|
|
146
|
+
|
|
147
|
+
// ========================================
|
|
148
|
+
// NULLISH COALESCING
|
|
149
|
+
// ========================================
|
|
150
|
+
|
|
151
|
+
// ✅ GOOD: Nullish coalescing operator (??)
|
|
152
|
+
const userInput = null;
|
|
153
|
+
const value = userInput ?? 'default value';
|
|
154
|
+
|
|
155
|
+
// ✅ GOOD: Difference from || operator
|
|
156
|
+
const count1 = 0;
|
|
157
|
+
const result1 = count1 || 10; // 10 (falsy)
|
|
158
|
+
const result2 = count1 ?? 10; // 0 (only null/undefined)
|
|
159
|
+
|
|
160
|
+
const emptyString = '';
|
|
161
|
+
const text1 = emptyString || 'default'; // 'default'
|
|
162
|
+
const text2 = emptyString ?? 'default'; // ''
|
|
163
|
+
|
|
164
|
+
// ========================================
|
|
165
|
+
// ES6 MODULES
|
|
166
|
+
// ========================================
|
|
167
|
+
|
|
168
|
+
// ✅ GOOD: Named exports
|
|
169
|
+
export const API_KEY = 'abc123';
|
|
170
|
+
export function fetchData(url) {
|
|
171
|
+
return fetch(url).then(res => res.json());
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
export class UserService {
|
|
175
|
+
constructor(apiUrl) {
|
|
176
|
+
this.apiUrl = apiUrl;
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
async getUser(id) {
|
|
180
|
+
const response = await fetch(`${this.apiUrl}/users/${id}`);
|
|
181
|
+
return response.json();
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
// ✅ GOOD: Default export
|
|
186
|
+
export default class App {
|
|
187
|
+
constructor() {
|
|
188
|
+
this.init();
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
init() {
|
|
192
|
+
console.log('App initialized');
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
// ✅ GOOD: Importing
|
|
197
|
+
// import App from './App.js';
|
|
198
|
+
// import { fetchData, UserService } from './services.js';
|
|
199
|
+
// import * as utils from './utils.js';
|
|
200
|
+
|
|
201
|
+
// ========================================
|
|
202
|
+
// ASYNC/AWAIT PATTERNS
|
|
203
|
+
// ========================================
|
|
204
|
+
|
|
205
|
+
// ✅ GOOD: Async function with error handling
|
|
206
|
+
async function fetchUserData(userId) {
|
|
207
|
+
try {
|
|
208
|
+
const response = await fetch(`${API_URL}/users/${userId}`);
|
|
209
|
+
|
|
210
|
+
if (!response.ok) {
|
|
211
|
+
throw new Error(`HTTP error! status: ${response.status}`);
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
const data = await response.json();
|
|
215
|
+
return data;
|
|
216
|
+
} catch (error) {
|
|
217
|
+
console.error('Failed to fetch user:', error);
|
|
218
|
+
throw error;
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
// ✅ GOOD: Promise.all for parallel requests
|
|
223
|
+
async function fetchMultipleUsers(userIds) {
|
|
224
|
+
try {
|
|
225
|
+
const promises = userIds.map(id => fetchUserData(id));
|
|
226
|
+
const users = await Promise.all(promises);
|
|
227
|
+
return users;
|
|
228
|
+
} catch (error) {
|
|
229
|
+
console.error('Failed to fetch users:', error);
|
|
230
|
+
throw error;
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
// ✅ GOOD: Async arrow function
|
|
235
|
+
const loadData = async () => {
|
|
236
|
+
const data = await fetchUserData(1);
|
|
237
|
+
return data;
|
|
238
|
+
};
|
|
239
|
+
|
|
240
|
+
// ========================================
|
|
241
|
+
// ARRAY METHODS
|
|
242
|
+
// ========================================
|
|
243
|
+
|
|
244
|
+
const products = [
|
|
245
|
+
{ id: 1, name: 'Laptop', price: 999, category: 'electronics' },
|
|
246
|
+
{ id: 2, name: 'Mouse', price: 29, category: 'electronics' },
|
|
247
|
+
{ id: 3, name: 'Desk', price: 299, category: 'furniture' }
|
|
248
|
+
];
|
|
249
|
+
|
|
250
|
+
// ✅ GOOD: map - transform array
|
|
251
|
+
const productNames = products.map(p => p.name);
|
|
252
|
+
|
|
253
|
+
// ✅ GOOD: filter - select items
|
|
254
|
+
const electronics = products.filter(p => p.category === 'electronics');
|
|
255
|
+
const affordable = products.filter(p => p.price < 100);
|
|
256
|
+
|
|
257
|
+
// ✅ GOOD: find - get first match
|
|
258
|
+
const laptop = products.find(p => p.name === 'Laptop');
|
|
259
|
+
|
|
260
|
+
// ✅ GOOD: reduce - aggregate values
|
|
261
|
+
const totalPrice = products.reduce((sum, p) => sum + p.price, 0);
|
|
262
|
+
|
|
263
|
+
// ✅ GOOD: some - check if any match
|
|
264
|
+
const hasExpensive = products.some(p => p.price > 500);
|
|
265
|
+
|
|
266
|
+
// ✅ GOOD: every - check if all match
|
|
267
|
+
const allAffordable = products.every(p => p.price < 1000);
|
|
268
|
+
|
|
269
|
+
// ✅ GOOD: Method chaining
|
|
270
|
+
const expensiveElectronics = products
|
|
271
|
+
.filter(p => p.category === 'electronics')
|
|
272
|
+
.filter(p => p.price > 50)
|
|
273
|
+
.map(p => p.name);
|
|
274
|
+
|
|
275
|
+
// ========================================
|
|
276
|
+
// OBJECT METHODS
|
|
277
|
+
// ========================================
|
|
278
|
+
|
|
279
|
+
const userProfile = {
|
|
280
|
+
id: 1,
|
|
281
|
+
name: 'Alice',
|
|
282
|
+
email: 'alice@example.com',
|
|
283
|
+
role: 'admin'
|
|
284
|
+
};
|
|
285
|
+
|
|
286
|
+
// ✅ GOOD: Object.keys, Object.values, Object.entries
|
|
287
|
+
const keys = Object.keys(userProfile);
|
|
288
|
+
const values = Object.values(userProfile);
|
|
289
|
+
const entries = Object.entries(userProfile);
|
|
290
|
+
|
|
291
|
+
// ✅ GOOD: Object.assign for merging
|
|
292
|
+
const updated = Object.assign({}, userProfile, { role: 'superadmin' });
|
|
293
|
+
|
|
294
|
+
// ✅ GOOD: Object.fromEntries
|
|
295
|
+
const pairs = [['a', 1], ['b', 2]];
|
|
296
|
+
const obj = Object.fromEntries(pairs);
|
|
297
|
+
|
|
298
|
+
// ========================================
|
|
299
|
+
// DOM MANIPULATION
|
|
300
|
+
// ========================================
|
|
301
|
+
|
|
302
|
+
// ✅ GOOD: querySelector for single element
|
|
303
|
+
const header = document.querySelector('.header');
|
|
304
|
+
const submitBtn = document.querySelector('#submit-btn');
|
|
305
|
+
|
|
306
|
+
// ✅ GOOD: querySelectorAll for multiple elements
|
|
307
|
+
const cards = document.querySelectorAll('.card');
|
|
308
|
+
const inputs = document.querySelectorAll('input[type="text"]');
|
|
309
|
+
|
|
310
|
+
// ✅ GOOD: Event listeners with arrow functions
|
|
311
|
+
submitBtn?.addEventListener('click', (event) => {
|
|
312
|
+
event.preventDefault();
|
|
313
|
+
console.log('Form submitted');
|
|
314
|
+
});
|
|
315
|
+
|
|
316
|
+
// ✅ GOOD: Event delegation
|
|
317
|
+
document.querySelector('.card-container')?.addEventListener('click', (event) => {
|
|
318
|
+
if (event.target.matches('.card__button')) {
|
|
319
|
+
const cardId = event.target.dataset.cardId;
|
|
320
|
+
console.log(`Card ${cardId} clicked`);
|
|
321
|
+
}
|
|
322
|
+
});
|
|
323
|
+
|
|
324
|
+
// ✅ GOOD: Creating elements
|
|
325
|
+
function createCard(title, content) {
|
|
326
|
+
const card = document.createElement('div');
|
|
327
|
+
card.className = 'card';
|
|
328
|
+
|
|
329
|
+
const cardHeader = document.createElement('div');
|
|
330
|
+
cardHeader.className = 'card__header';
|
|
331
|
+
cardHeader.textContent = title;
|
|
332
|
+
|
|
333
|
+
const cardBody = document.createElement('div');
|
|
334
|
+
cardBody.className = 'card__body';
|
|
335
|
+
cardBody.textContent = content;
|
|
336
|
+
|
|
337
|
+
card.appendChild(cardHeader);
|
|
338
|
+
card.appendChild(cardBody);
|
|
339
|
+
|
|
340
|
+
return card;
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
// ✅ GOOD: Using data attributes
|
|
344
|
+
const element = document.querySelector('[data-user-id="123"]');
|
|
345
|
+
const userId = element?.dataset.userId;
|
|
346
|
+
|
|
347
|
+
// ========================================
|
|
348
|
+
// ERROR HANDLING
|
|
349
|
+
// ========================================
|
|
350
|
+
|
|
351
|
+
// ✅ GOOD: Try-catch for synchronous code
|
|
352
|
+
function parseJSON(jsonString) {
|
|
353
|
+
try {
|
|
354
|
+
return JSON.parse(jsonString);
|
|
355
|
+
} catch (error) {
|
|
356
|
+
console.error('Invalid JSON:', error.message);
|
|
357
|
+
return null;
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
|
|
361
|
+
// ✅ GOOD: Custom error classes
|
|
362
|
+
class ValidationError extends Error {
|
|
363
|
+
constructor(message, field) {
|
|
364
|
+
super(message);
|
|
365
|
+
this.name = 'ValidationError';
|
|
366
|
+
this.field = field;
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
|
|
370
|
+
function validateEmail(email) {
|
|
371
|
+
if (!email.includes('@')) {
|
|
372
|
+
throw new ValidationError('Invalid email format', 'email');
|
|
373
|
+
}
|
|
374
|
+
return true;
|
|
375
|
+
}
|
|
376
|
+
|
|
377
|
+
// ========================================
|
|
378
|
+
// ES6 CLASSES
|
|
379
|
+
// ========================================
|
|
380
|
+
|
|
381
|
+
// ✅ GOOD: Class with constructor and methods
|
|
382
|
+
class User {
|
|
383
|
+
constructor(name, email) {
|
|
384
|
+
this.name = name;
|
|
385
|
+
this.email = email;
|
|
386
|
+
this.createdAt = new Date();
|
|
387
|
+
}
|
|
388
|
+
|
|
389
|
+
getProfile() {
|
|
390
|
+
return {
|
|
391
|
+
name: this.name,
|
|
392
|
+
email: this.email,
|
|
393
|
+
memberSince: this.createdAt
|
|
394
|
+
};
|
|
395
|
+
}
|
|
396
|
+
|
|
397
|
+
updateEmail(newEmail) {
|
|
398
|
+
if (!newEmail.includes('@')) {
|
|
399
|
+
throw new ValidationError('Invalid email', 'email');
|
|
400
|
+
}
|
|
401
|
+
this.email = newEmail;
|
|
402
|
+
}
|
|
403
|
+
}
|
|
404
|
+
|
|
405
|
+
// ✅ GOOD: Class inheritance
|
|
406
|
+
class AdminUser extends User {
|
|
407
|
+
constructor(name, email, permissions) {
|
|
408
|
+
super(name, email);
|
|
409
|
+
this.permissions = permissions;
|
|
410
|
+
}
|
|
411
|
+
|
|
412
|
+
hasPermission(permission) {
|
|
413
|
+
return this.permissions.includes(permission);
|
|
414
|
+
}
|
|
415
|
+
|
|
416
|
+
getProfile() {
|
|
417
|
+
return {
|
|
418
|
+
...super.getProfile(),
|
|
419
|
+
role: 'admin',
|
|
420
|
+
permissions: this.permissions
|
|
421
|
+
};
|
|
422
|
+
}
|
|
423
|
+
}
|
|
424
|
+
|
|
425
|
+
// ✅ GOOD: Static methods
|
|
426
|
+
class MathUtils {
|
|
427
|
+
static add(a, b) {
|
|
428
|
+
return a + b;
|
|
429
|
+
}
|
|
430
|
+
|
|
431
|
+
static multiply(a, b) {
|
|
432
|
+
return a * b;
|
|
433
|
+
}
|
|
434
|
+
}
|
|
435
|
+
|
|
436
|
+
// Usage: MathUtils.add(5, 3)
|
|
437
|
+
|
|
438
|
+
// ✅ GOOD: Private fields (modern JavaScript)
|
|
439
|
+
class BankAccount {
|
|
440
|
+
#balance = 0; // Private field
|
|
441
|
+
|
|
442
|
+
constructor(initialBalance) {
|
|
443
|
+
this.#balance = initialBalance;
|
|
444
|
+
}
|
|
445
|
+
|
|
446
|
+
deposit(amount) {
|
|
447
|
+
if (amount > 0) {
|
|
448
|
+
this.#balance += amount;
|
|
449
|
+
}
|
|
450
|
+
}
|
|
451
|
+
|
|
452
|
+
getBalance() {
|
|
453
|
+
return this.#balance;
|
|
454
|
+
}
|
|
455
|
+
}
|
|
456
|
+
|
|
457
|
+
// ========================================
|
|
458
|
+
// MODERN PATTERNS
|
|
459
|
+
// ========================================
|
|
460
|
+
|
|
461
|
+
// ✅ GOOD: Debounce function
|
|
462
|
+
function debounce(func, delay) {
|
|
463
|
+
let timeoutId;
|
|
464
|
+
return function (...args) {
|
|
465
|
+
clearTimeout(timeoutId);
|
|
466
|
+
timeoutId = setTimeout(() => func.apply(this, args), delay);
|
|
467
|
+
};
|
|
468
|
+
}
|
|
469
|
+
|
|
470
|
+
// Usage
|
|
471
|
+
const handleSearch = debounce((query) => {
|
|
472
|
+
console.log('Searching for:', query);
|
|
473
|
+
}, 300);
|
|
474
|
+
|
|
475
|
+
// ✅ GOOD: Throttle function
|
|
476
|
+
function throttle(func, limit) {
|
|
477
|
+
let inThrottle;
|
|
478
|
+
return function (...args) {
|
|
479
|
+
if (!inThrottle) {
|
|
480
|
+
func.apply(this, args);
|
|
481
|
+
inThrottle = true;
|
|
482
|
+
setTimeout(() => inThrottle = false, limit);
|
|
483
|
+
}
|
|
484
|
+
};
|
|
485
|
+
}
|
|
486
|
+
|
|
487
|
+
// ✅ GOOD: Memoization
|
|
488
|
+
function memoize(fn) {
|
|
489
|
+
const cache = new Map();
|
|
490
|
+
return function (...args) {
|
|
491
|
+
const key = JSON.stringify(args);
|
|
492
|
+
if (cache.has(key)) {
|
|
493
|
+
return cache.get(key);
|
|
494
|
+
}
|
|
495
|
+
const result = fn.apply(this, args);
|
|
496
|
+
cache.set(key, result);
|
|
497
|
+
return result;
|
|
498
|
+
};
|
|
499
|
+
}
|
|
500
|
+
|
|
501
|
+
// ✅ GOOD: Composition
|
|
502
|
+
const compose = (...fns) => x => fns.reduceRight((acc, fn) => fn(acc), x);
|
|
503
|
+
|
|
504
|
+
const addOne = x => x + 1;
|
|
505
|
+
const double = x => x * 2;
|
|
506
|
+
const square = x => x * x;
|
|
507
|
+
|
|
508
|
+
const transform = compose(square, double, addOne);
|
|
509
|
+
// transform(3) => square(double(addOne(3))) => square(double(4)) => square(8) => 64
|
|
510
|
+
|
|
511
|
+
// ========================================
|
|
512
|
+
// FETCH API EXAMPLES
|
|
513
|
+
// ========================================
|
|
514
|
+
|
|
515
|
+
// ✅ GOOD: GET request
|
|
516
|
+
async function getUsers() {
|
|
517
|
+
try {
|
|
518
|
+
const response = await fetch(`${API_URL}/users`);
|
|
519
|
+
|
|
520
|
+
if (!response.ok) {
|
|
521
|
+
throw new Error(`HTTP ${response.status}: ${response.statusText}`);
|
|
522
|
+
}
|
|
523
|
+
|
|
524
|
+
const users = await response.json();
|
|
525
|
+
return users;
|
|
526
|
+
} catch (error) {
|
|
527
|
+
console.error('Failed to fetch users:', error);
|
|
528
|
+
throw error;
|
|
529
|
+
}
|
|
530
|
+
}
|
|
531
|
+
|
|
532
|
+
// ✅ GOOD: POST request
|
|
533
|
+
async function createUser(userData) {
|
|
534
|
+
try {
|
|
535
|
+
const response = await fetch(`${API_URL}/users`, {
|
|
536
|
+
method: 'POST',
|
|
537
|
+
headers: {
|
|
538
|
+
'Content-Type': 'application/json',
|
|
539
|
+
},
|
|
540
|
+
body: JSON.stringify(userData)
|
|
541
|
+
});
|
|
542
|
+
|
|
543
|
+
if (!response.ok) {
|
|
544
|
+
throw new Error(`HTTP ${response.status}`);
|
|
545
|
+
}
|
|
546
|
+
|
|
547
|
+
const newUser = await response.json();
|
|
548
|
+
return newUser;
|
|
549
|
+
} catch (error) {
|
|
550
|
+
console.error('Failed to create user:', error);
|
|
551
|
+
throw error;
|
|
552
|
+
}
|
|
553
|
+
}
|
|
554
|
+
|
|
555
|
+
// ✅ GOOD: Request with timeout
|
|
556
|
+
async function fetchWithTimeout(url, timeout = 5000) {
|
|
557
|
+
const controller = new AbortController();
|
|
558
|
+
const timeoutId = setTimeout(() => controller.abort(), timeout);
|
|
559
|
+
|
|
560
|
+
try {
|
|
561
|
+
const response = await fetch(url, { signal: controller.signal });
|
|
562
|
+
clearTimeout(timeoutId);
|
|
563
|
+
return response;
|
|
564
|
+
} catch (error) {
|
|
565
|
+
if (error.name === 'AbortError') {
|
|
566
|
+
throw new Error('Request timeout');
|
|
567
|
+
}
|
|
568
|
+
throw error;
|
|
569
|
+
}
|
|
570
|
+
}
|
|
571
|
+
|
|
572
|
+
// ========================================
|
|
573
|
+
// UTILITY FUNCTIONS
|
|
574
|
+
// ========================================
|
|
575
|
+
|
|
576
|
+
// ✅ GOOD: Deep clone
|
|
577
|
+
function deepClone(obj) {
|
|
578
|
+
return JSON.parse(JSON.stringify(obj));
|
|
579
|
+
}
|
|
580
|
+
|
|
581
|
+
// ✅ GOOD: Check if object is empty
|
|
582
|
+
function isEmpty(obj) {
|
|
583
|
+
return Object.keys(obj).length === 0;
|
|
584
|
+
}
|
|
585
|
+
|
|
586
|
+
// ✅ GOOD: Capitalize first letter
|
|
587
|
+
function capitalize(str) {
|
|
588
|
+
return str.charAt(0).toUpperCase() + str.slice(1);
|
|
589
|
+
}
|
|
590
|
+
|
|
591
|
+
// ✅ GOOD: Generate unique ID
|
|
592
|
+
function generateId() {
|
|
593
|
+
return `${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;
|
|
594
|
+
}
|
|
595
|
+
|
|
596
|
+
// ✅ GOOD: Format currency
|
|
597
|
+
function formatCurrency(amount, currency = 'USD') {
|
|
598
|
+
return new Intl.NumberFormat('en-US', {
|
|
599
|
+
style: 'currency',
|
|
600
|
+
currency
|
|
601
|
+
}).format(amount);
|
|
602
|
+
}
|
|
603
|
+
|
|
604
|
+
// ✅ GOOD: Format date
|
|
605
|
+
function formatDate(date, locale = 'en-US') {
|
|
606
|
+
return new Intl.DateTimeFormat(locale, {
|
|
607
|
+
year: 'numeric',
|
|
608
|
+
month: 'long',
|
|
609
|
+
day: 'numeric'
|
|
610
|
+
}).format(new Date(date));
|
|
611
|
+
}
|
|
612
|
+
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "js-standards",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"displayName": "JavaScript Standards",
|
|
5
|
+
"description": "Comprehensive JavaScript coding standards for modern web development with ES6+, DOM manipulation, async patterns, and framework integration",
|
|
6
|
+
"type": "coding-standards",
|
|
7
|
+
"language": "javascript",
|
|
8
|
+
"tags": ["javascript", "js", "web", "frontend", "es6", "async", "dom"],
|
|
9
|
+
"dependencies": [],
|
|
10
|
+
"augment": {
|
|
11
|
+
"characterCount": 101818,
|
|
12
|
+
"priority": "high",
|
|
13
|
+
"category": "coding-standards",
|
|
14
|
+
"appliesTo": {
|
|
15
|
+
"filePatterns": [
|
|
16
|
+
"**/*.js",
|
|
17
|
+
"**/*.mjs",
|
|
18
|
+
"**/*.cjs"
|
|
19
|
+
],
|
|
20
|
+
"projectTypes": [
|
|
21
|
+
"web",
|
|
22
|
+
"frontend",
|
|
23
|
+
"node"
|
|
24
|
+
]
|
|
25
|
+
}
|
|
26
|
+
},
|
|
27
|
+
"installation": {
|
|
28
|
+
"required": false,
|
|
29
|
+
"steps": [
|
|
30
|
+
"Link module using: augx link coding-standards/js",
|
|
31
|
+
"Or manually copy contents to project's .augment/ folder"
|
|
32
|
+
]
|
|
33
|
+
},
|
|
34
|
+
"contents": {
|
|
35
|
+
"rules": [
|
|
36
|
+
"javascript-standards.md",
|
|
37
|
+
"dom-manipulation.md",
|
|
38
|
+
"async-patterns.md",
|
|
39
|
+
"performance.md",
|
|
40
|
+
"tooling.md"
|
|
41
|
+
],
|
|
42
|
+
"examples": [
|
|
43
|
+
"javascript-examples.js",
|
|
44
|
+
"async-examples.js",
|
|
45
|
+
"dom-examples.js"
|
|
46
|
+
]
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|