windmill-ts 0.2.1 → 0.2.3

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/README.md CHANGED
@@ -57,7 +57,8 @@ npx windmill-ts -
57
57
 
58
58
  ## Generated Client Usage
59
59
 
60
- The generated client provides type-safe functions for running scripts and flows:
60
+ The generated client provides type-safe functions for running scripts and flows,
61
+ and getting resources:
61
62
 
62
63
  ```typescript
63
64
  import {
@@ -65,6 +66,7 @@ import {
65
66
  runScriptAsync,
66
67
  runFlow,
67
68
  runFlowAsync,
69
+ getResource,
68
70
  } from "./generated-client";
69
71
 
70
72
  // Run a script synchronously
@@ -85,6 +87,10 @@ const flowResult = await runFlow("my/flow/path", {
85
87
  input1: "value",
86
88
  input2: true,
87
89
  });
90
+
91
+ // Get a resource with type validation
92
+ const resource = await getResource("my/resource/path");
93
+ // TypeScript will infer the correct type based on the resource type
88
94
  ```
89
95
 
90
96
  ## How It Works
package/dist/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "windmill-ts",
3
- "version": "0.2.1",
3
+ "version": "0.2.3",
4
4
  "description": "Type-safe client for Windmill",
5
5
  "main": "dist/src/index.js",
6
6
  "bin": "dist/src/index.js",
@@ -3,6 +3,7 @@ import { jsonSchemaToZod } from "json-schema-to-zod";
3
3
  import { getContext, run } from "./context.js";
4
4
  import { InMemoryDuplex } from "../utils/inMemoryDuplex.js";
5
5
  import { resourceReferencesSchemaName } from "./resources.js";
