Skip to content

Commit e09f9e1

Browse files
authored
Merge pull request #412 from supabase/fix/type-errors
fix: type errors and router hacks
2 parents 76cffb6 + c24767e commit e09f9e1

File tree

13 files changed

+221
-179
lines changed

13 files changed

+221
-179
lines changed

.github/workflows/ci.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ jobs:
2020

2121
- run: |
2222
npm clean-install
23+
npm run check
2324
npm run test
2425
2526
prettier-check:

package-lock.json

Lines changed: 149 additions & 103 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
"module": "dist/module/index.js",
1414
"repository": "supabase/postgres-meta",
1515
"scripts": {
16+
"check": "tsc --project tsconfig.server.json --noEmit",
1617
"clean": "rimraf bin dist",
1718
"format": "prettier --write \"{src,test}/**/*.ts\"",
1819
"build": "run-s clean build:*",
@@ -36,35 +37,35 @@
3637
},
3738
"dependencies": {
3839
"@sinclair/typebox": "^0.25.1",
39-
"fastify-metrics": "^8.0.0",
4040
"pg": "^8.7.1",
4141
"pg-format": "^1.0.4",
4242
"pgsql-parser": "^13.3.0",
43-
"pino": "^8.6.1",
4443
"postgres-array": "^3.0.1",
4544
"prettier": "^2.6.0",
4645
"prettier-plugin-sql": "^0.12.1"
4746
},
4847
"devDependencies": {
48+
"@fastify/cors": "^8.2.0",
4949
"@types/crypto-js": "^4.1.1",
5050
"@types/jest": "^27.0.1",
51-
"@types/node": "^17.0.21",
51+
"@types/node": "^16.18.3",
5252
"@types/pg": "^8.6.5",
5353
"@types/pg-format": "^1.0.1",
5454
"cpy-cli": "^4.1.0",
5555
"crypto-js": "^4.0.0",
5656
"fastify": "^4.8.1",
57-
"fastify-cors": "^6.0.3",
57+
"fastify-metrics": "^8.0.0",
5858
"fastify-swagger": "^5.0.0",
5959
"jest": "^27.1.0",
6060
"npm-run-all": "^4.1.5",
6161
"pg-connection-string": "^2.5.0",
62+
"pino": "^8.6.1",
6263
"pino-pretty": "^9.1.1",
6364
"pkg": "^5.5.2",
6465
"rimraf": "^3.0.2",
6566
"ts-jest": "^27.0.5",
6667
"ts-node-dev": "^2.0.0",
67-
"typescript": "^4.3.2",
68+
"typescript": "~4.9",
6869
"wait-for-localhost-cli": "^3.0.0"
6970
}
7071
}

