prostgles-server 4.2.586 → 4.2.588
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/dist/DBSchemaBuilder/getFunctionsTypescriptSchema.d.ts +1 -1
- package/dist/DBSchemaBuilder/getFunctionsTypescriptSchema.d.ts.map +1 -1
- package/dist/DBSchemaBuilder/getFunctionsTypescriptSchema.js +1 -1
- package/dist/DBSchemaBuilder/getFunctionsTypescriptSchema.js.map +1 -1
- package/dist/DBSchemaBuilder/getServerFunctionReturnTypes.d.ts.map +1 -1
- package/dist/DBSchemaBuilder/getServerFunctionReturnTypes.fixture.d.ts +2 -0
- package/dist/DBSchemaBuilder/getServerFunctionReturnTypes.fixture.d.ts.map +1 -0
- package/dist/DBSchemaBuilder/getServerFunctionReturnTypes.fixture.js +57 -0
- package/dist/DBSchemaBuilder/getServerFunctionReturnTypes.fixture.js.map +1 -0
- package/dist/DBSchemaBuilder/getServerFunctionReturnTypes.js +26 -14
- package/dist/DBSchemaBuilder/getServerFunctionReturnTypes.js.map +1 -1
- package/dist/DBSchemaBuilder/getServerFunctionReturnTypes.spec.d.ts +2 -0
- package/dist/DBSchemaBuilder/getServerFunctionReturnTypes.spec.d.ts.map +1 -0
- package/dist/DBSchemaBuilder/getServerFunctionReturnTypes.spec.js +18 -0
- package/dist/DBSchemaBuilder/getServerFunctionReturnTypes.spec.js.map +1 -0
- package/dist/DBSchemaBuilder/resolveTypeToStructure.d.ts.map +1 -1
- package/dist/DBSchemaBuilder/resolveTypeToStructure.js +11 -4
- package/dist/DBSchemaBuilder/resolveTypeToStructure.js.map +1 -1
- package/dist/DboBuilder/DboBuilder.d.ts.map +1 -1
- package/dist/DboBuilder/DboBuilder.js +11 -7
- package/dist/DboBuilder/DboBuilder.js.map +1 -1
- package/dist/DboBuilder/schema/getTablesForSchemaPostgresSQL.d.ts +1 -1
- package/dist/ProstglesTypes.d.ts +2 -2
- package/dist/ProstglesTypes.d.ts.map +1 -1
- package/dist/PublishParser/PublishParser.d.ts.map +1 -1
- package/dist/PublishParser/PublishParser.js +44 -5
- package/dist/PublishParser/PublishParser.js.map +1 -1
- package/dist/PublishParser/defineServerFunction.d.ts +34 -54
- package/dist/PublishParser/defineServerFunction.d.ts.map +1 -1
- package/dist/PublishParser/defineServerFunction.js +4 -31
- package/dist/PublishParser/defineServerFunction.js.map +1 -1
- package/dist/PublishParser/defineServerFunction.spec.js +12 -3
- package/dist/PublishParser/defineServerFunction.spec.js.map +1 -1
- package/dist/runClientRequest.d.ts.map +1 -1
- package/dist/runClientRequest.js +2 -1
- package/dist/runClientRequest.js.map +1 -1
- package/lib/DBSchemaBuilder/getFunctionsTypescriptSchema.ts +3 -3
- package/lib/DBSchemaBuilder/getServerFunctionReturnTypes.fixture.ts +33 -0
- package/lib/DBSchemaBuilder/getServerFunctionReturnTypes.spec.ts +18 -0
- package/lib/DBSchemaBuilder/getServerFunctionReturnTypes.ts +38 -28
- package/lib/DBSchemaBuilder/resolveTypeToStructure.ts +9 -4
- package/lib/DboBuilder/DboBuilder.ts +13 -6
- package/lib/ProstglesTypes.ts +2 -2
- package/lib/PublishParser/PublishParser.ts +46 -6
- package/lib/PublishParser/defineServerFunction.spec.ts +16 -4
- package/lib/PublishParser/defineServerFunction.ts +81 -93
- package/lib/runClientRequest.ts +2 -1
- package/package.json +1 -1
|
@@ -1,64 +1,44 @@
|
|
|
1
|
-
import type { JSONB, JSONBObjectTypeIfDefined, MaybePromise } from "prostgles-types";
|
|
1
|
+
import type { AnyObject, DBSchema, FullFilter, JSONB, JSONBObjectTypeIfDefined, MaybePromise, SQLHandler } from "prostgles-types";
|
|
2
2
|
import type { SessionUser } from "../Auth/AuthTypes";
|
|
3
|
+
import type { DBOFullyTyped } from "../DBSchemaBuilder/DBSchemaBuilder";
|
|
4
|
+
import type { DB } from "../initProstgles";
|
|
3
5
|
import type { PublishParams } from "./publishTypesAndUtils";
|
|
6
|
+
type FunctionContextBase<S, SUser extends SessionUser> = Pick<PublishParams<S, SUser>, "tables" | "clientReq" | "clientInfo"> & {
|
|
7
|
+
dbo: DBOFullyTyped<S>;
|
|
8
|
+
user: S extends DBSchema ? S["users"]["columns"] extends AnyObject ? Required<S["users"]["columns"]> : SUser["user"] : SUser["user"];
|
|
9
|
+
};
|
|
10
|
+
export type RestrictedFunctionContext<S = void, SUser extends SessionUser = SessionUser> = FunctionContextBase<S, SUser>;
|
|
11
|
+
export type UnrestrictedFunctionContext<S = void, SUser extends SessionUser = SessionUser> = FunctionContextBase<S, SUser> & {
|
|
12
|
+
db: DB;
|
|
13
|
+
sql: SQLHandler;
|
|
14
|
+
};
|
|
15
|
+
export type ServerFunctionContext = RestrictedFunctionContext | UnrestrictedFunctionContext;
|
|
4
16
|
export type ServerFunctionDefinition = {
|
|
5
|
-
input?: Record<string, JSONB.FieldType
|
|
17
|
+
input?: Record<string, JSONB.FieldType>;
|
|
6
18
|
description?: string;
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
*/
|
|
10
|
-
run: undefined | ((args: Record<string, unknown> | undefined) => MaybePromise<unknown>);
|
|
19
|
+
unrestrictedDbAccess?: true;
|
|
20
|
+
run: (...args: any[]) => MaybePromise<unknown>;
|
|
11
21
|
};
|
|
12
|
-
|
|
22
|
+
type DefineFunctionArgs<TInput extends Record<string, JSONB.FieldType> | undefined, Context, Return> = {
|
|
13
23
|
input?: TInput;
|
|
14
24
|
description?: string;
|
|
15
|
-
|
|
16
|
-
* undefined if not allowed
|
|
17
|
-
*/
|
|
18
|
-
run: undefined | ((args: JSONBObjectTypeIfDefined<TInput>) => MaybePromise<unknown>);
|
|
19
|
-
}) => ServerFunctionDefinition;
|
|
20
|
-
export type ServerFunctionDefinitions<S = void, SUser extends SessionUser = SessionUser> = (
|
|
21
|
-
/**
|
|
22
|
-
* params will be undefined on first run to generate the definitions
|
|
23
|
-
*/
|
|
24
|
-
params: undefined | PublishParams<S, SUser>) => MaybePromise<Record<string, ServerFunctionDefinition>>;
|
|
25
|
-
export declare const createServerFunctionWithContext: <Context>(
|
|
26
|
-
/**
|
|
27
|
-
* undefined if not allowed
|
|
28
|
-
*/
|
|
29
|
-
context: Context | undefined) => <Input extends Record<string, JSONB.FieldType> | undefined, Run extends (args: JSONBObjectTypeIfDefined<Input>, context: Context) => MaybePromise<any>>(args: {
|
|
30
|
-
input?: Input;
|
|
31
|
-
description?: string;
|
|
32
|
-
run: Run;
|
|
33
|
-
}) => {
|
|
34
|
-
run: ((validatedArgs: any) => Run) | undefined;
|
|
35
|
-
input?: Input;
|
|
36
|
-
description?: string;
|
|
37
|
-
};
|
|
38
|
-
type InputOf<T> = T extends {
|
|
39
|
-
input?: infer I;
|
|
40
|
-
} ? I : undefined;
|
|
41
|
-
type SafeInput<I> = I extends Record<string, JSONB.FieldType> ? I : undefined;
|
|
42
|
-
type ServerFunctionArgsFrom<Context, Def> = {
|
|
43
|
-
input?: InputOf<Def>;
|
|
44
|
-
description?: string;
|
|
45
|
-
run: (args: JSONBObjectTypeIfDefined<SafeInput<InputOf<Def>>>, context: Context) => MaybePromise<any>;
|
|
46
|
-
};
|
|
47
|
-
type ServerFunctionBlock<Context, Defs> = {
|
|
48
|
-
[K in keyof Defs]: ServerFunctionArgsFrom<Context, Defs[K]>;
|
|
49
|
-
};
|
|
50
|
-
type WrappedDef<Context, Def> = Def extends ({
|
|
51
|
-
input?: infer I;
|
|
52
|
-
description?: infer D;
|
|
53
|
-
run: (a: any, c: Context) => infer R;
|
|
54
|
-
}) ? {
|
|
55
|
-
input?: SafeInput<I>;
|
|
56
|
-
description?: D extends string ? D : string | undefined;
|
|
57
|
-
run: undefined | ((a: any) => R);
|
|
58
|
-
} : never;
|
|
59
|
-
type WrappedBlock<Context, Defs> = {
|
|
60
|
-
[K in keyof Defs]: WrappedDef<Context, Defs[K]>;
|
|
25
|
+
run: (args: JSONBObjectTypeIfDefined<TInput>, context: Context) => MaybePromise<Return>;
|
|
61
26
|
};
|
|
62
|
-
export declare
|
|
27
|
+
export declare function defineFunction<TInput extends Record<string, JSONB.FieldType> | undefined = undefined, S = void, SUser extends SessionUser = SessionUser, Return = unknown>(args: DefineFunctionArgs<TInput, UnrestrictedFunctionContext<S, SUser>, Return> & {
|
|
28
|
+
unrestrictedDbAccess: true;
|
|
29
|
+
}): typeof args;
|
|
30
|
+
export declare function defineFunction<TInput extends Record<string, JSONB.FieldType> | undefined = undefined, S = void, SUser extends SessionUser = SessionUser, Return = unknown>(args: DefineFunctionArgs<TInput, RestrictedFunctionContext<S, SUser>, Return> & {
|
|
31
|
+
unrestrictedDbAccess?: undefined;
|
|
32
|
+
}): typeof args;
|
|
33
|
+
type UsersTableRow<S> = S extends DBSchema ? S extends {
|
|
34
|
+
users: {
|
|
35
|
+
columns: infer UserRow extends AnyObject;
|
|
36
|
+
};
|
|
37
|
+
} ? UserRow : AnyObject : AnyObject;
|
|
38
|
+
type ValidDbSchema<S> = S extends DBSchema ? S : void;
|
|
39
|
+
export type ServerFunctionDefinitions<S = void> = Record<string, {
|
|
40
|
+
userFilter: FullFilter<UsersTableRow<S>, ValidDbSchema<S>>;
|
|
41
|
+
functions: Record<string, ServerFunctionDefinition>;
|
|
42
|
+
}>;
|
|
63
43
|
export {};
|
|
64
44
|
//# sourceMappingURL=defineServerFunction.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"defineServerFunction.d.ts","sourceRoot":"","sources":["../../lib/PublishParser/defineServerFunction.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"defineServerFunction.d.ts","sourceRoot":"","sources":["../../lib/PublishParser/defineServerFunction.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,34 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
/**
|
|
8
|
-
* undefined if not allowed
|
|
9
|
-
*/
|
|
10
|
-
context) => {
|
|
11
|
-
return (args) => ({
|
|
12
|
-
...args,
|
|
13
|
-
run: context === undefined ? undefined : ((validatedArgs) => {
|
|
14
|
-
// eslint-disable-next-line @typescript-eslint/no-unsafe-argument
|
|
15
|
-
return args.run(validatedArgs, context);
|
|
16
|
-
}),
|
|
17
|
-
});
|
|
18
|
-
};
|
|
19
|
-
exports.createServerFunctionWithContext = createServerFunctionWithContext;
|
|
20
|
-
const createServerFunctionBlockWithContext = (context) => {
|
|
21
|
-
return (defs) => {
|
|
22
|
-
const wrapped = {};
|
|
23
|
-
for (const key in defs) {
|
|
24
|
-
const def = defs[key];
|
|
25
|
-
wrapped[key] = {
|
|
26
|
-
...def,
|
|
27
|
-
run: context === undefined ? undefined : (args) => def.run(args, context),
|
|
28
|
-
};
|
|
29
|
-
}
|
|
30
|
-
return wrapped;
|
|
31
|
-
};
|
|
32
|
-
};
|
|
33
|
-
exports.createServerFunctionBlockWithContext = createServerFunctionBlockWithContext;
|
|
3
|
+
exports.defineFunction = defineFunction;
|
|
4
|
+
function defineFunction(args) {
|
|
5
|
+
return args;
|
|
6
|
+
}
|
|
34
7
|
//# sourceMappingURL=defineServerFunction.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"defineServerFunction.js","sourceRoot":"","sources":["../../lib/PublishParser/defineServerFunction.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"defineServerFunction.js","sourceRoot":"","sources":["../../lib/PublishParser/defineServerFunction.ts"],"names":[],"mappings":";;AA+EA,wCAEC;AAFD,SAAgB,cAAc,CAAC,IAAa;IAC1C,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -2,17 +2,26 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const node_test_1 = require("node:test");
|
|
4
4
|
const defineServerFunction_1 = require("./defineServerFunction");
|
|
5
|
-
void (0, node_test_1.describe)("
|
|
5
|
+
void (0, node_test_1.describe)("defineFunction type test", async () => {
|
|
6
6
|
await (0, node_test_1.test)("Type test", () => {
|
|
7
|
-
(0, defineServerFunction_1.
|
|
7
|
+
(0, defineServerFunction_1.defineFunction)({
|
|
8
8
|
input: { a: "number", b: "string" },
|
|
9
|
-
run: (args) => {
|
|
9
|
+
run: (args, context) => {
|
|
10
10
|
args.a + 5;
|
|
11
|
+
context.user.id;
|
|
12
|
+
//@ts-expect-error raw database access is denied by default
|
|
13
|
+
context.db.any("select 1");
|
|
11
14
|
//@ts-expect-error
|
|
12
15
|
if (args.zz) {
|
|
13
16
|
}
|
|
14
17
|
},
|
|
15
18
|
});
|
|
19
|
+
(0, defineServerFunction_1.defineFunction)({
|
|
20
|
+
unrestrictedDbAccess: true,
|
|
21
|
+
run: (_args, context) => context.db.any("select 1"),
|
|
22
|
+
});
|
|
23
|
+
//@ts-expect-error run is required
|
|
24
|
+
(0, defineServerFunction_1.defineFunction)({ description: "invalid" });
|
|
16
25
|
});
|
|
17
26
|
});
|
|
18
27
|
//# sourceMappingURL=defineServerFunction.spec.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"defineServerFunction.spec.js","sourceRoot":"","sources":["../../lib/PublishParser/defineServerFunction.spec.ts"],"names":[],"mappings":";;AAAA,yCAA2C;AAC3C,
|
|
1
|
+
{"version":3,"file":"defineServerFunction.spec.js","sourceRoot":"","sources":["../../lib/PublishParser/defineServerFunction.spec.ts"],"names":[],"mappings":";;AAAA,yCAA2C;AAC3C,iEAAwD;AAExD,KAAK,IAAA,oBAAQ,EAAC,0BAA0B,EAAE,KAAK,IAAI,EAAE;IACnD,MAAM,IAAA,gBAAI,EAAC,WAAW,EAAE,GAAG,EAAE;QAC3B,IAAA,qCAAc,EAAC;YACb,KAAK,EAAE,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE;YACnC,GAAG,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE;gBACrB,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;gBACX,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;gBAEhB,2DAA2D;gBAC3D,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;gBAE3B,kBAAkB;gBAClB,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC;gBACd,CAAC;YACH,CAAC;SACF,CAAC,CAAC;QAEH,IAAA,qCAAc,EAAC;YACb,oBAAoB,EAAE,IAAI;YAC1B,GAAG,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC;SACpD,CAAC,CAAC;QAEH,kCAAkC;QAClC,IAAA,qCAAc,EAAC,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runClientRequest.d.ts","sourceRoot":"","sources":["../lib/runClientRequest.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAA0B,MAAM,iBAAiB,CAAC;AAC1E,OAAO,EAML,KAAK,SAAS,EACf,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAK1D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,sCAAsC,CAAC;AA8B5E,KAAK,IAAI,GAAG;IACV,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,OAAO,CAAC;CACjB,CAAC;AAUF,eAAO,MAAM,gBAAgB,GAC3B,MAAM,SAAS,EACf,kBAAkB,IAAI,EACtB,WAAW,iBAAiB,EAC5B,OAAO,eAAe,GAAG,SAAS,8BAgInC,CAAC;AAEF,eAAO,MAAM,sBAAsB,GACjC,MAAM,SAAS,EACf,WAAW,iBAAiB;;;;;;;;EAa7B,CAAC;AAEF,eAAO,MAAM,mBAAmB,GAC9B,MAAM,SAAS,EACf,iBAAiB,UAAU,EAC3B,WAAW,iBAAiB,iBAqB7B,CAAC;AAEF,KAAK,UAAU,GAAG;IAChB,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB,CAAC;AACF,eAAO,MAAM,eAAe,GAC1B,MAAM,SAAS,EACf,iBAAiB,UAAU,EAC3B,WAAW,iBAAiB,
|
|
1
|
+
{"version":3,"file":"runClientRequest.d.ts","sourceRoot":"","sources":["../lib/runClientRequest.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAA0B,MAAM,iBAAiB,CAAC;AAC1E,OAAO,EAML,KAAK,SAAS,EACf,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAK1D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,sCAAsC,CAAC;AA8B5E,KAAK,IAAI,GAAG;IACV,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,OAAO,CAAC;CACjB,CAAC;AAUF,eAAO,MAAM,gBAAgB,GAC3B,MAAM,SAAS,EACf,kBAAkB,IAAI,EACtB,WAAW,iBAAiB,EAC5B,OAAO,eAAe,GAAG,SAAS,8BAgInC,CAAC;AAEF,eAAO,MAAM,sBAAsB,GACjC,MAAM,SAAS,EACf,WAAW,iBAAiB;;;;;;;;EAa7B,CAAC;AAEF,eAAO,MAAM,mBAAmB,GAC9B,MAAM,SAAS,EACf,iBAAiB,UAAU,EAC3B,WAAW,iBAAiB,iBAqB7B,CAAC;AAEF,KAAK,UAAU,GAAG;IAChB,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB,CAAC;AACF,eAAO,MAAM,eAAe,GAC1B,MAAM,SAAS,EACf,iBAAiB,UAAU,EAC3B,WAAW,iBAAiB,qBAwC7B,CAAC"}
|
package/dist/runClientRequest.js
CHANGED
|
@@ -167,7 +167,8 @@ const runClientMethod = async function (unvalidatedArgs, clientReq) {
|
|
|
167
167
|
const message = error.startsWith(" ") ? "input" + error : error;
|
|
168
168
|
throw message;
|
|
169
169
|
}
|
|
170
|
-
|
|
170
|
+
/** Allowed functions are wrapped with their request context by PublishParser. */
|
|
171
|
+
const res = await functionDefinition.run(input, undefined);
|
|
171
172
|
return res;
|
|
172
173
|
};
|
|
173
174
|
exports.runClientMethod = runClientMethod;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runClientRequest.js","sourceRoot":"","sources":["../lib/runClientRequest.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"runClientRequest.js","sourceRoot":"","sources":["../lib/runClientRequest.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { getJSONBTSTypes,
|
|
1
|
+
import { getJSONBTSTypes, type JSONB } from "prostgles-types";
|
|
2
2
|
import type { TableSchema } from "../DboBuilder/DboBuilder";
|
|
3
3
|
import type { ProstglesInitOptions } from "../ProstglesTypes";
|
|
4
4
|
import { getServerFunctionReturnTypes } from "./getServerFunctionReturnTypes";
|
|
@@ -6,7 +6,7 @@ import { getServerFunctionReturnTypes } from "./getServerFunctionReturnTypes";
|
|
|
6
6
|
export const getFunctionsTypescriptSchema = (
|
|
7
7
|
{ tsGeneratedTypesFunctionsPath }: Pick<ProstglesInitOptions, "tsGeneratedTypesFunctionsPath">,
|
|
8
8
|
tablesOrViews: TableSchema[],
|
|
9
|
-
resolvedFunctions:
|
|
9
|
+
resolvedFunctions: Map<
|
|
10
10
|
string,
|
|
11
11
|
{
|
|
12
12
|
input?: Record<string, JSONB.FieldType>;
|
|
@@ -18,7 +18,7 @@ export const getFunctionsTypescriptSchema = (
|
|
|
18
18
|
!tsGeneratedTypesFunctionsPath ? undefined : (
|
|
19
19
|
getServerFunctionReturnTypes(tsGeneratedTypesFunctionsPath)
|
|
20
20
|
);
|
|
21
|
-
const methodDefinitions =
|
|
21
|
+
const methodDefinitions = Array.from(resolvedFunctions.entries()).map(
|
|
22
22
|
([name, functionDefinition]) => {
|
|
23
23
|
const input = functionDefinition.input;
|
|
24
24
|
const argumentTypes =
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import prostgles, { defineFunction } from "..";
|
|
2
|
+
|
|
3
|
+
type RecursiveResult = {
|
|
4
|
+
value: string;
|
|
5
|
+
next?: RecursiveResult;
|
|
6
|
+
};
|
|
7
|
+
|
|
8
|
+
type FixtureSchema = {
|
|
9
|
+
orders: {
|
|
10
|
+
columns: { id: string };
|
|
11
|
+
};
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
void prostgles<FixtureSchema>({
|
|
15
|
+
dbConnection: "",
|
|
16
|
+
onReady: () => {},
|
|
17
|
+
functions: {
|
|
18
|
+
public: {
|
|
19
|
+
userFilter: { type: "public" },
|
|
20
|
+
functions: {
|
|
21
|
+
recursiveResult: defineFunction({
|
|
22
|
+
run: (): RecursiveResult => ({ value: "ok" }),
|
|
23
|
+
}),
|
|
24
|
+
scalarResult: defineFunction({
|
|
25
|
+
run: (_args, { dbo }) => {
|
|
26
|
+
void dbo.orders!.find!();
|
|
27
|
+
return 42;
|
|
28
|
+
},
|
|
29
|
+
}),
|
|
30
|
+
},
|
|
31
|
+
},
|
|
32
|
+
},
|
|
33
|
+
});
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import assert from "node:assert";
|
|
2
|
+
import { resolve } from "node:path";
|
|
3
|
+
import { describe, test } from "node:test";
|
|
4
|
+
import { getServerFunctionReturnTypes } from "./getServerFunctionReturnTypes";
|
|
5
|
+
import type {} from "./getServerFunctionReturnTypes.fixture";
|
|
6
|
+
|
|
7
|
+
void describe("getServerFunctionReturnTypes", async () => {
|
|
8
|
+
await test("reads grouped functions and stops at recursive types", () => {
|
|
9
|
+
const fixturePath = resolve(
|
|
10
|
+
__dirname,
|
|
11
|
+
"../../lib/DBSchemaBuilder/getServerFunctionReturnTypes.fixture.ts",
|
|
12
|
+
);
|
|
13
|
+
const result = getServerFunctionReturnTypes(fixturePath);
|
|
14
|
+
|
|
15
|
+
assert.equal(result.get("scalarResult"), "number");
|
|
16
|
+
assert.equal(result.get("recursiveResult"), "{ value: string; next?: unknown }");
|
|
17
|
+
});
|
|
18
|
+
});
|
|
@@ -45,34 +45,37 @@ export const getServerFunctionReturnTypes = (instancePath: string): Map<string,
|
|
|
45
45
|
|
|
46
46
|
if (!recordType) return;
|
|
47
47
|
|
|
48
|
-
for (const
|
|
49
|
-
const
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
const
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
finalRunReturnType
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
48
|
+
for (const groupProp of checker.getPropertiesOfType(recordType)) {
|
|
49
|
+
const groupType = getSymbolType(groupProp);
|
|
50
|
+
const functionsProp = checker.getPropertyOfType(groupType, "functions");
|
|
51
|
+
if (!functionsProp) continue;
|
|
52
|
+
|
|
53
|
+
const functionsType = checker.getApparentType(getSymbolType(functionsProp));
|
|
54
|
+
for (const prop of checker.getPropertiesOfType(functionsType)) {
|
|
55
|
+
const runReturnType = getRunReturnType(getSymbolType(prop));
|
|
56
|
+
|
|
57
|
+
/** Peel away any wrapping helper functions */
|
|
58
|
+
let finalRunReturnType = runReturnType;
|
|
59
|
+
while (
|
|
60
|
+
finalRunReturnType &&
|
|
61
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
|
62
|
+
finalRunReturnType.symbol?.valueDeclaration &&
|
|
63
|
+
ts.isFunctionLike(finalRunReturnType.symbol.valueDeclaration)
|
|
64
|
+
) {
|
|
65
|
+
finalRunReturnType = unwrapMaybePromise(
|
|
66
|
+
checker.getReturnTypeOfSignature(finalRunReturnType.getCallSignatures()[0]!),
|
|
67
|
+
);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
if (finalRunReturnType) {
|
|
71
|
+
const resolvedReturnType = resolveTypeToStructure(
|
|
72
|
+
globalBuiltins,
|
|
73
|
+
prop.getName(),
|
|
74
|
+
checker,
|
|
75
|
+
finalRunReturnType,
|
|
76
|
+
);
|
|
77
|
+
result.set(prop.getName(), resolvedReturnType);
|
|
78
|
+
}
|
|
76
79
|
}
|
|
77
80
|
}
|
|
78
81
|
}
|
|
@@ -97,6 +100,13 @@ export const getServerFunctionReturnTypes = (instancePath: string): Map<string,
|
|
|
97
100
|
return checker.getApparentType(t);
|
|
98
101
|
}
|
|
99
102
|
|
|
103
|
+
function getSymbolType(symbol: ts.Symbol) {
|
|
104
|
+
const declaration = symbol.valueDeclaration ?? symbol.declarations?.[0];
|
|
105
|
+
return declaration ?
|
|
106
|
+
checker.getTypeOfSymbolAtLocation(symbol, declaration)
|
|
107
|
+
: checker.getTypeOfSymbol(symbol);
|
|
108
|
+
}
|
|
109
|
+
|
|
100
110
|
/** Extract `run` return type from ServerFunctionDefinition */
|
|
101
111
|
function getRunReturnType(fnDefType: ts.Type) {
|
|
102
112
|
const runSymbol = checker.getPropertyOfType(fnDefType, "run");
|
|
@@ -43,20 +43,25 @@ export const resolveTypeToStructure = (
|
|
|
43
43
|
return type.intrinsicName === "true" ? "true" : "false";
|
|
44
44
|
}
|
|
45
45
|
|
|
46
|
+
/** Recursive output types cannot be represented in the generated inline schema. */
|
|
47
|
+
if (parentTypes.includes(type)) return "unknown";
|
|
48
|
+
|
|
46
49
|
// Handle union types
|
|
47
50
|
if (type.isUnion()) {
|
|
48
51
|
const parts = type.types.map((t) =>
|
|
49
|
-
resolveTypeToStructure(globalBuiltIns, functionName, checker, t,
|
|
52
|
+
resolveTypeToStructure(globalBuiltIns, functionName, checker, t, nextParentTypes),
|
|
50
53
|
);
|
|
51
54
|
// Deduplicate
|
|
52
55
|
const unique = [...new Set(parts)];
|
|
56
|
+
if (unique.includes("unknown")) return "unknown";
|
|
57
|
+
if (unique.includes("any")) return "any";
|
|
53
58
|
return unique.length === 1 ? unique[0]! : `(${unique.join(" | ")})`;
|
|
54
59
|
}
|
|
55
60
|
|
|
56
61
|
// Handle intersection types
|
|
57
62
|
if (type.isIntersection()) {
|
|
58
63
|
const parts = type.types.map((t) =>
|
|
59
|
-
resolveTypeToStructure(globalBuiltIns, functionName, checker, t,
|
|
64
|
+
resolveTypeToStructure(globalBuiltIns, functionName, checker, t, nextParentTypes),
|
|
60
65
|
);
|
|
61
66
|
return `(${parts.join(" & ")})`;
|
|
62
67
|
}
|
|
@@ -97,7 +102,7 @@ export const resolveTypeToStructure = (
|
|
|
97
102
|
const typeArgs = checker.getTypeArguments(type as ts.TypeReference);
|
|
98
103
|
if (typeArgs.length > 0) {
|
|
99
104
|
const resolvedArgs = typeArgs.map((t) =>
|
|
100
|
-
resolveTypeToStructure(globalBuiltIns, functionName, checker, t,
|
|
105
|
+
resolveTypeToStructure(globalBuiltIns, functionName, checker, t, nextParentTypes),
|
|
101
106
|
);
|
|
102
107
|
return `${typeName}<${resolvedArgs.join(", ")}>`;
|
|
103
108
|
}
|
|
@@ -158,7 +163,7 @@ export const resolveTypeToStructure = (
|
|
|
158
163
|
functionName,
|
|
159
164
|
checker,
|
|
160
165
|
propType,
|
|
161
|
-
|
|
166
|
+
nextParentTypes,
|
|
162
167
|
);
|
|
163
168
|
const isOptional = prop.flags & ts.SymbolFlags.Optional;
|
|
164
169
|
const propName = prop.getName();
|
|
@@ -260,13 +260,20 @@ export class DboBuilder {
|
|
|
260
260
|
}
|
|
261
261
|
|
|
262
262
|
const { functions } = this.prostgles.opts;
|
|
263
|
-
|
|
263
|
+
const resolvedFunctions = new Map<string, ServerFunctionDefinition>();
|
|
264
264
|
if (functions) {
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
265
|
+
for (const group of Object.values(functions)) {
|
|
266
|
+
for (const [name, definition] of Object.entries(group.functions)) {
|
|
267
|
+
if (typeof definition.run !== "function") {
|
|
268
|
+
throw new Error(`Function ${JSON.stringify(name)} must define run`);
|
|
269
|
+
}
|
|
270
|
+
if (resolvedFunctions.has(name)) {
|
|
271
|
+
throw new Error(
|
|
272
|
+
`Function ${JSON.stringify(name)} is already defined. Function names must be unique across all groups`,
|
|
273
|
+
);
|
|
274
|
+
}
|
|
275
|
+
resolvedFunctions.set(name, definition);
|
|
276
|
+
}
|
|
270
277
|
}
|
|
271
278
|
}
|
|
272
279
|
|
package/lib/ProstglesTypes.ts
CHANGED
|
@@ -6,11 +6,11 @@ import type {
|
|
|
6
6
|
SessionUser,
|
|
7
7
|
} from "./Auth/AuthTypes";
|
|
8
8
|
import type { EventTriggerTagFilter } from "./Event_Trigger_Tags";
|
|
9
|
-
import type { StorageClient } from "./StorageClient/StorageClientTypes";
|
|
10
9
|
import type { DbConnection, OnReadyCallback } from "./initProstgles";
|
|
11
10
|
import type { EventInfo } from "./Logging";
|
|
12
11
|
import type { RestApiConfig } from "./RestApi";
|
|
13
12
|
import type { OnSchemaChangeCallback } from "./SchemaWatch/SchemaWatch";
|
|
13
|
+
import type { StorageClient } from "./StorageClient/StorageClientTypes";
|
|
14
14
|
import type { PGConstraint } from "./TableConfig/fetchTableConstraints";
|
|
15
15
|
import type { TableConfig } from "./TableConfig/TableConfigTypes";
|
|
16
16
|
import type { TableHooks } from "./TableHooks/TableHooks";
|
|
@@ -181,7 +181,7 @@ export type ProstglesInitOptions<S = void, SUser extends SessionUser = SessionUs
|
|
|
181
181
|
/**
|
|
182
182
|
* Server-side functions that can be invoked by the client
|
|
183
183
|
*/
|
|
184
|
-
functions?: ServerFunctionDefinitions<S
|
|
184
|
+
functions?: ServerFunctionDefinitions<S>;
|
|
185
185
|
|
|
186
186
|
/**
|
|
187
187
|
* If true then will test all table methods on each socket connect.
|
|
@@ -67,15 +67,55 @@ export class PublishParser {
|
|
|
67
67
|
|
|
68
68
|
async getAllowedFunctions(clientReq: AuthClientRequest, userData: AuthResultWithSID | undefined) {
|
|
69
69
|
const publishParams = await this.getPublishParams(clientReq, userData);
|
|
70
|
-
const
|
|
71
|
-
if (!
|
|
70
|
+
const functionGroups = this.prostgles.opts.functions;
|
|
71
|
+
if (!functionGroups || !publishParams.user) {
|
|
72
72
|
return;
|
|
73
73
|
}
|
|
74
|
-
const
|
|
74
|
+
const user = publishParams.user;
|
|
75
|
+
const users = publishParams.dbo.users;
|
|
76
|
+
if (!users?.findOne) return;
|
|
77
|
+
const userId = user.id;
|
|
78
|
+
if (!userId || typeof userId !== "string") {
|
|
79
|
+
throw "User ID is missing or invalid";
|
|
80
|
+
}
|
|
81
|
+
const allowedFunctionsMap = new Map<string, ServerFunctionDefinition>();
|
|
82
|
+
|
|
83
|
+
for (const group of Object.values(functionGroups)) {
|
|
84
|
+
const matchingUser = await users.findOne({
|
|
85
|
+
$and: [group.userFilter, { id: userId }],
|
|
86
|
+
});
|
|
87
|
+
if (!matchingUser) continue;
|
|
75
88
|
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
89
|
+
for (const [name, method] of Object.entries(group.functions)) {
|
|
90
|
+
const existingMethod = allowedFunctionsMap.get(name);
|
|
91
|
+
if (existingMethod) {
|
|
92
|
+
throw `Duplicate function name detected: ${name}. Function names must be unique across all groups.`;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
const runWithContext = async (args: Record<string, unknown> | undefined) => {
|
|
96
|
+
const ctx = await (async () => {
|
|
97
|
+
if (method.unrestrictedDbAccess) {
|
|
98
|
+
return {
|
|
99
|
+
...publishParams,
|
|
100
|
+
db: publishParams.dbo,
|
|
101
|
+
_db: publishParams.db,
|
|
102
|
+
user,
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
const { clientDb, clientSql } = await publishParams.getClientDBHandlers(undefined);
|
|
106
|
+
const { db: _db, ...safeParams } = publishParams;
|
|
107
|
+
return {
|
|
108
|
+
...safeParams,
|
|
109
|
+
db: clientDb,
|
|
110
|
+
dbo: clientDb,
|
|
111
|
+
sql: clientSql,
|
|
112
|
+
user,
|
|
113
|
+
};
|
|
114
|
+
})();
|
|
115
|
+
|
|
116
|
+
return method.run(args, ctx);
|
|
117
|
+
};
|
|
118
|
+
allowedFunctionsMap.set(name, { ...method, run: runWithContext });
|
|
79
119
|
}
|
|
80
120
|
}
|
|
81
121
|
return allowedFunctionsMap;
|
|
@@ -1,17 +1,29 @@
|
|
|
1
1
|
import { describe, test } from "node:test";
|
|
2
|
-
import {
|
|
2
|
+
import { defineFunction } from "./defineServerFunction";
|
|
3
3
|
|
|
4
|
-
void describe("
|
|
4
|
+
void describe("defineFunction type test", async () => {
|
|
5
5
|
await test("Type test", () => {
|
|
6
|
-
|
|
6
|
+
defineFunction({
|
|
7
7
|
input: { a: "number", b: "string" },
|
|
8
|
-
run: (args) => {
|
|
8
|
+
run: (args, context) => {
|
|
9
9
|
args.a + 5;
|
|
10
|
+
context.user.id;
|
|
11
|
+
|
|
12
|
+
//@ts-expect-error raw database access is denied by default
|
|
13
|
+
context.db.any("select 1");
|
|
10
14
|
|
|
11
15
|
//@ts-expect-error
|
|
12
16
|
if (args.zz) {
|
|
13
17
|
}
|
|
14
18
|
},
|
|
15
19
|
});
|
|
20
|
+
|
|
21
|
+
defineFunction({
|
|
22
|
+
unrestrictedDbAccess: true,
|
|
23
|
+
run: (_args, context) => context.db.any("select 1"),
|
|
24
|
+
});
|
|
25
|
+
|
|
26
|
+
//@ts-expect-error run is required
|
|
27
|
+
defineFunction({ description: "invalid" });
|
|
16
28
|
});
|
|
17
29
|
});
|