prostgles-server 4.2.623 → 4.2.625

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 (181) hide show
  1. package/debug/client-schema-types/DBGeneratedSchema.ts +13 -1
  2. package/dist/Audit/AuditTable.d.ts +2 -1
  3. package/dist/Audit/AuditTable.d.ts.map +1 -1
  4. package/dist/Audit/AuditTable.js +3 -2
  5. package/dist/Audit/AuditTable.js.map +1 -1
  6. package/dist/Audit/getAuditTableRules.d.ts +7 -0
  7. package/dist/Audit/getAuditTableRules.d.ts.map +1 -0
  8. package/dist/Audit/getAuditTableRules.js +191 -0
  9. package/dist/Audit/getAuditTableRules.js.map +1 -0
  10. package/dist/Audit/getAuditTriggerConfig.d.ts.map +1 -1
  11. package/dist/Audit/getAuditTriggerConfig.js +14 -1
  12. package/dist/Audit/getAuditTriggerConfig.js.map +1 -1
  13. package/dist/DBSchemaBuilder/getDBGeneratedSchema.d.ts.map +1 -1
  14. package/dist/DBSchemaBuilder/getDBGeneratedSchema.js +1 -2
  15. package/dist/DBSchemaBuilder/getDBGeneratedSchema.js.map +1 -1
  16. package/dist/DboBuilder/DboBuilder.js +1 -1
  17. package/dist/DboBuilder/DboBuilder.js.map +1 -1
  18. package/dist/DboBuilder/QueryBuilder/QueryBuilder.d.ts +10 -5
  19. package/dist/DboBuilder/QueryBuilder/QueryBuilder.d.ts.map +1 -1
  20. package/dist/DboBuilder/QueryBuilder/QueryBuilder.js +90 -71
  21. package/dist/DboBuilder/QueryBuilder/QueryBuilder.js.map +1 -1
  22. package/dist/DboBuilder/QueryBuilder/getJoinQuery.d.ts.map +1 -1
  23. package/dist/DboBuilder/QueryBuilder/getJoinQuery.js +3 -2
  24. package/dist/DboBuilder/QueryBuilder/getJoinQuery.js.map +1 -1
  25. package/dist/DboBuilder/QueryBuilder/getNewQuery.d.ts +2 -2
  26. package/dist/DboBuilder/QueryBuilder/getNewQuery.d.ts.map +1 -1
  27. package/dist/DboBuilder/QueryBuilder/getNewQuery.js +53 -116
  28. package/dist/DboBuilder/QueryBuilder/getNewQuery.js.map +1 -1
  29. package/dist/DboBuilder/QueryBuilder/getQuerySource.d.ts +18 -0
  30. package/dist/DboBuilder/QueryBuilder/getQuerySource.d.ts.map +1 -0
  31. package/dist/DboBuilder/QueryBuilder/getQuerySource.js +29 -0
  32. package/dist/DboBuilder/QueryBuilder/getQuerySource.js.map +1 -0
  33. package/dist/DboBuilder/QueryBuilder/getSelectQuery.d.ts.map +1 -1
  34. package/dist/DboBuilder/QueryBuilder/getSelectQuery.js +6 -2
  35. package/dist/DboBuilder/QueryBuilder/getSelectQuery.js.map +1 -1
  36. package/dist/DboBuilder/QueryBuilder/parseJoinSelect.d.ts +13 -0
  37. package/dist/DboBuilder/QueryBuilder/parseJoinSelect.d.ts.map +1 -0
  38. package/dist/DboBuilder/QueryBuilder/parseJoinSelect.js +57 -0
  39. package/dist/DboBuilder/QueryBuilder/parseJoinSelect.js.map +1 -0
  40. package/dist/DboBuilder/TableHandler/TableHandler.d.ts.map +1 -1
  41. package/dist/DboBuilder/TableHandler/TableHandler.js +2 -1
  42. package/dist/DboBuilder/TableHandler/TableHandler.js.map +1 -1
  43. package/dist/DboBuilder/TableHandler/delete.d.ts.map +1 -1
  44. package/dist/DboBuilder/TableHandler/delete.js +2 -1
  45. package/dist/DboBuilder/TableHandler/delete.js.map +1 -1
  46. package/dist/DboBuilder/TableHandler/runInsertUpdateQuery.d.ts.map +1 -1
  47. package/dist/DboBuilder/TableHandler/runInsertUpdateQuery.js +2 -1
  48. package/dist/DboBuilder/TableHandler/runInsertUpdateQuery.js.map +1 -1
  49. package/dist/DboBuilder/TableHandler/update.d.ts.map +1 -1
  50. package/dist/DboBuilder/TableHandler/update.js +2 -1
  51. package/dist/DboBuilder/TableHandler/update.js.map +1 -1
  52. package/dist/DboBuilder/ViewHandler/ViewHandler.d.ts +6 -16
  53. package/dist/DboBuilder/ViewHandler/ViewHandler.d.ts.map +1 -1
  54. package/dist/DboBuilder/ViewHandler/ViewHandler.js +2 -7
  55. package/dist/DboBuilder/ViewHandler/ViewHandler.js.map +1 -1
  56. package/dist/DboBuilder/ViewHandler/find.d.ts.map +1 -1
  57. package/dist/DboBuilder/ViewHandler/find.js +1 -1
  58. package/dist/DboBuilder/ViewHandler/find.js.map +1 -1
  59. package/dist/DboBuilder/ViewHandler/getExistsCondition.d.ts +1 -1
  60. package/dist/DboBuilder/ViewHandler/getExistsCondition.d.ts.map +1 -1
  61. package/dist/DboBuilder/ViewHandler/getExistsCondition.js +24 -13
  62. package/dist/DboBuilder/ViewHandler/getExistsCondition.js.map +1 -1
  63. package/dist/DboBuilder/ViewHandler/getTableJoinQuery.d.ts +4 -1
  64. package/dist/DboBuilder/ViewHandler/getTableJoinQuery.d.ts.map +1 -1
  65. package/dist/DboBuilder/ViewHandler/getTableJoinQuery.js +20 -14
  66. package/dist/DboBuilder/ViewHandler/getTableJoinQuery.js.map +1 -1
  67. package/dist/DboBuilder/ViewHandler/prepareWhere.d.ts +7 -3
  68. package/dist/DboBuilder/ViewHandler/prepareWhere.d.ts.map +1 -1
  69. package/dist/DboBuilder/ViewHandler/prepareWhere.js +30 -23
  70. package/dist/DboBuilder/ViewHandler/prepareWhere.js.map +1 -1
  71. package/dist/DboBuilder/getCondition.d.ts +2 -1
  72. package/dist/DboBuilder/getCondition.d.ts.map +1 -1
  73. package/dist/DboBuilder/getCondition.js +9 -8
  74. package/dist/DboBuilder/getCondition.js.map +1 -1
  75. package/dist/DboBuilder/getSubscribeRelatedTables.d.ts.map +1 -1
  76. package/dist/DboBuilder/getSubscribeRelatedTables.js +3 -2
  77. package/dist/DboBuilder/getSubscribeRelatedTables.js.map +1 -1
  78. package/dist/DboBuilder/parseUpdateRules.d.ts.map +1 -1
  79. package/dist/DboBuilder/parseUpdateRules.js +3 -2
  80. package/dist/DboBuilder/parseUpdateRules.js.map +1 -1
  81. package/dist/DboBuilder/schema/getTablesForSchemaPostgresSQL.d.ts +2 -2
  82. package/dist/Prostgles.d.ts.map +1 -1
  83. package/dist/Prostgles.js +2 -0
  84. package/dist/Prostgles.js.map +1 -1
  85. package/dist/ProstglesContext.spec.js +25 -0
  86. package/dist/ProstglesContext.spec.js.map +1 -1
  87. package/dist/PubSubManager/PubSubManager.d.ts +1 -1
  88. package/dist/PublishParser/PublishParser.d.ts +17 -8
  89. package/dist/PublishParser/PublishParser.d.ts.map +1 -1
  90. package/dist/PublishParser/PublishParser.js +59 -28
  91. package/dist/PublishParser/PublishParser.js.map +1 -1
  92. package/dist/PublishParser/applyScopeToTableRules.d.ts +0 -1
  93. package/dist/PublishParser/applyScopeToTableRules.d.ts.map +1 -1
  94. package/dist/PublishParser/applyScopeToTableRules.js +3 -7
  95. package/dist/PublishParser/applyScopeToTableRules.js.map +1 -1
  96. package/dist/PublishParser/getFileTableRules.d.ts +1 -1
  97. package/dist/PublishParser/getFileTableRules.d.ts.map +1 -1
  98. package/dist/PublishParser/getFileTableRules.js +52 -41
  99. package/dist/PublishParser/getFileTableRules.js.map +1 -1
  100. package/dist/PublishParser/getParsedPublishTable.d.ts +4 -0
  101. package/dist/PublishParser/getParsedPublishTable.d.ts.map +1 -0
  102. package/dist/PublishParser/{getTableRulesWithoutFileTable.js → getParsedPublishTable.js} +13 -7
  103. package/dist/PublishParser/getParsedPublishTable.js.map +1 -0
  104. package/dist/PublishParser/getPublishSchemas.d.ts +4 -0
  105. package/dist/PublishParser/getPublishSchemas.d.ts.map +1 -0
  106. package/dist/PublishParser/getPublishSchemas.js +42 -0
  107. package/dist/PublishParser/getPublishSchemas.js.map +1 -0
  108. package/dist/PublishParser/getPublishedObjectFromResult.d.ts +4 -0
  109. package/dist/PublishParser/getPublishedObjectFromResult.d.ts.map +1 -0
  110. package/dist/PublishParser/getPublishedObjectFromResult.js +77 -0
  111. package/dist/PublishParser/getPublishedObjectFromResult.js.map +1 -0
  112. package/dist/PublishParser/getPublishedTableNames.d.ts.map +1 -1
  113. package/dist/PublishParser/getPublishedTableNames.js +20 -1
  114. package/dist/PublishParser/getPublishedTableNames.js.map +1 -1
  115. package/dist/PublishParser/getSchemaFromPublish.d.ts.map +1 -1
  116. package/dist/PublishParser/getSchemaFromPublish.js +11 -5
  117. package/dist/PublishParser/getSchemaFromPublish.js.map +1 -1
  118. package/dist/PublishParser/publishTypesAndUtils.d.ts +28 -7
  119. package/dist/PublishParser/publishTypesAndUtils.d.ts.map +1 -1
  120. package/dist/PublishParser/publishTypesAndUtils.js +6 -1
  121. package/dist/PublishParser/publishTypesAndUtils.js.map +1 -1
  122. package/dist/PublishParser/validatePublishProfiles.d.ts +2 -2
  123. package/dist/PublishParser/validatePublishProfiles.d.ts.map +1 -1
  124. package/dist/PublishParser/validatePublishProfiles.js.map +1 -1
  125. package/dist/TableConfig/getColumnSQLDefinitionQuery.d.ts.map +1 -1
  126. package/dist/TableConfig/getColumnSQLDefinitionQuery.js +1 -2
  127. package/dist/TableConfig/getColumnSQLDefinitionQuery.js.map +1 -1
  128. package/dist/index.d.ts +2 -2
  129. package/dist/index.d.ts.map +1 -1
  130. package/dist/index.js +2 -1
  131. package/dist/index.js.map +1 -1
  132. package/dist/runClientRequest.d.ts.map +1 -1
  133. package/dist/runClientRequest.js +6 -1
  134. package/dist/runClientRequest.js.map +1 -1
  135. package/lib/Audit/AuditTable.ts +4 -3
  136. package/lib/Audit/getAuditTableRules.ts +288 -0
  137. package/lib/Audit/getAuditTriggerConfig.ts +14 -1
  138. package/lib/DBSchemaBuilder/getDBGeneratedSchema.ts +1 -2
  139. package/lib/DboBuilder/DboBuilder.ts +1 -1
  140. package/lib/DboBuilder/QueryBuilder/QueryBuilder.ts +118 -90
  141. package/lib/DboBuilder/QueryBuilder/getJoinQuery.ts +3 -2
  142. package/lib/DboBuilder/QueryBuilder/getNewQuery.ts +111 -194
  143. package/lib/DboBuilder/QueryBuilder/getQuerySource.ts +55 -0
  144. package/lib/DboBuilder/QueryBuilder/getSelectQuery.ts +8 -2
  145. package/lib/DboBuilder/QueryBuilder/parseJoinSelect.ts +73 -0
  146. package/lib/DboBuilder/TableHandler/TableHandler.ts +3 -6
  147. package/lib/DboBuilder/TableHandler/delete.ts +2 -1
  148. package/lib/DboBuilder/TableHandler/runInsertUpdateQuery.ts +2 -1
  149. package/lib/DboBuilder/TableHandler/update.ts +2 -1
  150. package/lib/DboBuilder/ViewHandler/ViewHandler.ts +6 -12
  151. package/lib/DboBuilder/ViewHandler/find.ts +0 -1
  152. package/lib/DboBuilder/ViewHandler/getExistsCondition.ts +35 -28
  153. package/lib/DboBuilder/ViewHandler/getTableJoinQuery.ts +22 -14
  154. package/lib/DboBuilder/ViewHandler/prepareWhere.ts +48 -27
  155. package/lib/DboBuilder/getCondition.ts +11 -10
  156. package/lib/DboBuilder/getSubscribeRelatedTables.ts +3 -2
  157. package/lib/DboBuilder/parseUpdateRules.ts +3 -2
  158. package/lib/Prostgles.ts +1 -0
  159. package/lib/ProstglesContext.spec.ts +30 -0
  160. package/lib/PublishParser/PublishParser.ts +108 -51
  161. package/lib/PublishParser/applyScopeToTableRules.ts +1 -7
  162. package/lib/PublishParser/getFileTableRules.ts +52 -45
  163. package/lib/PublishParser/{getTableRulesWithoutFileTable.ts → getParsedPublishTable.ts} +16 -12
  164. package/lib/PublishParser/getPublishSchemas.ts +49 -0
  165. package/lib/PublishParser/getPublishedObjectFromResult.ts +104 -0
  166. package/lib/PublishParser/getPublishedTableNames.ts +28 -1
  167. package/lib/PublishParser/getSchemaFromPublish.ts +9 -7
  168. package/lib/PublishParser/publishTypesAndUtils.ts +31 -11
  169. package/lib/PublishParser/validatePublishProfiles.ts +1 -1
  170. package/lib/TableConfig/getColumnSQLDefinitionQuery.ts +8 -2
  171. package/lib/index.ts +14 -1
  172. package/lib/runClientRequest.ts +4 -3
  173. package/package.json +1 -1
  174. package/dist/DBSchemaBuilder/getPublishSchemas.d.ts +0 -4
  175. package/dist/DBSchemaBuilder/getPublishSchemas.d.ts.map +0 -1
  176. package/dist/DBSchemaBuilder/getPublishSchemas.js +0 -34
  177. package/dist/DBSchemaBuilder/getPublishSchemas.js.map +0 -1
  178. package/dist/PublishParser/getTableRulesWithoutFileTable.d.ts +0 -6
  179. package/dist/PublishParser/getTableRulesWithoutFileTable.d.ts.map +0 -1
  180. package/dist/PublishParser/getTableRulesWithoutFileTable.js.map +0 -1
  181. package/lib/DBSchemaBuilder/getPublishSchemas.ts +0 -41
