wexample-wex-addon-dev-php 8.13.0__tar.gz → 9.0.0__tar.gz

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.
Files changed (143) hide show
  1. {wexample_wex_addon_dev_php-8.13.0 → wexample_wex_addon_dev_php-9.0.0}/PKG-INFO +8 -8
  2. {wexample_wex_addon_dev_php-8.13.0 → wexample_wex_addon_dev_php-9.0.0}/README.md +4 -4
  3. {wexample_wex_addon_dev_php-8.13.0 → wexample_wex_addon_dev_php-9.0.0}/pyproject.toml +4 -4
  4. {wexample_wex_addon_dev_php-8.13.0/src/wexample_wex_addon_dev_php/services/laravel → wexample_wex_addon_dev_php-9.0.0/src/wexample_wex_addon_dev_php/services/composer/commands/service}/__init__.py +0 -0
  5. wexample_wex_addon_dev_php-9.0.0/src/wexample_wex_addon_dev_php/services/composer/commands/service/install_local.py +85 -0
  6. wexample_wex_addon_dev_php-9.0.0/src/wexample_wex_addon_dev_php/services/composer/commands/service/refresh_lock.py +64 -0
  7. {wexample_wex_addon_dev_php-8.13.0/src/wexample_wex_addon_dev_php/services/laravel/commands/db → wexample_wex_addon_dev_php-9.0.0/src/wexample_wex_addon_dev_php/services/laravel}/__init__.py +0 -0
  8. {wexample_wex_addon_dev_php-8.13.0/src/wexample_wex_addon_dev_php/services/php → wexample_wex_addon_dev_php-9.0.0/src/wexample_wex_addon_dev_php/services/laravel/commands/service}/__init__.py +0 -0
  9. wexample_wex_addon_dev_php-9.0.0/src/wexample_wex_addon_dev_php/services/laravel/commands/service/install_local.py +56 -0
  10. wexample_wex_addon_dev_php-9.0.0/src/wexample_wex_addon_dev_php/services/laravel/commands/service/refresh_lock.py +64 -0
  11. {wexample_wex_addon_dev_php-8.13.0/src/wexample_wex_addon_dev_php/services/phpmyadmin → wexample_wex_addon_dev_php-9.0.0/src/wexample_wex_addon_dev_php/services/new_php}/__init__.py +0 -0
  12. {wexample_wex_addon_dev_php-8.13.0/src/wexample_wex_addon_dev_php/services/phpmyadmin/commands → wexample_wex_addon_dev_php-9.0.0/src/wexample_wex_addon_dev_php/services/new_symfony}/__init__.py +0 -0
  13. wexample_wex_addon_dev_php-9.0.0/src/wexample_wex_addon_dev_php/services/symfony/__init__.py +0 -0
  14. wexample_wex_addon_dev_php-9.0.0/src/wexample_wex_addon_dev_php/services/symfony/app_service.py +32 -0
  15. wexample_wex_addon_dev_php-9.0.0/src/wexample_wex_addon_dev_php/services/symfony/commands/__init__.py +0 -0
  16. wexample_wex_addon_dev_php-9.0.0/src/wexample_wex_addon_dev_php/services/symfony/commands/service/__init__.py +0 -0
  17. wexample_wex_addon_dev_php-9.0.0/src/wexample_wex_addon_dev_php/services/symfony/commands/service/deploy.py +54 -0
  18. wexample_wex_addon_dev_php-9.0.0/src/wexample_wex_addon_dev_php/services/symfony/commands/service/install_local.py +53 -0
  19. wexample_wex_addon_dev_php-9.0.0/src/wexample_wex_addon_dev_php/services/symfony/commands/service/refresh_lock.py +70 -0
  20. wexample_wex_addon_dev_php-9.0.0/src/wexample_wex_addon_dev_php/services/wordpress/__init__.py +0 -0
  21. wexample_wex_addon_dev_php-9.0.0/src/wexample_wex_addon_dev_php/workdir/__init__.py +0 -0
  22. {wexample_wex_addon_dev_php-8.13.0 → wexample_wex_addon_dev_php-9.0.0}/src/wexample_wex_addon_dev_php/workdir/php_workdir.py +33 -0
  23. {wexample_wex_addon_dev_php-8.13.0 → wexample_wex_addon_dev_php-9.0.0}/src/wexample_wex_addon_dev_php/workdir/symfony_workdir.py +2 -10
  24. {wexample_wex_addon_dev_php-8.13.0 → wexample_wex_addon_dev_php-9.0.0}/src/wexample_wex_addon_dev_php/__init__.py +0 -0
  25. {wexample_wex_addon_dev_php-8.13.0 → wexample_wex_addon_dev_php-9.0.0}/src/wexample_wex_addon_dev_php/__pycache__/__init__.py +0 -0
  26. {wexample_wex_addon_dev_php-8.13.0 → wexample_wex_addon_dev_php-9.0.0}/src/wexample_wex_addon_dev_php/config_value/__init__.py +0 -0
  27. {wexample_wex_addon_dev_php-8.13.0 → wexample_wex_addon_dev_php-9.0.0}/src/wexample_wex_addon_dev_php/config_value/php_package_readme_config_value.py +0 -0
  28. {wexample_wex_addon_dev_php-8.13.0 → wexample_wex_addon_dev_php-9.0.0}/src/wexample_wex_addon_dev_php/const/__init__.py +0 -0
  29. {wexample_wex_addon_dev_php-8.13.0 → wexample_wex_addon_dev_php-9.0.0}/src/wexample_wex_addon_dev_php/const/tags.py +0 -0
  30. {wexample_wex_addon_dev_php-8.13.0 → wexample_wex_addon_dev_php-9.0.0}/src/wexample_wex_addon_dev_php/file/__init__.py +0 -0
  31. {wexample_wex_addon_dev_php-8.13.0 → wexample_wex_addon_dev_php-9.0.0}/src/wexample_wex_addon_dev_php/file/php_composer_json_file.py +0 -0
  32. {wexample_wex_addon_dev_php-8.13.0 → wexample_wex_addon_dev_php-9.0.0}/src/wexample_wex_addon_dev_php/php_addon_manager.py +0 -0
  33. {wexample_wex_addon_dev_php-8.13.0 → wexample_wex_addon_dev_php-9.0.0}/src/wexample_wex_addon_dev_php/py.typed +0 -0
  34. {wexample_wex_addon_dev_php-8.13.0 → wexample_wex_addon_dev_php-9.0.0}/src/wexample_wex_addon_dev_php/resources/.wex.yml +0 -0
  35. {wexample_wex_addon_dev_php-8.13.0 → wexample_wex_addon_dev_php-9.0.0}/src/wexample_wex_addon_dev_php/resources/docker/Dockerfile.roave +0 -0
  36. {wexample_wex_addon_dev_php-8.13.0 → wexample_wex_addon_dev_php-9.0.0}/src/wexample_wex_addon_dev_php/services/__init__.py +0 -0
  37. {wexample_wex_addon_dev_php-8.13.0 → wexample_wex_addon_dev_php-9.0.0}/src/wexample_wex_addon_dev_php/services/composer/__init__.py +0 -0
  38. {wexample_wex_addon_dev_php-8.13.0/src/wexample_wex_addon_dev_php/services/frankenphp → wexample_wex_addon_dev_php-9.0.0/src/wexample_wex_addon_dev_php/services/composer/commands}/__init__.py +0 -0
  39. {wexample_wex_addon_dev_php-8.13.0 → wexample_wex_addon_dev_php-9.0.0}/src/wexample_wex_addon_dev_php/services/composer/docker/.wex.yml +0 -0
  40. {wexample_wex_addon_dev_php-8.13.0 → wexample_wex_addon_dev_php-9.0.0}/src/wexample_wex_addon_dev_php/services/composer/docker/docker-compose.yml +0 -0
  41. {wexample_wex_addon_dev_php-8.13.0 → wexample_wex_addon_dev_php-9.0.0}/src/wexample_wex_addon_dev_php/services/composer/service.yml +0 -0
  42. {wexample_wex_addon_dev_php-8.13.0/src/wexample_wex_addon_dev_php/services/laravel/commands → wexample_wex_addon_dev_php-9.0.0/src/wexample_wex_addon_dev_php/services/frankenphp}/__init__.py +0 -0
  43. {wexample_wex_addon_dev_php-8.13.0 → wexample_wex_addon_dev_php-9.0.0}/src/wexample_wex_addon_dev_php/services/frankenphp/docker/.wex.yml +0 -0
  44. {wexample_wex_addon_dev_php-8.13.0 → wexample_wex_addon_dev_php-9.0.0}/src/wexample_wex_addon_dev_php/services/frankenphp/docker/docker-compose.yml +0 -0
  45. {wexample_wex_addon_dev_php-8.13.0 → wexample_wex_addon_dev_php-9.0.0}/src/wexample_wex_addon_dev_php/services/frankenphp/samples/.wex.yml +0 -0
  46. {wexample_wex_addon_dev_php-8.13.0 → wexample_wex_addon_dev_php-9.0.0}/src/wexample_wex_addon_dev_php/services/frankenphp/samples/caddy/.wex.yml +0 -0
  47. {wexample_wex_addon_dev_php-8.13.0 → wexample_wex_addon_dev_php-9.0.0}/src/wexample_wex_addon_dev_php/services/frankenphp/samples/caddy/Caddyfile +0 -0
  48. {wexample_wex_addon_dev_php-8.13.0 → wexample_wex_addon_dev_php-9.0.0}/src/wexample_wex_addon_dev_php/services/frankenphp/samples/docker/.wex.yml +0 -0
  49. {wexample_wex_addon_dev_php-8.13.0 → wexample_wex_addon_dev_php-9.0.0}/src/wexample_wex_addon_dev_php/services/frankenphp/samples/docker/docker-compose.yml +0 -0
  50. {wexample_wex_addon_dev_php-8.13.0 → wexample_wex_addon_dev_php-9.0.0}/src/wexample_wex_addon_dev_php/services/frankenphp/samples/env/dev/docker/.wex.yml +0 -0
  51. {wexample_wex_addon_dev_php-8.13.0 → wexample_wex_addon_dev_php-9.0.0}/src/wexample_wex_addon_dev_php/services/frankenphp/samples/env/dev/docker/docker-compose.yml +0 -0
  52. {wexample_wex_addon_dev_php-8.13.0 → wexample_wex_addon_dev_php-9.0.0}/src/wexample_wex_addon_dev_php/services/frankenphp/samples/env/local/docker/.wex.yml +0 -0
  53. {wexample_wex_addon_dev_php-8.13.0 → wexample_wex_addon_dev_php-9.0.0}/src/wexample_wex_addon_dev_php/services/frankenphp/samples/env/local/docker/docker-compose.yml +0 -0
  54. {wexample_wex_addon_dev_php-8.13.0 → wexample_wex_addon_dev_php-9.0.0}/src/wexample_wex_addon_dev_php/services/frankenphp/samples/env/prod/docker/.wex.yml +0 -0
  55. {wexample_wex_addon_dev_php-8.13.0 → wexample_wex_addon_dev_php-9.0.0}/src/wexample_wex_addon_dev_php/services/frankenphp/samples/env/prod/docker/docker-compose.yml +0 -0
  56. {wexample_wex_addon_dev_php-8.13.0 → wexample_wex_addon_dev_php-9.0.0}/src/wexample_wex_addon_dev_php/services/frankenphp/samples/php/.wex.yml +0 -0
  57. {wexample_wex_addon_dev_php-8.13.0 → wexample_wex_addon_dev_php-9.0.0}/src/wexample_wex_addon_dev_php/services/frankenphp/samples/php/web.ini +0 -0
  58. {wexample_wex_addon_dev_php-8.13.0 → wexample_wex_addon_dev_php-9.0.0}/src/wexample_wex_addon_dev_php/services/frankenphp/service.yml +0 -0
  59. {wexample_wex_addon_dev_php-8.13.0 → wexample_wex_addon_dev_php-9.0.0}/src/wexample_wex_addon_dev_php/services/laravel/app_service.py +0 -0
  60. {wexample_wex_addon_dev_php-8.13.0/src/wexample_wex_addon_dev_php/services/laravel/commands/maintenance → wexample_wex_addon_dev_php-9.0.0/src/wexample_wex_addon_dev_php/services/laravel/commands}/__init__.py +0 -0
  61. {wexample_wex_addon_dev_php-8.13.0/src/wexample_wex_addon_dev_php/services/new_php → wexample_wex_addon_dev_php-9.0.0/src/wexample_wex_addon_dev_php/services/laravel/commands/db}/__init__.py +0 -0
  62. {wexample_wex_addon_dev_php-8.13.0 → wexample_wex_addon_dev_php-9.0.0}/src/wexample_wex_addon_dev_php/services/laravel/commands/db/migrate.yml +0 -0
  63. {wexample_wex_addon_dev_php-8.13.0/src/wexample_wex_addon_dev_php/services/new_symfony → wexample_wex_addon_dev_php-9.0.0/src/wexample_wex_addon_dev_php/services/laravel/commands/maintenance}/__init__.py +0 -0
  64. {wexample_wex_addon_dev_php-8.13.0 → wexample_wex_addon_dev_php-9.0.0}/src/wexample_wex_addon_dev_php/services/laravel/commands/maintenance/disable.yml +0 -0
  65. {wexample_wex_addon_dev_php-8.13.0 → wexample_wex_addon_dev_php-9.0.0}/src/wexample_wex_addon_dev_php/services/laravel/commands/maintenance/enable.yml +0 -0
  66. {wexample_wex_addon_dev_php-8.13.0 → wexample_wex_addon_dev_php-9.0.0}/src/wexample_wex_addon_dev_php/services/laravel/docker/.wex.yml +0 -0
  67. {wexample_wex_addon_dev_php-8.13.0 → wexample_wex_addon_dev_php-9.0.0}/src/wexample_wex_addon_dev_php/services/laravel/docker/docker-compose.yml +0 -0
  68. {wexample_wex_addon_dev_php-8.13.0 → wexample_wex_addon_dev_php-9.0.0}/src/wexample_wex_addon_dev_php/services/laravel/samples/.wex.yml +0 -0
  69. {wexample_wex_addon_dev_php-8.13.0 → wexample_wex_addon_dev_php-9.0.0}/src/wexample_wex_addon_dev_php/services/laravel/samples/docker/docker-compose.yml +0 -0
  70. {wexample_wex_addon_dev_php-8.13.0 → wexample_wex_addon_dev_php-9.0.0}/src/wexample_wex_addon_dev_php/services/laravel/samples/env/dev/docker/docker-compose.yml +0 -0
  71. {wexample_wex_addon_dev_php-8.13.0 → wexample_wex_addon_dev_php-9.0.0}/src/wexample_wex_addon_dev_php/services/laravel/samples/env/prod/docker/docker-compose.yml +0 -0
  72. {wexample_wex_addon_dev_php-8.13.0 → wexample_wex_addon_dev_php-9.0.0}/src/wexample_wex_addon_dev_php/services/laravel/service.yml +0 -0
  73. {wexample_wex_addon_dev_php-8.13.0 → wexample_wex_addon_dev_php-9.0.0}/src/wexample_wex_addon_dev_php/services/new_php/docker/.wex.yml +0 -0
  74. {wexample_wex_addon_dev_php-8.13.0 → wexample_wex_addon_dev_php-9.0.0}/src/wexample_wex_addon_dev_php/services/new_php/docker/docker-compose.yml +0 -0
  75. {wexample_wex_addon_dev_php-8.13.0 → wexample_wex_addon_dev_php-9.0.0}/src/wexample_wex_addon_dev_php/services/new_php/samples/.wex.yml +0 -0
  76. {wexample_wex_addon_dev_php-8.13.0 → wexample_wex_addon_dev_php-9.0.0}/src/wexample_wex_addon_dev_php/services/new_php/samples/caddy/.wex.yml +0 -0
  77. {wexample_wex_addon_dev_php-8.13.0 → wexample_wex_addon_dev_php-9.0.0}/src/wexample_wex_addon_dev_php/services/new_php/samples/caddy/Caddyfile +0 -0
  78. {wexample_wex_addon_dev_php-8.13.0 → wexample_wex_addon_dev_php-9.0.0}/src/wexample_wex_addon_dev_php/services/new_php/samples/docker/.wex.yml +0 -0
  79. {wexample_wex_addon_dev_php-8.13.0 → wexample_wex_addon_dev_php-9.0.0}/src/wexample_wex_addon_dev_php/services/new_php/samples/docker/docker-compose.yml +0 -0
  80. {wexample_wex_addon_dev_php-8.13.0 → wexample_wex_addon_dev_php-9.0.0}/src/wexample_wex_addon_dev_php/services/new_php/samples/env/dev/docker/.wex.yml +0 -0
  81. {wexample_wex_addon_dev_php-8.13.0 → wexample_wex_addon_dev_php-9.0.0}/src/wexample_wex_addon_dev_php/services/new_php/samples/env/dev/docker/docker-compose.yml +0 -0
  82. {wexample_wex_addon_dev_php-8.13.0 → wexample_wex_addon_dev_php-9.0.0}/src/wexample_wex_addon_dev_php/services/new_php/samples/env/local/docker/.wex.yml +0 -0
  83. {wexample_wex_addon_dev_php-8.13.0 → wexample_wex_addon_dev_php-9.0.0}/src/wexample_wex_addon_dev_php/services/new_php/samples/env/local/docker/docker-compose.yml +0 -0
  84. {wexample_wex_addon_dev_php-8.13.0 → wexample_wex_addon_dev_php-9.0.0}/src/wexample_wex_addon_dev_php/services/new_php/samples/env/prod/docker/.wex.yml +0 -0
  85. {wexample_wex_addon_dev_php-8.13.0 → wexample_wex_addon_dev_php-9.0.0}/src/wexample_wex_addon_dev_php/services/new_php/samples/env/prod/docker/docker-compose.yml +0 -0
  86. {wexample_wex_addon_dev_php-8.13.0 → wexample_wex_addon_dev_php-9.0.0}/src/wexample_wex_addon_dev_php/services/new_php/samples/php/.wex.yml +0 -0
  87. {wexample_wex_addon_dev_php-8.13.0 → wexample_wex_addon_dev_php-9.0.0}/src/wexample_wex_addon_dev_php/services/new_php/samples/php/web.ini +0 -0
  88. {wexample_wex_addon_dev_php-8.13.0 → wexample_wex_addon_dev_php-9.0.0}/src/wexample_wex_addon_dev_php/services/new_php/service.yml +0 -0
  89. {wexample_wex_addon_dev_php-8.13.0 → wexample_wex_addon_dev_php-9.0.0}/src/wexample_wex_addon_dev_php/services/new_symfony/docker/.wex.yml +0 -0
  90. {wexample_wex_addon_dev_php-8.13.0 → wexample_wex_addon_dev_php-9.0.0}/src/wexample_wex_addon_dev_php/services/new_symfony/docker/docker-compose.yml +0 -0
  91. {wexample_wex_addon_dev_php-8.13.0 → wexample_wex_addon_dev_php-9.0.0}/src/wexample_wex_addon_dev_php/services/new_symfony/service.yml +0 -0
  92. {wexample_wex_addon_dev_php-8.13.0/src/wexample_wex_addon_dev_php/services/phpmyadmin/commands/runtime → wexample_wex_addon_dev_php-9.0.0/src/wexample_wex_addon_dev_php/services/php}/__init__.py +0 -0
  93. {wexample_wex_addon_dev_php-8.13.0 → wexample_wex_addon_dev_php-9.0.0}/src/wexample_wex_addon_dev_php/services/php/docker/.wex.yml +0 -0
  94. {wexample_wex_addon_dev_php-8.13.0 → wexample_wex_addon_dev_php-9.0.0}/src/wexample_wex_addon_dev_php/services/php/docker/docker-compose.yml +0 -0
  95. {wexample_wex_addon_dev_php-8.13.0 → wexample_wex_addon_dev_php-9.0.0}/src/wexample_wex_addon_dev_php/services/php/samples/.wex.yml +0 -0
  96. {wexample_wex_addon_dev_php-8.13.0 → wexample_wex_addon_dev_php-9.0.0}/src/wexample_wex_addon_dev_php/services/php/samples/apache/web.conf +0 -0
  97. {wexample_wex_addon_dev_php-8.13.0 → wexample_wex_addon_dev_php-9.0.0}/src/wexample_wex_addon_dev_php/services/php/samples/docker/docker-compose.yml +0 -0
  98. {wexample_wex_addon_dev_php-8.13.0 → wexample_wex_addon_dev_php-9.0.0}/src/wexample_wex_addon_dev_php/services/php/samples/env/dev/cron/default.cron +0 -0
  99. {wexample_wex_addon_dev_php-8.13.0 → wexample_wex_addon_dev_php-9.0.0}/src/wexample_wex_addon_dev_php/services/php/samples/env/dev/docker/docker-compose.yml +0 -0
  100. {wexample_wex_addon_dev_php-8.13.0 → wexample_wex_addon_dev_php-9.0.0}/src/wexample_wex_addon_dev_php/services/php/samples/env/local/cron/default.cron +0 -0
  101. {wexample_wex_addon_dev_php-8.13.0 → wexample_wex_addon_dev_php-9.0.0}/src/wexample_wex_addon_dev_php/services/php/samples/env/local/docker/docker-compose.yml +0 -0
  102. {wexample_wex_addon_dev_php-8.13.0 → wexample_wex_addon_dev_php-9.0.0}/src/wexample_wex_addon_dev_php/services/php/samples/env/local/php/web.ini +0 -0
  103. {wexample_wex_addon_dev_php-8.13.0 → wexample_wex_addon_dev_php-9.0.0}/src/wexample_wex_addon_dev_php/services/php/samples/env/prod/apache/web.conf +0 -0
  104. {wexample_wex_addon_dev_php-8.13.0 → wexample_wex_addon_dev_php-9.0.0}/src/wexample_wex_addon_dev_php/services/php/samples/env/prod/cron/default.cron +0 -0
  105. {wexample_wex_addon_dev_php-8.13.0 → wexample_wex_addon_dev_php-9.0.0}/src/wexample_wex_addon_dev_php/services/php/samples/env/prod/docker/docker-compose.yml +0 -0
  106. {wexample_wex_addon_dev_php-8.13.0 → wexample_wex_addon_dev_php-9.0.0}/src/wexample_wex_addon_dev_php/services/php/samples/index.php +0 -0
  107. {wexample_wex_addon_dev_php-8.13.0 → wexample_wex_addon_dev_php-9.0.0}/src/wexample_wex_addon_dev_php/services/php/samples/php/web.ini +0 -0
  108. {wexample_wex_addon_dev_php-8.13.0 → wexample_wex_addon_dev_php-9.0.0}/src/wexample_wex_addon_dev_php/services/php/service.yml +0 -0
  109. {wexample_wex_addon_dev_php-8.13.0/src/wexample_wex_addon_dev_php/services/symfony → wexample_wex_addon_dev_php-9.0.0/src/wexample_wex_addon_dev_php/services/phpmyadmin}/__init__.py +0 -0
  110. {wexample_wex_addon_dev_php-8.13.0/src/wexample_wex_addon_dev_php/services/wordpress → wexample_wex_addon_dev_php-9.0.0/src/wexample_wex_addon_dev_php/services/phpmyadmin/commands}/__init__.py +0 -0
  111. {wexample_wex_addon_dev_php-8.13.0/src/wexample_wex_addon_dev_php/workdir → wexample_wex_addon_dev_php-9.0.0/src/wexample_wex_addon_dev_php/services/phpmyadmin/commands/runtime}/__init__.py +0 -0
  112. {wexample_wex_addon_dev_php-8.13.0 → wexample_wex_addon_dev_php-9.0.0}/src/wexample_wex_addon_dev_php/services/phpmyadmin/docker/.wex.yml +0 -0
  113. {wexample_wex_addon_dev_php-8.13.0 → wexample_wex_addon_dev_php-9.0.0}/src/wexample_wex_addon_dev_php/services/phpmyadmin/docker/docker-compose.yml +0 -0
  114. {wexample_wex_addon_dev_php-8.13.0 → wexample_wex_addon_dev_php-9.0.0}/src/wexample_wex_addon_dev_php/services/phpmyadmin/env/.wex.yml +0 -0
  115. {wexample_wex_addon_dev_php-8.13.0 → wexample_wex_addon_dev_php-9.0.0}/src/wexample_wex_addon_dev_php/services/phpmyadmin/env/local/docker/docker-compose.yml +0 -0
  116. {wexample_wex_addon_dev_php-8.13.0 → wexample_wex_addon_dev_php-9.0.0}/src/wexample_wex_addon_dev_php/services/phpmyadmin/service.yml +0 -0
  117. {wexample_wex_addon_dev_php-8.13.0 → wexample_wex_addon_dev_php-9.0.0}/src/wexample_wex_addon_dev_php/services/symfony/docker/.wex.yml +0 -0
  118. {wexample_wex_addon_dev_php-8.13.0 → wexample_wex_addon_dev_php-9.0.0}/src/wexample_wex_addon_dev_php/services/symfony/docker/docker-compose.yml +0 -0
  119. {wexample_wex_addon_dev_php-8.13.0 → wexample_wex_addon_dev_php-9.0.0}/src/wexample_wex_addon_dev_php/services/symfony/samples/.wex.yml +0 -0
  120. {wexample_wex_addon_dev_php-8.13.0 → wexample_wex_addon_dev_php-9.0.0}/src/wexample_wex_addon_dev_php/services/symfony/samples/apache/.wex.yml +0 -0
  121. {wexample_wex_addon_dev_php-8.13.0 → wexample_wex_addon_dev_php-9.0.0}/src/wexample_wex_addon_dev_php/services/symfony/samples/apache/web.conf +0 -0
  122. {wexample_wex_addon_dev_php-8.13.0 → wexample_wex_addon_dev_php-9.0.0}/src/wexample_wex_addon_dev_php/services/symfony/samples/docker/docker-compose.yml +0 -0
  123. {wexample_wex_addon_dev_php-8.13.0 → wexample_wex_addon_dev_php-9.0.0}/src/wexample_wex_addon_dev_php/services/symfony/samples/env/dev/docker/docker-compose.yml +0 -0
  124. {wexample_wex_addon_dev_php-8.13.0 → wexample_wex_addon_dev_php-9.0.0}/src/wexample_wex_addon_dev_php/services/symfony/samples/env/local/docker/.wex.yml +0 -0
  125. {wexample_wex_addon_dev_php-8.13.0 → wexample_wex_addon_dev_php-9.0.0}/src/wexample_wex_addon_dev_php/services/symfony/samples/env/local/docker/docker-compose.yml +0 -0
  126. {wexample_wex_addon_dev_php-8.13.0 → wexample_wex_addon_dev_php-9.0.0}/src/wexample_wex_addon_dev_php/services/symfony/samples/env/prod/docker/docker-compose.yml +0 -0
  127. {wexample_wex_addon_dev_php-8.13.0 → wexample_wex_addon_dev_php-9.0.0}/src/wexample_wex_addon_dev_php/services/symfony/service.yml +0 -0
  128. {wexample_wex_addon_dev_php-8.13.0 → wexample_wex_addon_dev_php-9.0.0}/src/wexample_wex_addon_dev_php/services/wordpress/commands/__init__.py +0 -0
  129. {wexample_wex_addon_dev_php-8.13.0 → wexample_wex_addon_dev_php-9.0.0}/src/wexample_wex_addon_dev_php/services/wordpress/commands/service/__init__.py +0 -0
  130. {wexample_wex_addon_dev_php-8.13.0 → wexample_wex_addon_dev_php-9.0.0}/src/wexample_wex_addon_dev_php/services/wordpress/commands/url/__init__.py +0 -0
  131. {wexample_wex_addon_dev_php-8.13.0 → wexample_wex_addon_dev_php-9.0.0}/src/wexample_wex_addon_dev_php/services/wordpress/commands/url/replace.py +0 -0
  132. {wexample_wex_addon_dev_php-8.13.0 → wexample_wex_addon_dev_php-9.0.0}/src/wexample_wex_addon_dev_php/services/wordpress/docker/.wex.yml +0 -0
  133. {wexample_wex_addon_dev_php-8.13.0 → wexample_wex_addon_dev_php-9.0.0}/src/wexample_wex_addon_dev_php/services/wordpress/docker/docker-compose.yml +0 -0
  134. {wexample_wex_addon_dev_php-8.13.0 → wexample_wex_addon_dev_php-9.0.0}/src/wexample_wex_addon_dev_php/services/wordpress/samples/.wex.yml +0 -0
  135. {wexample_wex_addon_dev_php-8.13.0 → wexample_wex_addon_dev_php-9.0.0}/src/wexample_wex_addon_dev_php/services/wordpress/samples/docker/docker-compose-cli.yml +0 -0
  136. {wexample_wex_addon_dev_php-8.13.0 → wexample_wex_addon_dev_php-9.0.0}/src/wexample_wex_addon_dev_php/services/wordpress/samples/docker/docker-compose.yml +0 -0
  137. {wexample_wex_addon_dev_php-8.13.0 → wexample_wex_addon_dev_php-9.0.0}/src/wexample_wex_addon_dev_php/services/wordpress/samples/env/dev/docker/docker-compose.yml +0 -0
  138. {wexample_wex_addon_dev_php-8.13.0 → wexample_wex_addon_dev_php-9.0.0}/src/wexample_wex_addon_dev_php/services/wordpress/samples/env/local/wp-cli/.gitkeep +0 -0
  139. {wexample_wex_addon_dev_php-8.13.0 → wexample_wex_addon_dev_php-9.0.0}/src/wexample_wex_addon_dev_php/services/wordpress/samples/env/prod/docker/docker-compose.yml +0 -0
  140. {wexample_wex_addon_dev_php-8.13.0 → wexample_wex_addon_dev_php-9.0.0}/src/wexample_wex_addon_dev_php/services/wordpress/service.yml +0 -0
  141. {wexample_wex_addon_dev_php-8.13.0 → wexample_wex_addon_dev_php-9.0.0}/src/wexample_wex_addon_dev_php/workdir/php_package_workdir.py +0 -0
  142. {wexample_wex_addon_dev_php-8.13.0 → wexample_wex_addon_dev_php-9.0.0}/src/wexample_wex_addon_dev_php/workdir/php_packages_suite_workdir.py +0 -0
  143. {wexample_wex_addon_dev_php-8.13.0 → wexample_wex_addon_dev_php-9.0.0}/src/wexample_wex_addon_dev_php/workdir/php_symfony_workdir.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: wexample-wex-addon-dev-php
