primitive-admin 1.0.43 → 1.0.45
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 +43 -0
- package/assets/skill/skills/primitive-platform/SKILL.md +85 -26
- package/dist/bin/primitive.js +6 -0
- package/dist/bin/primitive.js.map +1 -1
- package/dist/src/commands/analytics.js +16 -16
- package/dist/src/commands/analytics.js.map +1 -1
- package/dist/src/commands/apps.js +14 -14
- package/dist/src/commands/apps.js.map +1 -1
- package/dist/src/commands/auth.js +70 -20
- package/dist/src/commands/auth.js.map +1 -1
- package/dist/src/commands/blob-buckets.js +11 -11
- package/dist/src/commands/blob-buckets.js.map +1 -1
- package/dist/src/commands/catalog.js +17 -17
- package/dist/src/commands/catalog.js.map +1 -1
- package/dist/src/commands/collection-type-configs.js +5 -5
- package/dist/src/commands/collection-type-configs.js.map +1 -1
- package/dist/src/commands/collections.js +6 -6
- package/dist/src/commands/collections.js.map +1 -1
- package/dist/src/commands/comparisons.js +6 -6
- package/dist/src/commands/comparisons.js.map +1 -1
- package/dist/src/commands/cron-triggers.js +17 -17
- package/dist/src/commands/cron-triggers.js.map +1 -1
- package/dist/src/commands/database-types.js +13 -13
- package/dist/src/commands/database-types.js.map +1 -1
- package/dist/src/commands/databases.js +132 -8
- package/dist/src/commands/databases.js.map +1 -1
- package/dist/src/commands/email-templates.js +6 -6
- package/dist/src/commands/email-templates.js.map +1 -1
- package/dist/src/commands/env.js +6 -6
- package/dist/src/commands/env.js.map +1 -1
- package/dist/src/commands/group-type-configs.js +6 -6
- package/dist/src/commands/group-type-configs.js.map +1 -1
- package/dist/src/commands/groups.js +7 -7
- package/dist/src/commands/groups.js.map +1 -1
- package/dist/src/commands/init.js +175 -144
- package/dist/src/commands/init.js.map +1 -1
- package/dist/src/commands/integrations.js +31 -21
- package/dist/src/commands/integrations.js.map +1 -1
- package/dist/src/commands/prompts.js +17 -16
- package/dist/src/commands/prompts.js.map +1 -1
- package/dist/src/commands/rule-sets.js +8 -8
- package/dist/src/commands/rule-sets.js.map +1 -1
- package/dist/src/commands/sync.js +803 -275
- package/dist/src/commands/sync.js.map +1 -1
- package/dist/src/commands/tokens.js +9 -9
- package/dist/src/commands/tokens.js.map +1 -1
- package/dist/src/commands/users.js +44 -3
- package/dist/src/commands/users.js.map +1 -1
- package/dist/src/commands/webhooks.js +18 -18
- package/dist/src/commands/webhooks.js.map +1 -1
- package/dist/src/commands/workflows.js +273 -63
- package/dist/src/commands/workflows.js.map +1 -1
- package/dist/src/lib/api-client.js +240 -72
- package/dist/src/lib/api-client.js.map +1 -1
- package/dist/src/lib/migration-nag.js +163 -0
- package/dist/src/lib/migration-nag.js.map +1 -0
- package/dist/src/lib/output.js +58 -6
- package/dist/src/lib/output.js.map +1 -1
- package/dist/src/lib/refresh-admin-credentials.js +103 -0
- package/dist/src/lib/refresh-admin-credentials.js.map +1 -0
- package/dist/src/lib/template.js +80 -1
- package/dist/src/lib/template.js.map +1 -1
- package/dist/src/lib/toml-database-config.js +384 -0
- package/dist/src/lib/toml-database-config.js.map +1 -0
- package/dist/src/lib/toml-params-validator.js +183 -0
- package/dist/src/lib/toml-params-validator.js.map +1 -0
- package/dist/src/lib/workflow-fragments.js +121 -0
- package/dist/src/lib/workflow-fragments.js.map +1 -0
- package/dist/src/lib/workflow-toml-validator.js +328 -0
- package/dist/src/lib/workflow-toml-validator.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared helper for refreshing the admin access token via the CLI auth API.
|
|
3
|
+
*
|
|
4
|
+
* Why this module exists:
|
|
5
|
+
*
|
|
6
|
+
* - `ApiClient.refreshToken()` already POSTs to /admin/api/auth/refresh
|
|
7
|
+
* before every API call when the access token is near expiry.
|
|
8
|
+
* - `primitive token` (issue #772) now needs the same exchange so it can
|
|
9
|
+
* auto-refresh a stale token before printing it.
|
|
10
|
+
* - `primitive login --token-stdin` does the same POST a third time to
|
|
11
|
+
* bootstrap credentials from a refresh token piped from another CLI.
|
|
12
|
+
*
|
|
13
|
+
* Putting the HTTP exchange + response parsing in one place keeps the
|
|
14
|
+
* response-shape contract in a single spot (server returns both `jwt` and
|
|
15
|
+
* `accessToken` — see `src/index.ts:2349-2356`) and means future server
|
|
16
|
+
* changes to that endpoint require touching exactly one CLI file.
|
|
17
|
+
*
|
|
18
|
+
* Design notes:
|
|
19
|
+
*
|
|
20
|
+
* - This module **does not** depend on `api-client.ts`. `ApiClient` imports
|
|
21
|
+
* it, not the other way around — that prevents the avoidable module cycle
|
|
22
|
+
* codex flagged in the design review.
|
|
23
|
+
* - It defines its own `RefreshError` so callers can map failures to
|
|
24
|
+
* whatever error type (or exit code) makes sense for their surface.
|
|
25
|
+
* `ApiClient` translates these to `ApiError`; the `token` command
|
|
26
|
+
* translates them to an `error()` + `process.exit(1)`.
|
|
27
|
+
* - It **does not save** the refreshed credentials. The caller decides
|
|
28
|
+
* whether to persist (the `token` command does; `ApiClient.refreshToken`
|
|
29
|
+
* does). Keeping persistence caller-owned matches the existing
|
|
30
|
+
* "storage is owned by `credentials-store.ts`" convention.
|
|
31
|
+
* - It **does not print anything**. Output (success/failure messaging) is
|
|
32
|
+
* the caller's responsibility — important because the `token` command
|
|
33
|
+
* must keep stdout clean for piping.
|
|
34
|
+
*/
|
|
35
|
+
import { fetchWithTLS } from "./fetch.js";
|
|
36
|
+
export class RefreshError extends Error {
|
|
37
|
+
kind;
|
|
38
|
+
statusCode;
|
|
39
|
+
cause;
|
|
40
|
+
constructor(message, kind, statusCode, cause) {
|
|
41
|
+
super(message);
|
|
42
|
+
this.kind = kind;
|
|
43
|
+
this.statusCode = statusCode;
|
|
44
|
+
this.cause = cause;
|
|
45
|
+
this.name = "RefreshError";
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Exchange the stored refresh token for a fresh `accessToken`. Returns a new
|
|
50
|
+
* `Credentials` object — the caller is responsible for persistence via
|
|
51
|
+
* `saveCredentials()` (or whatever storage the caller owns).
|
|
52
|
+
*
|
|
53
|
+
* Server contract: `POST {serverUrl}/admin/api/auth/refresh` with
|
|
54
|
+
* { refreshToken: string }
|
|
55
|
+
* Response (200):
|
|
56
|
+
* { jwt, accessToken, refreshToken, expiresAt }
|
|
57
|
+
*
|
|
58
|
+
* We accept `accessToken` as the canonical field and fall back to `jwt` for
|
|
59
|
+
* forward-compat (the server currently emits both — see issue #772 codex
|
|
60
|
+
* cleanup #3). Login's legacy `data.token` form is dropped — no server
|
|
61
|
+
* version that's still in support emits that field.
|
|
62
|
+
*/
|
|
63
|
+
export async function refreshAdminCredentials(credentials) {
|
|
64
|
+
if (!credentials.refreshToken) {
|
|
65
|
+
throw new RefreshError("No refresh token available. Please login again.", "missing-refresh-token");
|
|
66
|
+
}
|
|
67
|
+
const url = `${credentials.serverUrl}/admin/api/auth/refresh`;
|
|
68
|
+
const headers = {
|
|
69
|
+
"Content-Type": "application/json",
|
|
70
|
+
};
|
|
71
|
+
if (credentials.globalAdminAppId) {
|
|
72
|
+
headers["X-Global-Admin-App-Id"] = credentials.globalAdminAppId;
|
|
73
|
+
}
|
|
74
|
+
let response;
|
|
75
|
+
try {
|
|
76
|
+
response = await fetchWithTLS(url, {
|
|
77
|
+
method: "POST",
|
|
78
|
+
headers,
|
|
79
|
+
body: JSON.stringify({ refreshToken: credentials.refreshToken }),
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
catch (cause) {
|
|
83
|
+
const reason = cause instanceof Error && cause.message
|
|
84
|
+
? cause.message
|
|
85
|
+
: String(cause);
|
|
86
|
+
throw new RefreshError(`Network error refreshing token: ${reason}.`, "network", undefined, cause);
|
|
87
|
+
}
|
|
88
|
+
if (!response.ok) {
|
|
89
|
+
throw new RefreshError("Refresh token expired. Run 'primitive login'.", "unauthorized", response.status);
|
|
90
|
+
}
|
|
91
|
+
const data = (await response.json());
|
|
92
|
+
const accessToken = data?.accessToken || data?.jwt;
|
|
93
|
+
if (!accessToken) {
|
|
94
|
+
throw new RefreshError("Refresh response did not include an access token. Run 'primitive login'.", "unauthorized", response.status);
|
|
95
|
+
}
|
|
96
|
+
return {
|
|
97
|
+
...credentials,
|
|
98
|
+
accessToken,
|
|
99
|
+
refreshToken: data.refreshToken || credentials.refreshToken,
|
|
100
|
+
expiresAt: data.expiresAt || new Date(Date.now() + 3600 * 1000).toISOString(),
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
//# sourceMappingURL=refresh-admin-credentials.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"refresh-admin-credentials.js","sourceRoot":"","sources":["../../../src/lib/refresh-admin-credentials.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAe1C,MAAM,OAAO,YAAa,SAAQ,KAAK;IAG5B;IACA;IACA;IAJT,YACE,OAAe,EACR,IAAwB,EACxB,UAAmB,EACnB,KAAe;QAEtB,KAAK,CAAC,OAAO,CAAC,CAAC;QAJR,SAAI,GAAJ,IAAI,CAAoB;QACxB,eAAU,GAAV,UAAU,CAAS;QACnB,UAAK,GAAL,KAAK,CAAU;QAGtB,IAAI,CAAC,IAAI,GAAG,cAAc,CAAC;IAC7B,CAAC;CACF;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,WAAwB;IAExB,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,CAAC;QAC9B,MAAM,IAAI,YAAY,CACpB,iDAAiD,EACjD,uBAAuB,CACxB,CAAC;IACJ,CAAC;IAED,MAAM,GAAG,GAAG,GAAG,WAAW,CAAC,SAAS,yBAAyB,CAAC;IAC9D,MAAM,OAAO,GAA2B;QACtC,cAAc,EAAE,kBAAkB;KACnC,CAAC;IACF,IAAI,WAAW,CAAC,gBAAgB,EAAE,CAAC;QACjC,OAAO,CAAC,uBAAuB,CAAC,GAAG,WAAW,CAAC,gBAAgB,CAAC;IAClE,CAAC;IAED,IAAI,QAAkD,CAAC;IACvD,IAAI,CAAC;QACH,QAAQ,GAAG,MAAM,YAAY,CAAC,GAAG,EAAE;YACjC,MAAM,EAAE,MAAM;YACd,OAAO;YACP,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,YAAY,EAAE,WAAW,CAAC,YAAY,EAAE,CAAC;SACjE,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,MAAM,GACV,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,OAAO;YACrC,CAAC,CAAC,KAAK,CAAC,OAAO;YACf,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACpB,MAAM,IAAI,YAAY,CACpB,mCAAmC,MAAM,GAAG,EAC5C,SAAS,EACT,SAAS,EACT,KAAK,CACN,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,IAAI,YAAY,CACpB,+CAA+C,EAC/C,cAAc,EACd,QAAQ,CAAC,MAAM,CAChB,CAAC;IACJ,CAAC;IAED,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAQ,CAAC;IAC5C,MAAM,WAAW,GAAuB,IAAI,EAAE,WAAW,IAAI,IAAI,EAAE,GAAG,CAAC;IACvE,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,MAAM,IAAI,YAAY,CACpB,0EAA0E,EAC1E,cAAc,EACd,QAAQ,CAAC,MAAM,CAChB,CAAC;IACJ,CAAC;IAED,OAAO;QACL,GAAG,WAAW;QACd,WAAW;QACX,YAAY,EAAE,IAAI,CAAC,YAAY,IAAI,WAAW,CAAC,YAAY;QAC3D,SAAS,EACP,IAAI,CAAC,SAAS,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,WAAW,EAAE;KACrE,CAAC;AACJ,CAAC"}
|
package/dist/src/lib/template.js
CHANGED
|
@@ -3,7 +3,23 @@ import { join } from "path";
|
|
|
3
3
|
import * as tar from "tar";
|
|
4
4
|
import { PRODUCTION_SERVER_URL } from "./constants.js";
|
|
5
5
|
const TEMPLATE_URL = "https://github.com/Primitive-Labs/primitive-app-template/archive/refs/heads/main.tar.gz";
|
|
6
|
+
const IOS_TEMPLATE_URL = "https://api.github.com/repos/Primitive-Labs/primitive-ios-template/tarball/main";
|
|
6
7
|
const DOWNLOAD_TIMEOUT_MS = 30000; // 30 seconds
|
|
8
|
+
/**
|
|
9
|
+
* Tries to get a GitHub token from the gh CLI for authenticated downloads.
|
|
10
|
+
* Returns null if gh is not installed or not authenticated.
|
|
11
|
+
*/
|
|
12
|
+
async function getGitHubToken() {
|
|
13
|
+
const { execSync } = await import("child_process");
|
|
14
|
+
try {
|
|
15
|
+
return execSync("gh auth token", { stdio: ["ignore", "pipe", "ignore"] })
|
|
16
|
+
.toString()
|
|
17
|
+
.trim();
|
|
18
|
+
}
|
|
19
|
+
catch {
|
|
20
|
+
return null;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
7
23
|
/**
|
|
8
24
|
* Check if a directory is empty.
|
|
9
25
|
*/
|
|
@@ -28,7 +44,16 @@ export async function downloadAndExtractTemplate(options) {
|
|
|
28
44
|
const timeout = setTimeout(() => controller.abort(), DOWNLOAD_TIMEOUT_MS);
|
|
29
45
|
let response;
|
|
30
46
|
try {
|
|
31
|
-
|
|
47
|
+
const url = options.templateUrl || TEMPLATE_URL;
|
|
48
|
+
const headers = {
|
|
49
|
+
"User-Agent": "primitive-cli",
|
|
50
|
+
};
|
|
51
|
+
// For private repos, use GitHub token if available (from gh CLI)
|
|
52
|
+
const ghToken = await getGitHubToken();
|
|
53
|
+
if (ghToken) {
|
|
54
|
+
headers["Authorization"] = `token ${ghToken}`;
|
|
55
|
+
}
|
|
56
|
+
response = await fetch(url, { signal: controller.signal, headers });
|
|
32
57
|
}
|
|
33
58
|
catch (err) {
|
|
34
59
|
clearTimeout(timeout);
|
|
@@ -379,6 +404,60 @@ export async function findDevPort(startPort = 5173, maxChecks = 10) {
|
|
|
379
404
|
// All checked ports were occupied — best guess is the next one
|
|
380
405
|
return { availablePort: startPort + maxChecks, takenPorts, exhausted: true };
|
|
381
406
|
}
|
|
407
|
+
// ── iOS template helpers ──────────────────────────────────────────────
|
|
408
|
+
export { IOS_TEMPLATE_URL };
|
|
409
|
+
/**
|
|
410
|
+
* Updates primitive.json in the iOS template with app ID, server URL, and app name.
|
|
411
|
+
* Replaces __PRIMITIVE_*__ placeholder values.
|
|
412
|
+
* Returns true if the file was found and updated.
|
|
413
|
+
*/
|
|
414
|
+
export function updatePrimitiveJson(targetDir, appId, serverUrl, appName) {
|
|
415
|
+
const jsonPath = join(targetDir, "primitive.json");
|
|
416
|
+
if (!existsSync(jsonPath))
|
|
417
|
+
return false;
|
|
418
|
+
let content = readFileSync(jsonPath, "utf-8");
|
|
419
|
+
content = content.replace(/__PRIMITIVE_APP_ID__/g, appId);
|
|
420
|
+
content = content.replace(/__PRIMITIVE_SERVER_URL__/g, serverUrl.replace(/\/+$/, ""));
|
|
421
|
+
if (appName) {
|
|
422
|
+
content = content.replace(/__PRIMITIVE_APP_NAME__/g, appName);
|
|
423
|
+
}
|
|
424
|
+
writeFileSync(jsonPath, content);
|
|
425
|
+
return true;
|
|
426
|
+
}
|
|
427
|
+
/**
|
|
428
|
+
* Checks if Xcode command-line tools are installed.
|
|
429
|
+
*/
|
|
430
|
+
export async function isXcodeInstalled() {
|
|
431
|
+
const { execSync } = await import("child_process");
|
|
432
|
+
try {
|
|
433
|
+
execSync("xcodebuild -version", { stdio: "ignore" });
|
|
434
|
+
return true;
|
|
435
|
+
}
|
|
436
|
+
catch {
|
|
437
|
+
return false;
|
|
438
|
+
}
|
|
439
|
+
}
|
|
440
|
+
/**
|
|
441
|
+
* Runs `swift package resolve` in the target directory to download SPM dependencies.
|
|
442
|
+
*/
|
|
443
|
+
export async function runSwiftPackageResolve(targetDir) {
|
|
444
|
+
const { spawn } = await import("child_process");
|
|
445
|
+
return new Promise((resolve, reject) => {
|
|
446
|
+
const proc = spawn("swift", ["package", "resolve"], {
|
|
447
|
+
cwd: targetDir,
|
|
448
|
+
stdio: "inherit",
|
|
449
|
+
});
|
|
450
|
+
proc.on("close", (code) => {
|
|
451
|
+
if (code === 0) {
|
|
452
|
+
resolve();
|
|
453
|
+
}
|
|
454
|
+
else {
|
|
455
|
+
reject(new Error(`swift package resolve exited with code ${code}`));
|
|
456
|
+
}
|
|
457
|
+
});
|
|
458
|
+
proc.on("error", reject);
|
|
459
|
+
});
|
|
460
|
+
}
|
|
382
461
|
/**
|
|
383
462
|
* Installs the primitive CLI (primitive-admin) globally using npm.
|
|
384
463
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"template.js","sourceRoot":"","sources":["../../../src/lib/template.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"template.js","sourceRoot":"","sources":["../../../src/lib/template.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,384 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Helpers for emitting `DatabaseTypeOperation` configs as native TOML.
|
|
3
|
+
*
|
|
4
|
+
* Background (issue #752): historically `sync pull` serialized
|
|
5
|
+
* `definition` and `params` as JSON strings stuffed into a single TOML
|
|
6
|
+
* field, which produced unreviewable 800-char one-liners. This module
|
|
7
|
+
* lets us emit them as nested TOML tables when they're representable,
|
|
8
|
+
* while preserving the existing file's shape so we don't generate
|
|
9
|
+
* surprise diffs.
|
|
10
|
+
*
|
|
11
|
+
* Three responsibilities:
|
|
12
|
+
* 1. `detectExistingOperationForms()` — read the raw TOML source and
|
|
13
|
+
* decide, per operation name, whether the file uses JSON-string
|
|
14
|
+
* form ("legacy") or nested-table form ("native") for each of
|
|
15
|
+
* `definition` and `params`. This drives form preservation on
|
|
16
|
+
* `sync pull`.
|
|
17
|
+
* 2. `canEmitNative()` — recursively check whether a JS value is
|
|
18
|
+
* representable as a TOML value. Returns a reason string if not.
|
|
19
|
+
* Mainly catches `null` and mixed-type arrays, which `@iarna/toml`
|
|
20
|
+
* either rejects or silently mangles.
|
|
21
|
+
* 3. `buildDatabaseTypeTomlData()` — builds the JS object that we
|
|
22
|
+
* hand to `TOML.stringify`. Per operation, decides JSON-string vs
|
|
23
|
+
* native based on (existing form, can-emit, override mode).
|
|
24
|
+
*/
|
|
25
|
+
import * as TOML from "@iarna/toml";
|
|
26
|
+
/**
|
|
27
|
+
* Inspect the raw TOML source for a database-type file and decide which
|
|
28
|
+
* form each operation's `definition`/`params` currently use.
|
|
29
|
+
*
|
|
30
|
+
* Detection is intentionally simple: we walk `[[operations]]` blocks in
|
|
31
|
+
* source order and, for each one, look for either a `definition = '...'`
|
|
32
|
+
* line (legacy) or an `[operations.definition]` / `[operations.definition.X]`
|
|
33
|
+
* sub-header (native).
|
|
34
|
+
*/
|
|
35
|
+
export function detectExistingOperationForms(rawToml) {
|
|
36
|
+
const lines = rawToml.split(/\r?\n/);
|
|
37
|
+
const operations = [];
|
|
38
|
+
let current = null;
|
|
39
|
+
// `inSubTable` flips to true the moment we descend into a sub-table of
|
|
40
|
+
// the current operation (e.g. `[operations.definition]` or
|
|
41
|
+
// `[[operations.params]]`). Once true, subsequent `name = "..."` /
|
|
42
|
+
// `definition = "..."` / `params = "..."` lines belong to the sub-table,
|
|
43
|
+
// not to the operation itself, so we must not let them overwrite the
|
|
44
|
+
// op-level fields (review feedback r3246634568).
|
|
45
|
+
let inSubTable = false;
|
|
46
|
+
for (const rawLine of lines) {
|
|
47
|
+
const line = rawLine.trim();
|
|
48
|
+
if (line === "[[operations]]") {
|
|
49
|
+
if (current)
|
|
50
|
+
operations.push(current);
|
|
51
|
+
current = { name: null, definition: null, params: null };
|
|
52
|
+
inSubTable = false;
|
|
53
|
+
continue;
|
|
54
|
+
}
|
|
55
|
+
if (!current)
|
|
56
|
+
continue;
|
|
57
|
+
// Sub-header for this op's definition or params.
|
|
58
|
+
if (/^\[operations\.definition(\..+)?\]/.test(line) || /^\[\[operations\.definition\..+\]\]/.test(line)) {
|
|
59
|
+
if (current.definition === null)
|
|
60
|
+
current.definition = "native";
|
|
61
|
+
inSubTable = true;
|
|
62
|
+
continue;
|
|
63
|
+
}
|
|
64
|
+
if (/^\[\[operations\.params\]\]/.test(line) || /^\[operations\.params(\..+)?\]/.test(line)) {
|
|
65
|
+
if (current.params === null)
|
|
66
|
+
current.params = "native";
|
|
67
|
+
inSubTable = true;
|
|
68
|
+
continue;
|
|
69
|
+
}
|
|
70
|
+
// A new top-level array-of-tables block ends the operation's scope
|
|
71
|
+
// for our purposes. We don't fully parse TOML here; we just stop
|
|
72
|
+
// ascribing later lines to this op.
|
|
73
|
+
if (/^\[\[/.test(line) && !line.startsWith("[[operations.")) {
|
|
74
|
+
operations.push(current);
|
|
75
|
+
current = null;
|
|
76
|
+
inSubTable = false;
|
|
77
|
+
continue;
|
|
78
|
+
}
|
|
79
|
+
if (/^\[/.test(line) && !line.startsWith("[operations.")) {
|
|
80
|
+
operations.push(current);
|
|
81
|
+
current = null;
|
|
82
|
+
inSubTable = false;
|
|
83
|
+
continue;
|
|
84
|
+
}
|
|
85
|
+
// Op-level fields. Skip if we've already descended into a sub-table —
|
|
86
|
+
// a `name = "id"` inside `[[operations.params]]` belongs to the param,
|
|
87
|
+
// not to the operation. Same for any other key we recognize here.
|
|
88
|
+
if (inSubTable)
|
|
89
|
+
continue;
|
|
90
|
+
const m = line.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\s*=\s*(.*)$/);
|
|
91
|
+
if (!m)
|
|
92
|
+
continue;
|
|
93
|
+
const key = m[1];
|
|
94
|
+
const value = m[2];
|
|
95
|
+
if (key === "name") {
|
|
96
|
+
const nameMatch = value.match(/^["'](.+)["']\s*$/);
|
|
97
|
+
if (nameMatch)
|
|
98
|
+
current.name = nameMatch[1];
|
|
99
|
+
}
|
|
100
|
+
else if (key === "definition" && current.definition === null) {
|
|
101
|
+
current.definition = "legacy";
|
|
102
|
+
}
|
|
103
|
+
else if (key === "params" && current.params === null) {
|
|
104
|
+
current.params = "legacy";
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
if (current)
|
|
108
|
+
operations.push(current);
|
|
109
|
+
const definition = new Map();
|
|
110
|
+
const params = new Map();
|
|
111
|
+
for (const op of operations) {
|
|
112
|
+
if (!op.name)
|
|
113
|
+
continue;
|
|
114
|
+
if (op.definition)
|
|
115
|
+
definition.set(op.name, op.definition);
|
|
116
|
+
if (op.params)
|
|
117
|
+
params.set(op.name, op.params);
|
|
118
|
+
}
|
|
119
|
+
return { definition, params };
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Recursively check whether a JS value can be safely serialized to TOML
|
|
123
|
+
* using `@iarna/toml`. Returns null if OK, a reason string otherwise.
|
|
124
|
+
*
|
|
125
|
+
* Things TOML can't represent (in `@iarna/toml`):
|
|
126
|
+
* - `null` (TOML has no null).
|
|
127
|
+
* - Arrays containing values of different "TOML types" (e.g. mixed
|
|
128
|
+
* string and number). Spec-wise TOML 1.0 actually allows this, but
|
|
129
|
+
* `@iarna/toml` is strict and throws.
|
|
130
|
+
* - `undefined` (different from null but equally not representable).
|
|
131
|
+
*/
|
|
132
|
+
export function canEmitNative(value) {
|
|
133
|
+
if (value === null)
|
|
134
|
+
return "value is null";
|
|
135
|
+
if (value === undefined)
|
|
136
|
+
return "value is undefined";
|
|
137
|
+
if (Array.isArray(value)) {
|
|
138
|
+
if (value.length > 0) {
|
|
139
|
+
const types = new Set();
|
|
140
|
+
for (const item of value) {
|
|
141
|
+
if (item === null)
|
|
142
|
+
return "array contains null";
|
|
143
|
+
if (Array.isArray(item))
|
|
144
|
+
types.add("array");
|
|
145
|
+
else
|
|
146
|
+
types.add(typeof item);
|
|
147
|
+
}
|
|
148
|
+
if (types.size > 1) {
|
|
149
|
+
return `array contains mixed types (${[...types].sort().join(", ")})`;
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
for (const item of value) {
|
|
153
|
+
const sub = canEmitNative(item);
|
|
154
|
+
if (sub)
|
|
155
|
+
return sub;
|
|
156
|
+
}
|
|
157
|
+
return null;
|
|
158
|
+
}
|
|
159
|
+
if (typeof value === "object") {
|
|
160
|
+
for (const v of Object.values(value)) {
|
|
161
|
+
const sub = canEmitNative(v);
|
|
162
|
+
if (sub)
|
|
163
|
+
return sub;
|
|
164
|
+
}
|
|
165
|
+
return null;
|
|
166
|
+
}
|
|
167
|
+
// primitives: string, number, boolean.
|
|
168
|
+
return null;
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Normalize a `params` value into a sorted array of
|
|
172
|
+
* `{ name, type, required, ... }` rows, suitable for emitting as
|
|
173
|
+
* `[[operations.params]]`. Accepts both shapes the wire/parser supports:
|
|
174
|
+
* - object form: `{ projectId: { type: "string", required: true } }`
|
|
175
|
+
* - array form: `[{ name: "projectId", type: "string", required: true }]`
|
|
176
|
+
*/
|
|
177
|
+
export function normalizeParamsToArray(params) {
|
|
178
|
+
if (params == null)
|
|
179
|
+
return null;
|
|
180
|
+
if (Array.isArray(params)) {
|
|
181
|
+
return params
|
|
182
|
+
.map((p) => ({ ...p }))
|
|
183
|
+
.filter((p) => p && typeof p === "object");
|
|
184
|
+
}
|
|
185
|
+
if (typeof params === "object") {
|
|
186
|
+
return Object.entries(params).map(([name, spec]) => ({
|
|
187
|
+
name,
|
|
188
|
+
...(spec && typeof spec === "object" ? spec : {}),
|
|
189
|
+
}));
|
|
190
|
+
}
|
|
191
|
+
return null;
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Default form for a new operation (no existing form hint): native.
|
|
195
|
+
* That matches the issue's "new file from server → native by default"
|
|
196
|
+
* requirement.
|
|
197
|
+
*/
|
|
198
|
+
const DEFAULT_FORM = "native";
|
|
199
|
+
/**
|
|
200
|
+
* Build the JS object to pass to `TOML.stringify` for a database-type
|
|
201
|
+
* config file. Per operation:
|
|
202
|
+
* - If the chosen form is "native" AND `definition` is TOML-emittable,
|
|
203
|
+
* emit `[operations.definition]` (nested table).
|
|
204
|
+
* - Else emit `definition = '<json string>'` and log a message.
|
|
205
|
+
* - Same logic independently for `params`, but the native form for
|
|
206
|
+
* params is `[[operations.params]]` (array-of-tables).
|
|
207
|
+
*/
|
|
208
|
+
export function buildDatabaseTypeTomlData(typeConfig, operations, ruleSetIdToName, options = {}) {
|
|
209
|
+
const hints = options.hints;
|
|
210
|
+
const defaultForm = options.defaultForm ?? DEFAULT_FORM;
|
|
211
|
+
const log = options.logger ?? (() => { });
|
|
212
|
+
// Prefer the parsed-from-key-based-reference name when present
|
|
213
|
+
// (`_ruleSetName` is set by `parseDatabaseTypeToml` when the source TOML
|
|
214
|
+
// uses the modern `ruleSetName = "..."` form). This makes the
|
|
215
|
+
// parse → serialize cycle a no-op for the rule-set field even when the
|
|
216
|
+
// caller passes an empty `ruleSetIdToName` map (e.g. `sync migrate-toml`,
|
|
217
|
+
// review feedback r3246633010).
|
|
218
|
+
let ruleSetName = "";
|
|
219
|
+
if (typeConfig._ruleSetName) {
|
|
220
|
+
ruleSetName = typeConfig._ruleSetName;
|
|
221
|
+
}
|
|
222
|
+
else if (typeConfig.ruleSetId) {
|
|
223
|
+
ruleSetName = ruleSetIdToName.get(typeConfig.ruleSetId) || "";
|
|
224
|
+
}
|
|
225
|
+
const data = {
|
|
226
|
+
type: {
|
|
227
|
+
databaseType: typeConfig.databaseType,
|
|
228
|
+
ruleSetName,
|
|
229
|
+
},
|
|
230
|
+
};
|
|
231
|
+
if (typeConfig.metadataAccess) {
|
|
232
|
+
data.type.celContextAccess = typeConfig.metadataAccess;
|
|
233
|
+
}
|
|
234
|
+
if (typeConfig.defaultAccess) {
|
|
235
|
+
data.type.defaultAccess = typeConfig.defaultAccess;
|
|
236
|
+
}
|
|
237
|
+
if (typeConfig.autoPopulatedFields) {
|
|
238
|
+
data.type.autoPopulatedFields = typeConfig.autoPopulatedFields;
|
|
239
|
+
}
|
|
240
|
+
if (typeConfig.triggers) {
|
|
241
|
+
data.triggers = typeConfig.triggers;
|
|
242
|
+
}
|
|
243
|
+
// Issue #666: inline schema TOML. The server-side `schema` field is a raw
|
|
244
|
+
// TOML string of `[models.*.fields.*]` blocks. Parse + merge into the same
|
|
245
|
+
// TOML object so the result serializes as `[models.<Name>.fields.<field>]`
|
|
246
|
+
// headers (matches the round-2 plan-of-record CLI sync layout).
|
|
247
|
+
if (typeConfig.schema && typeof typeConfig.schema === "string") {
|
|
248
|
+
try {
|
|
249
|
+
const parsedSchema = TOML.parse(typeConfig.schema);
|
|
250
|
+
if (parsedSchema?.models) {
|
|
251
|
+
data.models = parsedSchema.models;
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
catch {
|
|
255
|
+
// If the stored TOML is malformed (operationally surprising), don't
|
|
256
|
+
// crash the serializer — fall through without the models block.
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
if (operations.length === 0)
|
|
260
|
+
return data;
|
|
261
|
+
data.operations = operations.map((op) => {
|
|
262
|
+
const opRow = {
|
|
263
|
+
name: op.name,
|
|
264
|
+
type: op.type,
|
|
265
|
+
modelName: op.modelName,
|
|
266
|
+
};
|
|
267
|
+
if (op.access) {
|
|
268
|
+
opRow.access = op.access;
|
|
269
|
+
}
|
|
270
|
+
// ---- definition ----
|
|
271
|
+
const defForm = hints?.definition.get(op.name) ?? defaultForm;
|
|
272
|
+
const defValue = typeof op.definition === "string"
|
|
273
|
+
? safeParseJson(op.definition)
|
|
274
|
+
: op.definition;
|
|
275
|
+
let definitionEmitted = false;
|
|
276
|
+
if (defForm === "native" && defValue && typeof defValue === "object") {
|
|
277
|
+
const reason = canEmitNative(defValue);
|
|
278
|
+
if (reason) {
|
|
279
|
+
log(`Operation '${op.name}': cannot emit \`definition\` as native TOML (${reason}); falling back to JSON string for this field.`);
|
|
280
|
+
}
|
|
281
|
+
else {
|
|
282
|
+
opRow.definition = defValue;
|
|
283
|
+
definitionEmitted = true;
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
if (!definitionEmitted) {
|
|
287
|
+
opRow.definition = typeof op.definition === "object"
|
|
288
|
+
? JSON.stringify(op.definition)
|
|
289
|
+
: op.definition;
|
|
290
|
+
}
|
|
291
|
+
// ---- params ----
|
|
292
|
+
if (op.params != null) {
|
|
293
|
+
const paramsForm = hints?.params.get(op.name) ?? defaultForm;
|
|
294
|
+
let paramsEmitted = false;
|
|
295
|
+
if (paramsForm === "native") {
|
|
296
|
+
const paramsParsed = typeof op.params === "string"
|
|
297
|
+
? safeParseJson(op.params)
|
|
298
|
+
: op.params;
|
|
299
|
+
const paramsArray = normalizeParamsToArray(paramsParsed);
|
|
300
|
+
if (paramsArray && paramsArray.length > 0) {
|
|
301
|
+
const reason = canEmitNative(paramsArray);
|
|
302
|
+
if (reason) {
|
|
303
|
+
log(`Operation '${op.name}': cannot emit \`params\` as native TOML (${reason}); falling back to JSON string for this field.`);
|
|
304
|
+
}
|
|
305
|
+
else {
|
|
306
|
+
opRow.params = paramsArray;
|
|
307
|
+
paramsEmitted = true;
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
else if (paramsArray && paramsArray.length === 0) {
|
|
311
|
+
// Empty params: skip entirely rather than emitting an empty table.
|
|
312
|
+
paramsEmitted = true;
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
if (!paramsEmitted) {
|
|
316
|
+
opRow.params = typeof op.params === "object"
|
|
317
|
+
? JSON.stringify(op.params)
|
|
318
|
+
: op.params;
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
return opRow;
|
|
322
|
+
});
|
|
323
|
+
return data;
|
|
324
|
+
}
|
|
325
|
+
function safeParseJson(s) {
|
|
326
|
+
try {
|
|
327
|
+
return JSON.parse(s);
|
|
328
|
+
}
|
|
329
|
+
catch {
|
|
330
|
+
return s;
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
/**
|
|
334
|
+
* After parsing TOML, normalize the `definition` and `params` of each
|
|
335
|
+
* operation row into the JS objects the server expects. Handles both
|
|
336
|
+
* native and legacy forms transparently. The server payload is the
|
|
337
|
+
* source of truth; native TOML is purely a source-control affordance.
|
|
338
|
+
*
|
|
339
|
+
* Mirrors `parseDatabaseTypeToml` in `sync.ts`, but is broken out here
|
|
340
|
+
* so the migrate-toml command can call it without re-implementing.
|
|
341
|
+
*/
|
|
342
|
+
export function normalizeOperationFromToml(op) {
|
|
343
|
+
const normalized = {
|
|
344
|
+
name: op.name,
|
|
345
|
+
type: op.type,
|
|
346
|
+
modelName: op.modelName,
|
|
347
|
+
// `access` is optional — when the parent type sets `defaultAccess`,
|
|
348
|
+
// an operation may inherit by omitting this key. Keep null so the
|
|
349
|
+
// server-side controller decides whether to require it.
|
|
350
|
+
access: op.access ?? null,
|
|
351
|
+
};
|
|
352
|
+
if (typeof op.definition === "string") {
|
|
353
|
+
normalized.definition = safeParseJson(op.definition);
|
|
354
|
+
}
|
|
355
|
+
else {
|
|
356
|
+
// Preserve undefined-vs-set parity with the legacy parser by always
|
|
357
|
+
// assigning the key.
|
|
358
|
+
normalized.definition = op.definition;
|
|
359
|
+
}
|
|
360
|
+
if (op.params != null) {
|
|
361
|
+
if (typeof op.params === "string") {
|
|
362
|
+
normalized.params = safeParseJson(op.params);
|
|
363
|
+
}
|
|
364
|
+
else if (Array.isArray(op.params)) {
|
|
365
|
+
// Convert array form back into object form for the server payload.
|
|
366
|
+
const obj = {};
|
|
367
|
+
for (const row of op.params) {
|
|
368
|
+
if (!row || typeof row !== "object" || !row.name)
|
|
369
|
+
continue;
|
|
370
|
+
const { name, ...rest } = row;
|
|
371
|
+
obj[name] = rest;
|
|
372
|
+
}
|
|
373
|
+
normalized.params = obj;
|
|
374
|
+
}
|
|
375
|
+
else if (typeof op.params === "object") {
|
|
376
|
+
normalized.params = op.params;
|
|
377
|
+
}
|
|
378
|
+
}
|
|
379
|
+
else {
|
|
380
|
+
normalized.params = null;
|
|
381
|
+
}
|
|
382
|
+
return normalized;
|
|
383
|
+
}
|
|
384
|
+
//# sourceMappingURL=toml-database-config.js.map
|