diff --git a/.changeset/sixty-knives-thank.md b/.changeset/sixty-knives-thank.md new file mode 100644 index 00000000..9284fd4b --- /dev/null +++ b/.changeset/sixty-knives-thank.md @@ -0,0 +1,5 @@ +--- +'@powersync/service-sync-rules': patch +--- + +Export SQL functions for sync streams. diff --git a/packages/sync-rules/src/index.ts b/packages/sync-rules/src/index.ts index f3cf5af0..d3555f0f 100644 --- a/packages/sync-rules/src/index.ts +++ b/packages/sync-rules/src/index.ts @@ -19,6 +19,7 @@ export * from './SqlParameterQuery.js'; export * from './SqlSyncRules.js'; export * from './StaticSchema.js'; export { SyncStream } from './streams/stream.js'; +export { STREAM_FUNCTIONS } from './streams/functions.js'; export { syncStreamFromSql } from './streams/from_sql.js'; export * from './TablePattern.js'; export * from './types.js'; diff --git a/packages/sync-rules/src/request_functions.ts b/packages/sync-rules/src/request_functions.ts index e9f23cb4..c77ff9a6 100644 --- a/packages/sync-rules/src/request_functions.ts +++ b/packages/sync-rules/src/request_functions.ts @@ -107,25 +107,27 @@ export const request_jwt: SqlParameterFunction = { usesUnauthenticatedRequestParameters: false }; -export const request_user_id: SqlParameterFunction = { - debugName: 'request.user_id', - parameterCount: 0, - call(parameters: ParameterValueSet) { - return parameters.userId; - }, - getReturnType() { - return ExpressionType.TEXT; - }, - detail: 'Authenticated user id', - documentation: "The id of the authenticated user.\nSame as `request.jwt() ->> 'sub'`.", - usesAuthenticatedRequestParameters: true, - usesUnauthenticatedRequestParameters: false -}; +export function generateUserIdFunction(debugName: string, sameAsDesc: string): SqlParameterFunction { + return { + debugName, + parameterCount: 0, + call(parameters: ParameterValueSet) { + return parameters.userId; + }, + getReturnType() { + return ExpressionType.TEXT; + }, + detail: 'Authenticated user id', + documentation: `The id of the authenticated user.\nSame as \`${sameAsDesc} ->> 'sub'\`.`, + usesAuthenticatedRequestParameters: true, + usesUnauthenticatedRequestParameters: false + }; +} const REQUEST_FUNCTIONS_NAMED = { ...globalRequestParameterFunctions('request'), jwt: request_jwt, - user_id: request_user_id + user_id: generateUserIdFunction('request.user_id', 'request.jwt()') }; export const REQUEST_FUNCTIONS: Record = REQUEST_FUNCTIONS_NAMED; diff --git a/packages/sync-rules/src/sql_functions.ts b/packages/sync-rules/src/sql_functions.ts index afebbf64..60692edb 100644 --- a/packages/sync-rules/src/sql_functions.ts +++ b/packages/sync-rules/src/sql_functions.ts @@ -514,7 +514,7 @@ export function generateSqlFunctions(compatibility: CompatibilityContext) { SqlFunction['call'] >; - const namedRecord: Record = named; + const namedRecord: Record = named; return { named: namedRecord, diff --git a/packages/sync-rules/src/streams/functions.ts b/packages/sync-rules/src/streams/functions.ts index cd6c2bb2..cc81dc1d 100644 --- a/packages/sync-rules/src/streams/functions.ts +++ b/packages/sync-rules/src/streams/functions.ts @@ -1,7 +1,7 @@ import { + generateUserIdFunction, globalRequestParameterFunctions, parameterFunctions, - request_user_id, SqlParameterFunction } from '../request_functions.js'; import { ParameterValueSet } from '../types.js'; @@ -27,7 +27,7 @@ export const STREAM_FUNCTIONS: Record