3
- Version: 8.13.0
3
+ Version: 9.0.0
4
4
  Summary: Python dev addon for wex
5
5
  Author-Email: weeger <contact@wexample.com>
6
6
  License: MIT
@@ -12,9 +12,9 @@ Requires-Python: >=3.10
12
12
  Requires-Dist: attrs>=23.1.0
13
13
  Requires-Dist: cattrs>=23.1.0
14
14
  Requires-Dist: wexample-filestate-php>=6.4.0
15
- Requires-Dist: wexample-wex-addon-ai>=12.0.0
16
- Requires-Dist: wexample-wex-addon-app>=28.0.0
17
- Requires-Dist: wexample-wex-addon-dev-javascript>=7.16.0
15
+ Requires-Dist: wexample-wex-addon-ai>=12.1.0
16
+ Requires-Dist: wexample-wex-addon-app>=29.0.0
17
+ Requires-Dist: wexample-wex-addon-dev-javascript>=8.0.0
18
18
  Provides-Extra: dev
19
19
  Requires-Dist: pytest; extra == "dev"
20
20
  Requires-Dist: pytest-cov; extra == "dev"
@@ -22,7 +22,7 @@ Description-Content-Type: text/markdown
22
22
 
23
23
  # wex_addon_dev_php
24
24
 
