declapract-typescript-ehmpathy 0.49.11 → 0.49.13

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 (752) hide show
  1. package/dist/.test/assets/cache/declarations/practices/cache/.declapract.integration.test.ts +4 -4
  2. package/dist/.test/assets/cache/declarations/practices/cache/.test/assets/repo-with-valid-cache-package/package.json +1 -1
  3. package/dist/.test/assets/cache/declarations/practices/cache/best-practice/package.json +3 -3
  4. package/dist/.test/assets/cicd-service/declarations/declapract.declare.yml +9 -0
  5. package/dist/.test/assets/cicd-service/declarations/practices/cicd-service/.declapract.integration.test.ts +175 -0
  6. package/dist/.test/assets/cicd-service/declarations/practices/cicd-service/.test/assets/demo-repo-pre-stamped-nords/.github/workflows/provision.yml +110 -0
  7. package/dist/.test/assets/cicd-service/declarations/practices/cicd-service/.test/assets/demo-repo-pre-stamped-nords/declapract.use.nords.yml +20 -0
  8. package/dist/.test/assets/cicd-service/declarations/practices/cicd-service/.test/assets/demo-repo-pre-stamped-nords/declapract.use.rds.yml +20 -0
  9. package/dist/.test/assets/cicd-service/declarations/practices/cicd-service/.test/assets/demo-repo-pre-stamped-nords/package.json +4 -0
  10. package/dist/.test/assets/cicd-service/declarations/practices/cicd-service/.test/assets/demo-repo-service/declapract.use.nords.yml +20 -0
  11. package/dist/.test/assets/cicd-service/declarations/practices/cicd-service/.test/assets/demo-repo-service/declapract.use.rds.yml +20 -0
  12. package/dist/.test/assets/cicd-service/declarations/practices/cicd-service/.test/assets/demo-repo-service/package.json +4 -0
  13. package/dist/.test/assets/cicd-service/declarations/practices/cicd-service/__snapshots__/.declapract.integration.test.ts.snap +24 -0
  14. package/dist/.test/assets/cicd-service/declarations/practices/cicd-service/__snapshots__/acceptanceContempFleetGuard.declapract.integration.test.ts.snap +13 -0
  15. package/dist/.test/assets/cicd-service/declarations/practices/cicd-service/__snapshots__/insync-grep.declapract.integration.test.ts.snap +5 -0
  16. package/dist/.test/assets/cicd-service/declarations/practices/cicd-service/__snapshots__/provision.yml.declapract.integration.test.ts.snap +297 -0
  17. package/dist/.test/assets/cicd-service/declarations/practices/cicd-service/acceptanceContempFleetGuard.declapract.integration.test.ts +89 -0
  18. package/dist/.test/assets/cicd-service/declarations/practices/cicd-service/bad-practices/old-names/.github/workflows/deploy_dev_on_master.yml.declapract.ts +3 -0
  19. package/dist/.test/assets/cicd-service/declarations/practices/cicd-service/bad-practices/old-names/.github/workflows/deploy_on_tag.yml.declapract.ts +3 -0
  20. package/dist/.test/assets/cicd-service/declarations/practices/cicd-service/bad-practices/old-names/.github/workflows/deploy_prod_on_tag.yml.declapract.ts +3 -0
  21. package/dist/.test/assets/cicd-service/declarations/practices/cicd-service/bad-practices/rds-jobs-in-non-rds-service/.declapract.integration.test.ts +153 -0
  22. package/dist/.test/assets/cicd-service/declarations/practices/cicd-service/bad-practices/rds-jobs-in-non-rds-service/.declapract.readme.md +38 -0
  23. package/dist/.test/assets/cicd-service/declarations/practices/cicd-service/bad-practices/rds-jobs-in-non-rds-service/.github/workflows/provision.yml.declapract.integration.test.ts +167 -0
  24. package/dist/.test/assets/cicd-service/declarations/practices/cicd-service/bad-practices/rds-jobs-in-non-rds-service/.github/workflows/provision.yml.declapract.ts +88 -0
  25. package/dist/.test/assets/cicd-service/declarations/practices/cicd-service/bad-practices/rds-jobs-in-non-rds-service/.test/assets/repo-non-rds/readme.md +9 -0
  26. package/dist/.test/assets/cicd-service/declarations/practices/cicd-service/bad-practices/rds-jobs-in-non-rds-service/.test/assets/repo-with-aws-resources-callee/provision/aws/resources.ts +5 -0
  27. package/dist/.test/assets/cicd-service/declarations/practices/cicd-service/bad-practices/rds-jobs-in-non-rds-service/.test/assets/repo-with-schema-callee/provision/schema/init.sql +5 -0
  28. package/dist/.test/assets/cicd-service/declarations/practices/cicd-service/bad-practices/rds-jobs-in-non-rds-service/__snapshots__/.declapract.integration.test.ts.snap +183 -0
  29. package/dist/.test/assets/cicd-service/declarations/practices/cicd-service/best-practice/.declapract.readme.md +22 -0
  30. package/dist/.test/assets/cicd-service/declarations/practices/cicd-service/best-practice/.github/workflows/.deploy-sls.yml +163 -0
  31. package/dist/.test/assets/cicd-service/declarations/practices/cicd-service/best-practice/.github/workflows/.sql-schema-control.yml +154 -0
  32. package/dist/.test/assets/cicd-service/declarations/practices/cicd-service/best-practice/.github/workflows/.terraform.yml +118 -0
  33. package/dist/.test/assets/cicd-service/declarations/practices/cicd-service/best-practice/.github/workflows/deploy.yml +77 -0
  34. package/dist/.test/assets/cicd-service/declarations/practices/cicd-service/best-practice/.github/workflows/deploy.yml.declapract.ts +15 -0
  35. package/dist/.test/assets/cicd-service/declarations/practices/cicd-service/best-practice/.github/workflows/provision.yml +110 -0
  36. package/dist/.test/assets/cicd-service/declarations/practices/cicd-service/best-practice/.github/workflows/provision.yml.declapract.ts +74 -0
  37. package/dist/.test/assets/cicd-service/declarations/practices/cicd-service/best-practice/package.json +7 -0
  38. package/dist/.test/assets/cicd-service/declarations/practices/cicd-service/insync-grep.declapract.integration.test.ts +76 -0
  39. package/dist/.test/assets/cicd-service/declarations/practices/cicd-service/provision.yml.declapract.integration.test.ts +182 -0
  40. package/dist/.test/assets/cicd-service/declarations/practices/persist-with-rds/.declapract.integration.test.ts +224 -0
  41. package/dist/.test/assets/cicd-service/declarations/practices/persist-with-rds/.extensions.sql.declapract.integration.test.ts +38 -0
  42. package/dist/.test/assets/cicd-service/declarations/practices/persist-with-rds/.test/assets/demo-repo-with-dev-config/config/dev.json +18 -0
  43. package/dist/.test/assets/cicd-service/declarations/practices/persist-with-rds/.test/assets/demo-repo-with-dev-config/declapract.declare.yml +4 -0
  44. package/dist/.test/assets/cicd-service/declarations/practices/persist-with-rds/.test/assets/demo-repo-with-dev-config/declapract.use.yml +18 -0
  45. package/dist/.test/assets/cicd-service/declarations/practices/persist-with-rds/.test/assets/demo-repo-with-dev-config/package.json +4 -0
  46. package/dist/.test/assets/cicd-service/declarations/practices/persist-with-rds/__snapshots__/.declapract.integration.test.ts.snap +45 -0
  47. package/dist/.test/assets/cicd-service/declarations/practices/persist-with-rds/__snapshots__/.extensions.sql.declapract.integration.test.ts.snap +42 -0
  48. package/dist/.test/assets/cicd-service/declarations/practices/persist-with-rds/__snapshots__/deploy-database-gerunds.declapract.integration.test.ts.snap +102 -0
  49. package/dist/.test/assets/cicd-service/declarations/practices/persist-with-rds/__snapshots__/provision-testdb-access.declapract.integration.test.ts.snap +3 -0
  50. package/dist/.test/assets/cicd-service/declarations/practices/persist-with-rds/__snapshots__/ssm-cicd-param-names.declapract.integration.test.ts.snap +10 -0
  51. package/dist/.test/assets/cicd-service/declarations/practices/persist-with-rds/__snapshots__/testdb-preflight-failloud.declapract.integration.test.ts.snap +30 -0
  52. package/dist/.test/assets/cicd-service/declarations/practices/persist-with-rds/bad-practices/non-prefixed-manual-init-sqls/provision/schema/sql/init/database.sql.declapract.ts +3 -0
  53. package/dist/.test/assets/cicd-service/declarations/practices/persist-with-rds/bad-practices/non-prefixed-manual-init-sqls/provision/schema/sql/init/extensions.sql.declapract.ts +13 -0
  54. package/dist/.test/assets/cicd-service/declarations/practices/persist-with-rds/bad-practices/non-prefixed-manual-init-sqls/provision/schema/sql/init/schema.sql.declapract.ts +3 -0
  55. package/dist/.test/assets/cicd-service/declarations/practices/persist-with-rds/bad-practices/non-prefixed-manual-init-sqls/provision/schema/sql/init/user.cicd.sql.declapract.ts +3 -0
  56. package/dist/.test/assets/cicd-service/declarations/practices/persist-with-rds/bad-practices/non-prefixed-manual-init-sqls/provision/schema/sql/init/user.datalakedb.sql.declapract.ts +3 -0
  57. package/dist/.test/assets/cicd-service/declarations/practices/persist-with-rds/bad-practices/non-prefixed-manual-init-sqls/readme.md +5 -0
  58. package/dist/.test/assets/cicd-service/declarations/practices/persist-with-rds/bad-practices/old-config-file-names/codegen.sql.yml.declapract.ts +3 -0
  59. package/dist/.test/assets/cicd-service/declarations/practices/persist-with-rds/bad-practices/old-dev-config-location/config/dev.json.declapract.ts +33 -0
  60. package/dist/.test/assets/cicd-service/declarations/practices/persist-with-rds/bad-practices/old-integration-test-db-dir/.declapract.readme.md +1 -0
  61. package/dist/.test/assets/cicd-service/declarations/practices/persist-with-rds/bad-practices/old-integration-test-db-dir/provision/docker/integration_test_db/<star><star>/<star>.declapract.ts +15 -0
  62. package/dist/.test/assets/cicd-service/declarations/practices/persist-with-rds/bad-practices/old-integration-test-db-hyphen-dir/.declapract.readme.md +1 -0
  63. package/dist/.test/assets/cicd-service/declarations/practices/persist-with-rds/bad-practices/old-integration-test-db-hyphen-dir/provision/docker/integration-test-db/<star><star>/<star>.declapract.ts +15 -0
  64. package/dist/.test/assets/cicd-service/declarations/practices/persist-with-rds/bad-practices/old-integration-test-db-paths/.declapract.readme.md +1 -0
  65. package/dist/.test/assets/cicd-service/declarations/practices/persist-with-rds/bad-practices/old-integration-test-db-paths/package.json +8 -0
  66. package/dist/.test/assets/cicd-service/declarations/practices/persist-with-rds/bad-practices/old-integration-test-db-paths/package.json.declapract.ts +10 -0
  67. package/dist/.test/assets/cicd-service/declarations/practices/persist-with-rds/bad-practices/old-packagejson-script-names/package.json +9 -0
  68. package/dist/.test/assets/cicd-service/declarations/practices/persist-with-rds/bad-practices/old-packagejson-script-names/package.json.declapract.ts +22 -0
  69. package/dist/.test/assets/cicd-service/declarations/practices/persist-with-rds/bad-practices/old-param-placeholder/config/<star>.json.declapract.ts +14 -0
  70. package/dist/.test/assets/cicd-service/declarations/practices/persist-with-rds/bad-practices/schema-entities-dir/.declapract.readme.md +1 -0
  71. package/dist/.test/assets/cicd-service/declarations/practices/persist-with-rds/bad-practices/schema-entities-dir/provision/schema/entities/<star>.ts.declapract.ts +12 -0
  72. package/dist/.test/assets/cicd-service/declarations/practices/persist-with-rds/bad-practices/schema-entities-dir/provision/schema/sql/entities.yml.declapract.ts +13 -0
  73. package/dist/.test/assets/cicd-service/declarations/practices/persist-with-rds/bad-practices/terraform-parameters/.declapract.integration.test.ts +88 -0
  74. package/dist/.test/assets/cicd-service/declarations/practices/persist-with-rds/bad-practices/terraform-parameters/.test/assets/demo-repo-with-terraform-ssm/declapract.declare.yml +4 -0
  75. package/dist/.test/assets/cicd-service/declarations/practices/persist-with-rds/bad-practices/terraform-parameters/.test/assets/demo-repo-with-terraform-ssm/declapract.use.yml +18 -0
  76. package/dist/.test/assets/cicd-service/declarations/practices/persist-with-rds/bad-practices/terraform-parameters/.test/assets/demo-repo-with-terraform-ssm/package.json +4 -0
  77. package/dist/.test/assets/cicd-service/declarations/practices/persist-with-rds/bad-practices/terraform-parameters/.test/assets/demo-repo-with-terraform-ssm/provision/aws/product/parameter-store.tf +23 -0
  78. package/dist/.test/assets/cicd-service/declarations/practices/persist-with-rds/bad-practices/terraform-parameters/__snapshots__/.declapract.integration.test.ts.snap +44 -0
  79. package/dist/.test/assets/cicd-service/declarations/practices/persist-with-rds/bad-practices/terraform-parameters/provision/aws/product/parameter-store.tf.declapract.ts +55 -0
  80. package/dist/.test/assets/cicd-service/declarations/practices/persist-with-rds/bad-practices/with-connection-in-input/.declapract.readme.md +1 -0
  81. package/dist/.test/assets/cicd-service/declarations/practices/persist-with-rds/bad-practices/with-connection-in-input/src/utils/database/withDatabaseConnection.ts +3 -0
  82. package/dist/.test/assets/cicd-service/declarations/practices/persist-with-rds/best-practice/.declapract.readme.md +58 -0
  83. package/dist/.test/assets/cicd-service/declarations/practices/persist-with-rds/best-practice/codegen.sql.dao.yml +18 -0
  84. package/dist/.test/assets/cicd-service/declarations/practices/persist-with-rds/best-practice/codegen.sql.dao.yml.declapract.ts +3 -0
  85. package/dist/.test/assets/cicd-service/declarations/practices/persist-with-rds/best-practice/codegen.sql.schema.yml +6 -0
  86. package/dist/.test/assets/cicd-service/declarations/practices/persist-with-rds/best-practice/codegen.sql.types.yml +16 -0
  87. package/dist/.test/assets/cicd-service/declarations/practices/persist-with-rds/best-practice/config/prep.json +36 -0
  88. package/dist/.test/assets/cicd-service/declarations/practices/persist-with-rds/best-practice/config/prep.json.declapract.ts +15 -0
  89. package/dist/.test/assets/cicd-service/declarations/practices/persist-with-rds/best-practice/config/prod.json +36 -0
  90. package/dist/.test/assets/cicd-service/declarations/practices/persist-with-rds/best-practice/config/prod.json.declapract.ts +15 -0
  91. package/dist/.test/assets/cicd-service/declarations/practices/persist-with-rds/best-practice/config/test.json +33 -0
  92. package/dist/.test/assets/cicd-service/declarations/practices/persist-with-rds/best-practice/config/test.json.declapract.ts +15 -0
  93. package/dist/.test/assets/cicd-service/declarations/practices/persist-with-rds/best-practice/package.json +30 -0
  94. package/dist/.test/assets/cicd-service/declarations/practices/persist-with-rds/best-practice/package.json.declapract.ts +3 -0
  95. package/dist/.test/assets/cicd-service/declarations/practices/persist-with-rds/best-practice/provision/aws/readme.md +79 -0
  96. package/dist/.test/assets/cicd-service/declarations/practices/persist-with-rds/best-practice/provision/aws/resources.parameters.ts +106 -0
  97. package/dist/.test/assets/cicd-service/declarations/practices/persist-with-rds/best-practice/provision/aws/resources.ts +30 -0
  98. package/dist/.test/assets/cicd-service/declarations/practices/persist-with-rds/best-practice/provision/docker/testdb/build-image.dockerfile +7 -0
  99. package/dist/.test/assets/cicd-service/declarations/practices/persist-with-rds/best-practice/provision/docker/testdb/docker-compose.yml +18 -0
  100. package/dist/.test/assets/cicd-service/declarations/practices/persist-with-rds/best-practice/provision/docker/testdb/init/.gitignore +3 -0
  101. package/dist/.test/assets/cicd-service/declarations/practices/persist-with-rds/best-practice/provision/docker/testdb/init/readme.md +3 -0
  102. package/dist/.test/assets/cicd-service/declarations/practices/persist-with-rds/best-practice/provision/docker/testdb/wait-for-postgres.sh +25 -0
  103. package/dist/.test/assets/cicd-service/declarations/practices/persist-with-rds/best-practice/provision/schema/connection.config.js +29 -0
  104. package/dist/.test/assets/cicd-service/declarations/practices/persist-with-rds/best-practice/provision/schema/control.yml +7 -0
  105. package/dist/.test/assets/cicd-service/declarations/practices/persist-with-rds/best-practice/provision/schema/deploy.database.sh +97 -0
  106. package/dist/.test/assets/cicd-service/declarations/practices/persist-with-rds/best-practice/provision/schema/sql/init/.database.sql +10 -0
  107. package/dist/.test/assets/cicd-service/declarations/practices/persist-with-rds/best-practice/provision/schema/sql/init/.extensions.sql +16 -0
  108. package/dist/.test/assets/cicd-service/declarations/practices/persist-with-rds/best-practice/provision/schema/sql/init/.extensions.sql.declapract.ts +37 -0
  109. package/dist/.test/assets/cicd-service/declarations/practices/persist-with-rds/best-practice/provision/schema/sql/init/.schema.sql +11 -0
  110. package/dist/.test/assets/cicd-service/declarations/practices/persist-with-rds/best-practice/provision/schema/sql/init/.user.cicd.sql +14 -0
  111. package/dist/.test/assets/cicd-service/declarations/practices/persist-with-rds/best-practice/provision/schema/sql/init/.user.datalakedb.sql +12 -0
  112. package/dist/.test/assets/cicd-service/declarations/practices/persist-with-rds/best-practice/provision/schema/sql/init/default_transaction_isolation.sql +6 -0
  113. package/dist/.test/assets/cicd-service/declarations/practices/persist-with-rds/best-practice/provision/schema/sql/init/user.service.sql +16 -0
  114. package/dist/.test/assets/cicd-service/declarations/practices/persist-with-rds/best-practice/provision/schema/sql/init.yml +9 -0
  115. package/dist/.test/assets/cicd-service/declarations/practices/persist-with-rds/best-practice/provision/schema/sql/init.yml.declapract.ts +3 -0
  116. package/dist/.test/assets/cicd-service/declarations/practices/persist-with-rds/best-practice/src/utils/config/config.schema.ts +110 -0
  117. package/dist/{practices/persist-with-rds/best-practice/src/utils/database/getDatabaseConnection.integration.test.ts → .test/assets/cicd-service/declarations/practices/persist-with-rds/best-practice/src/utils/database/getOneDatabaseConnection.integration.test.ts} +3 -3
  118. package/dist/{practices/persist-with-rds/best-practice/src/utils/database/getDatabaseConnection.ts → .test/assets/cicd-service/declarations/practices/persist-with-rds/best-practice/src/utils/database/getOneDatabaseConnection.ts} +1 -1
  119. package/dist/.test/assets/cicd-service/declarations/practices/persist-with-rds/best-practice/src/utils/database/withDatabaseContext.ts +53 -0
  120. package/dist/.test/assets/cicd-service/declarations/practices/persist-with-rds/best-practice/src/utils/database/withDatabaseTransaction.ts +33 -0
  121. package/dist/.test/assets/cicd-service/declarations/practices/persist-with-rds/deploy-database-gerunds.declapract.integration.test.ts +57 -0
  122. package/dist/.test/assets/cicd-service/declarations/practices/persist-with-rds/empty-template-declares-zero-clusters.declapract.integration.test.ts +71 -0
  123. package/dist/.test/assets/cicd-service/declarations/practices/persist-with-rds/provision-testdb-access.declapract.integration.test.ts +50 -0
  124. package/dist/.test/assets/cicd-service/declarations/practices/persist-with-rds/ssm-cicd-param-names.declapract.integration.test.ts +73 -0
  125. package/dist/.test/assets/cicd-service/declarations/practices/persist-with-rds/testdb-preflight-failloud.declapract.integration.test.ts +83 -0
  126. package/dist/.test/assets/cicd-service/declarations/useCases.yml +13 -0
  127. package/dist/.test/assets/environments/declarations/declapract.declare.yml +4 -0
  128. package/dist/.test/assets/environments/declarations/practices/environments/.declapract.integration.test.ts +136 -0
  129. package/dist/.test/assets/environments/declarations/practices/environments/__snapshots__/.declapract.integration.test.ts.snap +55 -0
  130. package/dist/.test/assets/environments/declarations/practices/environments/bad-practices/old-dev-scripts/package.json.declapract.ts +59 -0
  131. package/dist/.test/assets/environments/declarations/practices/environments/bad-practices/old-stage-enum/.declapract.integration.test.ts +133 -0
  132. package/dist/.test/assets/environments/declarations/practices/environments/bad-practices/old-stage-enum/.test/assets/demo-repo-with-stage-enum/declapract.use.yml +8 -0
  133. package/dist/.test/assets/environments/declarations/practices/environments/bad-practices/old-stage-enum/.test/assets/demo-repo-with-stage-enum/package.json +4 -0
  134. package/dist/.test/assets/environments/declarations/practices/environments/bad-practices/old-stage-enum/.test/assets/demo-repo-with-stage-enum/src/logic/getDeployTarget.ts +15 -0
  135. package/dist/.test/assets/environments/declarations/practices/environments/bad-practices/old-stage-enum/__snapshots__/.declapract.integration.test.ts.snap +40 -0
  136. package/dist/.test/assets/environments/declarations/practices/environments/bad-practices/old-stage-enum/src/<star><star>/<star>.ts.declapract.ts +304 -0
  137. package/dist/.test/assets/environments/declarations/practices/environments/best-practice/.declapract.readme.md +61 -0
  138. package/dist/.test/assets/environments/declarations/practices/environments/best-practice/package.json +7 -0
  139. package/dist/.test/assets/environments/declarations/practices/environments/best-practice/package.json.declapract.ts +3 -0
  140. package/dist/.test/assets/environments/declarations/practices/environments/best-practice/src/access/sdks/sdkAwsLambdaEnvAccessAncient.ts +32 -0
  141. package/dist/.test/assets/environments/declarations/practices/environments/best-practice/src/access/sdks/sdkAwsLambdaEnvAccessContemp.ts +14 -0
  142. package/dist/.test/assets/environments/declarations/practices/environments/best-practice/src/utils/environment.ts +9 -0
  143. package/dist/.test/assets/environments/declarations/useCases.yml +5 -0
  144. package/dist/.test/assets/expo/declarations/practices/cicd-app-react-native-expo/.declapract.integration.test.ts +122 -22
  145. package/dist/.test/assets/expo/declarations/practices/cicd-app-react-native-expo/__snapshots__/.declapract.integration.test.ts.snap +40 -29
  146. package/dist/.test/assets/expo/declarations/practices/cicd-app-react-native-expo/best-practice/.github/workflows/.deploy-expo.yml +16 -6
  147. package/dist/.test/assets/expo/declarations/practices/cicd-app-react-native-expo/best-practice/.github/workflows/deploy.yml +11 -11
  148. package/dist/.test/assets/expo/declarations/practices/cicd-app-react-native-expo/best-practice/.github/workflows/test.yml +3 -5
  149. package/dist/.test/assets/expo/declarations/practices/cicd-app-react-native-expo/best-practice/package.json +2 -2
  150. package/dist/.test/assets/expo/declarations/practices/node/bad-practices/self-deps-not-link/.declapract.integration.test.ts +102 -0
  151. package/dist/.test/assets/expo/declarations/practices/node/bad-practices/self-deps-not-link/.test/assets/demo-repo-with-self-deps/declapract.declare.yml +4 -0
  152. package/dist/.test/assets/expo/declarations/practices/node/bad-practices/self-deps-not-link/.test/assets/demo-repo-with-self-deps/declapract.use.yml +8 -0
  153. package/dist/.test/assets/expo/declarations/practices/node/bad-practices/self-deps-not-link/.test/assets/demo-repo-with-self-deps/package.json +15 -0
  154. package/dist/.test/assets/expo/declarations/practices/node/bad-practices/self-deps-not-link/__snapshots__/.declapract.integration.test.ts.snap +46 -0
  155. package/dist/.test/assets/expo/declarations/practices/node/bad-practices/self-deps-not-link/package.json.declapract.ts +22 -29
  156. package/dist/.test/assets/expo/declarations/practices/node/best-practice/.npmrc.declapract.ts +5 -1
  157. package/dist/.test/assets/expo/declarations/practices/node/best-practice/package.json +1 -1
  158. package/dist/.test/assets/expo-fullusecase/declarations/practices/cache/.declapract.integration.test.ts +4 -4
  159. package/dist/.test/assets/expo-fullusecase/declarations/practices/cache/.test/assets/repo-with-valid-cache-package/package.json +1 -1
  160. package/dist/.test/assets/expo-fullusecase/declarations/practices/cache/best-practice/package.json +3 -3
  161. package/dist/.test/assets/expo-fullusecase/declarations/practices/cicd-app-react-native-expo/.declapract.integration.test.ts +122 -22
  162. package/dist/.test/assets/expo-fullusecase/declarations/practices/cicd-app-react-native-expo/__snapshots__/.declapract.integration.test.ts.snap +40 -29
  163. package/dist/.test/assets/expo-fullusecase/declarations/practices/cicd-app-react-native-expo/best-practice/.github/workflows/.deploy-expo.yml +16 -6
  164. package/dist/.test/assets/expo-fullusecase/declarations/practices/cicd-app-react-native-expo/best-practice/.github/workflows/deploy.yml +11 -11
  165. package/dist/.test/assets/expo-fullusecase/declarations/practices/cicd-app-react-native-expo/best-practice/.github/workflows/test.yml +3 -5
  166. package/dist/.test/assets/expo-fullusecase/declarations/practices/cicd-app-react-native-expo/best-practice/package.json +2 -2
  167. package/dist/.test/assets/expo-fullusecase/declarations/practices/cicd-common/.declapract.integration.test.ts +25 -0
  168. package/dist/.test/assets/expo-fullusecase/declarations/practices/cicd-common/__snapshots__/.declapract.integration.test.ts.snap +11 -23
  169. package/dist/.test/assets/expo-fullusecase/declarations/practices/cicd-common/__snapshots__/declastruct-insync-grep.declapract.integration.test.ts.snap +3 -0
  170. package/dist/.test/assets/expo-fullusecase/declarations/practices/cicd-common/best-practice/.github/workflows/.declastruct.yml +22 -8
  171. package/dist/.test/assets/expo-fullusecase/declarations/practices/cicd-common/best-practice/.github/workflows/.test.yml +11 -23
  172. package/dist/.test/assets/expo-fullusecase/declarations/practices/cicd-common/best-practice/.github/workflows/.test.yml.declapract.ts +12 -1
  173. package/dist/.test/assets/expo-fullusecase/declarations/practices/cicd-common/best-practice/.github/workflows/report-slow-tests.sh +65 -0
  174. package/dist/.test/assets/expo-fullusecase/declarations/practices/cicd-common/declastruct-insync-grep.declapract.integration.test.ts +49 -0
  175. package/dist/.test/assets/expo-fullusecase/declarations/practices/cicd-common/report-slow-tests.play.declapract.integration.test.ts +144 -0
  176. package/dist/.test/assets/expo-fullusecase/declarations/practices/conventional-commits/__snapshots__/commitlint-body-max-line.declapract.integration.test.ts.snap +3 -0
  177. package/dist/.test/assets/expo-fullusecase/declarations/practices/conventional-commits/best-practice/commitlint.config.js +5 -0
  178. package/dist/.test/assets/expo-fullusecase/declarations/practices/conventional-commits/best-practice/package.json +1 -1
  179. package/dist/.test/assets/expo-fullusecase/declarations/practices/conventional-commits/commitlint-body-max-line.declapract.integration.test.ts +49 -0
  180. package/dist/.test/assets/expo-fullusecase/declarations/practices/domain/.declapract.integration.test.ts +115 -0
  181. package/dist/.test/assets/expo-fullusecase/declarations/practices/domain/bad-practices/schematic-joi-model/src/{domain → domain.objects}/<star><star>/<star>.ts.declapract.ts +4 -1
  182. package/dist/.test/assets/expo-fullusecase/declarations/practices/domain/best-practice/package.json +2 -2
  183. package/dist/.test/assets/expo-fullusecase/declarations/practices/domain/best-practice/src/domain.objects/index.ts.declapract.ts +12 -0
  184. package/dist/.test/assets/expo-fullusecase/declarations/practices/errors/.declapract.integration.test.ts +121 -0
  185. package/dist/.test/assets/expo-fullusecase/declarations/practices/errors/bad-practices/own-implementation/src/<star><star>/UnexpectedCodePathError.ts.declapract.ts +8 -0
  186. package/dist/.test/assets/expo-fullusecase/declarations/practices/errors/best-practice/package.json +1 -1
  187. package/dist/.test/assets/expo-fullusecase/declarations/practices/format/.declapract.integration.test.ts +131 -0
  188. package/dist/.test/assets/expo-fullusecase/declarations/practices/format/__snapshots__/.declapract.integration.test.ts.snap +17 -0
  189. package/dist/.test/assets/expo-fullusecase/declarations/practices/format/bad-practices/prettier/prettier.config.js.declapract.ts +1 -1
  190. package/dist/.test/assets/expo-fullusecase/declarations/practices/format/best-practice/package.json.declapract.ts +36 -18
  191. package/dist/.test/assets/expo-fullusecase/declarations/practices/git/.declapract.integration.test.ts +57 -6
  192. package/dist/.test/assets/expo-fullusecase/declarations/practices/git/__snapshots__/.declapract.integration.test.ts.snap +2 -0
  193. package/dist/.test/assets/expo-fullusecase/declarations/practices/git/best-practice/.gitattributes.declapract.ts +50 -37
  194. package/dist/.test/assets/expo-fullusecase/declarations/practices/git/best-practice/.gitignore.declapract.ts +8 -0
  195. package/dist/.test/assets/expo-fullusecase/declarations/practices/husky/__snapshots__/check.timestamps.play.declapract.integration.test.ts.snap +7 -0
  196. package/dist/.test/assets/expo-fullusecase/declarations/practices/husky/best-practice/.husky/check.timestamps.sh +11 -2
  197. package/dist/.test/assets/expo-fullusecase/declarations/practices/husky/check.timestamps.play.declapract.integration.test.ts +65 -0
  198. package/dist/.test/assets/expo-fullusecase/declarations/practices/lint/__snapshots__/dpdmrc-exclude-policy.declapract.integration.test.ts.snap +3 -0
  199. package/dist/.test/assets/expo-fullusecase/declarations/practices/lint/bad-practices/depcheck-denylisted-ignores/.depcheckrc.yml.declapract.ts +4 -0
  200. package/dist/.test/assets/expo-fullusecase/declarations/practices/lint/best-practice/.depcheckrc.yml.declapract.ts +10 -9
  201. package/dist/.test/assets/expo-fullusecase/declarations/practices/lint/best-practice/.dpdmrc.yaml +10 -6
  202. package/dist/.test/assets/expo-fullusecase/declarations/practices/lint/dpdmrc-exclude-policy.declapract.integration.test.ts +50 -0
  203. package/dist/.test/assets/expo-fullusecase/declarations/practices/node/bad-practices/self-deps-not-link/.declapract.integration.test.ts +102 -0
  204. package/dist/.test/assets/expo-fullusecase/declarations/practices/node/bad-practices/self-deps-not-link/.test/assets/demo-repo-with-self-deps/declapract.declare.yml +4 -0
  205. package/dist/.test/assets/expo-fullusecase/declarations/practices/node/bad-practices/self-deps-not-link/.test/assets/demo-repo-with-self-deps/declapract.use.yml +8 -0
  206. package/dist/.test/assets/expo-fullusecase/declarations/practices/node/bad-practices/self-deps-not-link/.test/assets/demo-repo-with-self-deps/package.json +15 -0
  207. package/dist/.test/assets/expo-fullusecase/declarations/practices/node/bad-practices/self-deps-not-link/__snapshots__/.declapract.integration.test.ts.snap +46 -0
  208. package/dist/.test/assets/expo-fullusecase/declarations/practices/node/bad-practices/self-deps-not-link/package.json.declapract.ts +22 -29
  209. package/dist/.test/assets/expo-fullusecase/declarations/practices/node/best-practice/.npmrc.declapract.ts +5 -1
  210. package/dist/.test/assets/expo-fullusecase/declarations/practices/node/best-practice/package.json +1 -1
  211. package/dist/.test/assets/expo-fullusecase/declarations/practices/package-json-order/best-practice/package.json.declapract.ts +7 -1
  212. package/dist/.test/assets/expo-fullusecase/declarations/practices/pnpm/.declapract.integration.test.ts +163 -13
  213. package/dist/.test/assets/expo-fullusecase/declarations/practices/pnpm/.test/assets/repo-npm-to-pnpm/package.json +1 -1
  214. package/dist/.test/assets/expo-fullusecase/declarations/practices/pnpm/.test/assets/repo-npm-to-pnpm/pnpm-workspace.yaml +3 -0
  215. package/dist/.test/assets/expo-fullusecase/declarations/practices/pnpm/__snapshots__/.declapract.integration.test.ts.snap +9 -2
  216. package/dist/.test/assets/expo-fullusecase/declarations/practices/pnpm/bad-practices/inert-build-allowlist/pnpm-workspace.yaml.declapract.ts +59 -0
  217. package/dist/.test/assets/expo-fullusecase/declarations/practices/pnpm/best-practice/.declapract.readme.md +1 -1
  218. package/dist/.test/assets/expo-fullusecase/declarations/practices/pnpm/best-practice/package.json +1 -1
  219. package/dist/.test/assets/expo-fullusecase/declarations/practices/pnpm/best-practice/package.json.declapract.ts +4 -2
  220. package/dist/.test/assets/expo-fullusecase/declarations/practices/provision-github/best-practice/package.json +2 -2
  221. package/dist/.test/assets/expo-fullusecase/declarations/practices/provision-github/best-practice/provision/github.repo/resources.ts +16 -0
  222. package/dist/.test/assets/expo-fullusecase/declarations/practices/rhachet/.declapract.integration.test.ts +98 -0
  223. package/dist/.test/assets/expo-fullusecase/declarations/practices/rhachet/.test/assets/demo-repo-with-consumer-boot/.agent/repo=.this/role=any/boot.yml +7 -0
  224. package/dist/.test/assets/expo-fullusecase/declarations/practices/rhachet/.test/assets/demo-repo-with-consumer-boot/declapract.declare.yml +4 -0
  225. package/dist/.test/assets/expo-fullusecase/declarations/practices/rhachet/.test/assets/demo-repo-with-consumer-boot/declapract.use.yml +2 -0
  226. package/dist/.test/assets/expo-fullusecase/declarations/practices/rhachet/.test/assets/demo-repo-with-consumer-boot/package.json +4 -0
  227. package/dist/.test/assets/expo-fullusecase/declarations/practices/rhachet/__snapshots__/.declapract.integration.test.ts.snap +45 -0
  228. package/dist/.test/assets/expo-fullusecase/declarations/practices/rhachet/__snapshots__/boot-refs-glossary.declapract.integration.test.ts.snap +6 -0
  229. package/dist/.test/assets/expo-fullusecase/declarations/practices/rhachet/__snapshots__/boot-yml-findsert.declapract.integration.test.ts.snap +27 -0
  230. package/dist/.test/assets/expo-fullusecase/declarations/practices/rhachet/bad-practices/prod-deps/.declapract.readme.md +6 -2
  231. package/dist/.test/assets/expo-fullusecase/declarations/practices/rhachet/bad-practices/prod-deps/.test/assets/demo-repo-with-rhachet-prod-deps/declapract.declare.yml +4 -0
  232. package/dist/.test/assets/expo-fullusecase/declarations/practices/rhachet/bad-practices/prod-deps/.test/assets/demo-repo-with-rhachet-prod-deps/declapract.use.yml +2 -0
  233. package/dist/.test/assets/expo-fullusecase/declarations/practices/rhachet/bad-practices/prod-deps/.test/assets/demo-repo-with-rhachet-prod-deps/package.json +12 -0
  234. package/dist/.test/assets/expo-fullusecase/declarations/practices/rhachet/bad-practices/prod-deps/package.json.declapract.ts +58 -17
  235. package/dist/.test/assets/expo-fullusecase/declarations/practices/rhachet/best-practice/.agent/repo=.this/role=any/boot.yml +46 -0
  236. package/dist/.test/assets/expo-fullusecase/declarations/practices/rhachet/best-practice/.agent/repo=.this/role=any/boot.yml.declapract.ts +165 -0
  237. package/dist/.test/assets/expo-fullusecase/declarations/practices/rhachet/best-practice/.gitignore.declapract.ts +18 -5
  238. package/dist/.test/assets/expo-fullusecase/declarations/practices/rhachet/best-practice/package.json +8 -8
  239. package/dist/.test/assets/expo-fullusecase/declarations/practices/rhachet/boot-refs-glossary.declapract.integration.test.ts +89 -0
  240. package/dist/.test/assets/expo-fullusecase/declarations/practices/rhachet/boot-yml-findsert.declapract.integration.test.ts +145 -0
  241. package/dist/.test/assets/expo-fullusecase/declarations/practices/tests-any/__snapshots__/changedsince-origin-main.declapract.integration.test.ts.snap +8 -0
  242. package/dist/.test/assets/expo-fullusecase/declarations/practices/tests-any/autoprune-hooks.declapract.integration.test.ts +104 -0
  243. package/dist/.test/assets/expo-fullusecase/declarations/practices/tests-any/bad-practices/old-acceptance-import-paths/.declapract.readme.md +2 -2
  244. package/dist/.test/assets/expo-fullusecase/declarations/practices/tests-any/bad-practices/old-acceptance-test-utils/blackbox/lambdas/<star>.ts.declapract.ts +9 -9
  245. package/dist/.test/assets/expo-fullusecase/declarations/practices/tests-any/best-practice/package.json +3 -3
  246. package/dist/.test/assets/expo-fullusecase/declarations/practices/tests-any/changedsince-origin-main.declapract.integration.test.ts +58 -0
  247. package/dist/.test/assets/expo-fullusecase/declarations/practices/tests-any/{best-practice/package.json.shell-flags.declapract.integration.test.ts → package.json.shell-flags.declapract.integration.test.ts} +26 -16
  248. package/dist/.test/assets/expo-fullusecase/declarations/practices/tests-expo/.declapract.integration.test.ts +7 -3
  249. package/dist/.test/assets/expo-fullusecase/declarations/practices/tests-expo/.test/assets/repo-expo-greenfield/package.json +5 -1
  250. package/dist/.test/assets/expo-fullusecase/declarations/practices/tests-expo/__snapshots__/.declapract.integration.test.ts.snap +17 -8
  251. package/dist/.test/assets/expo-fullusecase/declarations/practices/tests-expo/__snapshots__/package.json.declapract.integration.test.ts.snap +60 -0
  252. package/dist/.test/assets/expo-fullusecase/declarations/practices/tests-expo/best-practice/jest.acceptance.config.ts +5 -0
  253. package/dist/.test/assets/expo-fullusecase/declarations/practices/tests-expo/best-practice/jest.integration.config.ts +5 -0
  254. package/dist/.test/assets/expo-fullusecase/declarations/practices/tests-expo/best-practice/jest.integration.env.ts +5 -1
  255. package/dist/.test/assets/expo-fullusecase/declarations/practices/tests-expo/best-practice/jest.unit.config.ts +5 -0
  256. package/dist/.test/assets/expo-fullusecase/declarations/practices/tests-expo/best-practice/jest.unit.env.ts +6 -1
  257. package/dist/.test/assets/expo-fullusecase/declarations/practices/tests-expo/best-practice/package.json.declapract.ts +190 -13
  258. package/dist/.test/assets/expo-fullusecase/declarations/practices/tests-expo/package.json.declapract.integration.test.ts +94 -0
  259. package/dist/.test/assets/expo-fullusecase/declarations/practices/typescript-expo/__snapshots__/package.json.declapract.integration.test.ts.snap +8 -0
  260. package/dist/.test/assets/expo-fullusecase/declarations/practices/typescript-expo/__snapshots__/tsconfig.json.declapract.integration.test.ts.snap +19 -0
  261. package/dist/.test/assets/expo-fullusecase/declarations/practices/typescript-expo/{best-practice/package.json.declapract.integration.test.ts → package.json.declapract.integration.test.ts} +15 -2
  262. package/dist/.test/assets/{expo-toolchain/declarations/practices/typescript-expo/best-practice → expo-fullusecase/declarations/practices/typescript-expo}/tsconfig.json.declapract.integration.test.ts +13 -2
  263. package/dist/.test/assets/expo-migration/declarations/practices/cicd-app-react-native-expo/.declapract.integration.test.ts +122 -22
  264. package/dist/.test/assets/expo-migration/declarations/practices/cicd-app-react-native-expo/__snapshots__/.declapract.integration.test.ts.snap +40 -29
  265. package/dist/.test/assets/expo-migration/declarations/practices/cicd-app-react-native-expo/best-practice/.github/workflows/.deploy-expo.yml +16 -6
  266. package/dist/.test/assets/expo-migration/declarations/practices/cicd-app-react-native-expo/best-practice/.github/workflows/deploy.yml +11 -11
  267. package/dist/.test/assets/expo-migration/declarations/practices/cicd-app-react-native-expo/best-practice/.github/workflows/test.yml +3 -5
  268. package/dist/.test/assets/expo-migration/declarations/practices/cicd-app-react-native-expo/best-practice/package.json +2 -2
  269. package/dist/.test/assets/expo-migration/declarations/practices/domain/.declapract.integration.test.ts +115 -0
  270. package/dist/{practices/domain/bad-practices/schematic-joi-model/src/domain → .test/assets/expo-migration/declarations/practices/domain/bad-practices/schematic-joi-model/src/domain.objects}/<star><star>/<star>.ts.declapract.ts +4 -1
  271. package/dist/.test/assets/expo-migration/declarations/practices/domain/best-practice/package.json +2 -2
  272. package/dist/.test/assets/expo-migration/declarations/practices/domain/best-practice/src/domain.objects/index.ts.declapract.ts +12 -0
  273. package/dist/.test/assets/expo-migration/declarations/practices/git/.declapract.integration.test.ts +57 -6
  274. package/dist/.test/assets/expo-migration/declarations/practices/git/__snapshots__/.declapract.integration.test.ts.snap +2 -0
  275. package/dist/.test/assets/expo-migration/declarations/practices/git/best-practice/.gitattributes.declapract.ts +50 -37
  276. package/dist/.test/assets/expo-migration/declarations/practices/git/best-practice/.gitignore.declapract.ts +8 -0
  277. package/dist/.test/assets/expo-migration/declarations/practices/node/bad-practices/self-deps-not-link/.declapract.integration.test.ts +102 -0
  278. package/dist/.test/assets/expo-migration/declarations/practices/node/bad-practices/self-deps-not-link/.test/assets/demo-repo-with-self-deps/declapract.declare.yml +4 -0
  279. package/dist/.test/assets/expo-migration/declarations/practices/node/bad-practices/self-deps-not-link/.test/assets/demo-repo-with-self-deps/declapract.use.yml +8 -0
  280. package/dist/.test/assets/expo-migration/declarations/practices/node/bad-practices/self-deps-not-link/.test/assets/demo-repo-with-self-deps/package.json +15 -0
  281. package/dist/.test/assets/expo-migration/declarations/practices/node/bad-practices/self-deps-not-link/__snapshots__/.declapract.integration.test.ts.snap +46 -0
  282. package/dist/.test/assets/expo-migration/declarations/practices/node/bad-practices/self-deps-not-link/package.json.declapract.ts +22 -29
  283. package/dist/.test/assets/expo-migration/declarations/practices/node/best-practice/.npmrc.declapract.ts +5 -1
  284. package/dist/.test/assets/expo-migration/declarations/practices/node/best-practice/package.json +1 -1
  285. package/dist/.test/assets/expo-migration/declarations/practices/pnpm/.declapract.integration.test.ts +163 -13
  286. package/dist/.test/assets/expo-migration/declarations/practices/pnpm/.test/assets/repo-npm-to-pnpm/package.json +1 -1
  287. package/dist/.test/assets/expo-migration/declarations/practices/pnpm/.test/assets/repo-npm-to-pnpm/pnpm-workspace.yaml +3 -0
  288. package/dist/.test/assets/expo-migration/declarations/practices/pnpm/__snapshots__/.declapract.integration.test.ts.snap +9 -2
  289. package/dist/.test/assets/expo-migration/declarations/practices/pnpm/bad-practices/inert-build-allowlist/pnpm-workspace.yaml.declapract.ts +59 -0
  290. package/dist/.test/assets/expo-migration/declarations/practices/pnpm/best-practice/.declapract.readme.md +1 -1
  291. package/dist/.test/assets/expo-migration/declarations/practices/pnpm/best-practice/package.json +1 -1
  292. package/dist/.test/assets/expo-migration/declarations/practices/pnpm/best-practice/package.json.declapract.ts +4 -2
  293. package/dist/.test/assets/expo-migration/declarations/practices/rhachet/.declapract.integration.test.ts +98 -0
  294. package/dist/.test/assets/expo-migration/declarations/practices/rhachet/.test/assets/demo-repo-with-consumer-boot/.agent/repo=.this/role=any/boot.yml +7 -0
  295. package/dist/.test/assets/expo-migration/declarations/practices/rhachet/.test/assets/demo-repo-with-consumer-boot/declapract.declare.yml +4 -0
  296. package/dist/.test/assets/expo-migration/declarations/practices/rhachet/.test/assets/demo-repo-with-consumer-boot/declapract.use.yml +2 -0
  297. package/dist/.test/assets/expo-migration/declarations/practices/rhachet/.test/assets/demo-repo-with-consumer-boot/package.json +4 -0
  298. package/dist/.test/assets/expo-migration/declarations/practices/rhachet/__snapshots__/.declapract.integration.test.ts.snap +45 -0
  299. package/dist/.test/assets/expo-migration/declarations/practices/rhachet/__snapshots__/boot-refs-glossary.declapract.integration.test.ts.snap +6 -0
  300. package/dist/.test/assets/expo-migration/declarations/practices/rhachet/__snapshots__/boot-yml-findsert.declapract.integration.test.ts.snap +27 -0
  301. package/dist/.test/assets/expo-migration/declarations/practices/rhachet/bad-practices/prod-deps/.declapract.readme.md +6 -2
  302. package/dist/.test/assets/expo-migration/declarations/practices/rhachet/bad-practices/prod-deps/.test/assets/demo-repo-with-rhachet-prod-deps/declapract.declare.yml +4 -0
  303. package/dist/.test/assets/expo-migration/declarations/practices/rhachet/bad-practices/prod-deps/.test/assets/demo-repo-with-rhachet-prod-deps/declapract.use.yml +2 -0
  304. package/dist/.test/assets/expo-migration/declarations/practices/rhachet/bad-practices/prod-deps/.test/assets/demo-repo-with-rhachet-prod-deps/package.json +12 -0
  305. package/dist/.test/assets/expo-migration/declarations/practices/rhachet/bad-practices/prod-deps/package.json.declapract.ts +58 -17
  306. package/dist/.test/assets/expo-migration/declarations/practices/rhachet/best-practice/.agent/repo=.this/role=any/boot.yml +46 -0
  307. package/dist/.test/assets/expo-migration/declarations/practices/rhachet/best-practice/.agent/repo=.this/role=any/boot.yml.declapract.ts +165 -0
  308. package/dist/.test/assets/expo-migration/declarations/practices/rhachet/best-practice/.gitignore.declapract.ts +18 -5
  309. package/dist/.test/assets/expo-migration/declarations/practices/rhachet/best-practice/package.json +8 -8
  310. package/dist/.test/assets/expo-migration/declarations/practices/rhachet/boot-refs-glossary.declapract.integration.test.ts +89 -0
  311. package/dist/.test/assets/expo-migration/declarations/practices/rhachet/boot-yml-findsert.declapract.integration.test.ts +145 -0
  312. package/dist/.test/assets/expo-migration/declarations/practices/tests-any/__snapshots__/changedsince-origin-main.declapract.integration.test.ts.snap +8 -0
  313. package/dist/.test/assets/expo-migration/declarations/practices/tests-any/autoprune-hooks.declapract.integration.test.ts +104 -0
  314. package/dist/.test/assets/expo-migration/declarations/practices/tests-any/bad-practices/old-acceptance-import-paths/.declapract.readme.md +2 -2
  315. package/dist/.test/assets/expo-migration/declarations/practices/tests-any/bad-practices/old-acceptance-test-utils/blackbox/lambdas/<star>.ts.declapract.ts +9 -9
  316. package/dist/.test/assets/expo-migration/declarations/practices/tests-any/best-practice/package.json +3 -3
  317. package/dist/.test/assets/expo-migration/declarations/practices/tests-any/changedsince-origin-main.declapract.integration.test.ts +58 -0
  318. package/dist/.test/assets/{expo-toolchain/declarations/practices/tests-any/best-practice → expo-migration/declarations/practices/tests-any}/package.json.shell-flags.declapract.integration.test.ts +26 -16
  319. package/dist/.test/assets/expo-migration/declarations/practices/tests-expo/.declapract.integration.test.ts +7 -3
  320. package/dist/.test/assets/expo-migration/declarations/practices/tests-expo/.test/assets/repo-expo-greenfield/package.json +5 -1
  321. package/dist/.test/assets/expo-migration/declarations/practices/tests-expo/__snapshots__/.declapract.integration.test.ts.snap +17 -8
  322. package/dist/.test/assets/expo-migration/declarations/practices/tests-expo/__snapshots__/package.json.declapract.integration.test.ts.snap +60 -0
  323. package/dist/.test/assets/expo-migration/declarations/practices/tests-expo/best-practice/jest.acceptance.config.ts +5 -0
  324. package/dist/.test/assets/expo-migration/declarations/practices/tests-expo/best-practice/jest.integration.config.ts +5 -0
  325. package/dist/.test/assets/expo-migration/declarations/practices/tests-expo/best-practice/jest.integration.env.ts +5 -1
  326. package/dist/.test/assets/expo-migration/declarations/practices/tests-expo/best-practice/jest.unit.config.ts +5 -0
  327. package/dist/.test/assets/expo-migration/declarations/practices/tests-expo/best-practice/jest.unit.env.ts +6 -1
  328. package/dist/.test/assets/expo-migration/declarations/practices/tests-expo/best-practice/package.json.declapract.ts +190 -13
  329. package/dist/.test/assets/expo-migration/declarations/practices/tests-expo/package.json.declapract.integration.test.ts +94 -0
  330. package/dist/.test/assets/expo-migration/declarations/practices/typescript-expo/__snapshots__/package.json.declapract.integration.test.ts.snap +8 -0
  331. package/dist/.test/assets/expo-migration/declarations/practices/typescript-expo/__snapshots__/tsconfig.json.declapract.integration.test.ts.snap +19 -0
  332. package/dist/.test/assets/{expo-toolchain/declarations/practices/typescript-expo/best-practice → expo-migration/declarations/practices/typescript-expo}/package.json.declapract.integration.test.ts +15 -2
  333. package/dist/.test/assets/{expo-fullusecase/declarations/practices/typescript-expo/best-practice → expo-migration/declarations/practices/typescript-expo}/tsconfig.json.declapract.integration.test.ts +13 -2
  334. package/dist/.test/assets/expo-migration/repo-app-protools-shaped/.github/workflows/.deploy-expo.yml +1 -1
  335. package/dist/.test/assets/expo-toolchain/declarations/practices/tests-any/__snapshots__/changedsince-origin-main.declapract.integration.test.ts.snap +8 -0
  336. package/dist/.test/assets/expo-toolchain/declarations/practices/tests-any/autoprune-hooks.declapract.integration.test.ts +104 -0
  337. package/dist/.test/assets/expo-toolchain/declarations/practices/tests-any/bad-practices/old-acceptance-import-paths/.declapract.readme.md +2 -2
  338. package/dist/.test/assets/expo-toolchain/declarations/practices/tests-any/bad-practices/old-acceptance-test-utils/blackbox/lambdas/<star>.ts.declapract.ts +9 -9
  339. package/dist/.test/assets/expo-toolchain/declarations/practices/tests-any/best-practice/package.json +3 -3
  340. package/dist/.test/assets/expo-toolchain/declarations/practices/tests-any/changedsince-origin-main.declapract.integration.test.ts +58 -0
  341. package/dist/.test/assets/{expo-migration/declarations/practices/tests-any/best-practice → expo-toolchain/declarations/practices/tests-any}/package.json.shell-flags.declapract.integration.test.ts +26 -16
  342. package/dist/.test/assets/expo-toolchain/declarations/practices/tests-expo/.declapract.integration.test.ts +7 -3
  343. package/dist/.test/assets/expo-toolchain/declarations/practices/tests-expo/.test/assets/repo-expo-greenfield/package.json +5 -1
  344. package/dist/.test/assets/expo-toolchain/declarations/practices/tests-expo/__snapshots__/.declapract.integration.test.ts.snap +17 -8
  345. package/dist/.test/assets/expo-toolchain/declarations/practices/tests-expo/__snapshots__/package.json.declapract.integration.test.ts.snap +60 -0
  346. package/dist/.test/assets/expo-toolchain/declarations/practices/tests-expo/best-practice/jest.acceptance.config.ts +5 -0
  347. package/dist/.test/assets/expo-toolchain/declarations/practices/tests-expo/best-practice/jest.integration.config.ts +5 -0
  348. package/dist/.test/assets/expo-toolchain/declarations/practices/tests-expo/best-practice/jest.integration.env.ts +5 -1
  349. package/dist/.test/assets/expo-toolchain/declarations/practices/tests-expo/best-practice/jest.unit.config.ts +5 -0
  350. package/dist/.test/assets/expo-toolchain/declarations/practices/tests-expo/best-practice/jest.unit.env.ts +6 -1
  351. package/dist/.test/assets/expo-toolchain/declarations/practices/tests-expo/best-practice/package.json.declapract.ts +190 -13
  352. package/dist/.test/assets/expo-toolchain/declarations/practices/tests-expo/package.json.declapract.integration.test.ts +94 -0
  353. package/dist/.test/assets/expo-toolchain/declarations/practices/typescript-expo/__snapshots__/package.json.declapract.integration.test.ts.snap +8 -0
  354. package/dist/.test/assets/expo-toolchain/declarations/practices/typescript-expo/__snapshots__/tsconfig.json.declapract.integration.test.ts.snap +19 -0
  355. package/dist/.test/assets/{expo-migration/declarations/practices/typescript-expo/best-practice → expo-toolchain/declarations/practices/typescript-expo}/package.json.declapract.integration.test.ts +15 -2
  356. package/dist/{practices/typescript-expo/best-practice → .test/assets/expo-toolchain/declarations/practices/typescript-expo}/tsconfig.json.declapract.integration.test.ts +13 -2
  357. package/dist/.test/assets/format/declarations/declapract.declare.yml +9 -0
  358. package/dist/.test/assets/format/declarations/practices/format/.declapract.integration.test.ts +131 -0
  359. package/dist/.test/assets/format/declarations/practices/format/__snapshots__/.declapract.integration.test.ts.snap +17 -0
  360. package/dist/.test/assets/format/declarations/practices/format/bad-practices/format-script/package.json.declapract.ts +26 -0
  361. package/dist/.test/assets/format/declarations/practices/format/bad-practices/prettier/.declapract.readme.md +6 -0
  362. package/dist/.test/assets/format/declarations/practices/format/bad-practices/prettier/.prettierignore +3 -0
  363. package/dist/.test/assets/format/declarations/practices/format/bad-practices/prettier/.prettierignore.declapract.ts +8 -0
  364. package/dist/.test/assets/format/declarations/practices/format/bad-practices/prettier/package.json +10 -0
  365. package/dist/.test/assets/format/declarations/practices/format/bad-practices/prettier/package.json.declapract.ts +35 -0
  366. package/dist/.test/assets/format/declarations/practices/format/bad-practices/prettier/prettier.config.js +10 -0
  367. package/dist/.test/assets/format/declarations/practices/format/bad-practices/prettier/prettier.config.js.declapract.ts +8 -0
  368. package/dist/.test/assets/format/declarations/practices/format/best-practice/package.json.declapract.ts +50 -0
  369. package/dist/.test/assets/format/declarations/practices/terraform-common/bad-practices/terraform-dir/.declapract.readme.md +8 -0
  370. package/dist/.test/assets/format/declarations/practices/terraform-common/bad-practices/terraform-dir/provision/terraform/<star><star>/<star>.declapract.ts +17 -0
  371. package/dist/.test/assets/format/declarations/practices/terraform-common/best-practice/.terraform-version +1 -0
  372. package/dist/.test/assets/format/declarations/practices/terraform-common/best-practice/package.json +6 -0
  373. package/dist/.test/assets/format/declarations/practices/terraform-common/best-practice/package.json.declapract.ts +3 -0
  374. package/dist/.test/assets/format/declarations/useCases.yml +13 -0
  375. package/dist/.test/assets/format/repo-with-terraform/declapract.use.yml +8 -0
  376. package/dist/.test/assets/format/repo-with-terraform/package.json +5 -0
  377. package/dist/.test/assets/format/repo-without-terraform/declapract.use.yml +6 -0
  378. package/dist/.test/assets/format/repo-without-terraform/package.json +5 -0
  379. package/dist/.test/assets/node-service/declarations/declapract.declare.yml +4 -0
  380. package/dist/.test/assets/node-service/declarations/practices/node-service/bad-practices/license/package.json.declapract.ts +22 -0
  381. package/dist/.test/assets/node-service/declarations/practices/node-service/bad-practices/simple-lambda-client/.declapract.readme.md +55 -0
  382. package/dist/.test/assets/node-service/declarations/practices/node-service/bad-practices/simple-lambda-client/package.json +5 -0
  383. package/dist/.test/assets/node-service/declarations/practices/node-service/bad-practices/simple-lambda-client/package.json.declapract.ts +27 -0
  384. package/dist/.test/assets/node-service/declarations/practices/node-service/bad-practices/simple-lambda-client/src/<star><star>/<star>.ts.declapract.ts +44 -0
  385. package/dist/.test/assets/node-service/declarations/practices/node-service/bad-practices/simple-lambda-handlers/.declapract.integration.test.ts +103 -0
  386. package/dist/.test/assets/node-service/declarations/practices/node-service/bad-practices/simple-lambda-handlers/.declapract.readme.md +60 -0
  387. package/dist/.test/assets/node-service/declarations/practices/node-service/bad-practices/simple-lambda-handlers/.test/assets/demo-repo-with-simple-lambda-handlers/declapract.use.yml +5 -0
  388. package/dist/.test/assets/node-service/declarations/practices/node-service/bad-practices/simple-lambda-handlers/.test/assets/demo-repo-with-simple-lambda-handlers/package.json +4 -0
  389. package/dist/.test/assets/node-service/declarations/practices/node-service/bad-practices/simple-lambda-handlers/.test/assets/demo-repo-with-simple-lambda-handlers/src/contract/handlers/getWidget.ts +13 -0
  390. package/dist/.test/assets/node-service/declarations/practices/node-service/bad-practices/simple-lambda-handlers/__snapshots__/.declapract.integration.test.ts.snap +44 -0
  391. package/dist/.test/assets/node-service/declarations/practices/node-service/bad-practices/simple-lambda-handlers/package.json +5 -0
  392. package/dist/.test/assets/node-service/declarations/practices/node-service/bad-practices/simple-lambda-handlers/package.json.declapract.ts +27 -0
  393. package/dist/.test/assets/node-service/declarations/practices/node-service/bad-practices/simple-lambda-handlers/src/<star><star>/<star>.ts.declapract.ts +130 -0
  394. package/dist/.test/assets/node-service/declarations/practices/node-service/best-practice/package.json +6 -0
  395. package/dist/.test/assets/node-service/declarations/practices/node-service/best-practice/package.json.declapract.ts +3 -0
  396. package/dist/.test/assets/node-service/declarations/useCases.yml +5 -0
  397. package/dist/.test/assets/pnpm/declarations/practices/pnpm/.declapract.integration.test.ts +163 -13
  398. package/dist/.test/assets/pnpm/declarations/practices/pnpm/.test/assets/repo-npm-to-pnpm/package.json +1 -1
  399. package/dist/.test/assets/pnpm/declarations/practices/pnpm/.test/assets/repo-npm-to-pnpm/pnpm-workspace.yaml +3 -0
  400. package/dist/.test/assets/pnpm/declarations/practices/pnpm/__snapshots__/.declapract.integration.test.ts.snap +9 -2
  401. package/dist/.test/assets/pnpm/declarations/practices/pnpm/bad-practices/inert-build-allowlist/pnpm-workspace.yaml.declapract.ts +59 -0
  402. package/dist/.test/assets/pnpm/declarations/practices/pnpm/best-practice/.declapract.readme.md +1 -1
  403. package/dist/.test/assets/pnpm/declarations/practices/pnpm/best-practice/package.json +1 -1
  404. package/dist/.test/assets/pnpm/declarations/practices/pnpm/best-practice/package.json.declapract.ts +4 -2
  405. package/dist/.test/assets/runtime-schemas/declarations/declapract.declare.yml +4 -0
  406. package/dist/.test/assets/runtime-schemas/declarations/practices/runtime-schemas/bad-practices/joi/.declapract.integration.test.ts +102 -0
  407. package/dist/.test/assets/runtime-schemas/declarations/practices/runtime-schemas/bad-practices/joi/.declapract.readme.md +3 -0
  408. package/dist/.test/assets/runtime-schemas/declarations/practices/runtime-schemas/bad-practices/joi/.test/assets/demo-repo-with-joi/declapract.use.yml +5 -0
  409. package/dist/.test/assets/runtime-schemas/declarations/practices/runtime-schemas/bad-practices/joi/.test/assets/demo-repo-with-joi/package.json +4 -0
  410. package/dist/.test/assets/runtime-schemas/declarations/practices/runtime-schemas/bad-practices/joi/.test/assets/demo-repo-with-joi/src/contract/schemas/widget.schema.ts +9 -0
  411. package/dist/.test/assets/runtime-schemas/declarations/practices/runtime-schemas/bad-practices/joi/__snapshots__/.declapract.integration.test.ts.snap +37 -0
  412. package/dist/.test/assets/runtime-schemas/declarations/practices/runtime-schemas/bad-practices/joi/package.json +5 -0
  413. package/dist/.test/assets/runtime-schemas/declarations/practices/runtime-schemas/bad-practices/joi/package.json.declapract.ts +23 -0
  414. package/dist/.test/assets/runtime-schemas/declarations/practices/runtime-schemas/bad-practices/joi/src/<star><star>/<star>.ts.declapract.ts +79 -0
  415. package/dist/.test/assets/runtime-schemas/declarations/practices/runtime-schemas/best-practice/package.json +5 -0
  416. package/dist/.test/assets/runtime-schemas/declarations/practices/runtime-schemas/best-practice/package.json.declapract.ts +3 -0
  417. package/dist/.test/assets/runtime-schemas/declarations/useCases.yml +5 -0
  418. package/dist/.test/assets/tests-service/declarations/declapract.declare.yml +10 -0
  419. package/dist/.test/assets/tests-service/declarations/practices/tests-service/.test/assets/demo-repo-service/declapract.use.yml +5 -0
  420. package/dist/.test/assets/tests-service/declarations/practices/tests-service/.test/assets/demo-repo-service/package.json +4 -0
  421. package/dist/.test/assets/tests-service/declarations/practices/tests-service/__snapshots__/package.json.declapract.integration.test.ts.snap +26 -0
  422. package/dist/.test/assets/tests-service/declarations/practices/tests-service/asFunctionNameFromTestFileName.ts +7 -0
  423. package/dist/.test/assets/tests-service/declarations/practices/tests-service/best-practice/.declapract.readme.md +68 -0
  424. package/dist/.test/assets/tests-service/declarations/practices/tests-service/best-practice/blackbox/<star><star>/<star>.acceptance.test.ts.declapract.ts +3 -0
  425. package/dist/.test/assets/tests-service/declarations/practices/tests-service/best-practice/blackbox/lambdas/<star>.acceptance.test.ts.declapract.ts +56 -0
  426. package/dist/.test/assets/tests-service/declarations/practices/tests-service/best-practice/package.json +8 -0
  427. package/dist/.test/assets/tests-service/declarations/practices/tests-service/best-practice/package.json.declapract.ts +101 -0
  428. package/dist/.test/assets/tests-service/declarations/practices/tests-service/best-practice/src/<star><star>/<star>.integration.test.ts.declapract.ts +3 -0
  429. package/dist/.test/assets/tests-service/declarations/practices/tests-service/best-practice/src/<star><star>/<star>.test.ts.declapract.ts +3 -0
  430. package/dist/.test/assets/tests-service/declarations/practices/tests-service/package.json.declapract.integration.test.ts +204 -0
  431. package/dist/.test/assets/tests-service/declarations/useCases.yml +9 -0
  432. package/dist/__snapshots__/ancientTargetPublished.declapract.integration.test.ts.snap +42 -0
  433. package/dist/__snapshots__/workflowCallerCalleeReconciliation.declapract.integration.test.ts.snap +450 -0
  434. package/dist/__snapshots__/workflowEnvDeploymentFalse.declapract.integration.test.ts.snap +36 -0
  435. package/dist/actionPins.declapract.integration.test.ts +3 -18
  436. package/dist/ancientTargetPublished.declapract.integration.test.ts +174 -0
  437. package/dist/bestPracticeTemplateParse.declapract.integration.test.ts +169 -0
  438. package/dist/parsePackageJSONAdoption.declapract.integration.test.ts +136 -0
  439. package/dist/practiceTestFileLocation.declapract.integration.test.ts +75 -0
  440. package/dist/practices/cache/.declapract.integration.test.ts +4 -4
  441. package/dist/practices/cache/.test/assets/repo-with-valid-cache-package/package.json +1 -1
  442. package/dist/practices/cache/best-practice/package.json +3 -3
  443. package/dist/practices/cicd-app-react-native-expo/.declapract.integration.test.ts +122 -22
  444. package/dist/practices/cicd-app-react-native-expo/__snapshots__/.declapract.integration.test.ts.snap +40 -29
  445. package/dist/practices/cicd-app-react-native-expo/best-practice/.github/workflows/.deploy-expo.yml +16 -6
  446. package/dist/practices/cicd-app-react-native-expo/best-practice/.github/workflows/deploy.yml +11 -11
  447. package/dist/practices/cicd-app-react-native-expo/best-practice/.github/workflows/test.yml +3 -5
  448. package/dist/practices/cicd-app-react-native-expo/best-practice/package.json +2 -2
  449. package/dist/practices/cicd-common/.declapract.integration.test.ts +25 -0
  450. package/dist/practices/cicd-common/__snapshots__/.declapract.integration.test.ts.snap +11 -23
  451. package/dist/practices/cicd-common/__snapshots__/declastruct-insync-grep.declapract.integration.test.ts.snap +3 -0
  452. package/dist/practices/cicd-common/best-practice/.github/workflows/.declastruct.yml +22 -8
  453. package/dist/practices/cicd-common/best-practice/.github/workflows/.test.yml +11 -23
  454. package/dist/practices/cicd-common/best-practice/.github/workflows/.test.yml.declapract.ts +12 -1
  455. package/dist/practices/cicd-common/best-practice/.github/workflows/report-slow-tests.sh +65 -0
  456. package/dist/practices/cicd-common/declastruct-insync-grep.declapract.integration.test.ts +49 -0
  457. package/dist/practices/cicd-common/report-slow-tests.play.declapract.integration.test.ts +144 -0
  458. package/dist/practices/cicd-package/best-practice/.github/workflows/provision.yml +2 -1
  459. package/dist/practices/cicd-service/.declapract.integration.test.ts +175 -0
  460. package/dist/practices/cicd-service/.test/assets/demo-repo-pre-stamped-nords/.github/workflows/provision.yml +110 -0
  461. package/dist/practices/cicd-service/.test/assets/demo-repo-pre-stamped-nords/declapract.use.nords.yml +20 -0
  462. package/dist/practices/cicd-service/.test/assets/demo-repo-pre-stamped-nords/declapract.use.rds.yml +20 -0
  463. package/dist/practices/cicd-service/.test/assets/demo-repo-pre-stamped-nords/package.json +4 -0
  464. package/dist/practices/cicd-service/.test/assets/demo-repo-service/declapract.use.nords.yml +20 -0
  465. package/dist/practices/cicd-service/.test/assets/demo-repo-service/declapract.use.rds.yml +20 -0
  466. package/dist/practices/cicd-service/.test/assets/demo-repo-service/package.json +4 -0
  467. package/dist/practices/cicd-service/__snapshots__/.declapract.integration.test.ts.snap +24 -0
  468. package/dist/practices/cicd-service/__snapshots__/acceptanceContempFleetGuard.declapract.integration.test.ts.snap +13 -0
  469. package/dist/practices/cicd-service/__snapshots__/insync-grep.declapract.integration.test.ts.snap +5 -0
  470. package/dist/practices/cicd-service/__snapshots__/provision.yml.declapract.integration.test.ts.snap +297 -0
  471. package/dist/practices/cicd-service/acceptanceContempFleetGuard.declapract.integration.test.ts +89 -0
  472. package/dist/practices/cicd-service/bad-practices/rds-jobs-in-non-rds-service/.declapract.integration.test.ts +153 -0
  473. package/dist/practices/cicd-service/bad-practices/rds-jobs-in-non-rds-service/.declapract.readme.md +38 -0
  474. package/dist/practices/cicd-service/bad-practices/rds-jobs-in-non-rds-service/.github/workflows/provision.yml.declapract.integration.test.ts +167 -0
  475. package/dist/practices/cicd-service/bad-practices/rds-jobs-in-non-rds-service/.github/workflows/provision.yml.declapract.ts +88 -0
  476. package/dist/practices/cicd-service/bad-practices/rds-jobs-in-non-rds-service/.test/assets/repo-non-rds/readme.md +9 -0
  477. package/dist/practices/cicd-service/bad-practices/rds-jobs-in-non-rds-service/.test/assets/repo-with-aws-resources-callee/provision/aws/resources.ts +5 -0
  478. package/dist/practices/cicd-service/bad-practices/rds-jobs-in-non-rds-service/.test/assets/repo-with-schema-callee/provision/schema/init.sql +5 -0
  479. package/dist/practices/cicd-service/bad-practices/rds-jobs-in-non-rds-service/__snapshots__/.declapract.integration.test.ts.snap +183 -0
  480. package/dist/practices/cicd-service/best-practice/.declapract.readme.md +18 -0
  481. package/dist/practices/cicd-service/best-practice/.github/workflows/.deploy-sls.yml +32 -11
  482. package/dist/practices/cicd-service/best-practice/.github/workflows/.sql-schema-control.yml +20 -10
  483. package/dist/practices/cicd-service/best-practice/.github/workflows/.terraform.yml +14 -4
  484. package/dist/practices/cicd-service/best-practice/.github/workflows/deploy.yml +17 -9
  485. package/dist/practices/cicd-service/best-practice/.github/workflows/provision.yml +15 -10
  486. package/dist/practices/cicd-service/best-practice/.github/workflows/provision.yml.declapract.ts +74 -0
  487. package/dist/practices/cicd-service/best-practice/package.json +3 -3
  488. package/dist/practices/cicd-service/insync-grep.declapract.integration.test.ts +76 -0
  489. package/dist/practices/cicd-service/provision.yml.declapract.integration.test.ts +182 -0
  490. package/dist/practices/commands/best-practice/package.json +2 -2
  491. package/dist/practices/commands/best-practice/src/contract/commands/sayHello.ts +3 -2
  492. package/dist/practices/config/.declapract.integration.test.ts +116 -0
  493. package/dist/practices/config/.test/assets/demo-repo-with-dev-config/config/dev.json +17 -0
  494. package/dist/practices/config/.test/assets/demo-repo-with-dev-config/declapract.declare.yml +4 -0
  495. package/dist/practices/config/.test/assets/demo-repo-with-dev-config/declapract.use.yml +9 -0
  496. package/dist/practices/config/.test/assets/demo-repo-with-dev-config/package.json +4 -0
  497. package/dist/practices/config/__snapshots__/.declapract.integration.test.ts.snap +43 -0
  498. package/dist/practices/config/bad-practices/divergent-config-shapes/config/prep.json.declapract.ts +3 -3
  499. package/dist/practices/config/bad-practices/divergent-config-shapes/config/prod.json.declapract.ts +3 -3
  500. package/dist/practices/config/bad-practices/old-dev-config-location/config/dev.json.declapract.ts +10 -12
  501. package/dist/practices/config/best-practice/package.json +2 -2
  502. package/dist/practices/config/best-practice/src/utils/config/getConfig.ts +24 -5
  503. package/dist/practices/config/best-practice/src/utils/config/getOneCacheDirectory.ts +33 -0
  504. package/dist/practices/config/best-practice/src/utils/config/getOneProjectBucket.ts +22 -0
  505. package/dist/practices/config/best-practice/src/utils/environment.ts +9 -3
  506. package/dist/practices/config/best-practice/src/utils/environment.ts.declapract.ts +8 -0
  507. package/dist/practices/config/no-hand-written-config-type.declapract.integration.test.ts +64 -0
  508. package/dist/practices/conventional-commits/__snapshots__/commitlint-body-max-line.declapract.integration.test.ts.snap +3 -0
  509. package/dist/practices/conventional-commits/best-practice/commitlint.config.js +5 -0
  510. package/dist/practices/conventional-commits/best-practice/package.json +1 -1
  511. package/dist/practices/conventional-commits/commitlint-body-max-line.declapract.integration.test.ts +49 -0
  512. package/dist/practices/domain/.declapract.integration.test.ts +115 -0
  513. package/dist/{.test/assets/expo-migration/declarations/practices/domain/bad-practices/schematic-joi-model/src/domain → practices/domain/bad-practices/schematic-joi-model/src/domain.objects}/<star><star>/<star>.ts.declapract.ts +4 -1
  514. package/dist/practices/domain/best-practice/package.json +2 -2
  515. package/dist/practices/domain/best-practice/src/domain.objects/index.ts.declapract.ts +12 -0
  516. package/dist/practices/environments/.declapract.integration.test.ts +136 -0
  517. package/dist/practices/environments/__snapshots__/.declapract.integration.test.ts.snap +55 -0
  518. package/dist/practices/environments/bad-practices/old-dev-scripts/package.json.declapract.ts +6 -4
  519. package/dist/practices/environments/bad-practices/old-stage-enum/.declapract.integration.test.ts +133 -0
  520. package/dist/practices/environments/bad-practices/old-stage-enum/.test/assets/demo-repo-with-stage-enum/declapract.use.yml +8 -0
  521. package/dist/practices/environments/bad-practices/old-stage-enum/.test/assets/demo-repo-with-stage-enum/package.json +4 -0
  522. package/dist/practices/environments/bad-practices/old-stage-enum/.test/assets/demo-repo-with-stage-enum/src/logic/getDeployTarget.ts +15 -0
  523. package/dist/practices/environments/bad-practices/old-stage-enum/__snapshots__/.declapract.integration.test.ts.snap +40 -0
  524. package/dist/practices/environments/bad-practices/old-stage-enum/src/<star><star>/<star>.ts.declapract.ts +291 -24
  525. package/dist/practices/environments/best-practice/.declapract.readme.md +44 -11
  526. package/dist/practices/environments/best-practice/src/access/sdks/sdkAwsLambdaEnvAccessAncient.ts +32 -0
  527. package/dist/practices/environments/best-practice/src/access/sdks/sdkAwsLambdaEnvAccessContemp.ts +14 -0
  528. package/dist/practices/environments/best-practice/src/utils/environment.ts +3 -2
  529. package/dist/practices/errors/.declapract.integration.test.ts +121 -0
  530. package/dist/practices/errors/bad-practices/own-implementation/src/<star><star>/UnexpectedCodePathError.ts.declapract.ts +8 -0
  531. package/dist/practices/errors/best-practice/package.json +1 -1
  532. package/dist/practices/format/.declapract.integration.test.ts +131 -0
  533. package/dist/practices/format/__snapshots__/.declapract.integration.test.ts.snap +17 -0
  534. package/dist/practices/format/bad-practices/prettier/prettier.config.js.declapract.ts +1 -1
  535. package/dist/practices/format/best-practice/package.json.declapract.ts +36 -18
  536. package/dist/practices/git/.declapract.integration.test.ts +57 -6
  537. package/dist/practices/git/__snapshots__/.declapract.integration.test.ts.snap +2 -0
  538. package/dist/practices/git/best-practice/.gitattributes.declapract.ts +50 -37
  539. package/dist/practices/git/best-practice/.gitignore.declapract.ts +8 -0
  540. package/dist/practices/husky/__snapshots__/check.timestamps.play.declapract.integration.test.ts.snap +7 -0
  541. package/dist/practices/husky/best-practice/.husky/check.timestamps.sh +11 -2
  542. package/dist/practices/husky/check.timestamps.play.declapract.integration.test.ts +65 -0
  543. package/dist/practices/lint/__snapshots__/dpdmrc-exclude-policy.declapract.integration.test.ts.snap +3 -0
  544. package/dist/practices/lint/bad-practices/depcheck-denylisted-ignores/.depcheckrc.yml.declapract.ts +4 -0
  545. package/dist/practices/lint/best-practice/.depcheckrc.yml.declapract.ts +10 -9
  546. package/dist/practices/lint/best-practice/.dpdmrc.yaml +10 -6
  547. package/dist/practices/lint/dpdmrc-exclude-policy.declapract.integration.test.ts +50 -0
  548. package/dist/practices/logs/.declapract.integration.test.ts +100 -0
  549. package/dist/practices/logs/__snapshots__/.declapract.integration.test.ts.snap +33 -0
  550. package/dist/practices/logs/bad-practices/leveled-term/.test/assets/demo-repo-with-leveled-term/declapract.declare.yml +4 -0
  551. package/dist/practices/logs/bad-practices/leveled-term/.test/assets/demo-repo-with-leveled-term/declapract.use.yml +2 -0
  552. package/dist/practices/logs/bad-practices/leveled-term/.test/assets/demo-repo-with-leveled-term/package.json +12 -0
  553. package/dist/practices/logs/bad-practices/leveled-term/package.json.declapract.ts +56 -12
  554. package/dist/practices/node/bad-practices/self-deps-not-link/.declapract.integration.test.ts +102 -0
  555. package/dist/practices/node/bad-practices/self-deps-not-link/.test/assets/demo-repo-with-self-deps/declapract.declare.yml +4 -0
  556. package/dist/practices/node/bad-practices/self-deps-not-link/.test/assets/demo-repo-with-self-deps/declapract.use.yml +8 -0
  557. package/dist/practices/node/bad-practices/self-deps-not-link/.test/assets/demo-repo-with-self-deps/package.json +15 -0
  558. package/dist/practices/node/bad-practices/self-deps-not-link/__snapshots__/.declapract.integration.test.ts.snap +46 -0
  559. package/dist/practices/node/bad-practices/self-deps-not-link/package.json.declapract.ts +22 -29
  560. package/dist/practices/node/best-practice/.npmrc.declapract.ts +5 -1
  561. package/dist/practices/node/best-practice/package.json +1 -1
  562. package/dist/practices/node-service/bad-practices/simple-lambda-handlers/.declapract.integration.test.ts +103 -0
  563. package/dist/practices/node-service/bad-practices/simple-lambda-handlers/.declapract.readme.md +8 -0
  564. package/dist/practices/node-service/bad-practices/simple-lambda-handlers/.test/assets/demo-repo-with-simple-lambda-handlers/declapract.use.yml +5 -0
  565. package/dist/practices/node-service/bad-practices/simple-lambda-handlers/.test/assets/demo-repo-with-simple-lambda-handlers/package.json +4 -0
  566. package/dist/practices/node-service/bad-practices/simple-lambda-handlers/.test/assets/demo-repo-with-simple-lambda-handlers/src/contract/handlers/getWidget.ts +13 -0
  567. package/dist/practices/node-service/bad-practices/simple-lambda-handlers/__snapshots__/.declapract.integration.test.ts.snap +44 -0
  568. package/dist/practices/node-service/bad-practices/simple-lambda-handlers/src/<star><star>/<star>.ts.declapract.ts +90 -10
  569. package/dist/practices/node-service/best-practice/package.json +1 -1
  570. package/dist/practices/package-json-order/best-practice/package.json.declapract.ts +7 -1
  571. package/dist/practices/persist-with-dynamodb/.declapract.integration.test.ts +92 -0
  572. package/dist/practices/persist-with-dynamodb/.test/assets/demo-repo-with-divergent-jest-env/declapract.declare.yml +4 -0
  573. package/dist/practices/persist-with-dynamodb/.test/assets/demo-repo-with-divergent-jest-env/declapract.use.yml +2 -0
  574. package/dist/practices/persist-with-dynamodb/.test/assets/demo-repo-with-divergent-jest-env/jest.integration.env.ts +4 -0
  575. package/dist/practices/persist-with-dynamodb/.test/assets/demo-repo-with-divergent-jest-env/package.json +4 -0
  576. package/dist/practices/persist-with-dynamodb/__snapshots__/.declapract.integration.test.ts.snap +20 -0
  577. package/dist/practices/persist-with-dynamodb/best-practice/jest.integration.env.ts +3 -3
  578. package/dist/practices/persist-with-dynamodb/best-practice/package.json +2 -2
  579. package/dist/practices/persist-with-rds/.declapract.integration.test.ts +224 -0
  580. package/dist/practices/persist-with-rds/.extensions.sql.declapract.integration.test.ts +38 -0
  581. package/dist/practices/persist-with-rds/.test/assets/demo-repo-with-dev-config/config/dev.json +18 -0
  582. package/dist/practices/persist-with-rds/.test/assets/demo-repo-with-dev-config/declapract.declare.yml +4 -0
  583. package/dist/practices/persist-with-rds/.test/assets/demo-repo-with-dev-config/declapract.use.yml +18 -0
  584. package/dist/practices/persist-with-rds/.test/assets/demo-repo-with-dev-config/package.json +4 -0
  585. package/dist/practices/persist-with-rds/__snapshots__/.declapract.integration.test.ts.snap +45 -0
  586. package/dist/practices/persist-with-rds/__snapshots__/.extensions.sql.declapract.integration.test.ts.snap +42 -0
  587. package/dist/practices/persist-with-rds/__snapshots__/deploy-database-gerunds.declapract.integration.test.ts.snap +102 -0
  588. package/dist/practices/persist-with-rds/__snapshots__/provision-testdb-access.declapract.integration.test.ts.snap +3 -0
  589. package/dist/practices/persist-with-rds/__snapshots__/ssm-cicd-param-names.declapract.integration.test.ts.snap +10 -0
  590. package/dist/practices/persist-with-rds/__snapshots__/testdb-preflight-failloud.declapract.integration.test.ts.snap +30 -0
  591. package/dist/practices/persist-with-rds/bad-practices/old-dev-config-location/config/dev.json.declapract.ts +22 -8
  592. package/dist/practices/persist-with-rds/best-practice/.declapract.readme.md +32 -0
  593. package/dist/practices/persist-with-rds/best-practice/codegen.sql.dao.yml +1 -1
  594. package/dist/practices/persist-with-rds/best-practice/package.json +5 -5
  595. package/dist/practices/persist-with-rds/best-practice/provision/aws/readme.md +9 -6
  596. package/dist/practices/persist-with-rds/best-practice/provision/aws/resources.parameters.ts +38 -14
  597. package/dist/practices/persist-with-rds/best-practice/provision/aws/resources.ts +6 -3
  598. package/dist/practices/persist-with-rds/best-practice/provision/docker/testdb/wait-for-postgres.sh +13 -3
  599. package/dist/practices/persist-with-rds/best-practice/provision/schema/deploy.database.sh +27 -22
  600. package/dist/practices/persist-with-rds/best-practice/src/utils/config/config.schema.ts +13 -6
  601. package/dist/practices/persist-with-rds/best-practice/src/utils/database/getOneDatabaseConnection.integration.test.ts +10 -0
  602. package/dist/practices/persist-with-rds/best-practice/src/utils/database/getOneDatabaseConnection.ts +90 -0
  603. package/dist/practices/persist-with-rds/best-practice/src/utils/database/withDatabaseContext.ts +12 -4
  604. package/dist/practices/persist-with-rds/best-practice/src/utils/database/withDatabaseTransaction.ts +16 -4
  605. package/dist/practices/persist-with-rds/deploy-database-gerunds.declapract.integration.test.ts +57 -0
  606. package/dist/practices/persist-with-rds/empty-template-declares-zero-clusters.declapract.integration.test.ts +71 -0
  607. package/dist/practices/persist-with-rds/provision-testdb-access.declapract.integration.test.ts +50 -0
  608. package/dist/practices/persist-with-rds/ssm-cicd-param-names.declapract.integration.test.ts +73 -0
  609. package/dist/practices/persist-with-rds/testdb-preflight-failloud.declapract.integration.test.ts +83 -0
  610. package/dist/practices/pnpm/.declapract.integration.test.ts +163 -13
  611. package/dist/practices/pnpm/.test/assets/repo-npm-to-pnpm/package.json +1 -1
  612. package/dist/practices/pnpm/.test/assets/repo-npm-to-pnpm/pnpm-workspace.yaml +3 -0
  613. package/dist/practices/pnpm/__snapshots__/.declapract.integration.test.ts.snap +9 -2
  614. package/dist/practices/pnpm/bad-practices/inert-build-allowlist/pnpm-workspace.yaml.declapract.ts +59 -0
  615. package/dist/practices/pnpm/best-practice/.declapract.readme.md +1 -1
  616. package/dist/practices/pnpm/best-practice/package.json +1 -1
  617. package/dist/practices/pnpm/best-practice/package.json.declapract.ts +4 -2
  618. package/dist/practices/provision-github/best-practice/package.json +2 -2
  619. package/dist/practices/provision-github/best-practice/provision/github.repo/resources.ts +16 -0
  620. package/dist/practices/rhachet/.declapract.integration.test.ts +98 -0
  621. package/dist/practices/rhachet/.test/assets/demo-repo-with-consumer-boot/.agent/repo=.this/role=any/boot.yml +7 -0
  622. package/dist/practices/rhachet/.test/assets/demo-repo-with-consumer-boot/declapract.declare.yml +4 -0
  623. package/dist/practices/rhachet/.test/assets/demo-repo-with-consumer-boot/declapract.use.yml +2 -0
  624. package/dist/practices/rhachet/.test/assets/demo-repo-with-consumer-boot/package.json +4 -0
  625. package/dist/practices/rhachet/__snapshots__/.declapract.integration.test.ts.snap +45 -0
  626. package/dist/practices/rhachet/__snapshots__/boot-refs-glossary.declapract.integration.test.ts.snap +6 -0
  627. package/dist/practices/rhachet/__snapshots__/boot-yml-findsert.declapract.integration.test.ts.snap +27 -0
  628. package/dist/practices/rhachet/bad-practices/prod-deps/.declapract.readme.md +6 -2
  629. package/dist/practices/rhachet/bad-practices/prod-deps/.test/assets/demo-repo-with-rhachet-prod-deps/declapract.declare.yml +4 -0
  630. package/dist/practices/rhachet/bad-practices/prod-deps/.test/assets/demo-repo-with-rhachet-prod-deps/declapract.use.yml +2 -0
  631. package/dist/practices/rhachet/bad-practices/prod-deps/.test/assets/demo-repo-with-rhachet-prod-deps/package.json +12 -0
  632. package/dist/practices/rhachet/bad-practices/prod-deps/package.json.declapract.ts +58 -17
  633. package/dist/practices/rhachet/best-practice/.agent/repo=.this/role=any/boot.yml +46 -0
  634. package/dist/practices/rhachet/best-practice/.agent/repo=.this/role=any/boot.yml.declapract.ts +165 -0
  635. package/dist/practices/rhachet/best-practice/.gitignore.declapract.ts +18 -5
  636. package/dist/practices/rhachet/best-practice/package.json +8 -8
  637. package/dist/practices/rhachet/boot-refs-glossary.declapract.integration.test.ts +89 -0
  638. package/dist/practices/rhachet/boot-yml-findsert.declapract.integration.test.ts +145 -0
  639. package/dist/practices/runtime-schemas/bad-practices/joi/.declapract.integration.test.ts +102 -0
  640. package/dist/practices/runtime-schemas/bad-practices/joi/.test/assets/demo-repo-with-joi/declapract.use.yml +5 -0
  641. package/dist/practices/runtime-schemas/bad-practices/joi/.test/assets/demo-repo-with-joi/package.json +4 -0
  642. package/dist/practices/runtime-schemas/bad-practices/joi/.test/assets/demo-repo-with-joi/src/contract/schemas/widget.schema.ts +9 -0
  643. package/dist/practices/runtime-schemas/bad-practices/joi/__snapshots__/.declapract.integration.test.ts.snap +37 -0
  644. package/dist/practices/runtime-schemas/bad-practices/joi/src/<star><star>/<star>.ts.declapract.ts +32 -3
  645. package/dist/practices/serverless/.declapract.integration.test.ts +230 -0
  646. package/dist/practices/serverless/.test/assets/demo-repo-with-serverless/declapract.declare.yml +4 -0
  647. package/dist/practices/serverless/.test/assets/demo-repo-with-serverless/declapract.use.yml +8 -0
  648. package/dist/practices/serverless/.test/assets/demo-repo-with-serverless/package.json +4 -0
  649. package/dist/practices/serverless/.test/assets/demo-repo-with-serverless/serverless.yml +8 -0
  650. package/dist/practices/serverless/__snapshots__/.declapract.integration.test.ts.snap +43 -0
  651. package/dist/practices/serverless/__snapshots__/cache-grant-stage-globbed.declapract.integration.test.ts.snap +3 -0
  652. package/dist/practices/serverless/__snapshots__/deployment-bucket-account-scoped.declapract.integration.test.ts.snap +9 -0
  653. package/dist/practices/serverless/__snapshots__/divergentStageGuard.declapract.integration.test.ts.snap +15 -0
  654. package/dist/practices/serverless/__snapshots__/serverless.yml.declapract.integration.test.ts.snap +165 -0
  655. package/dist/practices/serverless/best-practice/.declapract.readme.md +111 -0
  656. package/dist/practices/serverless/best-practice/package.json +7 -5
  657. package/dist/practices/serverless/best-practice/serverless.yml +14 -6
  658. package/dist/practices/serverless/best-practice/serverless.yml.declapract.ts +609 -64
  659. package/dist/practices/serverless/cache-grant-stage-globbed.declapract.integration.test.ts +69 -0
  660. package/dist/practices/serverless/deployment-bucket-account-scoped.declapract.integration.test.ts +78 -0
  661. package/dist/practices/serverless/divergentStageGuard.declapract.integration.test.ts +280 -0
  662. package/dist/practices/serverless/serverless.yml.declapract.integration.test.ts +1285 -0
  663. package/dist/practices/terraform-aws/best-practice/provision/aws/environments/prep/main.tf +1 -1
  664. package/dist/practices/tests-any/__snapshots__/changedsince-origin-main.declapract.integration.test.ts.snap +8 -0
  665. package/dist/practices/tests-any/autoprune-hooks.declapract.integration.test.ts +104 -0
  666. package/dist/practices/tests-any/bad-practices/old-acceptance-import-paths/.declapract.readme.md +2 -2
  667. package/dist/practices/tests-any/bad-practices/old-acceptance-test-utils/blackbox/lambdas/<star>.ts.declapract.ts +9 -9
  668. package/dist/practices/tests-any/best-practice/package.json +3 -3
  669. package/dist/practices/tests-any/changedsince-origin-main.declapract.integration.test.ts +58 -0
  670. package/dist/practices/tests-any/{best-practice/package.json.shell-flags.declapract.integration.test.ts → package.json.shell-flags.declapract.integration.test.ts} +26 -16
  671. package/dist/practices/tests-expo/.declapract.integration.test.ts +7 -3
  672. package/dist/practices/tests-expo/.test/assets/repo-expo-greenfield/package.json +5 -1
  673. package/dist/practices/tests-expo/__snapshots__/.declapract.integration.test.ts.snap +17 -8
  674. package/dist/practices/tests-expo/__snapshots__/package.json.declapract.integration.test.ts.snap +60 -0
  675. package/dist/practices/tests-expo/best-practice/jest.acceptance.config.ts +5 -0
  676. package/dist/practices/tests-expo/best-practice/jest.integration.config.ts +5 -0
  677. package/dist/practices/tests-expo/best-practice/jest.integration.env.ts +5 -1
  678. package/dist/practices/tests-expo/best-practice/jest.unit.config.ts +5 -0
  679. package/dist/practices/tests-expo/best-practice/jest.unit.env.ts +6 -1
  680. package/dist/practices/tests-expo/best-practice/package.json.declapract.ts +190 -13
  681. package/dist/practices/tests-expo/package.json.declapract.integration.test.ts +94 -0
  682. package/dist/practices/tests-node/__snapshots__/livedb-wake-branches.declapract.integration.test.ts.snap +6 -0
  683. package/dist/practices/tests-node/best-practice/jest.acceptance.config.ts +8 -0
  684. package/dist/practices/tests-node/best-practice/jest.acceptance.env.ts +16 -26
  685. package/dist/practices/tests-node/best-practice/jest.acceptance.prepare.ts +36 -0
  686. package/dist/practices/tests-node/best-practice/jest.integration.config.ts +8 -0
  687. package/dist/practices/tests-node/best-practice/jest.integration.env.db.ts +90 -0
  688. package/dist/practices/tests-node/best-practice/jest.integration.env.ts +26 -74
  689. package/dist/practices/tests-node/best-practice/jest.integration.prepare.ts +33 -0
  690. package/dist/practices/tests-node/best-practice/jest.unit.config.ts +7 -0
  691. package/dist/practices/tests-node/best-practice/jest.unit.env.ts +11 -4
  692. package/dist/practices/tests-node/best-practice/jest.unit.env.ts.declapract.ts +3 -1
  693. package/dist/practices/tests-node/best-practice/src/.test/useKeyrack.ts +211 -0
  694. package/dist/practices/tests-node/best-practice/src/.test/useWakeOfLivedb.ts +181 -0
  695. package/dist/practices/tests-node/best-practice/src/.test/useWakeOfTestdb.ts +71 -0
  696. package/dist/practices/tests-node/livedb-wake-branches.declapract.integration.test.ts +227 -0
  697. package/dist/practices/tests-node/livedb-wake-prepare.declapract.integration.test.ts +112 -0
  698. package/dist/practices/tests-node/testdb-preflight-branches.declapract.integration.test.ts +203 -0
  699. package/dist/practices/tests-node/testdb-preflight-env.declapract.integration.test.ts +65 -0
  700. package/dist/practices/tests-service/.test/assets/demo-repo-service/declapract.use.yml +5 -0
  701. package/dist/practices/tests-service/.test/assets/demo-repo-service/package.json +4 -0
  702. package/dist/practices/tests-service/__snapshots__/package.json.declapract.integration.test.ts.snap +26 -0
  703. package/dist/practices/tests-service/asFunctionNameFromTestFileName.ts +7 -0
  704. package/dist/practices/tests-service/best-practice/.declapract.readme.md +68 -0
  705. package/dist/practices/tests-service/best-practice/blackbox/lambdas/<star>.acceptance.test.ts.declapract.ts +33 -8
  706. package/dist/practices/tests-service/best-practice/package.json +4 -1
  707. package/dist/practices/tests-service/best-practice/package.json.declapract.ts +99 -1
  708. package/dist/practices/tests-service/package.json.declapract.integration.test.ts +204 -0
  709. package/dist/practices/typescript-expo/__snapshots__/package.json.declapract.integration.test.ts.snap +8 -0
  710. package/dist/practices/typescript-expo/__snapshots__/tsconfig.json.declapract.integration.test.ts.snap +19 -0
  711. package/dist/practices/typescript-expo/{best-practice/package.json.declapract.integration.test.ts → package.json.declapract.integration.test.ts} +15 -2
  712. package/dist/{.test/assets/expo-migration/declarations/practices/typescript-expo/best-practice → practices/typescript-expo}/tsconfig.json.declapract.integration.test.ts +13 -2
  713. package/dist/practices/typescript-node/best-practice/package.json.declapract.ts +3 -1
  714. package/dist/practices/uuid/best-practice/package.json +1 -1
  715. package/dist/stageAccessBridge.declapract.integration.test.ts +163 -0
  716. package/dist/utils/asPackageJSON.ts +57 -0
  717. package/dist/utils/asPrepConfigPath.ts +12 -0
  718. package/dist/utils/getAllPathsUnderDir.ts +45 -0
  719. package/dist/utils/getAllPracticesForUsecase.ts +35 -9
  720. package/dist/utils/migrateDevConfigToPrep.ts +47 -0
  721. package/dist/utils/readFile.ts +2 -2
  722. package/dist/workflowCallerCalleeReconciliation.declapract.integration.test.ts +319 -0
  723. package/dist/workflowEnvDeploymentFalse.declapract.integration.test.ts +173 -0
  724. package/package.json +10 -9
  725. package/dist/.test/assets/expo-fullusecase/declarations/practices/domain/best-practice/src/domain/objects/index.ts.declapract.ts +0 -4
  726. package/dist/.test/assets/expo-fullusecase/declarations/practices/tests-expo/best-practice/package.json +0 -9
  727. package/dist/.test/assets/expo-migration/declarations/practices/domain/best-practice/src/domain/objects/index.ts.declapract.ts +0 -4
  728. package/dist/.test/assets/expo-migration/declarations/practices/tests-expo/best-practice/package.json +0 -9
  729. package/dist/.test/assets/expo-toolchain/declarations/practices/tests-expo/best-practice/package.json +0 -9
  730. package/dist/practices/config/best-practice/src/utils/config/Config.ts +0 -10
  731. package/dist/practices/config/best-practice/src/utils/config/Config.ts.declapract.ts +0 -16
  732. package/dist/practices/config/best-practice/src/utils/config/getCacheDirectory.ts +0 -42
  733. package/dist/practices/domain/best-practice/src/domain/objects/index.ts.declapract.ts +0 -4
  734. package/dist/practices/logs/bad-practices/leveled-term/package.json +0 -5
  735. package/dist/practices/persist-with-rds/best-practice/src/utils/config/Config.ts +0 -26
  736. package/dist/practices/persist-with-rds/best-practice/src/utils/config/Config.ts.declapract.ts +0 -39
  737. package/dist/practices/persist-with-rds/best-practice/src/utils/config/config.schema.ts.declapract.ts +0 -49
  738. package/dist/practices/persist-with-rds/best-practice/src/utils/config/getConfig.ts +0 -2
  739. package/dist/practices/tests-expo/best-practice/package.json +0 -9
  740. package/dist/practices/tests-service/defineFunctionNameFromTestFileName.ts +0 -11
  741. /package/dist/.test/assets/{expo-fullusecase/declarations/practices/errors/bad-practices/own-implementation/src/utils/errors/UnexpectedCodePathError.ts.declapract.ts → cicd-service/declarations/practices/cicd-service/bad-practices/old-names/.github/workflows/deploy-dev-on-main.yml.declapract.ts} +0 -0
  742. /package/dist/{practices/errors/bad-practices/own-implementation/src/utils/errors/UnexpectedCodePathError.ts.declapract.ts → .test/assets/cicd-service/declarations/practices/cicd-service/bad-practices/old-names/.github/workflows/deploy-prod-on-tag.yml.declapract.ts} +0 -0
  743. /package/dist/{practices/persist-with-rds/best-practice/src/utils/config/getConfig.ts.declapract.ts → .test/assets/cicd-service/declarations/practices/cicd-service/bad-practices/old-names/.github/workflows/deploy_dev_on_main.yml.declapract.ts} +0 -0
  744. /package/dist/{practices/persist-with-dynamodb/best-practice/jest.integration.env.ts.declapract.ts → .test/assets/cicd-service/declarations/practices/cicd-service/best-practice/package.json.declapract.ts} +0 -0
  745. /package/dist/.test/assets/expo/declarations/practices/node/{best-practice/.npmrc.declapract.integration.test.ts → .npmrc.declapract.integration.test.ts} +0 -0
  746. /package/dist/.test/assets/expo/declarations/practices/node/{best-practice/__snapshots__ → __snapshots__}/.npmrc.declapract.integration.test.ts.snap +0 -0
  747. /package/dist/.test/assets/expo-fullusecase/declarations/practices/node/{best-practice/.npmrc.declapract.integration.test.ts → .npmrc.declapract.integration.test.ts} +0 -0
  748. /package/dist/.test/assets/expo-fullusecase/declarations/practices/node/{best-practice/__snapshots__ → __snapshots__}/.npmrc.declapract.integration.test.ts.snap +0 -0
  749. /package/dist/.test/assets/expo-migration/declarations/practices/node/{best-practice/.npmrc.declapract.integration.test.ts → .npmrc.declapract.integration.test.ts} +0 -0
  750. /package/dist/.test/assets/expo-migration/declarations/practices/node/{best-practice/__snapshots__ → __snapshots__}/.npmrc.declapract.integration.test.ts.snap +0 -0
  751. /package/dist/practices/node/{best-practice/.npmrc.declapract.integration.test.ts → .npmrc.declapract.integration.test.ts} +0 -0
  752. /package/dist/practices/node/{best-practice/__snapshots__ → __snapshots__}/.npmrc.declapract.integration.test.ts.snap +0 -0