src/server/app.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -107,18 +107,18 @@ if (EXPORT_DOCS) {
107107
})()
108108
} else {
109109
app.ready(() => {
110-
app.listen(PG_META_PORT, PG_META_HOST, () => {
110+
app.listen({ port: PG_META_PORT, host: PG_META_HOST }, () => {
111111
app.log.info(`App started on port ${PG_META_PORT}`)
112112
const adminApp = buildAdminApp({ logger })
113113
const adminPort = PG_META_PORT + 1
114-
adminApp.listen(adminPort, PG_META_HOST, () => {
114+
adminApp.listen({ port: adminPort, host: PG_META_HOST }, () => {
115115
adminApp.log.info(`Admin App started on port ${adminPort}`)
116116
})
117117
})
118118
})
119119
}
120120

121-
app.register(require('fastify-cors'))
121+
app.register(require('@fastify/cors'))
122122

123123
app.get('/', async (_request, _reply) => {
124124
return {

src/server/routes/columns.ts

Lines changed: 48 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -33,68 +33,62 @@ export default async (fastify: FastifyInstance) => {
3333
return data
3434
})
3535

36-
// HACK: Dark arts to get around https://github.com/delvedor/find-my-way/issues/285:
37-
// - this route has to be before /:tableId(^\\d+$)
38-
// - can't do :tableId(^\\d+$) instead of :tableId(^\\d+)
39-
// - need to separate :ordinalPosition as a 2nd param
40-
//
41-
// Anyhow, this probably just happens to work.
4236
fastify.get<{
4337
Headers: { pg: string }
4438
Params: {
4539
tableId: string
4640
ordinalPosition: string
4741
}
48-
}>('/:tableId(^\\d+).:ordinalPosition(^\\d+$)', async (request, reply) => {
49-
const {
50-
headers: { pg: connectionString },
51-
params: { tableId, ordinalPosition },
52-
} = request
53-
54-
const pgMeta = new PostgresMeta({ ...DEFAULT_POOL_CONFIG, connectionString })
55-
const { data, error } = await pgMeta.columns.retrieve({ id: `${tableId}.${ordinalPosition}` })
56-
await pgMeta.end()
57-
if (error) {
58-
request.log.error({ error, request: extractRequestForLogging(request) })
59-
reply.code(400)
60-
if (error.message.startsWith('Cannot find')) reply.code(404)
61-
return { error: error.message }
62-
}
63-
64-
return data
65-
})
66-
67-
fastify.get<{
68-
Headers: { pg: string }
69-
Params: { tableId: number }
7042
Querystring: {
7143
include_system_schemas?: string
72-
limit?: number
73-
offset?: number
44+
limit?: string
45+
offset?: string
7446
}
75-
}>('/:tableId(^\\d+$)', async (request, reply) => {
76-
const {
77-
headers: { pg: connectionString },
78-
query: { limit, offset },
79-
params: { tableId },
80-
} = request
81-
const includeSystemSchemas = request.query.include_system_schemas === 'true'
82-
83-
const pgMeta: PostgresMeta = new PostgresMeta({ ...DEFAULT_POOL_CONFIG, connectionString })
84-
const { data, error } = await pgMeta.columns.list({
85-
tableId,
86-
includeSystemSchemas,
87-
limit,
88-
offset,
89-
})
90-
await pgMeta.end()
91-
if (error) {
92-
request.log.error({ error, request: extractRequestForLogging(request) })
93-
reply.code(500)
94-
return { error: error.message }
47+
}>('/:tableId(^\\d+):ordinalPosition', async (request, reply) => {
48+
if (request.params.ordinalPosition === '') {
49+
const {
50+
headers: { pg: connectionString },
51+
query: { limit, offset },
52+
params: { tableId },
53+
} = request
54+
const includeSystemSchemas = request.query.include_system_schemas === 'true'
55+
56+
const pgMeta: PostgresMeta = new PostgresMeta({ ...DEFAULT_POOL_CONFIG, connectionString })
57+
const { data, error } = await pgMeta.columns.list({
58+
tableId: Number(tableId),
59+
includeSystemSchemas,
60+
limit: Number(limit),
61+
offset: Number(offset),
62+
})
63+
await pgMeta.end()
64+
if (error) {
65+
request.log.error({ error, request: extractRequestForLogging(request) })
66+
reply.code(500)
67+
return { error: error.message }
68+
}
69+
70+
return data
71+
} else if (/^\.\d+$/.test(request.params.ordinalPosition)) {
72+
const {
73+
headers: { pg: connectionString },
74+
params: { tableId, ordinalPosition: ordinalPositionWithDot },
75+
} = request
76+
const ordinalPosition = ordinalPositionWithDot.slice(1)
77+
78+
const pgMeta = new PostgresMeta({ ...DEFAULT_POOL_CONFIG, connectionString })
79+
const { data, error } = await pgMeta.columns.retrieve({ id: `${tableId}.${ordinalPosition}` })
80+
await pgMeta.end()
81+
if (error) {
82+
request.log.error({ error, request: extractRequestForLogging(request) })
83+
reply.code(400)
84+
if (error.message.startsWith('Cannot find')) reply.code(404)
85+
return { error: error.message }
86+
}
87+
88+
return data
89+
} else {
90+
return reply.callNotFound()
9591
}
96-
97-
return data
9892
})
9993

10094
fastify.post<{
@@ -104,7 +98,7 @@ export default async (fastify: FastifyInstance) => {
10498
const connectionString = request.headers.pg
10599

106100
const pgMeta = new PostgresMeta({ ...DEFAULT_POOL_CONFIG, connectionString })
107-
const { data, error } = await pgMeta.columns.create(request.body)
101+
const { data, error } = await pgMeta.columns.create(request.body as any)
108102
await pgMeta.end()
109103
if (error) {
110104
request.log.error({ error, request: extractRequestForLogging(request) })
@@ -126,7 +120,7 @@ export default async (fastify: FastifyInstance) => {
126120
const connectionString = request.headers.pg
127121

128122
const pgMeta = new PostgresMeta({ ...DEFAULT_POOL_CONFIG, connectionString })
129-
const { data, error } = await pgMeta.columns.update(request.params.id, request.body)
123+
const { data, error } = await pgMeta.columns.update(request.params.id, request.body as any)
130124
await pgMeta.end()
131125
if (error) {
132126
request.log.error({ error, request: extractRequestForLogging(request) })

src/server/routes/extensions.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ export default async (fastify: FastifyInstance) => {
5454
const connectionString = request.headers.pg
5555

5656
const pgMeta = new PostgresMeta({ ...DEFAULT_POOL_CONFIG, connectionString })
57-
const { data, error } = await pgMeta.extensions.create(request.body)
57+
const { data, error } = await pgMeta.extensions.create(request.body as any)
5858
await pgMeta.end()
5959
if (error) {
6060
request.log.error({ error, request: extractRequestForLogging(request) })
@@ -75,7 +75,7 @@ export default async (fastify: FastifyInstance) => {
7575
const connectionString = request.headers.pg
7676

7777
const pgMeta = new PostgresMeta({ ...DEFAULT_POOL_CONFIG, connectionString })
78-
const { data, error } = await pgMeta.extensions.update(request.params.name, request.body)
78+
const { data, error } = await pgMeta.extensions.update(request.params.name, request.body as any)
7979
await pgMeta.end()
8080
if (error) {
8181
request.log.error({ error, request: extractRequestForLogging(request) })

src/server/routes/functions.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ export default async (fastify: FastifyInstance) => {
5757
const connectionString = request.headers.pg
5858

5959
const pgMeta = new PostgresMeta({ ...DEFAULT_POOL_CONFIG, connectionString })
60-
const { data, error } = await pgMeta.functions.create(request.body)
60+
const { data, error } = await pgMeta.functions.create(request.body as any)
6161
await pgMeta.end()
6262
if (error) {
6363
request.log.error({ error, request: extractRequestForLogging(request) })
@@ -78,7 +78,7 @@ export default async (fastify: FastifyInstance) => {
7878
const id = Number(request.params.id)
7979

8080
const pgMeta = new PostgresMeta({ ...DEFAULT_POOL_CONFIG, connectionString })
81-
const { data, error } = await pgMeta.functions.update(id, request.body)
81+
const { data, error } = await pgMeta.functions.update(id, request.body as any)
8282
await pgMeta.end()
8383
if (error) {
8484
request.log.error({ error, request: extractRequestForLogging(request) })

src/server/routes/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import * as CryptoJS from 'crypto-js'
1+
import CryptoJS from 'crypto-js'
22
import { FastifyInstance } from 'fastify'
33
import { PG_CONNECTION, CRYPTO_KEY } from '../constants'
44

src/server/routes/policies.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ export default async (fastify: FastifyInstance) => {
5757
const connectionString = request.headers.pg
5858

5959
const pgMeta = new PostgresMeta({ ...DEFAULT_POOL_CONFIG, connectionString })
60-
const { data, error } = await pgMeta.policies.create(request.body)
60+
const { data, error } = await pgMeta.policies.create(request.body as any)
6161
await pgMeta.end()
6262
if (error) {
6363
request.log.error({ error, request: extractRequestForLogging(request) })
@@ -79,7 +79,7 @@ export default async (fastify: FastifyInstance) => {
7979
const id = Number(request.params.id)
8080

8181
const pgMeta = new PostgresMeta({ ...DEFAULT_POOL_CONFIG, connectionString })
82-
const { data, error } = await pgMeta.policies.update(id, request.body)
82+
const { data, error } = await pgMeta.policies.update(id, request.body as any)
8383
await pgMeta.end()
8484
if (error) {
8585
request.log.error({ error, request: extractRequestForLogging(request) })

src/server/routes/publications.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ export default async (fastify: FastifyInstance) => {
5555
const connectionString = request.headers.pg
5656

5757
const pgMeta = new PostgresMeta({ ...DEFAULT_POOL_CONFIG, connectionString })
58-
const { data, error } = await pgMeta.publications.create(request.body)
58+
const { data, error } = await pgMeta.publications.create(request.body as any)
5959
await pgMeta.end()
6060
if (error) {
6161
request.log.error({ error, request: extractRequestForLogging(request) })
@@ -77,7 +77,7 @@ export default async (fastify: FastifyInstance) => {
7777
const id = Number(request.params.id)
7878

7979
const pgMeta = new PostgresMeta({ ...DEFAULT_POOL_CONFIG, connectionString })
80-
const { data, error } = await pgMeta.publications.update(id, request.body)
80+
const { data, error } = await pgMeta.publications.update(id, request.body as any)
8181
await pgMeta.end()
8282
if (error) {
8383
request.log.error({ error, request: extractRequestForLogging(request) })

0 commit comments

Comments
 (0)