@casekit/orm 0.0.1-alpha.12 → 0.0.1-alpha.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (227) hide show
  1. package/package.json +13 -3
  2. package/.env +0 -2
  3. package/.eslintrc.cjs +0 -69
  4. package/.github/actions/ci-setup/action.yml +0 -19
  5. package/.github/dependabot.yml +0 -12
  6. package/.github/workflows/ci.yml +0 -119
  7. package/.github/workflows/dependabot.yml +0 -26
  8. package/.github/workflows/semgrep.yml +0 -24
  9. package/.prettierrc.cjs +0 -11
  10. package/.vscode/tasks.json +0 -28
  11. package/codecov.yml +0 -7
  12. package/lib/orm.query.test.d.ts +0 -2
  13. package/lib/orm.query.test.d.ts.map +0 -1
  14. package/lib/orm.query.test.js +0 -22
  15. package/lib/orm.query.test.js.map +0 -1
  16. package/src/Connection.ts +0 -65
  17. package/src/errors.ts +0 -18
  18. package/src/index.ts +0 -16
  19. package/src/logger.ts +0 -3
  20. package/src/migrate/commands/implode.ts +0 -46
  21. package/src/migrate/index.ts +0 -1
  22. package/src/migrate/migrator.ts +0 -24
  23. package/src/migrate/sql/createExtensionsSql.test.ts +0 -26
  24. package/src/migrate/sql/createExtensionsSql.ts +0 -16
  25. package/src/migrate/sql/createForeignKeyConstraintSql.test.ts +0 -50
  26. package/src/migrate/sql/createForeignKeyConstraintSql.ts +0 -44
  27. package/src/migrate/sql/createSchemasSql.test.ts +0 -81
  28. package/src/migrate/sql/createSchemasSql.ts +0 -15
  29. package/src/migrate/sql/createTableSql.properties.ts +0 -38
  30. package/src/migrate/sql/createTableSql.test.ts +0 -74
  31. package/src/migrate/sql/createTableSql.ts +0 -53
  32. package/src/migrate/sql/createUniqueConstraintSql.ts +0 -27
  33. package/src/migrate/sql/dropSchemasSql.ts +0 -15
  34. package/src/migrate/sql/dropTableSql.ts +0 -13
  35. package/src/orm.query.test.ts +0 -28
  36. package/src/orm.ts +0 -370
  37. package/src/pull/index.ts +0 -1
  38. package/src/pull/introspect/getForeignKeys.ts +0 -64
  39. package/src/pull/introspect/getPrimaryKeys.ts +0 -26
  40. package/src/pull/introspect/getTables.ts +0 -51
  41. package/src/pull/introspect/getUniqueConstraints.ts +0 -39
  42. package/src/pull/parse/parseCreateUniqueIndexStatement.test.ts +0 -14
  43. package/src/pull/parse/parseCreateUniqueIndexStatement.ts +0 -19
  44. package/src/pull/pull.ts +0 -78
  45. package/src/pull/render/renderModel.test.ts +0 -144
  46. package/src/pull/render/renderModel.ts +0 -141
  47. package/src/pull/render/renderModelsIndex.ts +0 -24
  48. package/src/pull/render/renderRelations.ts +0 -77
  49. package/src/pull/render/renderRelationsIndex.ts +0 -24
  50. package/src/pull/types/ColumnMeta.ts +0 -10
  51. package/src/pull/types/ForeignKey.ts +0 -6
  52. package/src/pull/types/PrimaryKey.ts +0 -6
  53. package/src/pull/types/UniqueConstraint.ts +0 -8
  54. package/src/pull/util/format.ts +0 -17
  55. package/src/pull/util/quote.ts +0 -7
  56. package/src/pull/util/unquote.ts +0 -9
  57. package/src/queries/clauses/IncludeClause.ts +0 -39
  58. package/src/queries/clauses/LateralByClause.ts +0 -4
  59. package/src/queries/clauses/ReturningClause.ts +0 -7
  60. package/src/queries/clauses/SelectClause.ts +0 -7
  61. package/src/queries/clauses/WhereClause.ts +0 -16
  62. package/src/queries/clauses/helpers/OptionalColumn.ts +0 -18
  63. package/src/queries/clauses/helpers/OptionalParams.ts +0 -14
  64. package/src/queries/clauses/helpers/RequiredColumn.ts +0 -8
  65. package/src/queries/clauses/helpers/RequiredParams.ts +0 -14
  66. package/src/queries/clauses/include/IncludedRelationModel.ts +0 -13
  67. package/src/queries/clauses/include/IncludedRelationName.ts +0 -11
  68. package/src/queries/clauses/include/IncludedRelationQuery.ts +0 -20
  69. package/src/queries/clauses/where/buildWhereClause.ts +0 -121
  70. package/src/queries/clauses/where/buildWhereClauses.test.ts +0 -145
  71. package/src/queries/clauses/where/buildWhereClauses.ts +0 -45
  72. package/src/queries/clauses/where/operators.ts +0 -13
  73. package/src/queries/clauses/where/types/WhereClauseValue.ts +0 -39
  74. package/src/queries/count/buildCount.ts +0 -77
  75. package/src/queries/count/countToSql.ts +0 -66
  76. package/src/queries/count/tests/count.test.ts +0 -35
  77. package/src/queries/count/types/BaseCountParams.ts +0 -11
  78. package/src/queries/count/types/CountBuilder.ts +0 -45
  79. package/src/queries/count/types/CountParams.ts +0 -27
  80. package/src/queries/count.ts +0 -33
  81. package/src/queries/create/buildCreate.ts +0 -67
  82. package/src/queries/create/createResultSchema.ts +0 -24
  83. package/src/queries/create/createToSql.ts +0 -44
  84. package/src/queries/create/tests/createMany.varied-keys.test.ts +0 -28
  85. package/src/queries/create/tests/createOne.test-d.ts +0 -116
  86. package/src/queries/create/tests/createOne.test.ts +0 -197
  87. package/src/queries/create/types/BaseCreateManyParams.ts +0 -7
  88. package/src/queries/create/types/BaseCreateOneParams.ts +0 -7
  89. package/src/queries/create/types/CreateManyParams.ts +0 -15
  90. package/src/queries/create/types/CreateManyResult.ts +0 -17
  91. package/src/queries/create/types/CreateOneParams.ts +0 -22
  92. package/src/queries/create/types/CreateOneResult.ts +0 -17
  93. package/src/queries/createMany.ts +0 -38
  94. package/src/queries/createOne.ts +0 -27
  95. package/src/queries/delete/buildDelete.ts +0 -56
  96. package/src/queries/delete/deleteResultSchema.ts +0 -23
  97. package/src/queries/delete/deleteToSql.ts +0 -48
  98. package/src/queries/delete/tests/deleteOne.test.ts +0 -108
  99. package/src/queries/delete/types/BaseDeleteParams.ts +0 -9
  100. package/src/queries/delete/types/DeleteManyResult.ts +0 -16
  101. package/src/queries/delete/types/DeleteOneResult.ts +0 -16
  102. package/src/queries/delete/types/DeleteParams.ts +0 -12
  103. package/src/queries/deleteMany.ts +0 -33
  104. package/src/queries/deleteOne.ts +0 -32
  105. package/src/queries/find/buildFind.ts +0 -138
  106. package/src/queries/find/findResultSchema.ts +0 -32
  107. package/src/queries/find/findToSql.test.ts +0 -123
  108. package/src/queries/find/findToSql.ts +0 -141
  109. package/src/queries/find/getIncludedManyToManyRelations.ts +0 -49
  110. package/src/queries/find/getIncludedOneToManyRelations.ts +0 -44
  111. package/src/queries/find/tests/findMany.include.test.ts +0 -107
  112. package/src/queries/find/tests/findMany.limit.test-d.ts +0 -75
  113. package/src/queries/find/tests/findMany.limit.test.ts +0 -176
  114. package/src/queries/find/tests/findMany.nullable-relations.test.ts +0 -127
  115. package/src/queries/find/tests/findMany.orderBy.test-d.ts +0 -84
  116. package/src/queries/find/tests/findMany.orderBy.test.ts +0 -184
  117. package/src/queries/find/tests/findMany.select.test-d.ts +0 -117
  118. package/src/queries/find/tests/findMany.select.test.ts +0 -188
  119. package/src/queries/find/tests/findMany.too-deep.test-d.ts +0 -154
  120. package/src/queries/find/tests/findMany.where.test-d.ts +0 -85
  121. package/src/queries/find/tests/findMany.where.test.ts +0 -76
  122. package/src/queries/find/tests/middleware.find.where.test.ts +0 -467
  123. package/src/queries/find/types/BaseFindParams.ts +0 -18
  124. package/src/queries/find/types/FindBuilder.ts +0 -73
  125. package/src/queries/find/types/FindManyParams.ts +0 -24
  126. package/src/queries/find/types/FindManyResult.ts +0 -13
  127. package/src/queries/find/types/FindOneParams.ts +0 -17
  128. package/src/queries/find/types/FindOneResult.ts +0 -50
  129. package/src/queries/findMany.ts +0 -134
  130. package/src/queries/findOne.ts +0 -30
  131. package/src/queries/middleware/Middleware.ts +0 -53
  132. package/src/queries/middleware/ValuesMiddleware.ts +0 -9
  133. package/src/queries/middleware/WhereMiddleware.ts +0 -16
  134. package/src/queries/update/buildUpdate.ts +0 -76
  135. package/src/queries/update/tests/updateOne.test.ts +0 -118
  136. package/src/queries/update/types/BaseUpdateParams.ts +0 -10
  137. package/src/queries/update/types/UpdateManyResult.ts +0 -16
  138. package/src/queries/update/types/UpdateOneResult.ts +0 -16
  139. package/src/queries/update/types/UpdateParams.ts +0 -14
  140. package/src/queries/update/types/UpdateValues.ts +0 -12
  141. package/src/queries/update/updateResultSchema.ts +0 -23
  142. package/src/queries/update/updateToSql.ts +0 -43
  143. package/src/queries/updateMany.ts +0 -33
  144. package/src/queries/updateOne.ts +0 -33
  145. package/src/queries/util/hasConditions.test.ts +0 -36
  146. package/src/queries/util/hasConditions.ts +0 -14
  147. package/src/queries/util/rowToObject.test.ts +0 -76
  148. package/src/queries/util/rowToObject.ts +0 -13
  149. package/src/queries/util/tableAlias.test.ts +0 -20
  150. package/src/queries/util/tableAlias.ts +0 -10
  151. package/src/schema/populate/composeMiddleware.ts +0 -51
  152. package/src/schema/populate/populateConfiguration.ts +0 -48
  153. package/src/schema/populate/populateModel.ts +0 -98
  154. package/src/schema/populate/suggestedColumnSchema.ts +0 -62
  155. package/src/schema/types/base/BaseColumn.ts +0 -10
  156. package/src/schema/types/base/BaseConfiguration.ts +0 -14
  157. package/src/schema/types/base/BaseModel.ts +0 -12
  158. package/src/schema/types/base/BaseModels.ts +0 -3
  159. package/src/schema/types/base/BaseOrm.ts +0 -8
  160. package/src/schema/types/base/BaseRelation.ts +0 -19
  161. package/src/schema/types/base/BaseRelations.ts +0 -3
  162. package/src/schema/types/constraints/ForeignKey.ts +0 -13
  163. package/src/schema/types/constraints/UniqueConstraint.ts +0 -9
  164. package/src/schema/types/helpers/ColumnName.ts +0 -6
  165. package/src/schema/types/helpers/ColumnType.ts +0 -23
  166. package/src/schema/types/helpers/Columns.ts +0 -3
  167. package/src/schema/types/helpers/HasDefault.ts +0 -11
  168. package/src/schema/types/helpers/IsNullable.ts +0 -7
  169. package/src/schema/types/helpers/IsProvided.ts +0 -8
  170. package/src/schema/types/helpers/IsSerial.ts +0 -10
  171. package/src/schema/types/helpers/ModelName.ts +0 -6
  172. package/src/schema/types/loose/LooseColumnDefinition.ts +0 -80
  173. package/src/schema/types/loose/LooseModelDefinition.ts +0 -47
  174. package/src/schema/types/loose/LooseModelDefinitions.ts +0 -3
  175. package/src/schema/types/loose/LooseRelationDefinition.ts +0 -10
  176. package/src/schema/types/loose/LooseRelationsDefinition.ts +0 -8
  177. package/src/schema/types/loose/LooseRelationsDefinitions.ts +0 -7
  178. package/src/schema/types/postgres/DataType.ts +0 -65
  179. package/src/schema/types/relations/ManyToManyRelation.ts +0 -15
  180. package/src/schema/types/relations/ManyToOneRelation.ts +0 -14
  181. package/src/schema/types/relations/OneToManyRelation.ts +0 -12
  182. package/src/schema/types/strict/ColumnDefinition.ts +0 -81
  183. package/src/schema/types/strict/ModelDefinition.ts +0 -47
  184. package/src/schema/types/strict/ModelDefinitions.ts +0 -3
  185. package/src/schema/types/strict/RelationDefinition.ts +0 -13
  186. package/src/schema/types/strict/RelationsDefinition.ts +0 -8
  187. package/src/schema/types/strict/RelationsDefinitions.ts +0 -7
  188. package/src/schema/validate/validateConfiguration.ts +0 -9
  189. package/src/schema/validate/validateModel.ts +0 -32
  190. package/src/sql/SQLStatement.test.ts +0 -112
  191. package/src/sql/SQLStatement.ts +0 -86
  192. package/src/sql/index.ts +0 -2
  193. package/src/sql/sql.ts +0 -47
  194. package/src/test/db/index.ts +0 -27
  195. package/src/test/db/models/foo.model.ts +0 -24
  196. package/src/test/db/models/foo.relations.ts +0 -4
  197. package/src/test/db/models/post.model.ts +0 -34
  198. package/src/test/db/models/post.relations.ts +0 -21
  199. package/src/test/db/models/tenant.model.ts +0 -14
  200. package/src/test/db/models/tenant.relations.ts +0 -22
  201. package/src/test/db/models/tenantUser.model.ts +0 -23
  202. package/src/test/db/models/tenantUser.relations.ts +0 -15
  203. package/src/test/db/models/user.model.ts +0 -29
  204. package/src/test/db/models/user.relations.ts +0 -38
  205. package/src/test/db/models.ts +0 -15
  206. package/src/test/db/relations.ts +0 -13
  207. package/src/test/gen/column.ts +0 -39
  208. package/src/test/gen/index.ts +0 -2
  209. package/src/test/gen/model.ts +0 -58
  210. package/src/test/gen/sqldate.ts +0 -8
  211. package/src/test/globalSetup.ts +0 -6
  212. package/src/test/seed/index.ts +0 -75
  213. package/src/test/util/withRollback.ts +0 -18
  214. package/src/test/util/withTransaction.ts +0 -19
  215. package/src/types/ColumnName.ts +0 -6
  216. package/src/types/ColumnType.ts +0 -20
  217. package/src/types/Configuration.ts +0 -21
  218. package/src/types/ModelType.ts +0 -20
  219. package/src/types/util/DeepRequired.ts +0 -7
  220. package/src/types/util/DisallowExtraKeys.ts +0 -5
  221. package/src/types/util/NonEmptyArray.ts +0 -1
  222. package/src/types/util/Simplify.ts +0 -8
  223. package/src/util/ensureArray.ts +0 -4
  224. package/src/util/interleave.test.ts +0 -35
  225. package/src/util/interleave.ts +0 -8
  226. package/tsconfig.json +0 -18
  227. package/vitest.config.ts +0 -15
