@bridge-ds/core 0.19.0 → 0.21.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/LICENSE +17 -0
- package/bridge.config.schema.json +5 -0
- package/dist/audit/index.js +275 -52
- package/dist/audit/index.js.map +1 -1
- package/dist/audit/missing-pieces.d.ts +4 -0
- package/dist/component-spec.d.ts +13 -0
- package/dist/config.d.ts +5 -0
- package/dist/exploration-done-github.d.ts +50 -0
- package/dist/exploration-resume.d.ts +136 -0
- package/dist/explorations-github.d.ts +75 -3
- package/dist/explorations.d.ts +137 -8
- package/dist/fidelity.d.ts +12 -1
- package/dist/figma-fix-loop.d.ts +1 -1
- package/dist/figma-fix-run.d.ts +103 -0
- package/dist/figma-fixes.d.ts +14 -2
- package/dist/gap-case.d.ts +1 -2
- package/dist/github-client.d.ts +17 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.js +2139 -1290
- package/dist/index.js.map +1 -1
- package/dist/measure-location.d.ts +42 -0
- package/dist/measure-workflow.d.ts +48 -0
- package/dist/measured-only.d.ts +15 -1
- package/dist/node/index.js +15 -12
- package/dist/node/index.js.map +1 -1
- package/dist/previews-github.d.ts +13 -0
- package/dist/previews.d.ts +8 -1
- package/dist/{prod-branch-Bdx_2bRQ.js → prod-branch-C7tphFAA.js} +257 -192
- package/dist/prod-branch-C7tphFAA.js.map +1 -0
- package/dist/prod-branch-github.d.ts +54 -4
- package/dist/prod-branch.d.ts +42 -1
- package/dist/products.d.ts +17 -0
- package/dist/repo-model.d.ts +2 -0
- package/dist/{repo-source-m0Tc603o.js → repo-source-CEBBBtm1.js} +2183 -1937
- package/dist/repo-source-CEBBBtm1.js.map +1 -0
- package/dist/{report-DFPKygfk.js → report-B7wNAnSu.js} +38 -38
- package/dist/{report-DFPKygfk.js.map → report-B7wNAnSu.js.map} +1 -1
- package/dist/review-gate.d.ts +7 -1
- package/dist/suggestion-review.d.ts +43 -2
- package/dist/suggestions-github.d.ts +12 -1
- package/dist/tier1-publish.d.ts +48 -0
- package/dist/try-in-product.d.ts +4 -1
- package/package.json +1 -1
- package/dist/prod-branch-Bdx_2bRQ.js.map +0 -1
- package/dist/repo-source-m0Tc603o.js.map +0 -1
|
@@ -613,7 +613,7 @@ function previewComment(input) {
|
|
|
613
613
|
const sha7 = input.sha.slice(0, 7);
|
|
614
614
|
const lines = [PREVIEW_COMMENT_MARKER, input.exploration ? "## Try this exploration in your product" : "## Try this DS branch in your product", ""];
|
|
615
615
|
lines.push(`Snapshot of \`${sha7}\` on \`${input.branch}\`. Install it in a product branch that deploys to staging; production keeps the released version.`, "");
|
|
616
|
-
if (input.exploration) lines.push("This is an exploration: it is never merged as is. Use it for a prototype, a user test, a demo or an A/B idea, then
|
|
616
|
+
if (input.exploration) lines.push("This is an exploration: it is never merged as is. Use it for a prototype, a user test, a demo or an A/B idea, then say it is done exploring: developers take it from there, and it stays open so this preview keeps working.", "");
|
|
617
617
|
if (input.packages.length) {
|
|
618
618
|
lines.push("```sh", installCommand(input.packages.map((p) => input.exploration ? `${p.name}@${p.url}` : p.url)), "```", "");
|
|
619
619
|
lines.push("| Package | Install this package only |", "| --- | --- |");
|
|
@@ -717,7 +717,7 @@ const STATE_OF = {
|
|
|
717
717
|
deployed: "ready",
|
|
718
718
|
ready: "ready",
|
|
719
719
|
ignored: "ready",
|
|
720
|
-
// Vercel skipped the build
|
|
720
|
+
// Vercel skipped the build: nothing to wait for. BranchPreview.skipped says the branch has no build of its own.
|
|
721
721
|
pending: "building",
|
|
722
722
|
queued: "building",
|
|
723
723
|
in_progress: "building",
|
|
@@ -729,13 +729,15 @@ const STATE_OF = {
|
|
|
729
729
|
canceled: "failed"
|
|
730
730
|
};
|
|
731
731
|
const stateOf = (s) => STATE_OF[(s ?? "").toLowerCase()] ?? "unknown";
|
|
732
|
+
const IGNORED_BUILD = /ignored build step/i;
|
|
732
733
|
const isInspectorUrl = (u) => /^https:\/\/(?:www\.)?vercel\.com\//i.test(u);
|
|
733
734
|
function resolveBranchPreviews(apps, ctx, sources = {}) {
|
|
734
735
|
const seen = /* @__PURE__ */ new Map();
|
|
735
736
|
const at = (app) => seen.get(app) ?? (seen.set(app, {}), seen.get(app));
|
|
736
|
-
const offer = (app, url, urlSource, state, stateRank) => {
|
|
737
|
+
const offer = (app, url, urlSource, state, stateRank, skipped) => {
|
|
737
738
|
if (!app) return;
|
|
738
739
|
const s = at(app);
|
|
740
|
+
if (skipped !== void 0 && (s.skipRank === void 0 || stateRank < s.skipRank)) Object.assign(s, { skipped, skipRank: stateRank });
|
|
739
741
|
if (url && !s.url) Object.assign(s, { url, urlSource });
|
|
740
742
|
if (state !== "unknown" && (s.stateRank === void 0 || stateRank < s.stateRank)) Object.assign(s, { state, stateRank });
|
|
741
743
|
};
|
|
@@ -746,7 +748,7 @@ function resolveBranchPreviews(apps, ctx, sources = {}) {
|
|
|
746
748
|
const project = projectOfLabel(st.context);
|
|
747
749
|
if (!project) continue;
|
|
748
750
|
const url = httpsUrl(st.target_url);
|
|
749
|
-
offer(appForProject(project, apps), url && !isInspectorUrl(url) ? url : null, "status", stateOf(st.state), 0);
|
|
751
|
+
offer(appForProject(project, apps), url && !isInspectorUrl(url) ? url : null, "status", stateOf(st.state), 0, IGNORED_BUILD.test(st.description ?? ""));
|
|
750
752
|
}
|
|
751
753
|
for (const d of sources.deployments ?? []) {
|
|
752
754
|
const project = projectOfLabel(d.environment);
|
|
@@ -758,18 +760,18 @@ function resolveBranchPreviews(apps, ctx, sources = {}) {
|
|
|
758
760
|
const state = stateOf(d.state);
|
|
759
761
|
if (state !== "unknown" && (s.stateRank === void 0 || 1 < s.stateRank)) Object.assign(s, { state, stateRank: 1 });
|
|
760
762
|
}
|
|
761
|
-
for (const p of parseVercelComment(findVercelComment(sources.comments ?? [])?.body) ?? []) offer(appForProject(p.name, apps), p.previewUrl, "vercel-comment", stateOf(p.status), 2);
|
|
763
|
+
for (const p of parseVercelComment(findVercelComment(sources.comments ?? [])?.body) ?? []) offer(appForProject(p.name, apps), p.previewUrl, "vercel-comment", stateOf(p.status), 2, p.status ? p.status.toUpperCase() === "IGNORED" : void 0);
|
|
762
764
|
const out = [];
|
|
763
765
|
for (const app of Object.keys(PREVIEW_APP_LABELS)) {
|
|
764
766
|
if (!apps[app]) continue;
|
|
765
767
|
const s = seen.get(app) ?? {};
|
|
766
768
|
const url = s.url ?? previewUrl(apps[app], ctx);
|
|
767
769
|
const source = s.url ? s.urlSource : url ? "template" : null;
|
|
768
|
-
out.push({ app, label: PREVIEW_APP_LABELS[app], url, state: s.state ?? "unknown", source });
|
|
770
|
+
out.push({ app, label: PREVIEW_APP_LABELS[app], url, state: s.state ?? "unknown", source, ...s.skipped ? { skipped: true } : {} });
|
|
769
771
|
}
|
|
770
772
|
return out;
|
|
771
773
|
}
|
|
772
|
-
const previewLinksOf = (previews) => previews.filter((p) => !!p.url).map((p) => ({ app: p.app, label: p.label, url: p.url }));
|
|
774
|
+
const previewLinksOf = (previews) => previews.filter((p) => !!p.url && !p.skipped).map((p) => ({ app: p.app, label: p.label, url: p.url }));
|
|
773
775
|
const previewsSettled = (previews) => previews.every((p) => p.state === "failed" || !!p.url && p.state === "ready");
|
|
774
776
|
const LOGIN = /^[A-Za-z0-9](?:[A-Za-z0-9]|-(?=[A-Za-z0-9])){0,38}$/;
|
|
775
777
|
const SLUG = /^[A-Za-z0-9][A-Za-z0-9._-]{0,99}$/;
|
|
@@ -1165,6 +1167,27 @@ function productForPlace(products, place) {
|
|
|
1165
1167
|
}
|
|
1166
1168
|
return { product: defaultProduct(products), how: "default" };
|
|
1167
1169
|
}
|
|
1170
|
+
function productRepoOf(p, designSystemRepo) {
|
|
1171
|
+
const repo = p?.repo?.trim();
|
|
1172
|
+
if (!repo || !REPO.test(repo)) return null;
|
|
1173
|
+
return repo.toLowerCase() === (designSystemRepo ?? "").trim().toLowerCase() ? null : repo;
|
|
1174
|
+
}
|
|
1175
|
+
function productRepos(products, designSystemRepo) {
|
|
1176
|
+
const seen = /* @__PURE__ */ new Set();
|
|
1177
|
+
const out = [];
|
|
1178
|
+
for (const p of products) {
|
|
1179
|
+
const repo = productRepoOf(p, designSystemRepo);
|
|
1180
|
+
if (!repo || seen.has(repo.toLowerCase())) continue;
|
|
1181
|
+
seen.add(repo.toLowerCase());
|
|
1182
|
+
out.push({ product: p, repo });
|
|
1183
|
+
}
|
|
1184
|
+
return out;
|
|
1185
|
+
}
|
|
1186
|
+
function productOfRepo(products, repo, designSystemRepo) {
|
|
1187
|
+
const r = (repo ?? "").trim().toLowerCase();
|
|
1188
|
+
if (!r) return void 0;
|
|
1189
|
+
return productRepos(products, designSystemRepo).find((x) => x.repo.toLowerCase() === r)?.product;
|
|
1190
|
+
}
|
|
1168
1191
|
const KEY = /^[a-z0-9][a-z0-9-]*$/;
|
|
1169
1192
|
const REPO = /^[\w.-]+\/[\w.-]+$/;
|
|
1170
1193
|
const FIELDS = ["key", "name", "repo", "path", "preview", "framework", "default"];
|
|
@@ -1352,7 +1375,8 @@ function defineConfig(input) {
|
|
|
1352
1375
|
}
|
|
1353
1376
|
} : {},
|
|
1354
1377
|
...g.rights ? { rights: normalizeRights(g.rights) } : {},
|
|
1355
|
-
...g.soloOwnerCanApproveBoth === true ? { soloOwnerCanApproveBoth: true } : {}
|
|
1378
|
+
...g.soloOwnerCanApproveBoth === true ? { soloOwnerCanApproveBoth: true } : {},
|
|
1379
|
+
...g.leadsPublishTier1 === false ? { leadsPublishTier1: false } : {}
|
|
1356
1380
|
},
|
|
1357
1381
|
products: input.products?.length ? input.products.map((p) => ({ ...p })) : DEFAULT_PRODUCTS.map((p) => ({ ...p })),
|
|
1358
1382
|
changes: input.changes === "direct" ? "direct" : DEFAULT_CHANGES_MODE,
|
|
@@ -1480,6 +1504,7 @@ function loadConfig(source) {
|
|
|
1480
1504
|
}
|
|
1481
1505
|
problems.push(...rightsProblems(gov.rights));
|
|
1482
1506
|
if (gov.soloOwnerCanApproveBoth !== void 0 && typeof gov.soloOwnerCanApproveBoth !== "boolean") problems.push('"governance.soloOwnerCanApproveBoth" must be true or false');
|
|
1507
|
+
if (gov.leadsPublishTier1 !== void 0 && typeof gov.leadsPublishTier1 !== "boolean") problems.push('"governance.leadsPublishTier1" must be true or false');
|
|
1483
1508
|
}
|
|
1484
1509
|
}
|
|
1485
1510
|
problems.push(...visualImpactProblems(d.visualImpact));
|
|
@@ -2691,6 +2716,7 @@ ${body}
|
|
|
2691
2716
|
|
|
2692
2717
|
${footer}`;
|
|
2693
2718
|
}
|
|
2719
|
+
const pieceValueField = (v) => `${v.property ?? v.category}${v.part ? ` (${v.part})` : ""}`;
|
|
2694
2720
|
const PIECES_MARK = "bridge-pieces";
|
|
2695
2721
|
const NEEDED_MARK = "bridge-needed-by";
|
|
2696
2722
|
const SECTION = "### Missing from the library";
|
|
@@ -2716,7 +2742,7 @@ function piecesSection(r) {
|
|
|
2716
2742
|
const link = (p) => r.links.find((l) => l.piece === p.id);
|
|
2717
2743
|
const lines = r.pieces.length ? r.pieces.map((p) => {
|
|
2718
2744
|
const l = link(p);
|
|
2719
|
-
return `- **${p.title}**: ${p.summary}${l ? ` ${cap(KIND_WORD[l.kind])}: #${l.number}.` : " No library branch yet."}`;
|
|
2745
|
+
return `- **${p.title}**: ${p.summary}${l ? ` ${cap(KIND_WORD[l.kind])}: ${l.repo ?? ""}#${l.number}.` : " No library branch yet."}`;
|
|
2720
2746
|
}) : ["- Nothing: every value and component comes from the library."];
|
|
2721
2747
|
return [SECTION, "", `Checked ${r.checkedAt.slice(0, 10)}${r.headSha ? ` on ${r.headSha.slice(0, 7)}` : ""} by Bridge.`, "", ...lines, "", hiddenJson(PIECES_MARK, r)].join("\n");
|
|
2722
2748
|
}
|
|
@@ -2742,10 +2768,12 @@ function mergePiecesRecord(prev, next) {
|
|
|
2742
2768
|
function withLink(r, l) {
|
|
2743
2769
|
return { ...r, links: [...r.links.filter((x) => x.piece !== l.piece), l] };
|
|
2744
2770
|
}
|
|
2771
|
+
const prRef = (b) => `${b.repo ? b.repo : ""}#${b.pr}`;
|
|
2745
2772
|
function neededBySection(n) {
|
|
2746
2773
|
const who = n.author ? ` for @${n.author}` : "";
|
|
2747
|
-
const
|
|
2748
|
-
|
|
2774
|
+
const detail = [n.nearestToken ? `\`${n.nearestToken}\`` : "", n.nearestValue ?? ""].filter(Boolean).join(", ");
|
|
2775
|
+
const near = n.nearest ? ` The closest the library has today is ${n.nearest}${detail ? ` (${detail})` : ""}.` : "";
|
|
2776
|
+
return [`**Needed by:** [${n.title}](${n.url}) (${prRef(n)}) in ${n.productName}${who}.${near}`, "", hiddenJson(NEEDED_MARK, n)].join("\n");
|
|
2749
2777
|
}
|
|
2750
2778
|
function parseNeededBy(body) {
|
|
2751
2779
|
const n = readHidden(NEEDED_MARK, body);
|
|
@@ -2764,7 +2792,8 @@ function withNeededBy(body, n) {
|
|
|
2764
2792
|
${b}` : ""}`;
|
|
2765
2793
|
}
|
|
2766
2794
|
const cap = (s) => s ? s.charAt(0).toUpperCase() + s.slice(1) : s;
|
|
2767
|
-
const
|
|
2795
|
+
const withoutNear = (summary) => summary.replace(/\s*(?:It looks a lot like|The closest in the library is) .*?\.(?=\s|$)/, "").trim();
|
|
2796
|
+
const forLine = (b) => `${b.productName} needs it for "${b.title.replace(/"/g, "'")}" (${prRef(b)})`;
|
|
2768
2797
|
function libraryBranchPlan(piece, branch, opts = {}) {
|
|
2769
2798
|
const neededBy = {
|
|
2770
2799
|
pr: branch.pr,
|
|
@@ -2776,9 +2805,10 @@ function libraryBranchPlan(piece, branch, opts = {}) {
|
|
|
2776
2805
|
...branch.author ? { author: branch.author } : {},
|
|
2777
2806
|
piece: piece.id,
|
|
2778
2807
|
pieceTitle: piece.title,
|
|
2779
|
-
...piece.nearest ? { nearest: piece.nearest.label, nearestToken: piece.nearest.token } : {}
|
|
2808
|
+
...piece.nearest ? { nearest: piece.nearest.label, nearestToken: piece.nearest.token, nearestValue: piece.nearest.value } : {},
|
|
2809
|
+
...branch.repo ? { repo: branch.repo } : {}
|
|
2780
2810
|
};
|
|
2781
|
-
const
|
|
2811
|
+
const said = `${forLine(branch)}: ${withoutNear(piece.summary)}`;
|
|
2782
2812
|
if (piece.kind === "token" && piece.token) {
|
|
2783
2813
|
const t = piece.token;
|
|
2784
2814
|
const files = t.files.length ? t.files : [void 0];
|
|
@@ -2790,34 +2820,39 @@ function libraryBranchPlan(piece, branch, opts = {}) {
|
|
|
2790
2820
|
description: `${cap(piece.name)}: ${forLine(branch)}.${files.length > 1 ? " Same value in every theme: review it in each." : ""}`,
|
|
2791
2821
|
...file ? { file } : {}
|
|
2792
2822
|
}));
|
|
2793
|
-
return { kind: "token-change", title: `Add ${t.path}`, summary:
|
|
2823
|
+
return { kind: "token-change", title: `Add ${t.path}`, summary: said, edits, neededBy };
|
|
2794
2824
|
}
|
|
2795
2825
|
if (piece.kind === "variant" && piece.component && opts.mode === "suggest") {
|
|
2796
2826
|
const request2 = {
|
|
2797
2827
|
component: piece.component,
|
|
2798
2828
|
kind: "new-variant",
|
|
2799
2829
|
title: piece.title,
|
|
2800
|
-
summary:
|
|
2801
|
-
changes: piece.values.slice(0, 6).map((v) => ({ field: v
|
|
2830
|
+
summary: said,
|
|
2831
|
+
changes: piece.values.slice(0, 6).map((v) => ({ field: pieceValueField(v), after: v.value })),
|
|
2802
2832
|
source: opts.source ?? "mcp",
|
|
2803
2833
|
...opts.requestedBy ? { requestedBy: opts.requestedBy } : {}
|
|
2804
2834
|
};
|
|
2805
2835
|
return { kind: "request", title: piece.title, request: request2, neededBy };
|
|
2806
2836
|
}
|
|
2807
2837
|
if (piece.kind === "variant" && piece.component) {
|
|
2808
|
-
const values = piece.values.map((v) => `${v
|
|
2838
|
+
const values = piece.values.map((v) => `${pieceValueField(v)} ${v.value}`).join(", ");
|
|
2839
|
+
const r = piece.restyle;
|
|
2840
|
+
const what = r?.state ? `a look when ${r.state}` : `${/^[aeiou]/i.test(piece.name) ? "an" : "a"} ${piece.name} ${piece.aspect ?? "style"}`;
|
|
2809
2841
|
const exploration = {
|
|
2810
2842
|
name: piece.title,
|
|
2811
|
-
purpose: `${forLine(branch)}: ${
|
|
2843
|
+
purpose: `${forLine(branch)}: ${what} on ${piece.component} (${values}).`,
|
|
2812
2844
|
useCase: "terminal",
|
|
2813
2845
|
experimental: [piece.title],
|
|
2814
2846
|
source: opts.source === "figma" ? "figma" : opts.source ?? "mcp"
|
|
2815
2847
|
};
|
|
2816
|
-
const brief = [
|
|
2848
|
+
const brief = (r ? [
|
|
2849
|
+
`Add ${what} to ${piece.component} in the library, on this exploration branch.`,
|
|
2850
|
+
`The product branch restyles ${piece.component} from outside with tokens (\`${r.selector}\`: ${values}). Build it into the component (its own state style or a prop, on component tokens), add it to the docs and examples, and keep every existing ${piece.component} unchanged.`
|
|
2851
|
+
] : [
|
|
2817
2852
|
`Add the ${piece.name} ${piece.aspect ?? "style"} to ${piece.component} in the library, on this exploration branch.`,
|
|
2818
2853
|
`The product branch writes it by hand: ${values}. Express it with tokens (a component or semantic token per value), add it to the component's props, docs and examples, and keep every existing ${piece.component} unchanged.`,
|
|
2819
2854
|
piece.nearest ? `Say in the pull request why ${piece.nearest.label} is not enough, or recommend it instead.` : ""
|
|
2820
|
-
].filter(Boolean).join(" ");
|
|
2855
|
+
]).filter(Boolean).join(" ");
|
|
2821
2856
|
return { kind: "exploration", title: piece.title, exploration, neededBy, brief };
|
|
2822
2857
|
}
|
|
2823
2858
|
const name = piece.component ?? cap(piece.name);
|
|
@@ -2825,13 +2860,38 @@ function libraryBranchPlan(piece, branch, opts = {}) {
|
|
|
2825
2860
|
component: name,
|
|
2826
2861
|
kind: "new-component",
|
|
2827
2862
|
title: `Add ${name}`,
|
|
2828
|
-
summary:
|
|
2829
|
-
changes: piece.values.slice(0, 6).map((v) => ({ field: v
|
|
2863
|
+
summary: said,
|
|
2864
|
+
changes: piece.values.slice(0, 6).map((v) => ({ field: pieceValueField(v), after: v.value })),
|
|
2830
2865
|
source: opts.source ?? "mcp",
|
|
2831
2866
|
...opts.requestedBy ? { requestedBy: opts.requestedBy } : {}
|
|
2832
2867
|
};
|
|
2833
2868
|
return { kind: "request", title: `New component: ${name}`, request, neededBy };
|
|
2834
2869
|
}
|
|
2870
|
+
function pieceRequest(piece, branch, opts = {}) {
|
|
2871
|
+
const plan = libraryBranchPlan(piece, branch, { ...opts.source ? { source: opts.source } : {}, ...opts.requestedBy ? { requestedBy: opts.requestedBy } : {}, mode: "suggest" });
|
|
2872
|
+
const own = `${forLine(branch)}: ${withoutNear(piece.summary)}`;
|
|
2873
|
+
const context = opts.previewUrl ? ` See it in context in the exploration's preview: ${opts.previewUrl}` : ` See it in context in the exploration: ${branch.url}`;
|
|
2874
|
+
const base = {
|
|
2875
|
+
source: opts.source ?? "mcp",
|
|
2876
|
+
...opts.requestedBy ? { requestedBy: opts.requestedBy } : {},
|
|
2877
|
+
changes: piece.values.slice(0, 6).map((v) => ({ field: pieceValueField(v), after: v.value }))
|
|
2878
|
+
};
|
|
2879
|
+
let request;
|
|
2880
|
+
if (plan.kind === "request") request = { ...plan.request, summary: `${own}${context}` };
|
|
2881
|
+
else if (piece.kind === "token" && piece.token) {
|
|
2882
|
+
request = {
|
|
2883
|
+
...base,
|
|
2884
|
+
component: "Tokens",
|
|
2885
|
+
kind: "other",
|
|
2886
|
+
title: `Add ${piece.token.path}`,
|
|
2887
|
+
summary: `${own} Proposed: ${piece.token.path} = ${piece.token.value}, beside the closest token.${context}`,
|
|
2888
|
+
changes: [{ field: piece.token.path, after: piece.token.value }]
|
|
2889
|
+
};
|
|
2890
|
+
} else {
|
|
2891
|
+
request = { ...base, component: piece.component ?? cap(piece.name), kind: piece.component ? "new-variant" : "new-component", title: piece.title, summary: `${own}${context}` };
|
|
2892
|
+
}
|
|
2893
|
+
return { request, neededBy: plan.neededBy };
|
|
2894
|
+
}
|
|
2835
2895
|
const STATUS_LABEL = {
|
|
2836
2896
|
draft: "Draft",
|
|
2837
2897
|
"in-review": "In review",
|
|
@@ -2886,7 +2946,7 @@ function linkStatus(x) {
|
|
|
2886
2946
|
}
|
|
2887
2947
|
if (x.state === "merged") return make("shipped");
|
|
2888
2948
|
if (x.state !== "open") return make("closed");
|
|
2889
|
-
if ((x.labels ?? []).includes("exploration")) return make("exploring");
|
|
2949
|
+
if ((x.labels ?? []).includes("exploration") || x.draft && (x.labels ?? []).includes("ready-for-devs")) return make("exploring");
|
|
2890
2950
|
if (x.draft) return make("draft");
|
|
2891
2951
|
const latest = /* @__PURE__ */ new Map();
|
|
2892
2952
|
for (const r of x.reviews ?? []) if (r.user && r.state !== "COMMENTED") latest.set(r.user, r.state);
|
|
@@ -2944,7 +3004,7 @@ function nearestQuestion(n, opts = {}) {
|
|
|
2944
3004
|
}
|
|
2945
3005
|
function suggestNearestComment(n) {
|
|
2946
3006
|
if (!n.nearest) return null;
|
|
2947
|
-
return `Let's not add it to the library: ${n.nearest}${n.nearestToken ? ` (\`${n.nearestToken}\`)` : ""} covers it. Use it on ${n.title} (
|
|
3007
|
+
return `Let's not add it to the library: ${n.nearest}${n.nearestToken ? ` (\`${n.nearestToken}\`)` : ""} covers it. Use it on ${n.title} (${prRef(n)}) instead, then close this branch.`;
|
|
2948
3008
|
}
|
|
2949
3009
|
function pieceId(parts) {
|
|
2950
3010
|
return slugify(parts.filter(Boolean).join(" "), 48);
|
|
@@ -2966,7 +3026,7 @@ function proposedTokenPath(nearest, name, category) {
|
|
|
2966
3026
|
return [...parts.slice(0, -1), slug].join(".");
|
|
2967
3027
|
}
|
|
2968
3028
|
export {
|
|
2969
|
-
|
|
3029
|
+
productRepos as $,
|
|
2970
3030
|
formatValue as A,
|
|
2971
3031
|
resolve as B,
|
|
2972
3032
|
moveToken as C,
|
|
@@ -2993,175 +3053,180 @@ export {
|
|
|
2993
3053
|
previewLinks as X,
|
|
2994
3054
|
findPreviewComment as Y,
|
|
2995
3055
|
previewsSettled as Z,
|
|
2996
|
-
|
|
3056
|
+
previewUrl as _,
|
|
2997
3057
|
proposedTokenPath as a,
|
|
2998
|
-
|
|
2999
|
-
|
|
3000
|
-
|
|
3001
|
-
|
|
3002
|
-
|
|
3003
|
-
|
|
3004
|
-
|
|
3005
|
-
|
|
3006
|
-
|
|
3007
|
-
|
|
3008
|
-
|
|
3009
|
-
|
|
3010
|
-
|
|
3011
|
-
|
|
3012
|
-
|
|
3013
|
-
|
|
3014
|
-
|
|
3015
|
-
|
|
3016
|
-
|
|
3017
|
-
|
|
3018
|
-
|
|
3019
|
-
|
|
3020
|
-
|
|
3021
|
-
|
|
3022
|
-
|
|
3023
|
-
|
|
3024
|
-
|
|
3025
|
-
|
|
3026
|
-
|
|
3027
|
-
|
|
3028
|
-
|
|
3029
|
-
|
|
3030
|
-
|
|
3031
|
-
|
|
3032
|
-
|
|
3033
|
-
|
|
3034
|
-
|
|
3035
|
-
|
|
3036
|
-
|
|
3058
|
+
changedModes as a$,
|
|
3059
|
+
linkStatus as a0,
|
|
3060
|
+
libraryPreviewState as a1,
|
|
3061
|
+
parsePiecesRecord as a2,
|
|
3062
|
+
libraryBranchPlan as a3,
|
|
3063
|
+
NEEDED_BY_LABEL as a4,
|
|
3064
|
+
withNeededBy as a5,
|
|
3065
|
+
withLink as a6,
|
|
3066
|
+
withPiecesRecord as a7,
|
|
3067
|
+
productBranchSentence as a8,
|
|
3068
|
+
productOfBranch as a9,
|
|
3069
|
+
JsonParseError as aA,
|
|
3070
|
+
LINK_STATUS_TONE as aB,
|
|
3071
|
+
OWNER_GROUPS as aC,
|
|
3072
|
+
PREVIEW_APP_LABELS as aD,
|
|
3073
|
+
PREVIEW_COMMENT_MARKER as aE,
|
|
3074
|
+
PREVIEW_PLACEHOLDERS as aF,
|
|
3075
|
+
PRIMITIVE_MODE as aG,
|
|
3076
|
+
PRODUCT_LABEL_PREFIX as aH,
|
|
3077
|
+
RIGHTS as aI,
|
|
3078
|
+
RIGHT_LABEL as aJ,
|
|
3079
|
+
RISK_TIER as aK,
|
|
3080
|
+
TEAM_NAME_MAX as aL,
|
|
3081
|
+
TIER_ORDER as aM,
|
|
3082
|
+
TeamDirectory as aN,
|
|
3083
|
+
VISUAL_CHECKS_DOCS as aO,
|
|
3084
|
+
VISUAL_CHECK_LABEL as aP,
|
|
3085
|
+
VISUAL_WORKFLOW_FILES as aQ,
|
|
3086
|
+
affectedContrast as aR,
|
|
3087
|
+
aliasOf as aS,
|
|
3088
|
+
appForProject as aT,
|
|
3089
|
+
appUrl as aU,
|
|
3090
|
+
approverEntries as aV,
|
|
3091
|
+
approverLists as aW,
|
|
3092
|
+
branchName as aX,
|
|
3093
|
+
branchSlug as aY,
|
|
3094
|
+
canShip as aZ,
|
|
3095
|
+
changeKind as a_,
|
|
3096
|
+
pieceRequest as aa,
|
|
3037
3097
|
mergePiecesRecord as ab,
|
|
3038
|
-
|
|
3039
|
-
|
|
3040
|
-
|
|
3041
|
-
|
|
3042
|
-
|
|
3043
|
-
|
|
3044
|
-
|
|
3045
|
-
|
|
3046
|
-
|
|
3047
|
-
|
|
3048
|
-
|
|
3049
|
-
|
|
3050
|
-
|
|
3051
|
-
|
|
3052
|
-
|
|
3053
|
-
|
|
3054
|
-
|
|
3055
|
-
|
|
3056
|
-
|
|
3057
|
-
|
|
3058
|
-
|
|
3059
|
-
|
|
3060
|
-
|
|
3061
|
-
|
|
3098
|
+
defaultProduct as ac,
|
|
3099
|
+
productOfRepo as ad,
|
|
3100
|
+
baseBranchOf as ae,
|
|
3101
|
+
DEFAULT_TOKEN_PATHS as af,
|
|
3102
|
+
layoutOptions as ag,
|
|
3103
|
+
buildTokenSet as ah,
|
|
3104
|
+
readPreviewComment as ai,
|
|
3105
|
+
slugify as aj,
|
|
3106
|
+
defineConfig as ak,
|
|
3107
|
+
globToRegExp as al,
|
|
3108
|
+
ConfigError as am,
|
|
3109
|
+
DEFAULT_CHANGES_MODE as an,
|
|
3110
|
+
DEFAULT_OVERRIDE as ao,
|
|
3111
|
+
DEFAULT_PRODUCTS as ap,
|
|
3112
|
+
isGuardrail as aq,
|
|
3113
|
+
AAA_MIN as ar,
|
|
3114
|
+
AA_MIN as as,
|
|
3115
|
+
CHANGES_MODES as at,
|
|
3116
|
+
CONTRAST_CELL_MAX as au,
|
|
3117
|
+
CONTRAST_CHECKS_FILE as av,
|
|
3118
|
+
DEFAULT_GOVERNANCE as aw,
|
|
3119
|
+
DEFAULT_RIGHTS as ax,
|
|
3120
|
+
DEFAULT_VISUAL_IMPACT as ay,
|
|
3121
|
+
DTCG_TYPES as az,
|
|
3062
3122
|
modesOf as b,
|
|
3063
|
-
|
|
3064
|
-
|
|
3065
|
-
|
|
3066
|
-
|
|
3067
|
-
|
|
3068
|
-
|
|
3069
|
-
|
|
3070
|
-
|
|
3071
|
-
|
|
3072
|
-
|
|
3073
|
-
|
|
3074
|
-
|
|
3075
|
-
|
|
3076
|
-
|
|
3077
|
-
|
|
3078
|
-
|
|
3079
|
-
|
|
3080
|
-
|
|
3081
|
-
|
|
3082
|
-
|
|
3083
|
-
|
|
3084
|
-
|
|
3085
|
-
|
|
3086
|
-
|
|
3087
|
-
|
|
3088
|
-
|
|
3089
|
-
|
|
3090
|
-
|
|
3091
|
-
|
|
3092
|
-
|
|
3093
|
-
|
|
3094
|
-
|
|
3095
|
-
|
|
3096
|
-
|
|
3097
|
-
|
|
3098
|
-
|
|
3099
|
-
|
|
3100
|
-
|
|
3101
|
-
|
|
3102
|
-
|
|
3103
|
-
|
|
3104
|
-
|
|
3105
|
-
|
|
3106
|
-
|
|
3107
|
-
|
|
3108
|
-
|
|
3109
|
-
|
|
3110
|
-
|
|
3111
|
-
|
|
3112
|
-
|
|
3113
|
-
|
|
3114
|
-
|
|
3115
|
-
|
|
3116
|
-
|
|
3117
|
-
|
|
3118
|
-
|
|
3119
|
-
|
|
3120
|
-
|
|
3121
|
-
|
|
3122
|
-
|
|
3123
|
-
|
|
3124
|
-
|
|
3125
|
-
|
|
3126
|
-
|
|
3123
|
+
previewLinksOf as b$,
|
|
3124
|
+
changesMode as b0,
|
|
3125
|
+
clearRawDeep as b1,
|
|
3126
|
+
colorToCss as b2,
|
|
3127
|
+
colorsEqual as b3,
|
|
3128
|
+
comboKey as b4,
|
|
3129
|
+
commitMessage as b5,
|
|
3130
|
+
compactJson as b6,
|
|
3131
|
+
composePrBody as b7,
|
|
3132
|
+
composite as b8,
|
|
3133
|
+
contextFor as b9,
|
|
3134
|
+
indexByPath as bA,
|
|
3135
|
+
inheritedTypeAt as bB,
|
|
3136
|
+
installCommand as bC,
|
|
3137
|
+
installCommandFromPreviewComment as bD,
|
|
3138
|
+
isTeamEntry as bE,
|
|
3139
|
+
isTokenFile as bF,
|
|
3140
|
+
isVercelComment as bG,
|
|
3141
|
+
kindForMin as bH,
|
|
3142
|
+
layeredParityIssues as bI,
|
|
3143
|
+
libraryIsPublic as bJ,
|
|
3144
|
+
luminance as bK,
|
|
3145
|
+
nearestQuestion as bL,
|
|
3146
|
+
neededBySection as bM,
|
|
3147
|
+
nodesEqual as bN,
|
|
3148
|
+
normalizeRights as bO,
|
|
3149
|
+
overrideKey as bP,
|
|
3150
|
+
ownerEntryProblems as bQ,
|
|
3151
|
+
pairKey as bR,
|
|
3152
|
+
parseDimension as bS,
|
|
3153
|
+
parseJson as bT,
|
|
3154
|
+
parseNeededBy as bU,
|
|
3155
|
+
parseOwnerEntry as bV,
|
|
3156
|
+
parseVercelComment as bW,
|
|
3157
|
+
pieceValueField as bX,
|
|
3158
|
+
piecesSection as bY,
|
|
3159
|
+
plainEqual as bZ,
|
|
3160
|
+
previewComment as b_,
|
|
3161
|
+
contrastLevel as ba,
|
|
3162
|
+
contrastPair as bb,
|
|
3163
|
+
contrastRatio as bc,
|
|
3164
|
+
defaultContext as bd,
|
|
3165
|
+
defaultTitle as be,
|
|
3166
|
+
detectLayout as bf,
|
|
3167
|
+
entriesFor as bg,
|
|
3168
|
+
entryLabel as bh,
|
|
3169
|
+
expandEntries as bi,
|
|
3170
|
+
expandOwners as bj,
|
|
3171
|
+
fieldChanges as bk,
|
|
3172
|
+
figmaPushNextLine as bl,
|
|
3173
|
+
figmaPushTierLabel as bm,
|
|
3174
|
+
findProduct as bn,
|
|
3175
|
+
findToken as bo,
|
|
3176
|
+
findVercelComment as bp,
|
|
3177
|
+
flattenLayerFile as bq,
|
|
3178
|
+
formatNumber as br,
|
|
3179
|
+
formatOwnerEntry as bs,
|
|
3180
|
+
fromPlain as bt,
|
|
3181
|
+
getChild as bu,
|
|
3182
|
+
getEntry as bv,
|
|
3183
|
+
groupsPhrase as bw,
|
|
3184
|
+
hasVisualWorkflow as bx,
|
|
3185
|
+
hexToRgba as by,
|
|
3186
|
+
holdersOf as bz,
|
|
3127
3187
|
TIER_AXIS as c,
|
|
3128
|
-
|
|
3129
|
-
|
|
3130
|
-
|
|
3131
|
-
|
|
3132
|
-
|
|
3133
|
-
|
|
3134
|
-
|
|
3135
|
-
|
|
3136
|
-
|
|
3137
|
-
|
|
3138
|
-
|
|
3139
|
-
|
|
3140
|
-
|
|
3141
|
-
|
|
3142
|
-
|
|
3143
|
-
|
|
3144
|
-
|
|
3145
|
-
|
|
3146
|
-
|
|
3147
|
-
|
|
3148
|
-
|
|
3149
|
-
|
|
3150
|
-
|
|
3151
|
-
|
|
3152
|
-
|
|
3153
|
-
|
|
3154
|
-
|
|
3155
|
-
|
|
3156
|
-
|
|
3157
|
-
|
|
3158
|
-
|
|
3159
|
-
|
|
3160
|
-
|
|
3161
|
-
|
|
3162
|
-
|
|
3163
|
-
|
|
3164
|
-
|
|
3188
|
+
productForPlace as c0,
|
|
3189
|
+
productLabel as c1,
|
|
3190
|
+
productMarks as c2,
|
|
3191
|
+
productProblems as c3,
|
|
3192
|
+
productRepoOf as c4,
|
|
3193
|
+
productsOf as c5,
|
|
3194
|
+
projectOfLabel as c6,
|
|
3195
|
+
protectedBranchesOf as c7,
|
|
3196
|
+
renderedColor as c8,
|
|
3197
|
+
rgbaToDtcg as c9,
|
|
3198
|
+
valueIn as cA,
|
|
3199
|
+
valueToCss as cB,
|
|
3200
|
+
visualImpactProblems as cC,
|
|
3201
|
+
visualOffer as cD,
|
|
3202
|
+
whoCanShipSentence as cE,
|
|
3203
|
+
whyItExists as cF,
|
|
3204
|
+
rightsProblems as ca,
|
|
3205
|
+
sameProducts as cb,
|
|
3206
|
+
sameToken as cc,
|
|
3207
|
+
serializeJson as cd,
|
|
3208
|
+
shipPolicy as ce,
|
|
3209
|
+
snapshotUrl as cf,
|
|
3210
|
+
soloApprover as cg,
|
|
3211
|
+
soloOwnerOf as ch,
|
|
3212
|
+
soloOwnerSentence as ci,
|
|
3213
|
+
storybookUrl as cj,
|
|
3214
|
+
suggestNearestComment as ck,
|
|
3215
|
+
summarizeTokenChange as cl,
|
|
3216
|
+
tarballAssetName as cm,
|
|
3217
|
+
tarballUrl as cn,
|
|
3218
|
+
teamKey as co,
|
|
3219
|
+
teamKeyOf as cp,
|
|
3220
|
+
teamName as cq,
|
|
3221
|
+
teamUnreadableMessage as cr,
|
|
3222
|
+
teamsIn as cs,
|
|
3223
|
+
toAlias as ct,
|
|
3224
|
+
toMap as cu,
|
|
3225
|
+
toPlain as cv,
|
|
3226
|
+
tokenBump as cw,
|
|
3227
|
+
tokenNode as cx,
|
|
3228
|
+
unreadableShipTeams as cy,
|
|
3229
|
+
unreadableTeams as cz,
|
|
3165
3230
|
collectRefs as d,
|
|
3166
3231
|
evaluatePairs as e,
|
|
3167
3232
|
findReferenceProblems as f,
|
|
@@ -3186,4 +3251,4 @@ export {
|
|
|
3186
3251
|
parseColor as y,
|
|
3187
3252
|
rgbaToHex as z
|
|
3188
3253
|
};
|
|
3189
|
-
//# sourceMappingURL=prod-branch-
|
|
3254
|
+
//# sourceMappingURL=prod-branch-C7tphFAA.js.map
|