prostgles-server 2.0.178 → 2.0.179

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 (98) hide show
  1. package/dist/AuthHandler.d.ts +4 -4
  2. package/dist/AuthHandler.d.ts.map +1 -1
  3. package/dist/DBSchemaBuilder.d.ts +6 -6
  4. package/dist/DBSchemaBuilder.d.ts.map +1 -1
  5. package/dist/DBSchemaBuilder.js +25 -8
  6. package/dist/DBSchemaBuilder.js.map +1 -1
  7. package/dist/DboBuilder.d.ts +20 -21
  8. package/dist/DboBuilder.d.ts.map +1 -1
  9. package/dist/DboBuilder.js +1 -1
  10. package/dist/DboBuilder.js.map +1 -1
  11. package/dist/Prostgles.d.ts +8 -10
  12. package/dist/Prostgles.d.ts.map +1 -1
  13. package/dist/Prostgles.js.map +1 -1
  14. package/dist/PublishParser.d.ts +37 -37
  15. package/dist/PublishParser.d.ts.map +1 -1
  16. package/dist/PublishParser.js.map +1 -1
  17. package/dist/index.d.ts +2 -3
  18. package/dist/index.d.ts.map +1 -1
  19. package/dist/index.js.map +1 -1
  20. package/lib/AuthHandler.d.ts +148 -0
  21. package/lib/AuthHandler.d.ts.map +1 -0
  22. package/lib/AuthHandler.js +411 -0
  23. package/lib/AuthHandler.ts +3 -3
  24. package/lib/DBEventsManager.d.ts +38 -0
  25. package/lib/DBEventsManager.d.ts.map +1 -0
  26. package/lib/DBEventsManager.js +136 -0
  27. package/lib/DBSchemaBuilder.d.ts +11 -0
  28. package/lib/DBSchemaBuilder.d.ts.map +1 -0
  29. package/lib/DBSchemaBuilder.js +102 -0
  30. package/lib/DBSchemaBuilder.ts +62 -27
  31. package/lib/DboBuilder.d.ts +428 -0
  32. package/lib/DboBuilder.d.ts.map +1 -0
  33. package/lib/DboBuilder.js +3078 -0
  34. package/lib/DboBuilder.ts +25 -25
  35. package/lib/FileManager.d.ts +168 -0
  36. package/lib/FileManager.d.ts.map +1 -0
  37. package/lib/FileManager.js +474 -0
  38. package/lib/Filtering.d.ts +15 -0
  39. package/lib/Filtering.d.ts.map +1 -0
  40. package/lib/Filtering.js +299 -0
  41. package/lib/PostgresNotifListenManager.d.ts +27 -0
  42. package/lib/PostgresNotifListenManager.d.ts.map +1 -0
  43. package/lib/PostgresNotifListenManager.js +122 -0
  44. package/lib/Prostgles.d.ts +193 -0
  45. package/lib/Prostgles.d.ts.map +1 -0
  46. package/lib/Prostgles.js +579 -0
  47. package/lib/Prostgles.ts +6 -6
  48. package/lib/PubSubManager.d.ts +157 -0
  49. package/lib/PubSubManager.d.ts.map +1 -0
  50. package/lib/PubSubManager.js +1400 -0
  51. package/lib/PublishParser.d.ts +262 -0
  52. package/lib/PublishParser.d.ts.map +1 -0
  53. package/lib/PublishParser.js +390 -0
  54. package/lib/PublishParser.ts +39 -38
  55. package/lib/QueryBuilder.d.ts +124 -0
  56. package/lib/QueryBuilder.d.ts.map +1 -0
  57. package/lib/QueryBuilder.js +1349 -0
  58. package/lib/SyncReplication.d.ts +34 -0
  59. package/lib/SyncReplication.d.ts.map +1 -0
  60. package/lib/SyncReplication.js +411 -0
  61. package/lib/TableConfig.d.ts +175 -0
  62. package/lib/TableConfig.d.ts.map +1 -0
  63. package/lib/TableConfig.js +231 -0
  64. package/lib/index.d.ts +10 -0
  65. package/lib/index.d.ts.map +1 -0
  66. package/lib/index.js +45 -0
  67. package/lib/index.ts +3 -4
  68. package/lib/shortestPath.d.ts +10 -0
  69. package/lib/shortestPath.d.ts.map +1 -0
  70. package/lib/shortestPath.js +111 -0
  71. package/lib/utils.d.ts +2 -0
  72. package/lib/utils.d.ts.map +1 -0
  73. package/lib/utils.js +5 -0
  74. package/package.json +3 -3
  75. package/tests/client/PID.txt +1 -1
  76. package/tests/client/index.d.ts +1 -1
  77. package/tests/client/index.d.ts.map +1 -1
  78. package/tests/client_only_queries.d.ts +4 -0
  79. package/tests/client_only_queries.d.ts.map +1 -0
  80. package/tests/isomorphic_queries.d.ts +6 -0
  81. package/tests/isomorphic_queries.d.ts.map +1 -0
  82. package/tests/server/DBoGenerated.d.ts +97 -193
  83. package/tests/server/dboTypeCheck.d.ts +2 -0
  84. package/tests/server/dboTypeCheck.d.ts.map +1 -0
  85. package/tests/server/dboTypeCheck.js +14 -0
  86. package/tests/server/dboTypeCheck.ts +17 -0
  87. package/tests/server/index.d.ts +2 -0
  88. package/tests/server/index.d.ts.map +1 -0
  89. package/tests/server/index.js +11 -11
  90. package/tests/server/index.ts +23 -16
  91. package/tests/server/package-lock.json +5 -5
  92. package/tests/server/publishTypeCheck.d.ts +2 -0
  93. package/tests/server/publishTypeCheck.d.ts.map +1 -0
  94. package/tests/server/publishTypeCheck.js +120 -0
  95. package/tests/server/publishTypeCheck.ts +129 -0
  96. package/tests/server/tsconfig.json +4 -5
  97. package/tests/server_only_queries.d.ts +2 -0
  98. package/tests/server_only_queries.d.ts.map +1 -0