@@ -0,0 +1,224 @@
1
+ import fs from 'fs/promises';
2
+ import path from 'node:path';
3
+
4
+ import { executeApply } from 'declapract';
5
+ import { genTempDir, given, then, useThen, when } from 'test-fns';
6
+
7
+ /**
8
+ * .what = end-to-end proof of the persist-with-rds `old-dev-config-location` relocate +
9
+ * tier-migrate, run through the REAL declapract apply pipeline against a genTempDir
10
+ * clone of a consumer repo (the row-4 clamp, rds declarer).
11
+ * .why = the config declarer has its own pipeline test; per
12
+ * `rule.require.declapract-integration-tests` EACH declarer that relocates a file AND
13
+ * transforms blocks owes its own end-to-end test — a unit test of the exported `fix`
14
+ * never exercises the glob→file match or the `relativeFilePath` rewrite. the rds
15
+ * declarer adds one transform the config twin lacks (`__CHANG3_ME__` → aws-param), so
16
+ * it needs its own clamp rather than a claim that the config test covers it.
17
+ * .teeth = the input holds `"access": "dev"` (unambiguous → migrated to `prep`) plus four `.dev`
18
+ * hosts the util runs on in a CONSUMER's real config — a `://` URL `https://auth.myapp.dev`,
19
+ * a mid-dotted `bastion.dev.example.com`, a terminal `aws.ssmproxy.mydb.dev`, and a FOREIGN
20
+ * public host `api.dev.paypal.com` (paypal's own label). a `.dev` label is axis-ambiguous
21
+ * WHEREVER it sits, so per guard #3 EVERY host is preserved byte-for-byte — the after-state
22
+ * proves all four survive, that none flips to `.prep`, and that NO `@declapract:review`
23
+ * bytes ever enter the config. it also proves the rds-only `__CHANG3_ME__` → aws-param
24
+ * transform (the one the config twin lacks) plus the relocation.
25
+ */
26
+ describe('persist-with-rds — old-dev-config-location relocate + tier-migrate (row-4 clamp)', () => {
27
+ given('[case1] an rds repo with a config/dev.json to migrate', () => {
28
+ const tempDir = genTempDir({
29
+ slug: 'declapract-persist-with-rds-old-dev-config-location',
30
+ clone: './src/practices/persist-with-rds/.test/assets/demo-repo-with-dev-config',
31
+ symlink: [{ at: 'src', to: 'src' }],
32
+ });
33
+
34
+ const devPath = 'config/dev.json';
35
+ const prepPath = 'config/prep.json';
36
+ const read = (relativePath: string) =>
37
+ fs.readFile(path.join(tempDir, relativePath), 'utf-8');
38
+ const exists = async (relativePath: string): Promise<boolean> =>
39
+ fs
40
+ .access(path.join(tempDir, relativePath))
41
+ .then(() => true)
42
+ .catch(() => false);
43
+ const applyMigrate = () =>
44
+ executeApply({
45
+ config: path.join(tempDir, 'declapract.use.yml'),
46
+ practice: 'persist-with-rds',
47
+ file: devPath,
48
+ });
49
+
50
+ when('[t0] the migration input (before any fix)', () => {
51
+ then('config/dev.json holds the dev tier + the placeholder + matches snapshot', async () => {
52
+ const before = await read(devPath);
53
+ expect(before).toContain('"access": "dev"');
54
+ expect(before).toContain('"__CHANG3_ME__"');
55
+ expect(before).toMatchSnapshot('config/dev.json — before');
56
+ });
57
+ });
58
+
59
+ when('[t1] the relocate + migrate fix is applied', () => {
60
+ useThen('migrate the dev config', async () => applyMigrate());
61
+
62
+ then(
63
+ 'config/prep.json now holds the migrated content + config/dev.json is gone + matches snapshot',
64
+ async () => {
65
+ // the relocation landed: the new path exists, the old path is unlinked
66
+ expect(await exists(prepPath)).toBe(true);
67
+ expect(await exists(devPath)).toBe(false);
68
+
69
+ const after = await read(prepPath);
70
+ // the access itself is the one unambiguous token → migrated
71
+ expect(after).toContain('"access": "prep"');
72
+ expect(after).not.toContain('"access": "dev"');
73
+ // EVERY host survives byte-for-byte — a `.dev` label is axis-ambiguous WHEREVER it sits,
74
+ // so per guard #3 the util rewrites NO host at all.
75
+ expect(after).toContain('bastion.dev.example.com');
76
+ expect(after).toContain('aws.ssmproxy.mydb.dev');
77
+ expect(after).toContain('https://auth.myapp.dev');
78
+ // the FOREIGN public host is the decisive corruption case: teeth — the prior mid-dotted
79
+ // rewrite turned this into `api.prep.paypal.com`, a silent public-endpoint corruption.
80
+ expect(after).toContain('api.dev.paypal.com');
81
+ expect(after).not.toContain('api.prep.paypal.com');
82
+ // no host was flipped to `.prep`, so no wrong-tier value ever enters the config
83
+ expect(after).not.toContain('bastion.prep.example.com');
84
+ expect(after).not.toContain('aws.ssmproxy.mydb.prep');
85
+ // the migration never emits a value it cannot verify — no marker bytes in config
86
+ expect(after).not.toContain('@declapract:review');
87
+ // the rds-only placeholder → the aws-param reference (the transform the twin lacks)
88
+ expect(after).toContain('"$.at(aws::param)"');
89
+ expect(after).not.toContain('__CHANG3_ME__');
90
+ // full content, for the reviewer's eye
91
+ expect(after).toMatchSnapshot('config/prep.json — after');
92
+ },
93
+ );
94
+ });
95
+
96
+ when('[t2] the fix is applied a second time (idempotency)', () => {
97
+ // config/dev.json is gone after the first relocate, so the EXISTS check no longer
98
+ // fires and no fix runs — config/prep.json must be untouched (per
99
+ // rule.require.idempotent-fixes).
100
+ const passes = useThen(
101
+ 'a second apply over the already-migrated repo',
102
+ async () => {
103
+ const before = await read(prepPath);
104
+ await applyMigrate();
105
+ const after = await read(prepPath);
106
+ return { before, after };
107
+ },
108
+ );
109
+
110
+ then('the second apply is a no-op', () => {
111
+ expect(passes.after).toEqual(passes.before);
112
+ });
113
+ });
114
+ });
115
+ });
116
+
117
+ /**
118
+ * .what = D55 clamp: `src/utils/config/getConfig.ts` has exactly ONE declarer — the `config`
119
+ * practice (the real sdk-config impl). `persist-with-rds` ships NO second copy of that
120
+ * path (the old `'placeholder' as any` typed lie).
121
+ * .why = `lambda-service-with-rds` extends `lambda-service`, which always supplies `config`, so the
122
+ * placeholder was dead weight whose correctness rested on alphabetical apply order
123
+ * (`config` < `persist-with-rds`). two declarers of one path, one a typed lie, is a silent
124
+ * hazard: a consumer converged to the real file only by accident of that order. one
125
+ * declarer removes both the order dependency and the lie — the consumer receives config's
126
+ * real getConfig at this exact path, so persist-with-rds's own import resolves.
127
+ * .teeth = re-add a getConfig.ts under persist-with-rds/best-practice → the sole-declarer assertion
128
+ * reddens.
129
+ * .note = INTEGRATION by `rule.forbid.unit.remote-boundaries`: it reads the filesystem (the
130
+ * practice trees). no credential, no network.
131
+ */
132
+ describe('persist-with-rds — getConfig has a single declarer (D55 clamp)', () => {
133
+ const configGetConfig =
134
+ 'src/practices/config/best-practice/src/utils/config/getConfig.ts';
135
+ const rdsGetConfig =
136
+ 'src/practices/persist-with-rds/best-practice/src/utils/config/getConfig.ts';
137
+ const rdsDbConnection =
138
+ 'src/practices/persist-with-rds/best-practice/src/utils/database/getOneDatabaseConnection.ts';
139
+ const exists = async (relativePath: string): Promise<boolean> =>
140
+ fs
141
+ .access(relativePath)
142
+ .then(() => true)
143
+ .catch(() => false);
144
+
145
+ given('[case1] the two practices that touch src/utils/config/getConfig.ts', () => {
146
+ when('[t0] the declarers of that path are read', () => {
147
+ then('the config practice is the sole declarer (real sdk-config impl)', async () => {
148
+ expect(await exists(configGetConfig)).toBe(true);
149
+ const real = await fs.readFile(configGetConfig, 'utf-8');
150
+ expect(real).toContain("from 'sdk-config'");
151
+ expect(real).not.toContain("'placeholder' as any");
152
+ });
153
+
154
+ then('persist-with-rds ships NO second copy (no typed-lie placeholder)', async () => {
155
+ // teeth: re-add a getConfig.ts under persist-with-rds/best-practice and this reddens
156
+ expect(await exists(rdsGetConfig)).toBe(false);
157
+ });
158
+
159
+ then('persist-with-rds imports getConfig from the config-supplied path', async () => {
160
+ // the consumer receives config's real getConfig at this exact path, so the import resolves
161
+ const dbConn = await fs.readFile(rdsDbConnection, 'utf-8');
162
+ expect(dbConn).toContain("from '../config/getConfig'");
163
+ });
164
+ });
165
+ });
166
+ });
167
+
168
+ /**
169
+ * .what = config.schema.ts clamp: this path has TWO declarers BY DESIGN — `config` (the base
170
+ * shape, for a non-rds `lambda-service`) and `persist-with-rds` (the full shape with the
171
+ * database block, for `lambda-service-with-rds`). persist-with-rds declares its full schema
172
+ * as a PLAIN overwrite template (EQUALS), NOT a CONTAINS + regex-splice fix.
173
+ * .why = a CONTAINS+splice `fix` for this path was dead code: its regex anchored on `});` before
174
+ * `export type Config`, but config's base emits `} as const;` there, so on a fresh
175
+ * `lambda-service-with-rds` consumer the fix no-oped and the check stayed permanently red —
176
+ * no path to green via `declapract fix`. worse, its inline splice string was stale (flat
177
+ * `role.cicd.{username,password}` vs the real `for-plan`/`for-apply` split). the later
178
+ * declarer (persist-with-rds) shadows config's base for rds consumers, so removal of the
179
+ * `.declapract.ts` makes its full `config.schema.ts` a plain EQUALS overwrite (declapract's
180
+ * default with no companion) that always converges — rule.prefer.overwrite-over-mutate: do
181
+ * not pair an overwrite template with a separate splice fix for the same path.
182
+ * .teeth = re-add a config.schema.ts.declapract.ts under persist-with-rds/best-practice → the
183
+ * "no splice-fix declarer" assertion reddens; strip the `for-plan` split from
184
+ * persist-with-rds's full schema → the "full schema declared" assertion reddens.
185
+ * .note = INTEGRATION by rule.forbid.unit.remote-boundaries: reads the filesystem (practice trees).
186
+ */
187
+ describe('persist-with-rds — config.schema.ts is a plain overwrite, not a splice-fix (config.schema clamp)', () => {
188
+ const configSchema =
189
+ 'src/practices/config/best-practice/src/utils/config/config.schema.ts';
190
+ const rdsSchema =
191
+ 'src/practices/persist-with-rds/best-practice/src/utils/config/config.schema.ts';
192
+ const rdsSchemaFix =
193
+ 'src/practices/persist-with-rds/best-practice/src/utils/config/config.schema.ts.declapract.ts';
194
+ const exists = async (relativePath: string): Promise<boolean> =>
195
+ fs
196
+ .access(relativePath)
197
+ .then(() => true)
198
+ .catch(() => false);
199
+
200
+ given('[case1] the two by-design declarers of src/utils/config/config.schema.ts', () => {
201
+ when('[t0] the declared files are read', () => {
202
+ then('config declares the BASE shape (no database block) for a non-rds service', async () => {
203
+ const base = await fs.readFile(configSchema, 'utf-8');
204
+ expect(base).toContain('const base = z.object(');
205
+ expect(base).not.toContain('database: z.object(');
206
+ });
207
+
208
+ then('persist-with-rds declares the FULL schema (database + for-plan/for-apply split)', async () => {
209
+ // teeth: strip the for-plan split from the full schema and this reddens
210
+ const full = await fs.readFile(rdsSchema, 'utf-8');
211
+ expect(full).toContain('database: z.object(');
212
+ expect(full).toContain("'for-plan': z.object(");
213
+ expect(full).toContain("'for-apply': z.object(");
214
+ });
215
+
216
+ then('persist-with-rds ships NO CONTAINS+splice fix for that path (dead regex gone)', async () => {
217
+ // teeth: re-add config.schema.ts.declapract.ts and this reddens. the paired full template
218
+ // is a plain EQUALS overwrite, so a fresh rds consumer converges via overwrite, never a
219
+ // splice that no-ops on config's `} as const;` base.
220
+ expect(await exists(rdsSchemaFix)).toBe(false);
221
+ });
222
+ });
223
+ });
224
+ });
@@ -0,0 +1,38 @@
1
+ import { readFile } from '../../utils/readFile';
2
+ import { fix } from './best-practice/provision/schema/sql/init/.extensions.sql.declapract';
3
+
4
+ describe('.extensions.sql fix', () => {
5
+ it('should be able to fix a file with custom extensions correctly', async () => {
6
+ const declaredFileContents = await readFile({
7
+ filePath: `${__dirname}/best-practice/provision/schema/sql/init/.extensions.sql`,
8
+ }); // grab the declared contents
9
+ const exampleFoundContents = `
10
+ /**
11
+ NOTE: because db owner is not allowed to create extensions, these changes are applied manually
12
+
13
+ NOTE: for the integration test db, these are applied automatically upon spinning up the docker instance
14
+ */
15
+ CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
16
+ CREATE EXTENSION IF NOT EXISTS "pgcrypto";
17
+ CREATE EXTENSION IF NOT EXISTS "cube";
18
+ CREATE EXTENSION IF NOT EXISTS "earthdistance";
19
+ `;
20
+ const { contents: fixedContents } = await fix(exampleFoundContents, {
21
+ declaredFileContents,
22
+ } as any);
23
+ expect(fixedContents).toContain('CREATE EXTENSION IF NOT EXISTS "cube";');
24
+ expect(fixedContents).toContain(
25
+ 'CREATE EXTENSION IF NOT EXISTS "earthdistance";',
26
+ );
27
+ expect(fixedContents).toMatchSnapshot();
28
+ });
29
+ it('should be able to create a new file to fix case where file does not exist yet', async () => {
30
+ const declaredFileContents = await readFile({
31
+ filePath: `${__dirname}/best-practice/provision/schema/sql/init/.extensions.sql`,
32
+ }); // grab the declared contents
33
+ const { contents: fixedContents } = await fix(null, {
34
+ declaredFileContents,
35
+ } as any);
36
+ expect(fixedContents).toMatchSnapshot();
37
+ });
38
+ });
@@ -0,0 +1,18 @@
1
+ {
2
+ "organization": "test-org",
3
+ "project": "test-project",
4
+ "environment": {
5
+ "access": "dev"
6
+ },
7
+ "database": {
8
+ "host": "bastion.dev.example.com",
9
+ "tunnel": "aws.ssmproxy.mydb.dev",
10
+ "password": "__CHANG3_ME__"
11
+ },
12
+ "upstream": {
13
+ "paypal": "api.dev.paypal.com"
14
+ },
15
+ "auth": {
16
+ "callbackUrl": "https://auth.myapp.dev"
17
+ }
18
+ }
@@ -0,0 +1,4 @@
1
+ declare:
2
+ examples: src/examples
3
+ practices: src/practices
4
+ use-cases: src/useCases.yml
@@ -0,0 +1,18 @@
1
+ declarations: './'
2
+ useCase: lambda-service-with-rds
3
+ variables:
4
+ organizationName: 'test-org'
5
+ projectName: 'test-project'
6
+ databaseName: 'testdb'
7
+ databaseUserName:
8
+ cicdUser: 'cicd_user'
9
+ serviceUser: 'service_user'
10
+ databaseTunnelHost:
11
+ prep: 'tunnel.prep.example.com'
12
+ prod: 'tunnel.prod.example.com'
13
+ databaseClusterHost:
14
+ prep: 'cluster.prep.example.com'
15
+ prod: 'cluster.prod.example.com'
16
+ awsAccountId:
17
+ prep: '123456789012'
18
+ prod: '123456789012'
@@ -0,0 +1,4 @@
1
+ {
2
+ "name": "test-project",
3
+ "version": "1.0.0"
4
+ }
@@ -0,0 +1,45 @@
1
+ // Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing
2
+
3
+ exports[`persist-with-rds — old-dev-config-location relocate + tier-migrate (row-4 clamp) given: [case1] an rds repo with a config/dev.json to migrate when: [t0] the migration input (before any fix) then: config/dev.json holds the dev tier + the placeholder + matches snapshot: config/dev.json — before 1`] = `
4
+ "{
5
+ "organization": "test-org",
6
+ "project": "test-project",
7
+ "environment": {
8
+ "access": "dev"
9
+ },
10
+ "database": {
11
+ "host": "bastion.dev.example.com",
12
+ "tunnel": "aws.ssmproxy.mydb.dev",
13
+ "password": "__CHANG3_ME__"
14
+ },
15
+ "upstream": {
16
+ "paypal": "api.dev.paypal.com"
17
+ },
18
+ "auth": {
19
+ "callbackUrl": "https://auth.myapp.dev"
20
+ }
21
+ }
22
+ "
23
+ `;
24
+
25
+ exports[`persist-with-rds — old-dev-config-location relocate + tier-migrate (row-4 clamp) given: [case1] an rds repo with a config/dev.json to migrate when: [t1] the relocate + migrate fix is applied then: config/prep.json now holds the migrated content + config/dev.json is gone + matches snapshot: config/prep.json — after 1`] = `
26
+ "{
27
+ "organization": "test-org",
28
+ "project": "test-project",
29
+ "environment": {
30
+ "access": "prep"
31
+ },
32
+ "database": {
33
+ "host": "bastion.dev.example.com",
34
+ "tunnel": "aws.ssmproxy.mydb.dev",
35
+ "password": "$.at(aws::param)"
36
+ },
37
+ "upstream": {
38
+ "paypal": "api.dev.paypal.com"
39
+ },
40
+ "auth": {
41
+ "callbackUrl": "https://auth.myapp.dev"
42
+ }
43
+ }
44
+ "
45
+ `;
@@ -0,0 +1,42 @@
1
+ // Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing
2
+
3
+ exports[`.extensions.sql fix should be able to create a new file to fix case where file does not exist yet 1`] = `
4
+ "/**
5
+ * postgres databases use extensions to increase functionality
6
+ * - we have a minimum set of extensions that are required for sql-schema-generator
7
+ * - services may also include their own extensions if they want additional functionality
8
+ * - this is not managed by sql-schema-control
9
+ * - requires superuser privileges, cicd user only has db_owner privileges
10
+ * - this is applied
11
+ * - automatically for integration-test db (through \`provision/docker/.../init/\` directory, with files cp'd by npm provision scripts)
12
+ * - by the deployment script for live deployments
13
+ */
14
+
15
+ -- extensions required for all sql-schema-generator resources:
16
+ CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
17
+ CREATE EXTENSION IF NOT EXISTS "pgcrypto";
18
+
19
+ -- extensions required for custom use cases in this service:
20
+ -- CREATE EXTENSION IF NOT EXISTS ..."
21
+ `;
22
+
23
+ exports[`.extensions.sql fix should be able to fix a file with custom extensions correctly 1`] = `
24
+ "/**
25
+ * postgres databases use extensions to increase functionality
26
+ * - we have a minimum set of extensions that are required for sql-schema-generator
27
+ * - services may also include their own extensions if they want additional functionality
28
+ * - this is not managed by sql-schema-control
29
+ * - requires superuser privileges, cicd user only has db_owner privileges
30
+ * - this is applied
31
+ * - automatically for integration-test db (through \`provision/docker/.../init/\` directory, with files cp'd by npm provision scripts)
32
+ * - by the deployment script for live deployments
33
+ */
34
+
35
+ -- extensions required for all sql-schema-generator resources:
36
+ CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
37
+ CREATE EXTENSION IF NOT EXISTS "pgcrypto";
38
+
39
+ -- extensions required for custom use cases in this service:
40
+ CREATE EXTENSION IF NOT EXISTS "cube";
41
+ CREATE EXTENSION IF NOT EXISTS "earthdistance";"
42
+ `;
@@ -0,0 +1,102 @@
1
+ // Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing
2
+
3
+ exports[`persist-with-rds deploy.database.sh gerund-free given: the shipped deploy.database.sh when: the template body is read then: the emitted deploy.database.sh matches snapshot: deploy.database.sh 1`] = `
4
+ "#####################################################
5
+ ## initialize the database in a live cluster
6
+ ## - in other words, it does all of the things that docker does for us when we spin up a cluster without the db already
7
+ ## - i.e.,
8
+ ## - create the database
9
+ ## - install the extensions
10
+ ## - creates the schema
11
+ ## - creates the cicd user
12
+ ## - grants the cicd user ownership of the db
13
+ ## - note:
14
+ ## - requires pg admin access
15
+ ## - requires _you_ to change the passwords in prod manually
16
+ ##
17
+ ## usage example:
18
+ ## \`\`\`sh
19
+ ## ./provision/schema/deploy.database.sh prep $(op item get ahbodedb.prep.postgres --fields label=password --format json | jq -r .value)
20
+ ## \`\`\`
21
+ #####################################################
22
+
23
+ set -eu
24
+
25
+ # check that the human has defined the environment that they want this key created for correctly
26
+ ENVIRONMENT="\${1:-}";
27
+ if [ "$ENVIRONMENT" != "prod" ] && [ "$ENVIRONMENT" != "prep" ]; then
28
+ echo "\\nerror: environment, the first argument, must be specified as either 'prod' or 'prep'. you specified '$ENVIRONMENT'";
29
+ exit 2;
30
+ fi
31
+
32
+ # check that the human is authed into correct account
33
+ AWS_ACCOUNT_ID=$(aws sts get-caller-identity | jq -r '.Account');
34
+ EXPECTED_AWS_ACCOUNT_ID=$([ "$ENVIRONMENT" = 'prod' ] && echo "@declapract{variable.awsAccountId.prod}" || echo "@declapract{variable.awsAccountId.prep}");
35
+ if [ "$AWS_ACCOUNT_ID" != "$EXPECTED_AWS_ACCOUNT_ID" ]; then
36
+ echo "\\nerror: the AWS_ACCOUNT that you are signed into is not correct for the environment you specified. you are authed into account '$AWS_ACCOUNT_ID' but the correct account id for '$ENVIRONMENT' is '$EXPECTED_AWS_ACCOUNT_ID'";
37
+ exit 2;
38
+ fi
39
+
40
+ # check that pg admin password was specified
41
+ POSTGRES_ADMIN_PASSWORD="\${2:-}"
42
+ if [ -z "\${POSTGRES_ADMIN_PASSWORD:-}" ]; then
43
+ echo "\\nerror: POSTGRES_ADMIN_PASSWORD must be defined as second arg";
44
+ exit 2;
45
+ fi;
46
+
47
+ # check that the cicd password was provisioned, if in prod, since this is used to create the cicd user
48
+ # note: this reads the legacy DOTTED param name (\`....database.role.cicd.password\`), a live consumer
49
+ # distinct from the slash-path plan/apply secrets. it is the prod cicd-user bootstrap credential
50
+ # and stays alive on purpose — do not prune it as an unreferenced legacy param.
51
+ if [ "$ENVIRONMENT" = "prod" ]; then
52
+ CICD_USER_PASSWORD=$(aws ssm get-parameter --name "@declapract{variable.organizationName}.@declapract{variable.projectName}.$ENVIRONMENT.database.role.cicd.password" --with-decryption --output text --query Parameter.Value)
53
+ if [ -z "\${CICD_USER_PASSWORD:-}" ]; then
54
+ echo "\\nerror: CICD_USER_PASSWORD must be provisioned with terraform before you run this"
55
+ exit 2;
56
+ fi;
57
+ if [ "$CICD_USER_PASSWORD" = "__IGNORED__" ] || [ "$CICD_USER_PASSWORD" = "__CHANG3_ME__" ]; then
58
+ echo "\\nerror: CICD_USER_PASSWORD must be set to a value other than the default placeholder"
59
+ exit 2;
60
+ fi;
61
+ fi;
62
+
63
+
64
+ # define the postgres connection string
65
+ CLUSTER_HOST=$([ "$ENVIRONMENT" = 'prod' ] && echo "@declapract{variable.databaseTunnelHost.prod}" || echo "@declapract{variable.databaseTunnelHost.prep}");
66
+ CLUSTER_CONNECTION_STRING=postgresql://postgres:$POSTGRES_ADMIN_PASSWORD@$CLUSTER_HOST:5432
67
+ ROOT_DB_CONNECTION_STRING=$CLUSTER_CONNECTION_STRING/postgres
68
+ SVC_DB_CONNECTION_STRING=$CLUSTER_CONNECTION_STRING/@declapract{variable.databaseName}
69
+
70
+ # define path to the init sqls
71
+ SRC_PATH=$(readlink --canonicalize "$0");
72
+ SRC_DIR=$(dirname $SRC_PATH);
73
+ INIT_SQLS_DIR=$SRC_DIR/sql/init;
74
+
75
+ # run the create database command on root db
76
+ echo "\\n 🔨 create the database..."
77
+ psql $ROOT_DB_CONNECTION_STRING -f $INIT_SQLS_DIR/.database.sql
78
+
79
+ echo "\\n 🔨 install the extensions..."
80
+ psql $SVC_DB_CONNECTION_STRING -f $INIT_SQLS_DIR/.extensions.sql
81
+
82
+ echo "\\n 🔨 create the schema..."
83
+ psql $SVC_DB_CONNECTION_STRING -f $INIT_SQLS_DIR/.schema.sql
84
+
85
+ if [ "$ENVIRONMENT" = "prod" ]; then
86
+ echo "\\n 🔨 grant reads to the datalakedb user..." # only in prod env; we dont want prep's test data in our datalake
87
+ psql $SVC_DB_CONNECTION_STRING -f $INIT_SQLS_DIR/.user.datalakedb.sql
88
+ fi;
89
+
90
+ echo "\\n 🔨 create the cicd user..."
91
+ CICD_USER_CREATE_SQL_PATH=$INIT_SQLS_DIR/.user.cicd.sql
92
+ if [ "$ENVIRONMENT" = "prod" ]; then
93
+ CICD_USER_CREATE_SQL_PATH_TEMP=$CICD_USER_CREATE_SQL_PATH.tmp # in prod, we must create a temp file which will have the actual password we'll use to create the cicd user
94
+ cat $CICD_USER_CREATE_SQL_PATH | sed "s/__CHANG3_ME__/\${CICD_USER_PASSWORD}/" > $CICD_USER_CREATE_SQL_PATH_TEMP # create the temp file w/ the actual password
95
+ psql $SVC_DB_CONNECTION_STRING -f $CICD_USER_CREATE_SQL_PATH_TEMP # run the temp create sql w/ the actual password
96
+ rm $CICD_USER_CREATE_SQL_PATH_TEMP # remove the temp file, so the password doesn't get checked in
97
+ else
98
+ psql $SVC_DB_CONNECTION_STRING -f $CICD_USER_CREATE_SQL_PATH # otherwise, we can run the file directly. no password replacement required
99
+ fi
100
+ echo "\\n 🎉 done"
101
+ "
102
+ `;
@@ -0,0 +1,3 @@
1
+ // Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing
2
+
3
+ exports[`persist-with-rds provision:testdb access given: the shipped best-practice package.json when: the provision:testdb chain is read then: the emitted provision:testdb chain matches snapshot: provision:testdb chain 1`] = `"npm run provision:testdb:docker:clear && npm run provision:testdb:docker:prepare && npm run provision:testdb:docker:up && npm run provision:testdb:docker:await && ACCESS=test npm run provision:schema:plan && ACCESS=test npm run provision:schema:apply && ACCESS=test npm run provision:schema:plan"`;
@@ -0,0 +1,10 @@
1
+ // Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing
2
+
3
+ exports[`persist-with-rds ssm cicd param names are slash-path, tierless given: [case1] the two cicd credentials when: [t0] resources.parameters.ts is read then: the emitted cicd + crud param-name lines match snapshot: ssm cicd + crud param names 1`] = `
4
+ [
5
+ "* with NO tier segment — \`parameter/<star>/svc-<star>/database/role/cicd/for-plan/<star>\`",
6
+ "secret({ name: \`\${namespace}.database.role.crud.password\` }),",
7
+ "name: \`/@declapract{variable.organizationName}/@declapract{variable.projectName}/database/role/cicd/for-plan/password\`,",
8
+ "name: \`/@declapract{variable.organizationName}/@declapract{variable.projectName}/database/role/cicd/for-apply/password\`,",
9
+ ]
10
+ `;
@@ -0,0 +1,30 @@
1
+ // Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing
2
+
3
+ exports[`testdb preflight fails loud (#589) given: the shipped wait-for-postgres preflight probe when: [t4] the shipped probe is vibechecked as a whole then: the emitted wait-for-postgres.sh matches snapshot: wait-for-postgres.sh preflight probe 1`] = `
4
+ "#!/bin/sh
5
+ set -eu
6
+ # wait until postgres is really available
7
+ maxcounter=45
8
+
9
+ echo "waiting for postgres server to begin accepting connections..."
10
+ counter=1
11
+ # pass the secret via PGPASSWORD, not inline in the connection string (which leaks it to \`ps\`)
12
+ export PGPASSWORD="\${POSTGRES_PASSWORD:-}"
13
+ # capture the probe's stderr so the real cause (bad password, port conflict, image build failure)
14
+ # surfaces on timeout, rather than one hardcoded diagnosis that reads the same for every cause
15
+ lasterr=""
16
+ while true; do
17
+ # fold the capture into the if-condition so \`set -e\` does not exit on the expected
18
+ # connect failures while postgres warms up; lasterr still holds the last stderr
19
+ if lasterr=$(psql "dbname=\${POSTGRES_DB:-} host=localhost user=postgres port=5432" -c '\\l' 2>&1); then break; fi
20
+ sleep 1
21
+ counter=\`expr $counter + 1\`
22
+ if [ $counter -gt $maxcounter ]; then
23
+ >&2 echo "postgres did not accept connections after \${maxcounter}s; the last psql error was:"
24
+ >&2 echo "$lasterr"
25
+ exit 1
26
+ fi;
27
+ done
28
+ echo "connected to postgres instance successfully"
29
+ "
30
+ `;
@@ -1,19 +1,33 @@
1
1
  import { FileCheckType, type FileFixFunction } from 'declapract';
