@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.
- package/package.json +13 -3
- package/.env +0 -2
- package/.eslintrc.cjs +0 -69
- package/.github/actions/ci-setup/action.yml +0 -19
- package/.github/dependabot.yml +0 -12
- package/.github/workflows/ci.yml +0 -119
- package/.github/workflows/dependabot.yml +0 -26
- package/.github/workflows/semgrep.yml +0 -24
- package/.prettierrc.cjs +0 -11
- package/.vscode/tasks.json +0 -28
- package/codecov.yml +0 -7
- package/lib/orm.query.test.d.ts +0 -2
- package/lib/orm.query.test.d.ts.map +0 -1
- package/lib/orm.query.test.js +0 -22
- package/lib/orm.query.test.js.map +0 -1
- package/src/Connection.ts +0 -65
- package/src/errors.ts +0 -18
- package/src/index.ts +0 -16
- package/src/logger.ts +0 -3
- package/src/migrate/commands/implode.ts +0 -46
- package/src/migrate/index.ts +0 -1
- package/src/migrate/migrator.ts +0 -24
- package/src/migrate/sql/createExtensionsSql.test.ts +0 -26
- package/src/migrate/sql/createExtensionsSql.ts +0 -16
- package/src/migrate/sql/createForeignKeyConstraintSql.test.ts +0 -50
- package/src/migrate/sql/createForeignKeyConstraintSql.ts +0 -44
- package/src/migrate/sql/createSchemasSql.test.ts +0 -81
- package/src/migrate/sql/createSchemasSql.ts +0 -15
- package/src/migrate/sql/createTableSql.properties.ts +0 -38
- package/src/migrate/sql/createTableSql.test.ts +0 -74
- package/src/migrate/sql/createTableSql.ts +0 -53
- package/src/migrate/sql/createUniqueConstraintSql.ts +0 -27
- package/src/migrate/sql/dropSchemasSql.ts +0 -15
- package/src/migrate/sql/dropTableSql.ts +0 -13
- package/src/orm.query.test.ts +0 -28
- package/src/orm.ts +0 -370
- package/src/pull/index.ts +0 -1
- package/src/pull/introspect/getForeignKeys.ts +0 -64
- package/src/pull/introspect/getPrimaryKeys.ts +0 -26
- package/src/pull/introspect/getTables.ts +0 -51
- package/src/pull/introspect/getUniqueConstraints.ts +0 -39
- package/src/pull/parse/parseCreateUniqueIndexStatement.test.ts +0 -14
- package/src/pull/parse/parseCreateUniqueIndexStatement.ts +0 -19
- package/src/pull/pull.ts +0 -78
- package/src/pull/render/renderModel.test.ts +0 -144
- package/src/pull/render/renderModel.ts +0 -141
- package/src/pull/render/renderModelsIndex.ts +0 -24
- package/src/pull/render/renderRelations.ts +0 -77
- package/src/pull/render/renderRelationsIndex.ts +0 -24
- package/src/pull/types/ColumnMeta.ts +0 -10
- package/src/pull/types/ForeignKey.ts +0 -6
- package/src/pull/types/PrimaryKey.ts +0 -6
- package/src/pull/types/UniqueConstraint.ts +0 -8
- package/src/pull/util/format.ts +0 -17
- package/src/pull/util/quote.ts +0 -7
- package/src/pull/util/unquote.ts +0 -9
- package/src/queries/clauses/IncludeClause.ts +0 -39
- package/src/queries/clauses/LateralByClause.ts +0 -4
- package/src/queries/clauses/ReturningClause.ts +0 -7
- package/src/queries/clauses/SelectClause.ts +0 -7
- package/src/queries/clauses/WhereClause.ts +0 -16
- package/src/queries/clauses/helpers/OptionalColumn.ts +0 -18
- package/src/queries/clauses/helpers/OptionalParams.ts +0 -14
- package/src/queries/clauses/helpers/RequiredColumn.ts +0 -8
- package/src/queries/clauses/helpers/RequiredParams.ts +0 -14
- package/src/queries/clauses/include/IncludedRelationModel.ts +0 -13
- package/src/queries/clauses/include/IncludedRelationName.ts +0 -11
- package/src/queries/clauses/include/IncludedRelationQuery.ts +0 -20
- package/src/queries/clauses/where/buildWhereClause.ts +0 -121
- package/src/queries/clauses/where/buildWhereClauses.test.ts +0 -145
- package/src/queries/clauses/where/buildWhereClauses.ts +0 -45
- package/src/queries/clauses/where/operators.ts +0 -13
- package/src/queries/clauses/where/types/WhereClauseValue.ts +0 -39
- package/src/queries/count/buildCount.ts +0 -77
- package/src/queries/count/countToSql.ts +0 -66
- package/src/queries/count/tests/count.test.ts +0 -35
- package/src/queries/count/types/BaseCountParams.ts +0 -11
- package/src/queries/count/types/CountBuilder.ts +0 -45
- package/src/queries/count/types/CountParams.ts +0 -27
- package/src/queries/count.ts +0 -33
- package/src/queries/create/buildCreate.ts +0 -67
- package/src/queries/create/createResultSchema.ts +0 -24
- package/src/queries/create/createToSql.ts +0 -44
- package/src/queries/create/tests/createMany.varied-keys.test.ts +0 -28
- package/src/queries/create/tests/createOne.test-d.ts +0 -116
- package/src/queries/create/tests/createOne.test.ts +0 -197
- package/src/queries/create/types/BaseCreateManyParams.ts +0 -7
- package/src/queries/create/types/BaseCreateOneParams.ts +0 -7
- package/src/queries/create/types/CreateManyParams.ts +0 -15
- package/src/queries/create/types/CreateManyResult.ts +0 -17
- package/src/queries/create/types/CreateOneParams.ts +0 -22
- package/src/queries/create/types/CreateOneResult.ts +0 -17
- package/src/queries/createMany.ts +0 -38
- package/src/queries/createOne.ts +0 -27
- package/src/queries/delete/buildDelete.ts +0 -56
- package/src/queries/delete/deleteResultSchema.ts +0 -23
- package/src/queries/delete/deleteToSql.ts +0 -48
- package/src/queries/delete/tests/deleteOne.test.ts +0 -108
- package/src/queries/delete/types/BaseDeleteParams.ts +0 -9
- package/src/queries/delete/types/DeleteManyResult.ts +0 -16
- package/src/queries/delete/types/DeleteOneResult.ts +0 -16
- package/src/queries/delete/types/DeleteParams.ts +0 -12
- package/src/queries/deleteMany.ts +0 -33
- package/src/queries/deleteOne.ts +0 -32
- package/src/queries/find/buildFind.ts +0 -138
- package/src/queries/find/findResultSchema.ts +0 -32
- package/src/queries/find/findToSql.test.ts +0 -123
- package/src/queries/find/findToSql.ts +0 -141
- package/src/queries/find/getIncludedManyToManyRelations.ts +0 -49
- package/src/queries/find/getIncludedOneToManyRelations.ts +0 -44
- package/src/queries/find/tests/findMany.include.test.ts +0 -107
- package/src/queries/find/tests/findMany.limit.test-d.ts +0 -75
- package/src/queries/find/tests/findMany.limit.test.ts +0 -176
- package/src/queries/find/tests/findMany.nullable-relations.test.ts +0 -127
- package/src/queries/find/tests/findMany.orderBy.test-d.ts +0 -84
- package/src/queries/find/tests/findMany.orderBy.test.ts +0 -184
- package/src/queries/find/tests/findMany.select.test-d.ts +0 -117
- package/src/queries/find/tests/findMany.select.test.ts +0 -188
- package/src/queries/find/tests/findMany.too-deep.test-d.ts +0 -154
- package/src/queries/find/tests/findMany.where.test-d.ts +0 -85
- package/src/queries/find/tests/findMany.where.test.ts +0 -76
- package/src/queries/find/tests/middleware.find.where.test.ts +0 -467
- package/src/queries/find/types/BaseFindParams.ts +0 -18
- package/src/queries/find/types/FindBuilder.ts +0 -73
- package/src/queries/find/types/FindManyParams.ts +0 -24
- package/src/queries/find/types/FindManyResult.ts +0 -13
- package/src/queries/find/types/FindOneParams.ts +0 -17
- package/src/queries/find/types/FindOneResult.ts +0 -50
- package/src/queries/findMany.ts +0 -134
- package/src/queries/findOne.ts +0 -30
- package/src/queries/middleware/Middleware.ts +0 -53
- package/src/queries/middleware/ValuesMiddleware.ts +0 -9
- package/src/queries/middleware/WhereMiddleware.ts +0 -16
- package/src/queries/update/buildUpdate.ts +0 -76
- package/src/queries/update/tests/updateOne.test.ts +0 -118
- package/src/queries/update/types/BaseUpdateParams.ts +0 -10
- package/src/queries/update/types/UpdateManyResult.ts +0 -16
- package/src/queries/update/types/UpdateOneResult.ts +0 -16
- package/src/queries/update/types/UpdateParams.ts +0 -14
- package/src/queries/update/types/UpdateValues.ts +0 -12
- package/src/queries/update/updateResultSchema.ts +0 -23
- package/src/queries/update/updateToSql.ts +0 -43
- package/src/queries/updateMany.ts +0 -33
- package/src/queries/updateOne.ts +0 -33
- package/src/queries/util/hasConditions.test.ts +0 -36
- package/src/queries/util/hasConditions.ts +0 -14
- package/src/queries/util/rowToObject.test.ts +0 -76
- package/src/queries/util/rowToObject.ts +0 -13
- package/src/queries/util/tableAlias.test.ts +0 -20
- package/src/queries/util/tableAlias.ts +0 -10
- package/src/schema/populate/composeMiddleware.ts +0 -51
- package/src/schema/populate/populateConfiguration.ts +0 -48
- package/src/schema/populate/populateModel.ts +0 -98
- package/src/schema/populate/suggestedColumnSchema.ts +0 -62
- package/src/schema/types/base/BaseColumn.ts +0 -10
- package/src/schema/types/base/BaseConfiguration.ts +0 -14
- package/src/schema/types/base/BaseModel.ts +0 -12
- package/src/schema/types/base/BaseModels.ts +0 -3
- package/src/schema/types/base/BaseOrm.ts +0 -8
- package/src/schema/types/base/BaseRelation.ts +0 -19
- package/src/schema/types/base/BaseRelations.ts +0 -3
- package/src/schema/types/constraints/ForeignKey.ts +0 -13
- package/src/schema/types/constraints/UniqueConstraint.ts +0 -9
- package/src/schema/types/helpers/ColumnName.ts +0 -6
- package/src/schema/types/helpers/ColumnType.ts +0 -23
- package/src/schema/types/helpers/Columns.ts +0 -3
- package/src/schema/types/helpers/HasDefault.ts +0 -11
- package/src/schema/types/helpers/IsNullable.ts +0 -7
- package/src/schema/types/helpers/IsProvided.ts +0 -8
- package/src/schema/types/helpers/IsSerial.ts +0 -10
- package/src/schema/types/helpers/ModelName.ts +0 -6
- package/src/schema/types/loose/LooseColumnDefinition.ts +0 -80
- package/src/schema/types/loose/LooseModelDefinition.ts +0 -47
- package/src/schema/types/loose/LooseModelDefinitions.ts +0 -3
- package/src/schema/types/loose/LooseRelationDefinition.ts +0 -10
- package/src/schema/types/loose/LooseRelationsDefinition.ts +0 -8
- package/src/schema/types/loose/LooseRelationsDefinitions.ts +0 -7
- package/src/schema/types/postgres/DataType.ts +0 -65
- package/src/schema/types/relations/ManyToManyRelation.ts +0 -15
- package/src/schema/types/relations/ManyToOneRelation.ts +0 -14
- package/src/schema/types/relations/OneToManyRelation.ts +0 -12
- package/src/schema/types/strict/ColumnDefinition.ts +0 -81
- package/src/schema/types/strict/ModelDefinition.ts +0 -47
- package/src/schema/types/strict/ModelDefinitions.ts +0 -3
- package/src/schema/types/strict/RelationDefinition.ts +0 -13
- package/src/schema/types/strict/RelationsDefinition.ts +0 -8
- package/src/schema/types/strict/RelationsDefinitions.ts +0 -7
- package/src/schema/validate/validateConfiguration.ts +0 -9
- package/src/schema/validate/validateModel.ts +0 -32
- package/src/sql/SQLStatement.test.ts +0 -112
- package/src/sql/SQLStatement.ts +0 -86
- package/src/sql/index.ts +0 -2
- package/src/sql/sql.ts +0 -47
- package/src/test/db/index.ts +0 -27
- package/src/test/db/models/foo.model.ts +0 -24
- package/src/test/db/models/foo.relations.ts +0 -4
- package/src/test/db/models/post.model.ts +0 -34
- package/src/test/db/models/post.relations.ts +0 -21
- package/src/test/db/models/tenant.model.ts +0 -14
- package/src/test/db/models/tenant.relations.ts +0 -22
- package/src/test/db/models/tenantUser.model.ts +0 -23
- package/src/test/db/models/tenantUser.relations.ts +0 -15
- package/src/test/db/models/user.model.ts +0 -29
- package/src/test/db/models/user.relations.ts +0 -38
- package/src/test/db/models.ts +0 -15
- package/src/test/db/relations.ts +0 -13
- package/src/test/gen/column.ts +0 -39
- package/src/test/gen/index.ts +0 -2
- package/src/test/gen/model.ts +0 -58
- package/src/test/gen/sqldate.ts +0 -8
- package/src/test/globalSetup.ts +0 -6
- package/src/test/seed/index.ts +0 -75
- package/src/test/util/withRollback.ts +0 -18
- package/src/test/util/withTransaction.ts +0 -19
- package/src/types/ColumnName.ts +0 -6
- package/src/types/ColumnType.ts +0 -20
- package/src/types/Configuration.ts +0 -21
- package/src/types/ModelType.ts +0 -20
- package/src/types/util/DeepRequired.ts +0 -7
- package/src/types/util/DisallowExtraKeys.ts +0 -5
- package/src/types/util/NonEmptyArray.ts +0 -1
- package/src/types/util/Simplify.ts +0 -8
- package/src/util/ensureArray.ts +0 -4
- package/src/util/interleave.test.ts +0 -35
- package/src/util/interleave.ts +0 -8
- package/tsconfig.json +0 -18
- 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.
|
|
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.
|
|
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": "^
|
|
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
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
|
package/.github/dependabot.yml
DELETED
package/.github/workflows/ci.yml
DELETED
|
@@ -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
|
-
};
|
package/.vscode/tasks.json
DELETED
|
@@ -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
package/lib/orm.query.test.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"orm.query.test.d.ts","sourceRoot":"","sources":["../src/orm.query.test.ts"],"names":[],"mappings":""}
|
package/lib/orm.query.test.js
DELETED
|
@@ -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,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
|
-
};
|
package/src/migrate/index.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export { type Migrator, migrator } from "./migrator";
|
package/src/migrate/migrator.ts
DELETED
|
@@ -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
|
-
});
|