@@ -0,0 +1,136 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DBEventsManager = void 0;
4
+ const PostgresNotifListenManager_1 = require("./PostgresNotifListenManager");
5
+ const prostgles_types_1 = require("prostgles-types");
6
+ class DBEventsManager {
7
+ constructor(db_pg, pgp) {
8
+ this.notifies = {};
9
+ this.notice = {
10
+ socketChannel: prostgles_types_1.CHANNELS.NOTICE_EV,
11
+ socketUnsubChannel: prostgles_types_1.CHANNELS.NOTICE_EV + "unsubscribe",
12
+ sockets: []
13
+ };
14
+ this.onNotif = ({ channel, payload }) => {
15
+ // console.log(36, { channel, payload }, Object.keys(this.notifies));
16
+ Object.keys(this.notifies)
17
+ .filter(ch => ch === channel)
18
+ .map(ch => {
19
+ const sub = this.notifies[ch];
20
+ sub.sockets.map(s => {
21
+ s.emit(sub.socketChannel, payload);
22
+ });
23
+ sub.localFuncs.map(lf => {
24
+ lf(payload);
25
+ });
26
+ });
27
+ };
28
+ this.onNotice = (notice) => {
29
+ if (this.notice && this.notice.sockets.length) {
30
+ this.notice.sockets.map(s => {
31
+ s.emit(this.notice.socketChannel, notice);
32
+ });
33
+ }
34
+ };
35
+ this.getNotifChannelName = async (channel) => {
36
+ const c = await this.db_pg.one("SELECT quote_ident($1) as c", channel);
37
+ return c.c;
38
+ };
39
+ this.db_pg = db_pg;
40
+ this.pgp = pgp;
41
+ }
42
+ async addNotify(query, socket, func) {
43
+ if (typeof query !== "string" || (!socket && !func)) {
44
+ throw "Expecting (query: string, socket?, localFunc?) But received: " + JSON.stringify({ query, socket, func });
45
+ }
46
+ /* Remove comments */
47
+ let q = query.trim()
48
+ .replace(/\/\*[\s\S]*?\*\/|\/\/.*/g, '\n')
49
+ .split("\n").map(v => v.trim()).filter(v => v && !v.startsWith("--"))
50
+ .join("\n");
51
+ /* Find the notify channel name */
52
+ if (!q.toLowerCase().startsWith("listen")) {
53
+ throw "Expecting a LISTEN query but got: " + query;
54
+ }
55
+ q = q.slice(7).trim(); // Remove listen
56
+ if (q.endsWith(";"))
57
+ q = q.slice(0, -1);
58
+ if (q.startsWith('"') && q.endsWith('"')) {
59
+ q = q.slice(1, -1);
60
+ }
61
+ else {
62
+ /* Replicate PG by lowercasing identifier if not quoted */
63
+ q = q.toLowerCase();
64
+ }
65
+ q = q.replace(/""/g, `"`);
66
+ let channel = q;
67
+ let notifChannel = await this.getNotifChannelName(channel);
68
+ notifChannel = notifChannel.replace(/""/g, `"`);
69
+ if (notifChannel.startsWith('"'))
70
+ notifChannel = notifChannel.slice(1, -1);
71
+ const socketChannel = prostgles_types_1.CHANNELS.LISTEN_EV + notifChannel, socketUnsubChannel = socketChannel + "unsubscribe";
72
+ if (!this.notifies[notifChannel]) {
73
+ this.notifies[notifChannel] = {
74
+ socketChannel,
75
+ sockets: socket ? [socket] : [],
76
+ localFuncs: func ? [func] : [],
77
+ notifMgr: await PostgresNotifListenManager_1.PostgresNotifListenManager.create(this.db_pg, this.onNotif, channel)
78
+ };
79
+ }
80
+ else {
81
+ if (socket && !this.notifies[notifChannel].sockets.find(s => s.id === socket.id)) {
82
+ this.notifies[notifChannel].sockets.push(socket);
83
+ }
84
+ else if (func) {
85
+ this.notifies[notifChannel].localFuncs.push(func);
86
+ }
87
+ }
88
+ if (socket) {
89
+ socket.removeAllListeners(socketUnsubChannel);
90
+ socket.on(socketUnsubChannel, () => {
91
+ this.removeNotify(notifChannel, socket);
92
+ });
93
+ }
94
+ return {
95
+ // unsubscribe: () => this.removeNotify(notifChannel, socket, func),
96
+ socketChannel,
97
+ socketUnsubChannel,
98
+ notifChannel,
99
+ };
100
+ }
101
+ removeNotify(channel, socket, func) {
102
+ if (channel && this.notifies[channel]) {
103
+ if (socket) {
104
+ this.notifies[channel].sockets = this.notifies[channel].sockets.filter(s => s.id !== socket.id);
105
+ }
106
+ else if (func) {
107
+ this.notifies[channel].localFuncs = this.notifies[channel].localFuncs.filter(f => f !== func);
108
+ }
109
+ /* UNLISTEN if no listeners ?? */
110
+ }
111
+ if (socket) {
112
+ (0, prostgles_types_1.getKeys)(this.notifies).forEach(channel => {
113
+ this.notifies[channel].sockets = this.notifies[channel].sockets.filter(s => s.id !== socket.id);
114
+ });
115
+ }
116
+ }
117
+ addNotice(socket) {
118
+ if (!socket || !socket.id)
119
+ throw "Expecting a socket obj with id";
120
+ if (!this.notice.sockets.find(s => s.id === socket.id)) {
121
+ this.notice.sockets.push(socket);
122
+ }
123
+ const { socketChannel, socketUnsubChannel } = this.notice;
124
+ socket.removeAllListeners(socketUnsubChannel);
125
+ socket.on(socketUnsubChannel, () => {
126
+ this.removeNotice(socket);
127
+ });
128
+ return { socketChannel, socketUnsubChannel, };
129
+ }
130
+ removeNotice(socket) {
131
+ if (!socket || !socket.id)
132
+ throw "Expecting a socket obj with id";
133
+ this.notice.sockets = this.notice.sockets.filter(s => s.id !== socket.id);
134
+ }
135
+ }
136
+ exports.DBEventsManager = DBEventsManager;
@@ -0,0 +1,11 @@
1
+ import { DBSchema, TableHandler, ViewHandler } from "prostgles-types";
2
+ import { DBHandlerServer, DboBuilder } from "./DboBuilder";
3
+ import { PublishAllOrNothing, PublishTableRule, PublishViewRule } from "./PublishParser";
4
+ export declare const getDBSchema: (dboBuilder: DboBuilder) => string;
5
+ export declare type DBOFullyTyped<Schema = void> = Schema extends DBSchema ? ({
6
+ [tov_name in keyof Schema]: Schema[tov_name]["is_view"] extends true ? ViewHandler<Schema[tov_name]["columns"]> : TableHandler<Schema[tov_name]["columns"]>;
7
+ } & Pick<DBHandlerServer, "tx" | "sql">) : DBHandlerServer;
8
+ export declare type PublishFullyTyped<Schema = void> = Schema extends DBSchema ? (PublishAllOrNothing | {
9
+ [tov_name in keyof Partial<Schema>]: PublishAllOrNothing | (Schema[tov_name]["is_view"] extends true ? PublishViewRule<Schema[tov_name]["columns"]> : PublishTableRule<Schema[tov_name]["columns"]>);
10
+ }) : (PublishAllOrNothing | Record<string, PublishViewRule | PublishTableRule | PublishAllOrNothing>);
11
+ //# sourceMappingURL=DBSchemaBuilder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DBSchemaBuilder.d.ts","sourceRoot":"","sources":["DBSchemaBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAGtE,OAAO,EAAE,eAAe,EAAE,UAAU,EAAmC,MAAM,cAAc,CAAC;AAC5F,OAAO,EAAE,mBAAmB,EAAiB,gBAAgB,EAAE,eAAe,EAAI,MAAM,iBAAiB,CAAC;AAG1G,eAAO,MAAM,WAAW,eAAgB,UAAU,KAAG,MAsBpD,CAAA;AAED,oBAAY,aAAa,CAAC,MAAM,GAAG,IAAI,IAAI,MAAM,SAAS,QAAQ,GAAE,CAChE;KACG,QAAQ,IAAI,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,SAAS,IAAI,GAClE,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,CAAC,GACxC,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,CAAC;CAC5C,GAAG,IAAI,CAAC,eAAe,EAAE,IAAI,GAAG,KAAK,CAAC,CACxC,GACD,eAAe,CAAC;AA+DlB,oBAAY,iBAAiB,CAAC,MAAM,GAAG,IAAI,IAAI,MAAM,SAAS,QAAQ,GAAE,CACpE,mBAAmB,GACnB;KACC,QAAQ,IAAI,MAAM,OAAO,CAAC,MAAM,CAAC,GAC9B,mBAAmB,GACnB,CACA,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,SAAS,IAAI,GACtC,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,CAAC,GAC5C,gBAAgB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,CAAC,CAChD;CACJ,CACF,GAAG,CACA,mBAAmB,GACnB,MAAM,CAAC,MAAM,EAAE,eAAe,GAAG,gBAAgB,GAAG,mBAAmB,CAAC,CAC3E,CAAC"}
@@ -0,0 +1,102 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.getDBSchema = void 0;
7
+ const _1 = __importDefault(require("."));
8
+ const DboBuilder_1 = require("./DboBuilder");
9
+ const getDBSchema = (dboBuilder) => {
10
+ let tables = [];
11
+ /** Tables and columns are sorted to avoid infinite loops due to changing order */
12
+ dboBuilder.tablesOrViews?.slice(0).sort((a, b) => a.name.localeCompare(b.name)).forEach(tov => {
13
+ const cols = tov.columns.slice(0).sort((a, b) => a.name.localeCompare(b.name));
14
+ tables.push(`${(0, DboBuilder_1.escapeTSNames)(tov.name)}: {
15
+ is_view: ${tov.is_view};
16
+ select: ${tov.privileges.select}
17
+ insert: ${tov.privileges.insert}
18
+ update: ${tov.privileges.update}
19
+ delete: ${tov.privileges.delete}
20
+ columns: {${cols.map(c => `
21
+ ${(0, DboBuilder_1.escapeTSNames)(c.name)}${c.is_nullable || c.has_default ? "?" : ""}: ${(0, DboBuilder_1.postgresToTsType)(c.udt_name)}${c.is_nullable ? " | null" : ""}`).join(";")}
22
+ }
23
+ };\n `);
24
+ });
25
+ return `
26
+ export type DBSchemaGenerated = {
27
+ ${tables.join("")}
28
+ }
29
+ `;
30
+ };
31
+ exports.getDBSchema = getDBSchema;
32
+ /** Type checks */
33
+ (() => {
34
+ const ddb = 1;
35
+ ddb.dwad.insert;
36
+ ddb.dwad.delete;
37
+ const d = 1;
38
+ d.dwad.insert;
39
+ d.dwad.delete;
40
+ const p = 1;
41
+ p.dbo.dwad.insert;
42
+ ddb.dwad.delete;
43
+ (0, _1.default)({
44
+ dbConnection: 1,
45
+ publish: async (params) => {
46
+ const row = await params.dbo.dwadwa.find?.({});
47
+ return "*";
48
+ },
49
+ onReady: (dbo) => {
50
+ dbo.tdwa.find();
51
+ }
52
+ });
53
+ const auth = {
54
+ sidKeyName: "sid_token",
55
+ getUser: async (sid, db, _db) => {
56
+ db.dwadaw.find;
57
+ return 1;
58
+ }
59
+ };
60
+ });
61
+ /** Test the created schema */
62
+ const c = 1;
63
+ const test = c;
64
+ const db = 1;
65
+ const publish = () => {
66
+ const r = {
67
+ tbl1: {
68
+ select: {
69
+ fields: "*",
70
+ forcedFilter: { col1: 32, col2: "" }
71
+ },
72
+ getColumns: true,
73
+ getInfo: true,
74
+ delete: {
75
+ filterFields: { col1: 1 }
76
+ }
77
+ },
78
+ tbl2: {
79
+ delete: { forcedFilter: { col1: 2 } }
80
+ }
81
+ };
82
+ const res = {
83
+ tbl1: {
84
+ select: {
85
+ fields: "*",
86
+ forcedFilter: { col1: 32, col2: "" }
87
+ },
88
+ getColumns: true,
89
+ getInfo: true,
90
+ delete: {
91
+ filterFields: { col1: 1 }
92
+ }
93
+ },
94
+ tbl2: {
95
+ delete: { forcedFilter: { col1: 2 } }
96
+ }
97
+ };
98
+ const res1 = r;
99
+ const p = 1;
100
+ p.dbo.dwadaw.find();
101
+ return res;
102
+ };
@@ -1,6 +1,8 @@
1
- import { DBSchemaColumns, DBSchemaInsertColumns, DBSchema, TableHandler, ViewHandler } from "prostgles-types";
1
+ import { DBSchema, TableHandler, ViewHandler } from "prostgles-types";
2
+ import prostgles from ".";
3
+ import { Auth } from "./AuthHandler";
2
4
  import { DBHandlerServer, DboBuilder, escapeTSNames, postgresToTsType } from "./DboBuilder";