@@ -0,0 +1,104 @@
1
+ import {
2
+ fromEntries,
3
+ getJSONBSchemaValidationError,
4
+ getProperty,
5
+ isObject,
6
+ pickKeys,
7
+ type TableSchema,
8
+ } from "prostgles-types";
9
+ import { isArray } from "../utils/utils";
10
+ import type {
11
+ PublishContextValue,
12
+ PublishedResult,
13
+ PublishObject,
14
+ PublishParams,
15
+ } from "./publishTypesAndUtils";
16
+
17
+ export const getPublishedObjectFromResult = (
18
+ publish: PublishedResult | undefined,
19
+ tablesOrViews: TableSchema[],
20
+ publishParams: PublishParams | undefined,
21
+ ): PublishObject => {
22
+ if (!publish) return {};
23
+ if (publish === "*") {
24
+ return Object.fromEntries(tablesOrViews.map((table) => [table.name, "*"]));
25
+ }
26
+
27
+ if (isArray(publish)) {
28
+ const validation = getJSONBSchemaValidationError(
29
+ {
30
+ tuple: [
31
+ { enum: ["*"] },
32
+ {
33
+ record: {
34
+ keysEnum: ["select", "update", "insert", "delete"] as const,
35
+ values: { enum: ["*", false, true] },
36
+ partial: true,
37
+ },
38
+ },
39
+ ],
40
+ } as const,
41
+ publish,
42
+ );
43
+ if (validation.error !== undefined) {
44
+ throw new Error(`Invalid publish all tables: ${validation.error}`);
45
+ }
46
+
47
+ const [_, allTableRules] = validation.data;
48
+ return fromEntries(
49
+ tablesOrViews.map((table) => {
50
+ return [table.name, table.is_view ? pickKeys(allTableRules, ["select"]) : allTableRules];
51
+ }),
52
+ );
53
+ }
54
+
55
+ return replaceContextPlaceholders(publish, publishParams);
56
+ };
57
+
58
+ const replaceContextPlaceholders = <T>(publish: T, publishParams: PublishParams | undefined): T => {
59
+ const context = { user: publishParams?.user };
60
+ if (!publishParams) return publish;
61
+ if (isArray(publish)) {
62
+ return publish.map((item) => replaceContextPlaceholders(item, publishParams)) as T;
63
+ }
64
+ if (isObject(publish) && isPlainObject(publish)) {
65
+ const { data } = getJSONBSchemaValidationError(
66
+ {
67
+ type: {
68
+ $prostglesContext: {
69
+ type: { objectName: { enum: ["user"] as const }, objectPropertyName: "string" },
70
+ },
71
+ },
72
+ },
73
+ publish,
74
+ { allowExtraProperties: false },
75
+ );
76
+ if (data) {
77
+ data satisfies PublishContextValue;
78
+ const { objectName, objectPropertyName } = data["$prostglesContext"];
79
+ const contextObject = getProperty(context, objectName);
80
+ if (!contextObject) {
81
+ throw new Error(`Context object "${objectName}" not found`);
82
+ }
83
+ const contextProperty = getProperty(contextObject, objectPropertyName);
84
+ if (contextProperty === undefined) {
85
+ throw new Error(
86
+ `Context property "${objectPropertyName}" not found/undefined in context object "${objectName}"`,
87
+ );
88
+ }
89
+ return contextProperty as T;
90
+ }
91
+ return Object.fromEntries(
92
+ Object.entries(publish).map(([key, value]) => [
93
+ key,
94
+ replaceContextPlaceholders(value, publishParams),
95
+ ]),
96
+ ) as T;
97
+ }
98
+ return publish;
99
+ };
100
+ const isPlainObject = (value: unknown): value is Record<string, unknown> => {
101
+ if (!value || typeof value !== "object") return false;
102
+ const prototype = Object.getPrototypeOf(value);
103
+ return prototype === Object.prototype || prototype === null;
104
+ };
@@ -1,3 +1,4 @@
1
+ import { isObject } from "prostgles-types";
1
2
  import type { PublishParser } from "./PublishParser";
