windmill-ts 0.1.2 → 0.2.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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "windmill-ts",
3
- "version": "0.1.2",
3
+ "version": "0.2.0",
4
4
  "description": "Type-safe client for Windmill",
5
5
  "main": "dist/src/index.js",
6
6
  "bin": "dist/src/index.js",
@@ -2,49 +2,22 @@ import toValidIdentifier from "to-valid-identifier";
2
2
  import { jsonSchemaToZod } from "json-schema-to-zod";
3
3
  import { getContext, run } from "./context.js";
4
4
  import { InMemoryDuplex } from "../utils/inMemoryDuplex.js";
5
+ import { resourceReferencesSchemaName } from "./resources.js";
5
6
  export const runWithBuffer = async (cb) => {
7
+ const { allResourceTypes } = getContext();
6
8
  const buffer = new InMemoryDuplex();
7
- const result = await run(buffer, cb);
9
+ const result = await run(buffer, allResourceTypes, cb);
8
10
  return { buffer, result };
9
11
  };
10
- export const generateSchemas = async ({ allResourceTypes, generator, mapName, }) => {
11
- const { write } = getContext();
12
+ export const generateSchemas = async ({ generator, mapName, }) => {
13
+ const { write, allResourceTypes } = getContext();
12
14
  const pathToSchemaMap = new Map();
13
- const referencedResourceTypes = new Set();
14
15
  for await (const { path, schema } of generator) {
15
16
  if (schema == null) {
16
17
  continue;
17
18
  }
18
19
  const schemaName = toValidIdentifier(`${mapName}_${path}`);
19
- const zodSchema = jsonSchemaToZod(schema, {
20
- parserOverride: (schema, _refs) => {
21
- // NOTE: Windmill sometimes has `default: null` on required fields,
22
- // which is incorrect for obvious reasons, so as a rule of thumb,
23
- // we remove null default values as a whole
24
- if ("default" in schema && schema.default == null) {
25
- delete schema.default;
26
- }
27
- // NOTE: Windmill sometimes has `enum: null` on string fields, and the
28
- // library doesn't like that, so we need to delete it
29
- if (schema.type === "string" && schema.enum == null) {
30
- delete schema.enum;
31
- return;
32
- }
33
- const resourceTypeOrFalse = extractResourceTypeFromSchema(schema);
34
- if (resourceTypeOrFalse) {
35
- const { resourceType } = resourceTypeOrFalse;
36
- // NOTE: we could do a best-effort attempt to resolve non-resource
37
- // argument types by parsing the script sources (for TS only),
38
- // but handling things like types imported from elsewhere would
39
- // not be easy
40
- if (!(resourceType in allResourceTypes)) {
41
- return `z.any()`;
42
- }
43
- referencedResourceTypes.add(resourceType);
44
- return toValidIdentifier(resourceType);
45
- }
46
- },
47
- });
20
+ const zodSchema = schemaToZod(schema);
48
21
  write(`const ${schemaName} = lazyObject(() => ${zodSchema});`);
49
22
  pathToSchemaMap.set(path, schemaName);
50
23
  }
@@ -53,7 +26,37 @@ export const generateSchemas = async ({ allResourceTypes, generator, mapName, })
53
26
  write(`${JSON.stringify(scriptPath)}: ${schemaName},`);
54
27
  }
55
28
  write("} as const))");
56
- return referencedResourceTypes;
29
+ };
30
+ export const schemaToZod = (schema) => {
31
+ const { allResourceTypes } = getContext();
32
+ return jsonSchemaToZod(schema, {
33
+ parserOverride: (schema, _refs) => {
34
+ // NOTE: Windmill sometimes has `default: null` on required fields,
35
+ // which is incorrect for obvious reasons, so as a rule of thumb,
36
+ // we remove null default values as a whole
37
+ if ("default" in schema && schema.default == null) {
38
+ delete schema.default;
39
+ }
40
+ // NOTE: Windmill sometimes has `enum: null` on string fields, and the
41
+ // library doesn't like that, so we need to delete it
42
+ if (schema.type === "string" && schema.enum == null) {
43
+ delete schema.enum;
44
+ return;
45
+ }
46
+ const resourceTypeOrFalse = extractResourceTypeFromSchema(schema);
47
+ if (resourceTypeOrFalse) {
48
+ const { resourceType } = resourceTypeOrFalse;
49
+ // NOTE: we could do a best-effort attempt to resolve non-resource
50
+ // argument types by parsing the script sources (for TS only),
51
+ // but handling things like types imported from elsewhere would
52
+ // not be easy
53
+ if (!(resourceType in allResourceTypes)) {
54
+ return `z.any()`;
55
+ }
56
+ return resourceReferencesSchemaName(resourceType);
57
+ }
58
+ },
59
+ });
57
60
  };
