@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,480 @@
|
|
|
1
|
+
# PHP API Development Best Practices
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
This guide provides best practices for developing RESTful APIs in PHP, including proper HTTP method usage, authentication, response formatting, versioning, and error handling.
|
|
6
|
+
|
|
7
|
+
## RESTful Design Principles
|
|
8
|
+
|
|
9
|
+
### HTTP Methods
|
|
10
|
+
|
|
11
|
+
Use HTTP methods semantically:
|
|
12
|
+
|
|
13
|
+
- **GET** - Retrieve resources (idempotent, safe)
|
|
14
|
+
- **POST** - Create new resources
|
|
15
|
+
- **PUT** - Replace entire resource
|
|
16
|
+
- **PATCH** - Partial update of resource
|
|
17
|
+
- **DELETE** - Remove resource
|
|
18
|
+
|
|
19
|
+
```php
|
|
20
|
+
<?php
|
|
21
|
+
|
|
22
|
+
namespace App\Controllers\Api;
|
|
23
|
+
|
|
24
|
+
use App\Models\User;
|
|
25
|
+
use Illuminate\Http\JsonResponse;
|
|
26
|
+
use Illuminate\Http\Request;
|
|
27
|
+
|
|
28
|
+
class UserApiController
|
|
29
|
+
{
|
|
30
|
+
// GET /api/users - List all users
|
|
31
|
+
public function index(): JsonResponse
|
|
32
|
+
{
|
|
33
|
+
$users = User::paginate(20);
|
|
34
|
+
|
|
35
|
+
return response()->json([
|
|
36
|
+
'data' => $users->items(),
|
|
37
|
+
'meta' => [
|
|
38
|
+
'current_page' => $users->currentPage(),
|
|
39
|
+
'total' => $users->total(),
|
|
40
|
+
'per_page' => $users->perPage()
|
|
41
|
+
],
|
|
42
|
+
'links' => [
|
|
43
|
+
'self' => url('/api/users'),
|
|
44
|
+
'next' => $users->nextPageUrl(),
|
|
45
|
+
'prev' => $users->previousPageUrl()
|
|
46
|
+
]
|
|
47
|
+
]);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
// GET /api/users/{id} - Get single user
|
|
51
|
+
public function show(int $id): JsonResponse
|
|
52
|
+
{
|
|
53
|
+
$user = User::findOrFail($id);
|
|
54
|
+
|
|
55
|
+
return response()->json([
|
|
56
|
+
'data' => $user,
|
|
57
|
+
'links' => [
|
|
58
|
+
'self' => url("/api/users/{$id}"),
|
|
59
|
+
'posts' => url("/api/users/{$id}/posts")
|
|
60
|
+
]
|
|
61
|
+
]);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
// POST /api/users - Create new user
|
|
65
|
+
public function store(Request $request): JsonResponse
|
|
66
|
+
{
|
|
67
|
+
$validated = $request->validate([
|
|
68
|
+
'name' => 'required|string|max:255',
|
|
69
|
+
'email' => 'required|email|unique:users'
|
|
70
|
+
]);
|
|
71
|
+
|
|
72
|
+
$user = User::create($validated);
|
|
73
|
+
|
|
74
|
+
return response()->json([
|
|
75
|
+
'data' => $user,
|
|
76
|
+
'message' => 'User created successfully'
|
|
77
|
+
], 201);
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
// PUT /api/users/{id} - Replace entire user
|
|
81
|
+
public function update(Request $request, int $id): JsonResponse
|
|
82
|
+
{
|
|
83
|
+
$user = User::findOrFail($id);
|
|
84
|
+
|
|
85
|
+
$validated = $request->validate([
|
|
86
|
+
'name' => 'required|string|max:255',
|
|
87
|
+
'email' => 'required|email|unique:users,email,' . $id
|
|
88
|
+
]);
|
|
89
|
+
|
|
90
|
+
$user->update($validated);
|
|
91
|
+
|
|
92
|
+
return response()->json([
|
|
93
|
+
'data' => $user,
|
|
94
|
+
'message' => 'User updated successfully'
|
|
95
|
+
]);
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
// PATCH /api/users/{id} - Partial update
|
|
99
|
+
public function patch(Request $request, int $id): JsonResponse
|
|
100
|
+
{
|
|
101
|
+
$user = User::findOrFail($id);
|
|
102
|
+
|
|
103
|
+
$validated = $request->validate([
|
|
104
|
+
'name' => 'sometimes|string|max:255',
|
|
105
|
+
'email' => 'sometimes|email|unique:users,email,' . $id
|
|
106
|
+
]);
|
|
107
|
+
|
|
108
|
+
$user->update($validated);
|
|
109
|
+
|
|
110
|
+
return response()->json([
|
|
111
|
+
'data' => $user
|
|
112
|
+
]);
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
// DELETE /api/users/{id} - Delete user
|
|
116
|
+
public function destroy(int $id): JsonResponse
|
|
117
|
+
{
|
|
118
|
+
$user = User::findOrFail($id);
|
|
119
|
+
$user->delete();
|
|
120
|
+
|
|
121
|
+
return response()->json([
|
|
122
|
+
'message' => 'User deleted successfully'
|
|
123
|
+
], 204);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
### Resource Naming
|
|
129
|
+
|
|
130
|
+
**Use plural nouns** for resource names:
|
|
131
|
+
|
|
132
|
+
```
|
|
133
|
+
✅ Good:
|
|
134
|
+
GET /api/users
|
|
135
|
+
GET /api/users/123
|
|
136
|
+
GET /api/users/123/posts
|
|
137
|
+
POST /api/posts
|
|
138
|
+
|
|
139
|
+
❌ Bad:
|
|
140
|
+
GET /api/getUsers
|
|
141
|
+
GET /api/user/123
|
|
142
|
+
POST /api/createPost
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
## API Versioning
|
|
146
|
+
|
|
147
|
+
### URL-Based Versioning
|
|
148
|
+
|
|
149
|
+
```php
|
|
150
|
+
<?php
|
|
151
|
+
|
|
152
|
+
// routes/api.php
|
|
153
|
+
Route::prefix('v1')->group(function () {
|
|
154
|
+
Route::apiResource('users', UserApiController::class);
|
|
155
|
+
Route::apiResource('posts', PostApiController::class);
|
|
156
|
+
});
|
|
157
|
+
|
|
158
|
+
Route::prefix('v2')->group(function () {
|
|
159
|
+
Route::apiResource('users', V2\UserApiController::class);
|
|
160
|
+
Route::apiResource('posts', V2\PostApiController::class);
|
|
161
|
+
});
|
|
162
|
+
|
|
163
|
+
// URLs:
|
|
164
|
+
// /api/v1/users
|
|
165
|
+
// /api/v2/users
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
### Header-Based Versioning
|
|
169
|
+
|
|
170
|
+
```php
|
|
171
|
+
<?php
|
|
172
|
+
|
|
173
|
+
// Middleware to handle API versioning
|
|
174
|
+
class ApiVersion
|
|
175
|
+
{
|
|
176
|
+
public function handle(Request $request, Closure $next)
|
|
177
|
+
{
|
|
178
|
+
$version = $request->header('Accept-Version', 'v1');
|
|
179
|
+
|
|
180
|
+
$request->attributes->set('api_version', $version);
|
|
181
|
+
|
|
182
|
+
return $next($request);
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
## Authentication
|
|
188
|
+
|
|
189
|
+
### JWT Authentication
|
|
190
|
+
|
|
191
|
+
```php
|
|
192
|
+
<?php
|
|
193
|
+
|
|
194
|
+
use Firebase\JWT\JWT;
|
|
195
|
+
use Firebase\JWT\Key;
|
|
196
|
+
|
|
197
|
+
class JwtAuthController
|
|
198
|
+
{
|
|
199
|
+
public function login(Request $request): JsonResponse
|
|
200
|
+
{
|
|
201
|
+
$credentials = $request->validate([
|
|
202
|
+
'email' => 'required|email',
|
|
203
|
+
'password' => 'required'
|
|
204
|
+
]);
|
|
205
|
+
|
|
206
|
+
if (!Auth::attempt($credentials)) {
|
|
207
|
+
return response()->json([
|
|
208
|
+
'error' => 'Invalid credentials'
|
|
209
|
+
], 401);
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
$user = Auth::user();
|
|
213
|
+
$token = $this->generateToken($user);
|
|
214
|
+
|
|
215
|
+
return response()->json([
|
|
216
|
+
'access_token' => $token,
|
|
217
|
+
'token_type' => 'Bearer',
|
|
218
|
+
'expires_in' => 3600
|
|
219
|
+
]);
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
private function generateToken(User $user): string
|
|
223
|
+
{
|
|
224
|
+
$payload = [
|
|
225
|
+
'iss' => config('app.url'),
|
|
226
|
+
'sub' => $user->id,
|
|
227
|
+
'iat' => time(),
|
|
228
|
+
'exp' => time() + 3600
|
|
229
|
+
];
|
|
230
|
+
|
|
231
|
+
return JWT::encode($payload, config('jwt.secret'), 'HS256');
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
```
|
|
235
|
+
|
|
236
|
+
### API Token Authentication
|
|
237
|
+
|
|
238
|
+
```php
|
|
239
|
+
<?php
|
|
240
|
+
|
|
241
|
+
// Middleware
|
|
242
|
+
class AuthenticateApiToken
|
|
243
|
+
{
|
|
244
|
+
public function handle(Request $request, Closure $next)
|
|
245
|
+
{
|
|
246
|
+
$token = $request->bearerToken();
|
|
247
|
+
|
|
248
|
+
if (!$token) {
|
|
249
|
+
return response()->json([
|
|
250
|
+
'error' => 'Unauthorized'
|
|
251
|
+
], 401);
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
$user = User::where('api_token', hash('sha256', $token))->first();
|
|
255
|
+
|
|
256
|
+
if (!$user) {
|
|
257
|
+
return response()->json([
|
|
258
|
+
'error' => 'Invalid token'
|
|
259
|
+
], 401);
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
Auth::setUser($user);
|
|
263
|
+
|
|
264
|
+
return $next($request);
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
```
|
|
268
|
+
|
|
269
|
+
## Response Formatting
|
|
270
|
+
|
|
271
|
+
### Consistent Response Structure
|
|
272
|
+
|
|
273
|
+
```php
|
|
274
|
+
<?php
|
|
275
|
+
|
|
276
|
+
namespace App\Http\Resources;
|
|
277
|
+
|
|
278
|
+
use Illuminate\Http\Resources\Json\JsonResource;
|
|
279
|
+
|
|
280
|
+
class UserResource extends JsonResource
|
|
281
|
+
{
|
|
282
|
+
public function toArray($request): array
|
|
283
|
+
{
|
|
284
|
+
return [
|
|
285
|
+
'id' => $this->id,
|
|
286
|
+
'name' => $this->name,
|
|
287
|
+
'email' => $this->email,
|
|
288
|
+
'created_at' => $this->created_at->toIso8601String(),
|
|
289
|
+
'updated_at' => $this->updated_at->toIso8601String(),
|
|
290
|
+
'links' => [
|
|
291
|
+
'self' => url("/api/users/{$this->id}"),
|
|
292
|
+
'posts' => url("/api/users/{$this->id}/posts")
|
|
293
|
+
]
|
|
294
|
+
];
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
// Usage in controller
|
|
299
|
+
public function show(int $id): JsonResponse
|
|
300
|
+
{
|
|
301
|
+
$user = User::findOrFail($id);
|
|
302
|
+
return new UserResource($user);
|
|
303
|
+
}
|
|
304
|
+
```
|
|
305
|
+
|
|
306
|
+
### HTTP Status Codes
|
|
307
|
+
|
|
308
|
+
Use appropriate status codes:
|
|
309
|
+
|
|
310
|
+
```php
|
|
311
|
+
<?php
|
|
312
|
+
|
|
313
|
+
// Success responses
|
|
314
|
+
return response()->json($data, 200); // OK
|
|
315
|
+
return response()->json($data, 201); // Created
|
|
316
|
+
return response()->json(null, 204); // No Content
|
|
317
|
+
|
|
318
|
+
// Client error responses
|
|
319
|
+
return response()->json(['error' => 'Bad Request'], 400);
|
|
320
|
+
return response()->json(['error' => 'Unauthorized'], 401);
|
|
321
|
+
return response()->json(['error' => 'Forbidden'], 403);
|
|
322
|
+
return response()->json(['error' => 'Not Found'], 404);
|
|
323
|
+
return response()->json(['error' => 'Validation Failed'], 422);
|
|
324
|
+
|
|
325
|
+
// Server error responses
|
|
326
|
+
return response()->json(['error' => 'Internal Server Error'], 500);
|
|
327
|
+
return response()->json(['error' => 'Service Unavailable'], 503);
|
|
328
|
+
```
|
|
329
|
+
|
|
330
|
+
### Error Response Format
|
|
331
|
+
|
|
332
|
+
```php
|
|
333
|
+
<?php
|
|
334
|
+
|
|
335
|
+
namespace App\Exceptions;
|
|
336
|
+
|
|
337
|
+
use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;
|
|
338
|
+
use Illuminate\Validation\ValidationException;
|
|
339
|
+
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
|
|
340
|
+
|
|
341
|
+
class Handler extends ExceptionHandler
|
|
342
|
+
{
|
|
343
|
+
public function render($request, Throwable $exception)
|
|
344
|
+
{
|
|
345
|
+
if ($request->is('api/*')) {
|
|
346
|
+
return $this->handleApiException($request, $exception);
|
|
347
|
+
}
|
|
348
|
+
|
|
349
|
+
return parent::render($request, $exception);
|
|
350
|
+
}
|
|
351
|
+
|
|
352
|
+
private function handleApiException($request, Throwable $exception)
|
|
353
|
+
{
|
|
354
|
+
if ($exception instanceof ValidationException) {
|
|
355
|
+
return response()->json([
|
|
356
|
+
'error' => 'Validation failed',
|
|
357
|
+
'message' => $exception->getMessage(),
|
|
358
|
+
'errors' => $exception->errors()
|
|
359
|
+
], 422);
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
if ($exception instanceof NotFoundHttpException) {
|
|
363
|
+
return response()->json([
|
|
364
|
+
'error' => 'Resource not found',
|
|
365
|
+
'message' => 'The requested resource does not exist'
|
|
366
|
+
], 404);
|
|
367
|
+
}
|
|
368
|
+
|
|
369
|
+
return response()->json([
|
|
370
|
+
'error' => 'Server error',
|
|
371
|
+
'message' => config('app.debug') ? $exception->getMessage() : 'An error occurred'
|
|
372
|
+
], 500);
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
```
|
|
376
|
+
|
|
377
|
+
## Pagination
|
|
378
|
+
|
|
379
|
+
### Implementing Pagination
|
|
380
|
+
|
|
381
|
+
```php
|
|
382
|
+
<?php
|
|
383
|
+
|
|
384
|
+
public function index(Request $request): JsonResponse
|
|
385
|
+
{
|
|
386
|
+
$perPage = $request->input('per_page', 20);
|
|
387
|
+
$users = User::paginate($perPage);
|
|
388
|
+
|
|
389
|
+
return response()->json([
|
|
390
|
+
'data' => UserResource::collection($users),
|
|
391
|
+
'meta' => [
|
|
392
|
+
'current_page' => $users->currentPage(),
|
|
393
|
+
'from' => $users->firstItem(),
|
|
394
|
+
'to' => $users->lastItem(),
|
|
395
|
+
'total' => $users->total(),
|
|
396
|
+
'per_page' => $users->perPage(),
|
|
397
|
+
'last_page' => $users->lastPage()
|
|
398
|
+
],
|
|
399
|
+
'links' => [
|
|
400
|
+
'first' => $users->url(1),
|
|
401
|
+
'last' => $users->url($users->lastPage()),
|
|
402
|
+
'prev' => $users->previousPageUrl(),
|
|
403
|
+
'next' => $users->nextPageUrl()
|
|
404
|
+
]
|
|
405
|
+
]);
|
|
406
|
+
}
|
|
407
|
+
```
|
|
408
|
+
|
|
409
|
+
## Rate Limiting
|
|
410
|
+
|
|
411
|
+
### Implementing Rate Limits
|
|
412
|
+
|
|
413
|
+
```php
|
|
414
|
+
<?php
|
|
415
|
+
|
|
416
|
+
// routes/api.php
|
|
417
|
+
Route::middleware(['throttle:60,1'])->group(function () {
|
|
418
|
+
Route::apiResource('users', UserApiController::class);
|
|
419
|
+
});
|
|
420
|
+
|
|
421
|
+
// Custom rate limiter
|
|
422
|
+
use Illuminate\Cache\RateLimiting\Limit;
|
|
423
|
+
use Illuminate\Support\Facades\RateLimiter;
|
|
424
|
+
|
|
425
|
+
RateLimiter::for('api', function (Request $request) {
|
|
426
|
+
return Limit::perMinute(60)->by($request->user()?->id ?: $request->ip());
|
|
427
|
+
});
|
|
428
|
+
|
|
429
|
+
// Different limits for authenticated vs guest
|
|
430
|
+
RateLimiter::for('api', function (Request $request) {
|
|
431
|
+
return $request->user()
|
|
432
|
+
? Limit::perMinute(100)->by($request->user()->id)
|
|
433
|
+
: Limit::perMinute(20)->by($request->ip());
|
|
434
|
+
});
|
|
435
|
+
```
|
|
436
|
+
|
|
437
|
+
## Best Practices
|
|
438
|
+
|
|
439
|
+
### ✅ DO
|
|
440
|
+
|
|
441
|
+
- Use API resources for consistent response formatting
|
|
442
|
+
- Implement proper authentication (JWT, OAuth 2.0)
|
|
443
|
+
- Use rate limiting to prevent abuse
|
|
444
|
+
- Version your API from the start
|
|
445
|
+
- Return appropriate HTTP status codes
|
|
446
|
+
- Implement HATEOAS links in responses
|
|
447
|
+
- Use pagination for list endpoints
|
|
448
|
+
- Validate all input data
|
|
449
|
+
- Log API requests and errors
|
|
450
|
+
- Document your API (OpenAPI/Swagger)
|
|
451
|
+
- Use HTTPS in production
|
|
452
|
+
- Implement proper CORS configuration
|
|
453
|
+
|
|
454
|
+
### ❌ DON'T
|
|
455
|
+
|
|
456
|
+
- Return HTML from API endpoints
|
|
457
|
+
- Use sessions for API authentication
|
|
458
|
+
- Expose internal error details in production
|
|
459
|
+
- Use GET requests for state-changing operations
|
|
460
|
+
- Return different response structures for same endpoint
|
|
461
|
+
- Ignore API versioning
|
|
462
|
+
- Allow unlimited requests (no rate limiting)
|
|
463
|
+
- Use verbs in endpoint URLs
|
|
464
|
+
- Return 200 OK for errors
|
|
465
|
+
- Expose sensitive data in responses
|
|
466
|
+
|
|
467
|
+
## Security Checklist
|
|
468
|
+
|
|
469
|
+
- [ ] Authentication required for protected endpoints
|
|
470
|
+
- [ ] Rate limiting implemented
|
|
471
|
+
- [ ] Input validation on all endpoints
|
|
472
|
+
- [ ] HTTPS enforced
|
|
473
|
+
- [ ] CORS properly configured
|
|
474
|
+
- [ ] API tokens stored securely (hashed)
|
|
475
|
+
- [ ] Sensitive data not exposed in responses
|
|
476
|
+
- [ ] SQL injection prevention (prepared statements)
|
|
477
|
+
- [ ] XSS prevention (proper encoding)
|
|
478
|
+
- [ ] CSRF protection (for cookie-based auth)
|
|
479
|
+
- [ ] Request size limits enforced
|
|
480
|
+
- [ ] Proper error handling (no stack traces in production)
|