2
2
 
3
+ import { asPrepConfigPath } from '../../../../../utils/asPrepConfigPath';
4
+ import { migrateDevConfigToPrep } from '../../../../../utils/migrateDevConfigToPrep';
5
+
3
6
  export const check = FileCheckType.EXISTS;
4
7
 
8
+ /**
9
+ * .what = rewrite the rds password placeholder `"__CHANG3_ME__"` to the aws-param reference.
10
+ * .why = the rds config twin adds this one transform the config twin lacks; a named op keeps the
11
+ * declarer's `fix` a what-not-how read (rule.require.named-transformers).
12
+ */
13
+ const withAwsParamPlaceholder = (input: { contents: string }): string =>
14
+ input.contents.replace(/"__CHANG3_ME__"/g, '"$.at(aws::param)"');
15
+
5
16
  export const fix: FileFixFunction = (contents, context) => {
6
- // move config/dev.json → config/prep.json and update .dev → .prep references
17
+ // move config/dev.json → config/prep.json and migrate the tier tokens (dev → prep).
18
+ // both halves are shared utils (one source for both declarers): migrateDevConfigToPrep
19
+ // owns the content migration, asPrepConfigPath owns the relocate. this declarer adds the
20
+ // rds-only aws-param placeholder rewrite on top.
7
21
  const updatedContents = contents
8
- ?.replace(/\.dev\b/g, '.prep')
9
- .replace(/"access":\s*"dev"/, '"access": "prep"')
10
- .replace(/"__CHANG3_ME__"/g, '"$.at(aws::param)"');
22
+ ? withAwsParamPlaceholder({
23
+ contents: migrateDevConfigToPrep({ contents }),
24
+ })
25
+ : contents;
11
26
 
12
27
  return {
13
28
  contents: updatedContents ?? null,
14
- relativeFilePath: context.relativeFilePath.replace(
15
- /^config\/dev\.json$/,
16
- 'config/prep.json',
17
- ),
29
+ relativeFilePath: asPrepConfigPath({
30
+ relativeFilePath: context.relativeFilePath,
31
+ }),
18
32
  };
19
33
  };
