Skip to content

Commit 17aae6d

Browse files
authored
Sync rules: Export stream SQL functions (#358)
* Sync rules: Export stream SQL functions * Also patch description
1 parent f400b0f commit 17aae6d

File tree

5 files changed

+26
-18
lines changed

5 files changed

+26
-18
lines changed

.changeset/sixty-knives-thank.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@powersync/service-sync-rules': patch
3+
---
4+
5+
Export SQL functions for sync streams.

packages/sync-rules/src/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ export * from './SqlParameterQuery.js';
1919
export * from './SqlSyncRules.js';
2020
export * from './StaticSchema.js';
2121
export { SyncStream } from './streams/stream.js';
22+
export { STREAM_FUNCTIONS } from './streams/functions.js';
2223
export { syncStreamFromSql } from './streams/from_sql.js';
2324
export * from './TablePattern.js';
2425
export * from './types.js';

packages/sync-rules/src/request_functions.ts

Lines changed: 17 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -107,25 +107,27 @@ export const request_jwt: SqlParameterFunction = {
107107
usesUnauthenticatedRequestParameters: false
108108
};
109109

110-
export const request_user_id: SqlParameterFunction = {
111-
debugName: 'request.user_id',
112-
parameterCount: 0,
113-
call(parameters: ParameterValueSet) {
114-
return parameters.userId;
115-
},
116-
getReturnType() {
117-
return ExpressionType.TEXT;
118-
},
119-
detail: 'Authenticated user id',
120-
documentation: "The id of the authenticated user.\nSame as `request.jwt() ->> 'sub'`.",
121-
usesAuthenticatedRequestParameters: true,
122-
usesUnauthenticatedRequestParameters: false
123-
};
110+
export function generateUserIdFunction(debugName: string, sameAsDesc: string): SqlParameterFunction {
111+
return {
112+
debugName,
113+
parameterCount: 0,
114+
call(parameters: ParameterValueSet) {
115+
return parameters.userId;
116+
},
117+
getReturnType() {
118+
return ExpressionType.TEXT;
119+
},
120+
detail: 'Authenticated user id',
121+
documentation: `The id of the authenticated user.\nSame as \`${sameAsDesc} ->> 'sub'\`.`,
122+
usesAuthenticatedRequestParameters: true,
123+
usesUnauthenticatedRequestParameters: false
124+
};
125+
}
124126

125127
const REQUEST_FUNCTIONS_NAMED = {
126128
...globalRequestParameterFunctions('request'),
127129
jwt: request_jwt,
128-
user_id: request_user_id
130+
user_id: generateUserIdFunction('request.user_id', 'request.jwt()')
129131
};
130132

131133
export const REQUEST_FUNCTIONS: Record<string, SqlParameterFunction> = REQUEST_FUNCTIONS_NAMED;

packages/sync-rules/src/sql_functions.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -514,7 +514,7 @@ export function generateSqlFunctions(compatibility: CompatibilityContext) {
514514
SqlFunction['call']
515515
>;
516516

517-
const namedRecord: Record<string, SqlFunction> = named;
517+
const namedRecord: Record<string, DocumentedSqlFunction> = named;
518518

519519
return {
520520
named: namedRecord,

packages/sync-rules/src/streams/functions.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import {
2+
generateUserIdFunction,
23
globalRequestParameterFunctions,
34
parameterFunctions,
4-
request_user_id,
55
SqlParameterFunction
66
} from '../request_functions.js';
77
import { ParameterValueSet } from '../types.js';
@@ -27,7 +27,7 @@ export const STREAM_FUNCTIONS: Record<string, Record<string, SqlParameterFunctio
2727
...globalRequestParameterFunctions('connection')
2828
},
2929
auth: {
30-
user_id: request_user_id,
30+
user_id: generateUserIdFunction('auth.user_id', 'auth.parameters('),
3131
...parameterFunctions({
3232
schema: 'auth',
3333
extractJsonString: function (v: ParameterValueSet): string {

0 commit comments

Comments
 (0)