declapract-typescript-ehmpathy 0.17.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (254) hide show
  1. package/declapract.declare.yml +4 -0
  2. package/dist/examples/todo.md +1 -0
  3. package/dist/getVariables.ts +27 -0
  4. package/dist/practices/cicd-deploy-package/bad-practices/old-names/.github/workflows/publish_on_tag.yml.declapract.ts +3 -0
  5. package/dist/practices/cicd-deploy-package/best-practice/.declapract.readme.md +2 -0
  6. package/dist/practices/cicd-deploy-package/best-practice/.github/workflows/publish-on-tag.yml +36 -0
  7. package/dist/practices/cicd-deploy-service/bad-practices/old-names/.github/workflows/deploy_dev_on_main.yml.declapract.ts +3 -0
  8. package/dist/practices/cicd-deploy-service/bad-practices/old-names/.github/workflows/deploy_dev_on_master.yml.declapract.ts +3 -0
  9. package/dist/practices/cicd-deploy-service/bad-practices/old-names/.github/workflows/deploy_on_tag.yml.declapract.ts +3 -0
  10. package/dist/practices/cicd-deploy-service/bad-practices/old-names/.github/workflows/deploy_prod_on_tag.yml.declapract.ts +3 -0
  11. package/dist/practices/cicd-deploy-service/best-practice/.declapract.readme.md +4 -0
  12. package/dist/practices/cicd-deploy-service/best-practice/.github/workflows/deploy-dev-on-main.yml +59 -0
  13. package/dist/practices/cicd-deploy-service/best-practice/.github/workflows/deploy-prod-on-tag.yml +74 -0
  14. package/dist/practices/cicd-integrate/bad-practices/old-names/.github/workflows/ci-on-commit.yml.declapract.ts +3 -0
  15. package/dist/practices/cicd-integrate/bad-practices/old-names/.github/workflows/ci_on_commit.yml.declapract.ts +3 -0
  16. package/dist/practices/cicd-integrate/bad-practices/old-names/.github/workflows/test_on_commit.yml.declapract.ts +3 -0
  17. package/dist/practices/cicd-integrate/best-practice/.declapract.readme.md +3 -0
  18. package/dist/practices/cicd-integrate/best-practice/.github/workflows/pr-release-on-main.yml +17 -0
  19. package/dist/practices/cicd-integrate/best-practice/.github/workflows/test-on-commit.yml +285 -0
  20. package/dist/practices/config/bad-practices/configs-contain-wrong-account-id/config/dev.json.declapract.ts +9 -0
  21. package/dist/practices/config/bad-practices/configs-contain-wrong-account-id/config/prod.json.declapract.ts +9 -0
  22. package/dist/practices/config/bad-practices/configs-contain-wrong-account-id/config/test.json.declapract.ts +9 -0
  23. package/dist/practices/config/bad-practices/divergent-config-shapes/.declapract.readme.md +8 -0
  24. package/dist/practices/config/bad-practices/divergent-config-shapes/config/dev.json.declapract.ts +37 -0
  25. package/dist/practices/config/bad-practices/divergent-config-shapes/config/prod.json.declapract.ts +37 -0
  26. package/dist/practices/config/bad-practices/in-util-dir-directly/.declapract.readme.md +1 -0
  27. package/dist/practices/config/bad-practices/in-util-dir-directly/src/<star><star>/<star>.ts.declapract.ts +16 -0
  28. package/dist/practices/config/bad-practices/in-util-dir-directly/src/utils/config.integration.test.ts.declapract.ts +3 -0
  29. package/dist/practices/config/bad-practices/in-util-dir-directly/src/utils/config.ts.declapract.ts +3 -0
  30. package/dist/practices/config/bad-practices/promise-config/src/<star><star>/<star>.ts.declapract.ts +19 -0
  31. package/dist/practices/config/best-practice/config/dev.json +3 -0
  32. package/dist/practices/config/best-practice/config/dev.json.declapract.ts +3 -0
  33. package/dist/practices/config/best-practice/config/prod.json +3 -0
  34. package/dist/practices/config/best-practice/config/prod.json.declapract.ts +3 -0
  35. package/dist/practices/config/best-practice/config/test.json +3 -0
  36. package/dist/practices/config/best-practice/config/test.json.declapract.ts +3 -0
  37. package/dist/practices/config/best-practice/nontyped_modules/config-with-paramstore.d.ts +1 -0
  38. package/dist/practices/config/best-practice/package.json +5 -0
  39. package/dist/practices/config/best-practice/package.json.declapract.ts +3 -0
  40. package/dist/practices/config/best-practice/provision/aws/product/parameter-store.tf +3 -0
  41. package/dist/practices/config/best-practice/provision/aws/product/parameter-store.tf.declapract.ts +16 -0
  42. package/dist/practices/config/best-practice/provision/aws/product/variables.tf +3 -0
  43. package/dist/practices/config/best-practice/provision/aws/product/variables.tf.declapract.ts +3 -0
  44. package/dist/practices/config/best-practice/src/utils/config/Config.ts +1 -0
  45. package/dist/practices/config/best-practice/src/utils/config/Config.ts.declapract.ts +7 -0
  46. package/dist/practices/config/best-practice/src/utils/config/getConfig.integration.test.ts +8 -0
  47. package/dist/practices/config/best-practice/src/utils/config/getConfig.ts +8 -0
  48. package/dist/practices/config/best-practice/src/utils/environment.ts +3 -0
  49. package/dist/practices/config/best-practice/src/utils/environment.ts.declapract.ts +3 -0
  50. package/dist/practices/conventional-commits/best-practice/.declapract.readme.md +5 -0
  51. package/dist/practices/conventional-commits/best-practice/.husky/commit-msg +4 -0
  52. package/dist/practices/conventional-commits/best-practice/commitlint.config.js +4 -0
  53. package/dist/practices/conventional-commits/best-practice/package.json +17 -0
  54. package/dist/practices/conventional-commits/best-practice/package.json.declapract.ts +3 -0
  55. package/dist/practices/dates-and-times/bad-practices/moment/.declapract.readme.md +9 -0
  56. package/dist/practices/dates-and-times/bad-practices/moment/package.json.declapract.ts +12 -0
  57. package/dist/practices/dates-and-times/best-practice/.declapract.readme.md +1 -0
  58. package/dist/practices/dates-and-times/best-practice/package.json +5 -0
  59. package/dist/practices/dates-and-times/best-practice/package.json.declapract.ts +3 -0
  60. package/dist/practices/directory-structure-src/bad-practices/model-dir/.declapract.readme.md +2 -0
  61. package/dist/practices/directory-structure-src/bad-practices/model-dir/src/<star><star>/<star>.ts.declapract.ts +44 -0
  62. package/dist/practices/directory-structure-src/bad-practices/model-dir/src/model/<star><star>/<star>.ts.declapract.ts +16 -0
  63. package/dist/practices/directory-structure-src/bad-practices/services-dir/.declapract.readme.md +5 -0
  64. package/dist/practices/directory-structure-src/bad-practices/services-dir/src/services/<star><star>/<star>.ts.declapract.ts +3 -0
  65. package/dist/practices/directory-structure-src/best-practice/.declapract.readme.md +32 -0
  66. package/dist/practices/directory-structure-src/best-practice/src/contract/<star><star>/<star>.ts.declapract.ts +4 -0
  67. package/dist/practices/directory-structure-src/best-practice/src/data/clients/<star><star>/<star>.ts.declapract.ts +3 -0
  68. package/dist/practices/directory-structure-src/best-practice/src/data/dao/<star><star>/<star>.ts.declapract.ts +3 -0
  69. package/dist/practices/directory-structure-src/best-practice/src/domain/constants.ts.declapract.ts +15 -0
  70. package/dist/practices/directory-structure-src/best-practice/src/domain/index.ts.declapract.ts +3 -0
  71. package/dist/practices/directory-structure-src/best-practice/src/domain/objects/index.ts.declapract.ts +4 -0
  72. package/dist/practices/directory-structure-src/best-practice/src/logic/<star><star>/<star>.ts.declapract.ts +4 -0
  73. package/dist/practices/domain/bad-practices/schematic-joi-model/src/domain/<star><star>/<star>.ts.declapract.ts +16 -0
  74. package/dist/practices/domain/best-practice/package.json +7 -0
  75. package/dist/practices/domain/best-practice/package.json.declapract.ts +3 -0
  76. package/dist/practices/domain/best-practice/src/domain/objects/index.ts.declapract.ts +4 -0
  77. package/dist/practices/environments/best-practice/.declapract.readme.md +30 -0
  78. package/dist/practices/environments/best-practice/provision/aws/environments/dev/main.tf.declapract.ts +3 -0
  79. package/dist/practices/environments/best-practice/provision/aws/environments/prod/main.tf.declapract.ts +3 -0
  80. package/dist/practices/environments/best-practice/provision/aws/environments/test/main.tf.declapract.ts +3 -0
  81. package/dist/practices/environments/best-practice/src/utils/environment.ts +35 -0
  82. package/dist/practices/errors/best-practice/src/utils/errors/UnexpectedCodePathError.ts +14 -0
  83. package/dist/practices/format/best-practice/package.json +6 -0
  84. package/dist/practices/format/best-practice/package.json.declapract.ts +3 -0
  85. package/dist/practices/git/best-practice/.gitignore.declapract.ts +29 -0
  86. package/dist/practices/lambda-clients/bad-practices/lambda-service-client-package/.declapract.readme.md +1 -0
  87. package/dist/practices/lambda-clients/bad-practices/lambda-service-client-package/package.json +5 -0
  88. package/dist/practices/lambda-clients/bad-practices/lambda-service-client-package/package.json.declapract.ts +16 -0
  89. package/dist/practices/lambda-clients/best-practice/package.json +5 -0
  90. package/dist/practices/lambda-clients/best-practice/package.json.declapract.ts +3 -0
  91. package/dist/practices/lambda-clients/best-practice/src/data/clients/<star>.ts +1 -0
  92. package/dist/practices/lambda-clients/best-practice/src/data/clients/<star>.ts.declapract.ts +3 -0
  93. package/dist/practices/lambda-handlers/best-practice/package.json +9 -0
  94. package/dist/practices/lambda-handlers/best-practice/package.json.declapract.ts +3 -0
  95. package/dist/practices/lambda-handlers/best-practice/src/contract/handlers/<star><star>/<star>.declapract.ts +3 -0
  96. package/dist/practices/linting/best-practice/.eslintrc.js +44 -0
  97. package/dist/practices/linting/best-practice/package.json +16 -0
  98. package/dist/practices/linting/best-practice/package.json.declapract.ts +4 -0
  99. package/dist/practices/logging/best-practice/package.json +5 -0
  100. package/dist/practices/logging/best-practice/package.json.declapract.ts +3 -0
  101. package/dist/practices/logging/best-practice/src/utils/logger.ts +3 -0
  102. package/dist/practices/node/bad-practices/license/package.json.declapract.ts +22 -0
  103. package/dist/practices/node/best-practice/.nvmrc +1 -0
  104. package/dist/practices/node/best-practice/package.json +11 -0
  105. package/dist/practices/node/best-practice/package.json.declapract.ts +3 -0
  106. package/dist/practices/node/best-practice/readme.md +1 -0
  107. package/dist/practices/node/best-practice/readme.md.declapract.ts +3 -0
  108. package/dist/practices/nonpublished-modules/.declapract.readme.md +5 -0
  109. package/dist/practices/nonpublished-modules/bad-practices/ahbode-standard-lambda-handler/.declapract.readme.md +1 -0
  110. package/dist/practices/nonpublished-modules/bad-practices/ahbode-standard-lambda-handler/src/__nonpublished_modules__/ahbode-standard-lambda-handler/<star><star>/<star>.ts.declapract.ts +3 -0
  111. package/dist/practices/nonpublished-modules/bad-practices/ahbode-standard-lambda-handler/src/contract/handlers/<star>.integration.test.ts +1 -0
  112. package/dist/practices/nonpublished-modules/bad-practices/ahbode-standard-lambda-handler/src/contract/handlers/<star>.integration.test.ts.declapract.ts +15 -0
  113. package/dist/practices/nonpublished-modules/bad-practices/ahbode-standard-lambda-handler/src/contract/handlers/<star>.ts +1 -0
  114. package/dist/practices/nonpublished-modules/bad-practices/ahbode-standard-lambda-handler/src/contract/handlers/<star>.ts.declapract.ts +13 -0
  115. package/dist/practices/nonpublished-modules/bad-practices/deep-omit/.declapract.readme.md +1 -0
  116. package/dist/practices/nonpublished-modules/bad-practices/deep-omit/src/__nonpublished_modules__/deep-omit/<star><star>/<star>.ts.declapract.ts +3 -0
  117. package/dist/practices/nonpublished-modules/bad-practices/deep-omit/src/data/dao/<star><star>/<star>.integration.test.ts +1 -0
  118. package/dist/practices/nonpublished-modules/bad-practices/deep-omit/src/data/dao/<star><star>/<star>.integration.test.ts.declapract.ts +18 -0
  119. package/dist/practices/nonpublished-modules/bad-practices/simple-dynamodb-client/.declapract.readme.md +1 -0
  120. package/dist/practices/nonpublished-modules/bad-practices/simple-dynamodb-client/src/__nonpublished_modules__/simple-dynamodb-client/<star><star>/<star>.ts.declapract.ts +3 -0
  121. package/dist/practices/package-json-order/best-practice/.declapract.readme.md +3 -0
  122. package/dist/practices/package-json-order/best-practice/package.json.declapract.ts +171 -0
  123. package/dist/practices/persist-with-dynamodb/best-practice/package.json +5 -0
  124. package/dist/practices/persist-with-dynamodb/best-practice/package.json.declapract.ts +3 -0
  125. package/dist/practices/persist-with-rds/bad-practices/non-prefixed-manual-init-sqls/provision/schema/sql/init/database.sql.declapract.ts +3 -0
  126. package/dist/practices/persist-with-rds/bad-practices/non-prefixed-manual-init-sqls/provision/schema/sql/init/extensions.sql.declapract.ts +13 -0
  127. package/dist/practices/persist-with-rds/bad-practices/non-prefixed-manual-init-sqls/provision/schema/sql/init/schema.sql.declapract.ts +3 -0
  128. package/dist/practices/persist-with-rds/bad-practices/non-prefixed-manual-init-sqls/provision/schema/sql/init/user.cicd.sql.declapract.ts +3 -0
  129. package/dist/practices/persist-with-rds/bad-practices/non-prefixed-manual-init-sqls/provision/schema/sql/init/user.datalakedb.sql.declapract.ts +3 -0
  130. package/dist/practices/persist-with-rds/bad-practices/non-prefixed-manual-init-sqls/readme.md +5 -0
  131. package/dist/practices/persist-with-rds/bad-practices/old-config-file-names/codegen.sql.yml.declapract.ts +3 -0
  132. package/dist/practices/persist-with-rds/bad-practices/schema-entities-dir/.declapract.readme.md +1 -0
  133. package/dist/practices/persist-with-rds/bad-practices/schema-entities-dir/provision/schema/entities/<star>.ts.declapract.ts +12 -0
  134. package/dist/practices/persist-with-rds/bad-practices/schema-entities-dir/provision/schema/sql/entities.yml.declapract.ts +13 -0
  135. package/dist/practices/persist-with-rds/best-practice/.declapract.readme.md +6 -0
  136. package/dist/practices/persist-with-rds/best-practice/codegen.sql.dao.yml +18 -0
  137. package/dist/practices/persist-with-rds/best-practice/codegen.sql.dao.yml.declapract.ts +3 -0
  138. package/dist/practices/persist-with-rds/best-practice/codegen.sql.schema.yml +6 -0
  139. package/dist/practices/persist-with-rds/best-practice/codegen.sql.types.yml +15 -0
  140. package/dist/practices/persist-with-rds/best-practice/config/dev.json +20 -0
  141. package/dist/practices/persist-with-rds/best-practice/config/dev.json.declapract.ts +15 -0
  142. package/dist/practices/persist-with-rds/best-practice/config/prod.json +20 -0
  143. package/dist/practices/persist-with-rds/best-practice/config/prod.json.declapract.ts +3 -0
  144. package/dist/practices/persist-with-rds/best-practice/config/test.json +20 -0
  145. package/dist/practices/persist-with-rds/best-practice/config/test.json.declapract.ts +3 -0
  146. package/dist/practices/persist-with-rds/best-practice/package.json +27 -0
  147. package/dist/practices/persist-with-rds/best-practice/package.json.declapract.ts +3 -0
  148. package/dist/practices/persist-with-rds/best-practice/provision/aws/product/parameter-store.tf +24 -0
  149. package/dist/practices/persist-with-rds/best-practice/provision/aws/product/parameter-store.tf.declapract.ts +18 -0
  150. package/dist/practices/persist-with-rds/best-practice/provision/docker/integration_test_db/build-image.dockerfile +7 -0
  151. package/dist/practices/persist-with-rds/best-practice/provision/docker/integration_test_db/docker-compose.yml +13 -0
  152. package/dist/practices/persist-with-rds/best-practice/provision/docker/integration_test_db/init/.gitignore +3 -0
  153. package/dist/practices/persist-with-rds/best-practice/provision/docker/integration_test_db/init/readme.md +3 -0
  154. package/dist/practices/persist-with-rds/best-practice/provision/docker/integration_test_db/wait-for-postgres.sh +15 -0
  155. package/dist/practices/persist-with-rds/best-practice/provision/schema/connection.config.js +23 -0
  156. package/dist/practices/persist-with-rds/best-practice/provision/schema/control.yml +7 -0
  157. package/dist/practices/persist-with-rds/best-practice/provision/schema/deploy.database.sh +71 -0
  158. package/dist/practices/persist-with-rds/best-practice/provision/schema/sql/init/.database.sql +10 -0
  159. package/dist/practices/persist-with-rds/best-practice/provision/schema/sql/init/.extensions.sql +16 -0
  160. package/dist/practices/persist-with-rds/best-practice/provision/schema/sql/init/.extensions.sql.declapract.ts +37 -0
  161. package/dist/practices/persist-with-rds/best-practice/provision/schema/sql/init/.schema.sql +11 -0
  162. package/dist/practices/persist-with-rds/best-practice/provision/schema/sql/init/.user.cicd.sql +14 -0
  163. package/dist/practices/persist-with-rds/best-practice/provision/schema/sql/init/.user.datalakedb.sql +12 -0
  164. package/dist/practices/persist-with-rds/best-practice/provision/schema/sql/init/default_transaction_isolation.sql +6 -0
  165. package/dist/practices/persist-with-rds/best-practice/provision/schema/sql/init/user.service.sql +16 -0
  166. package/dist/practices/persist-with-rds/best-practice/provision/schema/sql/init.yml +9 -0
  167. package/dist/practices/persist-with-rds/best-practice/provision/schema/sql/init.yml.declapract.ts +3 -0
  168. package/dist/practices/persist-with-rds/best-practice/src/utils/config/getConfig.ts +2 -0
  169. package/dist/practices/persist-with-rds/best-practice/src/utils/config/getConfig.ts.declapract.ts +3 -0
  170. package/dist/practices/persist-with-rds/best-practice/src/utils/database/getDatabaseConnection.integration.test.ts +10 -0
  171. package/dist/practices/persist-with-rds/best-practice/src/utils/database/getDatabaseConnection.ts +65 -0
  172. package/dist/practices/persist-with-rds/best-practice/src/utils/database/withDatabaseConnection.ts +38 -0
  173. package/dist/practices/persist-with-rds/best-practice/src/utils/database/withDatabaseTransaction.ts +20 -0
  174. package/dist/practices/prettier/bad-practices/format-script/package.json.declapract.ts +26 -0
  175. package/dist/practices/prettier/best-practice/.prettierignore +1 -0
  176. package/dist/practices/prettier/best-practice/package.json +10 -0
  177. package/dist/practices/prettier/best-practice/package.json.declapract.ts +3 -0
  178. package/dist/practices/prettier/best-practice/prettier.config.js +9 -0
  179. package/dist/practices/runtime-type-checking/bad-practices/joi-types/package.json +5 -0
  180. package/dist/practices/runtime-type-checking/bad-practices/joi-types/package.json.declapract.ts +18 -0
  181. package/dist/practices/runtime-type-checking/bad-practices/old-joi-syntax-valid-input-cant-be-array/.declapract.readme.md +1 -0
  182. package/dist/practices/runtime-type-checking/bad-practices/old-joi-syntax-valid-input-cant-be-array/src/<star><star>/<star>.ts.declapract.ts +15 -0
  183. package/dist/practices/runtime-type-checking/best-practice/package.json +5 -0
  184. package/dist/practices/runtime-type-checking/best-practice/package.json.declapract.ts +3 -0
  185. package/dist/practices/serverless/bad-practices/generic-deploy-script/package.json +8 -0
  186. package/dist/practices/serverless/bad-practices/generic-deploy-script/package.json.declapract.ts +23 -0
  187. package/dist/practices/serverless/bad-practices/old-sls-plugins/package.json +6 -0
  188. package/dist/practices/serverless/bad-practices/old-sls-plugins/package.json.declapract.ts +19 -0
  189. package/dist/practices/serverless/best-practice/package.json +11 -0
  190. package/dist/practices/serverless/best-practice/package.json.declapract.ts +3 -0
  191. package/dist/practices/serverless/best-practice/serverless.yml +70 -0
  192. package/dist/practices/serverless/best-practice/serverless.yml.declapract.ts +26 -0
  193. package/dist/practices/terraform/bad-practices/terraform-dir/.declapract.readme.md +8 -0
  194. package/dist/practices/terraform/bad-practices/terraform-dir/provision/terraform/<star><star>/.gitignore.declapract.ts +12 -0
  195. package/dist/practices/terraform/bad-practices/terraform-dir/provision/terraform/<star><star>/<star>.hcl.declapract.ts +12 -0
  196. package/dist/practices/terraform/bad-practices/terraform-dir/provision/terraform/<star><star>/<star>.tf.declapract.ts +12 -0
  197. package/dist/practices/terraform/best-practice/.terraform-version +1 -0
  198. package/dist/practices/terraform/best-practice/package.json +6 -0
  199. package/dist/practices/terraform/best-practice/package.json.declapract.ts +3 -0
  200. package/dist/practices/terraform/best-practice/provision/aws/environments/dev/main.tf +18 -0
  201. package/dist/practices/terraform/best-practice/provision/aws/environments/dev/versions.tf +9 -0
  202. package/dist/practices/terraform/best-practice/provision/aws/environments/prod/main.tf +18 -0
  203. package/dist/practices/terraform/best-practice/provision/aws/environments/prod/versions.tf +9 -0
  204. package/dist/practices/terraform/best-practice/provision/aws/environments/test/main.tf +18 -0
  205. package/dist/practices/terraform/best-practice/provision/aws/environments/test/versions.tf +9 -0
  206. package/dist/practices/terraform/best-practice/provision/aws/product/variables.tf +14 -0
  207. package/dist/practices/terraform/best-practice/provision/github/environment/import-existing-repo.sh +12 -0
  208. package/dist/practices/terraform/best-practice/provision/github/environment/main.tf +20 -0
  209. package/dist/practices/terraform/best-practice/provision/github/environment/versions.tf +9 -0
  210. package/dist/practices/terraform/best-practice/provision/github/product/repository.tf +70 -0
  211. package/dist/practices/testing/bad-practices/mocks/.declapract.readme.md +8 -0
  212. package/dist/practices/testing/bad-practices/mocks/<star><star>/__mock__/<star>.js +3 -0
  213. package/dist/practices/testing/bad-practices/mocks/<star><star>/__mock__/<star>.ts +3 -0
  214. package/dist/practices/testing/bad-practices/old-acceptance-test-utils/acceptance/_utils/getDataFromLastOpenBracketAtStartOfLine.ts.declapract.ts +3 -0
  215. package/dist/practices/testing/bad-practices/old-acceptance-test-utils/acceptance/_utils/invokeLambda.ts.declapract.ts +3 -0
  216. package/dist/practices/testing/bad-practices/old-acceptance-test-utils/acceptance/lambdas/<star>.ts.declapract.ts +44 -0
  217. package/dist/practices/testing/bad-practices/old-acceptance-test-utils-2/acceptance/__test_utils__/environment.ts.declapract.ts +3 -0
  218. package/dist/practices/testing/bad-practices/old-acceptance-test-utils-2/acceptance/lambdas/<star>.ts.declapract.ts +22 -0
  219. package/dist/practices/testing/bad-practices/old-acceptance-test-utils-3/acceptance/_utils/environment.ts.declapract.ts +3 -0
  220. package/dist/practices/testing/bad-practices/old-acceptance-test-utils-3/acceptance/lambdas/<star>.ts.declapract.ts +18 -0
  221. package/dist/practices/testing/bad-practices/old-extension-pattern/.declapract.readme.md +3 -0
  222. package/dist/practices/testing/bad-practices/old-extension-pattern/<star><star>/<star>.test.acceptance.ts.declapract.ts +11 -0
  223. package/dist/practices/testing/bad-practices/old-extension-pattern/<star><star>/<star>.test.integration.ts.declapract.ts +11 -0
  224. package/dist/practices/testing/best-practice/.declapract.readme.md +45 -0
  225. package/dist/practices/testing/best-practice/acceptance/<star><star>/<star>.acceptance.test.ts.declapract.ts +3 -0
  226. package/dist/practices/testing/best-practice/acceptance/environment.ts +5 -0
  227. package/dist/practices/testing/best-practice/acceptance/lambdas/<star>.acceptance.test.ts.declapract.ts +32 -0
  228. package/dist/practices/testing/best-practice/jest.acceptance.config.js +15 -0
  229. package/dist/practices/testing/best-practice/jest.acceptance.env.js +2 -0
  230. package/dist/practices/testing/best-practice/jest.config.js +1 -0
  231. package/dist/practices/testing/best-practice/jest.integration.config.js +10 -0
  232. package/dist/practices/testing/best-practice/jest.integration.env.js +13 -0
  233. package/dist/practices/testing/best-practice/jest.unit.config.js +15 -0
  234. package/dist/practices/testing/best-practice/jest.unit.env.js +16 -0
  235. package/dist/practices/testing/best-practice/package.json +16 -0
  236. package/dist/practices/testing/best-practice/package.json.declapract.ts +3 -0
  237. package/dist/practices/testing/best-practice/src/<star><star>/<star>.integration.test.ts.declapract.ts +3 -0
  238. package/dist/practices/testing/best-practice/src/<star><star>/<star>.test.ts.declapract.ts +3 -0
  239. package/dist/practices/testing/best-practice/src/utils/environment.ts +3 -0
  240. package/dist/practices/testing/best-practice/src/utils/environment.ts.declapract.ts +3 -0
  241. package/dist/practices/testing/defineFunctionNameFromTestFileName.ts +11 -0
  242. package/dist/practices/typescript/best-practice/.declapract.readme.md +10 -0
  243. package/dist/practices/typescript/best-practice/package.json +12 -0
  244. package/dist/practices/typescript/best-practice/package.json.declapract.ts +3 -0
  245. package/dist/practices/typescript/best-practice/tsconfig.build.json +17 -0
  246. package/dist/practices/typescript/best-practice/tsconfig.json +18 -0
  247. package/dist/practices/uuid/bad-practices/npm-uuidv4/.declapract.readme.md +1 -0
  248. package/dist/practices/uuid/bad-practices/npm-uuidv4/package.json.declapract.ts +17 -0
  249. package/dist/practices/uuid/best-practice/.declapract.readme.md +1 -0
  250. package/dist/practices/uuid/best-practice/package.json +8 -0
  251. package/dist/practices/uuid/best-practice/package.json.declapract.ts +3 -0
  252. package/dist/useCases.yml +48 -0
  253. package/package.json +96 -0
  254. package/readme.md +39 -0
