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.
Files changed (39) hide show
  1. package/esm/deps/jsr.io/@windmill-labs/shared-utils/{1.0.11 → 1.0.12}/lib.es.js +202 -35
  2. package/esm/deps.js +5 -6
  3. package/esm/gen/core/OpenAPI.js +1 -1
  4. package/esm/gen/services.gen.js +101 -0
  5. package/esm/src/commands/app/dev.js +182 -4
  6. package/esm/src/commands/app/wmillTsDev.js +40 -1
  7. package/esm/src/commands/script/script.js +2 -1
  8. package/esm/src/commands/sync/sync.js +34 -32
  9. package/esm/src/core/conf.js +47 -45
  10. package/esm/src/core/context.js +34 -22
  11. package/esm/src/core/specific_items.js +28 -10
  12. package/esm/src/main.js +1 -1
  13. package/esm/src/utils/resource_folders.js +3 -1
  14. package/package.json +1 -1
  15. package/types/deps/jsr.io/@windmill-labs/shared-utils/{1.0.11 → 1.0.12}/lib.es.d.ts.map +1 -1
  16. package/types/deps.d.ts +2 -2
  17. package/types/deps.d.ts.map +1 -1
  18. package/types/gen/services.gen.d.ts +50 -1
  19. package/types/gen/services.gen.d.ts.map +1 -1
  20. package/types/gen/types.gen.d.ts +73 -0
  21. package/types/gen/types.gen.d.ts.map +1 -1
  22. package/types/src/commands/app/dev.d.ts.map +1 -1
  23. package/types/src/commands/app/metadata.d.ts +1 -1
  24. package/types/src/commands/app/metadata.d.ts.map +1 -1
  25. package/types/src/commands/app/wmillTsDev.d.ts.map +1 -1
  26. package/types/src/commands/script/script.d.ts.map +1 -1
  27. package/types/src/commands/sync/sync.d.ts +5 -1
  28. package/types/src/commands/sync/sync.d.ts.map +1 -1
  29. package/types/src/core/conf.d.ts +1 -1
  30. package/types/src/core/conf.d.ts.map +1 -1
  31. package/types/src/core/context.d.ts +2 -2
  32. package/types/src/core/context.d.ts.map +1 -1
  33. package/types/src/core/specific_items.d.ts +3 -3
  34. package/types/src/core/specific_items.d.ts.map +1 -1
  35. package/types/src/main.d.ts +1 -1
  36. package/types/src/utils/resource_folders.d.ts.map +1 -1
  37. package/types/windmill-utils-internal/src/gen/types.gen.d.ts +73 -0
  38. package/types/windmill-utils-internal/src/gen/types.gen.d.ts.map +1 -1
  39. /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
- getIntrospectionQuery();
787
- function buildVisibleFieldList(c, L) {
788
- return c.filter((c) => c && c.ignored !== !0).map((c) => {
789
- switch (L) {
790
- case "postgresql": return `"${c?.field}"`;
791
- case "ms_sql_server": return `[${c?.field}]`;
792
- case "mysql": return `\`${c?.field}\``;
793
- case "snowflake": return `"${c?.field}"`;
794
- case "bigquery": return `\`${c?.field}\``;
795
- case "duckdb": return `"${c?.field}"`;
796
- default: throw Error("Unsupported database type: " + L);
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 (${G}${U ? ", " : ""}${K})`, H;
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 V = "", H = buildParameters([
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
- H += "\n";
1096
- let U = buildVisibleFieldList(L, z), W = U.join(", ");
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
- V = ` (:quicksearch = '' OR CONCAT_WS(' ', ${U.join(", ")}) LIKE CONCAT('%', :quicksearch, '%'))`, H += `SELECT ${W} FROM ${c}`, H += ` WHERE ${R ? `${R} AND` : ""} ${V}`, H += ` ORDER BY ${z}`, H += " LIMIT :limit OFFSET :offset";
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
- let z = `
1107
- ${L.map((c) => `
1108
- (CASE WHEN $4 = '${c.field}' AND $5 IS false THEN "${c.field}"::text END),
1109
- (CASE WHEN $4 = '${c.field}' AND $5 IS true THEN "${c.field}"::text END) DESC`).join(",\n")}`;
1110
- V = `($3 = '' OR CONCAT(${U.join(", ")}) ILIKE '%' || $3 || '%')`, H += `SELECT ${U.map((c) => `${c}::text`).join(", ")} FROM ${c}\n`, H += ` WHERE ${R ? `${R} AND` : ""} ${V}\n`, H += ` ORDER BY ${z}\n`, H += " LIMIT $1::INT OFFSET $2::INT";
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 = L.map((c) => `
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
- V = ` (@p3 = '' OR CONCAT(${W}) LIKE '%' + @p3 + '%')`, H += `SELECT ${W} FROM ${c}`, H += ` WHERE ${R ? `${R} AND` : ""} ${V}`, H += ` ORDER BY ${z}`, H += " OFFSET @p2 ROWS FETCH NEXT @p1 ROWS ONLY";
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
- V = ` (@quicksearch = '' OR REGEXP_CONTAINS(CONCAT(${U.map((c) => {
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))`, H += `SELECT ${W} FROM ${c}`, H += ` WHERE ${R ? `${R} AND` : ""} ${V}`, H += ` ORDER BY ${z}`, H += " LIMIT @limit OFFSET @offset";
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
- V = `($quicksearch = '' OR CONCAT(${U.join(", ")}) ILIKE '%' || $quicksearch || '%')`, H += `SELECT ${U.join(", ")} FROM ${c}\n`, H += ` WHERE ${R ? `${R} AND` : ""} ${V}\n`, H += ` ORDER BY ${z}\n`, H += " LIMIT $limit::INT OFFSET $offset::INT";
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 H;
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 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\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\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\nwindow.addEventListener('message', (e) => {\n 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})";
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 { WebSocketServer, WebSocket } from "ws";
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.11/lib.es.js";
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("BASE_INTERNAL_URL") ??
57
- getEnv("BASE_URL") ??
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";
@@ -32,7 +32,7 @@ export const OpenAPI = {
32
32
  PASSWORD: undefined,
33
33
  TOKEN: getEnv("WM_TOKEN"),
34
34
  USERNAME: undefined,
35
- VERSION: '1.607.0',
35
+ VERSION: '1.610.1',
36
36
  WITH_CREDENTIALS: true,
37
37
  interceptors: {
38
38
  request: new Interceptors(),
@@ -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.