@mytechtoday/augment-extensions 0.2.0 → 0.5.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/design/color/themes/catppuccin-latte/README.md +23 -0
- package/augment-extensions/domain-rules/design/color/themes/catppuccin-latte/module.json +26 -0
- package/augment-extensions/domain-rules/design/color/themes/catppuccin-mocha/README.md +23 -0
- package/augment-extensions/domain-rules/design/color/themes/catppuccin-mocha/module.json +26 -0
- package/augment-extensions/domain-rules/design/color/themes/dracula/README.md +23 -0
- package/augment-extensions/domain-rules/design/color/themes/dracula/module.json +26 -0
- package/augment-extensions/domain-rules/design/color/themes/gruvbox-dark/README.md +23 -0
- package/augment-extensions/domain-rules/design/color/themes/gruvbox-dark/module.json +26 -0
- package/augment-extensions/domain-rules/design/color/themes/gruvbox-light/README.md +23 -0
- package/augment-extensions/domain-rules/design/color/themes/gruvbox-light/module.json +26 -0
- package/augment-extensions/domain-rules/design/color/themes/high-contrast/README.md +27 -0
- package/augment-extensions/domain-rules/design/color/themes/high-contrast/module.json +26 -0
- package/augment-extensions/domain-rules/design/color/themes/monokai/README.md +23 -0
- package/augment-extensions/domain-rules/design/color/themes/monokai/module.json +26 -0
- package/augment-extensions/domain-rules/design/color/themes/nord/README.md +23 -0
- package/augment-extensions/domain-rules/design/color/themes/nord/module.json +26 -0
- package/augment-extensions/domain-rules/design/color/themes/one-dark/README.md +23 -0
- package/augment-extensions/domain-rules/design/color/themes/one-dark/module.json +26 -0
- package/augment-extensions/domain-rules/design/color/themes/one-light/README.md +23 -0
- package/augment-extensions/domain-rules/design/color/themes/one-light/module.json +26 -0
- package/augment-extensions/domain-rules/design/color/themes/solarized-dark/README.md +23 -0
- package/augment-extensions/domain-rules/design/color/themes/solarized-dark/module.json +26 -0
- package/augment-extensions/domain-rules/design/color/themes/solarized-light/README.md +23 -0
- package/augment-extensions/domain-rules/design/color/themes/solarized-light/module.json +26 -0
- package/augment-extensions/domain-rules/design/color/themes/tokyo-night/README.md +23 -0
- package/augment-extensions/domain-rules/design/color/themes/tokyo-night/module.json +26 -0
- package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/README.md +136 -0
- package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/SCHEMA-VALIDATION-REPORT.md +216 -0
- package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/examples/brand-kit-example.yaml +292 -0
- package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/examples/campaign-brief-example.yaml +389 -0
- package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/examples/content-calendar-example.yaml +643 -0
- package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/examples/email-newsletter-example.md +376 -0
- package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/examples/landing-page-example.md +934 -0
- package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/examples/ppc-ad-copy-example.md +301 -0
- package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/examples/seo-blog-post-example.md +347 -0
- package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/examples/social-media-campaign-example.md +606 -0
- package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/module.json +50 -0
- package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/rules/affiliate-influencer-marketing.md +593 -0
- package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/rules/asset-management.md +418 -0
- package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/rules/brand-consistency.md +210 -0
- package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/rules/content-marketing.md +337 -0
- package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/rules/conversion-optimization.md +455 -0
- package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/rules/direct-sales.md +499 -0
- package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/rules/email-marketing.md +439 -0
- package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/rules/legal-compliance.md +227 -0
- package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/rules/ppc-advertising.md +569 -0
- package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/rules/seo-optimization.md +470 -0
- package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/rules/social-media-marketing.md +414 -0
- package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/rules/universal-marketing.md +177 -0
- package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/schemas/asset-inventory.schema.json +247 -0
- package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/schemas/brand-kit.schema.json +326 -0
- package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/schemas/campaign-brief.schema.json +342 -0
- package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/schemas/color-palette.schema.json +223 -0
- package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/schemas/content-template.schema.json +383 -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/workflows/beads/module.json +4 -3
- package/augment-extensions/workflows/beads-integration/IMPLEMENTATION-STATUS.md +145 -0
- package/augment-extensions/workflows/beads-integration/README.md +143 -0
- package/augment-extensions/workflows/beads-integration/config/defaults.json +32 -0
- package/augment-extensions/workflows/beads-integration/config/schema.json +140 -0
- package/augment-extensions/workflows/beads-integration/examples/basic-task-generation.md +293 -0
- package/augment-extensions/workflows/beads-integration/module.json +75 -0
- package/augment-extensions/workflows/beads-integration/rules/core-rules.md +219 -0
- package/augment-extensions/workflows/beads-integration/rules/effectiveness-standards.md +256 -0
- package/augment-extensions/workflows/beads-integration/rules/task-generation.md +607 -0
- 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/writing-standards/screenplay/README.md +300 -0
- package/augment-extensions/writing-standards/screenplay/_templates/README.md +121 -0
- package/augment-extensions/writing-standards/screenplay/_templates/genre-template.md +153 -0
- package/augment-extensions/writing-standards/screenplay/_templates/style-template.md +243 -0
- package/augment-extensions/writing-standards/screenplay/_templates/theme-template.md +213 -0
- package/augment-extensions/writing-standards/screenplay/examples/aaa-hollywood-scene.fountain +164 -0
- package/augment-extensions/writing-standards/screenplay/examples/beat-sheet-example.yaml +95 -0
- package/augment-extensions/writing-standards/screenplay/examples/character-profile-example.yaml +116 -0
- package/augment-extensions/writing-standards/screenplay/examples/commercial-30sec.fountain +151 -0
- package/augment-extensions/writing-standards/screenplay/examples/independent-monologue.fountain +67 -0
- package/augment-extensions/writing-standards/screenplay/examples/news-segment.fountain +142 -0
- package/augment-extensions/writing-standards/screenplay/examples/plot-outline-example.yaml +184 -0
- package/augment-extensions/writing-standards/screenplay/examples/tv-episode-teaser.fountain +204 -0
- package/augment-extensions/writing-standards/screenplay/genres/README.md +181 -0
- package/augment-extensions/writing-standards/screenplay/genres/examples/.gitkeep +2 -0
- package/augment-extensions/writing-standards/screenplay/genres/module.json +70 -0
- package/augment-extensions/writing-standards/screenplay/genres/rules/.gitkeep +2 -0
- package/augment-extensions/writing-standards/screenplay/genres/rules/action.md +399 -0
- package/augment-extensions/writing-standards/screenplay/genres/rules/adventure.md +407 -0
- package/augment-extensions/writing-standards/screenplay/genres/rules/animation.md +293 -0
- package/augment-extensions/writing-standards/screenplay/genres/rules/biographical.md +293 -0
- package/augment-extensions/writing-standards/screenplay/genres/rules/comedy.md +401 -0
- package/augment-extensions/writing-standards/screenplay/genres/rules/documentary.md +293 -0
- package/augment-extensions/writing-standards/screenplay/genres/rules/drama.md +409 -0
- package/augment-extensions/writing-standards/screenplay/genres/rules/fantasy.md +293 -0
- package/augment-extensions/writing-standards/screenplay/genres/rules/historical.md +293 -0
- package/augment-extensions/writing-standards/screenplay/genres/rules/horror.md +268 -0
- package/augment-extensions/writing-standards/screenplay/genres/rules/musical.md +294 -0
- package/augment-extensions/writing-standards/screenplay/genres/rules/mystery.md +293 -0
- package/augment-extensions/writing-standards/screenplay/genres/rules/noir.md +294 -0
- package/augment-extensions/writing-standards/screenplay/genres/rules/romance.md +293 -0
- package/augment-extensions/writing-standards/screenplay/genres/rules/sci-fi.md +289 -0
- package/augment-extensions/writing-standards/screenplay/genres/rules/superhero.md +293 -0
- package/augment-extensions/writing-standards/screenplay/genres/rules/thriller.md +294 -0
- package/augment-extensions/writing-standards/screenplay/genres/rules/western.md +293 -0
- package/augment-extensions/writing-standards/screenplay/module.json +124 -0
- package/augment-extensions/writing-standards/screenplay/rules/aaa-hollywood-films.md +339 -0
- package/augment-extensions/writing-standards/screenplay/rules/ai-integration-testing.md +329 -0
- package/augment-extensions/writing-standards/screenplay/rules/character-development.md +169 -0
- package/augment-extensions/writing-standards/screenplay/rules/commercials.md +437 -0
- package/augment-extensions/writing-standards/screenplay/rules/dialogue-writing.md +263 -0
- package/augment-extensions/writing-standards/screenplay/rules/diversity-inclusion.md +261 -0
- package/augment-extensions/writing-standards/screenplay/rules/examples-guide.md +315 -0
- package/augment-extensions/writing-standards/screenplay/rules/formatting-validation.md +413 -0
- package/augment-extensions/writing-standards/screenplay/rules/fountain-format.md +372 -0
- package/augment-extensions/writing-standards/screenplay/rules/independent-films.md +374 -0
- package/augment-extensions/writing-standards/screenplay/rules/live-tv-productions.md +443 -0
- package/augment-extensions/writing-standards/screenplay/rules/narrative-structures.md +207 -0
- package/augment-extensions/writing-standards/screenplay/rules/news-broadcasts.md +444 -0
- package/augment-extensions/writing-standards/screenplay/rules/pacing-timing.md +331 -0
- package/augment-extensions/writing-standards/screenplay/rules/quality-review-checklist.md +334 -0
- package/augment-extensions/writing-standards/screenplay/rules/quick-reference.md +299 -0
- package/augment-extensions/writing-standards/screenplay/rules/screen-continuity.md +263 -0
- package/augment-extensions/writing-standards/screenplay/rules/streaming-content.md +412 -0
- package/augment-extensions/writing-standards/screenplay/rules/trope-management.md +370 -0
- package/augment-extensions/writing-standards/screenplay/rules/tv-series.md +374 -0
- package/augment-extensions/writing-standards/screenplay/rules/universal-formatting.md +339 -0
- package/augment-extensions/writing-standards/screenplay/rules/vscode-integration.md +277 -0
- package/augment-extensions/writing-standards/screenplay/rules/web-content.md +393 -0
- package/augment-extensions/writing-standards/screenplay/schemas/beat-sheet.json +332 -0
- package/augment-extensions/writing-standards/screenplay/schemas/character-profile.json +247 -0
- package/augment-extensions/writing-standards/screenplay/schemas/feature-selection.json +200 -0
- package/augment-extensions/writing-standards/screenplay/schemas/plot-outline.json +233 -0
- package/augment-extensions/writing-standards/screenplay/schemas/screenplay-config.json +245 -0
- package/augment-extensions/writing-standards/screenplay/schemas/trope-inventory.json +221 -0
- package/augment-extensions/writing-standards/screenplay/styles/README.md +159 -0
- package/augment-extensions/writing-standards/screenplay/styles/examples/.gitkeep +2 -0
- package/augment-extensions/writing-standards/screenplay/styles/examples/style-applications.md +1449 -0
- package/augment-extensions/writing-standards/screenplay/styles/module.json +64 -0
- package/augment-extensions/writing-standards/screenplay/styles/rules/.gitkeep +2 -0
- package/augment-extensions/writing-standards/screenplay/styles/rules/dialogue-centric.md +520 -0
- package/augment-extensions/writing-standards/screenplay/styles/rules/ensemble.md +499 -0
- package/augment-extensions/writing-standards/screenplay/styles/rules/epic.md +497 -0
- package/augment-extensions/writing-standards/screenplay/styles/rules/experimental.md +492 -0
- package/augment-extensions/writing-standards/screenplay/styles/rules/flashback.md +509 -0
- package/augment-extensions/writing-standards/screenplay/styles/rules/linear.md +490 -0
- package/augment-extensions/writing-standards/screenplay/styles/rules/minimalist.md +499 -0
- package/augment-extensions/writing-standards/screenplay/styles/rules/non-linear.md +501 -0
- package/augment-extensions/writing-standards/screenplay/styles/rules/poetic.md +499 -0
- package/augment-extensions/writing-standards/screenplay/styles/rules/realistic.md +498 -0
- package/augment-extensions/writing-standards/screenplay/styles/rules/satirical.md +499 -0
- package/augment-extensions/writing-standards/screenplay/styles/rules/surreal.md +508 -0
- package/augment-extensions/writing-standards/screenplay/styles/rules/voice-over.md +500 -0
- package/augment-extensions/writing-standards/screenplay/themes/README.md +158 -0
- package/augment-extensions/writing-standards/screenplay/themes/examples/.gitkeep +2 -0
- package/augment-extensions/writing-standards/screenplay/themes/examples/common-mistakes-and-fixes.md +643 -0
- package/augment-extensions/writing-standards/screenplay/themes/examples/complete-scene-example.md +311 -0
- package/augment-extensions/writing-standards/screenplay/themes/examples/individual-theme-examples.md +562 -0
- package/augment-extensions/writing-standards/screenplay/themes/examples/multi-theme-weaving.md +538 -0
- package/augment-extensions/writing-standards/screenplay/themes/examples/theme-application-guide.md +432 -0
- package/augment-extensions/writing-standards/screenplay/themes/examples/theme-integration-across-acts.md +637 -0
- package/augment-extensions/writing-standards/screenplay/themes/module.json +66 -0
- package/augment-extensions/writing-standards/screenplay/themes/rules/.gitkeep +2 -0
- package/augment-extensions/writing-standards/screenplay/themes/rules/ambition.md +458 -0
- package/augment-extensions/writing-standards/screenplay/themes/rules/betrayal.md +490 -0
- package/augment-extensions/writing-standards/screenplay/themes/rules/environment.md +458 -0
- package/augment-extensions/writing-standards/screenplay/themes/rules/fate.md +459 -0
- package/augment-extensions/writing-standards/screenplay/themes/rules/friendship.md +491 -0
- package/augment-extensions/writing-standards/screenplay/themes/rules/growth.md +491 -0
- package/augment-extensions/writing-standards/screenplay/themes/rules/identity.md +490 -0
- package/augment-extensions/writing-standards/screenplay/themes/rules/isolation.md +464 -0
- package/augment-extensions/writing-standards/screenplay/themes/rules/justice.md +461 -0
- package/augment-extensions/writing-standards/screenplay/themes/rules/love.md +489 -0
- package/augment-extensions/writing-standards/screenplay/themes/rules/power.md +494 -0
- package/augment-extensions/writing-standards/screenplay/themes/rules/redemption.md +483 -0
- package/augment-extensions/writing-standards/screenplay/themes/rules/revenge.md +489 -0
- package/augment-extensions/writing-standards/screenplay/themes/rules/survival.md +496 -0
- package/augment-extensions/writing-standards/screenplay/themes/rules/technology.md +463 -0
- package/cli/MODULES.md +302 -0
- package/cli/dist/cli.js +168 -10
- 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 +19 -0
- package/cli/dist/commands/show.d.ts.map +1 -1
- package/cli/dist/commands/show.js +478 -63
- 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/types/gui.d.ts +62 -0
- package/cli/dist/types/gui.d.ts.map +1 -0
- package/cli/dist/types/gui.js +30 -0
- package/cli/dist/types/gui.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/gui-helpers.d.ts +23 -0
- package/cli/dist/utils/gui-helpers.d.ts.map +1 -0
- package/cli/dist/utils/gui-helpers.js +159 -0
- package/cli/dist/utils/gui-helpers.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 +232 -0
- package/cli/dist/utils/module-system.d.ts.map +1 -0
- package/cli/dist/utils/module-system.js +900 -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 +559 -105
- package/package.json +17 -6
|
@@ -0,0 +1,677 @@
|
|
|
1
|
+
# PHP Legacy Code Migration Best Practices
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
This guide provides strategies for refactoring legacy PHP code to modern standards, including introducing namespaces, adding type hints, implementing dependency injection, and applying design patterns.
|
|
6
|
+
|
|
7
|
+
## Refactoring Strategies
|
|
8
|
+
|
|
9
|
+
### Strangler Fig Pattern
|
|
10
|
+
|
|
11
|
+
**Gradually replace legacy code** without a complete rewrite.
|
|
12
|
+
|
|
13
|
+
```php
|
|
14
|
+
<?php
|
|
15
|
+
|
|
16
|
+
// Step 1: Create new implementation alongside legacy code
|
|
17
|
+
namespace App\Services;
|
|
18
|
+
|
|
19
|
+
class ModernUserService
|
|
20
|
+
{
|
|
21
|
+
public function createUser(string $name, string $email): User
|
|
22
|
+
{
|
|
23
|
+
// New implementation with type hints, validation, etc.
|
|
24
|
+
$user = new User();
|
|
25
|
+
$user->name = $name;
|
|
26
|
+
$user->email = $email;
|
|
27
|
+
$user->save();
|
|
28
|
+
|
|
29
|
+
return $user;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
// Step 2: Create adapter/facade to route to new or old implementation
|
|
34
|
+
class UserServiceFacade
|
|
35
|
+
{
|
|
36
|
+
private $modernService;
|
|
37
|
+
private $useModern;
|
|
38
|
+
|
|
39
|
+
public function __construct(ModernUserService $modernService, bool $useModern = false)
|
|
40
|
+
{
|
|
41
|
+
$this->modernService = $modernService;
|
|
42
|
+
$this->useModern = $useModern;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
public function createUser($name, $email)
|
|
46
|
+
{
|
|
47
|
+
if ($this->useModern) {
|
|
48
|
+
return $this->modernService->createUser($name, $email);
|
|
49
|
+
} else {
|
|
50
|
+
// Call legacy function
|
|
51
|
+
return legacy_create_user($name, $email);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
// Step 3: Gradually migrate callers to use facade
|
|
57
|
+
// Step 4: Enable modern implementation via feature flag
|
|
58
|
+
// Step 5: Remove legacy code once fully migrated
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
### Characterization Tests
|
|
62
|
+
|
|
63
|
+
**Write tests for legacy code before refactoring:**
|
|
64
|
+
|
|
65
|
+
```php
|
|
66
|
+
<?php
|
|
67
|
+
|
|
68
|
+
use PHPUnit\Framework\TestCase;
|
|
69
|
+
|
|
70
|
+
class LegacyUserFunctionsTest extends TestCase
|
|
71
|
+
{
|
|
72
|
+
/**
|
|
73
|
+
* Characterization test - documents current behavior
|
|
74
|
+
*/
|
|
75
|
+
public function test_legacy_create_user_returns_user_id()
|
|
76
|
+
{
|
|
77
|
+
$userId = legacy_create_user('John Doe', 'john@example.com');
|
|
78
|
+
|
|
79
|
+
$this->assertIsInt($userId);
|
|
80
|
+
$this->assertGreaterThan(0, $userId);
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* Test edge cases
|
|
85
|
+
*/
|
|
86
|
+
public function test_legacy_create_user_with_duplicate_email()
|
|
87
|
+
{
|
|
88
|
+
legacy_create_user('User 1', 'test@example.com');
|
|
89
|
+
|
|
90
|
+
$this->expectException(\Exception::class);
|
|
91
|
+
legacy_create_user('User 2', 'test@example.com');
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
## Introducing Namespaces (PSR-4)
|
|
97
|
+
|
|
98
|
+
### Before: No Namespaces
|
|
99
|
+
|
|
100
|
+
```php
|
|
101
|
+
<?php
|
|
102
|
+
|
|
103
|
+
// includes/User.php
|
|
104
|
+
class User
|
|
105
|
+
{
|
|
106
|
+
public $id;
|
|
107
|
+
public $name;
|
|
108
|
+
|
|
109
|
+
public function save()
|
|
110
|
+
{
|
|
111
|
+
// Save to database
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
// includes/UserRepository.php
|
|
116
|
+
class UserRepository
|
|
117
|
+
{
|
|
118
|
+
public function find($id)
|
|
119
|
+
{
|
|
120
|
+
// Find user
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
### After: With Namespaces
|
|
126
|
+
|
|
127
|
+
```php
|
|
128
|
+
<?php
|
|
129
|
+
|
|
130
|
+
// src/Models/User.php
|
|
131
|
+
namespace App\Models;
|
|
132
|
+
|
|
133
|
+
class User
|
|
134
|
+
{
|
|
135
|
+
private int $id;
|
|
136
|
+
private string $name;
|
|
137
|
+
|
|
138
|
+
public function save(): void
|
|
139
|
+
{
|
|
140
|
+
// Save to database
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
// src/Repositories/UserRepository.php
|
|
145
|
+
namespace App\Repositories;
|
|
146
|
+
|
|
147
|
+
use App\Models\User;
|
|
148
|
+
|
|
149
|
+
class UserRepository
|
|
150
|
+
{
|
|
151
|
+
public function find(int $id): ?User
|
|
152
|
+
{
|
|
153
|
+
// Find user
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
// composer.json
|
|
158
|
+
{
|
|
159
|
+
"autoload": {
|
|
160
|
+
"psr-4": {
|
|
161
|
+
"App\\": "src/"
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
### Migration Steps
|
|
168
|
+
|
|
169
|
+
```php
|
|
170
|
+
<?php
|
|
171
|
+
|
|
172
|
+
// Step 1: Add namespace to class
|
|
173
|
+
namespace App\Models;
|
|
174
|
+
|
|
175
|
+
class User
|
|
176
|
+
{
|
|
177
|
+
// Existing code
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
// Step 2: Update all references
|
|
181
|
+
// Before:
|
|
182
|
+
$user = new User();
|
|
183
|
+
|
|
184
|
+
// After:
|
|
185
|
+
use App\Models\User;
|
|
186
|
+
$user = new User();
|
|
187
|
+
|
|
188
|
+
// Or:
|
|
189
|
+
$user = new \App\Models\User();
|
|
190
|
+
|
|
191
|
+
// Step 3: Set up autoloading
|
|
192
|
+
require 'vendor/autoload.php';
|
|
193
|
+
|
|
194
|
+
// Step 4: Remove old require/include statements
|
|
195
|
+
// Before:
|
|
196
|
+
require_once 'includes/User.php';
|
|
197
|
+
|
|
198
|
+
// After: (not needed with autoloading)
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
## Adding Type Hints Incrementally
|
|
202
|
+
|
|
203
|
+
### Level 1: Add Return Types
|
|
204
|
+
|
|
205
|
+
```php
|
|
206
|
+
<?php
|
|
207
|
+
|
|
208
|
+
// Before
|
|
209
|
+
function getUser($id)
|
|
210
|
+
{
|
|
211
|
+
return User::find($id);
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
// After
|
|
215
|
+
function getUser($id): ?User
|
|
216
|
+
{
|
|
217
|
+
return User::find($id);
|
|
218
|
+
}
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
### Level 2: Add Parameter Types
|
|
222
|
+
|
|
223
|
+
```php
|
|
224
|
+
<?php
|
|
225
|
+
|
|
226
|
+
// Before
|
|
227
|
+
function createUser($name, $email)
|
|
228
|
+
{
|
|
229
|
+
// ...
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
// After
|
|
233
|
+
function createUser(string $name, string $email): User
|
|
234
|
+
{
|
|
235
|
+
// ...
|
|
236
|
+
}
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
### Level 3: Add Property Types (PHP 7.4+)
|
|
240
|
+
|
|
241
|
+
```php
|
|
242
|
+
<?php
|
|
243
|
+
|
|
244
|
+
// Before
|
|
245
|
+
class User
|
|
246
|
+
{
|
|
247
|
+
public $id;
|
|
248
|
+
public $name;
|
|
249
|
+
public $email;
|
|
250
|
+
public $createdAt;
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
// After
|
|
254
|
+
class User
|
|
255
|
+
{
|
|
256
|
+
public int $id;
|
|
257
|
+
public string $name;
|
|
258
|
+
public string $email;
|
|
259
|
+
public ?\DateTime $createdAt = null;
|
|
260
|
+
}
|
|
261
|
+
```
|
|
262
|
+
|
|
263
|
+
### Level 4: Add Strict Types
|
|
264
|
+
|
|
265
|
+
```php
|
|
266
|
+
<?php
|
|
267
|
+
|
|
268
|
+
declare(strict_types=1);
|
|
269
|
+
|
|
270
|
+
namespace App\Models;
|
|
271
|
+
|
|
272
|
+
class User
|
|
273
|
+
{
|
|
274
|
+
public function __construct(
|
|
275
|
+
private int $id,
|
|
276
|
+
private string $name,
|
|
277
|
+
private string $email
|
|
278
|
+
) {}
|
|
279
|
+
}
|
|
280
|
+
```
|
|
281
|
+
|
|
282
|
+
## Dependency Injection
|
|
283
|
+
|
|
284
|
+
### Before: Global Dependencies
|
|
285
|
+
|
|
286
|
+
```php
|
|
287
|
+
<?php
|
|
288
|
+
|
|
289
|
+
// Legacy code with global database connection
|
|
290
|
+
function getUser($id)
|
|
291
|
+
{
|
|
292
|
+
global $db;
|
|
293
|
+
|
|
294
|
+
$stmt = $db->prepare("SELECT * FROM users WHERE id = ?");
|
|
295
|
+
$stmt->execute([$id]);
|
|
296
|
+
return $stmt->fetch();
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
// Usage
|
|
300
|
+
$user = getUser(123);
|
|
301
|
+
```
|
|
302
|
+
|
|
303
|
+
### After: Constructor Injection
|
|
304
|
+
|
|
305
|
+
```php
|
|
306
|
+
<?php
|
|
307
|
+
|
|
308
|
+
namespace App\Repositories;
|
|
309
|
+
|
|
310
|
+
use PDO;
|
|
311
|
+
|
|
312
|
+
class UserRepository
|
|
313
|
+
{
|
|
314
|
+
private PDO $db;
|
|
315
|
+
|
|
316
|
+
public function __construct(PDO $db)
|
|
317
|
+
{
|
|
318
|
+
$this->db = $db;
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
public function find(int $id): ?array
|
|
322
|
+
{
|
|
323
|
+
$stmt = $this->db->prepare("SELECT * FROM users WHERE id = ?");
|
|
324
|
+
$stmt->execute([$id]);
|
|
325
|
+
return $stmt->fetch() ?: null;
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
|
|
329
|
+
// Usage with DI container
|
|
330
|
+
$container = new Container();
|
|
331
|
+
$container->bind(PDO::class, function() {
|
|
332
|
+
return new PDO('mysql:host=localhost;dbname=mydb', 'user', 'pass');
|
|
333
|
+
});
|
|
334
|
+
|
|
335
|
+
$userRepo = $container->make(UserRepository::class);
|
|
336
|
+
$user = $userRepo->find(123);
|
|
337
|
+
```
|
|
338
|
+
|
|
339
|
+
### Service Container
|
|
340
|
+
|
|
341
|
+
```php
|
|
342
|
+
<?php
|
|
343
|
+
|
|
344
|
+
namespace App\Container;
|
|
345
|
+
|
|
346
|
+
class Container
|
|
347
|
+
{
|
|
348
|
+
private array $bindings = [];
|
|
349
|
+
private array $instances = [];
|
|
350
|
+
|
|
351
|
+
public function bind(string $abstract, callable $concrete): void
|
|
352
|
+
{
|
|
353
|
+
$this->bindings[$abstract] = $concrete;
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
public function singleton(string $abstract, callable $concrete): void
|
|
357
|
+
{
|
|
358
|
+
$this->bind($abstract, function() use ($abstract, $concrete) {
|
|
359
|
+
if (!isset($this->instances[$abstract])) {
|
|
360
|
+
$this->instances[$abstract] = $concrete();
|
|
361
|
+
}
|
|
362
|
+
return $this->instances[$abstract];
|
|
363
|
+
});
|
|
364
|
+
}
|
|
365
|
+
|
|
366
|
+
public function make(string $abstract): object
|
|
367
|
+
{
|
|
368
|
+
if (isset($this->bindings[$abstract])) {
|
|
369
|
+
return $this->bindings[$abstract]();
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
return $this->resolve($abstract);
|
|
373
|
+
}
|
|
374
|
+
|
|
375
|
+
private function resolve(string $class): object
|
|
376
|
+
{
|
|
377
|
+
$reflector = new \ReflectionClass($class);
|
|
378
|
+
$constructor = $reflector->getConstructor();
|
|
379
|
+
|
|
380
|
+
if (!$constructor) {
|
|
381
|
+
return new $class();
|
|
382
|
+
}
|
|
383
|
+
|
|
384
|
+
$dependencies = [];
|
|
385
|
+
foreach ($constructor->getParameters() as $param) {
|
|
386
|
+
$type = $param->getType();
|
|
387
|
+
if ($type && !$type->isBuiltin()) {
|
|
388
|
+
$dependencies[] = $this->make($type->getName());
|
|
389
|
+
}
|
|
390
|
+
}
|
|
391
|
+
|
|
392
|
+
return $reflector->newInstanceArgs($dependencies);
|
|
393
|
+
}
|
|
394
|
+
}
|
|
395
|
+
```
|
|
396
|
+
|
|
397
|
+
## Refactoring Procedural to OOP
|
|
398
|
+
|
|
399
|
+
### Before: Procedural Code
|
|
400
|
+
|
|
401
|
+
```php
|
|
402
|
+
<?php
|
|
403
|
+
|
|
404
|
+
// functions.php
|
|
405
|
+
function calculate_order_total($items, $tax_rate, $shipping_cost)
|
|
406
|
+
{
|
|
407
|
+
$subtotal = 0;
|
|
408
|
+
foreach ($items as $item) {
|
|
409
|
+
$subtotal += $item['price'] * $item['quantity'];
|
|
410
|
+
}
|
|
411
|
+
|
|
412
|
+
$tax = $subtotal * $tax_rate;
|
|
413
|
+
$total = $subtotal + $tax + $shipping_cost;
|
|
414
|
+
|
|
415
|
+
return [
|
|
416
|
+
'subtotal' => $subtotal,
|
|
417
|
+
'tax' => $tax,
|
|
418
|
+
'shipping' => $shipping_cost,
|
|
419
|
+
'total' => $total
|
|
420
|
+
];
|
|
421
|
+
}
|
|
422
|
+
|
|
423
|
+
function apply_discount($total, $discount_code)
|
|
424
|
+
{
|
|
425
|
+
global $db;
|
|
426
|
+
|
|
427
|
+
$discount = $db->query("SELECT * FROM discounts WHERE code = '$discount_code'")->fetch();
|
|
428
|
+
|
|
429
|
+
if ($discount) {
|
|
430
|
+
return $total - ($total * $discount['percentage'] / 100);
|
|
431
|
+
}
|
|
432
|
+
|
|
433
|
+
return $total;
|
|
434
|
+
}
|
|
435
|
+
```
|
|
436
|
+
|
|
437
|
+
### After: Object-Oriented Code
|
|
438
|
+
|
|
439
|
+
```php
|
|
440
|
+
<?php
|
|
441
|
+
|
|
442
|
+
namespace App\Services;
|
|
443
|
+
|
|
444
|
+
use App\Models\Order;
|
|
445
|
+
use App\Repositories\DiscountRepository;
|
|
446
|
+
|
|
447
|
+
class OrderCalculator
|
|
448
|
+
{
|
|
449
|
+
private float $taxRate;
|
|
450
|
+
|
|
451
|
+
public function __construct(
|
|
452
|
+
private DiscountRepository $discountRepo,
|
|
453
|
+
float $taxRate = 0.08
|
|
454
|
+
) {
|
|
455
|
+
$this->taxRate = $taxRate;
|
|
456
|
+
}
|
|
457
|
+
|
|
458
|
+
public function calculateTotal(Order $order): OrderTotal
|
|
459
|
+
{
|
|
460
|
+
$subtotal = $this->calculateSubtotal($order->items);
|
|
461
|
+
$tax = $subtotal * $this->taxRate;
|
|
462
|
+
$shipping = $this->calculateShipping($order);
|
|
463
|
+
$total = $subtotal + $tax + $shipping;
|
|
464
|
+
|
|
465
|
+
return new OrderTotal(
|
|
466
|
+
subtotal: $subtotal,
|
|
467
|
+
tax: $tax,
|
|
468
|
+
shipping: $shipping,
|
|
469
|
+
total: $total
|
|
470
|
+
);
|
|
471
|
+
}
|
|
472
|
+
|
|
473
|
+
public function applyDiscount(float $total, string $discountCode): float
|
|
474
|
+
{
|
|
475
|
+
$discount = $this->discountRepo->findByCode($discountCode);
|
|
476
|
+
|
|
477
|
+
if (!$discount || !$discount->isValid()) {
|
|
478
|
+
return $total;
|
|
479
|
+
}
|
|
480
|
+
|
|
481
|
+
return $total - ($total * $discount->percentage / 100);
|
|
482
|
+
}
|
|
483
|
+
|
|
484
|
+
private function calculateSubtotal(array $items): float
|
|
485
|
+
{
|
|
486
|
+
return array_reduce($items, function($sum, $item) {
|
|
487
|
+
return $sum + ($item->price * $item->quantity);
|
|
488
|
+
}, 0.0);
|
|
489
|
+
}
|
|
490
|
+
|
|
491
|
+
private function calculateShipping(Order $order): float
|
|
492
|
+
{
|
|
493
|
+
// Shipping calculation logic
|
|
494
|
+
return 10.00;
|
|
495
|
+
}
|
|
496
|
+
}
|
|
497
|
+
|
|
498
|
+
class OrderTotal
|
|
499
|
+
{
|
|
500
|
+
public function __construct(
|
|
501
|
+
public readonly float $subtotal,
|
|
502
|
+
public readonly float $tax,
|
|
503
|
+
public readonly float $shipping,
|
|
504
|
+
public readonly float $total
|
|
505
|
+
) {}
|
|
506
|
+
}
|
|
507
|
+
```
|
|
508
|
+
|
|
509
|
+
## Extracting Classes from Large Files
|
|
510
|
+
|
|
511
|
+
### Before: God Class
|
|
512
|
+
|
|
513
|
+
```php
|
|
514
|
+
<?php
|
|
515
|
+
|
|
516
|
+
class User
|
|
517
|
+
{
|
|
518
|
+
public function save() { /* ... */ }
|
|
519
|
+
public function delete() { /* ... */ }
|
|
520
|
+
public function sendEmail($subject, $body) { /* ... */ }
|
|
521
|
+
public function hashPassword($password) { /* ... */ }
|
|
522
|
+
public function validateEmail($email) { /* ... */ }
|
|
523
|
+
public function generateToken() { /* ... */ }
|
|
524
|
+
public function logActivity($action) { /* ... */ }
|
|
525
|
+
// 50+ more methods...
|
|
526
|
+
}
|
|
527
|
+
```
|
|
528
|
+
|
|
529
|
+
### After: Single Responsibility
|
|
530
|
+
|
|
531
|
+
```php
|
|
532
|
+
<?php
|
|
533
|
+
|
|
534
|
+
namespace App\Models;
|
|
535
|
+
|
|
536
|
+
class User
|
|
537
|
+
{
|
|
538
|
+
public function save(): void { /* ... */ }
|
|
539
|
+
public function delete(): void { /* ... */ }
|
|
540
|
+
}
|
|
541
|
+
|
|
542
|
+
namespace App\Services;
|
|
543
|
+
|
|
544
|
+
class UserMailer
|
|
545
|
+
{
|
|
546
|
+
public function sendWelcomeEmail(User $user): void { /* ... */ }
|
|
547
|
+
public function sendPasswordReset(User $user): void { /* ... */ }
|
|
548
|
+
}
|
|
549
|
+
|
|
550
|
+
class PasswordHasher
|
|
551
|
+
{
|
|
552
|
+
public function hash(string $password): string { /* ... */ }
|
|
553
|
+
public function verify(string $password, string $hash): bool { /* ... */ }
|
|
554
|
+
}
|
|
555
|
+
|
|
556
|
+
class EmailValidator
|
|
557
|
+
{
|
|
558
|
+
public function validate(string $email): bool { /* ... */ }
|
|
559
|
+
}
|
|
560
|
+
|
|
561
|
+
class TokenGenerator
|
|
562
|
+
{
|
|
563
|
+
public function generate(): string { /* ... */ }
|
|
564
|
+
}
|
|
565
|
+
|
|
566
|
+
class ActivityLogger
|
|
567
|
+
{
|
|
568
|
+
public function log(User $user, string $action): void { /* ... */ }
|
|
569
|
+
}
|
|
570
|
+
```
|
|
571
|
+
|
|
572
|
+
## Database Query Migration
|
|
573
|
+
|
|
574
|
+
### Before: Direct Queries
|
|
575
|
+
|
|
576
|
+
```php
|
|
577
|
+
<?php
|
|
578
|
+
|
|
579
|
+
function getActiveUsers()
|
|
580
|
+
{
|
|
581
|
+
global $db;
|
|
582
|
+
|
|
583
|
+
$result = mysql_query("SELECT * FROM users WHERE active = 1");
|
|
584
|
+
$users = [];
|
|
585
|
+
|
|
586
|
+
while ($row = mysql_fetch_assoc($result)) {
|
|
587
|
+
$users[] = $row;
|
|
588
|
+
}
|
|
589
|
+
|
|
590
|
+
return $users;
|
|
591
|
+
}
|
|
592
|
+
```
|
|
593
|
+
|
|
594
|
+
### After: Query Builder/ORM
|
|
595
|
+
|
|
596
|
+
```php
|
|
597
|
+
<?php
|
|
598
|
+
|
|
599
|
+
namespace App\Repositories;
|
|
600
|
+
|
|
601
|
+
use Illuminate\Database\Capsule\Manager as DB;
|
|
602
|
+
use App\Models\User;
|
|
603
|
+
|
|
604
|
+
class UserRepository
|
|
605
|
+
{
|
|
606
|
+
public function getActiveUsers(): array
|
|
607
|
+
{
|
|
608
|
+
return User::where('active', true)->get()->toArray();
|
|
609
|
+
}
|
|
610
|
+
|
|
611
|
+
// Or with query builder
|
|
612
|
+
public function getActiveUsersQueryBuilder(): array
|
|
613
|
+
{
|
|
614
|
+
return DB::table('users')
|
|
615
|
+
->where('active', true)
|
|
616
|
+
->get()
|
|
617
|
+
->toArray();
|
|
618
|
+
}
|
|
619
|
+
}
|
|
620
|
+
```
|
|
621
|
+
|
|
622
|
+
## Best Practices
|
|
623
|
+
|
|
624
|
+
### ✅ DO
|
|
625
|
+
|
|
626
|
+
- Write characterization tests before refactoring
|
|
627
|
+
- Use strangler fig pattern for gradual migration
|
|
628
|
+
- Introduce namespaces incrementally
|
|
629
|
+
- Add type hints progressively (return types first)
|
|
630
|
+
- Implement dependency injection
|
|
631
|
+
- Extract classes with single responsibility
|
|
632
|
+
- Use modern PHP features (7.4+, 8.0+)
|
|
633
|
+
- Migrate to PSR-4 autoloading
|
|
634
|
+
- Replace global variables with dependency injection
|
|
635
|
+
- Use ORM/query builder instead of raw SQL
|
|
636
|
+
- Document migration decisions
|
|
637
|
+
- Keep legacy code working during migration
|
|
638
|
+
|
|
639
|
+
### ❌ DON'T
|
|
640
|
+
|
|
641
|
+
- Attempt complete rewrite without tests
|
|
642
|
+
- Break existing functionality
|
|
643
|
+
- Mix old and new patterns in same class
|
|
644
|
+
- Skip testing during migration
|
|
645
|
+
- Remove legacy code before migration complete
|
|
646
|
+
- Ignore backward compatibility
|
|
647
|
+
- Rush the migration process
|
|
648
|
+
- Forget to update documentation
|
|
649
|
+
- Leave dead code in codebase
|
|
650
|
+
- Use deprecated PHP features in new code
|
|
651
|
+
|
|
652
|
+
## Migration Checklist
|
|
653
|
+
|
|
654
|
+
- [ ] Write characterization tests for legacy code
|
|
655
|
+
- [ ] Set up PSR-4 autoloading
|
|
656
|
+
- [ ] Introduce namespaces incrementally
|
|
657
|
+
- [ ] Add return type hints
|
|
658
|
+
- [ ] Add parameter type hints
|
|
659
|
+
- [ ] Add property type hints
|
|
660
|
+
- [ ] Implement dependency injection
|
|
661
|
+
- [ ] Extract single-responsibility classes
|
|
662
|
+
- [ ] Migrate to ORM/query builder
|
|
663
|
+
- [ ] Remove global variables
|
|
664
|
+
- [ ] Update to modern PHP version (8.0+)
|
|
665
|
+
- [ ] Enable strict types
|
|
666
|
+
- [ ] Remove deprecated function calls
|
|
667
|
+
- [ ] Update documentation
|
|
668
|
+
- [ ] Remove dead code
|
|
669
|
+
|
|
670
|
+
## Tools
|
|
671
|
+
|
|
672
|
+
- **PHPStan** - Static analysis to find bugs
|
|
673
|
+
- **Rector** - Automated refactoring tool
|
|
674
|
+
- **PHP-CS-Fixer** - Code style fixer
|
|
675
|
+
- **PHPUnit** - Testing framework
|
|
676
|
+
- **Composer** - Dependency management and autoloading
|
|
677
|
+
|