mirror of
https://github.com/windmill-labs/windmill.git
synced 2026-08-25 16:02:11 +00:00
separate sqlUtils.ts
This commit is contained in:
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
|
||||
Vendored
-11
@@ -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;
|
||||
@@ -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;
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
|
||||
@@ -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}
|
||||
|
||||
Vendored
+9
@@ -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;
|
||||
@@ -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;
|
||||
}
|
||||
Reference in New Issue
Block a user