@@ -0,0 +1,3 @@
1
+ import { FileCheckType } from 'declapract';
2
+
3
+ export const check = FileCheckType.CONTAINS;
@@ -0,0 +1,9 @@
1
+ // ref: http://json.schemastore.org/prettierrc
2
+
3
+ module.exports = {
4
+ trailingComma: 'all',
5
+ tabWidth: 2,
6
+ singleQuote: true,
7
+ importOrder: ['^[./]'],
8
+ importOrderSeparation: true,
9
+ };
@@ -0,0 +1,5 @@
1
+ {
2
+ "devDependencies": {
3
+ "@types/joi": "@declapract{check.minVersion('0.0.0')}"
4
+ }
5
+ }
@@ -0,0 +1,18 @@
1
+ import { FileCheckType, FileFixFunction } from 'declapract';
2
+
3
+ export const check = FileCheckType.CONTAINS;
4
+
5
+ export const fix: FileFixFunction = (contents) => {
6
+ if (!contents) return { contents }; // do nothing if no contents
7
+ const packageJSON = JSON.parse(contents);
8
+ const updatedPackageJSON = {
9
+ ...packageJSON,
10
+ devDependencies: {
11
+ ...packageJSON.devDependencies,
12
+ '@types/joi': undefined,
13
+ },
14
+ };
15
+ return {
16
+ contents: JSON.stringify(updatedPackageJSON, null, 2),
17
+ };
18
+ };
@@ -0,0 +1 @@
1
+ joi updated their syntax and now throws an error if `.valid([])`, instead we need to give `.valid(...[])`
@@ -0,0 +1,15 @@
1
+ import { FileCheckFunction, FileFixFunction } from 'declapract';
2
+
3
+ export const check: FileCheckFunction = (contents) => {
4
+ if (contents?.includes('.valid(Object.values(')) return; // matches bad practice if this is found
5
+ throw new Error('passes, does not match bad practice');
6
+ };
7
+ export const fix: FileFixFunction = (contents) => {
8
+ if (!contents) return {};
9
+ return {
10
+ contents: contents.replace(
11
+ /\.valid\(Object\.values/g,
12
+ '.valid(...Object.values',
13
+ ),
14
+ };
15
+ };
@@ -0,0 +1,5 @@
1
+ {
2
+ "dependencies": {
3
+ "joi": "@declapract{check.minVersion('17.4.0')}"
4
+ }
5
+ }
@@ -0,0 +1,3 @@
1
+ import { FileCheckType } from 'declapract';
2
+
3
+ export const check = FileCheckType.CONTAINS;
@@ -0,0 +1,8 @@
1
+ {
2
+ "scripts": {
3
+ "deploy:release": "npm run build && sls deploy --verbose --stage $DEPLOYMENT_STAGE",
4
+ "deploy:send-notification": "curl -X POST -H 'Content-type: application/json' --data \"{\\\"text\\\":\\\"$([ -z $DEPLOYER_NAME ] && git config user.name || echo $DEPLOYER_NAME) has deployed $npm_package_name@v$npm_package_version:\nhttps://github.com/@declapract{variable.organizationName}/$npm_package_name/tree/v$npm_package_version\\\"}\" @declapract{variable.slackWebhookUrl}",
5
+ "deploy:dev": "DEPLOYMENT_STAGE=dev npm run deploy:release",
6
+ "deploy:prod": "DEPLOYMENT_STAGE=prod npm run deploy:release && npm run deploy:send-notification"
7
+ }
8
+ }
@@ -0,0 +1,23 @@
1
+ import { FileCheckFunction, FileFixFunction } from 'declapract';
2
+
3
+ export const check: FileCheckFunction = (contents) => {
4
+ if (!contents) throw new Error('does not match bad practice'); // no contents -> fine
5
+ const packageJSON = JSON.parse(contents);
6
+ if (packageJSON.scripts.deploy) return; // bad practice
7
+ throw new Error('does not match bad practice');
8
+ };
9
+
10
+ export const fix: FileFixFunction = (contents) => {
11
+ if (!contents) return { contents }; // do nothing if no contents
12
+ const packageJSON = JSON.parse(contents);
13
+ const updatedPackageJSON = {
14
+ ...packageJSON,
15
+ scripts: {
16
+ ...packageJSON.scripts,
17
+ deploy: undefined, // remove the deploy script
18
+ },
19
+ };
20
+ return {
21
+ contents: JSON.stringify(updatedPackageJSON, null, 2),
22
+ };
23
+ };
@@ -0,0 +1,6 @@
1
+ {
2
+ "devDependencies": {
3
+ "serverless-offline": "@declapract{check.minVersion('0.0.0')}",
4
+ "serverless-pseudo-parameters": "@declapract{check.minVersion('0.0.0')}"
5
+ }
6
+ }
@@ -0,0 +1,19 @@
1
+ import { FileCheckType, FileFixFunction } from 'declapract';
2
+
3
+ export const check = FileCheckType.CONTAINS;
4
+
5
+ export const fix: FileFixFunction = (contents) => {
6
+ if (!contents) return { contents }; // do nothing if no contents
7
+ const packageJSON = JSON.parse(contents);
8
+ const updatedPackageJSON = {
9
+ ...packageJSON,
10
+ devDependencies: {
11
+ ...packageJSON.devDependencies,
12
+ 'serverless-offline': undefined, // remove the dep
13
+ 'serverless-pseudo-parameters': undefined, // remove the deploy script
14
+ },
15
+ };
16
+ return {
17
+ contents: JSON.stringify(updatedPackageJSON, null, 2),
18
+ };
19
+ };
@@ -0,0 +1,11 @@
1
+ {
2
+ "devDependencies": {
3
+ "serverless": "@declapract{check.minVersion('2.57.0')}"
4
+ },
5
+ "scripts": {
6
+ "deploy:release": "npm run build && sls deploy --verbose --stage $DEPLOYMENT_STAGE",
7
+ "deploy:send-notification": "curl -X POST -H 'Content-type: application/json' --data \"{\\\"text\\\":\\\"$([ -z $DEPLOYER_NAME ] && git config user.name || echo $DEPLOYER_NAME) has deployed $npm_package_name@v$npm_package_version:\nhttps://github.com/@declapract{variable.organizationName}/$npm_package_name/tree/v$npm_package_version\\\"}\" @declapract{variable.slackWebhookUrl}",
8
+ "deploy:dev": "DEPLOYMENT_STAGE=dev npm run deploy:release",
9
+ "deploy:prod": "DEPLOYMENT_STAGE=prod npm run deploy:release && npm run deploy:send-notification"
10
+ }
11
+ }
@@ -0,0 +1,3 @@
1
+ import { FileCheckType } from 'declapract';
2
+
3
+ export const check = FileCheckType.CONTAINS;
@@ -0,0 +1,70 @@
1
+ service: @declapract{variable.projectName}
2
+
3
+ provider:
4
+ name: aws
5
+ runtime: nodejs16.x
6
+ memorySize: 1024 # optional, in MB, default is 1024
7
+ timeout: 10
8
+ stage: ${opt:stage}
9
+ stackTags:
10
+ app: @declapract{variable.organizationName}
11
+ environment: ${self:provider.stage}
12
+ product: ${self:service}
13
+ environment:
14
+ NODE_ENV: production # deploy with production optimizations of all resources, to make `dev` and `prod` stage deployments equivalent functionally (i.e., the same code paths in dev and prod)
15
+ DEPLOYMENT_STAGE: ${self:provider.stage} # deploy specifying which stage we're targeting, to enable targeting the correct config + resources (e.g., hit dev db -vs- prod db)
16
+ AWS_NODEJS_CONNECTION_REUSE_ENABLED: true # https://docs.aws.amazon.com/sdk-for-javascript/v2/developer-guide/node-reusing-connections.html
17
+ deploymentBucket: serverless-deployment-@declapract{variable.infrastructureNamespaceId}-${self:provider.stage}
18
+ vpc:
19
+ securityGroupIds:
20
+ - ${ssm:/tf/infrastructure/vpc/main/lambdaSecurityGroupId}
21
+ subnetIds:
22
+ - ${ssm:/tf/infrastructure/vpc/main/lambdaSubnet1Id}
23
+ - ${ssm:/tf/infrastructure/vpc/main/lambdaSubnet2Id}
24
+ - ${ssm:/tf/infrastructure/vpc/main/lambdaSubnet3Id}
25
+ iamRoleStatements:
26
+ # parameter store access
27
+ - Effect: 'Allow'
28
+ Action: 'ssm:DescribeParameters'
29
+ Resource: '*'
30
+ - Effect: 'Allow'
31
+ Action: 'ssm:GetParameters'
32
+ Resource: arn:aws:ssm:${aws:region}:${aws:accountId}:parameter/*
33
+ - Effect: 'Allow'
34
+ Action: 'kms:Decrypt'
35
+ Resource: arn:aws:kms:${aws:region}:${aws:accountId}:alias/aws/ssm*
36
+ # allow invocation of other lambdas
37
+ - Effect: Allow
38
+ Action:
39
+ - lambda:InvokeFunction
40
+ - lambda:InvokeAsync
41
+ Resource: '*'
42
+ # allow reading and writing to s3 buckets namespaced by this service
43
+ - Effect: Allow
44
+ Action:
45
+ - s3:ListObject
46
+ - s3:GetObject
47
+ - s3:PutObject
48
+ Resource: arn:aws:s3:${aws:region}:${aws:accountId}:${self:service}-*
49
+ # allow reading and writing to sqs queues namespaced to this service
50
+ - Effect: Allow
51
+ Action:
52
+ - sqs:SendMessage
53
+ - sqs:ReceiveMessage
54
+ - sqs:DeleteMessage
55
+ - sqs:GetQueueAttributes
56
+ Resource: arn:aws:sqs:${aws:region}:${aws:accountId}:${self:service}-*
57
+ # allow reading and writing to dynamodb tables namespaced to this service
58
+ - Effect: Allow
59
+ Action:
60
+ - dynamodb:DescribeTable
61
+ - dynamodb:Query
62
+ - dynamodb:Scan
63
+ - dynamodb:GetItem
64
+ - dynamodb:PutItem
65
+ Resource: arn:aws:dynamodb:${aws:region}:${aws:accountId}:table/${self:service}-*
66
+ # allow publishing to sns topics namespaced by this service
67
+ - Effect: Allow
68
+ Action:
69
+ - SNS:Publish
70
+ Resource: arn:aws:sns:${aws:region}:${aws:accountId}:${self:service}-*
@@ -0,0 +1,26 @@
1
+ import { FileCheckType } from 'declapract';
2
+ import { FileFixFunction } from 'declapract/dist/domain';
3
+
4
+ export const check = FileCheckType.CONTAINS; // i.e., check that the contents of the file contains what's declared (default is equals)
5
+
6
+ export const fix: FileFixFunction = (contents) => {
7
+ if (!contents) return { contents }; // do nothing if file dne; // TODO: update to provision file from declared contents
8
+ return {
9
+ contents: contents
10
+ .replace(/runtime\: nodejs\d\d.x/, 'runtime: nodejs14.x')
11
+ .replace('\nplugins:\n', '')
12
+ .replace(/ - serverless-offline .*\n/, '') // a plugin we no longer use (never used it, no need to have it)
13
+ .replace(/ - serverless-pseudo-parameters .*\n/, '') // a plugin we no longer use (serverless supports variables natively now)
14
+ .replace(/\#\{AWS\:\:Region\}/g, '${aws:region}') // use the serverless native variables, instead of the pseudo-parameters format
15
+ .replace(/\#\{AWS\:\:AccountId\}/g, '${aws:accountId}') // use the serverless native variables, instead of the pseudo-parameters format
16
+ .replace('## paramstore access', '# parameter store access')
17
+ .replace(
18
+ '## allow invocation of other lambdas',
19
+ '# allow invocation of other lambdas',
20
+ )
21
+ .replace(
22
+ 'NODE_ENV: ${self:custom.stageToNodeEnvMapping.${self:provider.stage}}\n deploymentBucket',
23
+ 'NODE_ENV: ${self:custom.stageToNodeEnvMapping.${self:provider.stage}}\n AWS_NODEJS_CONNECTION_REUSE_ENABLED: true # https://docs.aws.amazon.com/sdk-for-javascript/v2/developer-guide/node-reusing-connections.html\n deploymentBucket',
24
+ ), // add this env flag // TODO: when we have special support for yml, do this better (i.e., instead of string replace, just add to the yml object after parsing it)
25
+ };
26
+ };
@@ -0,0 +1,8 @@
1
+ having a `/provision/terraform` dir is bad practice since we use the tool terraform to provision multiple things:
2
+ - aws resources
3
+ - github resources
4
+ - etc
5
+
6
+ instead, those should be separately identified and managed with separate tf projects
7
+
8
+ we used to just manage aws-resources in each repo, so thats why this pattern originally existed
@@ -0,0 +1,12 @@
1
+ import { FileCheckType, FileFixFunction } from 'declapract';
2
+
3
+ export const check = FileCheckType.EXISTS;
4
+
5
+ export const fix: FileFixFunction = (_, context) => {
6
+ return {
7
+ relativeFilePath: context.relativeFilePath.replace(
8
+ 'provision/terraform/',
9
+ 'provision/aws/',
10
+ ),
11
+ };
12
+ };
@@ -0,0 +1,12 @@
1
+ import { FileCheckType, FileFixFunction } from 'declapract';
2
+
3
+ export const check = FileCheckType.EXISTS;
4
+
5
+ export const fix: FileFixFunction = (_, context) => {
6
+ return {
7
+ relativeFilePath: context.relativeFilePath.replace(
8
+ 'provision/terraform/',
9
+ 'provision/aws/',
10
+ ),
11
+ };
12
+ };
@@ -0,0 +1,12 @@
1
+ import { FileCheckType, FileFixFunction } from 'declapract';
2
+
3
+ export const check = FileCheckType.EXISTS;
4
+
5
+ export const fix: FileFixFunction = (_, context) => {
6
+ return {
7
+ relativeFilePath: context.relativeFilePath.replace(
8
+ 'provision/terraform/',
9
+ 'provision/aws/',
10
+ ),
11
+ };
12
+ };
@@ -0,0 +1,6 @@
1
+ {
2
+ "scripts": {
3
+ "fix:format:terraform": "terraform fmt -recursive provision",
4
+ "test:format:terraform": "terraform fmt -recursive -check provision"
5
+ }
6
+ }
@@ -0,0 +1,3 @@
1
+ import { FileCheckType } from 'declapract';
2
+
3
+ export const check = FileCheckType.CONTAINS;
@@ -0,0 +1,18 @@
1
+ provider "aws" {
2
+ region = "us-east-1"
3
+ allowed_account_ids = ["@declapract{variable.awsAccountId.dev}"] # `dev` environment resources are provisioned in the `dev` aws account
4
+ }
5
+
6
+ terraform {
7
+ backend "s3" {
8
+ bucket = "terraform-state-@declapract{variable.infrastructureNamespaceId}-dev"
9
+ key = "@declapract{variable.projectName}-dev"
10
+ region = "us-east-1"
11
+ encrypt = true
12
+ }
13
+ }
14
+
15
+ module "product" {
16
+ source = "../../product"
17
+ environment = "dev"
18
+ }
@@ -0,0 +1,9 @@
1
+ terraform {
2
+ required_version = ">= 0.14"
3
+ required_providers {
4
+ aws = {
5
+ source = "hashicorp/aws"
6
+ version = "3.74.3"
7
+ }
8
+ }
9
+ }
@@ -0,0 +1,18 @@
1
+ provider "aws" {
2
+ region = "us-east-1"
3
+ allowed_account_ids = ["@declapract{variable.awsAccountId.prod}"] # `prod` environment resources are provisioned in the `prod` aws account
4
+ }
5
+
6
+ terraform {
7
+ backend "s3" {
8
+ bucket = "terraform-state-@declapract{variable.infrastructureNamespaceId}-prod"
9
+ key = "@declapract{variable.projectName}-prod"
10
+ region = "us-east-1"
11
+ encrypt = true
12
+ }
13
+ }
14
+
15
+ module "product" {
16
+ source = "../../product"
17
+ environment = "prod"
18
+ }
@@ -0,0 +1,9 @@
1
+ terraform {
2
+ required_version = ">= 0.14"
3
+ required_providers {
4
+ aws = {
5
+ source = "hashicorp/aws"
6
+ version = "3.74.3"
7
+ }
8
+ }
9
+ }
@@ -0,0 +1,18 @@
1
+ provider "aws" {
2
+ region = "us-east-1"
3
+ allowed_account_ids = ["@declapract{variable.awsAccountId.dev}"] # `test` environment resources are provisioned in the `dev` aws account
4
+ }
5
+
6
+ terraform {
7
+ backend "s3" {
8
+ bucket = "terraform-state-@declapract{variable.infrastructureNamespaceId}-test"
9
+ key = "@declapract{variable.projectName}-test"
10
+ region = "us-east-1"
11
+ encrypt = true
12
+ }
13
+ }
14
+
15
+ module "product" {
16
+ source = "../../product"
17
+ environment = "test"
18
+ }
@@ -0,0 +1,9 @@
1
+ terraform {
2
+ required_version = ">= 0.14"
3
+ required_providers {
4
+ aws = {
5
+ source = "hashicorp/aws"
6
+ version = "3.74.3"
7
+ }
8
+ }
9
+ }
@@ -0,0 +1,14 @@
1
+ variable "environment" {}
2
+
3
+ locals {
4
+ service = "@declapract{variable.projectName}"
5
+ s3_namespace = "@declapract{variable.infrastructureNamespaceId}"
6
+ }
7
+
8
+ locals {
9
+ tags = {
10
+ app = "@declapract{variable.organizationName}"
11
+ environment = var.environment
12
+ product = local.service
13
+ }
14
+ }
@@ -0,0 +1,12 @@
1
+ # terraform... why cant you just look this stuff up given that you already have the inputs....
2
+ REPO_NAME='@declapract{variable.projectName}';
3
+
4
+ # import the repo itself
5
+ terraform import module.product.github_repository.this $REPO_NAME;
6
+
7
+ # import the default branch setting
8
+ terraform import module.product.github_branch_default.default_branch_is_main $REPO_NAME;
9
+
10
+ # import the branch protection rules
11
+ terraform import "module.product.github_branch_protection.main_branch[0]" $REPO_NAME:main
12
+
@@ -0,0 +1,20 @@
1
+ provider "github" {
2
+ owner = "@declapract{variable.organizationName}" # for the @declapract{variable.organizationName} organization
3
+ # note: `token` is sourced from env var GITHUB_TOKEN (e.g,. `use.github`)
4
+ }
5
+
6
+ terraform {
7
+ backend "s3" {
8
+ bucket = "terraform-state-@declapract{variable.infrastructureNamespaceId}-prod" # tracked in the prod aws account's s3 bucket, so `use.@declapract{variable.organizationName}.prod`
9
+ key = "@declapract{variable.projectName}-github"
10
+ region = "us-east-1"
11
+ encrypt = true
12
+ }
13
+ }
14
+
15
+ module "product" {
16
+ source = "../product"
17
+ name = "@declapract{variable.projectName}"
18
+ visibility = "private"
19
+ protected = true
20
+ }
@@ -0,0 +1,9 @@
1
+ terraform {
2
+ required_version = ">= 0.14"
3
+ required_providers {
4
+ github = {
5
+ source = "hashicorp/github"
6
+ version = "~> 4.19.1"
7
+ }
8
+ }
9
+ }
@@ -0,0 +1,70 @@
1
+ variable "name" {
2
+ type = string
3
+ }
4
+ variable "visibility" {
5
+ default = "private"
6
+ }
7
+ variable "protected" {
8
+ default = true
9
+ }
10
+
11
+ # the repository itself
12
+ resource "github_repository" "this" {
13
+ name = var.name
14
+ visibility = var.visibility
15
+
16
+ # standard settings
17
+ has_issues = true # only issues are allowed... todo: decide if there's too much overlap between linear and issues
18
+ has_projects = false
19
+ has_wiki = false
20
+ has_downloads = false
21
+ is_template = false
22
+ allow_squash_merge = true # only squash merges are allowed
23
+ allow_merge_commit = false # especially not merge merges. never merge merges
24
+ allow_rebase_merge = false
25
+ allow_auto_merge = true
26
+ delete_branch_on_merge = true # always delete branch on merging
27
+
28
+ lifecycle {
29
+ ignore_changes = [
30
+ description # dont worry about the description in these checks; the purpose of these checks is to check developer experience, not repo contents
31
+ ]
32
+ }
33
+ }
34
+
35
+ # the main branch (its "data" instead of a "resource" because 1. you cant create it w/ terraform anyway, 2. there's a constant "etag" out of sync with terraform)
36
+ data "github_branch" "main" {
37
+ repository = github_repository.this.name
38
+ branch = "main"
39
+ }
40
+
41
+ # set it as the default for this org
42
+ resource "github_branch_default" "default_branch_is_main" {
43
+ repository = github_repository.this.name
44
+ branch = data.github_branch.main.branch
45
+ }
46
+
47
+ # the branch protection rule on the main branch
48
+ resource "github_branch_protection" "main_branch" {
49
+ repository_id = github_repository.this.node_id
50
+ pattern = data.github_branch.main.branch
51
+
52
+ enforce_admins = true # yes, even admins need to follow this (note: they can still take the time to go and change the settings temporarily for the exceptions)
53
+ allows_deletions = false # dont allow the `main` branch to be deleted
54
+ allows_force_pushes = false # dont allow `main` branch to be force pushed to
55
+
56
+ required_status_checks {
57
+ strict = true # branch must be up to date. otherwise, we dont know if it will really pass once it is merged
58
+ contexts = [
59
+ "test-commits",
60
+ "test-types",
61
+ "test-format",
62
+ "test-lint",
63
+ "test-unit",
64
+ "test-integration",
65
+ "test-acceptance-locally"
66
+ ]
67
+ }
68
+
69
+ count = var.protected == false ? 0 : 1 # only define protection rules if this repository is marked as protected (default = true)
70
+ }
@@ -0,0 +1,8 @@
1
+ should not have any `__mock__` directories
2
+
3
+ these are hard to track down and are too "magical" and affect _all_ tests (i.e., inter test dependency)
4
+
5
+ just explicitly mocks manually in each test OR root level in setup env with:
6
+ ```ts
7
+ jest.mock("...");
8
+ ```
@@ -0,0 +1,3 @@
1
+ /**
2
+ * bad practice: file exists
3
+ */
@@ -0,0 +1,3 @@
1
+ /**
2
+ * bad practice: file exists
3
+ */
@@ -0,0 +1,3 @@
1
+ import { FileCheckType } from 'declapract';
2
+
3
+ export const check = FileCheckType.EXISTS;
@@ -0,0 +1,3 @@
1
+ import { FileCheckType } from 'declapract';
2
+
3
+ export const check = FileCheckType.EXISTS;
@@ -0,0 +1,44 @@
1
+ import { FileCheckFunction, FileFixFunction } from 'declapract';
2
+
3
+ import { getProjectVariables } from '../../../../../../getVariables';
4
+
5
+ export const check: FileCheckFunction = (contents) => {
6
+ if (
7
+ contents?.includes(`import { invokeLambda } from '../_utils/invokeLambda';`)
8
+ )
9
+ return; // then it matches bad practice
10
+ throw new Error('does not match bad practice');
11
+ };
12
+
13
+ export const fix: FileFixFunction = async (contents, context) => {
14
+ if (!contents) return {}; // do nothing if no contents. really, this shouldn't have been called
15
+ const { projectName } = await getProjectVariables(context);
16
+ return {
17
+ contents: contents
18
+ .replace(
19
+ // replace the bad import
20
+ `import { invokeLambda } from '../_utils/invokeLambda';`,
21
+ [
22
+ `import { invokeLambdaForTesting } from 'simple-lambda-testing-methods';`,
23
+ `import { stage } from '../../src/utils/environment';`,
24
+ `import { locally } from '../environment';`,
25
+ ].join('\n'),
26
+ )
27
+ .replace(
28
+ // replace calls to the fn
29
+ /invokeLambda\(\{/g,
30
+ 'invokeLambdaForTesting({',
31
+ )
32
+ .replace(
33
+ // replace the inputs
34
+ /name\: '(\w+)',/g,
35
+ [
36
+ `service: '${projectName}',`,
37
+ `function: '$1',`,
38
+ `stage,`,
39
+ `locally,`,
40
+ ].join('\n'),
41
+ )
42
+ .replace(/data\: /g, 'event: '),
43
+ };
44
+ };
@@ -0,0 +1,3 @@
1
+ import { FileCheckType } from 'declapract';
2
+
3
+ export const check = FileCheckType.EXISTS;
@@ -0,0 +1,22 @@
1
+ import { FileCheckFunction, FileFixFunction } from 'declapract';
2
+
3
+ export const check: FileCheckFunction = (contents) => {
4
+ if (
5
+ contents?.includes(
6
+ `import { locally } from '../__test_utils__/environment';`,
7
+ )
8
+ )
9
+ return; // then it matches bad practice
10
+ throw new Error('does not match bad practice');
11
+ };
12
+
13
+ export const fix: FileFixFunction = async (contents) => {
14
+ if (!contents) return {}; // do nothing if no contents. really, this shouldn't have been called
15
+ return {
16
+ contents: contents.replace(
17
+ // replace the bad import
18
+ `import { locally } from '../__test_utils__/environment';`,
19
+ `import { locally } from '../environment';`,
20
+ ),
21
+ };
22
+ };