@koda-sl/baker-cli 0.373.0 → 0.374.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/README.md +4 -1
- package/dist/cli.js +105 -33
- package/dist/cli.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1306,6 +1306,9 @@ baker analytics map --platform google --set kw=keyword # name a parameter, se
|
|
|
1306
1306
|
baker analytics map --platform google --remove kw # take that answer back
|
|
1307
1307
|
baker analytics conversions # what counts, what each produced, and which Forms count nothing
|
|
1308
1308
|
baker analytics conversions --candidates --output md # everything these pages do, and which of it is counted, as tables
|
|
1309
|
+
baker analytics conversions --candidates # the same as compact JSON: one line per page event, Form keys folded onto `flows`
|
|
1310
|
+
baker analytics conversions --candidates --flow contact # only that Form's event keys, one line each
|
|
1311
|
+
baker analytics conversions --candidates --full --output json # every field of every candidate, Form keys unfolded
|
|
1309
1312
|
baker analytics conversions --flow contact # one Form's endings as event keys, traffic or not
|
|
1310
1313
|
baker analytics conversions --event page:request_demo --name "Demo requested"
|
|
1311
1314
|
baker analytics conversions --event page:a --event submit:b --name "Lead" # both, as one number
|
|
@@ -1357,7 +1360,7 @@ Shared flags: `--days <n>` (default 30) or `--start-date` / `--end-date` (`YYYY-
|
|
|
1357
1360
|
|
|
1358
1361
|
**Paging the list reports.** `people`, `submissions` and `delivery` are lists of individual things rather than breakdowns — `delivery` and `submissions` are the ones the CLI exposes, `people` backs the People section of the dashboard's landing Analytics screen over the same wire — and only they take `--page <n>` (1-based) and `--page-size <n>` (up to 200, default 50). The response carries `pageInfo` with `hasMore` — when it is true there **are** more rows, so a total must never be reported from one page. Pass neither flag and a list comes back at the size it always did. A value that is not a whole positive number (`--page /pricing`) is refused before any request, naming `--landing` as the flag that narrows a report to one page of the site.
|
|
1359
1362
|
|
|
1360
|
-
**A conversion is a company-level named event, not a property of a Form.** `baker analytics conversions` is the only place "what counts" is decided, and an empty `definitions` list means every conversion number in every other report is zero — not because nobody converted, but because nothing is named as an outcome and Baker never guesses which event is the point of a page. `--candidates` lists every event these pages actually produced — each Form step and trigger, every `data-baker-*` event, every outbound destination — with volume and whether it is already counted; that list is where an event key comes from, so never invent one. `--event <key> --name "Booked a call"` starts counting it **immediately and retroactively**: the whole stored history is rescored, so naming the right event today also fixes last month. Nothing here is staged and publishing is not involved. Two events given the same `--name` become one row and one number, which is how a call booked on three different Forms reads as one outcome. `--count-mode every_time` is for the outcomes people genuinely repeat (a guide downloaded twice is two downloads); the default counts once per visit.
|
|
1363
|
+
**A conversion is a company-level named event, not a property of a Form.** `baker analytics conversions` is the only place "what counts" is decided, and an empty `definitions` list means every conversion number in every other report is zero — not because nobody converted, but because nothing is named as an outcome and Baker never guesses which event is the point of a page. `--candidates` lists every event these pages actually produced — each Form step and trigger, every `data-baker-*` event, every outbound destination — with volume and whether it is already counted; that list is where an event key comes from, so never invent one. The JSON is compact by default: each page or system event is one line (`eventKey`, `events`, `sessions`, `countedAs` when counted), and a Form's keys fold onto its `flows` row as `keys` fired and `events` — dropping that row's empty `counted` and `noConversion` — or onto a `formCandidates` row for a Form not in `flows`. `--candidates --flow <slug>` narrows the list to that Form's keys, and `--full` returns every field (`origin`, `nodeType`, `flowSlug`, `lastSeen`, `sources`, `doors`) of every key, unfolded. `--output md` always folds a Form's keys into one row per Form. `--event <key> --name "Booked a call"` starts counting it **immediately and retroactively**: the whole stored history is rescored, so naming the right event today also fixes last month. Nothing here is staged and publishing is not involved. Two events given the same `--name` become one row and one number, which is how a call booked on three different Forms reads as one outcome. `--count-mode every_time` is for the outcomes people genuinely repeat (a guide downloaded twice is two downloads); the default counts once per visit.
|
|
1361
1364
|
|
|
1362
1365
|
**The name is the grouping, so the CLI defends it.** Repeat `--event` to count several events under one `--name` in a single call; `--rename "<old>" --to "<new>"` renames every event under an outcome, and renaming *onto* a name that already exists **merges** them into one row and one number — the fix for a company whose Forms each invented their own word for the same thing. `--remove-name` drops an outcome entirely, `--remove` a single event key. A name that differs from one already counted only by case, accent, punctuation or a plural is **refused**: Baker groups by exact name, so "Booked a Call" beside "Booked a call" is a number split in half with both halves plausible. Every answer leads with the names already in use, and a company that has named nothing gets a standard set to start from — after which the rule is reuse, in that company's own language.
|
|
1363
1366
|
|
package/dist/cli.js
CHANGED
|
@@ -9080,17 +9080,17 @@ function text(value) {
|
|
|
9080
9080
|
return typeof value === "string" ? value : "";
|
|
9081
9081
|
}
|
|
9082
9082
|
function draftOpNormalizer(record, full) {
|
|
9083
|
-
const
|
|
9083
|
+
const compact4 = {
|
|
9084
9084
|
kind: text(record.kind),
|
|
9085
9085
|
name: text(record.targetName),
|
|
9086
9086
|
ref: text(record.tempId) || text(record.targetActionId),
|
|
9087
9087
|
tags: Array.isArray(record.tags) ? record.tags.join(",") : ""
|
|
9088
9088
|
};
|
|
9089
9089
|
if (!full) {
|
|
9090
|
-
return
|
|
9090
|
+
return compact4;
|
|
9091
9091
|
}
|
|
9092
9092
|
return {
|
|
9093
|
-
...
|
|
9093
|
+
...compact4,
|
|
9094
9094
|
description: text(record.description),
|
|
9095
9095
|
note: text(record.note),
|
|
9096
9096
|
reason: text(record.reason),
|
|
@@ -9365,10 +9365,10 @@ var listCommand2 = defineCommand8({
|
|
|
9365
9365
|
process.stdout.write(renderMarkdown(response.data, hints2, { full: args5.full === true }));
|
|
9366
9366
|
return;
|
|
9367
9367
|
}
|
|
9368
|
-
const
|
|
9369
|
-
const shaped =
|
|
9368
|
+
const compact4 = !args5.full && response.ok;
|
|
9369
|
+
const shaped = compact4 ? { ...response, data: compactListData(response.data) } : response;
|
|
9370
9370
|
const envelope = hints2.length > 0 ? { ...shaped, hints: hints2 } : shaped;
|
|
9371
|
-
if (
|
|
9371
|
+
if (compact4) {
|
|
9372
9372
|
process.stdout.write(`${JSON.stringify(envelope)}
|
|
9373
9373
|
`);
|
|
9374
9374
|
return;
|
|
@@ -14759,8 +14759,8 @@ function normalizePhoneV1(raw) {
|
|
|
14759
14759
|
var PHONE_PUNCTUATION = /[\s()./-]/g;
|
|
14760
14760
|
var E164 = /^\+[1-9]\d{7,14}$/;
|
|
14761
14761
|
function normalizePhoneV2(raw) {
|
|
14762
|
-
const
|
|
14763
|
-
const e164 =
|
|
14762
|
+
const compact4 = raw.replace(PHONE_PUNCTUATION, "");
|
|
14763
|
+
const e164 = compact4.startsWith("00") ? `+${compact4.slice(2)}` : compact4;
|
|
14764
14764
|
return E164.test(e164) ? e164 : null;
|
|
14765
14765
|
}
|
|
14766
14766
|
|
|
@@ -31887,6 +31887,7 @@ function parseConversionsArgs(raw, argv) {
|
|
|
31887
31887
|
removeName: onlyOnce(raw["remove-name"], "--remove-name", argv),
|
|
31888
31888
|
flowSlug: onlyOnce(raw.flow, "--flow", argv),
|
|
31889
31889
|
candidates: raw.candidates === true,
|
|
31890
|
+
full: raw.full === true,
|
|
31890
31891
|
days: readDays(raw.days)
|
|
31891
31892
|
};
|
|
31892
31893
|
checkFlagShape(args5);
|
|
@@ -31953,6 +31954,72 @@ function conversionsWrite(args5, existing) {
|
|
|
31953
31954
|
return { ...set.length > 0 ? { set } : {}, ...remove.length > 0 ? { remove } : {} };
|
|
31954
31955
|
}
|
|
31955
31956
|
|
|
31957
|
+
// src/commands/analytics/conversionCandidates.ts
|
|
31958
|
+
function compact2(row) {
|
|
31959
|
+
return {
|
|
31960
|
+
eventKey: row.eventKey,
|
|
31961
|
+
events: row.events,
|
|
31962
|
+
sessions: row.sessions,
|
|
31963
|
+
...row.isCounted ? { countedAs: row.countedAs } : {}
|
|
31964
|
+
};
|
|
31965
|
+
}
|
|
31966
|
+
function foldByForm(rows) {
|
|
31967
|
+
const byForm = /* @__PURE__ */ new Map();
|
|
31968
|
+
for (const row of rows) {
|
|
31969
|
+
const form = byForm.get(row.flowSlug) ?? { form: row.flowSlug, keys: 0, countedKeys: 0, events: 0 };
|
|
31970
|
+
form.keys += 1;
|
|
31971
|
+
if (row.isCounted) form.countedKeys += 1;
|
|
31972
|
+
form.events += row.events;
|
|
31973
|
+
byForm.set(row.flowSlug, form);
|
|
31974
|
+
}
|
|
31975
|
+
return [...byForm.values()];
|
|
31976
|
+
}
|
|
31977
|
+
function candidatesForFlow(catalogue, flowSlug) {
|
|
31978
|
+
return flowSlug === void 0 ? [...catalogue] : catalogue.filter((row) => row.flowSlug === flowSlug);
|
|
31979
|
+
}
|
|
31980
|
+
var FOLDED_FORMS_HINT = "A Form's candidates are folded into its `flows` row (`keys` fired, `events`; no `counted` means it counts nothing), or a `formCandidates` row when not listed. `--candidates --flow <slug>` lists that Form's keys; `--full` adds every field of every key.";
|
|
31981
|
+
function candidatesView(rows, options) {
|
|
31982
|
+
if (options.full) return { candidates: rows };
|
|
31983
|
+
if (options.flowSlug !== void 0) return { candidates: rows.map(compact2) };
|
|
31984
|
+
const forms = foldByForm(rows.filter((row) => row.flowSlug !== ""));
|
|
31985
|
+
return {
|
|
31986
|
+
candidates: rows.filter((row) => row.flowSlug === "").map(compact2),
|
|
31987
|
+
...forms.length > 0 ? { formCandidates: forms } : {}
|
|
31988
|
+
};
|
|
31989
|
+
}
|
|
31990
|
+
function fullFlagHints(args5, format) {
|
|
31991
|
+
if (!args5.full || args5.candidates && format !== "md") return [];
|
|
31992
|
+
return ["`--full` only applies to `--candidates --output json`, so it changed nothing here."];
|
|
31993
|
+
}
|
|
31994
|
+
function compactConversionsEnvelope(envelope, options) {
|
|
31995
|
+
const { candidates, flows, ...data } = envelope.data;
|
|
31996
|
+
if (candidates === void 0) return { ...envelope };
|
|
31997
|
+
const { formCandidates, ...view } = candidatesView(candidates, options);
|
|
31998
|
+
const traffic = new Map(formCandidates?.map((form) => [form.form, form]));
|
|
31999
|
+
const merged = flows?.map(({ slug, counted, noConversion }) => {
|
|
32000
|
+
const form = traffic.get(slug);
|
|
32001
|
+
traffic.delete(slug);
|
|
32002
|
+
return {
|
|
32003
|
+
slug,
|
|
32004
|
+
...counted.length > 0 ? { counted } : {},
|
|
32005
|
+
...noConversion !== null ? { noConversion } : {},
|
|
32006
|
+
keys: form?.keys ?? 0,
|
|
32007
|
+
events: form?.events ?? 0
|
|
32008
|
+
};
|
|
32009
|
+
});
|
|
32010
|
+
const hints2 = [...envelope.hints ?? [], ...formCandidates ? [FOLDED_FORMS_HINT] : []];
|
|
32011
|
+
return {
|
|
32012
|
+
...envelope,
|
|
32013
|
+
data: {
|
|
32014
|
+
...data,
|
|
32015
|
+
...merged ? { flows: merged } : {},
|
|
32016
|
+
...view,
|
|
32017
|
+
...traffic.size > 0 ? { formCandidates: [...traffic.values()] } : {}
|
|
32018
|
+
},
|
|
32019
|
+
...hints2.length > 0 ? { hints: hints2 } : {}
|
|
32020
|
+
};
|
|
32021
|
+
}
|
|
32022
|
+
|
|
31956
32023
|
// src/commands/analytics/conversionHints.ts
|
|
31957
32024
|
var NAMED_CANDIDATES = 3;
|
|
31958
32025
|
function conversionHints(definitions, candidates, askedForCandidates) {
|
|
@@ -32278,7 +32345,7 @@ function trafficByForm(candidates) {
|
|
|
32278
32345
|
return byForm;
|
|
32279
32346
|
}
|
|
32280
32347
|
var NO_TRAFFIC = { "endings seen": 0, "endings counted": 0, events: 0, lastSeen: "" };
|
|
32281
|
-
var FORM_KEYS_HINT = "A Form's candidates are one row per Form: `baker analytics conversions --flow <slug>` lists that Form's event keys, and `--candidates --output json` lists every key.";
|
|
32348
|
+
var FORM_KEYS_HINT = "A Form's candidates are one row per Form: `baker analytics conversions --flow <slug>` lists that Form's event keys, and `--candidates --full --output json` lists every key with every field.";
|
|
32282
32349
|
function renderConversionsMarkdown(envelope) {
|
|
32283
32350
|
const { definitions, flow, flows, candidates } = envelope.data;
|
|
32284
32351
|
const data = {
|
|
@@ -32315,7 +32382,7 @@ function renderConversionsMarkdown(envelope) {
|
|
|
32315
32382
|
return renderMarkdown3({ data, ...hints2.length > 0 ? { hints: hints2 } : {} });
|
|
32316
32383
|
}
|
|
32317
32384
|
function withFormatHint(envelope, format) {
|
|
32318
|
-
const hints2 = [...envelope.hints ?? [], ...formatHint(envelope.data, format)];
|
|
32385
|
+
const hints2 = [...envelope.hints ?? [], ...formatHint({ ...envelope.data }, format)];
|
|
32319
32386
|
return { ...envelope, ...hints2.length > 0 ? { hints: hints2 } : {} };
|
|
32320
32387
|
}
|
|
32321
32388
|
|
|
@@ -34473,13 +34540,13 @@ function readFlowConversions2(slug, definitions) {
|
|
|
34473
34540
|
endings: joinFlowConversions(flowEventKeys(tree, slug), definitions)
|
|
34474
34541
|
};
|
|
34475
34542
|
}
|
|
34476
|
-
function conversionsEnvelope(args5, definitions, candidates,
|
|
34543
|
+
function conversionsEnvelope(args5, definitions, candidates, leadingHints = []) {
|
|
34477
34544
|
const flow = args5.flowSlug === void 0 ? null : readFlowConversions2(args5.flowSlug, definitions);
|
|
34478
34545
|
const forms = flow === null ? readWorkspaceFlows() : [];
|
|
34479
34546
|
const coverage = flowCoverage(forms, definitions);
|
|
34480
34547
|
const page = pageCandidates(definitions, candidates, args5.candidates);
|
|
34481
34548
|
const hints2 = [
|
|
34482
|
-
...
|
|
34549
|
+
...leadingHints,
|
|
34483
34550
|
...flow ? flowConversionHints(flow.slug, flow.endings, flow.noConversionReason) : [],
|
|
34484
34551
|
...flowCoverageHints(coverage),
|
|
34485
34552
|
...stagedHints(definitions),
|
|
@@ -34492,7 +34559,7 @@ function conversionsEnvelope(args5, definitions, candidates, serverHints = []) {
|
|
|
34492
34559
|
definitions,
|
|
34493
34560
|
...flow ? { flow } : {},
|
|
34494
34561
|
...coverage.length > 0 ? { flows: coverage } : {},
|
|
34495
|
-
...args5.candidates ? { candidates: page.candidates } : {}
|
|
34562
|
+
...args5.candidates ? { candidates: candidatesForFlow(page.candidates, args5.flowSlug) } : {}
|
|
34496
34563
|
},
|
|
34497
34564
|
...hints2.length > 0 ? { hints: hints2 } : {}
|
|
34498
34565
|
};
|
|
@@ -34536,12 +34603,17 @@ var conversionsCommand3 = (() => {
|
|
|
34536
34603
|
},
|
|
34537
34604
|
candidates: {
|
|
34538
34605
|
type: "boolean",
|
|
34539
|
-
description: "Also list every event these pages actually produced, ranked by volume, with whether it is already counted. This is where an event key comes from \u2014 do not invent one.
|
|
34606
|
+
description: "Also list every event these pages actually produced, ranked by volume, with whether it is already counted. This is where an event key comes from \u2014 do not invent one. Compact by default in JSON: each page or system event is one line (eventKey, events, sessions, countedAs when counted) and a Form's keys fold onto its `flows` row as `keys` and `events` (or a `formCandidates` row for a Form not in `flows`). Add --flow <slug> for that Form's keys only, and --full --output json for every field of every row",
|
|
34607
|
+
required: false
|
|
34608
|
+
},
|
|
34609
|
+
full: {
|
|
34610
|
+
type: "boolean",
|
|
34611
|
+
description: "With --candidates: every field of every candidate (origin, nodeType, flowSlug, lastSeen, sources, doors) and every Form key unfolded. Large on a busy company \u2014 narrow it with --flow first",
|
|
34540
34612
|
required: false
|
|
34541
34613
|
},
|
|
34542
34614
|
flow: {
|
|
34543
34615
|
type: "string",
|
|
34544
|
-
description: "A Form slug. Lists that Form's own endings already spelled as event keys, each with the name Baker counts it under or nothing \u2014 read off the Form's file, so it works on a Form built minutes ago that has never been visited, which is exactly when --candidates is empty. Use it whenever you create or edit a Form: it is the only way to see that the Form counts nothing before it is published counting nothing",
|
|
34616
|
+
description: "A Form slug. Lists that Form's own endings already spelled as event keys, each with the name Baker counts it under or nothing \u2014 read off the Form's file, so it works on a Form built minutes ago that has never been visited, which is exactly when --candidates is empty. With --candidates, narrows the candidates to that Form's keys. Use it whenever you create or edit a Form: it is the only way to see that the Form counts nothing before it is published counting nothing",
|
|
34545
34617
|
required: false
|
|
34546
34618
|
},
|
|
34547
34619
|
days: {
|
|
@@ -34559,7 +34631,7 @@ var conversionsCommand3 = (() => {
|
|
|
34559
34631
|
return defineCommand99({
|
|
34560
34632
|
meta: {
|
|
34561
34633
|
name: "conversions",
|
|
34562
|
-
description: "What this company counts as a conversion \u2014 the numerator of every conversion rate on Measure. A page event (a Form ending, a data-baker-* event) and an event one of the client's systems sends (a HubSpot event made with `baker analytics sources --create-hubspot`, an order the server posts) both count; a system's event is credited to the last landing its person viewed. A HubSpot event is `page:<its name>` here \u2014 `--event 'page:Deal won' --name 'Deal won'`. Run with no flags first: an empty `definitions` list means every conversion number in every other report is zero \u2014 not because nobody converted, but because nothing is marked as converting, and Baker never guesses. Add `--candidates` to see everything these pages actually do (every Form step, every data-baker-* event, every outbound destination) with counts and whether it is already counted; that list is where an event key comes from, so never invent one. Then `--event <key> --name 'Booked a call'` to count it. Inside a chat a change is STAGED: the person sees it under Sources in the chat's changes, on the event's own row and it applies when they publish, retroactively \u2014 the whole history is rescored, so a company that has been running for a month gets a month of correct numbers. A read shows a proposal marked `staged`. Call an event by its name when you talk to the person, never by its key. Two events given the SAME --name are one row and one number. `--remove <key>` stops counting one. `--flow <slug>` answers the other direction \u2014 what one Form counts, with every ending it has already spelled as an event key, read from the Form itself so it works before a single visitor has seen it. Run it whenever you create or edit a Form: a Form nobody named an outcome for is published converting nobody, and no report says so."
|
|
34634
|
+
description: "What this company counts as a conversion \u2014 the numerator of every conversion rate on Measure. A page event (a Form ending, a data-baker-* event) and an event one of the client's systems sends (a HubSpot event made with `baker analytics sources --create-hubspot`, an order the server posts) both count; a system's event is credited to the last landing its person viewed. A HubSpot event is `page:<its name>` here \u2014 `--event 'page:Deal won' --name 'Deal won'`. Run with no flags first: an empty `definitions` list means every conversion number in every other report is zero \u2014 not because nobody converted, but because nothing is marked as converting, and Baker never guesses. Add `--candidates` to see everything these pages actually do (every Form step, every data-baker-* event, every outbound destination) with counts and whether it is already counted; that list is where an event key comes from, so never invent one. It is compact: a Form's keys fold onto its `flows` row, `--candidates --flow <slug>` lists one Form's keys, and `--full --output json` returns every field of every row. Then `--event <key> --name 'Booked a call'` to count it. Inside a chat a change is STAGED: the person sees it under Sources in the chat's changes, on the event's own row and it applies when they publish, retroactively \u2014 the whole history is rescored, so a company that has been running for a month gets a month of correct numbers. A read shows a proposal marked `staged`. Call an event by its name when you talk to the person, never by its key. Two events given the SAME --name are one row and one number. `--remove <key>` stops counting one. `--flow <slug>` answers the other direction \u2014 what one Form counts, with every ending it has already spelled as an event key, read from the Form itself so it works before a single visitor has seen it. Run it whenever you create or edit a Form: a Form nobody named an outcome for is published converting nobody, and no report says so."
|
|
34563
34635
|
},
|
|
34564
34636
|
args: args5,
|
|
34565
34637
|
run: async ({ args: raw }) => {
|
|
@@ -34579,10 +34651,10 @@ var conversionsCommand3 = (() => {
|
|
|
34579
34651
|
args6,
|
|
34580
34652
|
mergeStoredWithCounts(stored, report.data.conversions ?? []),
|
|
34581
34653
|
report.data.eventCatalog ?? [],
|
|
34582
|
-
answer.hints ?? []
|
|
34654
|
+
[...answer.hints ?? [], ...fullFlagHints(args6, format)]
|
|
34583
34655
|
);
|
|
34584
34656
|
if (format === "md") process.stdout.write(renderConversionsMarkdown(envelope));
|
|
34585
|
-
else writeJsonEnvelope(withFormatHint(envelope, format));
|
|
34657
|
+
else writeJsonEnvelope(withFormatHint(compactConversionsEnvelope(envelope, args6), format));
|
|
34586
34658
|
} catch (err) {
|
|
34587
34659
|
if (err instanceof ConversionArgsError) {
|
|
34588
34660
|
handleError3(new ApiError("VALIDATION_ERROR", err.message));
|
|
@@ -54495,13 +54567,13 @@ function compactHit(hit) {
|
|
|
54495
54567
|
};
|
|
54496
54568
|
}
|
|
54497
54569
|
function providerHitNormalizer(record, full) {
|
|
54498
|
-
const
|
|
54570
|
+
const compact4 = compactHit(record);
|
|
54499
54571
|
if (!full) {
|
|
54500
|
-
return
|
|
54572
|
+
return compact4;
|
|
54501
54573
|
}
|
|
54502
54574
|
const group = asRecord2(record.group);
|
|
54503
54575
|
return {
|
|
54504
|
-
...
|
|
54576
|
+
...compact4,
|
|
54505
54577
|
externalUrl: str(record.externalUrl),
|
|
54506
54578
|
externalId: str(record.externalId),
|
|
54507
54579
|
description: str(record.description),
|
|
@@ -55263,7 +55335,7 @@ registerSchema({
|
|
|
55263
55335
|
}
|
|
55264
55336
|
});
|
|
55265
55337
|
var POLL_INTERVAL_MS3 = 4e3;
|
|
55266
|
-
function
|
|
55338
|
+
function compact3(doc) {
|
|
55267
55339
|
return {
|
|
55268
55340
|
layeredImageId: doc.layeredImageId,
|
|
55269
55341
|
imageId: doc.imageId,
|
|
@@ -55353,7 +55425,7 @@ var layerizeCommand = defineCommand157({
|
|
|
55353
55425
|
});
|
|
55354
55426
|
process.exit(1);
|
|
55355
55427
|
}
|
|
55356
|
-
writeJson({ ok: true, data: full ? settled :
|
|
55428
|
+
writeJson({ ok: true, data: full ? settled : compact3(settled), hints: hintsFor3(settled) });
|
|
55357
55429
|
} catch (err) {
|
|
55358
55430
|
if (err instanceof ApiError) {
|
|
55359
55431
|
writeJson({ ok: false, error: { code: err.code, message: err.message } });
|
|
@@ -55392,7 +55464,7 @@ var layersCommand = defineCommand157({
|
|
|
55392
55464
|
process.exit(1);
|
|
55393
55465
|
}
|
|
55394
55466
|
const doc = await apiGet("/api/images/layers", { imageId });
|
|
55395
|
-
writeJson({ ok: true, data: args5.full ? doc :
|
|
55467
|
+
writeJson({ ok: true, data: args5.full ? doc : compact3(doc), hints: hintsFor3(doc) });
|
|
55396
55468
|
} catch (err) {
|
|
55397
55469
|
if (err instanceof ApiError) {
|
|
55398
55470
|
writeJson({
|
|
@@ -65021,7 +65093,7 @@ function adByHandHint(input) {
|
|
|
65021
65093
|
|
|
65022
65094
|
// src/commands/studio/batch.ts
|
|
65023
65095
|
function projectBatch(generation, full) {
|
|
65024
|
-
const
|
|
65096
|
+
const compact4 = {
|
|
65025
65097
|
generationId: generation.generationId,
|
|
65026
65098
|
kind: generation.kind,
|
|
65027
65099
|
status: generation.status,
|
|
@@ -65038,9 +65110,9 @@ function projectBatch(generation, full) {
|
|
|
65038
65110
|
...variant.error ? { error: variant.error } : {}
|
|
65039
65111
|
}))
|
|
65040
65112
|
};
|
|
65041
|
-
if (!full) return
|
|
65113
|
+
if (!full) return compact4;
|
|
65042
65114
|
return {
|
|
65043
|
-
...
|
|
65115
|
+
...compact4,
|
|
65044
65116
|
...generation.skillId ? { skillId: generation.skillId } : {},
|
|
65045
65117
|
...generation.imageSettings ? { imageSettings: generation.imageSettings } : {},
|
|
65046
65118
|
...generation.clipSettings ? { clipSettings: generation.clipSettings } : {},
|
|
@@ -68240,12 +68312,12 @@ function compactAdvertiser(record) {
|
|
|
68240
68312
|
};
|
|
68241
68313
|
}
|
|
68242
68314
|
function advertiserNormalizer(record, full) {
|
|
68243
|
-
const
|
|
68315
|
+
const compact4 = compactAdvertiser(record);
|
|
68244
68316
|
if (!full) {
|
|
68245
|
-
return
|
|
68317
|
+
return compact4;
|
|
68246
68318
|
}
|
|
68247
68319
|
return {
|
|
68248
|
-
...
|
|
68320
|
+
...compact4,
|
|
68249
68321
|
scraped_name: record.scraped_name ?? null,
|
|
68250
68322
|
image_url: record.image_url ?? null,
|
|
68251
68323
|
platforms: Array.isArray(record.platforms) ? record.platforms : [],
|
|
@@ -68806,12 +68878,12 @@ function followingHints(records) {
|
|
|
68806
68878
|
return hints2;
|
|
68807
68879
|
}
|
|
68808
68880
|
function followingNormalizer(record, full) {
|
|
68809
|
-
const
|
|
68881
|
+
const compact4 = compactFollowed(record);
|
|
68810
68882
|
if (!full) {
|
|
68811
|
-
return
|
|
68883
|
+
return compact4;
|
|
68812
68884
|
}
|
|
68813
68885
|
return {
|
|
68814
|
-
...
|
|
68886
|
+
...compact4,
|
|
68815
68887
|
image_url: record.image_url ?? null,
|
|
68816
68888
|
platforms: Array.isArray(record.platforms) ? record.platforms : []
|
|
68817
68889
|
};
|