3
- import { PublishAllOrNothing, PublishParams, PublishTableRule, PublishViewRule, TableRule, ViewRule } from "./PublishParser";
5
+ import { PublishAllOrNothing, PublishParams, PublishTableRule, PublishViewRule, } from "./PublishParser";
4
6
 
5
7
 
6
8
  export const getDBSchema = (dboBuilder: DboBuilder): string => {
@@ -15,59 +17,78 @@ tables.push(`${escapeTSNames(tov.name)}: {
15
17
  insert: ${tov.privileges.insert}
16
18
  update: ${tov.privileges.update}
17
19
  delete: ${tov.privileges.delete}
18
- dataTypes: { ${cols.map(c => `${escapeTSNames(c.name)}: ${postgresToTsType(c.udt_name)}${c.is_nullable? " | null" : ""}`).join("; ")} };
19
20
  columns: {${cols.map(c => `
20
- ${escapeTSNames(c.name)}: { type: ${postgresToTsType(c.udt_name)}; is_nullable: ${c.is_nullable}; is_nullable_or_has_default: ${c.is_nullable || c.has_default}; }`).join(";\n")}
21
+ ${escapeTSNames(c.name)}${c.is_nullable || c.has_default? "?" : ""}: ${postgresToTsType(c.udt_name)}${c.is_nullable? " | null" : ""}`).join(";")}
21
22
  }
