windmill-cli 1.607.0 → 1.610.1
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/esm/deps/jsr.io/@windmill-labs/shared-utils/{1.0.11 → 1.0.12}/lib.es.js +202 -35
- package/esm/deps.js +5 -6
- package/esm/gen/core/OpenAPI.js +1 -1
- package/esm/gen/services.gen.js +101 -0
- package/esm/src/commands/app/dev.js +182 -4
- package/esm/src/commands/app/wmillTsDev.js +40 -1
- package/esm/src/commands/script/script.js +2 -1
- package/esm/src/commands/sync/sync.js +34 -32
- package/esm/src/core/conf.js +47 -45
- package/esm/src/core/context.js +34 -22
- package/esm/src/core/specific_items.js +28 -10
- package/esm/src/main.js +1 -1
- package/esm/src/utils/resource_folders.js +3 -1
- package/package.json +1 -1
- package/types/deps/jsr.io/@windmill-labs/shared-utils/{1.0.11 → 1.0.12}/lib.es.d.ts.map +1 -1
- package/types/deps.d.ts +2 -2
- package/types/deps.d.ts.map +1 -1
- package/types/gen/services.gen.d.ts +50 -1
- package/types/gen/services.gen.d.ts.map +1 -1
- package/types/gen/types.gen.d.ts +73 -0
- package/types/gen/types.gen.d.ts.map +1 -1
- package/types/src/commands/app/dev.d.ts.map +1 -1
- package/types/src/commands/app/metadata.d.ts +1 -1
- package/types/src/commands/app/metadata.d.ts.map +1 -1
- package/types/src/commands/app/wmillTsDev.d.ts.map +1 -1
- package/types/src/commands/script/script.d.ts.map +1 -1
- package/types/src/commands/sync/sync.d.ts +5 -1
- package/types/src/commands/sync/sync.d.ts.map +1 -1
- package/types/src/core/conf.d.ts +1 -1
- package/types/src/core/conf.d.ts.map +1 -1
- package/types/src/core/context.d.ts +2 -2
- package/types/src/core/context.d.ts.map +1 -1
- package/types/src/core/specific_items.d.ts +3 -3
- package/types/src/core/specific_items.d.ts.map +1 -1
- package/types/src/main.d.ts +1 -1
- package/types/src/utils/resource_folders.d.ts.map +1 -1
- package/types/windmill-utils-internal/src/gen/types.gen.d.ts +73 -0
- package/types/windmill-utils-internal/src/gen/types.gen.d.ts.map +1 -1
- /package/types/deps/jsr.io/@windmill-labs/shared-utils/{1.0.11 → 1.0.12}/lib.es.d.ts +0 -0
|
@@ -38,7 +38,7 @@ var __defProp = Object.defineProperty, __getOwnPropDesc = Object.getOwnPropertyD
|
|
|
38
38
|
__spread: () => __spread,
|
|
39
39
|
__spreadArrays: () => __spreadArrays,
|
|
40
40
|
__values: () => __values
|
|
41
|
-
});
|
|
41
|
+
}, 1);
|
|
42
42
|
function __extends(c, L) {
|
|
43
43
|
extendStatics(c, L);
|
|
44
44
|
function R() {
|
|
@@ -535,7 +535,7 @@ function toUtf8$1(c) {
|
|
|
535
535
|
var init_whatwgEncodingApi = __esmMin((() => { })), dist_es_exports = /* @__PURE__ */ __export({
|
|
536
536
|
fromUtf8: () => fromUtf8$3,
|
|
537
537
|
toUtf8: () => toUtf8$2
|
|
538
|
-
}), fromUtf8$3, toUtf8$2, init_dist_es = __esmMin((() => {
|
|
538
|
+
}, 1), fromUtf8$3, toUtf8$2, init_dist_es = __esmMin((() => {
|
|
539
539
|
init_pureJs(), init_whatwgEncodingApi(), fromUtf8$3 = (c) => typeof TextEncoder == "function" ? fromUtf8$2(c) : fromUtf8$1(c), toUtf8$2 = (c) => typeof TextDecoder == "function" ? toUtf8$1(c) : toUtf8(c);
|
|
540
540
|
})), require_convertToBuffer = /* @__PURE__ */ __commonJSMin(((c) => {
|
|
541
541
|
Object.defineProperty(c, "__esModule", { value: !0 }), c.convertToBuffer = void 0;
|
|
@@ -783,25 +783,135 @@ function getIntrospectionQuery(c) {
|
|
|
783
783
|
let ColumnIdentity = /* @__PURE__ */ function (c) {
|
|
784
784
|
return c.ByDefault = "By Default", c.Always = "Always", c.No = "No", c;
|
|
785
785
|
}({});
|
|
786
|
-
|
|
787
|
-
|
|
788
|
-
|
|
789
|
-
|
|
790
|
-
|
|
791
|
-
|
|
792
|
-
|
|
793
|
-
|
|
794
|
-
|
|
795
|
-
|
|
796
|
-
|
|
786
|
+
var legacyScripts = {
|
|
787
|
+
postgresql: {
|
|
788
|
+
code: "SELECT table_name, column_name, udt_name, column_default, is_nullable, table_schema FROM information_schema.columns WHERE table_schema != 'pg_catalog' AND table_schema != 'information_schema'",
|
|
789
|
+
processingFn: (c) => {
|
|
790
|
+
let L = c.reduce((c, L) => {
|
|
791
|
+
let R = L.table_schema;
|
|
792
|
+
return delete L.table_schema, c[R] = c[R] || [], (L.table_name || L.column_name) && c[R].push(L), c;
|
|
793
|
+
}, {}), R = {};
|
|
794
|
+
for (let c in L)
|
|
795
|
+
R[c] = L[c].reduce((c, L) => {
|
|
796
|
+
let R = L.table_name;
|
|
797
|
+
delete L.table_name, c[R] = c[R] || {};
|
|
798
|
+
let z = {
|
|
799
|
+
type: L.udt_name,
|
|
800
|
+
required: L.is_nullable === "NO"
|
|
801
|
+
};
|
|
802
|
+
return L.column_default && (z.default = L.column_default), c[R][L.column_name] = z, c;
|
|
803
|
+
}, {});
|
|
804
|
+
return R;
|
|
805
|
+
},
|
|
806
|
+
lang: "postgresql",
|
|
807
|
+
argName: "database"
|
|
808
|
+
},
|
|
809
|
+
mysql: {
|
|
810
|
+
code: "SELECT DATABASE() AS default_db_name, TABLE_SCHEMA, TABLE_NAME, DATA_TYPE, COLUMN_NAME, COLUMN_DEFAULT FROM information_schema.columns WHERE table_schema = DATABASE() OR table_schema NOT IN ('information_schema', 'mysql', 'performance_schema', 'sys', '_vt');",
|
|
811
|
+
processingFn: (c) => {
|
|
812
|
+
let L = c.reduce((c, L) => {
|
|
813
|
+
let R = L.TABLE_SCHEMA;
|
|
814
|
+
return delete L.TABLE_SCHEMA, c[R] = c[R] || [], c[R].push(L), c;
|
|
815
|
+
}, {}), R = {};
|
|
816
|
+
for (let c in L)
|
|
817
|
+
R[c] = L[c].reduce((c, L) => {
|
|
818
|
+
let R = L.TABLE_NAME;
|
|
819
|
+
delete L.TABLE_NAME, c[R] = c[R] || {};
|
|
820
|
+
let z = {
|
|
821
|
+
type: L.DATA_TYPE,
|
|
822
|
+
required: L.is_nullable === "NO"
|
|
823
|
+
};
|
|
824
|
+
return L.column_default && (z.default = L.COLUMN_DEFAULT), c[R][L.COLUMN_NAME] = z, c;
|
|
825
|
+
}, {});
|
|
826
|
+
return R;
|
|
827
|
+
},
|
|
828
|
+
lang: "mysql",
|
|
829
|
+
argName: "database"
|
|
830
|
+
},
|
|
831
|
+
graphql: {
|
|
832
|
+
code: getIntrospectionQuery(),
|
|
833
|
+
lang: "graphql",
|
|
834
|
+
argName: "api"
|
|
835
|
+
},
|
|
836
|
+
bigquery: {
|
|
837
|
+
code: "import { BigQuery } from '@google-cloud/bigquery@7.5.0';\nexport async function main(args: bigquery) {\nconst bq = new BigQuery({\n credentials: args\n})\nconst [datasets] = await bq.getDatasets();\nconst schema = {}\nfor (const dataset of datasets) {\n schema[dataset.id] = {}\n const query = \"SELECT table_name, ARRAY_AGG(STRUCT(if(is_nullable = 'YES', true, false) AS required, column_name AS name, data_type AS type, if(column_default = 'NULL', null, column_default) AS `default`) ORDER BY ordinal_position) AS schema FROM `{dataset.id}`.INFORMATION_SCHEMA.COLUMNS GROUP BY table_name\".replace('{dataset.id}', dataset.id)\n const [rows] = await bq.query(query)\n for (const row of rows) {\n schema[dataset.id][row.table_name] = {}\n for (const col of row.schema) {\n const colName = col.name\n delete col.name\n if (col.default === null) {\n delete col.default\n }\n schema[dataset.id][row.table_name][colName] = col\n }\n }\n}\nreturn schema\n}",
|
|
838
|
+
lang: "bun",
|
|
839
|
+
argName: "args"
|
|
840
|
+
},
|
|
841
|
+
snowflake: {
|
|
842
|
+
code: "select TABLE_SCHEMA, TABLE_NAME, DATA_TYPE, COLUMN_NAME, COLUMN_DEFAULT, IS_NULLABLE from information_schema.columns where table_schema != 'INFORMATION_SCHEMA'",
|
|
843
|
+
lang: "snowflake",
|
|
844
|
+
processingFn: (c) => {
|
|
845
|
+
let L = {};
|
|
846
|
+
for (let R of c)
|
|
847
|
+
R.TABLE_SCHEMA in L || (L[R.TABLE_SCHEMA] = {}), R.TABLE_NAME in L[R.TABLE_SCHEMA] || (L[R.TABLE_SCHEMA][R.TABLE_NAME] = {}), L[R.TABLE_SCHEMA][R.TABLE_NAME][R.COLUMN_NAME] = {
|
|
848
|
+
type: R.DATA_TYPE,
|
|
849
|
+
required: R.IS_NULLABLE === "YES"
|
|
850
|
+
}, R.COLUMN_DEFAULT !== null && (L[R.TABLE_SCHEMA][R.TABLE_NAME][R.COLUMN_NAME].default = R.COLUMN_DEFAULT);
|
|
851
|
+
return L;
|
|
852
|
+
},
|
|
853
|
+
argName: "database"
|
|
854
|
+
},
|
|
855
|
+
snowflake_oauth: {
|
|
856
|
+
code: "select TABLE_SCHEMA, TABLE_NAME, DATA_TYPE, COLUMN_NAME, COLUMN_DEFAULT, IS_NULLABLE from information_schema.columns where table_schema != 'INFORMATION_SCHEMA'",
|
|
857
|
+
lang: "snowflake",
|
|
858
|
+
processingFn: (c) => {
|
|
859
|
+
let L = {};
|
|
860
|
+
for (let R of c)
|
|
861
|
+
R.TABLE_SCHEMA in L || (L[R.TABLE_SCHEMA] = {}), R.TABLE_NAME in L[R.TABLE_SCHEMA] || (L[R.TABLE_SCHEMA][R.TABLE_NAME] = {}), L[R.TABLE_SCHEMA][R.TABLE_NAME][R.COLUMN_NAME] = {
|
|
862
|
+
type: R.DATA_TYPE,
|
|
863
|
+
required: R.IS_NULLABLE === "YES"
|
|
864
|
+
}, R.COLUMN_DEFAULT !== null && (L[R.TABLE_SCHEMA][R.TABLE_NAME][R.COLUMN_NAME].default = R.COLUMN_DEFAULT);
|
|
865
|
+
return L;
|
|
866
|
+
},
|
|
867
|
+
argName: "database"
|
|
868
|
+
},
|
|
869
|
+
mssql: {
|
|
870
|
+
argName: "database",
|
|
871
|
+
code: "select TABLE_SCHEMA, TABLE_NAME, DATA_TYPE, COLUMN_NAME, COLUMN_DEFAULT from information_schema.columns where table_schema != 'sys'",
|
|
872
|
+
lang: "mssql",
|
|
873
|
+
processingFn: (c) => {
|
|
874
|
+
if (!c || c.length === 0)
|
|
875
|
+
return {};
|
|
876
|
+
let L = c.reduce((c, L) => {
|
|
877
|
+
let R = L.TABLE_SCHEMA;
|
|
878
|
+
return delete L.TABLE_SCHEMA, c[R] = c[R] || [], c[R].push(L), c;
|
|
879
|
+
}, {}), R = {};
|
|
880
|
+
for (let c in L)
|
|
881
|
+
R[c] = L[c].reduce((c, L) => {
|
|
882
|
+
let R = L.TABLE_NAME;
|
|
883
|
+
delete L.TABLE_NAME, c[R] = c[R] || {};
|
|
884
|
+
let z = {
|
|
885
|
+
type: L.DATA_TYPE,
|
|
886
|
+
required: L.is_nullable === "NO"
|
|
887
|
+
};
|
|
888
|
+
return L.column_default && (z.default = L.COLUMN_DEFAULT), c[R][L.COLUMN_NAME] = z, c;
|
|
889
|
+
}, {});
|
|
890
|
+
return R;
|
|
797
891
|
}
|
|
798
|
-
}
|
|
892
|
+
}
|
|
893
|
+
};
|
|
894
|
+
({ ...legacyScripts }), { ...legacyScripts.postgresql };
|
|
895
|
+
function buildVisibleFieldList(c, L) {
|
|
896
|
+
return c.filter((c) => c && c.ignored !== !0).map((c) => renderDbQuotedIdentifier(c?.field, L));
|
|
897
|
+
}
|
|
898
|
+
function renderDbQuotedIdentifier(c, L) {
|
|
899
|
+
switch (L) {
|
|
900
|
+
case "postgresql": return `"${c}"`;
|
|
901
|
+
case "ms_sql_server": return `[${c}]`;
|
|
902
|
+
case "mysql": return `\`${c}\``;
|
|
903
|
+
case "snowflake": return `"${c}"`;
|
|
904
|
+
case "bigquery": return `\`${c}\``;
|
|
905
|
+
case "duckdb": return `"${c}"`;
|
|
906
|
+
default: throw Error("Unsupported database type: " + L);
|
|
907
|
+
}
|
|
799
908
|
}
|
|
800
909
|
function getLanguageByResourceType(c) {
|
|
801
910
|
return {
|
|
802
911
|
postgresql: "postgresql",
|
|
803
912
|
mysql: "mysql",
|
|
804
913
|
ms_sql_server: "mssql",
|
|
914
|
+
mssql: "mssql",
|
|
805
915
|
snowflake: "snowflake",
|
|
806
916
|
snowflake_oauth: "snowflake",
|
|
807
917
|
bigquery: "bigquery",
|
|
@@ -1008,8 +1118,8 @@ function makeInsertQuery(c, L, R) {
|
|
|
1008
1118
|
throw Error("Table name is required");
|
|
1009
1119
|
let z = L.filter((c) => !c.hideInsert && !(R == "postgresql" && c.defaultvalue?.startsWith("nextval("))), B = L.filter((c) => !shouldOmitColumnInInsert(c)), V = z.concat(B), H = buildParameters(z, R);
|
|
1010
1120
|
H += "\n";
|
|
1011
|
-
let U = B.length > 0, W = formatColumnNames(V), G = formatInsertValues(z, R), K = formatDefaultValues(B)
|
|
1012
|
-
return H += `INSERT INTO ${c} (${W}) VALUES (${
|
|
1121
|
+
let U = B.length > 0, W = formatColumnNames(V), G = formatInsertValues(z, R), K = formatDefaultValues(B), q = `${G}${U ? ", " : ""}${K}`;
|
|
1122
|
+
return q.trim() ? (H += `INSERT INTO ${c} (${W}) VALUES (${q})`, H) : `INSERT INTO ${c} DEFAULT VALUES`;
|
|
1013
1123
|
}
|
|
1014
1124
|
function getInsertInput(c, L, R) {
|
|
1015
1125
|
let z = c.type === "ducklake" ? "duckdb" : c.resourceType, B = makeInsertQuery(L, R, z);
|
|
@@ -1067,10 +1177,10 @@ function makeSnowflakeSelectQuery(c, L, R, z) {
|
|
|
1067
1177
|
CASE WHEN ? = '${c.field}' AND ? = TRUE THEN "${c.field}" END DESC`));
|
|
1068
1178
|
return U += ` ORDER BY ${q.join(",\n")}`, U += ` LIMIT ${B} OFFSET ${V}`, U = buildParameters(H, "snowflake") + "\n" + U, U;
|
|
1069
1179
|
}
|
|
1070
|
-
function makeSelectQuery(c, L, R, z, B) {
|
|
1180
|
+
function makeSelectQuery(c, L, R, z, B, V) {
|
|
1071
1181
|
if (!c)
|
|
1072
1182
|
throw Error("Table name is required");
|
|
1073
|
-
let
|
|
1183
|
+
let H = "", U = buildParameters([
|
|
1074
1184
|
{
|
|
1075
1185
|
field: "limit",
|
|
1076
1186
|
datatype: z === "bigquery" ? "integer" : "int"
|
|
@@ -1092,30 +1202,73 @@ function makeSelectQuery(c, L, R, z, B) {
|
|
|
1092
1202
|
datatype: z === "bigquery" ? "bool" : "boolean"
|
|
1093
1203
|
}
|
|
1094
1204
|
], z);
|
|
1095
|
-
|
|
1096
|
-
let
|
|
1205
|
+
U += "\n";
|
|
1206
|
+
let W = buildVisibleFieldList(L, z), G = W.join(", ");
|
|
1097
1207
|
switch (z) {
|
|
1098
1208
|
case "mysql": {
|
|
1099
1209
|
let z = L.map((c) => `
|
|
1100
1210
|
CASE WHEN :order_by = '${c.field}' AND :is_desc IS false THEN \`${c.field}\` END,
|
|
1101
1211
|
CASE WHEN :order_by = '${c.field}' AND :is_desc IS true THEN \`${c.field}\` END DESC`).join(",\n");
|
|
1102
|
-
|
|
1212
|
+
H = ` (:quicksearch = '' OR CONCAT_WS(' ', ${W.join(", ")}) LIKE CONCAT('%', :quicksearch, '%'))`, U += `SELECT ${G} FROM ${c}`, U += ` WHERE ${R ? `${R} AND` : ""} ${H}`, U += ` ORDER BY ${z}`, U += " LIMIT :limit OFFSET :offset";
|
|
1103
1213
|
break;
|
|
1104
1214
|
}
|
|
1105
1215
|
case "postgresql": {
|
|
1106
|
-
|
|
1107
|
-
|
|
1108
|
-
|
|
1109
|
-
|
|
1110
|
-
|
|
1216
|
+
function z({ field: c, is_desc: L = !1, text_cast: R = !1, check_is_number: z }) {
|
|
1217
|
+
return `(CASE WHEN${z === !0 ? ` pg_typeof("${c}")::text IN ('integer', 'bigint', 'smallint', 'numeric', 'real', 'double precision') AND` : z === !1 ? ` pg_typeof("${c}")::text NOT IN ('integer', 'bigint', 'smallint', 'numeric', 'real', 'double precision') AND` : ""} $4 = '${c}' AND $5 IS ${L} THEN "${c}"${R ? "::text" : ""} END)${L ? " DESC" : ""}`;
|
|
1218
|
+
}
|
|
1219
|
+
let B = `
|
|
1220
|
+
${L.map((c) => V?.fixPgIntTypes ? `
|
|
1221
|
+
${z({
|
|
1222
|
+
field: c.field,
|
|
1223
|
+
is_desc: !1,
|
|
1224
|
+
text_cast: !0,
|
|
1225
|
+
check_is_number: !1
|
|
1226
|
+
})},
|
|
1227
|
+
${z({
|
|
1228
|
+
field: c.field,
|
|
1229
|
+
is_desc: !1,
|
|
1230
|
+
text_cast: !1,
|
|
1231
|
+
check_is_number: !0
|
|
1232
|
+
})},
|
|
1233
|
+
${z({
|
|
1234
|
+
field: c.field,
|
|
1235
|
+
is_desc: !0,
|
|
1236
|
+
text_cast: !0,
|
|
1237
|
+
check_is_number: !1
|
|
1238
|
+
})},
|
|
1239
|
+
${z({
|
|
1240
|
+
field: c.field,
|
|
1241
|
+
is_desc: !0,
|
|
1242
|
+
text_cast: !1,
|
|
1243
|
+
check_is_number: !0
|
|
1244
|
+
})}` : `
|
|
1245
|
+
${z({
|
|
1246
|
+
field: c.field,
|
|
1247
|
+
is_desc: !1,
|
|
1248
|
+
text_cast: !0
|
|
1249
|
+
})},
|
|
1250
|
+
${z({
|
|
1251
|
+
field: c.field,
|
|
1252
|
+
is_desc: !0,
|
|
1253
|
+
text_cast: !0
|
|
1254
|
+
})}`).join(",\n")}`;
|
|
1255
|
+
H = `($3 = '' OR CONCAT(${W.join(", ")}) ILIKE '%' || $3 || '%')`, U += `SELECT ${W.map((c) => `${c}::text`).join(", ")} FROM ${c}\n`, U += ` WHERE ${R ? `${R} AND` : ""} ${H}\n`, U += ` ORDER BY ${B}\n`, U += " LIMIT $1::INT OFFSET $2::INT";
|
|
1111
1256
|
break;
|
|
1112
1257
|
}
|
|
1113
|
-
case "ms_sql_server":
|
|
1114
|
-
let z =
|
|
1258
|
+
case "ms_sql_server": {
|
|
1259
|
+
let z = [
|
|
1260
|
+
"text",
|
|
1261
|
+
"ntext",
|
|
1262
|
+
"image"
|
|
1263
|
+
], B = L.filter((c) => !z.includes(c.datatype.toLowerCase())).map((c) => `
|
|
1115
1264
|
(CASE WHEN @p4 = '${c.field}' AND @p5 = 0 THEN ${c.field} END) ASC,
|
|
1116
|
-
(CASE WHEN @p4 = '${c.field}' AND @p5 = 1 THEN ${c.field} END) DESC`).join(",\n")
|
|
1117
|
-
|
|
1265
|
+
(CASE WHEN @p4 = '${c.field}' AND @p5 = 1 THEN ${c.field} END) DESC`).join(",\n"), V = W.filter((c) => {
|
|
1266
|
+
let R = c.slice(1, -1), B = L.find((c) => c.field === R);
|
|
1267
|
+
return !z.includes(B?.datatype.toLowerCase() ?? "");
|
|
1268
|
+
}).join(", ");
|
|
1269
|
+
H = V ? ` (@p3 = '' OR CONCAT(${V}) LIKE '%' + @p3 + '%')` : " (@p3 = '')", U += `SELECT ${G} FROM ${c}`, U += ` WHERE ${R ? `${R} AND` : ""} ${H}`, U += ` ORDER BY ${B}`, U += " OFFSET @p2 ROWS FETCH NEXT @p1 ROWS ONLY";
|
|
1118
1270
|
break;
|
|
1271
|
+
}
|
|
1119
1272
|
case "snowflake": return makeSnowflakeSelectQuery(c, L, R, B);
|
|
1120
1273
|
case "bigquery": {
|
|
1121
1274
|
let z = L.map((c) => c.datatype === "JSON" || c.datatype.startsWith("STRUCT") || c.datatype.startsWith("ARRAY") || c.datatype === "GEOGRAPHY" ? `
|
|
@@ -1123,10 +1276,10 @@ CASE WHEN :order_by = '${c.field}' AND :is_desc IS true THEN \`${c.field}\` END
|
|
|
1123
1276
|
(CASE WHEN @order_by = '${c.field}' AND @is_desc = true THEN TO_JSON_STRING(${c.field}) END) DESC` : `
|
|
1124
1277
|
(CASE WHEN @order_by = '${c.field}' AND @is_desc = false THEN ${c.field} END) ASC,
|
|
1125
1278
|
(CASE WHEN @order_by = '${c.field}' AND @is_desc = true THEN ${c.field} END) DESC`).join(",\n");
|
|
1126
|
-
|
|
1279
|
+
H = ` (@quicksearch = '' OR REGEXP_CONTAINS(CONCAT(${W.map((c) => {
|
|
1127
1280
|
let R = L.find((L) => L.field === c.slice(1, -1));
|
|
1128
1281
|
return R?.datatype === "JSON" || R?.datatype.startsWith("STRUCT") || R?.datatype.startsWith("ARRAY") || R?.datatype === "GEOGRAPHY" ? `TO_JSON_STRING(${c})` : `CAST(${c} AS STRING)`;
|
|
1129
|
-
}).join(",")}), '(?i)' || @quicksearch))`,
|
|
1282
|
+
}).join(",")}), '(?i)' || @quicksearch))`, U += `SELECT ${G} FROM ${c}`, U += ` WHERE ${R ? `${R} AND` : ""} ${H}`, U += ` ORDER BY ${z}`, U += " LIMIT @limit OFFSET @offset";
|
|
1130
1283
|
break;
|
|
1131
1284
|
}
|
|
1132
1285
|
case "duckdb": {
|
|
@@ -1134,12 +1287,12 @@ CASE WHEN :order_by = '${c.field}' AND :is_desc IS true THEN \`${c.field}\` END
|
|
|
1134
1287
|
${L.map((c) => `
|
|
1135
1288
|
(CASE WHEN $order_by = '${c.field}' AND $is_desc IS false THEN "${c.field}"::text END),
|
|
1136
1289
|
(CASE WHEN $order_by = '${c.field}' AND $is_desc IS true THEN "${c.field}"::text END) DESC`).join(",\n")}`;
|
|
1137
|
-
|
|
1290
|
+
H = `($quicksearch = '' OR CONCAT(${W.join(", ")}) ILIKE '%' || $quicksearch || '%')`, U += `SELECT ${W.join(", ")} FROM ${c}\n`, U += ` WHERE ${R ? `${R} AND` : ""} ${H}\n`, U += ` ORDER BY ${z}\n`, U += " LIMIT $limit::INT OFFSET $offset::INT";
|
|
1138
1291
|
break;
|
|
1139
1292
|
}
|
|
1140
1293
|
default: throw Error("Unsupported database type");
|
|
1141
1294
|
}
|
|
1142
|
-
return
|
|
1295
|
+
return U;
|
|
1143
1296
|
}
|
|
1144
1297
|
function coerceToNumber(c) {
|
|
1145
1298
|
return typeof c == "number" ? c : typeof c == "string" ? parseInt(c, 10) : 0;
|
|
@@ -1489,6 +1642,20 @@ export declare function waitJob(id: string): Promise<Job>;
|
|
|
1489
1642
|
* @param id
|
|
1490
1643
|
*/
|
|
1491
1644
|
export declare function getJob(id: string): Promise<Job>;
|
|
1645
|
+
|
|
1646
|
+
export type StreamUpdate = {
|
|
1647
|
+
new_result_stream?: string;
|
|
1648
|
+
stream_offset?: number;
|
|
1649
|
+
};
|
|
1650
|
+
|
|
1651
|
+
/**
|
|
1652
|
+
* Stream job results using SSE. Calls onUpdate for each stream update,
|
|
1653
|
+
* and resolves with the final result when the job completes.
|
|
1654
|
+
* @param id - The job ID to stream
|
|
1655
|
+
* @param onUpdate - Optional callback for stream updates with new_result_stream data
|
|
1656
|
+
* @returns Promise that resolves with the final job result
|
|
1657
|
+
*/
|
|
1658
|
+
export declare function streamJob(id: string, onUpdate?: (data: StreamUpdate) => void): Promise<any>;
|
|
1492
1659
|
`;
|
|
1493
1660
|
}
|
|
1494
1661
|
async function updateRawAppPolicy(c, L) {
|
|
@@ -1515,7 +1682,7 @@ async function processRunnable(c, L, R) {
|
|
|
1515
1682
|
allow_user_resources: B
|
|
1516
1683
|
}];
|
|
1517
1684
|
}
|
|
1518
|
-
var rawAppWmillTs_exports = /* @__PURE__ */ __export({ default: () => rawAppWmillTs_default }), rawAppWmillTs_default = "let reqs: Record<string, any> = {}\n\nfunction doRequest(type: string, o: object) {\n
|
|
1685
|
+
var rawAppWmillTs_exports = /* @__PURE__ */ __export({ default: () => rawAppWmillTs_default }, 1), rawAppWmillTs_default = "let reqs: Record<string, any> = {}\n\nfunction doRequest(type: string, o: object) {\n return new Promise((resolve, reject) => {\n const reqId = Math.random().toString(36)\n reqs[reqId] = { resolve, reject }\n parent.postMessage({ ...o, type, reqId }, '*')\n })\n}\n\nexport const backend = new Proxy(\n {},\n {\n get(_, runnable_id: string) {\n return (v: any) => {\n return doRequest('backend', { runnable_id, v })\n }\n }\n }\n)\n\nexport const backendAsync = new Proxy(\n {},\n {\n get(_, runnable_id: string) {\n return (v: any) => {\n return doRequest('backendAsync', { runnable_id, v })\n }\n }\n }\n)\n\nexport function waitJob(jobId: string) {\n return doRequest('waitJob', { jobId })\n}\n\nexport function getJob(jobId: string) {\n return doRequest('getJob', { jobId })\n}\n\n/**\n * Stream job results using SSE. Calls onUpdate for each stream update,\n * and resolves with the final result when the job completes.\n * @param jobId - The job ID to stream\n * @param onUpdate - Callback for stream updates with new_result_stream data\n * @returns Promise that resolves with the final job result\n */\nexport function streamJob(\n jobId: string,\n onUpdate?: (data: { new_result_stream?: string; stream_offset?: number }) => void\n): Promise<any> {\n return new Promise((resolve, reject) => {\n const reqId = Math.random().toString(36)\n reqs[reqId] = { resolve, reject, onUpdate }\n parent.postMessage({ jobId, type: 'streamJob', reqId }, '*')\n })\n}\n\nwindow.addEventListener('message', (e) => {\n if (e.data.type == 'streamJobUpdate') {\n // Handle streaming update\n let job = reqs[e.data.reqId]\n if (job && job.onUpdate) {\n job.onUpdate({\n new_result_stream: e.data.new_result_stream,\n stream_offset: e.data.stream_offset\n })\n }\n } else if (e.data.type == 'streamJobRes') {\n // Handle stream completion\n let job = reqs[e.data.reqId]\n if (job) {\n if (e.data.error) {\n job.reject(new Error(e.data.result?.stack ?? e.data.result?.message ?? 'Stream error'))\n } else {\n job.resolve(e.data.result)\n }\n delete reqs[e.data.reqId]\n }\n } else if (e.data.type == 'backendRes' || e.data.type == 'backendAsyncRes') {\n console.log('Message from parent backend', e.data)\n let job = reqs[e.data.reqId]\n if (job) {\n const result = e.data.result\n if (e.data.error) {\n job.reject(new Error(result.stack ?? result.message))\n } else {\n job.resolve(result)\n }\n } else {\n console.error('No job found for', e.data.reqId)\n }\n }\n})\n";
|
|
1519
1686
|
function capitalize(c) {
|
|
1520
1687
|
return c ? c.charAt(0).toUpperCase() + c.slice(1) : "";
|
|
1521
1688
|
}
|
package/esm/deps.js
CHANGED
|
@@ -44,18 +44,17 @@ export { minimatch } from "minimatch";
|
|
|
44
44
|
export { default as JSZip } from "jszip";
|
|
45
45
|
export * as express from "express";
|
|
46
46
|
export * as http from "node:http";
|
|
47
|
-
export {
|
|
47
|
+
export { WebSocket, WebSocketServer } from "ws";
|
|
48
48
|
export * as getPort from "get-port";
|
|
49
49
|
export * as open from "open";
|
|
50
50
|
export * as esMain from "es-main";
|
|
51
|
-
export * as windmillUtils from "./deps/jsr.io/@windmill-labs/shared-utils/1.0.
|
|
51
|
+
export * as windmillUtils from "./deps/jsr.io/@windmill-labs/shared-utils/1.0.12/lib.es.js";
|
|
52
52
|
import { OpenAPI } from "./gen/index.js";
|
|
53
53
|
export function setClient(token, baseUrl) {
|
|
54
54
|
if (baseUrl === undefined) {
|
|
55
|
-
baseUrl =
|
|
56
|
-
getEnv("
|
|
57
|
-
|
|
58
|
-
"http://localhost:8000";
|
|
55
|
+
baseUrl = getEnv("BASE_INTERNAL_URL") ??
|
|
56
|
+
getEnv("BASE_URL") ??
|
|
57
|
+
"http://localhost:8000";
|
|
59
58
|
}
|
|
60
59
|
if (token === undefined) {
|
|
61
60
|
token = getEnv("WM_TOKEN") ?? "no_token";
|
package/esm/gen/core/OpenAPI.js
CHANGED
package/esm/gen/services.gen.js
CHANGED
|
@@ -1973,6 +1973,25 @@ export const editErrorHandler = (data) => {
|
|
|
1973
1973
|
mediaType: 'application/json'
|
|
1974
1974
|
});
|
|
1975
1975
|
};
|
|
1976
|
+
/**
|
|
1977
|
+
* edit success handler
|
|
1978
|
+
* @param data The data for the request.
|
|
1979
|
+
* @param data.workspace
|
|
1980
|
+
* @param data.requestBody WorkspaceSuccessHandler
|
|
1981
|
+
* @returns string status
|
|
1982
|
+
* @throws ApiError
|
|
1983
|
+
*/
|
|
1984
|
+
export const editSuccessHandler = (data) => {
|
|
1985
|
+
return __request(OpenAPI, {
|
|
1986
|
+
method: 'POST',
|
|
1987
|
+
url: '/w/{workspace}/workspaces/edit_success_handler',
|
|
1988
|
+
path: {
|
|
1989
|
+
workspace: data.workspace
|
|
1990
|
+
},
|
|
1991
|
+
body: data.requestBody,
|
|
1992
|
+
mediaType: 'application/json'
|
|
1993
|
+
});
|
|
1994
|
+
};
|
|
1976
1995
|
/**
|
|
1977
1996
|
* edit large file storage settings
|
|
1978
1997
|
* @param data The data for the request.
|
|
@@ -3456,6 +3475,88 @@ export const listResourceTypeNames = (data) => {
|
|
|
3456
3475
|
}
|
|
3457
3476
|
});
|
|
3458
3477
|
};
|
|
3478
|
+
/**
|
|
3479
|
+
* get npm package metadata from private registry
|
|
3480
|
+
* @param data The data for the request.
|
|
3481
|
+
* @param data.workspace
|
|
3482
|
+
* @param data._package npm package name
|
|
3483
|
+
* @returns unknown package metadata
|
|
3484
|
+
* @throws ApiError
|
|
3485
|
+
*/
|
|
3486
|
+
export const getNpmPackageMetadata = (data) => {
|
|
3487
|
+
return __request(OpenAPI, {
|
|
3488
|
+
method: 'GET',
|
|
3489
|
+
url: '/w/{workspace}/npm_proxy/metadata/{package}',
|
|
3490
|
+
path: {
|
|
3491
|
+
workspace: data.workspace,
|
|
3492
|
+
package: data._package
|
|
3493
|
+
}
|
|
3494
|
+
});
|
|
3495
|
+
};
|
|
3496
|
+
/**
|
|
3497
|
+
* resolve npm package version from private registry
|
|
3498
|
+
* @param data The data for the request.
|
|
3499
|
+
* @param data.workspace
|
|
3500
|
+
* @param data._package npm package name
|
|
3501
|
+
* @param data.tag version tag or reference
|
|
3502
|
+
* @returns unknown resolved version
|
|
3503
|
+
* @throws ApiError
|
|
3504
|
+
*/
|
|
3505
|
+
export const resolveNpmPackageVersion = (data) => {
|
|
3506
|
+
return __request(OpenAPI, {
|
|
3507
|
+
method: 'GET',
|
|
3508
|
+
url: '/w/{workspace}/npm_proxy/resolve/{package}',
|
|
3509
|
+
path: {
|
|
3510
|
+
workspace: data.workspace,
|
|
3511
|
+
package: data._package
|
|
3512
|
+
},
|
|
3513
|
+
query: {
|
|
3514
|
+
tag: data.tag
|
|
3515
|
+
}
|
|
3516
|
+
});
|
|
3517
|
+
};
|
|
3518
|
+
/**
|
|
3519
|
+
* get npm package file tree from private registry
|
|
3520
|
+
* @param data The data for the request.
|
|
3521
|
+
* @param data.workspace
|
|
3522
|
+
* @param data._package npm package name
|
|
3523
|
+
* @param data.version package version
|
|
3524
|
+
* @returns unknown package file tree
|
|
3525
|
+
* @throws ApiError
|
|
3526
|
+
*/
|
|
3527
|
+
export const getNpmPackageFiletree = (data) => {
|
|
3528
|
+
return __request(OpenAPI, {
|
|
3529
|
+
method: 'GET',
|
|
3530
|
+
url: '/w/{workspace}/npm_proxy/filetree/{package}/{version}',
|
|
3531
|
+
path: {
|
|
3532
|
+
workspace: data.workspace,
|
|
3533
|
+
package: data._package,
|
|
3534
|
+
version: data.version
|
|
3535
|
+
}
|
|
3536
|
+
});
|
|
3537
|
+
};
|
|
3538
|
+
/**
|
|
3539
|
+
* get specific file from npm package in private registry
|
|
3540
|
+
* @param data The data for the request.
|
|
3541
|
+
* @param data.workspace
|
|
3542
|
+
* @param data._package npm package name
|
|
3543
|
+
* @param data.version package version
|
|
3544
|
+
* @param data.filepath file path within package
|
|
3545
|
+
* @returns string file content
|
|
3546
|
+
* @throws ApiError
|
|
3547
|
+
*/
|
|
3548
|
+
export const getNpmPackageFile = (data) => {
|
|
3549
|
+
return __request(OpenAPI, {
|
|
3550
|
+
method: 'GET',
|
|
3551
|
+
url: '/w/{workspace}/npm_proxy/file/{package}/{version}/{filepath}',
|
|
3552
|
+
path: {
|
|
3553
|
+
workspace: data.workspace,
|
|
3554
|
+
package: data._package,
|
|
3555
|
+
version: data.version,
|
|
3556
|
+
filepath: data.filepath
|
|
3557
|
+
}
|
|
3558
|
+
});
|
|
3559
|
+
};
|
|
3459
3560
|
/**
|
|
3460
3561
|
* query resource types by similarity
|
|
3461
3562
|
* @param data The data for the request.
|