2
3
  import { type PublishObject } from "./PublishParser";
3
4
 
@@ -6,7 +7,12 @@ export const getPublishedTableNames = (
6
7
  publishObject: PublishObject,
7
8
  ) => {
8
9
  const txKey = !publishParserInstance.prostgles.opts.transactions ? "" : "tx";
9
- const tableNames = Object.keys(publishObject).filter((k) => !txKey || txKey !== k);
10
+ if (txKey && txKey in publishObject) {
11
+ throw new Error(
12
+ `Transactions key ${JSON.stringify(txKey)} collides with a published table name`,
13
+ );
14
+ }
15
+ const tableNames = Object.keys(publishObject);
10
16
 
11
17
  /**
12
18
  * Add file table to the list of published tables if it's referenced by other published tables.
@@ -25,5 +31,26 @@ export const getPublishedTableNames = (
25
31
  tableNames.unshift(fileTableName);
26
32
  }
27
33
  }
34
+
35
+ const audit = publishParserInstance.prostgles.resolvedAuditConfig;
36
+ const publishedFileTableName =
37
+ fileTableName && tableNames.includes(fileTableName) ?
38
+ fileTableName
39
+ : undefined;
40
+ if (
41
+ audit &&
42
+ !tableNames.includes(audit.tableName) &&
43
+ Object.keys(audit.tables).some((tableName) => {
44
+ const rule = publishObject[tableName];
45
+ return (
46
+ tableName === publishedFileTableName ||
47
+ rule === "*" ||
48
+ rule === true ||
49
+ (isObject(rule) && Boolean(rule.select))
50
+ );
51
+ })
52
+ ) {
53
+ tableNames.unshift(audit.tableName);
54
+ }
28
55
  return tableNames;
29
56
  };
@@ -27,18 +27,18 @@ export async function getSchemaFromPublish(
27
27
  if (clientInfo === "new-session-redirect") {
28
28
  throw "new-session-redirect";
29
29
  }
30
- let publish: PublishObject | undefined;
30
+ let resolvedPublishObject: PublishObject | undefined;
31
31
  try {
32
- publish = await this.getPublishObject(clientReq, clientInfo);
32
+ resolvedPublishObject = await this.getPublishObjectForUser(clientReq, clientInfo);
33
33
  } catch (err) {
34
34
  console.error("Error within then Publish function ", err);
35
35
  throw err;
36
36
  }
37
37
 
38
- if (!publish || !Object.keys(publish).length) {
38
+ if (!resolvedPublishObject || !Object.keys(resolvedPublishObject).length) {
39
39
  return { tables, tableSchemaErrors };
40
40
  }
41
- const tableNames = getPublishedTableNames(this, publish);
41
+ const tableNames = getPublishedTableNames(this, resolvedPublishObject);
42
42
 
43
43
  await Promise.all(
44
44
  tableNames.map(async (tableName) => {
@@ -52,11 +52,13 @@ export async function getSchemaFromPublish(
52
52
  throw errMsg;
53
53
  }
54
54
 
55
- const parsedTableRule = await this.getTableRules(
56
- { clientReq, tableName },
55
+ const parsedTableRule = await this.getTableRules({
56
+ clientReq,
57
+ tableName,
57
58
  clientInfo,
58
59
  scope,
59
- );
60
+ resolvedPublishObject,
61
+ });
60
62
 
61
63
  if (!parsedTableRule || isEmpty(parsedTableRule)) return;
62
64
  if (!isObject(parsedTableRule)) {
@@ -27,6 +27,7 @@ import type {
27
27
  import type { AuthClientRequest, LoginClientInfo, SessionUser } from "../Auth/AuthTypes";
28
28
  import type { TableSchemaColumn } from "../DboBuilder/DboBuilderTypes";
29
29
  import type { ClientHandlers } from "../WebsocketAPI/getClientHandlers";
30
+ import { isArray } from "../utils/utils";
30
31
 
31
32
  export type InsertRequestData = {
32
33
  data: object | object[];
@@ -227,11 +228,6 @@ export type SelectRule<Cols extends AnyObject = AnyObject, S extends DBSchema |
227
228
  * */
228
229
  filterFields?: FieldFilter<Cols>;
229
230
 
230
- /**
231
- * Validation logic to check/update data for each request
232
- */
233
- validate?(args: SelectRequestData): SelectRequestData | Promise<SelectRequestData>;
234
-
235
231
  subscribeThrottle?: number;
236
232
 
237
233
  disableMethods?: Partial<Record<"sync" | "subscribe", 1>>;
@@ -556,16 +552,40 @@ export type ParsedPublishTables = {
556
552
  };
557
553
 
558
554
  type PublishAllOrNothingRoot = Exclude<PublishAllOrNothing, boolean>;
559
- export type PublishedResult<Schema = void> = PublishAllOrNothingRoot | PublishFullyTyped<Schema>;
555
+ export type PublishAllTables = [
556
+ "*",
557
+ Partial<{ select: boolean; update: boolean; insert: boolean; delete: boolean }>,
558
+ ];
559
+ export type PublishedResult<Schema = void> =
560
+ PublishAllOrNothingRoot | PublishAllTables | PublishFullyTyped<Schema>;
561
+
560
562
  export type PublishProfile<Schema = void> = {
561
563
  /** Exported schema type name; defaults to Publish1Schema, Publish2Schema, etc. */
562
564
  name?: string;
563
- userTypes: readonly string[];
565
+ userTypes: readonly string[] | string[];
564
566
  publish: PublishedResult<Schema>;
565
567
  };
568
+
569
+ /**
570
+ * Used in PublishProfile to provide user data
571
+ */
572
+ export type PublishContextValue<C extends { user: AnyObject } = { user: AnyObject }> = {
573
+ $prostglesContext: {
574
+ [K in keyof C]: {
575
+ objectName: K;
576
+ objectPropertyName: keyof C[K];
577
+ };
578
+ }[keyof C];
579
+ };
580
+
566
581
  export type Publish<Schema = void, SUser extends SessionUser = SessionUser> =
567
- | PublishProfile<Schema>[]
568
582
  | PublishedResult<Schema>
569
- | ((
570
- params: PublishParams<Schema, SUser>,
571
- ) => Awaitable<PublishedResult<Schema> | PublishProfile<Schema>[]>);
583
+ | PublishProfile<Schema>[]
584
+ | readonly PublishProfile<Schema>[]
585
+ | ((params: PublishParams<Schema, SUser>) => Awaitable<PublishedResult<Schema>>);
586
+
587
+ export const isPublishProfiles = <const P extends Publish | undefined>(
588
+ publish: P,
589
+ ): publish is Extract<P, PublishProfile[] | readonly PublishProfile[]> => {
590
+ return isArray(publish) && publish[0] !== "*";
591
+ };
@@ -1,7 +1,7 @@
1
1
  import { validateClientSchemaName } from "../DBSchemaBuilder/getClientDBGeneratedSchemas";
2
2
  import type { PublishProfile } from "./publishTypesAndUtils";
3
3
 
4
- export const validatePublishProfiles = (profiles: PublishProfile[]) => {
4
+ export const validatePublishProfiles = (profiles: readonly PublishProfile[]) => {
5
5
  const names = new Set<string>();
6
6
  const userTypes = new Set<string>();
7
7
  const entries = profiles.map((profile, index) => {
@@ -1,8 +1,14 @@
1
1
  import type pgPromise from "pg-promise";
2
- import { asName, getObjectEntries, isObject, pickKeys, type JSONB } from "prostgles-types";
2
+ import {
3
+ asName,
4
+ fromEntries,
5
+ getObjectEntries,
6
+ isObject,
7
+ pickKeys,
8
+ type JSONB,
9
+ } from "prostgles-types";
3
10
  import { VALIDATE_SCHEMA_FUNCNAME } from "../JSONBSchemaValidation/validateJSONBSchemaSQL";
4
11
  import type { DB } from "../Prostgles";
5
- import { fromEntries } from "../PublishParser/applyScopeToTableRules";
6
12
  import { asValue } from "../PubSubManager/PubSubManagerUtils";
7
13
  import type { BaseColumnTypes, ColumnConfig } from "./TableConfigTypes";
8
14
 
package/lib/index.ts CHANGED
@@ -20,7 +20,19 @@ export const createProstgles = <S = void, SUser extends SessionUser = SessionUse
20
20
  };
21
21
  export * from "./PublishParser/defineServerFunction";
22
22
  export * from "./Auth/AuthTypes";
23
- export type { PublishParams, PublishProfile } from "./PublishParser/publishTypesAndUtils";
23
+
24
+ export type {
25
+ PublishContextValue,
26
+ Publish,
27
+ PublishObject,
28
+ PublishAllTables,
29
+ PublishedResult,
30
+ BeforeEachTsTrigger,
31
+ AfterAllTsTrigger,
32
+ AfterEachTsTrigger,
33
+ PublishProfile,
34
+ PublishParams,
35
+ } from "./PublishParser/publishTypesAndUtils";
24
36
  export type { DBOFullyTyped, DBOFullyTypedClient } from "./DBSchemaBuilder/DBSchemaBuilder";
25
37
  export type { DBHandlerServer } from "./Prostgles";
26
38
  export type { StorageClient as CloudClient } from "./StorageClient/StorageClientTypes";
@@ -44,6 +56,7 @@ export type { FileTableRow } from "./StorageClient/getFileTableConfig";
44
56
  export { defineJoin };
45
57
  export {
46
58
  AUDIT_TABLE_COLUMN_DEFINITIONS,
59
+ AUDIT_TABLE_COLUMN_NAMES,
47
60
  AUDIT_TABLE_COLUMNS,
48
61
  type AuditTableRow,
49
62
  } from "./Audit/AuditTable";
@@ -112,11 +112,12 @@ export const runClientRequest = async function (
112
112
  throw clientInfo;
113
113
  }
114
114
 
115
- const parsedTableRule = await this.publishParser.getParsedTableRule(
116
- { tableName, clientReq },
115
+ const parsedTableRule = await this.publishParser.getParsedTableRule({
116
+ tableName,
117
+ clientReq,
117
118
  clientInfo,
118
119
  scope,
119
- );
120
+ });
120
121
 
121
122
  const sessionUser = getSessionUser(clientInfo);
122
123
  const localParams: LocalParams = {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "prostgles-server",
3
- "version": "4.2.623",
3
+ "version": "4.2.625",
4
4
  "description": "",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -1,4 +0,0 @@
1
- import type { PublishParser } from "../PublishParser/PublishParser";
2
- import type { ClientSchemaProfiles } from "./getClientDBGeneratedSchemas";
3
- export declare const getPublishSchemas: (publishParser: PublishParser) => Promise<ClientSchemaProfiles | undefined>;
4
- //# sourceMappingURL=getPublishSchemas.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"getPublishSchemas.d.ts","sourceRoot":"","sources":["../../lib/DBSchemaBuilder/getPublishSchemas.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAiB,aAAa,EAAE,MAAM,gCAAgC,CAAC;AACnF,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AAE1E,eAAO,MAAM,iBAAiB,GAC5B,eAAe,aAAa,KAC3B,OAAO,CAAC,oBAAoB,GAAG,SAAS,CAgC1C,CAAC"}
@@ -1,34 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getPublishSchemas = void 0;
4
- const getColumns_1 = require("../DboBuilder/getColumns");
5
- const getRawInfo_1 = require("../DboBuilder/ViewHandler/getRawInfo");
6
- const getPublishedTableNames_1 = require("../PublishParser/getPublishedTableNames");
7
- const getPublishSchemas = async (publishParser) => {
8
- if (!Array.isArray(publishParser.publish)) {
9
- return;
10
- }
11
- const entries = publishParser.publish;
12
- const profiles = Object.fromEntries(entries.map(({ name }) => [name, { tableSchema: [] }]));
13
- const { tablesOrViews = [] } = publishParser.prostgles.dboBuilder;
14
- for (const { name, publish } of entries) {
15
- const publishObject = publish === "*" ?
16
- Object.fromEntries(tablesOrViews.map((table) => [table.name, "*"]))
17
- : (publish ?? {});
18
- const tableNames = (0, getPublishedTableNames_1.getPublishedTableNames)(publishParser, publishObject);
19
- for (const tableName of tableNames) {
20
- const rules = await publishParser.getTableRules({ tableName, clientReq: undefined }, undefined, undefined, publishObject);
21
- if (!rules || !Object.values(rules).some(Boolean))
22
- continue;
23
- const table = publishParser.dbo[tableName];
24
- profiles[name].tableSchema.push({
25
- ...getRawInfo_1.getRawInfo.call(table, undefined, rules),
26
- name: tableName,
27
- columns: await getColumns_1.getRawColumns.call(table, undefined, undefined, rules),
28
- });
29
- }
30
- }
31
- return profiles;
32
- };
33
- exports.getPublishSchemas = getPublishSchemas;
34
- //# sourceMappingURL=getPublishSchemas.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"getPublishSchemas.js","sourceRoot":"","sources":["../../lib/DBSchemaBuilder/getPublishSchemas.ts"],"names":[],"mappings":";;;AAAA,yDAAyD;AACzD,qEAAkE;AAClE,oFAAiF;AAI1E,MAAM,iBAAiB,GAAG,KAAK,EACpC,aAA4B,EACe,EAAE;IAC7C,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,CAAC;QAC1C,OAAO;IACT,CAAC;IACD,MAAM,OAAO,GAAG,aAAa,CAAC,OAAO,CAAC;IACtC,MAAM,QAAQ,GAAyB,MAAM,CAAC,WAAW,CACvD,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC,CAAC,CACvD,CAAC;IACF,MAAM,EAAE,aAAa,GAAG,EAAE,EAAE,GAAG,aAAa,CAAC,SAAS,CAAC,UAAU,CAAC;IAClE,KAAK,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,OAAO,EAAE,CAAC;QACxC,MAAM,aAAa,GACjB,OAAO,KAAK,GAAG,CAAC,CAAC;YACf,MAAM,CAAC,WAAW,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC;YACrE,CAAC,CAAC,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;QACpB,MAAM,UAAU,GAAG,IAAA,+CAAsB,EAAC,aAAa,EAAE,aAAa,CAAC,CAAC;QACxE,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;YACnC,MAAM,KAAK,GAAG,MAAM,aAAa,CAAC,aAAa,CAC7C,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,EACnC,SAAS,EACT,SAAS,EACT,aAAa,CACd,CAAC;YACF,IAAI,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC;gBAAE,SAAS;YAC5D,MAAM,KAAK,GAAG,aAAa,CAAC,GAAG,CAAC,SAAS,CAAE,CAAC;YAC5C,QAAQ,CAAC,IAAI,CAAE,CAAC,WAAW,CAAC,IAAI,CAAC;gBAC/B,GAAG,uBAAU,CAAC,IAAI,CAAC,KAAK,EAAE,SAAS,EAAE,KAAK,CAAC;gBAC3C,IAAI,EAAE,SAAS;gBACf,OAAO,EAAE,MAAM,0BAAa,CAAC,IAAI,CAAC,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,CAAC;aACtE,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC,CAAC;AAlCW,QAAA,iBAAiB,qBAkC5B"}
@@ -1,6 +0,0 @@
1
- import type { AuthResultWithSID } from "../Auth/AuthTypes";
2
- import type { PublishParser } from "./PublishParser";
3
- import type { DboTable, ParsedPublishTable } from "./publishTypesAndUtils";
4
- import { type PublishObject } from "./publishTypesAndUtils";
5
- export declare function getTableRulesWithoutFileTable(this: PublishParser, { tableName, clientReq }: DboTable, clientInfo: AuthResultWithSID | undefined, overridenPublish?: PublishObject): Promise<ParsedPublishTable | undefined>;
6
- //# sourceMappingURL=getTableRulesWithoutFileTable.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"getTableRulesWithoutFileTable.d.ts","sourceRoot":"","sources":["../../lib/PublishParser/getTableRulesWithoutFileTable.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAG3D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,KAAK,EAAE,QAAQ,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC3E,OAAO,EAAwB,KAAK,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAElF,wBAAsB,6BAA6B,CACjD,IAAI,EAAE,aAAa,EACnB,EAAE,SAAS,EAAE,SAAS,EAAE,EAAE,QAAQ,EAClC,UAAU,EAAE,iBAAiB,GAAG,SAAS,EACzC,gBAAgB,CAAC,EAAE,aAAa,GAC/B,OAAO,CAAC,kBAAkB,GAAG,SAAS,CAAC,CAqGzC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"getTableRulesWithoutFileTable.js","sourceRoot":"","sources":["../../lib/PublishParser/getTableRulesWithoutFileTable.ts"],"names":[],"mappings":"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"}
@@ -1,41 +0,0 @@
1
- import { getRawColumns } from "../DboBuilder/getColumns";
2
- import { getRawInfo } from "../DboBuilder/ViewHandler/getRawInfo";
3
- import { getPublishedTableNames } from "../PublishParser/getPublishedTableNames";
4
- import type { PublishObject, PublishParser } from "../PublishParser/PublishParser";
5
- import type { ClientSchemaProfiles } from "./getClientDBGeneratedSchemas";
6
-
7
- export const getPublishSchemas = async (
8
- publishParser: PublishParser,
9
- ): Promise<ClientSchemaProfiles | undefined> => {
10
- if (!Array.isArray(publishParser.publish)) {
11
- return;
12
- }
13
- const entries = publishParser.publish;
14
- const profiles: ClientSchemaProfiles = Object.fromEntries(
15
- entries.map(({ name }) => [name, { tableSchema: [] }]),
16
- );
17
- const { tablesOrViews = [] } = publishParser.prostgles.dboBuilder;
18
- for (const { name, publish } of entries) {
19
- const publishObject: PublishObject =
20
- publish === "*" ?
21
- Object.fromEntries(tablesOrViews.map((table) => [table.name, "*"]))
22
- : (publish ?? {});
23
- const tableNames = getPublishedTableNames(publishParser, publishObject);
24
- for (const tableName of tableNames) {
25
- const rules = await publishParser.getTableRules(
26
- { tableName, clientReq: undefined },
27
- undefined,
28
- undefined,
29
- publishObject,
30
- );
31
- if (!rules || !Object.values(rules).some(Boolean)) continue;
32
- const table = publishParser.dbo[tableName]!;
33
- profiles[name]!.tableSchema.push({
34
- ...getRawInfo.call(table, undefined, rules),
35
- name: tableName,
36
- columns: await getRawColumns.call(table, undefined, undefined, rules),
37
- });
38
- }
39
- }
40
- return profiles;
41
- };