22
23
  };\n `)
23
24
  })
24
25
  return `
25
- type DBSchema = {
26
+ export type DBSchemaGenerated = {
26
27
  ${tables.join("")}
27
28
  }
28
29
  `;
29
30
  }
30
31
 
31
- const ccc: DBSchemaInsertColumns<{ col1: { type: string; }; col2: { type: number; is_nullable_or_has_default: true } }> = {
32
- col1: "",
33
- col2: 22
34
- }
35
-
36
-
37
-
38
- export type DBOFullyTyped<Schema extends DBSchema | undefined = undefined> = Schema extends DBSchema? (
32
+ export type DBOFullyTyped<Schema = void> = Schema extends DBSchema? (
39
33
  {
40
34
  [tov_name in keyof Schema]: Schema[tov_name]["is_view"] extends true?
41
- ViewHandler<DBSchemaColumns<Schema[tov_name]["columns"]>> :
42
- TableHandler<DBSchemaColumns<Schema[tov_name]["columns"]>>
35
+ ViewHandler<Schema[tov_name]["columns"]> :
36
+ TableHandler<Schema[tov_name]["columns"]>
43
37
  } & Pick<DBHandlerServer, "tx" | "sql">
44
38
  ) :
45
39
  DBHandlerServer;
46
40
 
41
+
42
+
43
+
47
44
  /** Type checks */
48
45
  (() => {
46
+
49
47
  const ddb: DBOFullyTyped = 1 as any;
50
48
  ddb.dwad.insert!;
51
49
  ddb.dwad.delete!;
52
50
 
51
+ const d: DBOFullyTyped<undefined> = 1 as any;
52
+ d.dwad.insert!;
53
+ d.dwad.delete!;
54
+
53
55
  const p: PublishParams = 1 as any;
54
56
  p.dbo.dwad.insert!;
55
57
  ddb.dwad.delete!;
58
+
59
+ prostgles({
60
+ dbConnection: 1 as any,
61
+ publish: async (params) => {
62
+ const row = await params.dbo.dwadwa.find?.({});
63
+
64
+ return "*" as "*"
65
+ },
66
+ onReady: (dbo) => {
67
+ dbo.tdwa.find!()
68
+ }
69
+ });
70
+
71
+
72
+ const auth: Auth = {
73
+ sidKeyName: "sid_token",
74
+ getUser: async (sid, db, _db) => {
75
+ db.dwadaw.find;
76
+ return 1 as any;
77
+ }
78
+ }
56
79
  })
57
80
 
58
81
  type S = {
59
82
  tbl1: {
60
- dataTypes: {type: string;};
61
83
  columns: {
62
- col1: { type: number | null;}
63
- col2: { type: string; }
84
+ col1: number | null;
85
+ col2: string;
64
86
  }
65
87
  },
66
88
  tbl2: {
67
- dataTypes: {type: string;};
68
89
  columns: {
69
- col1: { type: number | null;}
70
- col2: { type: string; }
90
+ col1: number | null;
91
+ col2: string;
71
92
  }
72
93
  }
73
94
  }
@@ -78,9 +99,21 @@ const test: DBSchema = c;
78
99
  const db: DBOFullyTyped<S> = 1 as any;
79
100
 
80
101
 
81
- export type PublishFullyTyped<Schema extends DBSchema | undefined = undefined> = Schema extends DBSchema? {
82
- [tov_name in keyof Partial<Schema>]: PublishAllOrNothing | (Schema[tov_name]["is_view"] extends true? PublishViewRule<Schema[tov_name]> : PublishTableRule<Schema[tov_name]>);
83
- } : (PublishAllOrNothing | Record<string, PublishViewRule | PublishTableRule>);
102
+ export type PublishFullyTyped<Schema = void> = Schema extends DBSchema? (
103
+ | PublishAllOrNothing
104
+ | {
105
+ [tov_name in keyof Partial<Schema>]:
106
+ | PublishAllOrNothing
107
+ | (
108
+ Schema[tov_name]["is_view"] extends true?
109
+ PublishViewRule<Schema[tov_name]["columns"]> :
110
+ PublishTableRule<Schema[tov_name]["columns"]>
111
+ );
112
+ }
113
+ ) : (
114
+ | PublishAllOrNothing
115
+ | Record<string, PublishViewRule | PublishTableRule | PublishAllOrNothing>
116
+ );
84
117
 
85
118
 
86
119
  const publish = (): PublishFullyTyped<S> => {
@@ -109,16 +142,18 @@ const publish = (): PublishFullyTyped<S> => {
109
142
  getColumns: true,
110
143
  getInfo: true,
111
144
  delete: {
112
- filterFields: {col1: 1}
145
+ filterFields: { col1: 1 }
113
146
  }
114
147
  },
115
148
  tbl2: {
116
- delete: {forcedFilter: {col1: 2}}
149
+ delete: {forcedFilter: { col1: 2 }}
117
150
  }
118
151
  }
119
152
  const res1: PublishFullyTyped = r
120
153
 
121
- // const res2: PublishFullyTyped = res;
154
+ const p: PublishParams<undefined> = 1 as any;
155
+
156
+ p.dbo.dwadaw.find!();
122
157
 
123
158
  return res;
124
159
  }