25
- Version: 8.13.0
25
+ Version: 9.0.0
26
26
 
27
27
  Python dev addon for wex
28
28
 
@@ -105,9 +105,9 @@ Visit the [Wexample Suite documentation](https://docs.wexample.com) for the comp
105
105
  - attrs: >=23.1.0
106
106
  - cattrs: >=23.1.0
107
107
  - wexample-filestate-php: >=6.4.0
108
- - wexample-wex-addon-ai: >=12.0.0
109
- - wexample-wex-addon-app: >=28.0.0
110
- - wexample-wex-addon-dev-javascript: >=7.16.0
108
+ - wexample-wex-addon-ai: >=12.1.0
109
+ - wexample-wex-addon-app: >=29.0.0
110
+ - wexample-wex-addon-dev-javascript: >=8.0.0
111
111
 
112
112
  ## Versioning & Compatibility Policy
113
113
 
@@ -1,6 +1,6 @@
1
1
  # wex_addon_dev_php
2
2
 
3
- Version: 8.13.0
3
+ Version: 9.0.0
4
4
 
5
5
  Python dev addon for wex
6
6
 
@@ -83,9 +83,9 @@ Visit the [Wexample Suite documentation](https://docs.wexample.com) for the comp
83
83
  - attrs: >=23.1.0
84
84
  - cattrs: >=23.1.0
85
85
  - wexample-filestate-php: >=6.4.0
86
- - wexample-wex-addon-ai: >=12.0.0
87
- - wexample-wex-addon-app: >=28.0.0
88
- - wexample-wex-addon-dev-javascript: >=7.16.0
86
+ - wexample-wex-addon-ai: >=12.1.0
87
+ - wexample-wex-addon-app: >=29.0.0
88
+ - wexample-wex-addon-dev-javascript: >=8.0.0
89
89
 
90
90
  ## Versioning & Compatibility Policy
91
91
 
@@ -6,7 +6,7 @@ build-backend = "pdm.backend"
6
6
 
7
7
  [project]
8
8
  name = "wexample-wex-addon-dev-php"
9
- version = "8.13.0"
9
+ version = "9.0.0"
10
10
  description = "Python dev addon for wex"
11
11
  authors = [
12
12
  { name = "weeger", email = "contact@wexample.com" },
@@ -21,9 +21,9 @@ dependencies = [
21
21
  "attrs>=23.1.0",
22
22
  "cattrs>=23.1.0",
23
23
  "wexample-filestate-php>=6.4.0",
24
- "wexample-wex-addon-ai>=12.0.0",
25
- "wexample-wex-addon-app>=28.0.0",
26
- "wexample-wex-addon-dev-javascript>=7.16.0",
24
+ "wexample-wex-addon-ai>=12.1.0",
25
+ "wexample-wex-addon-app>=29.0.0",
26
+ "wexample-wex-addon-dev-javascript>=8.0.0",
27
27
  ]
28
28
 
29
29
  [project.readme]
@@ -0,0 +1,85 @@
1
+ from __future__ import annotations
2
+
3
+ from typing import TYPE_CHECKING
4
+
5
+ from wexample_cli.const.tags import AudienceTag, EffectTag, ScopeTag
6
+ from wexample_cli.decorator.command import command
7
+ from wexample_wex_core.const.globals import COMMAND_TYPE_SERVICE
8
+
9
+ from wexample_wex_addon_dev_php.const.tags import DomainTag
10
+
11
+ if TYPE_CHECKING:
12
+ from wexample_cli.context.execution_context import ExecutionContext
13
+ from wexample_wex_addon_app.service.app_service import AppService
14
+
15
+ # In-container layout convention shared by the local dev composes: the app is
16
+ # served from APP_DIR and each locally-developed vendor suite is mounted under
17
+ # VENDOR_DEV_DIR/<vendor> (see the `local_packages` env config section).
18
+ APP_DIR = "/var/www/html"
19
+ VENDOR_DEV_DIR = "/var/www/vendor-dev"
20
+
21
+ # Dev images are expected to ship a working composer on PATH (official
22
+ # installer against the runtime php). Images with a broken wrapper (e.g. a
23
+ # /usr/bin/composer pinned to an older php) pass their own composer_bin.
24
+ COMPOSER_BIN = "composer"
25
+
26
+
27
+ @command(
28
+ type=COMMAND_TYPE_SERVICE,
29
+ description="Wire locally-developed composer packages into vendor/ (local env only)",
30
+ tags=[
31
+ DomainTag.LANGUAGE_PHP,
32
+ EffectTag.WRITE,
33
+ AudienceTag.AGENT_SAFE,
34
+ ScopeTag.APP,
35
+ ScopeTag.CONTAINER,
36
+ ScopeTag.LOCAL,
37
+ ],
38
+ )
39
+ def composer__service__install_local(
40
+ context: ExecutionContext,
41
+ service: AppService,
42
+ composer_bin: str = COMPOSER_BIN,
43
+ ) -> None:
44
+ """Generic composer wiring, reusable by any PHP runtime service.
45
+
46
+ Delegating services (laravel, symfony…) call this with their own
47
+ ``service`` so the work runs inside their container, then append their
48
+ framework-specific steps (cache clears…).
49
+ """
50
+ php_packages = service.app_workdir.get_runtime_config().search(
51
+ "local_packages.php"
52
+ )
53
+ if php_packages.is_none():
54
+ context.io.log("No local_packages.php configured, nothing to wire.")
55
+ return
56
+
57
+ vendors = " ".join(sorted(php_packages.to_dict().keys()))
58
+
59
+ # Composer keeps the (possibly stale) registry version of a package even
60
+ # when a newer local source exists, so the deterministic wiring is a
61
+ # forced symlink over vendor/ — every local package of each declared
62
+ # vendor, installed or not.
63
+ script = f"""
64
+ set -e
65
+ cd {APP_DIR}
66
+ {composer_bin} install --no-scripts
67
+ for vendor in {vendors}; do
68
+ [ -d "{VENDOR_DEV_DIR}/$vendor" ] || continue
69
+ mkdir -p "vendor/$vendor"
70
+ for src in {VENDOR_DEV_DIR}/$vendor/*/; do
71
+ pkg=$(basename "$src")
72
+ [ -f "$src/composer.json" ] || continue
73
+ rm -rf "vendor/$vendor/$pkg"
74
+ ln -s "${{src%/}}" "vendor/$vendor/$pkg"
75
+ echo " symlinked $vendor/$pkg"
76
+ done
77
+ done
78
+ {composer_bin} dump-autoload
79
+ """
80
+
81
+ context.io.log(f"Wiring local composer packages ({vendors}) into vendor/…")
82
+ output = service.addon_manager.docker_exec(
83
+ service.name, ["/bin/sh", "-c", script]
84
+ )
85
+ context.io.log(output)
@@ -0,0 +1,64 @@
1
+ from __future__ import annotations
2
+
3
+ from typing import TYPE_CHECKING
4
+
5
+ from wexample_cli.const.tags import AudienceTag, EffectTag, ScopeTag
6
+ from wexample_cli.decorator.command import command
7
+ from wexample_cli.decorator.option import option
8
+ from wexample_wex_core.const.globals import COMMAND_TYPE_SERVICE
9
+
10
+ from wexample_wex_addon_dev_php.const.tags import DomainTag
11
+ from wexample_wex_addon_dev_php.services.composer.commands.service.install_local import (
12
+ APP_DIR,
13
+ COMPOSER_BIN,
14
+ )
15
+
16
+ if TYPE_CHECKING:
17
+ from wexample_cli.context.execution_context import ExecutionContext
18
+ from wexample_wex_addon_app.service.app_service import AppService
19
+
20
+
21
+ @option(
22
+ name="composer_packages",
23
+ type=str,
24
+ required=True,
25
+ description="Space-separated composer package names whose constraint changed in composer.json",
26
+ )
27
+ @command(
28
+ type=COMMAND_TYPE_SERVICE,
29
+ description="Refresh composer.lock after a composer.json dependency change",
30
+ tags=[
31
+ DomainTag.LANGUAGE_PHP,
32
+ EffectTag.WRITE,
33
+ AudienceTag.AGENT_SAFE,
34
+ ScopeTag.APP,
35
+ ScopeTag.CONTAINER,
36
+ ScopeTag.LOCAL,
37
+ ],
38
+ )
39
+ def composer__service__refresh_lock(
40
+ context: ExecutionContext,
41
+ service: AppService,
42
+ composer_packages: str,
43
+ composer_bin: str = COMPOSER_BIN,
44
+ ) -> None:
45
+ """Generic composer lock refresh, reusable by any PHP runtime service.
46
+
47
+ Delegating services (laravel, symfony…) call this with their own
48
+ ``service`` so the work runs inside their container.
49
+ """
50
+ # --no-install rewrites composer.lock only: vendor/ may hold local
51
+ # development symlinks that a real install would overwrite.
52
+ # --with-all-dependencies lets the updated packages' own (locked)
53
+ # dependencies move too, or sibling library bumps would dead-lock the
54
+ # partial update.
55
+ output = service.addon_manager.docker_exec(
56
+ service.name,
57
+ [
58
+ "/bin/sh",
59
+ "-c",
60
+ f"cd {APP_DIR} && {composer_bin} update --no-install"
61
+ f" --with-all-dependencies {composer_packages}",
62
+ ],
63
+ )
64
+ context.io.log(output)
@@ -0,0 +1,56 @@
1
+ from __future__ import annotations
2
+
3
+ from typing import TYPE_CHECKING
4
+
5
+ from wexample_cli.const.tags import AudienceTag, EffectTag, ScopeTag
6
+ from wexample_cli.decorator.command import command
7
+ from wexample_wex_core.const.globals import COMMAND_TYPE_SERVICE
8
+
9
+ from wexample_wex_addon_dev_php.const.tags import DomainTag
10
+ from wexample_wex_addon_dev_php.services.composer.commands.service.install_local import (
11
+ APP_DIR,
12
+ composer__service__install_local,
13
+ )
14
+
15
+ if TYPE_CHECKING:
16
+ from wexample_cli.context.execution_context import ExecutionContext
17
+ from wexample_wex_addon_app.service.app_service import AppService
18
+
19
+
20
+ @command(
21
+ type=COMMAND_TYPE_SERVICE,
22
+ description="Wire locally-developed composer packages into vendor/ (local env only)",
23
+ tags=[
24
+ DomainTag.LANGUAGE_PHP,
25
+ DomainTag.FRAMEWORK,
26
+ EffectTag.WRITE,
27
+ AudienceTag.AGENT_SAFE,
28
+ ScopeTag.APP,
29
+ ScopeTag.CONTAINER,
30
+ ScopeTag.LOCAL,
31
+ ],
32
+ )
33
+ def laravel__service__install_local(
34
+ context: ExecutionContext,
35
+ service: AppService,
36
+ ) -> None:
37
+ # Laravel caches its package manifest: a provider removed by the composer
38
+ # pass would keep crashing artisan from the stale cache, so purge first.
39
+ service.addon_manager.docker_exec(
40
+ service.name,
41
+ [
42
+ "/bin/sh",
43
+ "-c",
44
+ f"rm -f {APP_DIR}/bootstrap/cache/packages.php"
45
+ f" {APP_DIR}/bootstrap/cache/services.php",
46
+ ],
47
+ )
48
+
49
+ # Generic composer wiring, executed in this service's container.
50
+ composer__service__install_local.function(context=context, service=service)
51
+
52
+ output = service.addon_manager.docker_exec(
53
+ service.name,
54
+ ["/bin/sh", "-c", f"cd {APP_DIR} && php artisan optimize:clear"],
55
+ )
56
+ context.io.log(output)
@@ -0,0 +1,64 @@
1
+ from __future__ import annotations
2
+
3
+ from typing import TYPE_CHECKING
4
+
5
+ from wexample_cli.const.tags import AudienceTag, EffectTag, ScopeTag
6
+ from wexample_cli.decorator.command import command
7
+ from wexample_cli.decorator.option import option
8
+ from wexample_wex_addon_dev_javascript.services.node.commands.service.refresh_lock import (
9
+ node__service__refresh_lock,
10
+ )
11
+ from wexample_wex_core.const.globals import COMMAND_TYPE_SERVICE
12
+
13
+ from wexample_wex_addon_dev_php.const.tags import DomainTag
14
+ from wexample_wex_addon_dev_php.services.composer.commands.service.refresh_lock import (
15
+ composer__service__refresh_lock,
16
+ )
17
+
18
+ if TYPE_CHECKING:
19
+ from wexample_cli.context.execution_context import ExecutionContext
20
+ from wexample_wex_addon_app.service.app_service import AppService
21
+
22
+
23
+ @option(
24
+ name="composer_packages",
25
+ type=str,
26
+ required=False,
27
+ default="",
28
+ description="Space-separated composer package names whose constraint changed in composer.json",
29
+ )
30
+ @option(
31
+ name="npm_packages",
32
+ type=str,
33
+ required=False,
34
+ default="",
35
+ description="Space-separated npm package names whose constraint changed in package.json",
36
+ )
37
+ @command(
38
+ type=COMMAND_TYPE_SERVICE,
39
+ description="Refresh composer and javascript lock files after a dependency change",
40
+ tags=[
41
+ DomainTag.LANGUAGE_PHP,
42
+ DomainTag.FRAMEWORK,
43
+ EffectTag.WRITE,
44
+ AudienceTag.AGENT_SAFE,
45
+ ScopeTag.APP,
46
+ ScopeTag.CONTAINER,
47
+ ScopeTag.LOCAL,
48
+ ],
49
+ )
50
+ def laravel__service__refresh_lock(
51
+ context: ExecutionContext,
52
+ service: AppService,
53
+ composer_packages: str = "",
54
+ npm_packages: str = "",
55
+ ) -> None:
56
+ # Generic lock refreshes, executed in this service's container.
57
+ if composer_packages:
58
+ composer__service__refresh_lock.function(
59
+ context=context, service=service, composer_packages=composer_packages
60
+ )
61
+ if npm_packages:
62
+ node__service__refresh_lock.function(
63
+ context=context, service=service, npm_packages=npm_packages
64
+ )
@@ -0,0 +1,32 @@
1
+ from __future__ import annotations
2
+
3
+ from wexample_filestate.const.disk import DiskItemType
4
+ from wexample_wex_addon_app.service.app_service import AppService as BaseAppService
5
+
6
+ _D = DiskItemType.DIRECTORY
7
+
8
+ # php-fpm in the Alpine-based images runs as www-data uid 82, NOT the Debian
9
+ # 33. Symfony must be able to write its runtime dirs as that user. Declared
10
+ # here so rectify keeps them owned by 82 and stops them from flipping back to
11
+ # the host uid (e.g. after own/this, a git checkout or a fresh image deploy),
12
+ # which surfaces as a 500 with nothing written to var/log.
13
+ _SYMFONY_WEB_OWNER = "82:82"
14
+
15
+ _WORKDIR_CONTRIBUTION: dict = {
16
+ "children": [
17
+ {
18
+ "name": "var",
19
+ "type": _D,
20
+ "should_exist": True,
21
+ "mode": {
22
+ "owner": _SYMFONY_WEB_OWNER,
23
+ "recursive": True,
24
+ },
25
+ },
26
+ ]
27
+ }
28
+
29
+
30
+ class AppService(BaseAppService):
31
+ def get_workdir_contribution(self, workdir) -> dict:
32
+ return _WORKDIR_CONTRIBUTION
@@ -0,0 +1,54 @@
1
+ from __future__ import annotations
2
+
3
+ from typing import TYPE_CHECKING
4
+
5
+ from wexample_cli.const.tags import AudienceTag, EffectTag, ScopeTag
6
+ from wexample_cli.decorator.command import command
7
+ from wexample_wex_core.const.globals import COMMAND_TYPE_SERVICE
8
+
9
+ from wexample_wex_addon_dev_php.const.tags import DomainTag
10
+ from wexample_wex_addon_dev_php.services.composer.commands.service.install_local import (
11
+ APP_DIR,
12
+ )
13
+
14
+ if TYPE_CHECKING:
15
+ from wexample_cli.context.execution_context import ExecutionContext
16
+ from wexample_wex_addon_app.service.app_service import AppService
17
+
18
+
19
+ @command(
20
+ type=COMMAND_TYPE_SERVICE,
21
+ description="Post-deployment tasks for a symfony app (doctrine migrations)",
22
+ tags=[
23
+ DomainTag.LANGUAGE_PHP,
24
+ DomainTag.FRAMEWORK,
25
+ EffectTag.WRITE,
26
+ AudienceTag.AGENT_SAFE,
27
+ ScopeTag.APP,
28
+ ScopeTag.CONTAINER,
29
+ ],
30
+ )
31
+ def symfony__service__deploy(
32
+ context: ExecutionContext,
33
+ service: AppService,
34
+ ) -> None:
35
+ """Run once by `.release/deploy` after the app restarted on new images.
36
+
37
+ Idempotent: applies pending doctrine migrations only. --no-interaction is
38
+ vital — the deploy webhook has no TTY, doctrine's data-loss prompt would
39
+ silently abort the migration (which is how unapplied migrations reached
40
+ prod). Apps without a migrations/ directory are skipped.
41
+ """
42
+ script = f"""
43
+ set -e
44
+ cd {APP_DIR}
45
+ if [ -d migrations ]; then
46
+ bin/console doctrine:migrations:migrate --no-interaction --allow-no-migration
47
+ else
48
+ echo "No migrations/ directory, skipping."
49
+ fi
50
+ """
51
+ output = service.addon_manager.docker_exec(
52
+ service.name, ["/bin/sh", "-c", script]
53
+ )
54
+ context.io.log(output)
@@ -0,0 +1,53 @@
1
+ from __future__ import annotations
2
+
3
+ from typing import TYPE_CHECKING
4
+
5
+ from wexample_cli.const.tags import AudienceTag, EffectTag, ScopeTag
6
+ from wexample_cli.decorator.command import command
7
+ from wexample_wex_addon_dev_javascript.services.node.commands.service.install_local import (
8
+ node__service__install_local,
9
+ )
10
+ from wexample_wex_core.const.globals import COMMAND_TYPE_SERVICE
11
+
12
+ from wexample_wex_addon_dev_php.const.tags import DomainTag
13
+ from wexample_wex_addon_dev_php.services.composer.commands.service.install_local import (
14
+ APP_DIR,
15
+ composer__service__install_local,
16
+ )
17
+
18
+ if TYPE_CHECKING:
19
+ from wexample_cli.context.execution_context import ExecutionContext
20
+ from wexample_wex_addon_app.service.app_service import AppService
21
+
22
+ # Symfony images ship a sane composer on PATH (no php-pinned phar wrapper).
23
+ COMPOSER_BIN = "composer"
24
+
25
+
26
+ @command(
27
+ type=COMMAND_TYPE_SERVICE,
28
+ description="Wire locally-developed composer and npm packages into the app (local env only)",
29
+ tags=[
30
+ DomainTag.LANGUAGE_PHP,
31
+ DomainTag.FRAMEWORK,
32
+ EffectTag.WRITE,
33
+ AudienceTag.AGENT_SAFE,
34
+ ScopeTag.APP,
35
+ ScopeTag.CONTAINER,
36
+ ScopeTag.LOCAL,
37
+ ],
38
+ )
39
+ def symfony__service__install_local(
40
+ context: ExecutionContext,
41
+ service: AppService,
42
+ ) -> None:
43
+ # Generic composer and node wiring, executed in this service's container.
44
+ composer__service__install_local.function(
45
+ context=context, service=service, composer_bin=COMPOSER_BIN
46
+ )
47
+ node__service__install_local.function(context=context, service=service)
48
+
49
+ output = service.addon_manager.docker_exec(
50
+ service.name,
51
+ ["/bin/sh", "-c", f"cd {APP_DIR} && bin/console cache:clear"],
52
+ )
53
+ context.io.log(output)
@@ -0,0 +1,70 @@
1
+ from __future__ import annotations
2
+
3
+ from typing import TYPE_CHECKING
4
+
5
+ from wexample_cli.const.tags import AudienceTag, EffectTag, ScopeTag
6
+ from wexample_cli.decorator.command import command
7
+ from wexample_cli.decorator.option import option
8
+ from wexample_wex_addon_dev_javascript.services.node.commands.service.refresh_lock import (
9
+ node__service__refresh_lock,
10
+ )
11
+ from wexample_wex_core.const.globals import COMMAND_TYPE_SERVICE
12
+
13
+ from wexample_wex_addon_dev_php.const.tags import DomainTag
14
+ from wexample_wex_addon_dev_php.services.composer.commands.service.refresh_lock import (
15
+ composer__service__refresh_lock,
16
+ )
17
+ from wexample_wex_addon_dev_php.services.symfony.commands.service.install_local import (
18
+ COMPOSER_BIN,
19
+ )
20
+
21
+ if TYPE_CHECKING:
22
+ from wexample_cli.context.execution_context import ExecutionContext
23
+ from wexample_wex_addon_app.service.app_service import AppService
24
+
25
+
26
+ @option(
27
+ name="composer_packages",
28
+ type=str,
29
+ required=False,
30
+ default="",
31
+ description="Space-separated composer package names whose constraint changed in composer.json",
32
+ )
33
+ @option(
34
+ name="npm_packages",
35
+ type=str,
36
+ required=False,
37
+ default="",
38
+ description="Space-separated npm package names whose constraint changed in package.json",
39
+ )
40
+ @command(
41
+ type=COMMAND_TYPE_SERVICE,
42
+ description="Refresh composer and javascript lock files after a dependency change",
43
+ tags=[
44
+ DomainTag.LANGUAGE_PHP,
45
+ DomainTag.FRAMEWORK,
46
+ EffectTag.WRITE,
47
+ AudienceTag.AGENT_SAFE,
48
+ ScopeTag.APP,
49
+ ScopeTag.CONTAINER,
50
+ ScopeTag.LOCAL,
51
+ ],
52
+ )
53
+ def symfony__service__refresh_lock(
54
+ context: ExecutionContext,
55
+ service: AppService,
56
+ composer_packages: str = "",
57
+ npm_packages: str = "",
58
+ ) -> None:
59
+ # Generic lock refreshes, executed in this service's container.
60
+ if composer_packages:
61
+ composer__service__refresh_lock.function(
62
+ context=context,
63
+ service=service,
64
+ composer_packages=composer_packages,
65
+ composer_bin=COMPOSER_BIN,
66
+ )
67
+ if npm_packages:
68
+ node__service__refresh_lock.function(
69
+ context=context, service=service, npm_packages=npm_packages
70
+ )
@@ -38,6 +38,23 @@ class PhpWorkdir(WithAiWorkdirMixin, CodeBaseWorkdir):
38
38
  def get_dependencies_versions(self) -> dict[str, str]:
39
39
  return self.get_app_config_file().get_dependencies_versions()
40
40
 
41
+ def get_dependency_manifests(self) -> list:
42
+ from wexample_wex_addon_dev_javascript.file.node_package_json_file import (
43
+ NodePackageJsonFile,
44
+ )
45
+
46
+ manifests = super().get_dependency_manifests()
47
+
48
+ # PHP apps are frequently polyglot (Symfony/Laravel assets built with
49
+ # node): their package.json must follow library syncs like
50
+ # composer.json does.
51
+ package_json = self.find_by_type(NodePackageJsonFile)
52
+ if package_json is not None and package_json.get_path().exists():
53
+ package_json.read_text(reload=True)
54
+ manifests.append(package_json)
55
+
56
+ return manifests
57
+
41
58
  def get_main_code_file_extension(self) -> str:
42
59
  from wexample_filestate_php.const.php_file import PHP_FILE_EXTENSION
43
60
 
@@ -90,6 +107,22 @@ class PhpWorkdir(WithAiWorkdirMixin, CodeBaseWorkdir):
90
107
  }
91
108
  )
92
109
 
110
+ # Polyglot apps: expose the package.json as a dependency manifest
111
+ # (see get_dependency_manifests). No should_exist: never created when
112
+ # absent — the workdir path is not resolved yet at this stage, so the
113
+ # disk check happens in get_dependency_manifests.
114
+ from wexample_wex_addon_dev_javascript.file.node_package_json_file import (
115
+ NodePackageJsonFile,
116
+ )
117
+
118
+ children.append(
119
+ {
120
+ "class": NodePackageJsonFile,
121
+ "name": "package.json",
122
+ "type": DiskItemType.FILE,
123
+ }
124
+ )
125
+
93
126
  self.add_gitignore_rules(
94
127
  children,
95
128
  ".php-cs-fixer.cache",
@@ -23,13 +23,5 @@ class SymfonyWorkdir(PhpWorkdir):
23
23
 
24
24
  return workdir_javascript.apply(result=result, **kwargs)
25
25
 
26
- def libraries_sync(self) -> None:
27
- super().libraries_sync()
28
-
29
- self.log("Syncing Javascript...")
30
-
31
- workdir_javascript = JavascriptWorkdir.create_from_path(
32
- path=self.get_path(), io=self.io
33
- )
34
-
35
- workdir_javascript.libraries_sync()
26
+ # NOTE: package.json library syncing is handled natively by PhpWorkdir's
27
+ # dependency manifests (get_dependency_manifests), no facade needed here.