@@ -24,3 +24,35 @@ terraform provisions these ssm parameters for database credentials:
24
24
  legacy parameters (kept for backwards compatibility):
25
25
  - `{namespace}.database.admin.password`
26
26
  - `{namespace}.database.service.password`
27
+
28
+ ## a stateful store gets an alias, never a copy, across the dual-publish transition
29
+
30
+ the `serverless` + `environments` practices dual-publish each lambda fleet under both slugs
31
+ (`-dev-` ancient, `-prep-` contemp) through the `-dev-`→`-prep-` slug transition. a stateless lambda
32
+ is safe under two names. a stateful store is not.
33
+
34
+ this RDS cluster (and its SSM credential params, its S3 buckets, its SQS queues) stays one store
35
+ reached by two pointers — a Route53 CNAME, an SSM pointer, or an ARN — never two clusters.
36
+
37
+ a second `-prep-` RDS cluster is never stood up to satisfy dual-publish. two independent clusters
38
+ form a write-`-dev-`/read-`-prep-` split: the ancient fleet writes one, the contemp fleet reads the
39
+ other, and the divergence stays silent until data is absent. the alias points at the one cluster.
40
+
41
+ no data migration is needed: the runtime DB path resolves `config.database.tunnel.lambda.host` (see
42
+ `src/utils/database/getOneDatabaseConnection.ts`), an access-keyed config value
43
+ (`databaseClusterHost.{prep,prod}`) with no deploy-slug token, so a CNAME re-points the one live
44
+ cluster with zero data moved. which alias mechanism to use is unsettled; the invariant "one store, two
45
+ pointers" holds regardless.
46
+
47
+ ## the provision workflow's rds jobs are gated behind this practice (D28)
48
+
49
+ `cicd-service`'s `provision.yml` carries 4 rds-coupled jobs — `sql-schema-{prep,prod}` (the
50
+ `.sql-schema-control.yml` callee, driven by this practice's schema + daos) and
51
+ `aws-{prep,prod}-declastruct` (the `provision/aws/resources.ts` wish this practice ships). the gate
52
+ lives in `cicd-service/best-practice/.github/workflows/provision.yml.declapract.ts`: a usecase-aware
53
+ `contents` fn emits those 4 jobs **only** when `persist-with-rds` is in the resolved practice set, so
54
+ a service **without** rds (`lambda-service`, `lambda-service-with-dynamodb`) does not inherit a
55
+ `provision` workflow that references files it lacks. it uses `CONTAINS`, not `EQUALS`, so a narrow
56
+ `declapract fix --practice cicd-service` cannot strip an rds repo's own jobs (the additive-delta
57
+ EQUALS hazard). if you add a new rds-coupled provision job, add it to that gate the same way — a
58
+ caller that names a callee this practice supplies must be reconciled against this practice's presence.
@@ -5,7 +5,7 @@ generates:
5
5
  to: src/access/daos
6
6
  using:
7
7
  log: src/utils/logger#log
8
- DatabaseConnection: src/utils/database/getDatabaseConnection#DatabaseConnection
8
+ DatabaseConnection: src/utils/database/getOneDatabaseConnection#DatabaseConnection
9
9
  schema:
10
10
  config: codegen.sql.schema.yml
11
11
  control: