Skip to content

Commit b4a66ed

Browse files
committed
feat: pure-js sql client agnostic base lib
1 parent a473298 commit b4a66ed

32 files changed

+1403
-443
lines changed

package-lock.json

+1,094-221
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

+15-1
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,24 @@
1515
"imports": {
1616
"#package.json": "./package.json"
1717
},
18+
"exports": {
19+
".": {
20+
"types": "./dist/lib/index.d.ts",
21+
"require": "./dist/lib/index.cjs",
22+
"import": "./dist/lib/index.js"
23+
},
24+
"./base": {
25+
"types": "./dist/lib/base.d.ts",
26+
"require": "./dist/lib/base.cjs",
27+
"import": "./dist/lib/base.js"
28+
}
29+
},
1830
"repository": "supabase/postgres-meta",
1931
"scripts": {
2032
"check": "tsc -p tsconfig.json --noEmit",
2133
"clean": "rimraf dist tsconfig.tsbuildinfo",
2234
"format": "prettier --write '{src,test}/**/*.ts' '*.ts'",
23-
"build": "tsc -p tsconfig.json && cpy 'src/lib/sql/*.sql' dist/lib/sql",
35+
"build": "tsup",
2436
"docs:export": "PG_META_EXPORT_DOCS=true node --loader ts-node/esm src/server/server.ts > openapi.json",
2537
"gen:types:typescript": "PG_META_GENERATE_TYPES=typescript node --loader ts-node/esm src/server/server.ts",
2638
"gen:types:go": "PG_META_GENERATE_TYPES=go node --loader ts-node/esm src/server/server.ts",
@@ -66,7 +78,9 @@
6678
"pino-pretty": "^10.2.3",
6779
"rimraf": "^5.0.5",
6880
"ts-node": "^10.9.1",
81+
"tsup": "^8.1.0",
6982
"typescript": "^5.2.2",
83+
"vite": "^5.3.1",
7084
"vitest": "^1.2.2"
7185
}
7286
}

src/lib/PostgresMeta.ts

+4-68
Original file line numberDiff line numberDiff line change
@@ -1,76 +1,12 @@
11
import { PoolConfig } from 'pg'
2-
import * as Parser from './Parser.js'
3-
import PostgresMetaColumnPrivileges from './PostgresMetaColumnPrivileges.js'
4-
import PostgresMetaColumns from './PostgresMetaColumns.js'
5-
import PostgresMetaConfig from './PostgresMetaConfig.js'
6-
import PostgresMetaExtensions from './PostgresMetaExtensions.js'
7-
import PostgresMetaForeignTables from './PostgresMetaForeignTables.js'
8-
import PostgresMetaFunctions from './PostgresMetaFunctions.js'
9-
import PostgresMetaIndexes from './PostgresMetaIndexes.js'
10-
import PostgresMetaMaterializedViews from './PostgresMetaMaterializedViews.js'
11-
import PostgresMetaPolicies from './PostgresMetaPolicies.js'
12-
import PostgresMetaPublications from './PostgresMetaPublications.js'
13-
import PostgresMetaRelationships from './PostgresMetaRelationships.js'
14-
import PostgresMetaRoles from './PostgresMetaRoles.js'
15-
import PostgresMetaSchemas from './PostgresMetaSchemas.js'
16-
import PostgresMetaTablePrivileges from './PostgresMetaTablePrivileges.js'
17-
import PostgresMetaTables from './PostgresMetaTables.js'
18-
import PostgresMetaTriggers from './PostgresMetaTriggers.js'
19-
import PostgresMetaTypes from './PostgresMetaTypes.js'
20-
import PostgresMetaVersion from './PostgresMetaVersion.js'
21-
import PostgresMetaViews from './PostgresMetaViews.js'
2+
import PostgresMetaBase from './PostgresMetaBase.js'
223
import { init } from './db.js'
23-
import { PostgresMetaResult } from './types.js'
24-
25-
export default class PostgresMeta {
26-
query: (sql: string) => Promise<PostgresMetaResult<any>>
27-
end: () => Promise<void>
28-
columnPrivileges: PostgresMetaColumnPrivileges
29-
columns: PostgresMetaColumns
30-
config: PostgresMetaConfig
31-
extensions: PostgresMetaExtensions
32-
foreignTables: PostgresMetaForeignTables
33-
functions: PostgresMetaFunctions
34-
indexes: PostgresMetaIndexes
35-
materializedViews: PostgresMetaMaterializedViews
36-
policies: PostgresMetaPolicies
37-
publications: PostgresMetaPublications
38-
relationships: PostgresMetaRelationships
39-
roles: PostgresMetaRoles
40-
schemas: PostgresMetaSchemas
41-
tablePrivileges: PostgresMetaTablePrivileges
42-
tables: PostgresMetaTables
43-
triggers: PostgresMetaTriggers
44-
types: PostgresMetaTypes
45-
version: PostgresMetaVersion
46-
views: PostgresMetaViews
47-
48-
parse = Parser.Parse
49-
deparse = Parser.Deparse
50-
format = Parser.Format
514

5+
export default class PostgresMeta extends PostgresMetaBase {
526
constructor(config: PoolConfig) {
537
const { query, end } = init(config)
54-
this.query = query
8+
super({ query, end })
9+
5510
this.end = end
56-
this.columnPrivileges = new PostgresMetaColumnPrivileges(this.query)
57-
this.columns = new PostgresMetaColumns(this.query)
58-
this.config = new PostgresMetaConfig(this.query)
59-
this.extensions = new PostgresMetaExtensions(this.query)
60-
this.foreignTables = new PostgresMetaForeignTables(this.query)
61-
this.functions = new PostgresMetaFunctions(this.query)
62-
this.indexes = new PostgresMetaIndexes(this.query)
63-
this.materializedViews = new PostgresMetaMaterializedViews(this.query)
64-
this.policies = new PostgresMetaPolicies(this.query)
65-
this.publications = new PostgresMetaPublications(this.query)
66-
this.relationships = new PostgresMetaRelationships(this.query)
67-
this.roles = new PostgresMetaRoles(this.query)
68-
this.schemas = new PostgresMetaSchemas(this.query)
69-
this.tablePrivileges = new PostgresMetaTablePrivileges(this.query)
70-
this.tables = new PostgresMetaTables(this.query)
71-
this.triggers = new PostgresMetaTriggers(this.query)
72-
this.types = new PostgresMetaTypes(this.query)
73-
this.version = new PostgresMetaVersion(this.query)
74-
this.views = new PostgresMetaViews(this.query)
7511
}
7612
}

src/lib/PostgresMetaBase.ts

+80
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
import * as Parser from './Parser.js'
2+
import PostgresMetaColumnPrivileges from './PostgresMetaColumnPrivileges.js'
3+
import PostgresMetaColumns from './PostgresMetaColumns.js'
4+
import PostgresMetaConfig from './PostgresMetaConfig.js'
5+
import PostgresMetaExtensions from './PostgresMetaExtensions.js'
6+
import PostgresMetaForeignTables from './PostgresMetaForeignTables.js'
7+
import PostgresMetaFunctions from './PostgresMetaFunctions.js'
8+
import PostgresMetaIndexes from './PostgresMetaIndexes.js'
9+
import PostgresMetaMaterializedViews from './PostgresMetaMaterializedViews.js'
10+
import PostgresMetaPolicies from './PostgresMetaPolicies.js'
11+
import PostgresMetaPublications from './PostgresMetaPublications.js'
12+
import PostgresMetaRelationships from './PostgresMetaRelationships.js'
13+
import PostgresMetaRoles from './PostgresMetaRoles.js'
14+
import PostgresMetaSchemas from './PostgresMetaSchemas.js'
15+
import PostgresMetaTablePrivileges from './PostgresMetaTablePrivileges.js'
16+
import PostgresMetaTables from './PostgresMetaTables.js'
17+
import PostgresMetaTriggers from './PostgresMetaTriggers.js'
18+
import PostgresMetaTypes from './PostgresMetaTypes.js'
19+
import PostgresMetaVersion from './PostgresMetaVersion.js'
20+
import PostgresMetaViews from './PostgresMetaViews.js'
21+
import { EndFn, QueryFn } from './types.js'
22+
23+
export type PostgresMetaBaseOptions = {
24+
query: QueryFn
25+
end: EndFn
26+
}
27+
28+
export default class PostgresMetaBase {
29+
query: QueryFn
30+
end: EndFn
31+
32+
columnPrivileges: PostgresMetaColumnPrivileges
33+
columns: PostgresMetaColumns
34+
config: PostgresMetaConfig
35+
extensions: PostgresMetaExtensions
36+
foreignTables: PostgresMetaForeignTables
37+
functions: PostgresMetaFunctions
38+
indexes: PostgresMetaIndexes
39+
materializedViews: PostgresMetaMaterializedViews
40+
policies: PostgresMetaPolicies
41+
publications: PostgresMetaPublications
42+
relationships: PostgresMetaRelationships
43+
roles: PostgresMetaRoles
44+
schemas: PostgresMetaSchemas
45+
tablePrivileges: PostgresMetaTablePrivileges
46+
tables: PostgresMetaTables
47+
triggers: PostgresMetaTriggers
48+
types: PostgresMetaTypes
49+
version: PostgresMetaVersion
50+
views: PostgresMetaViews
51+
52+
parse = Parser.Parse
53+
deparse = Parser.Deparse
54+
format = Parser.Format
55+
56+
constructor(options: PostgresMetaBaseOptions) {
57+
this.query = options.query
58+
this.end = options.end
59+
60+
this.columnPrivileges = new PostgresMetaColumnPrivileges(this.query)
61+
this.columns = new PostgresMetaColumns(this.query)
62+
this.config = new PostgresMetaConfig(this.query)
63+
this.extensions = new PostgresMetaExtensions(this.query)
64+
this.foreignTables = new PostgresMetaForeignTables(this.query)
65+
this.functions = new PostgresMetaFunctions(this.query)
66+
this.indexes = new PostgresMetaIndexes(this.query)
67+
this.materializedViews = new PostgresMetaMaterializedViews(this.query)
68+
this.policies = new PostgresMetaPolicies(this.query)
69+
this.publications = new PostgresMetaPublications(this.query)
70+
this.relationships = new PostgresMetaRelationships(this.query)
71+
this.roles = new PostgresMetaRoles(this.query)
72+
this.schemas = new PostgresMetaSchemas(this.query)
73+
this.tablePrivileges = new PostgresMetaTablePrivileges(this.query)
74+
this.tables = new PostgresMetaTables(this.query)
75+
this.triggers = new PostgresMetaTriggers(this.query)
76+
this.types = new PostgresMetaTypes(this.query)
77+
this.version = new PostgresMetaVersion(this.query)
78+
this.views = new PostgresMetaViews(this.query)
79+
}
80+
}

src/lib/PostgresMetaColumnPrivileges.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { ident, literal } from 'pg-format'
22
import { DEFAULT_SYSTEM_SCHEMAS } from './constants.js'
33
import { filterByList } from './helpers.js'
4-
import { columnPrivilegesSql } from './sql/index.js'
4+
import columnPrivilegesSql from './sql/column_privileges.sql'
55
import {
66
PostgresMetaResult,
77
PostgresColumnPrivileges,

src/lib/PostgresMetaColumns.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { ident, literal } from 'pg-format'
22
import PostgresMetaTables from './PostgresMetaTables.js'
33
import { DEFAULT_SYSTEM_SCHEMAS } from './constants.js'
4-
import { columnsSql } from './sql/index.js'
4+
import columnsSql from './sql/columns.sql'
55
import { PostgresMetaResult, PostgresColumn } from './types.js'
66
import { filterByList } from './helpers.js'
77

src/lib/PostgresMetaConfig.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { configSql } from './sql/index.js'
1+
import configSql from './sql/config.sql'
22
import { PostgresMetaResult, PostgresConfig } from './types.js'
33

44
export default class PostgresMetaConfig {

src/lib/PostgresMetaExtensions.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { ident, literal } from 'pg-format'
2-
import { extensionsSql } from './sql/index.js'
2+
import extensionsSql from './sql/extensions.sql'
33
import { PostgresMetaResult, PostgresExtension } from './types.js'
44

55
export default class PostgresMetaExtensions {

src/lib/PostgresMetaForeignTables.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { literal } from 'pg-format'
22
import { coalesceRowsToArray, filterByList } from './helpers.js'
3-
import { columnsSql, foreignTablesSql } from './sql/index.js'
3+
import columnsSql from './sql/columns.sql'
4+
import foreignTablesSql from './sql/foreign_tables.sql'
45
import { PostgresMetaResult, PostgresForeignTable } from './types.js'
56

67
export default class PostgresMetaForeignTables {

src/lib/PostgresMetaFunctions.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { ident, literal } from 'pg-format'
22
import { DEFAULT_SYSTEM_SCHEMAS } from './constants.js'
33
import { filterByList } from './helpers.js'
4-
import { functionsSql } from './sql/index.js'
4+
import functionsSql from './sql/functions.sql'
55
import { PostgresMetaResult, PostgresFunction, PostgresFunctionCreate } from './types.js'
66

77
export default class PostgresMetaFunctions {

src/lib/PostgresMetaIndexes.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { ident, literal } from 'pg-format'
22
import { DEFAULT_SYSTEM_SCHEMAS } from './constants.js'
33
import { filterByList } from './helpers.js'
4-
import { indexesSql } from './sql/index.js'
4+
import indexesSql from './sql/indexes.sql'
55
import { PostgresMetaResult, PostgresIndex } from './types.js'
66

77
export default class PostgresMetaFunctions {

src/lib/PostgresMetaMaterializedViews.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { literal } from 'pg-format'
22
import { coalesceRowsToArray, filterByList } from './helpers.js'
3-
import { columnsSql, materializedViewsSql } from './sql/index.js'
3+
import columnsSql from './sql/columns.sql'
4+
import materializedViewsSql from './sql/materialized_views.sql'
45
import { PostgresMetaResult, PostgresMaterializedView } from './types.js'
56

67
export default class PostgresMetaMaterializedViews {

src/lib/PostgresMetaPolicies.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { ident, literal } from 'pg-format'
22
import { DEFAULT_SYSTEM_SCHEMAS } from './constants.js'
33
import { filterByList } from './helpers.js'
4-
import { policiesSql } from './sql/index.js'
4+
import policiesSql from './sql/policies.sql'
55
import { PostgresMetaResult, PostgresPolicy } from './types.js'
66

77
export default class PostgresMetaPolicies {

src/lib/PostgresMetaPublications.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { ident, literal } from 'pg-format'
2-
import { publicationsSql } from './sql/index.js'
2+
import publicationsSql from './sql/publications.sql'
33
import { PostgresMetaResult, PostgresPublication, PostgresTable } from './types.js'
44

55
export default class PostgresMetaPublications {

src/lib/PostgresMetaRelationships.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { literal } from 'pg-format'
22
import { DEFAULT_SYSTEM_SCHEMAS } from './constants.js'
3-
import { tableRelationshipsSql, viewsKeyDependenciesSql } from './sql/index.js'
3+
import tableRelationshipsSql from './sql/table_relationships.sql'
4+
import viewsKeyDependenciesSql from './sql/views_key_dependencies.sql'
45
import { PostgresMetaResult, PostgresRelationship } from './types.js'
56

67
/*

src/lib/PostgresMetaRoles.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { ident, literal } from 'pg-format'
2-
import { rolesSql } from './sql/index.js'
2+
import rolesSql from './sql/roles.sql'
33
import {
44
PostgresMetaResult,
55
PostgresRole,

src/lib/PostgresMetaSchemas.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { ident, literal } from 'pg-format'
22
import { DEFAULT_SYSTEM_SCHEMAS } from './constants.js'
3-
import { schemasSql } from './sql/index.js'
3+
import schemasSql from './sql/schemas.sql'
44
import {
55
PostgresMetaResult,
66
PostgresSchema,

src/lib/PostgresMetaTablePrivileges.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { ident, literal } from 'pg-format'
22
import { DEFAULT_SYSTEM_SCHEMAS } from './constants.js'
33
import { filterByList } from './helpers.js'
4-
import { tablePrivilegesSql } from './sql/index.js'
4+
import tablePrivilegesSql from './sql/table_privileges.sql'
55
import {
66
PostgresMetaResult,
77
PostgresTablePrivileges,

src/lib/PostgresMetaTables.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
import { ident, literal } from 'pg-format'
22
import { DEFAULT_SYSTEM_SCHEMAS } from './constants.js'
33
import { coalesceRowsToArray, filterByList } from './helpers.js'
4-
import { columnsSql, tablesSql } from './sql/index.js'
4+
import columnsSql from './sql/columns.sql'
5+
import tablesSql from './sql/tables.sql'
56
import {
67
PostgresMetaResult,
78
PostgresTable,

src/lib/PostgresMetaTriggers.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { ident, literal } from 'pg-format'
22
import { DEFAULT_SYSTEM_SCHEMAS } from './constants.js'
33
import { filterByList } from './helpers.js'
4-
import { triggersSql } from './sql/index.js'
4+
import triggersSql from './sql/triggers.sql'
55
import { PostgresMetaResult, PostgresTrigger } from './types.js'
66

77
export default class PostgresMetaTriggers {

src/lib/PostgresMetaTypes.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { DEFAULT_SYSTEM_SCHEMAS } from './constants.js'
22
import { filterByList } from './helpers.js'
3-
import { typesSql } from './sql/index.js'
3+
import typesSql from './sql/types.sql'
44
import { PostgresMetaResult, PostgresType } from './types.js'
55

66
export default class PostgresMetaTypes {

src/lib/PostgresMetaVersion.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { versionSql } from './sql/index.js'
1+
import versionSql from './sql/version.sql'
22
import { PostgresMetaResult, PostgresVersion } from './types.js'
33

44
export default class PostgresMetaVersion {

src/lib/PostgresMetaViews.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
import { literal } from 'pg-format'
22
import { DEFAULT_SYSTEM_SCHEMAS } from './constants.js'
33
import { coalesceRowsToArray, filterByList } from './helpers.js'
4-
import { columnsSql, viewsSql } from './sql/index.js'
4+
import columnsSql from './sql/columns.sql'
5+
import viewsSql from './sql/views.sql'
56
import { PostgresMetaResult, PostgresView } from './types.js'
67

78
export default class PostgresMetaViews {

src/lib/base.ts

+29
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
export { default as PostgresMetaBase } from './PostgresMetaBase.js'
2+
export { wrapError, wrapResult } from './helpers.js'
3+
export {
4+
EndFn,
5+
PostgresColumn,
6+
PostgresConfig,
7+
PostgresExtension,
8+
PostgresFunction,
9+
PostgresFunctionCreate,
10+
PostgresIndex,
11+
PostgresMaterializedView,
12+
PostgresMetaErr,
13+
PostgresMetaOk,
14+
PostgresMetaResult,
15+
PostgresPolicy,
16+
PostgresPrimaryKey,
17+
PostgresPublication,
18+
PostgresRelationship,
19+
PostgresRole,
20+
PostgresSchema,
21+
PostgresSchemaCreate,
22+
PostgresSchemaUpdate,
23+
PostgresTable,
24+
PostgresTrigger,
25+
PostgresType,
26+
PostgresVersion,
27+
PostgresView,
28+
QueryFn,
29+
} from './types.js'

0 commit comments

Comments
 (0)