declapract-typescript-ehmpathy 0.49.14 → 0.50.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/.test/assets/cicd-common/declarations/declapract.declare.yml +8 -0
- package/dist/.test/assets/cicd-common/declarations/practices/cicd-common/.declapract.integration.test.ts +597 -0
- package/dist/.test/assets/cicd-common/declarations/practices/cicd-common/.test/assets/repo-with-unpinned-workflow/.github/workflows/.test.yml +19 -0
- package/dist/.test/assets/cicd-common/declarations/practices/cicd-common/.test/assets/repo-with-unpinned-workflow/.github/workflows/consumer-owned.yml +21 -0
- package/dist/.test/assets/cicd-common/declarations/practices/cicd-common/.test/assets/repo-with-unpinned-workflow/.github/workflows/review.yml +26 -0
- package/dist/.test/assets/cicd-common/declarations/practices/cicd-common/.test/assets/repo-with-unpinned-workflow/declapract.use.yml +6 -0
- package/dist/.test/assets/cicd-common/declarations/practices/cicd-common/.test/assets/repo-with-unpinned-workflow/package.json +4 -0
- package/dist/.test/assets/cicd-common/declarations/practices/cicd-common/__snapshots__/.declapract.integration.test.ts.snap +604 -0
- package/dist/.test/assets/cicd-common/declarations/practices/cicd-common/__snapshots__/declastruct-insync-grep.declapract.integration.test.ts.snap +3 -0
- package/dist/.test/assets/cicd-common/declarations/practices/cicd-common/__snapshots__/report-slow-tests.play.declapract.integration.test.ts.snap +28 -0
- package/dist/.test/assets/cicd-common/declarations/practices/cicd-common/bad-practices/has-changelog-file/changelog.md.declapract.ts +11 -0
- package/dist/.test/assets/cicd-common/declarations/practices/cicd-common/bad-practices/old-names/.github/workflows/ci-on-commit.yml.declapract.ts +3 -0
- package/dist/.test/assets/cicd-common/declarations/practices/cicd-common/bad-practices/old-names/.github/workflows/ci_on_commit.yml.declapract.ts +3 -0
- package/dist/.test/assets/cicd-common/declarations/practices/cicd-common/bad-practices/old-names/.github/workflows/pr-release-on-main.yml.declapract.ts +3 -0
- package/dist/.test/assets/cicd-common/declarations/practices/cicd-common/bad-practices/old-names/.github/workflows/test-on-commit.yml.declapract.ts +3 -0
- package/dist/.test/assets/cicd-common/declarations/practices/cicd-common/bad-practices/old-names/.github/workflows/test_on_commit.yml.declapract.ts +3 -0
- package/dist/.test/assets/cicd-common/declarations/practices/cicd-common/bad-practices/old-use-apikeys/.agent/repo=.this/role=any/skills/use.apikeys.json.declapract.ts +7 -0
- package/dist/.test/assets/cicd-common/declarations/practices/cicd-common/bad-practices/old-use-apikeys/.agent/repo=.this/role=any/skills/use.apikeys.sh.declapract.ts +7 -0
- package/dist/.test/assets/cicd-common/declarations/practices/cicd-common/best-practice/.declapract.readme.md +8 -0
- package/dist/.test/assets/cicd-common/declarations/practices/cicd-common/best-practice/.github/actions/please-release/action.yml +469 -0
- package/dist/.test/assets/cicd-common/declarations/practices/cicd-common/best-practice/.github/actions/test-shards-setup/action.yml +68 -0
- package/dist/.test/assets/cicd-common/declarations/practices/cicd-common/best-practice/.github/workflows/.declastruct.yml +218 -0
- package/dist/.test/assets/cicd-common/declarations/practices/cicd-common/best-practice/.github/workflows/.install.yml +56 -0
- package/dist/.test/assets/cicd-common/declarations/practices/cicd-common/best-practice/.github/workflows/.test.yml +434 -0
- package/dist/.test/assets/cicd-common/declarations/practices/cicd-common/best-practice/.github/workflows/.test.yml.declapract.ts +26 -0
- package/dist/.test/assets/cicd-common/declarations/practices/cicd-common/best-practice/.github/workflows/release.yml +32 -0
- package/dist/.test/assets/cicd-common/declarations/practices/cicd-common/best-practice/.github/workflows/report-slow-tests.sh +65 -0
- package/dist/.test/assets/cicd-common/declarations/practices/cicd-common/best-practice/.github/workflows/review.yml +26 -0
- package/dist/.test/assets/cicd-common/declarations/practices/cicd-common/best-practice/.github/workflows/test.yml +25 -0
- package/dist/.test/assets/cicd-common/declarations/practices/cicd-common/best-practice/.github/workflows/test.yml.declapract.ts +15 -0
- package/dist/.test/assets/cicd-common/declarations/practices/cicd-common/declastruct-insync-grep.declapract.integration.test.ts +49 -0
- package/dist/.test/assets/cicd-common/declarations/practices/cicd-common/report-slow-tests.play.declapract.integration.test.ts +161 -0
- package/dist/.test/assets/cicd-common/declarations/useCases.yml +11 -0
- package/dist/.test/assets/cicd-service/declarations/practices/persist-with-rds/.test/assets/repo-with-hand-patch/declapract.use.yml +4 -0
- package/dist/.test/assets/cicd-service/declarations/practices/persist-with-rds/.test/assets/repo-with-hand-patch/package.json +17 -0
- package/dist/.test/assets/cicd-service/declarations/practices/persist-with-rds/.test/assets/repo-with-hand-patch/patches/left-pad@1.3.0.patch +6 -0
- package/dist/.test/assets/cicd-service/declarations/practices/persist-with-rds/.test/assets/repo-with-hand-patch/patches/pg-pool@3.14.0.patch +12 -0
- package/dist/.test/assets/cicd-service/declarations/practices/persist-with-rds/__snapshots__/pg-pool-patch.declapract.integration.test.ts.snap +147 -0
- package/dist/.test/assets/cicd-service/declarations/practices/persist-with-rds/best-practice/.declapract.readme.md +29 -0
- package/dist/.test/assets/cicd-service/declarations/practices/persist-with-rds/best-practice/.gitattributes.declapract.ts +64 -0
- package/dist/.test/assets/cicd-service/declarations/practices/persist-with-rds/best-practice/package.json +5 -0
- package/dist/.test/assets/cicd-service/declarations/practices/persist-with-rds/best-practice/patches/pg-pool.patch +21 -0
- package/dist/.test/assets/cicd-service/declarations/practices/persist-with-rds/pg-pool-patch.declapract.integration.test.ts +884 -0
- package/dist/.test/assets/expo-fullusecase/declarations/practices/cicd-common/.declapract.integration.test.ts +15 -21
- package/dist/.test/assets/expo-fullusecase/declarations/practices/git/.declapract.integration.test.ts +2 -2
- package/dist/.test/assets/expo-fullusecase/declarations/practices/git/.gitattributes.declapract.integration.test.ts +34 -19
- package/dist/.test/assets/expo-fullusecase/declarations/practices/git/.test/assets/repo-with-legacy-gitattributes/declapract.use.yml +3 -3
- package/dist/.test/assets/expo-fullusecase/declarations/practices/git/__snapshots__/.gitattributes.declapract.integration.test.ts.snap +4 -4
- package/dist/.test/assets/expo-fullusecase/declarations/practices/git/best-practice/.declapract.readme.md +37 -0
- package/dist/.test/assets/expo-fullusecase/declarations/practices/git/best-practice/.gitattributes.declapract.ts +42 -63
- package/dist/.test/assets/expo-fullusecase/declarations/practices/pnpm/.test/assets/repo-stale-patch-beside-bare/declapract.use.yml +4 -0
- package/dist/.test/assets/expo-fullusecase/declarations/practices/pnpm/.test/assets/repo-stale-patch-beside-bare/package.json +15 -0
- package/dist/.test/assets/expo-fullusecase/declarations/practices/pnpm/.test/assets/repo-stale-patch-beside-bare/patches/rhachet-roles-ehmpathy.patch +6 -0
- package/dist/.test/assets/expo-fullusecase/declarations/practices/pnpm/.test/assets/repo-stale-patch-beside-bare/patches/rhachet-roles-ehmpathy@1.39.1.patch +6 -0
- package/dist/.test/assets/expo-fullusecase/declarations/practices/pnpm/.test/assets/repo-stale-patch-beside-bare/patches/type-fns@1.21.3.patch +6 -0
- package/dist/.test/assets/expo-fullusecase/declarations/practices/pnpm/.test/assets/repo-stale-patch-beside-bare/pnpm-lock.yaml +19 -0
- package/dist/.test/assets/expo-fullusecase/declarations/practices/pnpm/__snapshots__/stale-patched-dependency.declapract.integration.test.ts.snap +39 -0
- package/dist/.test/assets/expo-fullusecase/declarations/practices/pnpm/stale-patched-dependency.declapract.integration.test.ts +53 -0
- package/dist/.test/assets/expo-fullusecase/declarations/practices/rhachet/best-practice/.declapract.readme.md +8 -0
- package/dist/.test/assets/expo-fullusecase/declarations/practices/rhachet/best-practice/.gitattributes.declapract.ts +65 -0
- package/dist/.test/assets/expo-fullusecase/declarations/practices/tests-any/best-practice/.declapract.readme.md +7 -0
- package/dist/.test/assets/expo-fullusecase/declarations/practices/tests-any/best-practice/.gitattributes.declapract.ts +60 -0
- package/dist/.test/assets/expo-migration/declarations/practices/git/.declapract.integration.test.ts +2 -2
- package/dist/.test/assets/expo-migration/declarations/practices/git/.gitattributes.declapract.integration.test.ts +34 -19
- package/dist/.test/assets/expo-migration/declarations/practices/git/.test/assets/repo-with-legacy-gitattributes/declapract.use.yml +3 -3
- package/dist/.test/assets/expo-migration/declarations/practices/git/__snapshots__/.gitattributes.declapract.integration.test.ts.snap +4 -4
- package/dist/.test/assets/expo-migration/declarations/practices/git/best-practice/.declapract.readme.md +37 -0
- package/dist/.test/assets/expo-migration/declarations/practices/git/best-practice/.gitattributes.declapract.ts +42 -63
- package/dist/.test/assets/expo-migration/declarations/practices/pnpm/.test/assets/repo-stale-patch-beside-bare/declapract.use.yml +4 -0
- package/dist/.test/assets/expo-migration/declarations/practices/pnpm/.test/assets/repo-stale-patch-beside-bare/package.json +15 -0
- package/dist/.test/assets/expo-migration/declarations/practices/pnpm/.test/assets/repo-stale-patch-beside-bare/patches/rhachet-roles-ehmpathy.patch +6 -0
- package/dist/.test/assets/expo-migration/declarations/practices/pnpm/.test/assets/repo-stale-patch-beside-bare/patches/rhachet-roles-ehmpathy@1.39.1.patch +6 -0
- package/dist/.test/assets/expo-migration/declarations/practices/pnpm/.test/assets/repo-stale-patch-beside-bare/patches/type-fns@1.21.3.patch +6 -0
- package/dist/.test/assets/expo-migration/declarations/practices/pnpm/.test/assets/repo-stale-patch-beside-bare/pnpm-lock.yaml +19 -0
- package/dist/.test/assets/expo-migration/declarations/practices/pnpm/__snapshots__/stale-patched-dependency.declapract.integration.test.ts.snap +39 -0
- package/dist/.test/assets/expo-migration/declarations/practices/pnpm/stale-patched-dependency.declapract.integration.test.ts +53 -0
- package/dist/.test/assets/expo-migration/declarations/practices/rhachet/best-practice/.declapract.readme.md +8 -0
- package/dist/.test/assets/expo-migration/declarations/practices/rhachet/best-practice/.gitattributes.declapract.ts +65 -0
- package/dist/.test/assets/expo-migration/declarations/practices/tests-any/best-practice/.declapract.readme.md +7 -0
- package/dist/.test/assets/expo-migration/declarations/practices/tests-any/best-practice/.gitattributes.declapract.ts +60 -0
- package/dist/.test/assets/expo-toolchain/declarations/practices/tests-any/best-practice/.declapract.readme.md +7 -0
- package/dist/.test/assets/expo-toolchain/declarations/practices/tests-any/best-practice/.gitattributes.declapract.ts +60 -0
- package/dist/.test/assets/git/declarations/declapract.declare.yml +8 -0
- package/dist/.test/assets/git/declarations/practices/git/.declapract.integration.test.ts +1001 -0
- package/dist/.test/assets/git/declarations/practices/git/.gitattributes.declapract.integration.test.ts +120 -0
- package/dist/.test/assets/git/declarations/practices/git/.test/assets/repo-with-legacy-gitattributes/.gitattributes +6 -0
- package/dist/.test/assets/git/declarations/practices/git/.test/assets/repo-with-legacy-gitattributes/declapract.use.yml +7 -0
- package/dist/.test/assets/git/declarations/practices/git/.test/assets/repo-with-legacy-gitattributes/package.json +4 -0
- package/dist/.test/assets/git/declarations/practices/git/.test/assets/repo-with-rhachet-only/declapract.use.yml +6 -0
- package/dist/.test/assets/git/declarations/practices/git/.test/assets/repo-with-rhachet-only/package.json +4 -0
- package/dist/.test/assets/git/declarations/practices/git/.test/assets/repo-without-cache-ignores/declapract.use.yml +9 -0
- package/dist/.test/assets/git/declarations/practices/git/.test/assets/repo-without-cache-ignores/package.json +4 -0
- package/dist/.test/assets/git/declarations/practices/git/__snapshots__/.declapract.integration.test.ts.snap +55 -0
- package/dist/.test/assets/git/declarations/practices/git/__snapshots__/.gitattributes.declapract.integration.test.ts.snap +24 -0
- package/dist/.test/assets/git/declarations/practices/git/best-practice/.declapract.readme.md +60 -0
- package/dist/.test/assets/git/declarations/practices/git/best-practice/.gitattributes.declapract.ts +77 -0
- package/dist/.test/assets/git/declarations/practices/git/best-practice/.gitignore.declapract.ts +100 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-dynamodb/.declapract.integration.test.ts +181 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-dynamodb/.test/assets/demo-repo-with-dynamodb/declapract.declare.yml +4 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-dynamodb/.test/assets/demo-repo-with-dynamodb/declapract.use.yml +11 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-dynamodb/.test/assets/demo-repo-with-dynamodb/package.json +1 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-dynamodb/.test/assets/demo-repo-with-dynamodb/useCases.yml +8 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-dynamodb/__snapshots__/.declapract.integration.test.ts.snap +234 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-dynamodb/best-practice/.gitattributes.declapract.ts +56 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-dynamodb/best-practice/codegen.dynamodb.dao.ts +16 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-dynamodb/best-practice/package.json +16 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-dynamodb/best-practice/package.json.declapract.ts +3 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-dynamodb/best-practice/provision/docker/integration-test-db/docker-compose.yml +9 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/.declapract.integration.test.ts +237 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/.extensions.sql.declapract.integration.test.ts +159 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/.test/assets/demo-repo-config-schema/declapract.use.yml +20 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/.test/assets/demo-repo-config-schema/declarations/declapract.declare.yml +6 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/.test/assets/demo-repo-config-schema/package.json +4 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/.test/assets/demo-repo-on-a-prior-major/codegen.sql.dao.yml +20 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/.test/assets/demo-repo-on-a-prior-major/declapract.declare.yml +4 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/.test/assets/demo-repo-on-a-prior-major/declapract.use.yml +19 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/.test/assets/demo-repo-on-a-prior-major/package.json +4 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/.test/assets/demo-repo-on-a-prior-major/provision/docker/testdb/build-image.dockerfile +6 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/.test/assets/demo-repo-with-custom-extensions/declapract.declare.yml +4 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/.test/assets/demo-repo-with-custom-extensions/declapract.use.yml +21 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/.test/assets/demo-repo-with-custom-extensions/package.json +4 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/.test/assets/demo-repo-with-custom-extensions/provision/schema/sql/init/.extensions.sql +9 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/.test/assets/demo-repo-with-dev-config/config/dev.json +18 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/.test/assets/demo-repo-with-dev-config/declapract.declare.yml +4 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/.test/assets/demo-repo-with-dev-config/declapract.use.yml +18 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/.test/assets/demo-repo-with-dev-config/package.json +4 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/.test/assets/repo-with-hand-patch/declapract.use.yml +4 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/.test/assets/repo-with-hand-patch/package.json +17 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/.test/assets/repo-with-hand-patch/patches/left-pad@1.3.0.patch +6 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/.test/assets/repo-with-hand-patch/patches/pg-pool@3.14.0.patch +12 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/__snapshots__/.declapract.integration.test.ts.snap +45 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/__snapshots__/.extensions.sql.declapract.integration.test.ts.snap +77 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/__snapshots__/config-validates-schema.declapract.integration.test.ts.snap +500 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/__snapshots__/database-wrappers-typecheck.declapract.integration.test.ts.snap +10 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/__snapshots__/deploy-database-gerunds.declapract.integration.test.ts.snap +102 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/__snapshots__/engine-upgrade.declapract.integration.test.ts.snap +151 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/__snapshots__/pg-pool-patch.declapract.integration.test.ts.snap +147 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/__snapshots__/provision-testdb-access.declapract.integration.test.ts.snap +3 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/__snapshots__/ssm-param-names.declapract.integration.test.ts.snap +9 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/__snapshots__/testdb-preflight-failloud.declapract.integration.test.ts.snap +30 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/__snapshots__/with-connection-in-input.declapract.integration.test.ts.snap +57 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/bad-practices/legacy-change-id/.declapract.integration.test.ts +71 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/bad-practices/legacy-change-id/.declapract.readme.md +6 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/bad-practices/legacy-change-id/.test/assets/demo-repo-with-legacy-change-id/declapract.declare.yml +4 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/bad-practices/legacy-change-id/.test/assets/demo-repo-with-legacy-change-id/declapract.use.yml +19 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/bad-practices/legacy-change-id/.test/assets/demo-repo-with-legacy-change-id/package.json +4 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/bad-practices/legacy-change-id/.test/assets/demo-repo-with-legacy-change-id/provision/schema/sql/init.yml +15 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/bad-practices/legacy-change-id/__snapshots__/.declapract.integration.test.ts.snap +39 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/bad-practices/legacy-change-id/provision/schema/<star><star>/<star>.yml.declapract.ts +68 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/bad-practices/non-prefixed-manual-init-sqls/.declapract.readme.md +5 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/bad-practices/non-prefixed-manual-init-sqls/provision/schema/sql/init/database.sql.declapract.ts +3 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/bad-practices/non-prefixed-manual-init-sqls/provision/schema/sql/init/extensions.sql.declapract.ts +13 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/bad-practices/non-prefixed-manual-init-sqls/provision/schema/sql/init/schema.sql.declapract.ts +3 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/bad-practices/non-prefixed-manual-init-sqls/provision/schema/sql/init/user.cicd.sql.declapract.ts +3 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/bad-practices/non-prefixed-manual-init-sqls/provision/schema/sql/init/user.datalakedb.sql.declapract.ts +3 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/bad-practices/old-config-file-names/codegen.sql.yml.declapract.ts +3 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/bad-practices/old-dev-config-location/config/dev.json.declapract.ts +23 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/bad-practices/old-get-database-connection/.declapract.integration.test.ts +221 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/bad-practices/old-get-database-connection/.declapract.readme.md +11 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/bad-practices/old-get-database-connection/.test/assets/demo-repo-with-old-get-database-connection/declapract.declare.yml +4 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/bad-practices/old-get-database-connection/.test/assets/demo-repo-with-old-get-database-connection/declapract.use.yml +19 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/bad-practices/old-get-database-connection/.test/assets/demo-repo-with-old-get-database-connection/package.json +4 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/bad-practices/old-get-database-connection/.test/assets/demo-repo-with-old-get-database-connection/src/access/daos/daoSurfer.ts +15 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/bad-practices/old-get-database-connection/.test/assets/demo-repo-with-old-get-database-connection/src/domain.operations/getSurfLesson.ts +14 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/bad-practices/old-get-database-connection/.test/assets/demo-repo-with-old-get-database-connection/src/utils/database/getDatabaseConnection.integration.test.ts +10 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/bad-practices/old-get-database-connection/.test/assets/demo-repo-with-old-get-database-connection/src/utils/database/getDatabaseConnection.ts +68 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/bad-practices/old-get-database-connection/.test/assets/old-templates/getDatabaseConnection.3a193e5.ts +65 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/bad-practices/old-get-database-connection/.test/assets/old-templates/getDatabaseConnection.66284e3.ts +30 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/bad-practices/old-get-database-connection/.test/assets/old-templates/getDatabaseConnection.68cf8ba.ts +90 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/bad-practices/old-get-database-connection/.test/assets/old-templates/getDatabaseConnection.9e1bdc4.ts +65 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/bad-practices/old-get-database-connection/.test/assets/old-templates/getDatabaseConnection.c6cef7e.ts +68 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/bad-practices/old-get-database-connection/.test/assets/old-templates/getDatabaseConnection.c8eb35b.ts +90 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/bad-practices/old-get-database-connection/.test/assets/old-templates/getDatabaseConnection.d1e8cd7.ts +31 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/bad-practices/old-get-database-connection/.test/assets/old-templates/getDatabaseConnection.e0c53d8.ts +90 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/bad-practices/old-get-database-connection/.test/assets/old-templates/getDatabaseConnection.eab15c0.ts +89 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/bad-practices/old-get-database-connection/.test/assets/old-templates/getDatabaseConnection.ef25ae0.ts +32 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/bad-practices/old-get-database-connection/.test/assets/old-templates/getDatabaseConnection.integration.test.66284e3.ts +10 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/bad-practices/old-get-database-connection/__snapshots__/.declapract.integration.test.ts.snap +75 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/bad-practices/old-get-database-connection/src/<star><star>/<star>.ts.declapract.ts +33 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/bad-practices/old-get-database-connection/src/utils/database/getDatabaseConnection.integration.test.ts.declapract.ts +43 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/bad-practices/old-get-database-connection/src/utils/database/getDatabaseConnection.ts.declapract.ts +51 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/bad-practices/old-integration-test-db-dir/.declapract.readme.md +1 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/bad-practices/old-integration-test-db-dir/provision/docker/integration_test_db/<star><star>/<star>.declapract.ts +15 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/bad-practices/old-integration-test-db-hyphen-dir/.declapract.readme.md +1 -0
- package/dist/.test/assets/git/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
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/bad-practices/old-integration-test-db-paths/.declapract.readme.md +1 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/bad-practices/old-integration-test-db-paths/package.json +8 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/bad-practices/old-integration-test-db-paths/package.json.declapract.ts +10 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/bad-practices/old-packagejson-script-names/package.json +9 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/bad-practices/old-packagejson-script-names/package.json.declapract.ts +22 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/bad-practices/old-param-placeholder/config/<star>.json.declapract.ts +14 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/bad-practices/pg-client-without-ssl/.declapract.integration.test.ts +86 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/bad-practices/pg-client-without-ssl/.declapract.readme.md +9 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/bad-practices/pg-client-without-ssl/.test/assets/demo-repo-with-plaintext-pg-client/declapract.declare.yml +4 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/bad-practices/pg-client-without-ssl/.test/assets/demo-repo-with-plaintext-pg-client/declapract.use.yml +19 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/bad-practices/pg-client-without-ssl/.test/assets/demo-repo-with-plaintext-pg-client/package.json +4 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/bad-practices/pg-client-without-ssl/.test/assets/demo-repo-with-plaintext-pg-client/src/access/sdks/sdkWaveArchive.ts +7 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/bad-practices/pg-client-without-ssl/.test/assets/demo-repo-with-plaintext-pg-client/src/utils/database/getSurfReportConnection.ts +19 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/bad-practices/pg-client-without-ssl/__snapshots__/.declapract.integration.test.ts.snap +72 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/bad-practices/pg-client-without-ssl/src/<star><star>/<star>.ts.declapract.ts +32 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/bad-practices/schema-entities-dir/.declapract.readme.md +1 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/bad-practices/schema-entities-dir/provision/schema/entities/<star>.ts.declapract.ts +12 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/bad-practices/schema-entities-dir/provision/schema/sql/entities.yml.declapract.ts +13 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/bad-practices/terraform-parameters/.declapract.integration.test.ts +95 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/bad-practices/terraform-parameters/.test/assets/demo-repo-with-terraform-ssm/declapract.declare.yml +4 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/bad-practices/terraform-parameters/.test/assets/demo-repo-with-terraform-ssm/declapract.use.yml +18 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/bad-practices/terraform-parameters/.test/assets/demo-repo-with-terraform-ssm/package.json +4 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/bad-practices/terraform-parameters/.test/assets/demo-repo-with-terraform-ssm/provision/aws/product/parameter-store.tf +32 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/bad-practices/terraform-parameters/__snapshots__/.declapract.integration.test.ts.snap +60 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/bad-practices/terraform-parameters/provision/aws/product/parameter-store.tf.declapract.ts +94 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/bad-practices/with-connection-in-input/.declapract.readme.md +10 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/bad-practices/with-connection-in-input/.test/assets/demo-repo-with-connection-in-input/declapract.use.yml +2 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/bad-practices/with-connection-in-input/.test/assets/demo-repo-with-connection-in-input/package.json +4 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/bad-practices/with-connection-in-input/.test/assets/demo-repo-with-connection-in-input/src/domain.operations/findSurferById.ts +9 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/bad-practices/with-connection-in-input/.test/assets/demo-repo-with-connection-in-input/src/utils/database/withDatabaseConnection.ts +10 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/bad-practices/with-connection-in-input/src/<star><star>/<star>.ts.declapract.ts +55 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/best-practice/.declapract.readme.md +114 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/best-practice/.gitattributes.declapract.ts +64 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/best-practice/codegen.sql.dao.yml +18 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/best-practice/codegen.sql.dao.yml.declapract.ts +35 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/best-practice/codegen.sql.schema.yml +6 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/best-practice/codegen.sql.types.yml +16 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/best-practice/config/prep.json +40 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/best-practice/config/prep.json.declapract.ts +11 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/best-practice/config/prod.json +40 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/best-practice/config/prod.json.declapract.ts +11 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/best-practice/config/test.json +37 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/best-practice/config/test.json.declapract.ts +11 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/best-practice/package.json +36 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/best-practice/package.json.declapract.ts +3 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/best-practice/patches/pg-pool.patch +21 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/best-practice/provision/aws/readme.md +113 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/best-practice/provision/aws/resources.parameters.ts +60 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/best-practice/provision/aws/resources.ts +30 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/best-practice/provision/docker/testdb/build-image.dockerfile +7 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/best-practice/provision/docker/testdb/build-image.dockerfile.declapract.ts +37 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/best-practice/provision/docker/testdb/check-engine-skew.integration.test.ts +115 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/best-practice/provision/docker/testdb/check-engine-skew.sh +165 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/best-practice/provision/docker/testdb/compose.sh +43 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/best-practice/provision/docker/testdb/docker-compose.yml +19 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/best-practice/provision/docker/testdb/init/.gitignore +3 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/best-practice/provision/docker/testdb/init/readme.md +3 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/best-practice/provision/docker/testdb/wait-for-postgres.sh +25 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/best-practice/provision/schema/connection.config.js +36 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/best-practice/provision/schema/control.yml +7 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/best-practice/provision/schema/deploy.database.sh +97 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/best-practice/provision/schema/sql/init/.database.sql +10 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/best-practice/provision/schema/sql/init/.extensions.sql +16 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/best-practice/provision/schema/sql/init/.extensions.sql.declapract.ts +46 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/best-practice/provision/schema/sql/init/.schema.sql +11 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/best-practice/provision/schema/sql/init/.user.cicd.sql +14 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/best-practice/provision/schema/sql/init/.user.datalakedb.sql +12 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/best-practice/provision/schema/sql/init/default_transaction_isolation.sql +6 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/best-practice/provision/schema/sql/init/user.service.sql +16 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/best-practice/provision/schema/sql/init.yml +9 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/best-practice/provision/schema/sql/init.yml.declapract.ts +3 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/best-practice/src/.test/assets/database/getTestdbIdentity.ts +52 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/best-practice/src/.test/assets/database/getTestdbPort.ts +17 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/best-practice/src/utils/config/config.schema.ts +77 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/best-practice/src/utils/database/asDatabaseClientSsl.test.ts +82 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/best-practice/src/utils/database/asDatabaseClientSsl.ts +52 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/best-practice/src/utils/database/databaseClientTimeouts.ts +14 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/best-practice/src/utils/database/getOneDatabaseConnection.integration.test.ts +10 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/best-practice/src/utils/database/getOneDatabaseConnection.ts +119 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/best-practice/src/utils/database/getOneDatabasePort.ts +30 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/best-practice/src/utils/database/rdsCaBundleUsEast1.test.ts +51 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/best-practice/src/utils/database/rdsCaBundleUsEast1.ts +86 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/best-practice/src/utils/database/withDatabaseContext.ts +54 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/best-practice/src/utils/database/withDatabaseTransaction.ts +35 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/config-validates-schema.declapract.integration.test.ts +332 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/database-client.declapract.integration.test.ts +291 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/database-wrappers-typecheck.declapract.integration.test.ts +225 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/deploy-database-gerunds.declapract.integration.test.ts +57 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/empty-template-declares-zero-clusters.declapract.integration.test.ts +71 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/engine-upgrade.declapract.integration.test.ts +243 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/pg-pool-patch.declapract.integration.test.ts +884 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/provision-testdb-access.declapract.integration.test.ts +50 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/ssm-param-names.declapract.integration.test.ts +154 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/testdb-per-worktree.declapract.integration.test.ts +332 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/testdb-preflight-failloud.declapract.integration.test.ts +83 -0
- package/dist/.test/assets/git/declarations/practices/persist-with-rds/with-connection-in-input.declapract.integration.test.ts +97 -0
- package/dist/.test/assets/git/declarations/practices/rhachet/.declapract.integration.test.ts +98 -0
- package/dist/.test/assets/git/declarations/practices/rhachet/.test/assets/demo-repo-with-consumer-boot/.agent/repo=.this/role=any/boot.yml +9 -0
- package/dist/.test/assets/git/declarations/practices/rhachet/.test/assets/demo-repo-with-consumer-boot/declapract.declare.yml +4 -0
- package/dist/.test/assets/git/declarations/practices/rhachet/.test/assets/demo-repo-with-consumer-boot/declapract.use.yml +2 -0
- package/dist/.test/assets/git/declarations/practices/rhachet/.test/assets/demo-repo-with-consumer-boot/package.json +4 -0
- package/dist/.test/assets/git/declarations/practices/rhachet/.test/assets/repo-keyrack-extant/.agent/keyrack.yml +9 -0
- package/dist/.test/assets/git/declarations/practices/rhachet/.test/assets/repo-keyrack-extant/declapract.use.node.yml +4 -0
- package/dist/.test/assets/git/declarations/practices/rhachet/.test/assets/repo-keyrack-extant/declapract.use.yml +4 -0
- package/dist/.test/assets/git/declarations/practices/rhachet/.test/assets/repo-keyrack-extant/package.json +4 -0
- package/dist/.test/assets/git/declarations/practices/rhachet/.test/assets/repo-self-linked/declapract.use.yml +4 -0
- package/dist/.test/assets/git/declarations/practices/rhachet/.test/assets/repo-self-linked/package.json +22 -0
- package/dist/.test/assets/git/declarations/practices/rhachet/__snapshots__/.declapract.integration.test.ts.snap +46 -0
- package/dist/.test/assets/git/declarations/practices/rhachet/__snapshots__/boot-refs-glossary.declapract.integration.test.ts.snap +6 -0
- package/dist/.test/assets/git/declarations/practices/rhachet/__snapshots__/boot-yml-findsert.declapract.integration.test.ts.snap +33 -0
- package/dist/.test/assets/git/declarations/practices/rhachet/__snapshots__/keyrack-yml-findsert.declapract.integration.test.ts.snap +28 -0
- package/dist/.test/assets/git/declarations/practices/rhachet/__snapshots__/self-link-build-order.declapract.integration.test.ts.snap +81 -0
- package/dist/.test/assets/git/declarations/practices/rhachet/bad-practices/deprecated-use-file/.declapract.readme.md +11 -0
- package/dist/.test/assets/git/declarations/practices/rhachet/bad-practices/deprecated-use-file/rhachet.use.ts.declapract.ts +12 -0
- package/dist/.test/assets/git/declarations/practices/rhachet/bad-practices/prod-deps/.declapract.readme.md +59 -0
- package/dist/.test/assets/git/declarations/practices/rhachet/bad-practices/prod-deps/.test/assets/demo-repo-with-rhachet-prod-deps/declapract.declare.yml +4 -0
- package/dist/.test/assets/git/declarations/practices/rhachet/bad-practices/prod-deps/.test/assets/demo-repo-with-rhachet-prod-deps/declapract.use.yml +2 -0
- package/dist/.test/assets/git/declarations/practices/rhachet/bad-practices/prod-deps/.test/assets/demo-repo-with-rhachet-prod-deps/package.json +12 -0
- package/dist/.test/assets/git/declarations/practices/rhachet/bad-practices/prod-deps/package.json +5 -0
- package/dist/.test/assets/git/declarations/practices/rhachet/bad-practices/prod-deps/package.json.declapract.ts +88 -0
- package/dist/.test/assets/git/declarations/practices/rhachet/bad-practices/review-peer-artifacts/.behavior/<star><star>/.reviews/<star><star>/<star>peer-review<star>.md.declapract.ts +16 -0
- package/dist/.test/assets/git/declarations/practices/rhachet/bad-practices/review-peer-artifacts/.behavior/<star><star>/.reviews/peer/<star><star>/<star>.md.declapract.ts +16 -0
- package/dist/.test/assets/git/declarations/practices/rhachet/bad-practices/review-peer-artifacts/.declapract.readme.md +12 -0
- package/dist/.test/assets/git/declarations/practices/rhachet/best-practice/.agent/keyrack.yml.declapract.ts +143 -0
- package/dist/.test/assets/git/declarations/practices/rhachet/best-practice/.agent/repo=.this/role=any/boot.yml +22 -0
- package/dist/.test/assets/git/declarations/practices/rhachet/best-practice/.agent/repo=.this/role=any/boot.yml.declapract.ts +189 -0
- package/dist/.test/assets/git/declarations/practices/rhachet/best-practice/.declapract.readme.md +40 -0
- package/dist/.test/assets/git/declarations/practices/rhachet/best-practice/.gitattributes.declapract.ts +65 -0
- package/dist/.test/assets/git/declarations/practices/rhachet/best-practice/.gitignore.declapract.ts +94 -0
- package/dist/.test/assets/git/declarations/practices/rhachet/best-practice/package.json +19 -0
- package/dist/.test/assets/git/declarations/practices/rhachet/best-practice/package.json.declapract.ts +51 -0
- package/dist/.test/assets/git/declarations/practices/rhachet/boot-refs-glossary.declapract.integration.test.ts +91 -0
- package/dist/.test/assets/git/declarations/practices/rhachet/boot-yml-findsert.declapract.integration.test.ts +149 -0
- package/dist/.test/assets/git/declarations/practices/rhachet/keyrack-yml-findsert.declapract.integration.test.ts +105 -0
- package/dist/.test/assets/git/declarations/practices/rhachet/self-link-build-order.declapract.integration.test.ts +88 -0
- package/dist/.test/assets/git/declarations/practices/tests-any/.test/assets/repo-old-acceptance-utils/blackbox/lambdas/consumeSESEmailEventFromSNS.acceptance.test.ts +23 -0
- package/dist/.test/assets/git/declarations/practices/tests-any/.test/assets/repo-old-acceptance-utils/declapract.use.yml +9 -0
- package/dist/.test/assets/git/declarations/practices/tests-any/.test/assets/repo-old-acceptance-utils/package.json +4 -0
- package/dist/.test/assets/git/declarations/practices/tests-any/.test/assets/repo-old-acceptance-utils-2/blackbox/lambdas/addDecoratedImage.acceptance.test.ts +19 -0
- package/dist/.test/assets/git/declarations/practices/tests-any/.test/assets/repo-old-acceptance-utils-2/declapract.use.yml +9 -0
- package/dist/.test/assets/git/declarations/practices/tests-any/.test/assets/repo-old-acceptance-utils-2/package.json +4 -0
- package/dist/.test/assets/git/declarations/practices/tests-any/.test/assets/repo-old-acceptance-utils-3/blackbox/lambdas/addDecoratedImage.acceptance.test.ts +19 -0
- package/dist/.test/assets/git/declarations/practices/tests-any/.test/assets/repo-old-acceptance-utils-3/declapract.use.yml +9 -0
- package/dist/.test/assets/git/declarations/practices/tests-any/.test/assets/repo-old-acceptance-utils-3/package.json +4 -0
- package/dist/.test/assets/git/declarations/practices/tests-any/__snapshots__/changedsince-origin-main.declapract.integration.test.ts.snap +8 -0
- package/dist/.test/assets/git/declarations/practices/tests-any/__snapshots__/livedb-wake-branches.declapract.integration.test.ts.snap +6 -0
- package/dist/.test/assets/git/declarations/practices/tests-any/__snapshots__/old-acceptance-test-utils.declapract.integration.test.ts.snap +162 -0
- package/dist/.test/assets/git/declarations/practices/tests-any/__snapshots__/test-kind-seam.declapract.integration.test.ts.snap +9 -0
- package/dist/.test/assets/git/declarations/practices/tests-any/autoprune-hooks.declapract.integration.test.ts +111 -0
- package/dist/.test/assets/git/declarations/practices/tests-any/bad-practices/dev-tool-in-dependencies/.declapract.integration.test.ts +69 -0
- package/dist/.test/assets/git/declarations/practices/tests-any/bad-practices/dev-tool-in-dependencies/.declapract.readme.md +19 -0
- package/dist/.test/assets/git/declarations/practices/tests-any/bad-practices/dev-tool-in-dependencies/.test/assets/demo-repo-with-stale-test-fns-dep/declapract.use.yml +3 -0
- package/dist/.test/assets/git/declarations/practices/tests-any/bad-practices/dev-tool-in-dependencies/.test/assets/demo-repo-with-stale-test-fns-dep/package.json +11 -0
- package/dist/.test/assets/git/declarations/practices/tests-any/bad-practices/dev-tool-in-dependencies/__snapshots__/.declapract.integration.test.ts.snap +43 -0
- package/dist/.test/assets/git/declarations/practices/tests-any/bad-practices/dev-tool-in-dependencies/package.json.declapract.ts +81 -0
- package/dist/.test/assets/git/declarations/practices/tests-any/bad-practices/javascript-config-files/.declapract.readme.md +1 -0
- package/dist/.test/assets/git/declarations/practices/tests-any/bad-practices/javascript-config-files/jest.<star>.js.declapract.ts +17 -0
- package/dist/.test/assets/git/declarations/practices/tests-any/bad-practices/mocks/.declapract.readme.md +8 -0
- package/dist/.test/assets/git/declarations/practices/tests-any/bad-practices/mocks/<star><star>/__mock__/<star>.js +3 -0
- package/dist/.test/assets/git/declarations/practices/tests-any/bad-practices/mocks/<star><star>/__mock__/<star>.ts +3 -0
- package/dist/.test/assets/git/declarations/practices/tests-any/bad-practices/old-acceptance-dir-location/.declapract.integration.test.ts +83 -0
- package/dist/.test/assets/git/declarations/practices/tests-any/bad-practices/old-acceptance-dir-location/.declapract.readme.md +22 -0
- package/dist/.test/assets/git/declarations/practices/tests-any/bad-practices/old-acceptance-dir-location/.test/assets/demo-repo-with-accept-blackbox-dir/accept.blackbox/.test/assets/.agent/config.yml +1 -0
- package/dist/.test/assets/git/declarations/practices/tests-any/bad-practices/old-acceptance-dir-location/.test/assets/demo-repo-with-accept-blackbox-dir/accept.blackbox/.test/assets/.rhachet/manifest.json +1 -0
- package/dist/.test/assets/git/declarations/practices/tests-any/bad-practices/old-acceptance-dir-location/.test/assets/demo-repo-with-accept-blackbox-dir/accept.blackbox/somefile.ts +1 -0
- package/dist/.test/assets/git/declarations/practices/tests-any/bad-practices/old-acceptance-dir-location/.test/assets/demo-repo-with-accept-blackbox-dir/declapract.use.yml +6 -0
- package/dist/.test/assets/git/declarations/practices/tests-any/bad-practices/old-acceptance-dir-location/.test/assets/demo-repo-with-accept-blackbox-dir/package.json +4 -0
- package/dist/.test/assets/git/declarations/practices/tests-any/bad-practices/old-acceptance-dir-location/accept.blackbox/<star><star>/<star>.declapract.ts +19 -0
- package/dist/.test/assets/git/declarations/practices/tests-any/bad-practices/old-acceptance-dir-location/acceptance/<star><star>/<star>.declapract.ts +19 -0
- package/dist/.test/assets/git/declarations/practices/tests-any/bad-practices/old-acceptance-import-paths/.declapract.readme.md +31 -0
- package/dist/.test/assets/git/declarations/practices/tests-any/bad-practices/old-acceptance-import-paths/<star><star>/<star>.ts.declapract.ts +25 -0
- package/dist/.test/assets/git/declarations/practices/tests-any/bad-practices/old-acceptance-test-utils/blackbox/_utils/getDataFromLastOpenBracketAtStartOfLine.ts.declapract.ts +3 -0
- package/dist/.test/assets/git/declarations/practices/tests-any/bad-practices/old-acceptance-test-utils/blackbox/_utils/invokeLambda.ts.declapract.ts +3 -0
- package/dist/.test/assets/git/declarations/practices/tests-any/bad-practices/old-acceptance-test-utils/blackbox/lambdas/<star>.ts.declapract.ts +49 -0
- package/dist/.test/assets/git/declarations/practices/tests-any/bad-practices/old-acceptance-test-utils-2/blackbox/lambdas/<star>.ts.declapract.ts +27 -0
- package/dist/.test/assets/git/declarations/practices/tests-any/bad-practices/old-acceptance-test-utils-3/blackbox/_utils/environment.ts.declapract.ts +3 -0
- package/dist/.test/assets/git/declarations/practices/tests-any/bad-practices/old-acceptance-test-utils-3/blackbox/lambdas/<star>.ts.declapract.ts +23 -0
- package/dist/.test/assets/git/declarations/practices/tests-any/bad-practices/old-extension-pattern/.declapract.readme.md +3 -0
- package/dist/.test/assets/git/declarations/practices/tests-any/bad-practices/old-extension-pattern/<star><star>/<star>.test.acceptance.ts.declapract.ts +11 -0
- package/dist/.test/assets/git/declarations/practices/tests-any/bad-practices/old-extension-pattern/<star><star>/<star>.test.integration.ts.declapract.ts +11 -0
- package/dist/.test/assets/git/declarations/practices/tests-any/bad-practices/old-test-utils-and-assets-location/.declapract.readme.md +8 -0
- package/dist/.test/assets/git/declarations/practices/tests-any/bad-practices/old-test-utils-and-assets-location/<star><star>/<star>.ts.declapract.ts +27 -0
- package/dist/.test/assets/git/declarations/practices/tests-any/bad-practices/old-test-utils-and-assets-location/<star><star>/__test_assets__/<star><star>/<star>.declapract.ts +17 -0
- package/dist/.test/assets/git/declarations/practices/tests-any/bad-practices/old-test-utils-and-assets-location/<star><star>/__test_utils__/<star><star>/<star>.declapract.ts +17 -0
- package/dist/.test/assets/git/declarations/practices/tests-any/best-practice/.declapract.readme.md +52 -0
- package/dist/.test/assets/git/declarations/practices/tests-any/best-practice/.declapract.todo.md +3 -0
- package/dist/.test/assets/git/declarations/practices/tests-any/best-practice/.gitattributes.declapract.ts +60 -0
- package/dist/.test/assets/git/declarations/practices/tests-any/best-practice/package.json +18 -0
- package/dist/.test/assets/git/declarations/practices/tests-any/best-practice/package.json.declapract.ts +3 -0
- package/dist/.test/assets/git/declarations/practices/tests-any/best-practice/src/.test/useWakeOfLivedb.ts +209 -0
- package/dist/.test/assets/git/declarations/practices/tests-any/best-practice/src/<star><star>/<star>.integration.test.ts.declapract.ts +8 -0
- package/dist/.test/assets/git/declarations/practices/tests-any/best-practice/src/<star><star>/<star>.test.ts.declapract.ts +7 -0
- package/dist/.test/assets/git/declarations/practices/tests-any/build-ifstale.declapract.integration.test.ts +124 -0
- package/dist/.test/assets/git/declarations/practices/tests-any/changedsince-origin-main.declapract.integration.test.ts +58 -0
- package/dist/.test/assets/git/declarations/practices/tests-any/livedb-wake-branches.declapract.integration.test.ts +315 -0
- package/dist/.test/assets/git/declarations/practices/tests-any/old-acceptance-test-utils.declapract.integration.test.ts +122 -0
- package/dist/.test/assets/git/declarations/practices/tests-any/package.json.shell-flags.declapract.integration.test.ts +139 -0
- package/dist/.test/assets/git/declarations/practices/tests-any/test-kind-seam.declapract.integration.test.ts +87 -0
- package/dist/.test/assets/git/declarations/useCases.yml +29 -0
- package/dist/.test/assets/{expo-fullusecase/declarations/practices/git/best-practice → git/repo-with-all-gitattributes-declarers}/.gitattributes +3 -0
- package/dist/.test/assets/git/repo-with-all-gitattributes-declarers/declapract.use.yml +26 -0
- package/dist/.test/assets/git/repo-with-all-gitattributes-declarers/package.json +4 -0
- package/dist/.test/assets/pnpm/declarations/practices/pnpm/.test/assets/repo-stale-patch-beside-bare/declapract.use.yml +4 -0
- package/dist/.test/assets/pnpm/declarations/practices/pnpm/.test/assets/repo-stale-patch-beside-bare/package.json +15 -0
- package/dist/.test/assets/pnpm/declarations/practices/pnpm/.test/assets/repo-stale-patch-beside-bare/patches/rhachet-roles-ehmpathy.patch +6 -0
- package/dist/.test/assets/pnpm/declarations/practices/pnpm/.test/assets/repo-stale-patch-beside-bare/patches/rhachet-roles-ehmpathy@1.39.1.patch +6 -0
- package/dist/.test/assets/pnpm/declarations/practices/pnpm/.test/assets/repo-stale-patch-beside-bare/patches/type-fns@1.21.3.patch +6 -0
- package/dist/.test/assets/pnpm/declarations/practices/pnpm/.test/assets/repo-stale-patch-beside-bare/pnpm-lock.yaml +19 -0
- package/dist/.test/assets/pnpm/declarations/practices/pnpm/__snapshots__/stale-patched-dependency.declapract.integration.test.ts.snap +39 -0
- package/dist/.test/assets/pnpm/declarations/practices/pnpm/stale-patched-dependency.declapract.integration.test.ts +53 -0
- package/dist/.test/assets/rhachet/declarations/practices/rhachet/best-practice/.declapract.readme.md +8 -0
- package/dist/.test/assets/rhachet/declarations/practices/rhachet/best-practice/.gitattributes.declapract.ts +65 -0
- package/dist/.test/assets/tests-any-only/declarations/practices/tests-any/best-practice/.declapract.readme.md +7 -0
- package/dist/.test/assets/tests-any-only/declarations/practices/tests-any/best-practice/.gitattributes.declapract.ts +60 -0
- package/dist/__snapshots__/gitattributesDeclarers.declapract.integration.test.ts.snap +79 -0
- package/dist/__snapshots__/repoSkills.declapract.acceptance.test.ts.snap +512 -0
- package/dist/__snapshots__/typecheckBestPracticeTemplates.declapract.integration.test.ts.snap +80 -0
- package/dist/gitattributesDeclarers.declapract.integration.test.ts +438 -0
- package/dist/practiceOwnerPerFile.declapract.integration.test.ts +53 -0
- package/dist/practices/cicd-common/.declapract.integration.test.ts +15 -21
- package/dist/practices/git/.declapract.integration.test.ts +2 -2
- package/dist/practices/git/.gitattributes.declapract.integration.test.ts +34 -19
- package/dist/practices/git/.test/assets/repo-with-legacy-gitattributes/declapract.use.yml +3 -3
- package/dist/practices/git/__snapshots__/.gitattributes.declapract.integration.test.ts.snap +4 -4
- package/dist/practices/git/best-practice/.declapract.readme.md +37 -0
- package/dist/practices/git/best-practice/.gitattributes.declapract.ts +42 -63
- package/dist/practices/persist-with-dynamodb/best-practice/.gitattributes.declapract.ts +56 -0
- package/dist/practices/persist-with-rds/.test/assets/repo-with-hand-patch/declapract.use.yml +4 -0
- package/dist/practices/persist-with-rds/.test/assets/repo-with-hand-patch/package.json +17 -0
- package/dist/practices/persist-with-rds/.test/assets/repo-with-hand-patch/patches/left-pad@1.3.0.patch +6 -0
- package/dist/practices/persist-with-rds/.test/assets/repo-with-hand-patch/patches/pg-pool@3.14.0.patch +12 -0
- package/dist/practices/persist-with-rds/__snapshots__/pg-pool-patch.declapract.integration.test.ts.snap +147 -0
- package/dist/practices/persist-with-rds/best-practice/.declapract.readme.md +29 -0
- package/dist/practices/persist-with-rds/best-practice/.gitattributes.declapract.ts +64 -0
- package/dist/practices/persist-with-rds/best-practice/package.json +5 -0
- package/dist/practices/persist-with-rds/best-practice/patches/pg-pool.patch +21 -0
- package/dist/practices/persist-with-rds/pg-pool-patch.declapract.integration.test.ts +884 -0
- package/dist/practices/pnpm/.test/assets/repo-stale-patch-beside-bare/declapract.use.yml +4 -0
- package/dist/practices/pnpm/.test/assets/repo-stale-patch-beside-bare/package.json +15 -0
- package/dist/practices/pnpm/.test/assets/repo-stale-patch-beside-bare/patches/rhachet-roles-ehmpathy.patch +6 -0
- package/dist/practices/pnpm/.test/assets/repo-stale-patch-beside-bare/patches/rhachet-roles-ehmpathy@1.39.1.patch +6 -0
- package/dist/practices/pnpm/.test/assets/repo-stale-patch-beside-bare/patches/type-fns@1.21.3.patch +6 -0
- package/dist/practices/pnpm/.test/assets/repo-stale-patch-beside-bare/pnpm-lock.yaml +19 -0
- package/dist/practices/pnpm/__snapshots__/stale-patched-dependency.declapract.integration.test.ts.snap +39 -0
- package/dist/practices/pnpm/stale-patched-dependency.declapract.integration.test.ts +53 -0
- package/dist/practices/rhachet/best-practice/.declapract.readme.md +8 -0
- package/dist/practices/rhachet/best-practice/.gitattributes.declapract.ts +65 -0
- package/dist/practices/tests-any/best-practice/.declapract.readme.md +7 -0
- package/dist/practices/tests-any/best-practice/.gitattributes.declapract.ts +60 -0
- package/dist/repoSkills.declapract.acceptance.test.ts +1150 -0
- package/dist/typecheckBestPracticeTemplates.declapract.integration.test.ts +181 -19
- package/dist/utils/defineExpectedGitattributesContents.ts +247 -0
- package/package.json +6 -6
- package/dist/.test/assets/expo-migration/declarations/practices/git/best-practice/.gitattributes +0 -7
- package/dist/practices/git/best-practice/.gitattributes +0 -7
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
import { readFileSync } from 'node:fs';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
|
|
4
|
+
import { given, then, useBeforeAll, when } from 'test-fns';
|
|
5
|
+
import ts from 'typescript';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* .what = type-checks the SHIPPED `withDatabaseTransaction` + `withDatabaseContext` templates, and
|
|
9
|
+
* the callers an adopter writes over them, under the strictest options the typescript
|
|
10
|
+
* practice emits — the verdict for #627 and #633.
|
|
11
|
+
* .why = a template the practice emits must compile where it lands. #627: the transaction wrapper
|
|
12
|
+
* declared `Promise<Awaited<R>>`, which its own body cannot reach for an unconstrained `R`
|
|
13
|
+
* (`await` of a bare generic types as `R`), so tsc failed inside the practice-owned file on
|
|
14
|
+
* every adopter. #633: the context wrapper's jsdoc example showed a call that does not
|
|
15
|
+
* compile. both defects live in bytes no adopter may edit (the next apply re-emits them),
|
|
16
|
+
* so the only place to catch them is here, before they ship.
|
|
17
|
+
* .teeth = put `Promise<Awaited<R>>` back on the transaction wrapper and the "zero diagnostics"
|
|
18
|
+
* assertion reddens with TS2322 inside withDatabaseTransaction.ts (both bodies). put the
|
|
19
|
+
* one-arg `findById({ id: 821 })` back into the jsdoc example and the example fixture
|
|
20
|
+
* reddens (TS2554 + TS2322).
|
|
21
|
+
* .note = the fixture holds BOTH transaction bodies — the practice's (context passed through) and
|
|
22
|
+
* the one #627 quotes (a fresh context spread into `logic`) — and three callers: an async
|
|
23
|
+
* op, a sync op, and a generic op. `getOneDatabaseConnection` is stubbed so no `pg` types
|
|
24
|
+
* are needed. INTEGRATION by `rule.forbid.unit.remote-boundaries`: it reads the shipped
|
|
25
|
+
* templates off the filesystem. it sits at the practice ROOT, so declapract never emits it.
|
|
26
|
+
*/
|
|
27
|
+
|
|
28
|
+
const TEMPLATE_DIR = join(__dirname, 'best-practice/src/utils/database');
|
|
29
|
+
const FIXTURE_DIR = '/fixture/src/utils/database';
|
|
30
|
+
|
|
31
|
+
// the strictest options the typescript-node practice emits (@tsconfig/strictest + its overrides)
|
|
32
|
+
const COMPILER_OPTIONS: ts.CompilerOptions = {
|
|
33
|
+
strict: true,
|
|
34
|
+
noUncheckedIndexedAccess: true,
|
|
35
|
+
noImplicitReturns: true,
|
|
36
|
+
noFallthroughCasesInSwitch: true,
|
|
37
|
+
allowUnusedLabels: false,
|
|
38
|
+
allowUnreachableCode: false,
|
|
39
|
+
noPropertyAccessFromIndexSignature: false,
|
|
40
|
+
exactOptionalPropertyTypes: false,
|
|
41
|
+
noUnusedLocals: false,
|
|
42
|
+
noUnusedParameters: false,
|
|
43
|
+
target: ts.ScriptTarget.ES2020,
|
|
44
|
+
lib: ['lib.es2020.d.ts'],
|
|
45
|
+
module: ts.ModuleKind.CommonJS,
|
|
46
|
+
moduleResolution: ts.ModuleResolutionKind.Node10,
|
|
47
|
+
types: [],
|
|
48
|
+
noEmit: true,
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* .what = the stub that stands in for the pg-backed connection factory
|
|
53
|
+
* .why = the wrappers import only the `DatabaseConnection` type and the factory fn; a stub keeps
|
|
54
|
+
* the fixture free of `pg` while the shape the wrappers see stays the real one
|
|
55
|
+
*/
|
|
56
|
+
const STUB_CONNECTION = `
|
|
57
|
+
export interface DatabaseConnection {
|
|
58
|
+
query: <Row>(args: { sql: string; values?: unknown[] }) => Promise<{ rows: Row[] }>;
|
|
59
|
+
end: () => Promise<void>;
|
|
60
|
+
}
|
|
61
|
+
export const getOneDatabaseConnection = async (): Promise<DatabaseConnection> => {
|
|
62
|
+
throw new Error('stub: no database in a type-check fixture');
|
|
63
|
+
};
|
|
64
|
+
`;
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* .what = the callers an adopter writes over the transaction wrapper: async, sync, and generic
|
|
68
|
+
* .why = each pins what the wrapper must return; a wrong declared return reddens here or in the
|
|
69
|
+
* wrapper itself
|
|
70
|
+
*/
|
|
71
|
+
const asTransactionCallers = (input: { wrapperModule: string }): string => `
|
|
72
|
+
import type { DatabaseConnection } from './getOneDatabaseConnection';
|
|
73
|
+
import { withDatabaseTransaction } from './${input.wrapperModule}';
|
|
74
|
+
|
|
75
|
+
declare const context: { dbConnection: DatabaseConnection };
|
|
76
|
+
|
|
77
|
+
// an async op: the wrapper hands back a promise of the resolved value
|
|
78
|
+
const setSurfLesson = withDatabaseTransaction(
|
|
79
|
+
async (input: { uuid: string }, context: { dbConnection: DatabaseConnection }) => {
|
|
80
|
+
await context.dbConnection.query({ sql: 'select 1' });
|
|
81
|
+
return { uuid: input.uuid };
|
|
82
|
+
},
|
|
83
|
+
);
|
|
84
|
+
export const lessonSet: Promise<{ uuid: string }> = setSurfLesson({ uuid: 'x' }, context);
|
|
85
|
+
|
|
86
|
+
// a sync op: the wrapper is always async, so the caller sees a promise back
|
|
87
|
+
const getWaveCount = withDatabaseTransaction(
|
|
88
|
+
(input: { waves: string[] }, _context: { dbConnection: DatabaseConnection }) => input.waves.length,
|
|
89
|
+
);
|
|
90
|
+
export const waveCount: Promise<number> = getWaveCount({ waves: [] }, context);
|
|
91
|
+
|
|
92
|
+
// a generic op: the wrapper keeps the caller's type parameter
|
|
93
|
+
export const getEcho = async <T>(input: { value: T }): Promise<T> =>
|
|
94
|
+
withDatabaseTransaction(
|
|
95
|
+
async (inner: { value: T }, _context: { dbConnection: DatabaseConnection }) => inner.value,
|
|
96
|
+
)(input, context);
|
|
97
|
+
`;
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* .what = the example code block inside a template's jsdoc, unwrapped from its ` * ` gutter
|
|
101
|
+
* .why = the example is a claim about the template's own contract; it must compile like any caller
|
|
102
|
+
*/
|
|
103
|
+
const asJsdocExample = (input: { source: string }): string => {
|
|
104
|
+
const block = input.source.match(/```\n([\s\S]*?)\n\s*\*\s*```/)?.[1];
|
|
105
|
+
if (!block) throw new Error('no ``` example block found in the jsdoc');
|
|
106
|
+
return block
|
|
107
|
+
.split('\n')
|
|
108
|
+
.map((line) => line.replace(/^\s*\* ?/, ''))
|
|
109
|
+
.join('\n');
|
|
110
|
+
};
|
|
111
|
+
|
|
112
|
+
/**
|
|
113
|
+
* .what = type-check a set of in-memory fixture files and return each diagnostic as one line
|
|
114
|
+
* .why = an in-memory host overlays the fixture on the real lib files, so the check needs no disk
|
|
115
|
+
* writes and no tsconfig of its own
|
|
116
|
+
*/
|
|
117
|
+
const getDiagnostics = (input: { files: Record<string, string> }): string[] => {
|
|
118
|
+
const host = ts.createCompilerHost(COMPILER_OPTIONS);
|
|
119
|
+
const readFileBase = host.readFile.bind(host);
|
|
120
|
+
const getSourceFileBase = host.getSourceFile.bind(host);
|
|
121
|
+
const fileExistsBase = host.fileExists.bind(host);
|
|
122
|
+
host.fileExists = (fileName) =>
|
|
123
|
+
fileName in input.files || fileExistsBase(fileName);
|
|
124
|
+
host.directoryExists = (directoryName) =>
|
|
125
|
+
FIXTURE_DIR.startsWith(directoryName) ||
|
|
126
|
+
ts.sys.directoryExists(directoryName);
|
|
127
|
+
host.readFile = (fileName) => input.files[fileName] ?? readFileBase(fileName);
|
|
128
|
+
host.getSourceFile = (fileName, languageVersion, ...rest) => {
|
|
129
|
+
const fixture = input.files[fileName];
|
|
130
|
+
if (fixture !== undefined)
|
|
131
|
+
return ts.createSourceFile(fileName, fixture, languageVersion, true);
|
|
132
|
+
return getSourceFileBase(fileName, languageVersion, ...rest);
|
|
133
|
+
};
|
|
134
|
+
const program = ts.createProgram({
|
|
135
|
+
rootNames: Object.keys(input.files),
|
|
136
|
+
options: COMPILER_OPTIONS,
|
|
137
|
+
host,
|
|
138
|
+
});
|
|
139
|
+
return ts.getPreEmitDiagnostics(program).map((diagnostic) => {
|
|
140
|
+
const where = diagnostic.file
|
|
141
|
+
? `${diagnostic.file.fileName.replace(`${FIXTURE_DIR}/`, '')}:${
|
|
142
|
+
diagnostic.file.getLineAndCharacterOfPosition(diagnostic.start ?? 0)
|
|
143
|
+
.line + 1
|
|
144
|
+
}`
|
|
145
|
+
: '(global)';
|
|
146
|
+
return `${where} TS${diagnostic.code}: ${ts.flattenDiagnosticMessageText(diagnostic.messageText, ' ')}`;
|
|
147
|
+
});
|
|
148
|
+
};
|
|
149
|
+
|
|
150
|
+
describe('persist-with-rds database wrappers type-check where they land (#627, #633)', () => {
|
|
151
|
+
const transactionTemplate = readFileSync(
|
|
152
|
+
join(TEMPLATE_DIR, 'withDatabaseTransaction.ts'),
|
|
153
|
+
'utf8',
|
|
154
|
+
);
|
|
155
|
+
const contextTemplate = readFileSync(
|
|
156
|
+
join(TEMPLATE_DIR, 'withDatabaseContext.ts'),
|
|
157
|
+
'utf8',
|
|
158
|
+
);
|
|
159
|
+
|
|
160
|
+
// the body #627 quotes: a fresh context spread into `logic`, under the shipped declaration
|
|
161
|
+
const transactionIssueBody = transactionTemplate.replace(
|
|
162
|
+
'await logic(input, context)',
|
|
163
|
+
'await logic(input, { ...context, dbConnection: context.dbConnection })',
|
|
164
|
+
);
|
|
165
|
+
|
|
166
|
+
given('[case1] an adopter with an async, a sync, and a generic op wrapped in withDatabaseTransaction', () => {
|
|
167
|
+
when('[t0] tsc runs over the practice body and the body #627 quotes', () => {
|
|
168
|
+
const diagnostics = useBeforeAll(async () => ({
|
|
169
|
+
lines: getDiagnostics({
|
|
170
|
+
files: {
|
|
171
|
+
[`${FIXTURE_DIR}/getOneDatabaseConnection.ts`]: STUB_CONNECTION,
|
|
172
|
+
[`${FIXTURE_DIR}/withDatabaseTransaction.ts`]: transactionTemplate,
|
|
173
|
+
[`${FIXTURE_DIR}/withDatabaseTransactionIssueBody.ts`]:
|
|
174
|
+
transactionIssueBody,
|
|
175
|
+
[`${FIXTURE_DIR}/callersOfPracticeBody.ts`]: asTransactionCallers({
|
|
176
|
+
wrapperModule: 'withDatabaseTransaction',
|
|
177
|
+
}),
|
|
178
|
+
[`${FIXTURE_DIR}/callersOfIssueBody.ts`]: asTransactionCallers({
|
|
179
|
+
wrapperModule: 'withDatabaseTransactionIssueBody',
|
|
180
|
+
}),
|
|
181
|
+
},
|
|
182
|
+
}),
|
|
183
|
+
}));
|
|
184
|
+
|
|
185
|
+
then('the issue body differs from the practice body (both bodies are under test)', () => {
|
|
186
|
+
expect(transactionIssueBody).not.toEqual(transactionTemplate);
|
|
187
|
+
});
|
|
188
|
+
|
|
189
|
+
then('no diagnostic points into the wrapper or its callers', () => {
|
|
190
|
+
expect(diagnostics.lines).toEqual([]);
|
|
191
|
+
});
|
|
192
|
+
});
|
|
193
|
+
});
|
|
194
|
+
|
|
195
|
+
given('[case2] the jsdoc example that withDatabaseContext ships', () => {
|
|
196
|
+
when('[t0] tsc runs over the example, as an adopter would paste it', () => {
|
|
197
|
+
const example = asJsdocExample({ source: contextTemplate });
|
|
198
|
+
const diagnostics = useBeforeAll(async () => ({
|
|
199
|
+
lines: getDiagnostics({
|
|
200
|
+
files: {
|
|
201
|
+
[`${FIXTURE_DIR}/getOneDatabaseConnection.ts`]: STUB_CONNECTION,
|
|
202
|
+
[`${FIXTURE_DIR}/withDatabaseContext.ts`]: contextTemplate,
|
|
203
|
+
[`${FIXTURE_DIR}/example.ts`]: [
|
|
204
|
+
"import type { DatabaseConnection } from './getOneDatabaseConnection';",
|
|
205
|
+
"import { withDatabaseContext } from './withDatabaseContext';",
|
|
206
|
+
'// the connection the example reuses, as an adopter inside a transaction holds it',
|
|
207
|
+
'declare const dbConnection: DatabaseConnection;',
|
|
208
|
+
'export const run = async (): Promise<void> => {',
|
|
209
|
+
example,
|
|
210
|
+
'};',
|
|
211
|
+
].join('\n'),
|
|
212
|
+
},
|
|
213
|
+
}),
|
|
214
|
+
}));
|
|
215
|
+
|
|
216
|
+
then('the example compiles', () => {
|
|
217
|
+
expect(diagnostics.lines).toEqual([]);
|
|
218
|
+
});
|
|
219
|
+
|
|
220
|
+
then('the example matches snapshot', () => {
|
|
221
|
+
expect(example).toMatchSnapshot('withDatabaseContext jsdoc example');
|
|
222
|
+
});
|
|
223
|
+
});
|
|
224
|
+
});
|
|
225
|
+
});
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { readFileSync } from 'node:fs';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
|
|
4
|
+
import { given, then, when } from 'test-fns';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* .what = clamps #549: the shipped provision/schema/deploy.database.sh carries no gerund
|
|
8
|
+
* (-ing) progress-string, comment, or error — imperative/plain verbs only, per
|
|
9
|
+
* rule.forbid.gerunds.
|
|
10
|
+
* .why = this template is emitted verbatim to every persist-with-rds consumer, and each
|
|
11
|
+
* consumer runs the mechanic gerund hook on the emitted file. a gerund in the
|
|
12
|
+
* template trips that hook downstream, so each repo re-fixes it and re-diverges from
|
|
13
|
+
* the template — the fix must live upstream, here, once.
|
|
14
|
+
* .teeth = revert any progress-string to its gerund form (e.g. "create the database" ->
|
|
15
|
+
* "creating the database") in best-practice/provision/schema/deploy.database.sh and
|
|
16
|
+
* the paired "no gerund" assertion reddens.
|
|
17
|
+
* .note = the subject is the shipped TEMPLATE, read from __dirname. this file sits at the
|
|
18
|
+
* practice ROOT, so declapract never emits it (per the #583 relocation convention).
|
|
19
|
+
*/
|
|
20
|
+
describe('persist-with-rds deploy.database.sh gerund-free', () => {
|
|
21
|
+
given('the shipped deploy.database.sh', () => {
|
|
22
|
+
const source = readFileSync(
|
|
23
|
+
join(__dirname, 'best-practice/provision/schema/deploy.database.sh'),
|
|
24
|
+
'utf8',
|
|
25
|
+
);
|
|
26
|
+
|
|
27
|
+
// the exact gerund forms #549 removed; none may reappear in the template
|
|
28
|
+
const forbidden = [
|
|
29
|
+
'creating',
|
|
30
|
+
'installing',
|
|
31
|
+
'granting',
|
|
32
|
+
'before running this',
|
|
33
|
+
];
|
|
34
|
+
|
|
35
|
+
when('the template body is read', () => {
|
|
36
|
+
forbidden.forEach((word) =>
|
|
37
|
+
then(`it carries no gerund form: "${word}"`, () => {
|
|
38
|
+
expect(source.includes(word)).toEqual(false);
|
|
39
|
+
}),
|
|
40
|
+
);
|
|
41
|
+
|
|
42
|
+
then('it keeps the imperative progress strings', () => {
|
|
43
|
+
expect(source).toContain('🔨 create the database...');
|
|
44
|
+
expect(source).toContain('🔨 install the extensions...');
|
|
45
|
+
expect(source).toContain('🔨 create the schema...');
|
|
46
|
+
expect(source).toContain('🔨 create the cicd user...');
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
then('the emitted deploy.database.sh matches snapshot', () => {
|
|
50
|
+
// snapshot the whole shipped file so a reworded progress string that stays
|
|
51
|
+
// gerund-free still reddens a vibecheck in review — the token asserts prove the
|
|
52
|
+
// gerund class is absent, this proves the exact text (rule.require.contract-snapshot-exhaustiveness)
|
|
53
|
+
expect(source).toMatchSnapshot('deploy.database.sh');
|
|
54
|
+
});
|
|
55
|
+
});
|
|
56
|
+
});
|
|
57
|
+
});
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { readFileSync } from 'node:fs';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
|
|
4
|
+
import { given, then, when } from 'test-fns';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* .what = clamps the empty-template invariant the case=7 (stateful-store-alias-not-copy) safety
|
|
8
|
+
* rests on: the persist-with-rds declastruct wish declares ZERO rds clusters — `getResources`
|
|
9
|
+
* returns only ssm params, and the provision tree imports no cluster/rds/aurora/database
|
|
10
|
+
* resource-declaration type.
|
|
11
|
+
* .why = case=7's fail-safe is "a lambda under two names is two copies of code; a database under two
|
|
12
|
+
* names must be one store with two pointers" — and its load-bearer is that the template holds
|
|
13
|
+
* NO cluster for a `fix` to duplicate. a second cluster is the operator's to hand-author,
|
|
14
|
+
* against the runbook, never a state the template produces. this is the demoed critipath's
|
|
15
|
+
* real test (per `rule.require.experience-catalog-evolution`, a demoed critipath owes a test
|
|
16
|
+
* by verification): if a future edit ever declares a cluster in the go-forward wish, the
|
|
17
|
+
* "zero clusters to duplicate" premise silently breaks, and this reddens.
|
|
18
|
+
* .teeth = a cluster resource cannot enter `getResources` without an import of a `DeclaredAws*Cluster`
|
|
19
|
+
* / `*Rds` / `*Aurora` / `*Database` type plus its addition to the returned array — so the
|
|
20
|
+
* "declares only ssm params" + "imports no cluster type" cases redden the moment one lands.
|
|
21
|
+
* .note = `.integration.test.ts` because it reads the filesystem (a remote boundary); at the practice
|
|
22
|
+
* ROOT (not under best-practice/), so it is neither loaded as a declaration nor copied to a
|
|
23
|
+
* consumer. peer of the param-name clamp in `ssm-param-names.declapract.integration.test.ts`.
|
|
24
|
+
*/
|
|
25
|
+
|
|
26
|
+
// anchor on __dirname, not process.cwd(): a nested `jest src/practices/...` run has a different cwd.
|
|
27
|
+
const resourcesPath = join(__dirname, 'best-practice/provision/aws/resources.ts');
|
|
28
|
+
const paramsPath = join(
|
|
29
|
+
__dirname,
|
|
30
|
+
'best-practice/provision/aws/resources.parameters.ts',
|
|
31
|
+
);
|
|
32
|
+
|
|
33
|
+
// any declastruct-aws resource-declaration type that would name an rds/aurora cluster or database.
|
|
34
|
+
// a cluster resource cannot be declared without one of these, so the negation is the teeth.
|
|
35
|
+
const CLUSTER_TYPE_PATTERN = /Declared\w*(Rds|Cluster|Aurora|Database)/;
|
|
36
|
+
|
|
37
|
+
describe('persist-with-rds wish declares zero rds clusters (empty-template invariant)', () => {
|
|
38
|
+
const resources = readFileSync(resourcesPath, 'utf8');
|
|
39
|
+
const params = readFileSync(paramsPath, 'utf8');
|
|
40
|
+
|
|
41
|
+
given('[case1] the wish entrypoint resources.ts', () => {
|
|
42
|
+
when('[t0] resources.ts is read', () => {
|
|
43
|
+
then('getResources yields only the ssm parameters', () => {
|
|
44
|
+
expect(resources).toContain('getAllParameters({ choice: null })');
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
then('the wish imports no cluster/rds/aurora/database resource type', () => {
|
|
48
|
+
expect(resources).not.toMatch(CLUSTER_TYPE_PATTERN);
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
then('the sole declared aws resource declaration is the ssm parameter secure', () => {
|
|
52
|
+
// the one resource-declaration import from declastruct-aws is DeclaredAwsSsmParameterSecure
|
|
53
|
+
// (via resources.parameters.ts). resources.ts itself declares no resource type directly.
|
|
54
|
+
expect(resources).not.toContain('DeclaredAwsRds');
|
|
55
|
+
expect(resources).not.toContain('DeclaredAwsAurora');
|
|
56
|
+
});
|
|
57
|
+
});
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
given('[case2] the resource set resources.parameters.ts', () => {
|
|
61
|
+
when('[t0] resources.parameters.ts is read', () => {
|
|
62
|
+
then('getAllParameters yields a DeclaredAwsSsmParameterSecure array (ssm params only)', () => {
|
|
63
|
+
expect(params).toContain('DeclaredAwsSsmParameterSecure[]');
|
|
64
|
+
});
|
|
65
|
+
|
|
66
|
+
then('the resource set declares no cluster/rds/aurora/database type', () => {
|
|
67
|
+
expect(params).not.toMatch(CLUSTER_TYPE_PATTERN);
|
|
68
|
+
});
|
|
69
|
+
});
|
|
70
|
+
});
|
|
71
|
+
});
|
|
@@ -0,0 +1,243 @@
|
|
|
1
|
+
import fs from 'fs/promises';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
|
|
4
|
+
import { spawnSync } from 'node:child_process';
|
|
5
|
+
import { readFileSync, writeFileSync } from 'node:fs';
|
|
6
|
+
|
|
7
|
+
import { executeApply } from 'declapract';
|
|
8
|
+
import { genTempDir, given, then, useThen, when } from 'test-fns';
|
|
9
|
+
|
|
10
|
+
import { check as checkDockerfile } from './best-practice/provision/docker/testdb/build-image.dockerfile.declapract';
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* .what = proves the persist-with-rds surface a postgres major upgrade leans on (#664): a current
|
|
14
|
+
* `dialect`, a healthcheck that probes the repo's own db, a testdb pin each repo owns, and a
|
|
15
|
+
* skew check that halts a testdb which leads its livedb
|
|
16
|
+
* .note = the post-upgrade ops (`ALTER EXTENSION … UPDATE`, `ANALYZE`) belong to the repo that
|
|
17
|
+
* owns the cutover, so this practice declares none of them
|
|
18
|
+
* .why = each lives in bytes the practice declares, so every adopter inherited each defect; and
|
|
19
|
+
* each new declaration with logic is proven here through the real apply pipeline
|
|
20
|
+
* .teeth = drop the dao fix and [case1] stays on 10.7; compare the dockerfile exactly and [case1]
|
|
21
|
+
* moves the repo pin to the template's; let the skew check pass a lead and [case3] reddens
|
|
22
|
+
* .note = every touched file is snapshotted in full, before AND after, per
|
|
23
|
+
* rule.require.declapract-integration-tests
|
|
24
|
+
*/
|
|
25
|
+
jest.setTimeout(10 * 60 * 1000);
|
|
26
|
+
|
|
27
|
+
const BEST_PRACTICE_DIR = path.join(__dirname, 'best-practice');
|
|
28
|
+
const FILES = [
|
|
29
|
+
'codegen.sql.dao.yml',
|
|
30
|
+
'provision/docker/testdb/build-image.dockerfile',
|
|
31
|
+
];
|
|
32
|
+
|
|
33
|
+
describe('persist-with-rds engine upgrade surface (#664)', () => {
|
|
34
|
+
given('[case1] a repo on dialect 10.7 with its own testdb pin', () => {
|
|
35
|
+
const tempDir = genTempDir({
|
|
36
|
+
slug: 'declapract-persist-with-rds-engine-upgrade',
|
|
37
|
+
clone:
|
|
38
|
+
'./src/practices/persist-with-rds/.test/assets/demo-repo-on-a-prior-major',
|
|
39
|
+
symlink: [{ at: 'declarations', to: 'src' }],
|
|
40
|
+
});
|
|
41
|
+
const read = (relativePath: string) =>
|
|
42
|
+
fs
|
|
43
|
+
.readFile(path.join(tempDir, relativePath), 'utf-8')
|
|
44
|
+
.catch((error: NodeJS.ErrnoException) => {
|
|
45
|
+
if (error.code === 'ENOENT') return null; // absent is a valid end-state to assert on
|
|
46
|
+
throw error; // any other read failure is a malfunction, never "absent"
|
|
47
|
+
});
|
|
48
|
+
const applyAll = async () => {
|
|
49
|
+
for (const file of FILES)
|
|
50
|
+
await executeApply({
|
|
51
|
+
config: path.join(tempDir, 'declapract.use.yml'),
|
|
52
|
+
practice: 'persist-with-rds',
|
|
53
|
+
file,
|
|
54
|
+
});
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
when('[t0] the input, before any fix', () => {
|
|
58
|
+
then('each file matches snapshot', async () => {
|
|
59
|
+
for (const file of FILES)
|
|
60
|
+
expect(await read(file)).toMatchSnapshot(`${file} — before`);
|
|
61
|
+
});
|
|
62
|
+
});
|
|
63
|
+
|
|
64
|
+
when('[t1] apply runs', () => {
|
|
65
|
+
useThen('apply the declarations', async () => applyAll());
|
|
66
|
+
|
|
67
|
+
then('the dao config moves to dialect 17, and keeps its own exclusions', async () => {
|
|
68
|
+
const after = await read(FILES[0]!);
|
|
69
|
+
expect(after).toContain('dialect: 17\n');
|
|
70
|
+
expect(after).not.toContain('dialect: 10.7');
|
|
71
|
+
expect(after).toContain("- 'SurfReportDraft'");
|
|
72
|
+
expect(after).toMatchSnapshot(`${FILES[0]} — after`);
|
|
73
|
+
});
|
|
74
|
+
|
|
75
|
+
then('the testdb keeps the pin the repo chose, and the check passes on it', async () => {
|
|
76
|
+
const after = await read(FILES[1]!);
|
|
77
|
+
expect(after).toContain('FROM postgres:17.9\n');
|
|
78
|
+
expect(() =>
|
|
79
|
+
checkDockerfile(after, {
|
|
80
|
+
declaredFileContents: readFileSync(
|
|
81
|
+
path.join(BEST_PRACTICE_DIR, FILES[1]!),
|
|
82
|
+
'utf-8',
|
|
83
|
+
),
|
|
84
|
+
} as Parameters<typeof checkDockerfile>[1]), // .note = the check reads only declaredFileContents
|
|
85
|
+
).not.toThrow();
|
|
86
|
+
expect(after).toMatchSnapshot(`${FILES[1]} — after`);
|
|
87
|
+
});
|
|
88
|
+
});
|
|
89
|
+
|
|
90
|
+
when('[t2] apply runs a second time', () => {
|
|
91
|
+
const scene = useThen('apply again', async () => {
|
|
92
|
+
const before = await Promise.all(FILES.map((file) => read(file)));
|
|
93
|
+
await applyAll();
|
|
94
|
+
const after = await Promise.all(FILES.map((file) => read(file)));
|
|
95
|
+
return { before, after };
|
|
96
|
+
});
|
|
97
|
+
|
|
98
|
+
then('every file is a fixed point', () => {
|
|
99
|
+
expect(scene.after).toEqual(scene.before);
|
|
100
|
+
});
|
|
101
|
+
});
|
|
102
|
+
});
|
|
103
|
+
|
|
104
|
+
given('[case2] the shipped templates', () => {
|
|
105
|
+
const read = (relativePath: string) =>
|
|
106
|
+
readFileSync(path.join(BEST_PRACTICE_DIR, relativePath), 'utf-8');
|
|
107
|
+
|
|
108
|
+
then('every sql-schema tool config declares dialect 17', () => {
|
|
109
|
+
[
|
|
110
|
+
'provision/schema/control.yml',
|
|
111
|
+
'codegen.sql.schema.yml',
|
|
112
|
+
'codegen.sql.types.yml',
|
|
113
|
+
'codegen.sql.dao.yml',
|
|
114
|
+
].forEach((file) => expect(read(file)).toContain('\ndialect: 17\n'));
|
|
115
|
+
});
|
|
116
|
+
|
|
117
|
+
then('the healthcheck probes the repo own database, not a peer repo name', () => {
|
|
118
|
+
const compose = read('provision/docker/testdb/docker-compose.yml');
|
|
119
|
+
expect(compose).toContain(
|
|
120
|
+
"pg_isready -U postgres -d @declapract{variable.databaseName}'",
|
|
121
|
+
);
|
|
122
|
+
expect(compose).not.toContain('homeservicesdb');
|
|
123
|
+
});
|
|
124
|
+
|
|
125
|
+
then('the dockerfile check flags a drift outside the pin line', () => {
|
|
126
|
+
expect(() =>
|
|
127
|
+
checkDockerfile('FROM postgres:17.9\n', {
|
|
128
|
+
declaredFileContents: read(
|
|
129
|
+
'provision/docker/testdb/build-image.dockerfile',
|
|
130
|
+
),
|
|
131
|
+
} as Parameters<typeof checkDockerfile>[1]),
|
|
132
|
+
).toThrow('build-image.dockerfile must match the template');
|
|
133
|
+
});
|
|
134
|
+
});
|
|
135
|
+
|
|
136
|
+
given('[case3] check-engine-skew.sh', () => {
|
|
137
|
+
const runSkewCheck = (input: { args: string[]; testdbPin: string | null }) => {
|
|
138
|
+
const dir = genTempDir({ slug: 'check-engine-skew' });
|
|
139
|
+
const dockerfile = path.join(dir, 'build-image.dockerfile');
|
|
140
|
+
if (input.testdbPin !== null)
|
|
141
|
+
writeFileSync(dockerfile, `${input.testdbPin}\n`);
|
|
142
|
+
const skewCheckPath = path.join(
|
|
143
|
+
BEST_PRACTICE_DIR,
|
|
144
|
+
'provision/docker/testdb/check-engine-skew.sh',
|
|
145
|
+
);
|
|
146
|
+
const result = spawnSync(
|
|
147
|
+
'bash',
|
|
148
|
+
[skewCheckPath, '--dockerfile', dockerfile, ...input.args],
|
|
149
|
+
{
|
|
150
|
+
encoding: 'utf-8',
|
|
151
|
+
env: { ...process.env, AWS_PROFILE: 'check-engine-skew-absent-profile' },
|
|
152
|
+
},
|
|
153
|
+
);
|
|
154
|
+
// mask both host paths, so the snapshot holds on any checkout
|
|
155
|
+
const asMasked = (text: string) =>
|
|
156
|
+
text
|
|
157
|
+
.replaceAll(dockerfile, '<dockerfile>')
|
|
158
|
+
.replaceAll(skewCheckPath, '<check-engine-skew.sh>');
|
|
159
|
+
return {
|
|
160
|
+
status: result.status,
|
|
161
|
+
stdout: asMasked(result.stdout),
|
|
162
|
+
stderr: asMasked(result.stderr),
|
|
163
|
+
};
|
|
164
|
+
};
|
|
165
|
+
|
|
166
|
+
[
|
|
167
|
+
{
|
|
168
|
+
name: 'the testdb leads the livedb',
|
|
169
|
+
testdbPin: 'FROM postgres:17.11',
|
|
170
|
+
args: ['--livedb-version', '13.23'],
|
|
171
|
+
status: 2,
|
|
172
|
+
expected: 'pin the testdb to postgres 13',
|
|
173
|
+
},
|
|
174
|
+
{
|
|
175
|
+
name: 'the testdb leads a livedb below its declared target',
|
|
176
|
+
testdbPin: 'FROM postgres:17.11',
|
|
177
|
+
args: ['--livedb-version', '13.23', '--declared-version', '17.11'],
|
|
178
|
+
status: 2,
|
|
179
|
+
expected: 'the livedb sits below its declared target 17',
|
|
180
|
+
},
|
|
181
|
+
{
|
|
182
|
+
name: 'the testdb trails the livedb',
|
|
183
|
+
testdbPin: 'FROM postgres:13.20',
|
|
184
|
+
args: ['--livedb-version', '17.11'],
|
|
185
|
+
status: 0,
|
|
186
|
+
expected: '::warning title=engine skew::',
|
|
187
|
+
},
|
|
188
|
+
{
|
|
189
|
+
name: 'the majors match',
|
|
190
|
+
testdbPin: 'FROM postgres:17.11',
|
|
191
|
+
args: ['--livedb-version', '17.7'],
|
|
192
|
+
status: 0,
|
|
193
|
+
expected: 'majors match',
|
|
194
|
+
},
|
|
195
|
+
{
|
|
196
|
+
name: 'the dockerfile has no postgres pin',
|
|
197
|
+
testdbPin: 'FROM alpine:3',
|
|
198
|
+
args: ['--livedb-version', '17.11'],
|
|
199
|
+
status: 1,
|
|
200
|
+
expected: "💥 MalfunctionError: no 'FROM postgres:<major>' pin found",
|
|
201
|
+
},
|
|
202
|
+
{
|
|
203
|
+
name: 'a flag with no value',
|
|
204
|
+
testdbPin: 'FROM postgres:17.11',
|
|
205
|
+
args: ['--livedb-version'],
|
|
206
|
+
status: 2,
|
|
207
|
+
expected: '✋ ConstraintError: --livedb-version needs a value',
|
|
208
|
+
},
|
|
209
|
+
{
|
|
210
|
+
name: 'the livedb read fails',
|
|
211
|
+
testdbPin: 'FROM postgres:17.11',
|
|
212
|
+
args: [
|
|
213
|
+
'--config',
|
|
214
|
+
path.join(BEST_PRACTICE_DIR, 'config/test.json'),
|
|
215
|
+
],
|
|
216
|
+
status: 1,
|
|
217
|
+
expected: 'rds:DescribeDBClusters',
|
|
218
|
+
},
|
|
219
|
+
].forEach((thisCase, index) =>
|
|
220
|
+
when(`[t${index}] ${thisCase.name}`, () => {
|
|
221
|
+
const result = useThen('the check runs', async () =>
|
|
222
|
+
runSkewCheck({ args: thisCase.args, testdbPin: thisCase.testdbPin }),
|
|
223
|
+
);
|
|
224
|
+
|
|
225
|
+
then(`it exits ${thisCase.status} and says so`, () => {
|
|
226
|
+
expect(result.status).toEqual(thisCase.status);
|
|
227
|
+
expect(`${result.stdout}${result.stderr}`).toContain(thisCase.expected);
|
|
228
|
+
});
|
|
229
|
+
|
|
230
|
+
then('the check lines match the snapshot', () => {
|
|
231
|
+
expect({
|
|
232
|
+
status: result.status,
|
|
233
|
+
stdout: result.stdout,
|
|
234
|
+
stderr: result.stderr
|
|
235
|
+
.split('\n')
|
|
236
|
+
.filter((line) => /^(✋|💥| {3})/.test(line))
|
|
237
|
+
.join('\n'),
|
|
238
|
+
}).toMatchSnapshot();
|
|
239
|
+
});
|
|
240
|
+
}),
|
|
241
|
+
);
|
|
242
|
+
});
|
|
243
|
+
});
|