windmill-ts 1.6.0 → 1.7.0
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/dist/package.json +7 -7
- package/dist/src/config/schema.js +10 -0
- package/dist/src/config/schema.js.map +1 -1
- package/dist/src/generator/resources.js +87 -4
- package/dist/src/generator/resources.js.map +1 -1
- package/dist/src/windmill/resources.js +8 -0
- package/dist/src/windmill/resources.js.map +1 -1
- package/package.json +6 -6
package/dist/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "windmill-ts",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.7.0",
|
|
4
4
|
"description": "Type-safe client for Windmill",
|
|
5
5
|
"main": "dist/src/index.js",
|
|
6
6
|
"bin": "dist/src/index.js",
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
"author": "Tsvetomir Bonev <me@invak.id>",
|
|
14
14
|
"license": "Unlicense",
|
|
15
15
|
"devDependencies": {
|
|
16
|
-
"@types/node": "24.
|
|
16
|
+
"@types/node": "24.12.0",
|
|
17
17
|
"rimraf": "6.1.3",
|
|
18
18
|
"typescript": "5.9.3"
|
|
19
19
|
},
|
|
@@ -21,16 +21,16 @@
|
|
|
21
21
|
"@stdlib/string-camelcase": "0.2.3",
|
|
22
22
|
"@stdlib/string-capitalize": "0.3.1",
|
|
23
23
|
"chalk": "5.6.2",
|
|
24
|
-
"cli-spinners": "
|
|
24
|
+
"cli-spinners": "3.4.0",
|
|
25
25
|
"commander": "14.0.3",
|
|
26
|
-
"dedent": "1.7.
|
|
26
|
+
"dedent": "1.7.2",
|
|
27
27
|
"json-schema-to-zod": "2.7.0",
|
|
28
|
-
"log-update": "
|
|
28
|
+
"log-update": "7.2.0",
|
|
29
29
|
"p-queue": "9.1.0",
|
|
30
30
|
"p-retry": "7.1.1",
|
|
31
31
|
"to-valid-identifier": "1.0.0",
|
|
32
32
|
"ts-morph": "27.0.2",
|
|
33
|
-
"windmill-client": "1.
|
|
33
|
+
"windmill-client": "1.654.0",
|
|
34
34
|
"yaml": "2.8.2",
|
|
35
35
|
"zod": "4.3.6",
|
|
36
36
|
"zod-to-json-schema": "3.25.1"
|
|
@@ -44,5 +44,5 @@
|
|
|
44
44
|
},
|
|
45
45
|
"homepage": "https://github.com/invakid404/windmill-ts#readme",
|
|
46
46
|
"files": ["dist", "README.md"],
|
|
47
|
-
"packageManager": "pnpm@10.
|
|
47
|
+
"packageManager": "pnpm@10.32.1"
|
|
48
48
|
}
|
|
@@ -9,6 +9,14 @@ const TransformerSchema = z
|
|
|
9
9
|
importExtension: z.string().default(""),
|
|
10
10
|
})
|
|
11
11
|
.nullish();
|
|
12
|
+
const EmbedSchema = z
|
|
13
|
+
.object({
|
|
14
|
+
// Resource paths whose values should be embedded in the generated client
|
|
15
|
+
paths: z.array(z.string()).default([]),
|
|
16
|
+
// Whether to resolve $var: references dynamically at runtime
|
|
17
|
+
resolveVariables: z.boolean().default(true),
|
|
18
|
+
})
|
|
19
|
+
.prefault({});
|
|
12
20
|
const ResourceOptionsSchema = z
|
|
13
21
|
.object({
|
|
14
22
|
// Map from resource type to default resource path
|
|
@@ -18,6 +26,8 @@ const ResourceOptionsSchema = z
|
|
|
18
26
|
// When true, resource type schemas will use z.looseObject() instead of z.object()
|
|
19
27
|
// to allow passthrough of unknown fields
|
|
20
28
|
looseSchemas: z.boolean().default(false),
|
|
29
|
+
// Embed resource values directly in the generated client
|
|
30
|
+
embed: EmbedSchema,
|
|
21
31
|
})
|
|
22
32
|
.prefault({});
|
|
23
33
|
const ScriptOptionsSchema = z
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../src/config/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,iBAAiB,GAAG,CAAC;KACxB,MAAM,CAAC;IACN,0DAA0D;IAC1D,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE;IACtB,mCAAmC;IACnC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE;IACtB,yEAAyE;IACzE,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;CACxC,CAAC;KACD,OAAO,EAAE,CAAC;AAEb,MAAM,qBAAqB,GAAG,CAAC;KAC5B,MAAM,CAAC;IACN,kDAAkD;IAClD,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;IACjE,WAAW,EAAE,iBAAiB;IAC9B,6BAA6B,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;IACzD,kFAAkF;IAClF,yCAAyC;IACzC,YAAY,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../src/config/schema.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import toValidIdentifier from "to-valid-identifier";
|
|
2
|
-
import { listResources } from "../windmill/resources.js";
|
|
2
|
+
import { listResources, getResourceValue } from "../windmill/resources.js";
|
|
3
3
|
import { getContext } from "./context.js";
|
|
4
4
|
import { schemaToZod } from "./common.js";
|
|
5
5
|
import dedent from "dedent";
|
|
@@ -11,6 +11,8 @@ const resourceTypesTypeName = "ResourceTypes";
|
|
|
11
11
|
const resourceTransformerName = "_resourcesTransformer";
|
|
12
12
|
const defaultResourceTransformerName = "_DefaultResourceTransformer";
|
|
13
13
|
const defaultPerResourceTypeMap = "defaultPerResourceType";
|
|
14
|
+
const embeddedResourcesMapName = "_embeddedResources";
|
|
15
|
+
const resolveVariablesFnName = "_resolveVariables";
|
|
14
16
|
const defaultResourceTransformer = dedent `
|
|
15
17
|
class ${defaultResourceTransformerName} implements Transformer {
|
|
16
18
|
arg: unknown
|
|
@@ -19,7 +21,41 @@ const defaultResourceTransformer = dedent `
|
|
|
19
21
|
}
|
|
20
22
|
}
|
|
21
23
|
`;
|
|
22
|
-
const
|
|
24
|
+
const resolveVariablesFnCode = dedent `
|
|
25
|
+
async function ${resolveVariablesFnName}(obj: unknown): Promise<unknown> {
|
|
26
|
+
if (typeof obj === "string" && obj.startsWith("$var:")) {
|
|
27
|
+
return wmill.getVariable(obj.substring(5));
|
|
28
|
+
}
|
|
29
|
+
if (Array.isArray(obj)) {
|
|
30
|
+
return Promise.all(obj.map(${resolveVariablesFnName}));
|
|
31
|
+
}
|
|
32
|
+
if (obj != null && typeof obj === "object") {
|
|
33
|
+
const entries = await Promise.all(
|
|
34
|
+
Object.entries(obj).map(async ([k, v]) => [k, await ${resolveVariablesFnName}(v)] as const)
|
|
35
|
+
);
|
|
36
|
+
return Object.fromEntries(entries);
|
|
37
|
+
}
|
|
38
|
+
return obj;
|
|
39
|
+
}
|
|
40
|
+
`;
|
|
41
|
+
const getDataFetchExpr = (embed) => {
|
|
42
|
+
if (!embed.enabled)
|
|
43
|
+
return `await wmill.getResource(path)`;
|
|
44
|
+
const entry = `${embeddedResourcesMapName}[path]`;
|
|
45
|
+
if (!embed.resolveVariables || !embed.hasResourcesWithVars)
|
|
46
|
+
return `path in ${embeddedResourcesMapName} ? structuredClone(${entry}.value) : await wmill.getResource(path)`;
|
|
47
|
+
return `path in ${embeddedResourcesMapName} ? (${entry}.hasVars ? await ${resolveVariablesFnName}(${entry}.value) : structuredClone(${entry}.value)) : await wmill.getResource(path)`;
|
|
48
|
+
};
|
|
49
|
+
const hasVarReferences = (obj) => {
|
|
50
|
+
if (typeof obj === "string")
|
|
51
|
+
return obj.startsWith("$var:");
|
|
52
|
+
if (Array.isArray(obj))
|
|
53
|
+
return obj.some(hasVarReferences);
|
|
54
|
+
if (obj != null && typeof obj === "object")
|
|
55
|
+
return Object.values(obj).some(hasVarReferences);
|
|
56
|
+
return false;
|
|
57
|
+
};
|
|
58
|
+
const getPreamble = (embed) => dedent `
|
|
23
59
|
export type Cast<T, U> = T extends U ? T : U;
|
|
24
60
|
|
|
25
61
|
export interface Transformer {
|
|
@@ -69,7 +105,7 @@ const preamble = dedent `
|
|
|
69
105
|
);
|
|
70
106
|
}
|
|
71
107
|
|
|
72
|
-
const data =
|
|
108
|
+
const data = ${getDataFetchExpr(embed)};
|
|
73
109
|
const parsedData = options?.skipValidation ? data : schema.parse(data);
|
|
74
110
|
|
|
75
111
|
const transformer = ${resourceTransformerName}.prototype.do;
|
|
@@ -178,16 +214,52 @@ export const generateResources = async (observer) => {
|
|
|
178
214
|
else {
|
|
179
215
|
await write(`const ${resourceTransformerName} = ${defaultResourceTransformerName};`);
|
|
180
216
|
}
|
|
181
|
-
await write(preamble);
|
|
182
217
|
observer.next("Fetching all resources...");
|
|
183
218
|
const resourcesByType = new Map();
|
|
219
|
+
const allWorkspacePaths = new Map();
|
|
184
220
|
for await (const { resource_type: resourceTypeName, path, } of listResources()) {
|
|
221
|
+
allWorkspacePaths.set(path, resourceTypeName);
|
|
185
222
|
if (!(resourceTypeName in allResourceTypes)) {
|
|
186
223
|
continue;
|
|
187
224
|
}
|
|
188
225
|
const paths = resourcesByType.get(resourceTypeName) ?? [];
|
|
189
226
|
resourcesByType.set(resourceTypeName, [...paths, path]);
|
|
190
227
|
}
|
|
228
|
+
const hasEmbeddedResources = config.resources.embed.paths.length > 0;
|
|
229
|
+
const embeddedValues = new Map();
|
|
230
|
+
const embeddedPathsWithVars = new Set();
|
|
231
|
+
if (hasEmbeddedResources) {
|
|
232
|
+
observer.next("Fetching embedded resource values...");
|
|
233
|
+
const allKnownPaths = new Set([...resourcesByType.values()].flat());
|
|
234
|
+
for (const embedPath of config.resources.embed.paths) {
|
|
235
|
+
if (!allKnownPaths.has(embedPath)) {
|
|
236
|
+
const resourceType = allWorkspacePaths.get(embedPath);
|
|
237
|
+
if (resourceType != null) {
|
|
238
|
+
throw new Error(`Embedded resource ${JSON.stringify(embedPath)} has unsupported resource type ${JSON.stringify(resourceType)}`);
|
|
239
|
+
}
|
|
240
|
+
throw new Error(`Embedded resource path ${JSON.stringify(embedPath)} not found in workspace`);
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
for (const embedPath of config.resources.embed.paths) {
|
|
244
|
+
let value;
|
|
245
|
+
try {
|
|
246
|
+
value = await getResourceValue(embedPath);
|
|
247
|
+
}
|
|
248
|
+
catch (err) {
|
|
249
|
+
throw new Error(`Failed to fetch embedded resource ${JSON.stringify(embedPath)}: ${err instanceof Error ? err.message : err}`);
|
|
250
|
+
}
|
|
251
|
+
embeddedValues.set(embedPath, value);
|
|
252
|
+
if (hasVarReferences(value)) {
|
|
253
|
+
embeddedPathsWithVars.add(embedPath);
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
const hasResourcesWithVars = embeddedPathsWithVars.size > 0;
|
|
258
|
+
await write(getPreamble({
|
|
259
|
+
enabled: hasEmbeddedResources,
|
|
260
|
+
resolveVariables: config.resources.embed.resolveVariables,
|
|
261
|
+
hasResourcesWithVars,
|
|
262
|
+
}));
|
|
191
263
|
observer.next("Generating schemas...");
|
|
192
264
|
const defaultPerResourceType = new Map();
|
|
193
265
|
for (const [resourceTypeName, paths] of resourcesByType) {
|
|
@@ -211,6 +283,17 @@ export const generateResources = async (observer) => {
|
|
|
211
283
|
defaultPerResourceType.set(resourceTypeName, defaultPath);
|
|
212
284
|
}
|
|
213
285
|
}
|
|
286
|
+
if (embeddedValues.size > 0) {
|
|
287
|
+
if (config.resources.embed.resolveVariables && hasResourcesWithVars) {
|
|
288
|
+
await write(resolveVariablesFnCode);
|
|
289
|
+
}
|
|
290
|
+
await write(`const ${embeddedResourcesMapName} = {`);
|
|
291
|
+
for (const [resPath, value] of embeddedValues) {
|
|
292
|
+
const hasVars = embeddedPathsWithVars.has(resPath);
|
|
293
|
+
await write(` ${JSON.stringify(resPath)}: { value: ${JSON.stringify(value)}, hasVars: ${hasVars} },`);
|
|
294
|
+
}
|
|
295
|
+
await write(`} as const;`);
|
|
296
|
+
}
|
|
214
297
|
await write(`const ${resourceToTypeMap} = lazyObject(() => ({`);
|
|
215
298
|
for (const [resourceTypeName, paths] of resourcesByType) {
|
|
216
299
|
const typeSchemaName = resourceTypeSchemaName(resourceTypeName);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resources.js","sourceRoot":"","sources":["../../../src/generator/resources.ts"],"names":[],"mappings":"AAAA,OAAO,iBAAiB,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"resources.js","sourceRoot":"","sources":["../../../src/generator/resources.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
import * as wmill from "windmill-client";
|
|
2
2
|
const PER_PAGE = 20;
|
|
3
|
+
/**
|
|
4
|
+
* Fetches the raw (non-interpolated) value of a resource.
|
|
5
|
+
* $var: references are NOT resolved — they remain as literal strings.
|
|
6
|
+
*/
|
|
7
|
+
export async function getResourceValue(path) {
|
|
8
|
+
const workspace = process.env["WM_WORKSPACE"];
|
|
9
|
+
return wmill.ResourceService.getResourceValue({ workspace, path });
|
|
10
|
+
}
|
|
3
11
|
export async function* listResources(resourceType) {
|
|
4
12
|
const workspace = process.env["WM_WORKSPACE"];
|
|
5
13
|
for (let page = 1;; ++page) {
|
|
@@ -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,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"}
|
|
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;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,IAAY;IACjD,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAE,CAAC;IAC/C,OAAO,KAAK,CAAC,eAAe,CAAC,gBAAgB,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AACrE,CAAC;AAED,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": "1.
|
|
3
|
+
"version": "1.7.0",
|
|
4
4
|
"description": "Type-safe client for Windmill",
|
|
5
5
|
"main": "dist/src/index.js",
|
|
6
6
|
"bin": "dist/src/index.js",
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
"author": "Tsvetomir Bonev <me@invak.id>",
|
|
10
10
|
"license": "Unlicense",
|
|
11
11
|
"devDependencies": {
|
|
12
|
-
"@types/node": "24.
|
|
12
|
+
"@types/node": "24.12.0",
|
|
13
13
|
"rimraf": "6.1.3",
|
|
14
14
|
"typescript": "5.9.3"
|
|
15
15
|
},
|
|
@@ -17,16 +17,16 @@
|
|
|
17
17
|
"@stdlib/string-camelcase": "0.2.3",
|
|
18
18
|
"@stdlib/string-capitalize": "0.3.1",
|
|
19
19
|
"chalk": "5.6.2",
|
|
20
|
-
"cli-spinners": "
|
|
20
|
+
"cli-spinners": "3.4.0",
|
|
21
21
|
"commander": "14.0.3",
|
|
22
|
-
"dedent": "1.7.
|
|
22
|
+
"dedent": "1.7.2",
|
|
23
23
|
"json-schema-to-zod": "2.7.0",
|
|
24
|
-
"log-update": "
|
|
24
|
+
"log-update": "7.2.0",
|
|
25
25
|
"p-queue": "9.1.0",
|
|
26
26
|
"p-retry": "7.1.1",
|
|
27
27
|
"to-valid-identifier": "1.0.0",
|
|
28
28
|
"ts-morph": "27.0.2",
|
|
29
|
-
"windmill-client": "1.
|
|
29
|
+
"windmill-client": "1.654.0",
|
|
30
30
|
"yaml": "2.8.2",
|
|
31
31
|
"zod": "4.3.6",
|
|
32
32
|
"zod-to-json-schema": "3.25.1"
|