6
+ import { once } from "../utils/once.js";
6
7
  export const runWithBuffer = async (cb) => {
7
8
  const { allResourceTypes } = getContext();
8
9
  const buffer = new InMemoryDuplex();
@@ -10,7 +11,7 @@ export const runWithBuffer = async (cb) => {
10
11
  return { buffer, result };
11
12
  };
12
13
  export const generateSchemas = async ({ generator, mapName, }) => {
13
- const { write, allResourceTypes } = getContext();
14
+ const { write } = getContext();
14
15
  const pathToSchemaMap = new Map();
15
16
  for await (const { path, schema } of generator) {
16
17
  if (schema == null) {
@@ -27,7 +28,8 @@ export const generateSchemas = async ({ generator, mapName, }) => {
27
28
  }
28
29
  write("} as const))");
29
30
  };
30
- export const schemaToZod = (schema) => {
31
+ export const schemaToZod = (schema, options) => {
32
+ const { resourceTypeToSchemaName = resourceReferencesSchemaName } = options ?? {};
31
33
  const { allResourceTypes } = getContext();
32
34
  return jsonSchemaToZod(schema, {
33
35
  parserOverride: (schema, _refs) => {
@@ -46,18 +48,48 @@ export const schemaToZod = (schema) => {
46
48
  const resourceTypeOrFalse = extractResourceTypeFromSchema(schema);
47
49
  if (resourceTypeOrFalse) {
48
50
  const { resourceType } = resourceTypeOrFalse;
51
+ // NOTE: this is exactly how the Windmill frontend detects S3 objects
52
+ // it is needed, as both `S3Object` and `s3_object` are valid
53
+ // https://github.com/windmill-labs/windmill/blob/e4583e9b2366b90f31eb015c4dfc21f07b0bc31e/frontend/src/lib/components/ArgInput.svelte#L604-L607
54
+ if (resourceType.replace("_", "").toLowerCase() === "s3object") {
55
+ return s3ObjectZodSchema();
56
+ }
49
57
  // NOTE: we could do a best-effort attempt to resolve non-resource
50
58
  // argument types by parsing the script sources (for TS only),
51
59
  // but handling things like types imported from elsewhere would
52
60
  // not be easy
53
61
  if (!(resourceType in allResourceTypes)) {
54
- return `z.any()`;
62
+ return "z.any()";
55
63
  }
56
- return resourceReferencesSchemaName(resourceType);
64
+ return resourceTypeToSchemaName(resourceType);
57
65
  }
58
66
  },
59
67
  });
60
68
  };
69
+ const s3ObjectZodSchema = once(() => {
70
+ const { deferWrite } = getContext();
71
+ const name = `$s3_object_type`;
72
+ const jsonSchema = {
73
+ type: "object",
74
+ properties: {
75
+ s3: {
76
+ type: "string",
77
+ },
78
+ storage: {
79
+ type: "string",
80
+ },
81
+ // NOTE: `filename` isn't present in `S3Object` in `windmill-client`, but
82
+ // Windmill sets it when you upload a file from the UI
83
+ filename: {
84
+ type: "string",
85
+ },
86
+ },
87
+ required: ["s3"],
88
+ };
89
+ const schema = jsonSchemaToZod(jsonSchema);
90
+ deferWrite(`const ${name} = ${schema};`);
91
+ return name;
92
+ });
61
93
  const RESOURCE_TYPE_PREFIX = "resource-";
62
94
  const extractResourceTypeFromSchema = (schema) => {
63
95
  if (schema.type !== "object" ||
@@ -1 +1 @@
1
- {"version":3,"file":"common.js","sourceRoot":"","sources":["../../../src/generator/common.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"common.js","sourceRoot":"","sources":["../../../src/generator/common.ts"],"names":[],"mappings":"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"}
@@ -1,13 +1,30 @@
1
1
  import { AsyncLocalStorage } from "node:async_hooks";
2
+ import { InMemoryDuplex } from "../utils/inMemoryDuplex.js";
2
3
  const generateStore = new AsyncLocalStorage();
3
- export const run = (output, allResourceTypes, cb) => {
4
+ export const run = async (output, allResourceTypes, cb) => {
4
5
  const write = (content) => new Promise((resolve, reject) => output.write(content + "\n", (err) => {
5
6
  if (err != null) {
6
7
  return void reject(err);
7
8
  }
8
9
  resolve();
9
10
  }));
10
- return generateStore.run({ write, allResourceTypes }, cb);
11
+ const deferredWrites = [];
12
+ // NOTE: if we're running in a nested context, we want to lift deferred
13
+ // writes to the outermost context so they happen at the very end
14
+ const deferWrite = getContext()?.deferWrite ??
15
+ ((content) => {
16
+ deferredWrites.push(content);
17
+ });
18
+ const result = await generateStore.run({ write, deferWrite, allResourceTypes }, cb);
19
+ // Execute deferred writes
20
+ if (deferredWrites.length > 0) {
21
+ const buffer = new InMemoryDuplex();
22
+ // NOTE: in order to avoid the output being dependent on the write order,
23
+ // deferred writes are sorted before written to the output
24
+ buffer.write(deferredWrites.sort().join("\n"));
25
+ buffer.pipe(output);
26
+ }
27
+ return result;
11
28
  };
12
29
  export const getContext = () => generateStore.getStore();
13
30
  //# sourceMappingURL=context.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"context.js","sourceRoot":"","sources":["../../../src/generator/context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AASrD,MAAM,aAAa,GAAG,IAAI,iBAAiB,EAAmB,CAAC;AAE/D,MAAM,CAAC,MAAM,GAAG,GAAG,CACjB,MAAgB,EAChB,gBAA+B,EAC/B,EAAW,EACX,EAAE;IACF,MAAM,KAAK,GAAG,CAAC,OAAe,EAAE,EAAE,CAChC,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,CACpC,MAAM,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,EAAE,CAAC,GAAG,EAAE,EAAE;QACnC,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;YAChB,OAAO,KAAK,MAAM,CAAC,GAAG,CAAC,CAAC;QAC1B,CAAC;QAED,OAAO,EAAE,CAAC;IACZ,CAAC,CAAC,CACH,CAAC;IAEJ,OAAO,aAAa,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,gBAAgB,EAAE,EAAE,EAAE,CAAC,CAAC;AAC5D,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAAG,GAAG,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC"}
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../../../src/generator/context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAGrD,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAQ5D,MAAM,aAAa,GAAG,IAAI,iBAAiB,EAAmB,CAAC;AAE/D,MAAM,CAAC,MAAM,GAAG,GAAG,KAAK,EACtB,MAAgB,EAChB,gBAA+B,EAC/B,EAAW,EACX,EAAE;IACF,MAAM,KAAK,GAAG,CAAC,OAAe,EAAE,EAAE,CAChC,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,CACpC,MAAM,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,EAAE,CAAC,GAAG,EAAE,EAAE;QACnC,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;YAChB,OAAO,KAAK,MAAM,CAAC,GAAG,CAAC,CAAC;QAC1B,CAAC;QAED,OAAO,EAAE,CAAC;IACZ,CAAC,CAAC,CACH,CAAC;IAEJ,MAAM,cAAc,GAAa,EAAE,CAAC;IAEpC,uEAAuE;IACvE,uEAAuE;IACvE,MAAM,UAAU,GACd,UAAU,EAAE,EAAE,UAAU;QACxB,CAAC,CAAC,OAAe,EAAE,EAAE;YACnB,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC/B,CAAC,CAAC,CAAC;IAEL,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,GAAG,CACpC,EAAE,KAAK,EAAE,UAAU,EAAE,gBAAgB,EAAE,EACvC,EAAE,CACH,CAAC;IAEF,0BAA0B;IAC1B,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9B,MAAM,MAAM,GAAG,IAAI,cAAc,EAAE,CAAC;QAEpC,yEAAyE;QACzE,gEAAgE;QAChE,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAC/C,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACtB,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAAG,GAAG,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC"}
@@ -5,9 +5,14 @@ import { schemaToZod } from "./common.js";
5
5
  import dedent from "dedent";
6
6
  const resourceToTypeMap = "resourceToType";
7
7
  const preamble = dedent `
8
- export const getResource = <Path extends keyof typeof resourceToType>(
8
+ export const getResource = async <Path extends keyof typeof resourceToType>(
9
9
  path: Path,
10
- ): Promise<z.infer<(typeof resourceToType)[Path]>> => wmill.getResource(path);
10
+ ): Promise<z.infer<(typeof resourceToType)[Path]>> => {
11
+ const schema = ${resourceToTypeMap}[path];
12
+ const data = await wmill.getResource(path);
13
+
14
+ return schema.parse(data);
15
+ }
11
16
  `;
12
17
  export const generateResources = async () => {
13
18
  const { write, allResourceTypes } = getContext();
@@ -19,8 +24,13 @@ export const generateResources = async () => {
19
24
  }
20
25
  for (const [resourceTypeName, paths] of resourcesByType) {
21
26
  const resourceType = allResourceTypes[resourceTypeName];
27
+ if (resourceType == null) {
28
+ continue;
29
+ }
22
30
  const typeSchemaName = resourceTypeSchemaName(resourceType.name);
23
- const resourceTypeSchema = schemaToZod(resourceType.schema);
31
+ const resourceTypeSchema = schemaToZod(resourceType.schema, {
32
+ resourceTypeToSchemaName: resourceTypeSchemaName,
33
+ });
24
34
  write(`const ${typeSchemaName} = lazyObject(() => ${resourceTypeSchema});`);
25
35
  const referencesSchemaName = resourceReferencesSchemaName(resourceType.name);
26
36
  const referencesSchema = schemaToZod(makeReferencesSchema(paths));
@@ -1 +1 @@
1
- {"version":3,"file":"resources.js","sourceRoot":"","sources":["../../../src/generator/resources.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"resources.js","sourceRoot":"","sources":["../../../src/generator/resources.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ export const once = (fn) => {
2
+ let value = null;
3
+ return () => {
4
+ if (value == null) {
5
+ value = fn();
6
+ }
7
+ return value;
8
+ };
9
+ };
10
+ //# sourceMappingURL=once.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"once.js","sourceRoot":"","sources":["../../../src/utils/once.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,IAAI,GAAG,CAAK,EAAW,EAAE,EAAE;IACtC,IAAI,KAAK,GAAa,IAAI,CAAC;IAE3B,OAAO,GAAG,EAAE;QACV,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC;YAClB,KAAK,GAAG,EAAE,EAAE,CAAC;QACf,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC,CAAC;AACJ,CAAC,CAAC"}
@@ -7,7 +7,7 @@ export async function* listResources(resourceType) {
7
7
  workspace,
8
8
  page,
9
9
  perPage: PER_PAGE,
10
- resourceTypeExclude: "state,app_theme,app_custom",
10
+ resourceTypeExclude: "cache,state,app_theme,app_custom",
11
11
  ...(resourceType != null && { resourceType }),
12
12
  });
13
13
  if (pageData.length === 0) {
@@ -1 +1 @@
1
- {"version":3,"file":"resources.js","sourceRoot":"","sources":["../../../src/windmill/resources.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,iBAAiB,CAAC;AAEzC,MAAM,QAAQ,GAAG,EAAE,CAAC;AAEpB,MAAM,CAAC,KAAK,SAAS,CAAC,CAAC,aAAa,CAAC,YAAqB;IACxD,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAE,CAAC;IAE/C,KAAK,IAAI,IAAI,GAAG,CAAC,GAAI,EAAE,IAAI,EAAE,CAAC;QAC5B,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,eAAe,CAAC,YAAY,CAAC;YACxD,SAAS;YACT,IAAI;YACJ,OAAO,EAAE,QAAQ;YACjB,mBAAmB,EAAE,4BAA4B;YACjD,GAAG,CAAC,YAAY,IAAI,IAAI,IAAI,EAAE,YAAY,EAAE,CAAC;SAC9C,CAAC,CAAC;QAEH,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,MAAM;QACR,CAAC;QAED,KAAK,CAAC,CAAC,QAAQ,CAAC;IAClB,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"resources.js","sourceRoot":"","sources":["../../../src/windmill/resources.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,iBAAiB,CAAC;AAEzC,MAAM,QAAQ,GAAG,EAAE,CAAC;AAEpB,MAAM,CAAC,KAAK,SAAS,CAAC,CAAC,aAAa,CAAC,YAAqB;IACxD,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAE,CAAC;IAE/C,KAAK,IAAI,IAAI,GAAG,CAAC,GAAI,EAAE,IAAI,EAAE,CAAC;QAC5B,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,eAAe,CAAC,YAAY,CAAC;YACxD,SAAS;YACT,IAAI;YACJ,OAAO,EAAE,QAAQ;YACjB,mBAAmB,EAAE,kCAAkC;YACvD,GAAG,CAAC,YAAY,IAAI,IAAI,IAAI,EAAE,YAAY,EAAE,CAAC;SAC9C,CAAC,CAAC;QAEH,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,MAAM;QACR,CAAC;QAED,KAAK,CAAC,CAAC,QAAQ,CAAC;IAClB,CAAC;AACH,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "windmill-ts",
3
- "version": "0.2.1",
3
+ "version": "0.2.3",
4
4
  "description": "Type-safe client for Windmill",
5
5
  "main": "dist/src/index.js",
6
6
  "bin": "dist/src/index.js",