package/package.json CHANGED
@@ -1,10 +1,20 @@
1
1
  {
2
2
  "name": "@casekit/orm",
3
- "version": "0.0.1-alpha.12",
3
+ "version": "0.0.1-alpha.13",
4
4
  "description": "A simple ORM",
5
5
  "type": "module",
6
6
  "main": "lib/index.js",
7
- "types": "lib/index.d.js",
7
+ "types": "lib/index.d.ts",
8
+ "exports": {
9
+ ".": "./lib/index.js"
10
+ },
11
+ "files": [
12
+ "./lib/*",
13
+ "!./lib/**.test.js",
14
+ "!./lib/**.test.js.map",
15
+ "!./lib/**.test.d.ts",
16
+ "!./lib/**.test.d.ts.map"
17
+ ],
8
18
  "keywords": [],
9
19
  "author": "",
10
20
  "license": "ISC",
@@ -37,7 +47,7 @@
37
47
  "object-hash": "^3.0.0",
38
48
  "pg": "^8.11.5",
39
49
  "pg-format": "^1.0.4",
40
- "pino": "^8.20.0",
50
+ "pino": "^9.0.0",
41
51
  "pluralize": "^8.0.0",
42
52
  "prettier": "^3.2.5",
43
53
  "ts-toolbelt": "^9.6.0",
package/.env DELETED
@@ -1,2 +0,0 @@
1
- PGDATABASE=orm
2
- PGPASSWORD=password
package/.eslintrc.cjs DELETED
@@ -1,69 +0,0 @@
1
- /** @type {import('eslint').Linter.Config} */
2
- module.exports = {
3
- root: true,
4
- parserOptions: {
5
- ecmaVersion: "latest",
6
- sourceType: "module",
7
- ecmaFeatures: {
8
- jsx: true,
9
- },
10
- },
11
- env: {
12
- browser: true,
13
- commonjs: true,
14
- es6: true,
15
- },
16
-
17
- // Base config
18
- extends: ["eslint:recommended"],
19
-
20
- ignorePatterns: ["vitest.config.ts"],
21
-
22
- overrides: [
23
- // Typescript
24
- {
25
- files: ["**/*.{ts,tsx}"],
26
- plugins: ["@typescript-eslint", "import"],
27
- parser: "@typescript-eslint/parser",
28
- parserOptions: {
29
- project: "./tsconfig.json",
30
- tsconfigRootDir: "./",
31
- },
32
- settings: {
33
- "import/internal-regex": "^~/",
34
- "import/resolver": {
35
- node: {
36
- extensions: [".ts", ".tsx"],
37
- },
38
- typescript: {
39
- alwaysTryTypes: true,
40
- },
41
- },
42
- },
43
- extends: [
44
- "plugin:@typescript-eslint/recommended",
45
- "plugin:import/recommended",
46
- "plugin:import/typescript",
47
- ],
48
- rules: {
49
- "@typescript-eslint/no-unused-vars": [
50
- "error",
51
- {
52
- argsIgnorePattern: "^_",
53
- varsIgnorePattern: "^_",
54
- caughtErrorsIgnorePattern: "^_",
55
- },
56
- ],
57
- "@typescript-eslint/no-floating-promises": "error",
58
- },
59
- },
60
-
61
- // Node
62
- {
63
- files: [".eslintrc.cjs"],
64
- env: {
65
- node: true,
66
- },
67
- },
68
- ],
69
- };
@@ -1,19 +0,0 @@
1
- name: CI setup
2
- runs:
3
- using: composite
4
- steps:
5
- - uses: pnpm/action-setup@v3
6
- name: Install pnpm
7
- with:
8
- version: 8
9
- run_install: false
10
-
11
- - uses: actions/setup-node@v4
12
- with:
13
- node-version: 21
14
- cache: pnpm
15
- registry-url: "https://registry.npmjs.org"
16
-
17
- - name: Install dependencies
18
- run: pnpm install
19
- shell: bash
@@ -1,12 +0,0 @@
1
- version: 2
2
- updates:
3
- - package-ecosystem: "npm"
4
- directory: "/"
5
- open-pull-requests-limit: 25
6
- schedule:
7
- interval: "daily"
8
- - package-ecosystem: "github-actions"
9
- directory: "/"
10
- open-pull-requests-limit: 25
11
- schedule:
12
- interval: "daily"
@@ -1,119 +0,0 @@
1
- name: CI
2
- on:
3
- push:
4
- branches: [main]
5
- pull_request:
6
- branches: [main]
7
- permissions:
8
- contents: write
9
-
10
- jobs:
11
- test:
12
- name: "🧪 Run tests"
13
- timeout-minutes: 10
14
- runs-on: ubuntu-latest
15
- env:
16
- PGUSER: casekit
17
- PGPASSWORD: password
18
- PGDATABASE: orm
19
- services:
20
- postgres:
21
- image: postgres
22
- env:
23
- POSTGRES_USER: ${{ env.PGUSER }}
24
- POSTGRES_PASSWORD: ${{ env.PGPASSWORD }}
25
- POSTGRES_DB: ${{ env.PGDATABASE }}
26
- options: >-
27
- --health-cmd pg_isready
28
- --health-interval 10s
29
- --health-timeout 5s
30
- --health-retries 5
31
- ports:
32
- - 5432:5432
33
- steps:
34
- - uses: actions/checkout@v4
35
- - uses: ./.github/actions/ci-setup
36
-
37
- - name: Run tests
38
- run: pnpm test:coverage
39
-
40
- - name: Upload coverage reports to Codecov
41
- uses: codecov/codecov-action@v4.3.0
42
- if: ${{ github.actor != 'dependabot[bot]' }}
43
- with:
44
- token: ${{ secrets.CODECOV_TOKEN }}
45
- slug: casekit/orm
46
-
47
- typecheck:
48
- name: "📐 Typecheck"
49
- timeout-minutes: 10
50
- runs-on: ubuntu-latest
51
- steps:
52
- - uses: actions/checkout@v4
53
- - uses: ./.github/actions/ci-setup
54
- - name: Typecheck
55
- run: pnpm typecheck
56
-
57
- lint:
58
- name: "🧹 Run eslint"
59
- timeout-minutes: 10
60
- runs-on: ubuntu-latest
61
- steps:
62
- - uses: actions/checkout@v4
63
- - uses: ./.github/actions/ci-setup
64
- - name: Lint
65
- run: pnpm lint
66
-
67
- prettier:
68
- name: "💅 Run prettier"
69
- timeout-minutes: 10
70
- runs-on: ubuntu-latest
71
- steps:
72
- - uses: actions/checkout@v4
73
- - uses: ./.github/actions/ci-setup
74
- - name: Prettier
75
- run: pnpm prettier
76
-
77
- publish:
78
- name: "🔥 Publish"
79
- needs: [test, typecheck, lint, prettier]
80
- runs-on: ubuntu-latest
81
- if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/main' }}
82
- steps:
83
- - uses: actions/checkout@v4
84
- - name: Set up Git config
85
- run: |
86
- git config user.name "$(git log -n 1 --pretty=format:%an)"
87
- git config user.email "$(git log -n 1 --pretty=format:%ae)"
88
- - uses: ./.github/actions/ci-setup
89
- - name: Build
90
- run: pnpm build
91
- - name: Version
92
- run: pnpm version prerelease --preid=alpha
93
- - name: Publish
94
- run: pnpm publish
95
- env:
96
- NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
97
- - name: Push
98
- run: git push
99
- - name: Push tag
100
- run: git push --tags
101
-
102
- dependabot:
103
- name: "🤖 Dependabot"
104
- needs: [test, typecheck, lint, prettier]
105
- runs-on: ubuntu-latest
106
- if: ${{ github.actor == 'dependabot[bot]' && github.event_name == 'pull_request'}}
107
- steps:
108
- - name: Fetch Dependabot metadata
109
- id: dependabot-metadata
110
- uses: dependabot/fetch-metadata@v2
111
- with:
112
- alert-lookup: true
113
- github-token: ${{ secrets.DEPENDABOT_METADATA_PAT }}
114
- - name: Enable auto-merge for Dependabot Security Updates
115
- run: gh pr merge --auto --squash "$PR_URL"
116
- env:
117
- PR_URL: ${{ github.event.pull_request.html_url }}
118
- GITHUB_TOKEN: ${{ secrets.DEPENDABOT_MERGE_PAT }}
119
- if: ${{ steps.dependabot-metadata.outputs.cvss != 0 }}
@@ -1,26 +0,0 @@
1
- name: Dependabot
2
- on:
3
- workflow_dispatch: {}
4
- schedule:
5
- # random HH:MM to avoid a load spike on GitHub Actions at 00:00
6
- - cron: 34 2 * * *
7
- permissions:
8
- contents: write
9
- statuses: read
10
- checks: read
11
- jobs:
12
- merge_prs:
13
- name: "Merge PRs > 1 week old"
14
- runs-on: ubuntu-latest
15
- steps:
16
- - name: Checkout
17
- uses: actions/checkout@v4
18
- - name: Merge PRs
19
- run: |
20
- set -e
21
- # Merge all Dependabot PRs that were created more than a week ago and have all checks passing
22
- for pr in `gh pr list --json number,author,createdAt --search "created:<=$(date -d "2 days ago" +"%Y-%m-%d") author:app/dependabot status:success" --jq '.[].number'`; do
23
- gh pr merge --squash "$pr"
24
- done
25
- env:
26
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
@@ -1,24 +0,0 @@
1
- on:
2
- workflow_dispatch: {}
3
- pull_request: {}
4
- push:
5
- branches:
6
- - main
7
- - master
8
- paths:
9
- - .github/workflows/semgrep.yml
10
- schedule:
11
- # random HH:MM to avoid a load spike on GitHub Actions at 00:00
12
- - cron: 53 8 * * *
13
- name: Semgrep
14
- jobs:
15
- semgrep:
16
- name: semgrep/ci
17
- runs-on: ubuntu-20.04
18
- env:
19
- SEMGREP_APP_TOKEN: ${{ secrets.SEMGREP_APP_TOKEN }}
20
- container:
21
- image: returntocorp/semgrep
22
- steps:
23
- - uses: actions/checkout@v4
24
- - run: semgrep ci
package/.prettierrc.cjs DELETED
@@ -1,11 +0,0 @@
1
- module.exports = {
2
- printWidth: 80,
3
- tabWidth: 4,
4
- trailingComma: "all",
5
- singleQuote: false,
6
- semi: true,
7
- importOrder: ["^@casekit/(.*)$", "^[^.](.*)$", "^[./]"],
8
- importOrderSeparation: true,
9
- importOrderSortSpecifiers: true,
10
- plugins: ["@trivago/prettier-plugin-sort-imports"],
11
- };
@@ -1,28 +0,0 @@
1
- {
2
- "version": "2.0.0",
3
- "tasks": [
4
- {
5
- "type": "npm",
6
- "script": "build",
7
- "group": "build",
8
- "problemMatcher": [],
9
- "label": "npm: build",
10
- "detail": "rm -rf lib && tsc"
11
- },
12
- {
13
- "type": "npm",
14
- "script": "check:all",
15
- "problemMatcher": [],
16
- "label": "npm: check:all",
17
- "detail": "CI=true pnpm test && CI=true pnpm lint && CI=true pnpm prettier && CI=true pnpm typecheck"
18
- },
19
- {
20
- "type": "npm",
21
- "script": "build",
22
- "group": "build",
23
- "problemMatcher": [],
24
- "label": "npm: build",
25
- "detail": "rm -rf lib && tsc"
26
- }
27
- ]
28
- }
package/codecov.yml DELETED
@@ -1,7 +0,0 @@
1
- coverage:
2
- status:
3
- changes: off
4
- patch: off
5
- project:
6
- default:
7
- informational: true
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=orm.query.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"orm.query.test.d.ts","sourceRoot":"","sources":["../src/orm.query.test.ts"],"names":[],"mappings":""}
@@ -1,22 +0,0 @@
1
- import { describe, expect, test } from "vitest";
2
- import { db } from "./test/db";
3
- import { seed } from "./test/seed";
4
- describe("orm.query", () => {
5
- test("allows arbitrary sql queries to be run against the database", async () => {
6
- await db.transact(async (db) => {
7
- await seed(db, {
8
- users: [
9
- {
10
- username: "Russell",
11
- tenants: [{ name: "Popova Park", posts: 6 }],
12
- },
13
- ],
14
- });
15
- const result = await db.query `
16
- select count(1)::int as total from casekit.post;
17
- `;
18
- expect(result[0]).toEqual({ total: 6 });
19
- }, { rollback: true });
20
- });
21
- });
22
- //# sourceMappingURL=orm.query.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"orm.query.test.js","sourceRoot":"","sources":["../src/orm.query.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAEhD,OAAO,EAAE,EAAE,EAAE,MAAM,WAAW,CAAC;AAC/B,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAEnC,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE;IACvB,IAAI,CAAC,6DAA6D,EAAE,KAAK,IAAI,EAAE;QAC3E,MAAM,EAAE,CAAC,QAAQ,CACb,KAAK,EAAE,EAAE,EAAE,EAAE;YACT,MAAM,IAAI,CAAC,EAAE,EAAE;gBACX,KAAK,EAAE;oBACH;wBACI,QAAQ,EAAE,SAAS;wBACnB,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;qBAC/C;iBACJ;aACJ,CAAC,CAAC;YAEH,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,KAAK,CAAmB;;iBAE/C,CAAC;YAEF,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;QAC5C,CAAC,EACD,EAAE,QAAQ,EAAE,IAAI,EAAE,CACrB,CAAC;IACN,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
package/src/Connection.ts DELETED
@@ -1,65 +0,0 @@
1
- import pg, { QueryResultRow } from "pg";
2
- import pgfmt from "pg-format";
3
- import * as uuid from "uuid";
4
-
5
- import { SQLStatement } from "./sql";
6
-
7
- export class Connection {
8
- constructor(
9
- private pool: pg.Pool,
10
- private client?: pg.PoolClient,
11
- ) {}
12
-
13
- public query = async <T extends QueryResultRow>(query: SQLStatement) => {
14
- if (this.client) {
15
- return this.client.query<T>(query);
16
- } else {
17
- return this.pool.query(query);
18
- }
19
- };
20
-
21
- public transact = async <T>(
22
- fn: (conn: Connection) => Promise<T>,
23
- { rollback = false }: { rollback?: boolean } = {},
24
- ) => {
25
- if (this.client) {
26
- const savepoint = uuid.v4();
27
- try {
28
- await this.client.query(pgfmt("SAVEPOINT %I", savepoint));
29
- const result = await fn(this);
30
- if (rollback) {
31
- await this.client.query(
32
- pgfmt("ROLLBACK TO SAVEPOINT %I", savepoint),
33
- );
34
- } else {
35
- await this.client.query(
36
- pgfmt("RELEASE SAVEPOINT %I", savepoint),
37
- );
38
- }
39
- return result;
40
- } catch (e) {
41
- await this.client.query(
42
- pgfmt("ROLLBACK TO SAVEPOINT %I", savepoint),
43
- );
44
- throw e;
45
- }
46
- } else {
47
- const client = await this.pool.connect();
48
- try {
49
- await client.query("BEGIN");
50
- const result = await fn(new Connection(this.pool, client));
51
- if (rollback) {
52
- await client.query("ROLLBACK");
53
- } else {
54
- await client.query("COMMIT");
55
- }
56
- return result;
57
- } catch (e) {
58
- await client.query("ROLLBACK");
59
- throw e;
60
- } finally {
61
- client.release();
62
- }
63
- }
64
- };
65
- }
package/src/errors.ts DELETED
@@ -1,18 +0,0 @@
1
- import { BaseModel } from "./schema/types/base/BaseModel";
2
-
3
- type OrmErrorMeta = {
4
- model?: [string, BaseModel];
5
- data?: Record<string, unknown>;
6
- };
7
-
8
- export class OrmError extends Error {
9
- meta: OrmErrorMeta | undefined;
10
-
11
- constructor(message: string, meta?: OrmErrorMeta) {
12
- super();
13
- this.message = message;
14
- this.meta = meta;
15
- }
16
- }
17
-
18
- export class InvalidModelDefinitionError extends OrmError {}
package/src/index.ts DELETED
@@ -1,16 +0,0 @@
1
- export { OrmError } from "./errors";
2
- export { migrator, type Migrator } from "./migrate";
3
- export { Orm, orm } from "./orm";
4
- export { pull } from "./pull";
5
- export * from "./queries/clauses/where/operators";
6
- export { type Middleware } from "./queries/middleware/Middleware";
7
- /**
8
- * TODO find a way to use the strict definitions here
9
- * without destroying VS Code autocomplete performance
10
- */
11
- export { type LooseModelDefinition as ModelDefinition } from "./schema/types/loose/LooseModelDefinition";
12
- export { type LooseRelationsDefinition as RelationsDefinition } from "./schema/types/loose/LooseRelationsDefinition";
13
- export { SQLStatement, sql } from "./sql";
14
- export type { ColumnName } from "./types/ColumnName";
15
- export type { ColumnType } from "./types/ColumnType";
16
- export type { ModelType } from "./types/ModelType";
package/src/logger.ts DELETED
@@ -1,3 +0,0 @@
1
- import pino from "pino";
2
-
3
- export const logger = pino({ enabled: process.env.NODE_ENV !== "test" });
@@ -1,46 +0,0 @@
1
- import { BaseOrm } from "../../schema/types/base/BaseOrm";
2
- import { SQLStatement } from "../../sql";
3
- import { createExtensionsSql } from "../sql/createExtensionsSql";
4
- import { createForeignKeyConstraintSql } from "../sql/createForeignKeyConstraintSql";
5
- import { createSchemasSql } from "../sql/createSchemasSql";
6
- import { createTableSql } from "../sql/createTableSql";
7
- import { createUniqueConstraintSql } from "../sql/createUniqueConstraintSql";
8
- import { dropSchemasSql } from "../sql/dropSchemasSql";
9
-
10
- export const implode = async (
11
- db: BaseOrm,
12
- { dryRun, output }: { dryRun: boolean; output: boolean },
13
- ) => {
14
- const statement = new SQLStatement();
15
-
16
- statement.push(dropSchemasSql(db), "\n");
17
- statement.push(createSchemasSql(db), "\n");
18
- statement.push(createExtensionsSql(db), "\n");
19
-
20
- for (const model of Object.values(db.models)) {
21
- statement.push(createTableSql(model), "\n");
22
- for (const constraint of model.uniqueConstraints) {
23
- statement.push(createUniqueConstraintSql(model, constraint), "\n");
24
- }
25
- }
26
-
27
- for (const model of Object.values(db.models)) {
28
- for (const foreignKey of model.foreignKeys) {
29
- statement.push(
30
- createForeignKeyConstraintSql(model, foreignKey),
31
- "\n",
32
- );
33
- }
34
- }
35
-
36
- if (output || process.env.ORM_VERBOSE_LOGGING) console.log(statement.text);
37
-
38
- if (!dryRun) {
39
- try {
40
- await db.connection.query(statement);
41
- } catch (e) {
42
- console.log(e);
43
- throw e;
44
- }
45
- }
46
- };
@@ -1 +0,0 @@
1
- export { type Migrator, migrator } from "./migrator";
@@ -1,24 +0,0 @@
1
- import { Orm } from "..";
2
- import { BaseOrm } from "../schema/types/base/BaseOrm";
3
- import { LooseModelDefinitions } from "../schema/types/loose/LooseModelDefinitions";
4
- import { LooseRelationsDefinitions } from "../schema/types/loose/LooseRelationsDefinitions";
5
- import { implode } from "./commands/implode";
6
-
7
- export class Migrator {
8
- public db: BaseOrm;
9
-
10
- constructor(db: BaseOrm) {
11
- this.db = db;
12
- }
13
-
14
- public async implode(opts = { dryRun: true, output: true }) {
15
- await implode(this.db, opts);
16
- }
17
- }
18
-
19
- export const migrator = <
20
- Models extends LooseModelDefinitions,
21
- Relations extends LooseRelationsDefinitions<Models>,
22
- >(
23
- db: Orm<Models, Relations>,
24
- ) => new Migrator(db as BaseOrm);
@@ -1,26 +0,0 @@
1
- import { unindent } from "@casekit/unindent";
2
-
3
- import pg from "pg";
4
- import { describe, expect, test } from "vitest";
5
-
6
- import { orm } from "../../orm";
7
- import { createExtensionsSql } from "./createExtensionsSql";
8
-
9
- describe("createExtensionsSql", () => {
10
- test("it generates a CREATE EXTENSION command for each extension", () => {
11
- const db = orm({
12
- extensions: ["uuid-ossp", "postgis"],
13
- models: {},
14
- pool: new pg.Pool(),
15
- });
16
- expect(createExtensionsSql(db)?.text).toEqual(unindent`
17
- CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
18
- CREATE EXTENSION IF NOT EXISTS postgis;
19
- `);
20
- });
21
-
22
- test("if no extensions are specified, it returns null", () => {
23
- const db = orm({ models: {}, pool: new pg.Pool() });
24
- expect(createExtensionsSql(db)).toEqual(null);
25
- });
26
- });
@@ -1,16 +0,0 @@
1
- import pgfmt from "pg-format";
2
-
3
- import { BaseOrm } from "../../schema/types/base/BaseOrm";
4
- import { SQLStatement } from "../../sql";
5
-
6
- export const createExtensionsSql = (db: BaseOrm): SQLStatement | null => {
7
- if (db.config.extensions?.length === 0) return null;
8
-
9
- return (
10
- new SQLStatement(
11
- db.config.extensions
12
- ?.map((e) => pgfmt("CREATE EXTENSION IF NOT EXISTS %I;", e))
13
- .join("\n"),
14
- ) ?? null
15
- );
16
- };
@@ -1,50 +0,0 @@
1
- import { unindent } from "@casekit/unindent";
2
-
3
- import pg from "pg";
4
- import { describe, expect, test } from "vitest";
5
-
6
- import { ModelDefinition, orm, sql } from "../../";
7
- import { createForeignKeyConstraintSql } from "./createForeignKeyConstraintSql";
8
-
9
- describe("createForeignKeyConstraintSql", () => {
10
- test("it generates an ALTER TABLE command for the specified foreign key constraint", () => {
11
- const foo = {
12
- schema: "casekit",
13
- columns: {
14
- id: { type: "uuid" },
15
- barId: {
16
- name: "bar_id",
17
- type: "uuid",
18
- references: { table: "bar", column: "id" },
19
- },
20
- bazId: {
21
- name: "baz_id",
22
- type: "uuid",
23
- references: { table: "baz", column: "id" },
24
- },
25
- },
26
- foreignKeys: [
27
- {
28
- columns: ["bar_id", "baz_id"],
29
- references: {
30
- table: "quux",
31
- columns: ["bar_id", "baz_id"],
32
- },
33
- onUpdate: sql`CASCADE`,
34
- },
35
- ],
36
- } as const satisfies ModelDefinition;
37
-
38
- const db = orm({ models: { foo }, pool: new pg.Pool() });
39
-
40
- const result = db.models.foo.foreignKeys
41
- .map((fk) => createForeignKeyConstraintSql(db.models.foo, fk).text)
42
- .join("\n");
43
-
44
- expect(result).toEqual(unindent`
45
- ALTER TABLE casekit.foo ADD CONSTRAINT foo_bar_id_baz_id_fkey FOREIGN KEY (bar_id, baz_id) REFERENCES casekit.quux (bar_id, baz_id) ON UPDATE CASCADE;
46
- ALTER TABLE casekit.foo ADD CONSTRAINT foo_bar_id_fkey FOREIGN KEY (bar_id) REFERENCES casekit.bar (id);
47
- ALTER TABLE casekit.foo ADD CONSTRAINT foo_baz_id_fkey FOREIGN KEY (baz_id) REFERENCES casekit.baz (id);
48
- `);
49
- });
50
- });