primitive-admin 1.0.53 → 1.0.54
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 +38 -10
- package/dist/bin/primitive.js +6 -0
- package/dist/bin/primitive.js.map +1 -1
- package/dist/src/commands/auth.js +16 -6
- package/dist/src/commands/auth.js.map +1 -1
- package/dist/src/commands/blob-buckets.js +84 -7
- package/dist/src/commands/blob-buckets.js.map +1 -1
- package/dist/src/commands/catalog.js +3 -3
- package/dist/src/commands/catalog.js.map +1 -1
- package/dist/src/commands/collections.js +12 -9
- package/dist/src/commands/collections.js.map +1 -1
- package/dist/src/commands/databases.js +191 -74
- package/dist/src/commands/databases.js.map +1 -1
- package/dist/src/commands/group-type-configs.js +1 -9
- package/dist/src/commands/group-type-configs.js.map +1 -1
- package/dist/src/commands/groups.js +12 -6
- package/dist/src/commands/groups.js.map +1 -1
- package/dist/src/commands/guides.d.ts +161 -0
- package/dist/src/commands/guides.js +502 -84
- package/dist/src/commands/guides.js.map +1 -1
- package/dist/src/commands/integrations.js +2 -2
- package/dist/src/commands/integrations.js.map +1 -1
- package/dist/src/commands/metadata.d.ts +2 -0
- package/dist/src/commands/metadata.js +344 -0
- package/dist/src/commands/metadata.js.map +1 -0
- package/dist/src/commands/prompts.js +2 -2
- package/dist/src/commands/prompts.js.map +1 -1
- package/dist/src/commands/rule-sets.d.ts +1 -0
- package/dist/src/commands/rule-sets.js +25 -3
- package/dist/src/commands/rule-sets.js.map +1 -1
- package/dist/src/commands/scripts.d.ts +2 -0
- package/dist/src/commands/scripts.js +667 -0
- package/dist/src/commands/scripts.js.map +1 -0
- package/dist/src/commands/sync.d.ts +189 -9
- package/dist/src/commands/sync.js +1418 -256
- 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 +17 -3
- package/dist/src/commands/webhooks.js.map +1 -1
- package/dist/src/commands/workflows.d.ts +30 -0
- package/dist/src/commands/workflows.js +645 -59
- package/dist/src/commands/workflows.js.map +1 -1
- package/dist/src/lib/api-client.d.ts +120 -18
- package/dist/src/lib/api-client.js +125 -2
- package/dist/src/lib/api-client.js.map +1 -1
- package/dist/src/lib/batch.d.ts +26 -0
- package/dist/src/lib/batch.js +32 -0
- package/dist/src/lib/batch.js.map +1 -0
- package/dist/src/lib/block-layout.d.ts +160 -0
- package/dist/src/lib/block-layout.js +451 -0
- package/dist/src/lib/block-layout.js.map +1 -0
- package/dist/src/lib/codegen-shared/generatedFiles.d.ts +61 -0
- package/dist/src/lib/codegen-shared/generatedFiles.js +127 -0
- package/dist/src/lib/codegen-shared/generatedFiles.js.map +1 -0
- 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/config-toml.d.ts +10 -0
- package/dist/src/lib/config-toml.js +42 -0
- package/dist/src/lib/config-toml.js.map +1 -0
- package/dist/src/lib/config.d.ts +16 -0
- package/dist/src/lib/config.js +41 -0
- package/dist/src/lib/config.js.map +1 -1
- package/dist/src/lib/constants.d.ts +9 -0
- package/dist/src/lib/constants.js +9 -0
- package/dist/src/lib/constants.js.map +1 -1
- package/dist/src/lib/csv.d.ts +1 -2
- package/dist/src/lib/csv.js +3 -8
- package/dist/src/lib/csv.js.map +1 -1
- package/dist/src/lib/db-codegen/dbGenerator.d.ts +35 -7
- package/dist/src/lib/db-codegen/dbGenerator.js +384 -125
- package/dist/src/lib/db-codegen/dbGenerator.js.map +1 -1
- package/dist/src/lib/db-codegen/dbNaming.d.ts +29 -0
- package/dist/src/lib/db-codegen/dbNaming.js +58 -0
- package/dist/src/lib/db-codegen/dbNaming.js.map +1 -1
- package/dist/src/lib/db-codegen/dbTemplates.d.ts +114 -5
- package/dist/src/lib/db-codegen/dbTemplates.js +163 -16
- package/dist/src/lib/db-codegen/dbTemplates.js.map +1 -1
- package/dist/src/lib/db-codegen/dbTsTypes.d.ts +7 -3
- package/dist/src/lib/db-codegen/dbTsTypes.js +23 -1
- package/dist/src/lib/db-codegen/dbTsTypes.js.map +1 -1
- package/dist/src/lib/generated-allowlist.js +43 -0
- package/dist/src/lib/generated-allowlist.js.map +1 -1
- package/dist/src/lib/init-config.js +2 -2
- package/dist/src/lib/init-config.js.map +1 -1
- package/dist/src/lib/output.d.ts +25 -5
- package/dist/src/lib/output.js +32 -4
- package/dist/src/lib/output.js.map +1 -1
- package/dist/src/lib/query-operators.d.ts +43 -0
- package/dist/src/lib/query-operators.js +80 -0
- package/dist/src/lib/query-operators.js.map +1 -0
- package/dist/src/lib/toml-database-config.d.ts +10 -19
- package/dist/src/lib/toml-database-config.js +28 -59
- package/dist/src/lib/toml-database-config.js.map +1 -1
- package/dist/src/lib/toml-metadata-config.d.ts +147 -0
- package/dist/src/lib/toml-metadata-config.js +463 -0
- package/dist/src/lib/toml-metadata-config.js.map +1 -0
- package/dist/src/lib/toml-native-form.d.ts +46 -0
- package/dist/src/lib/toml-native-form.js +78 -0
- package/dist/src/lib/toml-native-form.js.map +1 -0
- package/dist/src/lib/toml-params-validator.d.ts +34 -0
- package/dist/src/lib/toml-params-validator.js +118 -3
- package/dist/src/lib/toml-params-validator.js.map +1 -1
- package/dist/src/lib/workflow-apply.d.ts +86 -0
- package/dist/src/lib/workflow-apply.js +127 -0
- package/dist/src/lib/workflow-apply.js.map +1 -0
- package/dist/src/lib/workflow-codegen/generated-schema-descriptor.d.ts +129 -0
- package/dist/src/lib/workflow-codegen/generated-schema-descriptor.js +269 -0
- package/dist/src/lib/workflow-codegen/generated-schema-descriptor.js.map +1 -0
- package/dist/src/lib/workflow-codegen/generator.d.ts +74 -0
- package/dist/src/lib/workflow-codegen/generator.js +215 -0
- package/dist/src/lib/workflow-codegen/generator.js.map +1 -0
- package/dist/src/lib/workflow-codegen/naming.d.ts +33 -0
- package/dist/src/lib/workflow-codegen/naming.js +81 -0
- package/dist/src/lib/workflow-codegen/naming.js.map +1 -0
- package/dist/src/lib/workflow-codegen/schemaToTs.d.ts +64 -0
- package/dist/src/lib/workflow-codegen/schemaToTs.js +282 -0
- package/dist/src/lib/workflow-codegen/schemaToTs.js.map +1 -0
- package/dist/src/lib/workflow-fragments.js +3 -3
- package/dist/src/lib/workflow-fragments.js.map +1 -1
- package/dist/src/lib/workflow-payload.d.ts +68 -0
- package/dist/src/lib/workflow-payload.js +150 -0
- package/dist/src/lib/workflow-payload.js.map +1 -0
- package/dist/src/lib/workflow-toml-validator.d.ts +1 -1
- package/dist/src/lib/workflow-toml-validator.js +37 -1
- package/dist/src/lib/workflow-toml-validator.js.map +1 -1
- package/dist/src/types/index.d.ts +11 -0
- package/dist/src/validators.d.ts +4 -3
- package/dist/src/validators.js +6 -5
- package/dist/src/validators.js.map +1 -1
- package/package.json +5 -3
|
@@ -24,6 +24,7 @@
|
|
|
24
24
|
*/
|
|
25
25
|
/** Top-level step fields the validator accepts for a known kind (#998). */
|
|
26
26
|
export const GENERATED_ALLOWLISTED_FIELDS = [
|
|
27
|
+
"_testInputSchema",
|
|
27
28
|
"_testSteps",
|
|
28
29
|
"action",
|
|
29
30
|
"aliasKey",
|
|
@@ -32,24 +33,35 @@ export const GENERATED_ALLOWLISTED_FIELDS = [
|
|
|
32
33
|
"asBase64",
|
|
33
34
|
"attachments",
|
|
34
35
|
"blobId",
|
|
36
|
+
"blobIds",
|
|
37
|
+
"blockKey",
|
|
38
|
+
"blockType",
|
|
39
|
+
"body",
|
|
35
40
|
"bodyMode",
|
|
36
41
|
"bucketId",
|
|
37
42
|
"bucketKey",
|
|
38
43
|
"cacheTtlSeconds",
|
|
39
44
|
"cases",
|
|
45
|
+
"category",
|
|
46
|
+
"channels",
|
|
47
|
+
"collapseId",
|
|
40
48
|
"collectionId",
|
|
49
|
+
"collectionType",
|
|
41
50
|
"concurrency",
|
|
42
51
|
"configId",
|
|
43
52
|
"content",
|
|
44
53
|
"contentBase64",
|
|
45
54
|
"contentType",
|
|
46
55
|
"context",
|
|
56
|
+
"contextId",
|
|
47
57
|
"continueOnError",
|
|
48
58
|
"create",
|
|
49
59
|
"cursor",
|
|
50
60
|
"cursorField",
|
|
51
61
|
"data",
|
|
52
62
|
"databaseId",
|
|
63
|
+
"databaseType",
|
|
64
|
+
"deepLink",
|
|
53
65
|
"default",
|
|
54
66
|
"description",
|
|
55
67
|
"direction",
|
|
@@ -59,6 +71,7 @@ export const GENERATED_ALLOWLISTED_FIELDS = [
|
|
|
59
71
|
"durationMs",
|
|
60
72
|
"email",
|
|
61
73
|
"events",
|
|
74
|
+
"expiresAt",
|
|
62
75
|
"expiresInSeconds",
|
|
63
76
|
"feature",
|
|
64
77
|
"filename",
|
|
@@ -70,7 +83,9 @@ export const GENERATED_ALLOWLISTED_FIELDS = [
|
|
|
70
83
|
"groupId",
|
|
71
84
|
"groupType",
|
|
72
85
|
"htmlBody",
|
|
86
|
+
"iconUrl",
|
|
73
87
|
"id",
|
|
88
|
+
"idempotencyKey",
|
|
74
89
|
"includeRoot",
|
|
75
90
|
"includeUserDetails",
|
|
76
91
|
"input",
|
|
@@ -84,6 +99,7 @@ export const GENERATED_ALLOWLISTED_FIELDS = [
|
|
|
84
99
|
"maxPages",
|
|
85
100
|
"message",
|
|
86
101
|
"messages",
|
|
102
|
+
"metadata",
|
|
87
103
|
"metrics",
|
|
88
104
|
"model",
|
|
89
105
|
"modelName",
|
|
@@ -94,6 +110,7 @@ export const GENERATED_ALLOWLISTED_FIELDS = [
|
|
|
94
110
|
"onConflict",
|
|
95
111
|
"onPartialFailure",
|
|
96
112
|
"operationName",
|
|
113
|
+
"operations",
|
|
97
114
|
"options",
|
|
98
115
|
"output",
|
|
99
116
|
"ownerOnly",
|
|
@@ -109,11 +126,16 @@ export const GENERATED_ALLOWLISTED_FIELDS = [
|
|
|
109
126
|
"query",
|
|
110
127
|
"queryType",
|
|
111
128
|
"recordId",
|
|
129
|
+
"recordIds",
|
|
130
|
+
"records",
|
|
112
131
|
"ref",
|
|
113
132
|
"request",
|
|
133
|
+
"resourceId",
|
|
134
|
+
"resourceType",
|
|
114
135
|
"route",
|
|
115
136
|
"runIf",
|
|
116
137
|
"saveAs",
|
|
138
|
+
"schema",
|
|
117
139
|
"scope",
|
|
118
140
|
"selector",
|
|
119
141
|
"skipWhenSkipped",
|
|
@@ -121,6 +143,7 @@ export const GENERATED_ALLOWLISTED_FIELDS = [
|
|
|
121
143
|
"source",
|
|
122
144
|
"step",
|
|
123
145
|
"strict",
|
|
146
|
+
"strictParams",
|
|
124
147
|
"subject",
|
|
125
148
|
"successWhen",
|
|
126
149
|
"systemBypass",
|
|
@@ -130,6 +153,7 @@ export const GENERATED_ALLOWLISTED_FIELDS = [
|
|
|
130
153
|
"templateType",
|
|
131
154
|
"textBody",
|
|
132
155
|
"thinkingLevel",
|
|
156
|
+
"threadId",
|
|
133
157
|
"timeout",
|
|
134
158
|
"title",
|
|
135
159
|
"to",
|
|
@@ -140,8 +164,10 @@ export const GENERATED_ALLOWLISTED_FIELDS = [
|
|
|
140
164
|
"type",
|
|
141
165
|
"user",
|
|
142
166
|
"userId",
|
|
167
|
+
"userInfo",
|
|
143
168
|
"userUlid",
|
|
144
169
|
"variables",
|
|
170
|
+
"version",
|
|
145
171
|
"windowDays",
|
|
146
172
|
"with",
|
|
147
173
|
"workflowKey",
|
|
@@ -151,18 +177,29 @@ export const GENERATED_KNOWN_KINDS = [
|
|
|
151
177
|
"analytics.query",
|
|
152
178
|
"analytics.write",
|
|
153
179
|
"analytics.writeForUser",
|
|
180
|
+
"blob.delete",
|
|
154
181
|
"blob.download",
|
|
155
182
|
"blob.signedUrl",
|
|
156
183
|
"blob.upload",
|
|
184
|
+
"block.call",
|
|
157
185
|
"collect",
|
|
186
|
+
"collection.addDocument",
|
|
187
|
+
"collection.create",
|
|
188
|
+
"collection.delete",
|
|
189
|
+
"collection.grantGroupPermission",
|
|
190
|
+
"collection.removeDocument",
|
|
158
191
|
"create",
|
|
159
192
|
"database.aggregate",
|
|
160
193
|
"database.applyToQuery",
|
|
161
194
|
"database.count",
|
|
195
|
+
"database.create",
|
|
196
|
+
"database.delete",
|
|
162
197
|
"database.mutate",
|
|
163
198
|
"database.pipeline",
|
|
164
199
|
"database.query",
|
|
200
|
+
"database.syncIndexes",
|
|
165
201
|
"delay",
|
|
202
|
+
"document.bulkUpdate",
|
|
166
203
|
"document.count",
|
|
167
204
|
"document.delete",
|
|
168
205
|
"document.getForUser",
|
|
@@ -184,14 +221,20 @@ export const GENERATED_KNOWN_KINDS = [
|
|
|
184
221
|
"gemini.generateRaw",
|
|
185
222
|
"group.addMember",
|
|
186
223
|
"group.checkMembership",
|
|
224
|
+
"group.create",
|
|
225
|
+
"group.delete",
|
|
187
226
|
"group.listMembers",
|
|
188
227
|
"group.listUserMemberships",
|
|
228
|
+
"group.removeAll",
|
|
189
229
|
"group.removeMember",
|
|
190
230
|
"hash",
|
|
191
231
|
"integration.call",
|
|
192
232
|
"iterate-users",
|
|
193
233
|
"llm.chat",
|
|
234
|
+
"metadata.read",
|
|
235
|
+
"metadata.write",
|
|
194
236
|
"noop",
|
|
237
|
+
"notification.send",
|
|
195
238
|
"prompt.execute",
|
|
196
239
|
"render",
|
|
197
240
|
"script",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generated-allowlist.js","sourceRoot":"","sources":["../../../src/lib/generated-allowlist.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"generated-allowlist.js","sourceRoot":"","sources":["../../../src/lib/generated-allowlist.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { existsSync, readFileSync } from "fs";
|
|
2
2
|
import { join } from "path";
|
|
3
|
-
import
|
|
3
|
+
import { parseConfigToml } from "./config-toml.js";
|
|
4
4
|
export const INIT_CONFIG_FILENAME = ".primitive-init.toml";
|
|
5
5
|
/**
|
|
6
6
|
* Resolves the "use an existing app" app id from the two places it can be
|
|
@@ -26,7 +26,7 @@ export function resolveUseExistingAppId(flag, initConfig) {
|
|
|
26
26
|
* Throws if the string contains invalid TOML.
|
|
27
27
|
*/
|
|
28
28
|
export function parseInitConfigToml(content) {
|
|
29
|
-
const parsed =
|
|
29
|
+
const parsed = parseConfigToml(content);
|
|
30
30
|
// The cast is safe because validateInitConfig() is always called after parsing
|
|
31
31
|
return parsed;
|
|
32
32
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init-config.js","sourceRoot":"","sources":["../../../src/lib/init-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAC9C,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,
|
|
1
|
+
{"version":3,"file":"init-config.js","sourceRoot":"","sources":["../../../src/lib/init-config.ts"],"names":[],"mappings":"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"}
|
package/dist/src/lib/output.d.ts
CHANGED
|
@@ -2,17 +2,37 @@ export interface TableColumn {
|
|
|
2
2
|
header: string;
|
|
3
3
|
key: string;
|
|
4
4
|
width?: number;
|
|
5
|
+
/**
|
|
6
|
+
* Opt-in flexible sizing (#1065). When `true`, the column is sized from the
|
|
7
|
+
* remaining terminal width (`options.maxWidth ?? process.stdout.columns`)
|
|
8
|
+
* minus the sibling columns' widths and the inter-column padding, so the
|
|
9
|
+
* table shows as much of this column as fits **without wrapping**. Clamped to
|
|
10
|
+
* `[max(flexFloor, header length), flexMax]`. On a non-TTY (`maxWidth`
|
|
11
|
+
* undefined — piped/redirected) there is no width to wrap against, so the
|
|
12
|
+
* column is sized to `flexMax` (or its content width when `flexMax` is
|
|
13
|
+
* unset). Reading the terminal width is gated to flex columns: tables with no
|
|
14
|
+
* flex column never consult `process.stdout.columns` and stay byte-for-byte
|
|
15
|
+
* (and TTY-) unchanged.
|
|
16
|
+
*/
|
|
17
|
+
flex?: boolean;
|
|
18
|
+
/** Minimum width for a `flex` column. Default 0 (header length is always honored). */
|
|
19
|
+
flexFloor?: number;
|
|
20
|
+
/** Maximum width for a `flex` column. Default unbounded. */
|
|
21
|
+
flexMax?: number;
|
|
5
22
|
align?: "left" | "right" | "center";
|
|
6
23
|
format?: (value: any) => string;
|
|
7
24
|
/**
|
|
8
|
-
* Opt-in truncation. When `true` (and a
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
25
|
+
* Opt-in truncation. When `true` (and the column has a resolved width — a
|
|
26
|
+
* fixed `width` or a computed `flex` width), cell values longer than that
|
|
27
|
+
* width are ellipsized to fit the column so downstream columns stay aligned.
|
|
28
|
+
* Defaults to `false` so existing tables keep their current non-truncating
|
|
29
|
+
* behavior — only columns that explicitly opt in are clipped.
|
|
12
30
|
*/
|
|
13
31
|
truncate?: boolean;
|
|
14
32
|
}
|
|
15
|
-
export declare function formatTable(data: Record<string, any>[], columns: TableColumn[]
|
|
33
|
+
export declare function formatTable(data: Record<string, any>[], columns: TableColumn[], options?: {
|
|
34
|
+
maxWidth?: number;
|
|
35
|
+
}): string;
|
|
16
36
|
export declare function success(message: string): void;
|
|
17
37
|
export declare function error(message: string): void;
|
|
18
38
|
/**
|
package/dist/src/lib/output.js
CHANGED
|
@@ -18,7 +18,7 @@ function truncateToWidth(str, width) {
|
|
|
18
18
|
return ".".repeat(width);
|
|
19
19
|
return stripped.slice(0, width - 1) + "…";
|
|
20
20
|
}
|
|
21
|
-
export function formatTable(data, columns) {
|
|
21
|
+
export function formatTable(data, columns, options) {
|
|
22
22
|
if (data.length === 0) {
|
|
23
23
|
return chalk.dim("No results found.");
|
|
24
24
|
}
|
|
@@ -31,6 +31,33 @@ export function formatTable(data, columns) {
|
|
|
31
31
|
}));
|
|
32
32
|
return col.width ?? Math.max(headerWidth, maxDataWidth);
|
|
33
33
|
});
|
|
34
|
+
// Flex pass (#1065): size the first column marked `flex` from the remaining
|
|
35
|
+
// terminal width so the table shows as much as fits without ever wrapping.
|
|
36
|
+
// The sibling widths above are already content-derived, so subtracting their
|
|
37
|
+
// ACTUAL widths plus the exact `2 * (N - 1)` inter-column padding makes the
|
|
38
|
+
// no-wrap guarantee structural rather than maintained by hand. Gated to flex
|
|
39
|
+
// columns so non-flex tables never read `process.stdout.columns`.
|
|
40
|
+
const flexIndex = columns.findIndex((col) => col.flex);
|
|
41
|
+
if (flexIndex !== -1) {
|
|
42
|
+
const col = columns[flexIndex];
|
|
43
|
+
const floor = Math.max(col.flexFloor ?? 0, col.header.length);
|
|
44
|
+
const cap = col.flexMax ?? Infinity;
|
|
45
|
+
const maxWidth = options?.maxWidth ?? process.stdout.columns;
|
|
46
|
+
if (typeof maxWidth === "number") {
|
|
47
|
+
const siblingWidth = widths.reduce((sum, w, i) => (i === flexIndex ? sum : sum + w), 0);
|
|
48
|
+
const padding = 2 * (columns.length - 1);
|
|
49
|
+
const avail = maxWidth - siblingWidth - padding;
|
|
50
|
+
// Clamp to [floor, cap]; never below the floor (so the header/min content
|
|
51
|
+
// stays readable) and never negative.
|
|
52
|
+
widths[flexIndex] = Math.min(cap, Math.max(floor, avail));
|
|
53
|
+
}
|
|
54
|
+
else {
|
|
55
|
+
// Non-TTY (piped/redirected): no terminal width to wrap against. Show as
|
|
56
|
+
// much as the cap allows — full content up to the contract max — falling
|
|
57
|
+
// back to the content-derived width when no cap is set.
|
|
58
|
+
widths[flexIndex] = cap === Infinity ? widths[flexIndex] : cap;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
34
61
|
// Format header
|
|
35
62
|
const header = columns
|
|
36
63
|
.map((col, i) => {
|
|
@@ -44,9 +71,10 @@ export function formatTable(data, columns) {
|
|
|
44
71
|
const rows = data.map((row) => columns
|
|
45
72
|
.map((col, i) => {
|
|
46
73
|
let value = col.format ? col.format(row[col.key]) : String(row[col.key] ?? "");
|
|
47
|
-
// Opt-in: clip over-long cells to
|
|
48
|
-
//
|
|
49
|
-
|
|
74
|
+
// Opt-in: clip over-long cells to the column's resolved width (a fixed
|
|
75
|
+
// `width` or a computed `flex` width) so the columns that follow stay
|
|
76
|
+
// aligned (e.g. guides DESCRIPTION before LANGUAGES).
|
|
77
|
+
if (col.truncate && (col.width !== undefined || col.flex)) {
|
|
50
78
|
value = truncateToWidth(value, widths[i]);
|
|
51
79
|
}
|
|
52
80
|
return padString(value, widths[i], col.align ?? "left");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"output.js","sourceRoot":"","sources":["../../../src/lib/output.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"output.js","sourceRoot":"","sources":["../../../src/lib/output.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared constant for the query operators an operation `filter` may use,
|
|
3
|
+
* plus a helper to find operator keys that aren't in the supported set.
|
|
4
|
+
*
|
|
5
|
+
* Background (issue #1255): a database-operation `filter` uses Mongo-style
|
|
6
|
+
* operators (`$gte`, `$in`, ...). A typo like `$gt` → `$gte` or an invented
|
|
7
|
+
* `$foo` silently passes `sync push` (the server only validates `filter` is
|
|
8
|
+
* an object) and then throws `InvalidOperatorError` at *query execution*.
|
|
9
|
+
* The CLI can warn about unknown operators at push time so the author fixes
|
|
10
|
+
* it before it reaches runtime.
|
|
11
|
+
*
|
|
12
|
+
* The set mirrors the runtime translator
|
|
13
|
+
* (`packages/js-bao/src/query/JsonQueryTranslator.ts`): field operators
|
|
14
|
+
* (`translateFieldCondition` / substring ops) plus the two logical
|
|
15
|
+
* combinators special-cased in `translateFilter` (`$and` / `$or`).
|
|
16
|
+
*
|
|
17
|
+
* `$not` is intentionally NOT included — it is not a runtime operator; the
|
|
18
|
+
* translator only special-cases `$and` / `$or`, so `$not` would throw at
|
|
19
|
+
* execution just like any other unknown operator (codex review, #1255).
|
|
20
|
+
*
|
|
21
|
+
* This is deliberately a single source of truth so the validator and any
|
|
22
|
+
* future emitter/detector agree on what "known" means.
|
|
23
|
+
*/
|
|
24
|
+
/** Field-level comparison / membership / string operators. */
|
|
25
|
+
export declare const FIELD_QUERY_OPERATORS: readonly string[];
|
|
26
|
+
/** Logical combinators (arrays of sub-filters). */
|
|
27
|
+
export declare const LOGICAL_QUERY_OPERATORS: readonly string[];
|
|
28
|
+
/**
|
|
29
|
+
* Every operator the runtime query translator accepts. Any `$`-prefixed
|
|
30
|
+
* *key* inside a filter that is not in this set is unknown.
|
|
31
|
+
*/
|
|
32
|
+
export declare const SUPPORTED_QUERY_OPERATORS: ReadonlySet<string>;
|
|
33
|
+
/**
|
|
34
|
+
* Recursively collect the distinct `$`-prefixed *keys* used in a filter (or
|
|
35
|
+
* any nested value) that are not in {@link SUPPORTED_QUERY_OPERATORS}.
|
|
36
|
+
*
|
|
37
|
+
* Only object *keys* are considered operators — matching the runtime
|
|
38
|
+
* convention (`walk-operation.ts`: `$`-prefixed keys are operators). String
|
|
39
|
+
* *values* like `$params.activeSince` are substitution references, never
|
|
40
|
+
* operators, so they are never flagged. `$and` / `$or` values are arrays of
|
|
41
|
+
* sub-filter objects and are walked recursively.
|
|
42
|
+
*/
|
|
43
|
+
export declare function collectUnknownOperators(value: any): string[];
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared constant for the query operators an operation `filter` may use,
|
|
3
|
+
* plus a helper to find operator keys that aren't in the supported set.
|
|
4
|
+
*
|
|
5
|
+
* Background (issue #1255): a database-operation `filter` uses Mongo-style
|
|
6
|
+
* operators (`$gte`, `$in`, ...). A typo like `$gt` → `$gte` or an invented
|
|
7
|
+
* `$foo` silently passes `sync push` (the server only validates `filter` is
|
|
8
|
+
* an object) and then throws `InvalidOperatorError` at *query execution*.
|
|
9
|
+
* The CLI can warn about unknown operators at push time so the author fixes
|
|
10
|
+
* it before it reaches runtime.
|
|
11
|
+
*
|
|
12
|
+
* The set mirrors the runtime translator
|
|
13
|
+
* (`packages/js-bao/src/query/JsonQueryTranslator.ts`): field operators
|
|
14
|
+
* (`translateFieldCondition` / substring ops) plus the two logical
|
|
15
|
+
* combinators special-cased in `translateFilter` (`$and` / `$or`).
|
|
16
|
+
*
|
|
17
|
+
* `$not` is intentionally NOT included — it is not a runtime operator; the
|
|
18
|
+
* translator only special-cases `$and` / `$or`, so `$not` would throw at
|
|
19
|
+
* execution just like any other unknown operator (codex review, #1255).
|
|
20
|
+
*
|
|
21
|
+
* This is deliberately a single source of truth so the validator and any
|
|
22
|
+
* future emitter/detector agree on what "known" means.
|
|
23
|
+
*/
|
|
24
|
+
/** Field-level comparison / membership / string operators. */
|
|
25
|
+
export const FIELD_QUERY_OPERATORS = [
|
|
26
|
+
"$eq",
|
|
27
|
+
"$ne",
|
|
28
|
+
"$gt",
|
|
29
|
+
"$gte",
|
|
30
|
+
"$lt",
|
|
31
|
+
"$lte",
|
|
32
|
+
"$in",
|
|
33
|
+
"$nin",
|
|
34
|
+
"$exists",
|
|
35
|
+
"$contains",
|
|
36
|
+
"$startsWith",
|
|
37
|
+
"$endsWith",
|
|
38
|
+
"$containsText",
|
|
39
|
+
];
|
|
40
|
+
/** Logical combinators (arrays of sub-filters). */
|
|
41
|
+
export const LOGICAL_QUERY_OPERATORS = ["$and", "$or"];
|
|
42
|
+
/**
|
|
43
|
+
* Every operator the runtime query translator accepts. Any `$`-prefixed
|
|
44
|
+
* *key* inside a filter that is not in this set is unknown.
|
|
45
|
+
*/
|
|
46
|
+
export const SUPPORTED_QUERY_OPERATORS = new Set([
|
|
47
|
+
...FIELD_QUERY_OPERATORS,
|
|
48
|
+
...LOGICAL_QUERY_OPERATORS,
|
|
49
|
+
]);
|
|
50
|
+
/**
|
|
51
|
+
* Recursively collect the distinct `$`-prefixed *keys* used in a filter (or
|
|
52
|
+
* any nested value) that are not in {@link SUPPORTED_QUERY_OPERATORS}.
|
|
53
|
+
*
|
|
54
|
+
* Only object *keys* are considered operators — matching the runtime
|
|
55
|
+
* convention (`walk-operation.ts`: `$`-prefixed keys are operators). String
|
|
56
|
+
* *values* like `$params.activeSince` are substitution references, never
|
|
57
|
+
* operators, so they are never flagged. `$and` / `$or` values are arrays of
|
|
58
|
+
* sub-filter objects and are walked recursively.
|
|
59
|
+
*/
|
|
60
|
+
export function collectUnknownOperators(value) {
|
|
61
|
+
const unknown = new Set();
|
|
62
|
+
walk(value, unknown);
|
|
63
|
+
return [...unknown];
|
|
64
|
+
}
|
|
65
|
+
function walk(value, unknown) {
|
|
66
|
+
if (Array.isArray(value)) {
|
|
67
|
+
for (const item of value)
|
|
68
|
+
walk(item, unknown);
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
if (value !== null && typeof value === "object") {
|
|
72
|
+
for (const [key, child] of Object.entries(value)) {
|
|
73
|
+
if (key.startsWith("$") && !SUPPORTED_QUERY_OPERATORS.has(key)) {
|
|
74
|
+
unknown.add(key);
|
|
75
|
+
}
|
|
76
|
+
walk(child, unknown);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=query-operators.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query-operators.js","sourceRoot":"","sources":["../../../src/lib/query-operators.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,8DAA8D;AAC9D,MAAM,CAAC,MAAM,qBAAqB,GAAsB;IACtD,KAAK;IACL,KAAK;IACL,KAAK;IACL,MAAM;IACN,KAAK;IACL,MAAM;IACN,KAAK;IACL,MAAM;IACN,SAAS;IACT,WAAW;IACX,aAAa;IACb,WAAW;IACX,eAAe;CAChB,CAAC;AAEF,mDAAmD;AACnD,MAAM,CAAC,MAAM,uBAAuB,GAAsB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AAE1E;;;GAGG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAwB,IAAI,GAAG,CAAC;IACpE,GAAG,qBAAqB;IACxB,GAAG,uBAAuB;CAC3B,CAAC,CAAC;AAEH;;;;;;;;;GASG;AACH,MAAM,UAAU,uBAAuB,CAAC,KAAU;IAChD,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAClC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACrB,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC;AACtB,CAAC;AAED,SAAS,IAAI,CAAC,KAAU,EAAE,OAAoB;IAC5C,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,KAAK,MAAM,IAAI,IAAI,KAAK;YAAE,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC9C,OAAO;IACT,CAAC;IACD,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAChD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACjD,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,yBAAyB,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC/D,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACnB,CAAC;YACD,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;AACH,CAAC"}
|
|
@@ -14,15 +14,18 @@
|
|
|
14
14
|
* form ("legacy") or nested-table form ("native") for each of
|
|
15
15
|
* `definition` and `params`. This drives form preservation on
|
|
16
16
|
* `sync pull`.
|
|
17
|
-
* 2. `canEmitNative()` — recursively check whether a JS value
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
17
|
+
* 2. `canEmitNative()` — recursively check whether a JS value can be
|
|
18
|
+
* represented in TOML **without data loss**. Returns a reason string
|
|
19
|
+
* if not. Catches `null`/`undefined` (and arrays containing `null`),
|
|
20
|
+
* which every TOML serializer silently drops on write. Heterogeneous
|
|
21
|
+
* arrays are fine — the config round-trip uses `smol-toml` (TOML 1.0),
|
|
22
|
+
* which emits and re-parses them faithfully (issue #1450).
|
|
21
23
|
* 3. `buildDatabaseTypeTomlData()` — builds the JS object that we
|
|
22
|
-
* hand to `
|
|
24
|
+
* hand to `stringifyConfigToml`. Per operation, decides JSON-string vs
|
|
23
25
|
* native based on (existing form, can-emit, override mode).
|
|
24
26
|
*/
|
|
25
|
-
|
|
27
|
+
import { type FieldForm } from "./toml-native-form.js";
|
|
28
|
+
export { type FieldForm, classifyInlineFieldForm, canEmitNative, } from "./toml-native-form.js";
|
|
26
29
|
export interface OperationFormHints {
|
|
27
30
|
/** Map of op name → existing form for `definition`. Missing op = "default". */
|
|
28
31
|
definition: Map<string, FieldForm>;
|
|
@@ -39,18 +42,6 @@ export interface OperationFormHints {
|
|
|
39
42
|
* sub-header (native).
|
|
40
43
|
*/
|
|
41
44
|
export declare function detectExistingOperationForms(rawToml: string): OperationFormHints;
|
|
42
|
-
/**
|
|
43
|
-
* Recursively check whether a JS value can be safely serialized to TOML
|
|
44
|
-
* using `@iarna/toml`. Returns null if OK, a reason string otherwise.
|
|
45
|
-
*
|
|
46
|
-
* Things TOML can't represent (in `@iarna/toml`):
|
|
47
|
-
* - `null` (TOML has no null).
|
|
48
|
-
* - Arrays containing values of different "TOML types" (e.g. mixed
|
|
49
|
-
* string and number). Spec-wise TOML 1.0 actually allows this, but
|
|
50
|
-
* `@iarna/toml` is strict and throws.
|
|
51
|
-
* - `undefined` (different from null but equally not representable).
|
|
52
|
-
*/
|
|
53
|
-
export declare function canEmitNative(value: any): string | null;
|
|
54
45
|
/**
|
|
55
46
|
* Normalize a `params` value into a sorted array of
|
|
56
47
|
* `{ name, type, required, ... }` rows, suitable for emitting as
|
|
@@ -79,7 +70,7 @@ export interface BuildOptions {
|
|
|
79
70
|
subscriptions?: any[];
|
|
80
71
|
}
|
|
81
72
|
/**
|
|
82
|
-
* Build the JS object to pass to `
|
|
73
|
+
* Build the JS object to pass to `stringifyConfigToml` for a database-type
|
|
83
74
|
* config file. Per operation:
|
|
84
75
|
* - If the chosen form is "native" AND `definition` is TOML-emittable,
|
|
85
76
|
* emit `[operations.definition]` (nested table).
|