58
61
  const RESOURCE_TYPE_PREFIX = "resource-";
59
62
  const extractResourceTypeFromSchema = (schema) => {
@@ -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,13 @@
1
1
  import { AsyncLocalStorage } from "node:async_hooks";
2
2
  const generateStore = new AsyncLocalStorage();
3
- export const run = (output, cb) => {
3
+ export const run = (output, allResourceTypes, cb) => {
4
4
  const write = (content) => new Promise((resolve, reject) => output.write(content + "\n", (err) => {
5
5
  if (err != null) {
6
6
  return void reject(err);
7
7
  }
8
8
  resolve();
9
9
  }));
10
- return generateStore.run({ write }, cb);
10
+ return generateStore.run({ write, allResourceTypes }, cb);
11
11
  };
12
12
  export const getContext = () => generateStore.getStore();
13
13
  //# 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;AAOrD,MAAM,aAAa,GAAG,IAAI,iBAAiB,EAAmB,CAAC;AAE/D,MAAM,CAAC,MAAM,GAAG,GAAG,CAAK,MAAgB,EAAE,EAAW,EAAE,EAAE;IACvD,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,EAAE,EAAE,CAAC,CAAC;AAC1C,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;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"}
@@ -22,11 +22,10 @@ const preamble = dedent `
22
22
  return wmill.runFlowAsync(flowPath, schema.parse(args));
23
23
  };
24
24
  `;
25
- export const generateFlows = async (allResourceTypes) => {
25
+ export const generateFlows = async () => {
26
26
  const { write } = getContext();
27
27
  await write(preamble);
28
28
  return generateSchemas({
29
- allResourceTypes,
30
29
  generator: listFlows(),
31
30
  mapName,
32
31
  });
@@ -1 +1 @@
1
- {"version":3,"file":"flows.js","sourceRoot":"","sources":["../../../src/generator/flows.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEjD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE9C,MAAM,OAAO,GAAG,OAAO,CAAC;AAExB,MAAM,QAAQ,GAAG,MAAM,CAAA;sDAC+B,OAAO;;4BAEjC,OAAO;;qBAEd,OAAO;;;;;2DAK+B,OAAO;;4BAEtC,OAAO;;qBAEd,OAAO;;;;CAI3B,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAAG,KAAK,EAAE,gBAA+B,EAAE,EAAE;IACrE,MAAM,EAAE,KAAK,EAAE,GAAG,UAAU,EAAG,CAAC;IAEhC,MAAM,KAAK,CAAC,QAAQ,CAAC,CAAC;IAEtB,OAAO,eAAe,CAAC;QACrB,gBAAgB;QAChB,SAAS,EAAE,SAAS,EAAE;QACtB,OAAO;KACR,CAAC,CAAC;AACL,CAAC,CAAC"}
1
+ {"version":3,"file":"flows.js","sourceRoot":"","sources":["../../../src/generator/flows.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEjD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE9C,MAAM,OAAO,GAAG,OAAO,CAAC;AAExB,MAAM,QAAQ,GAAG,MAAM,CAAA;sDAC+B,OAAO;;4BAEjC,OAAO;;qBAEd,OAAO;;;;;2DAK+B,OAAO;;4BAEtC,OAAO;;qBAEd,OAAO;;;;CAI3B,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAAG,KAAK,IAAI,EAAE;IACtC,MAAM,EAAE,KAAK,EAAE,GAAG,UAAU,EAAG,CAAC;IAEhC,MAAM,KAAK,CAAC,QAAQ,CAAC,CAAC;IAEtB,OAAO,eAAe,CAAC;QACrB,SAAS,EAAE,SAAS,EAAE;QACtB,OAAO;KACR,CAAC,CAAC;AACL,CAAC,CAAC"}
@@ -5,14 +5,14 @@ import { generateScripts } from "./scripts.js";
5
5
  import { generateResources } from "./resources.js";
6
6
  import { generateFlows } from "./flows.js";
7
7
  import { runWithBuffer } from "./common.js";
8
- export const generate = async (output) => run(output, async () => {
9
- writePreamble();
8
+ export const generate = async (output) => {
10
9
  const allResourceTypes = await listResourceTypes();
11
- const results = await Promise.all([generateScripts, generateFlows].map((fn) => runWithBuffer(() => fn(allResourceTypes))));
12
- const referencedResourceTypes = results.reduce((acc, { buffer, result }) => {
13
- buffer.pipe(output);
14
- return acc.union(result);
15
- }, new Set());
16
- await generateResources([...referencedResourceTypes]);
17
- });
10
+ return run(output, allResourceTypes, async () => {
11
+ writePreamble();
12
+ const results = await Promise.all([generateResources, generateScripts, generateFlows].map((fn) => runWithBuffer(fn)));
13
+ results.forEach(({ buffer }) => {
14
+ buffer.pipe(output);
15
+ });
16
+ });
17
+ };
18
18
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/generator/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AACnC,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,MAAM,CAAC,MAAM,QAAQ,GAAG,KAAK,EAAE,MAAgB,EAAE,EAAE,CACjD,GAAG,CAAC,MAAM,EAAE,KAAK,IAAI,EAAE;IACrB,aAAa,EAAE,CAAC;IAEhB,MAAM,gBAAgB,GAAG,MAAM,iBAAiB,EAAE,CAAC;IACnD,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAC/B,CAAC,eAAe,EAAE,aAAa,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAC1C,aAAa,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAC1C,CACF,CAAC;IAEF,MAAM,uBAAuB,GAAG,OAAO,CAAC,MAAM,CAC5C,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE;QAC1B,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAEpB,OAAO,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC3B,CAAC,EACD,IAAI,GAAG,EAAU,CAClB,CAAC;IAEF,MAAM,iBAAiB,CAAC,CAAC,GAAG,uBAAuB,CAAC,CAAC,CAAC;AACxD,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/generator/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AACnC,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,MAAM,CAAC,MAAM,QAAQ,GAAG,KAAK,EAAE,MAAgB,EAAE,EAAE;IACjD,MAAM,gBAAgB,GAAG,MAAM,iBAAiB,EAAE,CAAC;IACnD,OAAO,GAAG,CAAC,MAAM,EAAE,gBAAgB,EAAE,KAAK,IAAI,EAAE;QAC9C,aAAa,EAAE,CAAC;QAEhB,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAC/B,CAAC,iBAAiB,EAAE,eAAe,EAAE,aAAa,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAC7D,aAAa,CAAC,EAAE,CAAC,CAClB,CACF,CAAC;QAEF,OAAO,CAAC,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE;YAC7B,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACtB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC"}
@@ -1,23 +1,43 @@
1
1
  import toValidIdentifier from "to-valid-identifier";
2
- import { jsonSchemaToZod } from "json-schema-to-zod";
3
- import PQueue from "p-queue";
4
- import { listResourcesByType } from "../windmill/resources.js";
2
+ import { listResources } from "../windmill/resources.js";
5
3
  import { getContext } from "./context.js";
6
- export const generateResources = async (resourceTypes) => {
7
- const { write } = getContext();
8
- const resourceQueue = new PQueue({ concurrency: 5 });
9
- const resources = resourceTypes.map((resourceType) => resourceQueue.add(async () => ({
10
- resourceType,
11
- paths: await Array.fromAsync(listResourcesByType(resourceType), ({ path }) => path),
12
- }), { throwOnTimeout: true }));
13
- for await (const { resourceType, paths } of resources) {
14
- const resourceSchema = makeResourceSchema(paths);
15
- const schemaName = toValidIdentifier(resourceType);
16
- const zodSchema = jsonSchemaToZod(resourceSchema);
17
- write(`const ${schemaName} = lazyObject(() => ${zodSchema});`);
4
+ import { schemaToZod } from "./common.js";
5
+ import dedent from "dedent";
6
+ const resourceToTypeMap = "resourceToType";
7
+ const preamble = dedent `
8
+ export const getResource = <Path extends keyof typeof resourceToType>(
9
+ path: Path,
10
+ ): Promise<z.infer<(typeof resourceToType)[Path]>> => wmill.getResource(path);
11
+ `;
12
+ export const generateResources = async () => {
13
+ const { write, allResourceTypes } = getContext();
14
+ write(preamble);
15
+ const resourcesByType = new Map();
16
+ for await (const { resource_type: resourceTypeName, path, } of listResources()) {
17
+ const paths = resourcesByType.get(resourceTypeName) ?? [];
18
+ resourcesByType.set(resourceTypeName, [...paths, path]);
18
19
  }
20
+ for (const [resourceTypeName, paths] of resourcesByType) {
21
+ const resourceType = allResourceTypes[resourceTypeName];
22
+ const typeSchemaName = resourceTypeSchemaName(resourceType.name);
23
+ const resourceTypeSchema = schemaToZod(resourceType.schema);
24
+ write(`const ${typeSchemaName} = lazyObject(() => ${resourceTypeSchema});`);
25
+ const referencesSchemaName = resourceReferencesSchemaName(resourceType.name);
26
+ const referencesSchema = schemaToZod(makeReferencesSchema(paths));
27
+ write(`const ${referencesSchemaName} = lazyObject(() => ${referencesSchema});`);
28
+ }
29
+ write(`const ${resourceToTypeMap} = lazyObject(() => ({`);
30
+ for (const [resourceTypeName, paths] of resourcesByType) {
31
+ const typeSchemaName = resourceTypeSchemaName(resourceTypeName);
32
+ for (const path of paths) {
33
+ write(`${JSON.stringify(path)}: ${typeSchemaName},`);
34
+ }
35
+ }
36
+ write(`} as const));`);
19
37
  };
20
- const makeResourceSchema = (paths) => {
38
+ export const resourceReferencesSchemaName = (resourceType) => toValidIdentifier(`${resourceType}_references`);
39
+ export const resourceTypeSchemaName = (resourceType) => toValidIdentifier(`${resourceType}_type`);
40
+ const makeReferencesSchema = (paths) => {
21
41
  const refs = paths.map((path) => `$res:${path}`);
22
42
  return {
23
43
  type: "string",
@@ -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,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,MAAM,MAAM,SAAS,CAAC;AAC7B,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAE/D,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,MAAM,CAAC,MAAM,iBAAiB,GAAG,KAAK,EAAE,aAAuB,EAAE,EAAE;IACjE,MAAM,EAAE,KAAK,EAAE,GAAG,UAAU,EAAG,CAAC;IAEhC,MAAM,aAAa,GAAG,IAAI,MAAM,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC,CAAC;IAErD,MAAM,SAAS,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,YAAY,EAAE,EAAE,CACnD,aAAa,CAAC,GAAG,CACf,KAAK,IAAI,EAAE,CAAC,CAAC;QACX,YAAY;QACZ,KAAK,EAAE,MAAM,KAAK,CAAC,SAAS,CAC1B,mBAAmB,CAAC,YAAY,CAAC,EACjC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,CACnB;KACF,CAAC,EACF,EAAE,cAAc,EAAE,IAAI,EAAE,CACzB,CACF,CAAC;IAEF,IAAI,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,IAAI,SAAS,EAAE,CAAC;QACtD,MAAM,cAAc,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;QAEjD,MAAM,UAAU,GAAG,iBAAiB,CAAC,YAAY,CAAC,CAAC;QACnD,MAAM,SAAS,GAAG,eAAe,CAAC,cAAc,CAAC,CAAC;QAElD,KAAK,CAAC,SAAS,UAAU,uBAAuB,SAAS,IAAI,CAAC,CAAC;IACjE,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,kBAAkB,GAAG,CAAC,KAAe,EAAE,EAAE;IAC7C,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC;IAEjD,OAAO;QACL,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,IAAI;QACV,GAAG,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;KAC1B,CAAC;AACzB,CAAC,CAAC"}
1
+ {"version":3,"file":"resources.js","sourceRoot":"","sources":["../../../src/generator/resources.ts"],"names":[],"mappings":"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"}
@@ -22,11 +22,10 @@ const preamble = dedent `
22
22
  return wmill.runScriptAsync(scriptPath, null, schema.parse(args));
23
23
  };
24
24
  `;
25
- export const generateScripts = async (allResourceTypes) => {
25
+ export const generateScripts = async () => {
26
26
  const { write } = getContext();
27
27
  await write(preamble);
28
28
  return generateSchemas({
29
- allResourceTypes,
30
29
  generator: listScripts(),
31
30
  mapName,
32
31
  });
@@ -1 +1 @@
1
- {"version":3,"file":"scripts.js","sourceRoot":"","sources":["../../../src/generator/scripts.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAErD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE9C,MAAM,OAAO,GAAG,SAAS,CAAC;AAE1B,MAAM,QAAQ,GAAG,MAAM,CAAA;wDACiC,OAAO;;4BAEnC,OAAO;;qBAEd,OAAO;;;;;6DAKiC,OAAO;;4BAExC,OAAO;;qBAEd,OAAO;;;;CAI3B,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAG,KAAK,EAAE,gBAA+B,EAAE,EAAE;IACvE,MAAM,EAAE,KAAK,EAAE,GAAG,UAAU,EAAG,CAAC;IAEhC,MAAM,KAAK,CAAC,QAAQ,CAAC,CAAC;IAEtB,OAAO,eAAe,CAAC;QACrB,gBAAgB;QAChB,SAAS,EAAE,WAAW,EAAE;QACxB,OAAO;KACR,CAAC,CAAC;AACL,CAAC,CAAC"}
1
+ {"version":3,"file":"scripts.js","sourceRoot":"","sources":["../../../src/generator/scripts.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAErD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE9C,MAAM,OAAO,GAAG,SAAS,CAAC;AAE1B,MAAM,QAAQ,GAAG,MAAM,CAAA;wDACiC,OAAO;;4BAEnC,OAAO;;qBAEd,OAAO;;;;;6DAKiC,OAAO;;4BAExC,OAAO;;qBAEd,OAAO;;;;CAI3B,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAG,KAAK,IAAI,EAAE;IACxC,MAAM,EAAE,KAAK,EAAE,GAAG,UAAU,EAAG,CAAC;IAEhC,MAAM,KAAK,CAAC,QAAQ,CAAC,CAAC;IAEtB,OAAO,eAAe,CAAC;QACrB,SAAS,EAAE,WAAW,EAAE;QACxB,OAAO;KACR,CAAC,CAAC;AACL,CAAC,CAAC"}
@@ -1,13 +1,14 @@
1
1
  import * as wmill from "windmill-client";
2
2
  const PER_PAGE = 20;
3
- export async function* listResourcesByType(resourceType) {
3
+ export async function* listResources(resourceType) {
4
4
  const workspace = process.env["WM_WORKSPACE"];
5
5
  for (let page = 1;; ++page) {
6
6
  const pageData = await wmill.ResourceService.listResource({
7
7
  workspace,
8
8
  page,
9
9
  perPage: PER_PAGE,
10
- resourceType,
10
+ resourceTypeExclude: "state,app_theme",
11
+ ...(resourceType != null && { resourceType }),
11
12
  });
12
13
  if (pageData.length === 0) {
13
14
  break;
@@ -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,mBAAmB,CAAC,YAAoB;IAC7D,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,YAAY;SACb,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,iBAAiB;YACtC,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.1.2",
3
+ "version": "0.2.0",
4
4
  "description": "Type-safe client for Windmill",
5
5
  "main": "dist/src/index.js",
6
6
  "bin": "dist/src/index.js",