primitive-admin 1.1.0-alpha.45 → 1.1.0-alpha.47
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/bin/primitive.js +2 -0
- package/dist/bin/primitive.js.map +1 -1
- package/dist/src/commands/collections.js +11 -0
- package/dist/src/commands/collections.js.map +1 -1
- package/dist/src/commands/databases.js +34 -49
- package/dist/src/commands/databases.js.map +1 -1
- package/dist/src/commands/groups.js +9 -4
- package/dist/src/commands/groups.js.map +1 -1
- package/dist/src/commands/metadata.js +150 -0
- package/dist/src/commands/metadata.js.map +1 -1
- package/dist/src/commands/sync.d.ts +135 -0
- package/dist/src/commands/sync.js +582 -0
- package/dist/src/commands/sync.js.map +1 -1
- package/dist/src/commands/vars.d.ts +8 -0
- package/dist/src/commands/vars.js +110 -0
- package/dist/src/commands/vars.js.map +1 -0
- package/dist/src/commands/webhooks.js +10 -1
- package/dist/src/commands/webhooks.js.map +1 -1
- package/dist/src/commands/workflows.d.ts +30 -0
- package/dist/src/commands/workflows.js +296 -84
- package/dist/src/commands/workflows.js.map +1 -1
- package/dist/src/lib/api-client.d.ts +39 -1
- package/dist/src/lib/api-client.js +56 -2
- package/dist/src/lib/api-client.js.map +1 -1
- package/dist/src/lib/codegen-shared/resolveCodegenSourceDir.d.ts +68 -0
- package/dist/src/lib/codegen-shared/resolveCodegenSourceDir.js +168 -0
- package/dist/src/lib/codegen-shared/resolveCodegenSourceDir.js.map +1 -0
- package/dist/src/lib/generated-allowlist.js +12 -0
- package/dist/src/lib/generated-allowlist.js.map +1 -1
- package/dist/src/lib/toml-metadata-config.d.ts +10 -2
- package/dist/src/lib/toml-metadata-config.js +51 -15
- package/dist/src/lib/toml-metadata-config.js.map +1 -1
- package/dist/src/lib/workflow-codegen/generated-schema-descriptor.d.ts +33 -0
- package/dist/src/lib/workflow-codegen/generated-schema-descriptor.js +158 -1
- package/dist/src/lib/workflow-codegen/generated-schema-descriptor.js.map +1 -1
- package/dist/src/lib/workflow-codegen/generator.d.ts +6 -2
- package/dist/src/lib/workflow-codegen/generator.js +35 -6
- package/dist/src/lib/workflow-codegen/generator.js.map +1 -1
- package/dist/src/lib/workflow-codegen/schemaToTs.d.ts +13 -4
- package/dist/src/lib/workflow-codegen/schemaToTs.js +49 -4
- package/dist/src/lib/workflow-codegen/schemaToTs.js.map +1 -1
- package/dist/src/types/index.d.ts +4 -0
- package/package.json +1 -1
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* and emits ONE generated file per workflow —
|
|
6
6
|
* `workflows/generated/<key>.generated.ts` — each containing the workflow's
|
|
7
7
|
* `<Key>Input`/`<Key>Output` types plus a typed `<key>(client)` invoker factory
|
|
8
|
-
* returning `{ runSync?, start }`. This mirrors `databases codegen`'s per-type
|
|
8
|
+
* returning `{ runSync?, start, getStatus }`. This mirrors `databases codegen`'s per-type
|
|
9
9
|
* `<Type>.generated.ts` layout (#1441's `<type>Ops`): per-file artifacts keep
|
|
10
10
|
* team merges conflict-free and let a `[workflow-key]` filter regenerate exactly
|
|
11
11
|
* one file.
|
|
@@ -16,7 +16,11 @@
|
|
|
16
16
|
* `schema-validation` descriptor) so the generated types match runtime
|
|
17
17
|
* validation exactly. A malformed schema throws (fail-and-exit).
|
|
18
18
|
* - `.runSync` is emitted only for `syncCallable: true` workflows (the server
|
|
19
|
-
* rejects run-sync otherwise); `.start` for every
|
|
19
|
+
* rejects run-sync otherwise); `.start` and `.getStatus` for every
|
|
20
|
+
* non-reserved workflow (the typed async path, issue #1512 — async-only
|
|
21
|
+
* workflows are exactly the ones that need a typed `getStatus`). No
|
|
22
|
+
* `.terminate` member is emitted (the factory stays a start/status helper;
|
|
23
|
+
* typed termination is available via the client's explicit `terminate<O>`).
|
|
20
24
|
* - `input` is a REQUIRED option iff the schema rejects `{}` (the client's
|
|
21
25
|
* `input ?? {}` fallback would fail validation); otherwise `input?`.
|
|
22
26
|
* - The runtime call always passes the ORIGINAL key string; only identifiers
|
|
@@ -31,6 +35,7 @@ import { safeJsonParse } from "../workflow-payload.js";
|
|
|
31
35
|
import { writeOrCheckGeneratedFiles, } from "../codegen-shared/generatedFiles.js";
|
|
32
36
|
import { fingerprintToml } from "../db-codegen/dbFingerprint.js";
|
|
33
37
|
import { schemaToTsType, schemaRejectsEmptyObject } from "./schemaToTs.js";
|
|
38
|
+
import { describeSchema } from "./generated-schema-descriptor.js";
|
|
34
39
|
import { workflowInputTypeName, workflowOutputTypeName, workflowFactoryName, } from "./naming.js";
|
|
35
40
|
/** Prefix marking a platform-owned workflow key (mirrors the server's
|
|
36
41
|
* `INTERNAL_WORKFLOW_KEY_PREFIX`; inlined because the CLI cannot import from
|
|
@@ -47,14 +52,20 @@ function isReservedKey(key) {
|
|
|
47
52
|
}
|
|
48
53
|
/**
|
|
49
54
|
* Render a top-level `<Name>Input`/`<Name>Output` declaration. An absent schema
|
|
50
|
-
* → `unknown`.
|
|
55
|
+
* → `unknown`. A plain object type → an `interface`; anything else → a `type`
|
|
56
|
+
* alias.
|
|
57
|
+
*
|
|
58
|
+
* A discriminated-union (`oneOf`) output renders as `{…} | {…}`, which begins
|
|
59
|
+
* with `{` too — but it must be a `type` alias, not `interface Foo {…} | {…}`
|
|
60
|
+
* (invalid TS). Decide via the shared descriptor (`describeSchema(...).oneOf`),
|
|
61
|
+
* not the `startsWith("{")` heuristic (#1511).
|
|
51
62
|
*/
|
|
52
63
|
function renderTypeDecl(name, schema) {
|
|
53
64
|
if (schema === undefined) {
|
|
54
65
|
return `export type ${name} = unknown;`;
|
|
55
66
|
}
|
|
56
67
|
const expr = schemaToTsType(schema, 0);
|
|
57
|
-
if (expr.startsWith("{")) {
|
|
68
|
+
if (expr.startsWith("{") && !describeSchema(schema).oneOf) {
|
|
58
69
|
return `export interface ${name} ${expr}`;
|
|
59
70
|
}
|
|
60
71
|
return `export type ${name} = ${expr};`;
|
|
@@ -125,6 +136,19 @@ function renderFactory(wf) {
|
|
|
125
136
|
` ...opts,\n` +
|
|
126
137
|
` workflowKey: ${keyLiteral},\n` +
|
|
127
138
|
` }),`);
|
|
139
|
+
// Typed status fetch (#1512), emitted for EVERY non-reserved workflow — not
|
|
140
|
+
// gated on `syncCallable`, since async-only workflows are exactly the ones
|
|
141
|
+
// that need a typed `status.output`. `output` is bound to `<Key>Output` from
|
|
142
|
+
// the workflow's `outputSchema` (schema-less → `unknown`, same as the sync
|
|
143
|
+
// path). `runKey` stays required (unlike start/runSync, which auto-generate
|
|
144
|
+
// it — you cannot fetch a run's status without knowing which run). Same
|
|
145
|
+
// spread-first / key-last ordering so an untyped caller cannot override the
|
|
146
|
+
// key and read the wrong workflow's status.
|
|
147
|
+
lines.push(` getStatus: (opts: Omit<GetWorkflowStatusOptions, "workflowKey">) =>\n` +
|
|
148
|
+
` client.workflows.getStatus<${wf.outputTypeName}>({\n` +
|
|
149
|
+
` ...opts,\n` +
|
|
150
|
+
` workflowKey: ${keyLiteral},\n` +
|
|
151
|
+
` }),`);
|
|
128
152
|
lines.push(` };`, `}`);
|
|
129
153
|
return lines.join("\n");
|
|
130
154
|
}
|
|
@@ -139,8 +163,13 @@ export function renderWorkflowFile(input) {
|
|
|
139
163
|
return null;
|
|
140
164
|
const fingerprint = fingerprintToml(input.tomlContent);
|
|
141
165
|
// Only import the option types actually referenced, so the generated file
|
|
142
|
-
// compiles under a consumer's `noUnusedLocals`.
|
|
143
|
-
|
|
166
|
+
// compiles under a consumer's `noUnusedLocals`. `GetWorkflowStatusOptions` is
|
|
167
|
+
// always referenced now — every factory emits a `getStatus` member (#1512).
|
|
168
|
+
const imports = [
|
|
169
|
+
"GetWorkflowStatusOptions",
|
|
170
|
+
"JsBaoClient",
|
|
171
|
+
"StartWorkflowOptions",
|
|
172
|
+
];
|
|
144
173
|
if (wf.syncCallable)
|
|
145
174
|
imports.push("RunSyncWorkflowOptions");
|
|
146
175
|
imports.sort();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../src/lib/workflow-codegen/generator.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../src/lib/workflow-codegen/generator.ts"],"names":[],"mappings":"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"}
|
|
@@ -24,13 +24,20 @@
|
|
|
24
24
|
* validator accepts don't hit TS excess-property errors; a CLOSED object
|
|
25
25
|
* (`additionalProperties: false`) omits the index signature.
|
|
26
26
|
* - `type: "array"` with `items` → `T[]`.
|
|
27
|
+
* - `oneOf` whose members are ALL `type: "object"` → a discriminated
|
|
28
|
+
* (tagged) union: the `|`-union of member object types, keyed by an
|
|
29
|
+
* auto-detected single-literal-`enum` discriminator (#1511). A defective
|
|
30
|
+
* all-object tagged union (no/ambiguous discriminator, <2 members) or an
|
|
31
|
+
* all-object `anyOf` (unsupported in v1) is a STRICT codegen error, not a
|
|
32
|
+
* silent `unknown` (Fork 3, resolved by the maintainer).
|
|
27
33
|
*
|
|
28
|
-
* Everything the server ignores (`$ref`, `
|
|
29
|
-
* `patternProperties`, numeric constraints, tuple `items
|
|
34
|
+
* Everything else the server ignores (`$ref`, `allOf`, `format`,
|
|
35
|
+
* `patternProperties`, numeric constraints, tuple `items`, and a `oneOf`/`anyOf`
|
|
36
|
+
* whose members are NOT all objects) renders `unknown`.
|
|
30
37
|
*
|
|
31
38
|
* Errors are NOT swallowed here — a malformed schema fails upstream at parse
|
|
32
|
-
* time
|
|
33
|
-
* for anything it does not recognize.
|
|
39
|
+
* time, and a defective tagged union throws — this walker otherwise returns
|
|
40
|
+
* `unknown` for anything it does not recognize.
|
|
34
41
|
*/
|
|
35
42
|
/**
|
|
36
43
|
* Convert a parsed JSON Schema node to a TypeScript type expression. Object
|
|
@@ -44,6 +51,8 @@ export declare function schemaToTsType(schema: any, indent?: number): string;
|
|
|
44
51
|
* must be a compile-time-required option (issue #1442, P4). Derived from the
|
|
45
52
|
* shared descriptor so it matches the server validator exactly:
|
|
46
53
|
*
|
|
54
|
+
* - a valid top-level discriminated-union (`oneOf`): the runtime always
|
|
55
|
+
* requires the discriminator present, so `{}` matches no case;
|
|
47
56
|
* - a declared top-level `type` that `{}` does not satisfy (anything but
|
|
48
57
|
* `object`, e.g. `string`/`array`, or a union with no `object` arm);
|
|
49
58
|
* - a top-level `enum` (a fresh `{}` is never an enum member);
|
|
@@ -24,13 +24,20 @@
|
|
|
24
24
|
* validator accepts don't hit TS excess-property errors; a CLOSED object
|
|
25
25
|
* (`additionalProperties: false`) omits the index signature.
|
|
26
26
|
* - `type: "array"` with `items` → `T[]`.
|
|
27
|
+
* - `oneOf` whose members are ALL `type: "object"` → a discriminated
|
|
28
|
+
* (tagged) union: the `|`-union of member object types, keyed by an
|
|
29
|
+
* auto-detected single-literal-`enum` discriminator (#1511). A defective
|
|
30
|
+
* all-object tagged union (no/ambiguous discriminator, <2 members) or an
|
|
31
|
+
* all-object `anyOf` (unsupported in v1) is a STRICT codegen error, not a
|
|
32
|
+
* silent `unknown` (Fork 3, resolved by the maintainer).
|
|
27
33
|
*
|
|
28
|
-
* Everything the server ignores (`$ref`, `
|
|
29
|
-
* `patternProperties`, numeric constraints, tuple `items
|
|
34
|
+
* Everything else the server ignores (`$ref`, `allOf`, `format`,
|
|
35
|
+
* `patternProperties`, numeric constraints, tuple `items`, and a `oneOf`/`anyOf`
|
|
36
|
+
* whose members are NOT all objects) renders `unknown`.
|
|
30
37
|
*
|
|
31
38
|
* Errors are NOT swallowed here — a malformed schema fails upstream at parse
|
|
32
|
-
* time
|
|
33
|
-
* for anything it does not recognize.
|
|
39
|
+
* time, and a defective tagged union throws — this walker otherwise returns
|
|
40
|
+
* `unknown` for anything it does not recognize.
|
|
34
41
|
*/
|
|
35
42
|
import { describeSchema, isType, } from "./generated-schema-descriptor.js";
|
|
36
43
|
/** Scalar JSON-schema types this converter maps to a concrete TS scalar. */
|
|
@@ -125,6 +132,35 @@ export function schemaToTsType(schema, indent = 0) {
|
|
|
125
132
|
}
|
|
126
133
|
return parts.length > 0 ? parts.join(" | ") : "unknown";
|
|
127
134
|
}
|
|
135
|
+
// Discriminated-union (`oneOf`) rendering (#1511). A qualifying tagged union
|
|
136
|
+
// has no top-level `type`, so this runs ahead of the `singularType === null`
|
|
137
|
+
// fallback. Render each member via the existing object rendering and join
|
|
138
|
+
// with `|` — the natural TS discriminated union TS narrows on. A defective
|
|
139
|
+
// all-object tagged union (`kind: "invalid"`) is a strict codegen error
|
|
140
|
+
// (Fork 3, resolved by the maintainer), not a silent `unknown`.
|
|
141
|
+
if (d.oneOf) {
|
|
142
|
+
if (d.oneOf.kind === "invalid") {
|
|
143
|
+
throw new Error(`workflows codegen: ${d.oneOf.reason}`);
|
|
144
|
+
}
|
|
145
|
+
const { discriminant } = d.oneOf;
|
|
146
|
+
const members = d.oneOf.members.map((m) => {
|
|
147
|
+
const md = describeSchema(m.schema);
|
|
148
|
+
// Every member is `type: "object"` with `properties`, so `md.object` is
|
|
149
|
+
// non-null — reuse the shared object rendering rather than reimplement it.
|
|
150
|
+
if (!md.object)
|
|
151
|
+
return schemaToTsType(m.schema, indent);
|
|
152
|
+
// The runtime validator always requires the discriminator present before
|
|
153
|
+
// it can select a branch — regardless of whether the member lists it in
|
|
154
|
+
// its own `required`. Force it required so the generated union can't
|
|
155
|
+
// compile a value that omits the tag (which the runtime rejects as
|
|
156
|
+
// "matches no case") (#1511).
|
|
157
|
+
const required = md.object.required.includes(discriminant)
|
|
158
|
+
? md.object.required
|
|
159
|
+
: [...md.object.required, discriminant];
|
|
160
|
+
return renderObjectType({ ...md.object, required }, indent);
|
|
161
|
+
});
|
|
162
|
+
return members.join(" | ");
|
|
163
|
+
}
|
|
128
164
|
if (d.singularType === null) {
|
|
129
165
|
// No usable single type and no enum — the server enforces nothing.
|
|
130
166
|
return "unknown";
|
|
@@ -206,6 +242,8 @@ function quotePropIfNeeded(name) {
|
|
|
206
242
|
* must be a compile-time-required option (issue #1442, P4). Derived from the
|
|
207
243
|
* shared descriptor so it matches the server validator exactly:
|
|
208
244
|
*
|
|
245
|
+
* - a valid top-level discriminated-union (`oneOf`): the runtime always
|
|
246
|
+
* requires the discriminator present, so `{}` matches no case;
|
|
209
247
|
* - a declared top-level `type` that `{}` does not satisfy (anything but
|
|
210
248
|
* `object`, e.g. `string`/`array`, or a union with no `object` arm);
|
|
211
249
|
* - a top-level `enum` (a fresh `{}` is never an enum member);
|
|
@@ -216,6 +254,13 @@ function quotePropIfNeeded(name) {
|
|
|
216
254
|
*/
|
|
217
255
|
export function schemaRejectsEmptyObject(schema) {
|
|
218
256
|
const d = describeSchema(schema);
|
|
257
|
+
// 0. A valid discriminated-union (`oneOf`) always requires the discriminator
|
|
258
|
+
// present before the runtime can select a branch, so a fresh `{}` (the
|
|
259
|
+
// client's `input ?? {}` fallback) matches no case and is rejected. The
|
|
260
|
+
// generated `input` must therefore be required, not optional (#1511).
|
|
261
|
+
if (d.oneOf && d.oneOf.kind === "valid") {
|
|
262
|
+
return true;
|
|
263
|
+
}
|
|
219
264
|
// 1. Type gate: `{}` must satisfy at least one declared type.
|
|
220
265
|
if (d.types.length && !d.types.some((t) => isType(EMPTY_OBJECT, t))) {
|
|
221
266
|
return true;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schemaToTs.js","sourceRoot":"","sources":["../../../../src/lib/workflow-codegen/schemaToTs.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"schemaToTs.js","sourceRoot":"","sources":["../../../../src/lib/workflow-codegen/schemaToTs.ts"],"names":[],"mappings":"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"}
|
|
@@ -484,6 +484,10 @@ export interface SyncState {
|
|
|
484
484
|
modifiedAt: string;
|
|
485
485
|
contentHash?: string;
|
|
486
486
|
}>;
|
|
487
|
+
vars?: Record<string, {
|
|
488
|
+
modifiedAt: string;
|
|
489
|
+
contentHash?: string;
|
|
490
|
+
}>;
|
|
487
491
|
groupTypeConfigs?: Record<string, {
|
|
488
492
|
modifiedAt: string;
|
|
489
493
|
contentHash?: string;
|