separate sqlUtils.ts

This commit is contained in:
Diego Imbert
2025-11-26 12:53:34 +01:00
parent 24bfa4185a
commit fe5c8908d1
8 changed files with 73 additions and 52 deletions
+1
View File
@@ -11,6 +11,7 @@ sed -i 's/get \[Symbol\.toStringTag\]() {/get \[Symbol\.toStringTag\]() : string
cp "${script_dirpath}/client.ts" "${script_dirpath}/src/"
cp "${script_dirpath}/s3Types.ts" "${script_dirpath}/src/"
cp "${script_dirpath}/sqlUtils.ts" "${script_dirpath}/src/"
echo "" >> "${script_dirpath}/src/index.ts"
echo 'export type { S3Object, DenoS3LightClientSettings } from "./s3Types";' >> "${script_dirpath}/src/index.ts"
echo "" >> "${script_dirpath}/src/index.ts"
+1
View File
@@ -36,6 +36,7 @@ fi
cp "${script_dirpath}/client.ts" "${script_dirpath}/src/"
cp "${script_dirpath}/s3Types.ts" "${script_dirpath}/src/"
cp "${script_dirpath}/sqlUtils.ts" "${script_dirpath}/src/"
echo "" >> "${script_dirpath}/src/index.ts"
echo 'export type { S3Object, DenoS3LightClientSettings } from "./s3Types";' >> "${script_dirpath}/src/index.ts"
echo "" >> "${script_dirpath}/src/index.ts"
-11
View File
@@ -158,14 +158,3 @@ export declare function uint8ArrayToBase64(arrayBuffer: Uint8Array): string;
* @returns email address
*/
export declare function usernameToEmail(username: string): Promise<string>;
export type DataTableStatement = {
query(): Promise<any>;
};
export type DataTableSqlTemplateFunction = (
strings: TemplateStringsArray,
...values: any[]
) => DataTableStatement;
export declare function datatable(name: string): DataTableSqlTemplateFunction;
+2 -40
View File
@@ -17,6 +17,8 @@ import {
type S3Object,
} from "./s3Types";
export { datatable } from "./sqlUtils";
export {
AdminService,
AuditService,
@@ -1224,46 +1226,6 @@ export async function requestInteractiveTeamsApproval({
});
}
export type DataTableStatement = {
query(): Promise<any>;
};
export type DataTableSqlTemplateFunction = (
strings: TemplateStringsArray,
...values: any[]
) => DataTableStatement;
export function datatable(name: string = "main"): DataTableSqlTemplateFunction {
return (strings, ...values) => {
let queryStr =
values.map((_, i) => `-- $${i + 1} arg${i + 1}`).join("\n") + "\n";
for (let i = 0; i < strings.length; i++) {
queryStr += strings[i];
if (i !== strings.length - 1) queryStr += `$${i + 1}`;
}
const args = {
...Object.fromEntries(values.map((v, i) => [`arg${i + 1}`, v])),
database: `datatable://${name}`,
};
return {
queryStr,
args,
query: async () => {
let result = await JobService.runScriptPreviewInline({
workspace: getWorkspace(),
requestBody: {
args,
content: queryStr,
language: "postgresql",
},
});
return result;
},
};
};
}
async function getMockedApi(): Promise<MockedApi | undefined> {
if (mockedApi) {
return mockedApi;
+1 -1
View File
@@ -3,7 +3,7 @@
"version": "1.582.2",
"exports": "./src/index.ts",
"publish": {
"exclude": ["!src", "./s3Types.ts", "./client.ts"]
"exclude": ["!src", "./s3Types.ts", "./sqlUtils.ts", "./client.ts"]
},
"license": "Apache-2.0"
}
+2
View File
@@ -9,8 +9,10 @@ rm -rf "${script_dirpath}/dist"
${script_dirpath}/build.sh
rm "${script_dirpath}/client.ts"
rm "${script_dirpath}/s3Types.ts"
rm "${script_dirpath}/sqlUtils.ts"
npm install
tsc
cp "${script_dirpath}/src/client.ts" ${script_dirpath}
cp "${script_dirpath}/src/s3Types.ts" ${script_dirpath}
cp "${script_dirpath}/src/sqlUtils.ts" ${script_dirpath}
npm publish ${args}
+9
View File
@@ -0,0 +1,9 @@
export type SqlStatement = {
query(): Promise<any>;
};
export interface SqlTemplateFunction {
(strings: TemplateStringsArray, ...values: any[]): SqlStatement;
}
export declare function datatable(name: string): SqlTemplateFunction;
+57
View File
@@ -0,0 +1,57 @@
import { getWorkspace, JobService } from "./client";
export type SqlStatement = {
queryStr: string;
args: Record<string, any>;
query(): Promise<any>;
};
export interface SqlTemplateFunction {
(strings: TemplateStringsArray, ...values: any[]): SqlStatement;
}
/**
* @example
* let sql = wmill.datatable()
* let name = 'Robin'
* let age = 21
* await sql`
* SELECT * FROM friends
* WHERE name = ${name}
* LIMIT ${age}::int
* `.query()
*/
export function datatable(name: string = "main"): SqlTemplateFunction {
let sql: SqlTemplateFunction = (
strings: TemplateStringsArray,
...values: any[]
) => {
let queryStr =
values.map((_, i) => `-- $${i + 1} arg${i + 1}`).join("\n") + "\n";
for (let i = 0; i < strings.length; i++) {
queryStr += strings[i];
if (i !== strings.length - 1) queryStr += `$${i + 1}`;
}
const args = {
...Object.fromEntries(values.map((v, i) => [`arg${i + 1}`, v])),
database: `datatable://${name}`,
};
return {
queryStr,
args,
query: async () => {
let result = await JobService.runScriptPreviewInline({
workspace: getWorkspace(),
requestBody: {
args,
content: queryStr,
language: "postgresql",
},
});
return result;
},
} satisfies SqlStatement;
};
return sql;
}