trybeacon 0.1.48 → 0.1.50
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/.next/BUILD_ID +1 -1
- package/.next/app-path-routes-manifest.json +13 -13
- package/.next/build-manifest.json +2 -2
- package/.next/prerender-manifest.json +3 -3
- package/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
- package/.next/server/app/_global-error.html +1 -1
- package/.next/server/app/_global-error.rsc +1 -1
- package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/server/app/_not-found.html +1 -1
- package/.next/server/app/_not-found.rsc +2 -2
- package/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
- package/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/.next/server/app/_not-found.segments/_index.segment.rsc +2 -2
- package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/api/context/feature/route.js +1 -1
- package/.next/server/app/api/db/arrange/route.js +1 -1
- package/.next/server/app/api/entities/route.js +1 -1
- package/.next/server/app/api/map/start/route.js +1 -1
- package/.next/server/app/docs/page.js +1 -1
- package/.next/server/app/docs/page_client-reference-manifest.js +1 -1
- package/.next/server/app/docs.html +1 -1
- package/.next/server/app/docs.rsc +3 -3
- package/.next/server/app/docs.segments/_full.segment.rsc +3 -3
- package/.next/server/app/docs.segments/_head.segment.rsc +1 -1
- package/.next/server/app/docs.segments/_index.segment.rsc +2 -2
- package/.next/server/app/docs.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/docs.segments/docs/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/docs.segments/docs.segment.rsc +1 -1
- package/.next/server/app/feedback/page_client-reference-manifest.js +1 -1
- package/.next/server/app/feedback.html +1 -1
- package/.next/server/app/feedback.rsc +2 -2
- package/.next/server/app/feedback.segments/_full.segment.rsc +2 -2
- package/.next/server/app/feedback.segments/_head.segment.rsc +1 -1
- package/.next/server/app/feedback.segments/_index.segment.rsc +2 -2
- package/.next/server/app/feedback.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/feedback.segments/feedback/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/feedback.segments/feedback.segment.rsc +1 -1
- package/.next/server/app/help/page.js +1 -1
- package/.next/server/app/help/page_client-reference-manifest.js +1 -1
- package/.next/server/app/help.html +1 -1
- package/.next/server/app/help.rsc +4 -4
- package/.next/server/app/help.segments/_full.segment.rsc +4 -4
- package/.next/server/app/help.segments/_head.segment.rsc +1 -1
- package/.next/server/app/help.segments/_index.segment.rsc +2 -2
- package/.next/server/app/help.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/help.segments/help/__PAGE__.segment.rsc +10 -12
- package/.next/server/app/help.segments/help.segment.rsc +1 -1
- package/.next/server/app/index.html +1 -1
- package/.next/server/app/index.rsc +3 -3
- package/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/index.segments/_full.segment.rsc +3 -3
- package/.next/server/app/index.segments/_head.segment.rsc +1 -1
- package/.next/server/app/index.segments/_index.segment.rsc +2 -2
- package/.next/server/app/index.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/map/page.js +2 -2
- package/.next/server/app/map/page.js.nft.json +1 -1
- package/.next/server/app/map/page_client-reference-manifest.js +1 -1
- package/.next/server/app/page.js +1 -1
- package/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/server/app/plan/page.js +2 -2
- package/.next/server/app/plan/page.js.nft.json +1 -1
- package/.next/server/app/plan/page_client-reference-manifest.js +1 -1
- package/.next/server/app/settings/page_client-reference-manifest.js +1 -1
- package/.next/server/app-paths-manifest.json +13 -13
- package/.next/server/chunks/1130.js +1 -1
- package/.next/server/chunks/1341.js +1 -1
- package/.next/server/chunks/2933.js +1 -1
- package/.next/server/chunks/{7208.js → 2999.js} +3 -3
- package/.next/server/chunks/3622.js +1 -1
- package/.next/server/chunks/9734.js +1 -1
- package/.next/server/chunks/9773.js +1 -0
- package/.next/server/middleware-build-manifest.js +1 -1
- package/.next/server/pages/404.html +1 -1
- package/.next/server/pages/500.html +1 -1
- package/.next/server/server-reference-manifest.js +1 -1
- package/.next/server/server-reference-manifest.json +1 -1
- package/.next/static/chunks/1487-13f43d25413ae041.js +1 -0
- package/.next/static/chunks/3343-af1292b51a276724.js +1 -0
- package/.next/static/chunks/app/docs/page-ae19d2e91ec24771.js +1 -0
- package/.next/static/chunks/app/map/page-5074176a5e746ffb.js +1 -0
- package/.next/static/chunks/app/page-541e900d67f17dae.js +1 -0
- package/.next/static/chunks/app/plan/{page-257d486640eadd7f.js → page-3c4c1fc03275299f.js} +1 -1
- package/.next/static/css/629ab377241de9ca.css +1 -0
- package/.next/trace +39 -39
- package/.next/trace-build +1 -1
- package/dist/bin/beacon.js +7 -7
- package/dist/bin/doctor.js +43 -32
- package/dist/bin/hook.js +43 -32
- package/dist/bin/mcp.js +49 -38
- package/dist/bin/plan.js +45 -34
- package/dist/bin/prompt.js +1 -1
- package/dist/bin/remove.js +7 -7
- package/dist/bin/uninstall.js +42 -31
- package/dist/lib/assets.js +30 -19
- package/dist/lib/codex-install.js +40 -29
- package/dist/lib/global-install.js +40 -29
- package/package.json +1 -1
- package/.next/server/chunks/805.js +0 -1
- package/.next/static/chunks/8074-a6b2725786399e2c.js +0 -1
- package/.next/static/chunks/85-82015ecb44b65d3e.js +0 -1
- package/.next/static/chunks/app/docs/page-0c841cb9a7aa2f9a.js +0 -1
- package/.next/static/chunks/app/map/page-c06fcf30d8172f82.js +0 -1
- package/.next/static/chunks/app/page-968dd5a6f667bff9.js +0 -1
- package/.next/static/css/5a58d83133d25695.css +0 -1
- /package/.next/static/{gNMdQmtkjPn6XQhRMDoMg → J1AU9kp6Vs1x9YOBkXMiR}/_buildManifest.js +0 -0
- /package/.next/static/{gNMdQmtkjPn6XQhRMDoMg → J1AU9kp6Vs1x9YOBkXMiR}/_ssgManifest.js +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";exports.id=3622,exports.ids=[3622],exports.modules={29833:(a,b,c)=>{c.d(b,{mk:()=>i});let d=new Set(["a","an","the","of","for","to","and","or","in","on","with","via","by","using","use","add","adds","support","implement","implementation","feature","new","build","create","o","os","as","um","uma","de","da","do","das","dos","para","por","com","e","ou","no","na","nos","nas","ao","aos","adicionar","implementar","suporte","suportar","nova","novo","funcionalidade","usar","usando","criar"]);function e(a){return a.normalize("NFD").replace(/[̀-ͯ]/g,"").toLowerCase().replace(/[^a-z0-9]+/g," ").trim().replace(/\s+/g," ")}function f(a){return e(a).split(" ").filter(a=>a&&!d.has(a))}function g(a,b){if(!a.size||!b.size)return 0;let c=0;for(let d of a)b.has(d)&&c++;return 2*c/(a.size+b.size)}function h(a){let b=e(a).replace(/ /g,""),c=new Set;for(let a=0;a<b.length-1;a++)c.add(b.slice(a,a+2));return c}function i(a,b,c={}){let d=c.confident??.72,j=c.consider??.5,k=c.margin??.1,l=b.map(b=>{var c,d;let i,j;return{...b,score:Math.round(100*(c=a,d=b.title,i=e(c),j=e(d),i&&j?i===j?1:Math.min(1,.7*g(new Set(f(c)),new Set(f(d)))+.4*g(h(c),h(d))):0))/100}}).sort((a,b)=>b.score-a.score),m=l[0];if(!m||m.score<j)return{best:null,candidates:[]};let n=l[1]?.score??0,o=1===l.length||m.score-n>=k;return m.score>=d&&o?{best:m,candidates:[]}:{best:null,candidates:l.filter(a=>a.score>=j).slice(0,4)}}},38356:(a,b,c)=>{c.d(b,{AG:()=>h,Ey:()=>i,Kn:()=>f,oA:()=>g});var d=c(32753),e=c(29833);function f(a,b){let c=b?.requireLayer??!1,e=a.map(a=>{let b=[],e=a.cluster??a.category??a.domain??null;return e&&e.trim()||b.push("category"),null==a.priority&&b.push("priority"),c&&!(0,d.jR)(a.layer)&&b.push("layer"),b.length?` • "${a.title?.trim()||"(untitled)"}" — missing ${b.join(" + ")}`:null}).filter(a=>null!==a);return 0===e.length?null:"⛔ Every roadmap feature needs a category AND a priority — they drive grouping and ordering on the board, and the user shouldn't have to add them by hand."+(c?' This workspace has a frontend surface, so every feature must also carry `layer`: "frontend" | "backend" | "fullstack" — which side of the stack the work lands on.':"")+" Missing:\n"+e.join("\n")+"\n\nRe-present with each feature carrying its category as `category` (or `cluster` — both work; e.g. AUTH, SEARCH, DATA, INTEL, BILLING …) and `priority` (0 = P0 critical, 1 = P1 high, 2 = P2 medium, 3 = P3 low)."+(c?" Set `layer` on EVERY feature too.":"")+" Don't rely on defaults."}function g(a){let b=(a.title??"").trim();if(!b)return"⛔ A feature needs a non-empty title.";if(!(a.category??"").trim()){let c=function(a){let b=new Set;for(let c of a){let a=(c.cluster??"").trim();a&&b.add(a)}return[...b].sort()}(a.existing),d=c.length?` Reuse an existing category where it fits: ${c.join(", ")}.`:"";return`⛔ Feature "${b}" has no category. Every roadmap feature needs one — it drives grouping and color on the board.${d} Pass it as \`category\` (e.g. AUTH, SEARCH, DATA, INTEL, BILLING, INFRA …); don't rely on a default.`}if(a.requireLayer&&!(0,d.jR)(a.layer))return`⛔ Feature "${b}" has no layer. This workspace has a frontend surface, so every roadmap feature must say which side of the stack it lands on. Pass it as \`layer\`: "frontend" | "backend" | "fullstack".`;let c=(0,e.mk)(b,a.existing.map(a=>({id:a.id,title:a.title})));if(c.best){let d=a.existing.find(a=>a.id===c.best.id),e=d?.status?` (${d.status})`:"";return`⛔ "${b}" already exists as the feature "${d?.title??c.best.title}"${e}. Don't create a duplicate —
|
|
1
|
+
"use strict";exports.id=3622,exports.ids=[3622],exports.modules={29833:(a,b,c)=>{c.d(b,{mk:()=>i});let d=new Set(["a","an","the","of","for","to","and","or","in","on","with","via","by","using","use","add","adds","support","implement","implementation","feature","new","build","create","o","os","as","um","uma","de","da","do","das","dos","para","por","com","e","ou","no","na","nos","nas","ao","aos","adicionar","implementar","suporte","suportar","nova","novo","funcionalidade","usar","usando","criar"]);function e(a){return a.normalize("NFD").replace(/[̀-ͯ]/g,"").toLowerCase().replace(/[^a-z0-9]+/g," ").trim().replace(/\s+/g," ")}function f(a){return e(a).split(" ").filter(a=>a&&!d.has(a))}function g(a,b){if(!a.size||!b.size)return 0;let c=0;for(let d of a)b.has(d)&&c++;return 2*c/(a.size+b.size)}function h(a){let b=e(a).replace(/ /g,""),c=new Set;for(let a=0;a<b.length-1;a++)c.add(b.slice(a,a+2));return c}function i(a,b,c={}){let d=c.confident??.72,j=c.consider??.5,k=c.margin??.1,l=b.map(b=>{var c,d;let i,j;return{...b,score:Math.round(100*(c=a,d=b.title,i=e(c),j=e(d),i&&j?i===j?1:Math.min(1,.7*g(new Set(f(c)),new Set(f(d)))+.4*g(h(c),h(d))):0))/100}}).sort((a,b)=>b.score-a.score),m=l[0];if(!m||m.score<j)return{best:null,candidates:[]};let n=l[1]?.score??0,o=1===l.length||m.score-n>=k;return m.score>=d&&o?{best:m,candidates:[]}:{best:null,candidates:l.filter(a=>a.score>=j).slice(0,4)}}},38356:(a,b,c)=>{c.d(b,{AG:()=>h,Ey:()=>i,Kn:()=>f,oA:()=>g});var d=c(32753),e=c(29833);function f(a,b){let c=b?.requireLayer??!1,e=a.map(a=>{let b=[],e=a.cluster??a.category??a.domain??null;return e&&e.trim()||b.push("category"),null==a.priority&&b.push("priority"),c&&!(0,d.jR)(a.layer)&&b.push("layer"),b.length?` • "${a.title?.trim()||"(untitled)"}" — missing ${b.join(" + ")}`:null}).filter(a=>null!==a);return 0===e.length?null:"⛔ Every roadmap feature needs a category AND a priority — they drive grouping and ordering on the board, and the user shouldn't have to add them by hand."+(c?' This workspace has a frontend surface, so every feature must also carry `layer`: "frontend" | "backend" | "fullstack" — which side of the stack the work lands on.':"")+" Missing:\n"+e.join("\n")+"\n\nRe-present with each feature carrying its category as `category` (or `cluster` — both work; e.g. AUTH, SEARCH, DATA, INTEL, BILLING …) and `priority` (0 = P0 critical, 1 = P1 high, 2 = P2 medium, 3 = P3 low)."+(c?" Set `layer` on EVERY feature too.":"")+" Don't rely on defaults."}function g(a){let b=(a.title??"").trim();if(!b)return"⛔ A feature needs a non-empty title.";if(!(a.category??"").trim()){let c=function(a){let b=new Set;for(let c of a){let a=(c.cluster??"").trim();a&&b.add(a)}return[...b].sort()}(a.existing),d=c.length?` Reuse an existing category where it fits: ${c.join(", ")}.`:"";return`⛔ Feature "${b}" has no category. Every roadmap feature needs one — it drives grouping and color on the board.${d} Pass it as \`category\` (e.g. AUTH, SEARCH, DATA, INTEL, BILLING, INFRA …); don't rely on a default.`}if(a.requireLayer&&!(0,d.jR)(a.layer))return`⛔ Feature "${b}" has no layer. This workspace has a frontend surface, so every roadmap feature must say which side of the stack it lands on. Pass it as \`layer\`: "frontend" | "backend" | "fullstack".`;let c=(0,e.mk)(b,a.existing.map(a=>({id:a.id,title:a.title})));if(c.best){let d=a.existing.find(a=>a.id===c.best.id),e=d?.status?` (${d.status})`:"";return`⛔ "${b}" already exists as the feature "${d?.title??c.best.title}"${e}. Don't create a duplicate — start it with \`beacon_feature({ action: "start", id })\`, add sub-tasks with \`beacon_feature({ action: "subtasks" })\`, or finish it with \`beacon_feature({ action: "done" })\`.`}return null}function h(a,b){let c=b.map(a=>({id:a.id,title:a.title})),d=a.map(a=>{let d=(0,e.mk)(a.title??"",c);return d.best?{title:a.title,hit:b.find(a=>a.id===d.best.id)}:null}).filter(a=>null!==a);return d.length?"⛔ These proposed features already exist on the roadmap — reuse them instead of creating duplicates:\n"+d.map(a=>` • "${a.title}" → existing "${a.hit.title}"${a.hit.status?` (${a.hit.status})`:""}`).join("\n")+'\n\nDrop the duplicate(s) from the plan; to add work to an existing feature, ship sub-tasks or update it via `beacon_feature({ action: "done" })`. Keep only genuinely new features in the proposal.':null}function i(a,b){let c=(a??"").trim();if(!c)return null;let d=(0,e.mk)(c,b);if(d.best)return null;let f=d.candidates.length?` Did you mean: ${d.candidates.map(a=>`"${a.title}"`).join(", ")}?`:"";return`⛔ front "${c}" doesn't match an existing feature.${f} \`front\` nests a feature UNDER an existing parent feature — it is NOT a domain tag. If "${c}" is a domain, pass it as \`category\` instead. If it's a real umbrella feature, create it first via beacon_propose_plan.`}},63622:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.r(b),c.d(b,{DELETE:()=>v,GET:()=>t,POST:()=>u,dynamic:()=>w});var e=c(77598),f=c(44046),g=c(6324),h=c(50101),i=c(38356),j=c(72179),k=c(24433),l=c(72658),m=c(19734),n=c(18072),o=c(54655),p=c(72595),q=c(56727),r=c(6716),s=a([h,j,k,l,m,n,p,q]);[h,j,k,l,m,n,p,q]=s.then?(await s)():s;let w="force-dynamic",x=f.Ik({description:f.Yj().trim().min(1),markdown:f.Yj().optional(),draft:g.Xg.optional(),features:h.Qy.shape.features.optional(),contract:f.YO(f.Yj().trim().min(1)).optional()});async function t(a){return(0,q.X_)((0,r.Ck)(a),async()=>{let a=(0,j.iL)(),b=await (0,h.C5)(),c=(0,o.Fn)(),d=(a?.tables.length??0)+(a?.endpoints.length??0)+b.features.length>0||!!c?.markdown;return Response.json({pending:d,description:c?.description??"",proposedAt:c?.proposedAt??0,tables:a?.tables.length??0,endpoints:a?.endpoints.length??0,features:b.features.length})})}async function u(a){try{let b=x.parse(await a.json());return await (0,q.X_)((0,r.Ck)(a),async()=>{let a=(0,e.createHash)("sha256").update(JSON.stringify({d:b.description,m:b.markdown??"",t:b.draft??null,f:b.features??null})).digest("hex"),c=b.draft,d=b.features,f=b.markdown,g=b.contract,r=(c?.tables.length??0)>0||(c?.endpoints.length??0)>0||(c?.relations.length??0)>0||(d?.length??0)>0;if(b.markdown&&!r){let a=(0,k.J)(b.markdown);f=a.prose,c=a.draft,d=a.features,g=g??a.contract}let s=(c?.tables.length??0)+(c?.endpoints.length??0)+(d?.length??0)>0,t=(0,o.Fn)();if(t?.contentHash===a&&(t.proposedAt??0)>0){let a=(0,j.iL)(),b=await (0,h.C5)();if((a?.tables.length??0)+(a?.endpoints.length??0)+b.features.length>0||!s)return Response.json({ok:!0,resumed:!0})}if(d&&d.length){let a=await (0,p.jZ)(),b=(0,i.Kn)(d,{requireLayer:a});if(b)return Response.json({error:b},{status:422});let c=await q.db.query.node.findMany({where:(a,{and:b,eq:c,ne:d})=>b(c(a.view,"ROADMAP"),d(a.source,"DRAFT")),columns:{id:!0,title:!0,cluster:!0,status:!0}}),e=(0,i.AG)(d,c);if(e)return Response.json({error:e},{status:422})}let u=0,v=0;if(c&&(c.tables.length||c.endpoints.length)){let a=await (0,l.C)(),b=(0,j.Gf)(c,a);u=b.tables.length,v=b.endpoints.length}let w=0;d&&d.length&&(await (0,h.KR)({features:d}),w=d.length);let x=!!f?.trim();return 0!==u||0!==v||0!==w||x?((0,o.UC)({description:b.description,proposedAt:Math.max(Date.now(),(t?.proposedAt??0)+1),markdown:x?f:t?.description===b.description?t?.markdown:void 0,originalFeatures:d?.map(a=>a.title)??[],contractFiles:g??(t?.description===b.description?t?.contractFiles:void 0),contentHash:a}),(0,n.Ze)(),await (0,m.Bx)(),Response.json({ok:!0,tables:u,endpoints:v,features:w})):new Response("plan must include at least one table, endpoint, feature, or markdown",{status:400})})}catch(a){return new Response(`plan failed: ${a instanceof Error?a.message:"error"}`,{status:400})}}async function v(a){return(0,q.X_)((0,r.Ck)(a),async()=>(await (0,n.sS)(),new Response(null,{status:204})))}d()}catch(a){d(a)}})},72595:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{Wg:()=>k,hA:()=>i,jZ:()=>l,zr:()=>j});var e=c(56727),f=c(30046),g=c(32753),h=a([e]);async function i(a=e.db){let[b]=await a.insert(f.projectMeta).values({id:"singleton"}).onConflictDoUpdate({target:f.projectMeta.id,set:{id:"singleton"}}).returning();return b}async function j(a,b=e.db){let c={};null!=a.overview&&(c.overview=a.overview),a.conventions&&(c.conventions=JSON.stringify(a.conventions)),void 0!==a.hasFrontend&&(c.hasFrontend=a.hasFrontend),a.classificationRoots&&(c.classificationRoots=JSON.stringify(a.classificationRoots)),0===Object.keys(c).length&&(c.id="singleton");let[d]=await b.insert(f.projectMeta).values({id:"singleton",overview:a.overview??null,conventions:JSON.stringify(a.conventions??[]),hasFrontend:a.hasFrontend??null,classificationRoots:JSON.stringify(a.classificationRoots??[])}).onConflictDoUpdate({target:f.projectMeta.id,set:c}).returning();return d}async function k(a=e.db){let b=await i(a);try{let a=JSON.parse(b.classificationRoots??"[]");return Array.isArray(a)?a.filter(a=>"string"==typeof a):[]}catch{return[]}}async function l(a=e.db){let b=await i(a);if(null!=b.hasFrontend)return b.hasFrontend;let c=await a.select({path:f.codeFile.path}).from(f.codeFile);return(0,g.EC)(c.map(a=>a.path))}e=(h.then?(await h)():h)[0],d()}catch(a){d(a)}})}};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";exports.id=9734,exports.ids=[9734],exports.modules={7903:(a,b,c)=>{c.d(b,{VE:()=>k,qT:()=>l,zP:()=>h});var d=c(73024),e=c(76760),f=c(45301),g=c(32213);let h={roadmap:"grouped-2",architecture:"arch-layered-3",db:"db-dock-3"};function i(){return(0,e.join)((0,f.KS)(),"board-layout-state.json")}function j(){try{return JSON.parse((0,d.readFileSync)(i(),"utf8"))}catch{return null}}function k(a){let b=j(),c=b?.[a];return{sig:c?.sig??("roadmap"!==a||b?null:function(){try{return JSON.parse((0,d.readFileSync)((0,e.join)((0,f.KS)(),"roadmap-layout-sig.json"),"utf8")).sig??null}catch{return null}}())??null,arrangedBy:c?.arrangedBy??null}}function l(a,b){let c=j()??{};c[a]={...c[a],...b},(0,g.q)(i(),c)}},19734:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{Bx:()=>r,HF:()=>q,Rw:()=>s,ap:()=>t});var e=c(44046),f=c(91430),g=c(34216),h=c(56727),i=c(30046),j=c(72658),k=c(35498),l=c(49565),m=c(24983),n=c(96976),o=c(73033),p=a([h,j,k,l,o]);[h,j,k,l,o]=p.then?(await p)():p;let t=e.Ik({tables:e.YO(e.Ik({name:e.Yj().trim().min(1),domain:e.Yj().nullish(),description:e.Yj().nullish(),columns:e.YO(e.Ik({name:e.Yj().trim().min(1),type:e.Yj().trim().min(1),isPk:e.zM().optional(),isFk:e.zM().optional(),nullable:e.zM().optional(),note:e.Yj().nullish()})).default([])})).default([]),relations:e.YO(e.Ik({fromTable:e.Yj(),fromColumn:e.Yj(),toTable:e.Yj(),toColumn:e.Yj(),label:e.Yj().nullish()})).default([]),endpoints:e.YO(e.Ik({method:e.Yj().trim().min(1),path:e.Yj().trim().min(1),domain:e.Yj().nullish(),description:e.Yj().nullish(),uses:e.YO(e.Ik({table:e.Yj(),access:e.Yj().default("read")})).default([])})).default([])});async function q(a=h.db){let b=await a.query.syncState.findFirst({where:(a,{eq:b})=>b(a.id,"singleton")});return b?.version??0}async function r(a=h.db){let[b]=await a.insert(i.syncState).values({id:"singleton",version:1}).onConflictDoUpdate({target:i.syncState.id,set:{version:(0,f.ll)`${i.syncState.version} + 1`}}).returning();return b.version}async function s(a,b=h.db,c={}){let d=t.parse(a),e=d.tables.length>0,f=d.endpoints.length>0,p=d.tables.map(a=>a.name);e&&await b.delete(i.dbTable).where(p.length?(0,g.Uo)((0,g.eq)(i.dbTable.source,"INTROSPECTION"),(0,g.KL)(i.dbTable.name,p)):(0,g.eq)(i.dbTable.source,"INTROSPECTION"));let q=await b.query.dbTable.findMany({columns:{id:!0,name:!0,domain:!0,x:!0,y:!0},with:{columns:{columns:{id:!0}}}}),u=await b.query.endpoint.findMany({columns:{id:!0,method:!0,path:!0,x:!0,y:!0},with:{tables:{columns:{tableId:!0}}}}),v=new Map(q.map(a=>[a.name,a])),w=q.map(a=>({id:a.id,name:a.name,domain:a.domain,columnCount:a.columns.length,x:a.x,y:a.y})),x=u.map(a=>({id:a.id,method:a.method,path:a.path,uses:a.tables.map(a=>({tableId:a.tableId})),x:a.x,y:a.y})),y=new Map;for(let a of d.tables){if(v.has(a.name))continue;let b=(0,n.uQ)({domain:a.domain??null,columnCount:a.columns.length},w,x);y.set(a.name,b),w.push({id:`new:${a.name}`,name:a.name,domain:a.domain??null,columnCount:a.columns.length,...b})}let z=new Map;for(let a of d.tables){let c=v.get(a.name),d=y.get(a.name),e=c?.x??d?.x??0,f=c?.y??d?.y??0,[h]=await b.insert(i.dbTable).values({name:a.name,domain:a.domain??null,description:a.description??null,source:"INTROSPECTION",x:e,y:f}).onConflictDoUpdate({target:i.dbTable.name,set:{...null!=a.domain?{domain:a.domain}:{},...null!=a.description?{description:a.description}:{},source:"INTROSPECTION"}}).returning();z.set(a.name,h.id),await b.delete(i.dbColumn).where((0,g.eq)(i.dbColumn.tableId,h.id)),a.columns.length&&await b.insert(i.dbColumn).values(a.columns.map((a,b)=>({tableId:h.id,name:a.name,type:a.type,isPk:a.isPk??!1,isFk:a.isFk??!1,nullable:a.nullable??!0,note:a.note??null,ord:b})))}let A=[...z.values()];for(let a of(A.length&&await b.delete(i.dbRelation).where((0,g.or)((0,g.RV)(i.dbRelation.fromTableId,A),(0,g.RV)(i.dbRelation.toTableId,A))),d.relations)){let c=z.get(a.fromTable),d=z.get(a.toTable);c&&d&&await b.insert(i.dbRelation).values({fromTableId:c,toTableId:d,fromColumn:a.fromColumn,toColumn:a.toColumn,label:a.label??`${a.fromColumn} → ${a.toTable}.${a.toColumn}`})}let B=new Set(d.endpoints.map(a=>`${a.method} ${a.path}`));if(f){let a=(await b.query.endpoint.findMany({where:(a,{eq:b})=>b(a.source,"INTROSPECTION")})).filter(a=>!B.has(`${a.method} ${a.path}`)).map(a=>a.id);a.length&&await b.delete(i.endpoint).where((0,g.RV)(i.endpoint.id,a))}for(let a of w)a.id.startsWith("new:")&&(a.id=z.get(a.name)??a.id);for(let a of d.endpoints){let d,e,f=await b.query.endpoint.findFirst({where:(b,{and:c,eq:d})=>c(d(b.method,a.method),d(b.path,a.path))});if(f)d=f.x,e=f.y;else{let b={id:`new:${a.method} ${a.path}`,method:a.method,path:a.path,uses:a.uses.map(a=>({tableId:z.get(a.table)??""})).filter(a=>a.tableId)},c=(0,n.ez)(b,w,x);d=c.x,e=c.y,x.push({...b,x:d,y:e})}let[h]=await b.insert(i.endpoint).values({method:a.method,path:a.path,domain:a.domain??null,description:a.description??null,source:"INTROSPECTION",x:d,y:e}).onConflictDoUpdate({target:[i.endpoint.method,i.endpoint.path],set:{...null!=a.domain?{domain:a.domain}:{},...null!=a.description?{description:a.description}:{},source:"INTROSPECTION"}}).returning();for(let d of((!c.partial||a.uses.length>0)&&await b.delete(i.endpointTable).where((0,g.eq)(i.endpointTable.endpointId,h.id)),a.uses)){let a=z.get(d.table)??(await b.query.dbTable.findFirst({where:(a,{eq:b})=>b(a.name,d.table)}))?.id;a&&await b.insert(i.endpointTable).values({endpointId:h.id,tableId:a,access:d.access})}}await (0,k.X)(b),await (0,l.q)(b);let C=await b.query.dbTable.findMany({where:(a,{eq:b})=>b(a.source,"INTROSPECTION"),columns:{x:!0,y:!0},with:{columns:{columns:{id:!0}}}}),D=await b.select({x:i.endpoint.x,y:i.endpoint.y}).from(i.endpoint);((0,m.v4)(C.map(a=>({x:a.x,y:a.y,columnCount:a.columns.length})))||(0,j.i)(D))&&await (0,o.r)(b);let E=await r(b);return{tables:d.tables.length,relations:d.relations.length,endpoints:d.endpoints.length,version:E}}d()}catch(a){d(a)}})},24983:(a,b,c)=>{c.d(b,{v4:()=>e});var d=c(96976);function e(a){let b=d.LT-20;for(let c=0;c<a.length;c++)for(let e=c+1;e<a.length;e++){let f=a[c],g=a[e],h=(0,d.mn)(f.columnCount),i=(0,d.mn)(g.columnCount);if(f.x<g.x+b&&f.x+b>g.x&&f.y<g.y+i&&f.y+h>g.y)return!0}return!1}},32213:(a,b,c)=>{c.d(b,{q:()=>f});var d=c(73024),e=c(76760);function f(a,b,c=!1){var g=JSON.stringify(b,null,c?2:void 0);(0,d.mkdirSync)((0,e.dirname)(a),{recursive:!0});let h=`${a}.tmp`;try{(0,d.writeFileSync)(h,g),(0,d.renameSync)(h,a)}catch(a){throw(0,d.rmSync)(h,{force:!0}),a}}},35498:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{X:()=>i});var e=c(34216),f=c(56727),g=c(30046),h=a([f]);async function i(a=f.db){let[b,c]=await Promise.all([a.query.endpoint.findMany({where:(a,{ne:b})=>b(a.source,"INTROSPECTION")}),a.query.endpoint.findMany({where:(a,{eq:b})=>b(a.source,"INTROSPECTION")})]),d={collapsed:0,mappings:[]};for(let f of b){let b=c.find(a=>(function(a,b){if(a.method.toUpperCase()!==b.method.toUpperCase())return!1;let c=a.path.replace(/\{[^}]*\}/g,"{}"),d=b.path.replace(/\{[^}]*\}/g,"{}");return d===c||d.endsWith(c)})(f,a));b&&(await a.delete(g.endpoint).where((0,e.eq)(g.endpoint.id,f.id)),d.collapsed++,d.mappings.push({planned:`${f.method} ${f.path}`,code:`${b.method} ${b.path}`}))}return d}f=(h.then?(await h)():h)[0],d()}catch(a){d(a)}})},45301:(a,b,c)=>{c.d(b,{KS:()=>l,Qq:()=>k,jv:()=>j});var d=c(31421),e=c(77598),f=c(48161),g=c(76760),h=c(6716);let i=null;function j(){if(process.env.BEACON_REPO)return process.env.BEACON_REPO;let a=(0,h.p1)();if(a){let b=(0,h.K4)(a);if(b)return b.path}let b=(0,h.WQ)();if(b)return b.path;if(i)return i;try{let a=(0,d.execSync)("git rev-parse --show-toplevel",{cwd:process.cwd(),stdio:["ignore","pipe","ignore"]}).toString().trim();if(a)return i=a}catch{}return i=(0,g.resolve)(process.cwd(),"../..")}function k(){return(0,g.basename)(j())}function l(){if(process.env.BEACON_DATA_DIR)return process.env.BEACON_DATA_DIR;let a=(0,h.p1)();if(a&&(0,h.K4)(a))return(0,h.T_)(a);let b=(0,h.WQ)();return b?(0,h.T_)(b.id):(0,g.join)((0,f.homedir)(),".beacon",(0,e.createHash)("sha256").update(j()).digest("hex").slice(0,12))}},49565:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{q:()=>j});var e=c(34216),f=c(56727),g=c(30046),h=a([f]);f=(h.then?(await h)():h)[0];let k=new Set(["DONE","CANCELLED","DEPRIORITIZED"]);async function i(a){let b=await a.query.node.findMany({where:(a,{and:b,eq:c,isNotNull:d})=>b(c(a.view,"ROADMAP"),d(a.planId)),columns:{planId:!0,status:!0}}),c=new Map;for(let a of b){let b=a.planId;c.set(b,(c.get(b)??!0)&&k.has(a.status))}return[...c.entries()].filter(([,a])=>a).map(([a])=>a)}async function j(a=f.db){let b=await i(a),c=a=>b.length?(0,e.or)((0,e.kZ)(a.planId),(0,e.RV)(a.planId,b)):(0,e.kZ)(a.planId),d=await a.delete(g.dbTable).where((0,e.Uo)((0,e.ne)(g.dbTable.source,"INTROSPECTION"),c(g.dbTable))).returning({id:g.dbTable.id}),h=await a.delete(g.endpoint).where((0,e.Uo)((0,e.ne)(g.endpoint.source,"INTROSPECTION"),c(g.endpoint))).returning({id:g.endpoint.id});return{tables:d.length,endpoints:h.length}}d()}catch(a){d(a)}})},72658:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{C:()=>h,i:()=>g});var e=c(56727),f=a([e]);function g(a){for(let b=0;b<a.length;b++)for(let c=b+1;c<a.length;c++){let d=a[b],e=a[c];if(d.x<e.x+240&&d.x+240>e.x&&d.y<e.y+50&&d.y+50>e.y)return!0}return!1}async function h(a=e.db){let[b,c]=await Promise.all([a.query.dbTable.findFirst({orderBy:(a,{desc:b})=>b(a.y)}),a.query.endpoint.findFirst({orderBy:(a,{desc:b})=>b(a.y)})]),d=Math.max(b?.y??0,c?.y??0);return d>0?d+280:0}e=(f.then?(await f)():f)[0],d()}catch(a){d(a)}})},73033:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{r:()=>k,v:()=>l});var e=c(34216),f=c(56727),g=c(30046),h=c(96976),i=c(7903),j=a([f]);async function k(a=f.db){let[b,c]=await Promise.all([a.query.dbTable.findMany({with:{columns:{columns:{id:!0}}},orderBy:(a,{asc:b})=>b(a.name)}),a.query.endpoint.findMany({with:{tables:{columns:{tableId:!0}}}})]),d=(0,h.kq)(b.map(a=>({id:a.id,name:a.name,domain:a.domain,columnCount:a.columns.length})),c.map(a=>({id:a.id,method:a.method,path:a.path,uses:a.tables.map(a=>({tableId:a.tableId}))}))),i=0;for(let c of b){let b=d.tables.get(c.id);b&&(Math.round(b.x)!==Math.round(c.x)||Math.round(b.y)!==Math.round(c.y))&&(await a.update(g.dbTable).set({x:b.x,y:b.y}).where((0,e.eq)(g.dbTable.id,c.id)),i++)}for(let b of c){let c=d.endpoints.get(b.id);c&&(Math.round(c.x)!==Math.round(b.x)||Math.round(c.y)!==Math.round(b.y))&&(await a.update(g.endpoint).set({x:c.x,y:c.y}).where((0,e.eq)(g.endpoint.id,b.id)),i++)}return i}async function l(a=f.db){let b=i.zP.db;(0,i.VE)("db").sig===b||await a.query.dbTable.findFirst({columns:{id:!0}})&&(await k(a),(0,i.qT)("db",{sig:b}))}f=(j.then?(await j)():j)[0],d()}catch(a){d(a)}})},96976:(a,b,c)=>{c.d(b,{LT:()=>d,ez:()=>l,kq:()=>j,mn:()=>e,uQ:()=>k});let d=320;function e(a){return 36+30*Math.max(0,a)+16}let f=2560,g=a=>(a??"").trim()||"—";function h(a,b){let c=new Map(a.map(a=>[a.id,a.name])),d=new Map;for(let a of b)for(let b of a.uses)c.has(b.tableId)&&d.set(b.tableId,(d.get(b.tableId)??0)+1);return new Map(b.map(a=>[a.id,function(a,b,c){let d=new Map;for(let c of a.uses)b.has(c.tableId)&&d.set(c.tableId,(d.get(c.tableId)??0)+1);let e=null;for(let[a,f]of d){if(null===e){e=a;continue}let g=d.get(e);if(f>g){e=a;continue}if(f<g)continue;let h=c?.get(a)??0,i=c?.get(e)??0;h<i?e=a:h===i&&0>b.get(a).localeCompare(b.get(e))&&(e=a)}return e}(a,c,d)]))}let i=(a,b)=>a.path.localeCompare(b.path)||a.method.localeCompare(b.method)||a.id.localeCompare(b.id);function j(a,b){let c=h(a,b),j=new Map,k=[];for(let a of[...b].sort(i)){let b=c.get(a.id)??null;if(b){let c=j.get(b);c?c.push(a):j.set(b,[a])}else k.push(a)}let l=a=>{let b=j.get(a.id)?.length??0;return e(a.columnCount)+(b?14+60*b:0)+50},m=Array.from(new Set(a.map(a=>g(a.domain)))),n=m.filter(a=>"—"!==a).sort(),o=m.includes("—")?[...n,"—"]:n,p=[];for(let b of o){let c=a.filter(a=>g(a.domain)===b).sort((a,b)=>a.name.localeCompare(b.name)),e=c.reduce((a,b)=>a+l(b),0),f=Math.max(1,Math.min(12,c.length,Math.round(Math.sqrt(e/d)))),h=Array(f).fill(0),i=new Map;for(let a of c){let b=0;for(let a=1;a<f;a++)h[a]<h[b]&&(b=a);i.set(a.id,{x:b*d,y:h[b]}),h[b]+=l(a)}p.push({d:b,w:f*d,h:Math.max(...h,0),tableLocal:i})}let q=Math.max(f,Math.round(Math.sqrt(2.2*p.reduce((a,b)=>a+(b.w+120)*(b.h+170),0)))),r=new Map,s=new Map,t=0,u=0,v=0,w=0;for(let b of p){for(let c of(t>0&&t+b.w>q&&(u+=v+170,t=0,v=0),a.filter(a=>b.tableLocal.has(a.id)))){let a=b.tableLocal.get(c.id),d=t+a.x,f=u+a.y;r.set(c.id,{x:d,y:f}),(j.get(c.id)??[]).forEach((a,b)=>{s.set(a.id,{x:d,y:f+e(c.columnCount)+14+60*b})})}v=Math.max(v,b.h),w=Math.max(w,u+b.h),t+=b.w+120}if(k.length){let a=w+170,b=Math.max(1,Math.min(4,Math.ceil(Math.sqrt(k.length/2))));k.forEach((c,d)=>{s.set(c.id,{x:d%b*280,y:a+60*Math.floor(d/b)})})}return{tables:r,endpoints:s}}function k(a,b,c){let f=h(b,c),i=new Map;for(let a of c){let b=f.get(a.id);b&&i.set(b,(i.get(b)??0)+1)}let j=a=>{let b=i.get(a.id)??0;return a.y+e(a.columnCount)+(b?14+60*b:0)},k=g(a.domain),l=b.filter(a=>g(a.domain)===k);if(!l.length){let a=b.length?Math.max(...b.map(j),...c.map(a=>a.y+60)):0;return{x:0,y:b.length||c.length?a+170:0}}let m=Math.min(...l.map(a=>a.x)),n=l.map(a=>Math.max(0,Math.round((a.x-m)/d))),o=Math.min(12,Math.max(...n)+1),p=Array(o).fill(Math.min(...l.map(a=>a.y)));l.forEach((a,b)=>{let c=Math.min(n[b],o-1);p[c]=Math.max(p[c],j(a)+50)});let q=0;for(let a=1;a<o;a++)p[a]<p[q]&&(q=a);return{x:m+q*d,y:p[q]}}function l(a,b,c){let d=h(b,[...c,a]),f=d.get(a.id),g=f?b.find(a=>a.id===f):void 0;if(g){let a=c.filter(a=>d.get(a.id)===g.id),b=g.y+e(g.columnCount)+14,f=a.length?Math.max(...a.map(a=>a.y))+60:b;return{x:g.x,y:f}}let i=[...b.map(a=>a.y+e(a.columnCount)),...c.map(a=>a.y+60)];return{x:0,y:i.length?Math.max(...i)+170:0}}}};
|
|
1
|
+
"use strict";exports.id=9734,exports.ids=[9734],exports.modules={7903:(a,b,c)=>{c.d(b,{VE:()=>k,qT:()=>l,zP:()=>h});var d=c(73024),e=c(76760),f=c(45301),g=c(32213);let h={roadmap:"grouped-2",architecture:"arch-layered-3",db:"db-dock-3"};function i(){return(0,e.join)((0,f.KS)(),"board-layout-state.json")}function j(){try{return JSON.parse((0,d.readFileSync)(i(),"utf8"))}catch{return null}}function k(a){let b=j(),c=b?.[a];return{sig:c?.sig??("roadmap"!==a||b?null:function(){try{return JSON.parse((0,d.readFileSync)((0,e.join)((0,f.KS)(),"roadmap-layout-sig.json"),"utf8")).sig??null}catch{return null}}())??null,arrangedBy:c?.arrangedBy??null}}function l(a,b){let c=j()??{};c[a]={...c[a],...b},(0,g.q)(i(),c)}},19734:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{Bx:()=>r,HF:()=>q,Rw:()=>s,ap:()=>t});var e=c(44046),f=c(91430),g=c(34216),h=c(56727),i=c(30046),j=c(72658),k=c(35498),l=c(49565),m=c(24983),n=c(96976),o=c(73033),p=a([h,j,k,l,o]);[h,j,k,l,o]=p.then?(await p)():p;let t=e.Ik({tables:e.YO(e.Ik({name:e.Yj().trim().min(1),domain:e.Yj().nullish(),description:e.Yj().nullish(),columns:e.YO(e.Ik({name:e.Yj().trim().min(1),type:e.Yj().trim().min(1),isPk:e.zM().optional(),isFk:e.zM().optional(),nullable:e.zM().optional(),note:e.Yj().nullish()})).default([])})).default([]),relations:e.YO(e.Ik({fromTable:e.Yj(),fromColumn:e.Yj(),toTable:e.Yj(),toColumn:e.Yj(),label:e.Yj().nullish()})).default([]),endpoints:e.YO(e.Ik({method:e.Yj().trim().min(1),path:e.Yj().trim().min(1),domain:e.Yj().nullish(),description:e.Yj().nullish(),uses:e.YO(e.Ik({table:e.Yj(),access:e.Yj().default("read")})).default([])})).default([])});async function q(a=h.db){let b=await a.query.syncState.findFirst({where:(a,{eq:b})=>b(a.id,"singleton")});return b?.version??0}async function r(a=h.db){let[b]=await a.insert(i.syncState).values({id:"singleton",version:1}).onConflictDoUpdate({target:i.syncState.id,set:{version:(0,f.ll)`${i.syncState.version} + 1`}}).returning();return b.version}async function s(a,b=h.db,c={}){let d=t.parse(a),e=d.tables.length>0,f=d.endpoints.length>0,p=d.tables.map(a=>a.name);e&&await b.delete(i.dbTable).where(p.length?(0,g.Uo)((0,g.eq)(i.dbTable.source,"INTROSPECTION"),(0,g.KL)(i.dbTable.name,p)):(0,g.eq)(i.dbTable.source,"INTROSPECTION"));let q=await b.query.dbTable.findMany({columns:{id:!0,name:!0,domain:!0,x:!0,y:!0},with:{columns:{columns:{id:!0}}}}),u=await b.query.endpoint.findMany({columns:{id:!0,method:!0,path:!0,x:!0,y:!0},with:{tables:{columns:{tableId:!0}}}}),v=new Map(q.map(a=>[a.name,a])),w=q.map(a=>({id:a.id,name:a.name,domain:a.domain,columnCount:a.columns.length,x:a.x,y:a.y})),x=u.map(a=>({id:a.id,method:a.method,path:a.path,uses:a.tables.map(a=>({tableId:a.tableId})),x:a.x,y:a.y})),y=new Map;for(let a of d.tables){if(v.has(a.name))continue;let b=(0,n.uQ)({domain:a.domain??null,columnCount:a.columns.length},w,x);y.set(a.name,b),w.push({id:`new:${a.name}`,name:a.name,domain:a.domain??null,columnCount:a.columns.length,...b})}let z=new Map;for(let a of d.tables){let c=v.get(a.name),d=y.get(a.name),e=c?.x??d?.x??0,f=c?.y??d?.y??0,[h]=await b.insert(i.dbTable).values({name:a.name,domain:a.domain??null,description:a.description??null,source:"INTROSPECTION",x:e,y:f}).onConflictDoUpdate({target:i.dbTable.name,set:{...null!=a.domain?{domain:a.domain}:{},...null!=a.description?{description:a.description}:{},source:"INTROSPECTION"}}).returning();z.set(a.name,h.id),await b.delete(i.dbColumn).where((0,g.eq)(i.dbColumn.tableId,h.id)),a.columns.length&&await b.insert(i.dbColumn).values(a.columns.map((a,b)=>({tableId:h.id,name:a.name,type:a.type,isPk:a.isPk??!1,isFk:a.isFk??!1,nullable:a.nullable??!0,note:a.note??null,ord:b})))}let A=[...z.values()];for(let a of(A.length&&await b.delete(i.dbRelation).where((0,g.or)((0,g.RV)(i.dbRelation.fromTableId,A),(0,g.RV)(i.dbRelation.toTableId,A))),d.relations)){let c=z.get(a.fromTable),d=z.get(a.toTable);c&&d&&await b.insert(i.dbRelation).values({fromTableId:c,toTableId:d,fromColumn:a.fromColumn,toColumn:a.toColumn,label:a.label??`${a.fromColumn} → ${a.toTable}.${a.toColumn}`})}let B=new Set(d.endpoints.map(a=>`${a.method} ${a.path}`));if(f){let a=(await b.query.endpoint.findMany({where:(a,{eq:b})=>b(a.source,"INTROSPECTION")})).filter(a=>!B.has(`${a.method} ${a.path}`)).map(a=>a.id);a.length&&await b.delete(i.endpoint).where((0,g.RV)(i.endpoint.id,a))}for(let a of w)a.id.startsWith("new:")&&(a.id=z.get(a.name)??a.id);for(let a of d.endpoints){let d,e,f=await b.query.endpoint.findFirst({where:(b,{and:c,eq:d})=>c(d(b.method,a.method),d(b.path,a.path))});if(f)d=f.x,e=f.y;else{let b={id:`new:${a.method} ${a.path}`,method:a.method,path:a.path,uses:a.uses.map(a=>({tableId:z.get(a.table)??""})).filter(a=>a.tableId)},c=(0,n.ez)(b,w,x);d=c.x,e=c.y,x.push({...b,x:d,y:e})}let[h]=await b.insert(i.endpoint).values({method:a.method,path:a.path,domain:a.domain??null,description:a.description??null,source:"INTROSPECTION",x:d,y:e}).onConflictDoUpdate({target:[i.endpoint.method,i.endpoint.path],set:{...null!=a.domain?{domain:a.domain}:{},...null!=a.description?{description:a.description}:{},source:"INTROSPECTION"}}).returning();for(let d of((!c.partial||a.uses.length>0)&&await b.delete(i.endpointTable).where((0,g.eq)(i.endpointTable.endpointId,h.id)),a.uses)){let a=z.get(d.table)??(await b.query.dbTable.findFirst({where:(a,{eq:b})=>b(a.name,d.table)}))?.id;a&&await b.insert(i.endpointTable).values({endpointId:h.id,tableId:a,access:d.access})}}await (0,k.X)(b),await (0,l.q)(b);let C=await b.query.dbTable.findMany({where:(a,{eq:b})=>b(a.source,"INTROSPECTION"),columns:{x:!0,y:!0},with:{columns:{columns:{id:!0}}}}),D=await b.select({x:i.endpoint.x,y:i.endpoint.y}).from(i.endpoint);((0,m.v4)(C.map(a=>({x:a.x,y:a.y,columnCount:a.columns.length})))||(0,j.i)(D))&&await (0,o.r)(b);let E=await r(b);return{tables:d.tables.length,relations:d.relations.length,endpoints:d.endpoints.length,version:E}}d()}catch(a){d(a)}})},24983:(a,b,c)=>{c.d(b,{v4:()=>e});var d=c(96976);function e(a){let b=d.LT-20;for(let c=0;c<a.length;c++)for(let e=c+1;e<a.length;e++){let f=a[c],g=a[e],h=(0,d.mn)(f.columnCount),i=(0,d.mn)(g.columnCount);if(f.x<g.x+b&&f.x+b>g.x&&f.y<g.y+i&&f.y+h>g.y)return!0}return!1}},32213:(a,b,c)=>{c.d(b,{q:()=>f});var d=c(73024),e=c(76760);function f(a,b,c=!1){var g=JSON.stringify(b,null,c?2:void 0);(0,d.mkdirSync)((0,e.dirname)(a),{recursive:!0});let h=`${a}.tmp`;try{(0,d.writeFileSync)(h,g),(0,d.renameSync)(h,a)}catch(a){throw(0,d.rmSync)(h,{force:!0}),a}}},35498:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{X:()=>i});var e=c(34216),f=c(56727),g=c(30046),h=a([f]);async function i(a=f.db){let[b,c]=await Promise.all([a.query.endpoint.findMany({where:(a,{ne:b})=>b(a.source,"INTROSPECTION")}),a.query.endpoint.findMany({where:(a,{eq:b})=>b(a.source,"INTROSPECTION")})]),d={collapsed:0,mappings:[]};for(let f of b){let b=c.find(a=>(function(a,b){if(a.method.toUpperCase()!==b.method.toUpperCase())return!1;let c=a.path.replace(/\{[^}]*\}/g,"{}"),d=b.path.replace(/\{[^}]*\}/g,"{}");return d===c||d.endsWith(c)})(f,a));b&&(await a.delete(g.endpoint).where((0,e.eq)(g.endpoint.id,f.id)),d.collapsed++,d.mappings.push({planned:`${f.method} ${f.path}`,code:`${b.method} ${b.path}`}))}return d}f=(h.then?(await h)():h)[0],d()}catch(a){d(a)}})},45301:(a,b,c)=>{c.d(b,{KS:()=>l,Qq:()=>k,jv:()=>j});var d=c(31421),e=c(77598),f=c(48161),g=c(76760),h=c(6716);let i=null;function j(){if(process.env.BEACON_REPO)return process.env.BEACON_REPO;let a=(0,h.p1)();if(a){let b=(0,h.K4)(a);if(b)return b.path}let b=(0,h.WQ)();if(b)return b.path;if(i)return i;try{let a=(0,d.execSync)("git rev-parse --show-toplevel",{cwd:process.cwd(),stdio:["ignore","pipe","ignore"]}).toString().trim();if(a)return i=a}catch{}return i=(0,g.resolve)(process.cwd(),"../..")}function k(){return(0,g.basename)(j())}function l(){if(process.env.BEACON_DATA_DIR)return process.env.BEACON_DATA_DIR;let a=(0,h.p1)();if(a&&(0,h.K4)(a))return(0,h.T_)(a);let b=(0,h.WQ)();return b?(0,h.T_)(b.id):(0,g.join)((0,f.homedir)(),".beacon",(0,e.createHash)("sha256").update(j()).digest("hex").slice(0,12))}},47782:(a,b,c)=>{c.d(b,{Xi:()=>d});function d(a,b){let c,d,e,f=(d=((c=b.viewportAspect)&&Number.isFinite(c)&&c>0?Math.min(3.2,Math.max(.7,c)):1.8)*(b.aspectSlack??1),e=a.reduce((a,c)=>a+(c.w+b.gapX)*(c.h+b.gapY),0),Math.max(b.minBandW,Math.round(Math.sqrt(e*d)))),g=new Map,h=0,i=0,j=0;for(let c of a)h>0&&h+c.w>f&&(i+=j+b.gapY,h=0,j=0),g.set(c.id,{x:h,y:i}),j=Math.max(j,c.h),h+=c.w+b.gapX;return g}},49565:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{q:()=>j});var e=c(34216),f=c(56727),g=c(30046),h=a([f]);f=(h.then?(await h)():h)[0];let k=new Set(["DONE","CANCELLED","DEPRIORITIZED"]);async function i(a){let b=await a.query.node.findMany({where:(a,{and:b,eq:c,isNotNull:d})=>b(c(a.view,"ROADMAP"),d(a.planId)),columns:{planId:!0,status:!0}}),c=new Map;for(let a of b){let b=a.planId;c.set(b,(c.get(b)??!0)&&k.has(a.status))}return[...c.entries()].filter(([,a])=>a).map(([a])=>a)}async function j(a=f.db){let b=await i(a),c=a=>b.length?(0,e.or)((0,e.kZ)(a.planId),(0,e.RV)(a.planId,b)):(0,e.kZ)(a.planId),d=await a.delete(g.dbTable).where((0,e.Uo)((0,e.ne)(g.dbTable.source,"INTROSPECTION"),c(g.dbTable))).returning({id:g.dbTable.id}),h=await a.delete(g.endpoint).where((0,e.Uo)((0,e.ne)(g.endpoint.source,"INTROSPECTION"),c(g.endpoint))).returning({id:g.endpoint.id});return{tables:d.length,endpoints:h.length}}d()}catch(a){d(a)}})},72658:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{C:()=>h,i:()=>g});var e=c(56727),f=a([e]);function g(a){for(let b=0;b<a.length;b++)for(let c=b+1;c<a.length;c++){let d=a[b],e=a[c];if(d.x<e.x+300&&d.x+300>e.x&&d.y<e.y+50&&d.y+50>e.y)return!0}return!1}async function h(a=e.db){let[b,c]=await Promise.all([a.query.dbTable.findFirst({orderBy:(a,{desc:b})=>b(a.y)}),a.query.endpoint.findFirst({orderBy:(a,{desc:b})=>b(a.y)})]),d=Math.max(b?.y??0,c?.y??0);return d>0?d+280:0}e=(f.then?(await f)():f)[0],d()}catch(a){d(a)}})},73033:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{r:()=>k,v:()=>l});var e=c(34216),f=c(56727),g=c(30046),h=c(96976),i=c(7903),j=a([f]);async function k(a=f.db,b){let[c,d]=await Promise.all([a.query.dbTable.findMany({with:{columns:{columns:{id:!0}}},orderBy:(a,{asc:b})=>b(a.name)}),a.query.endpoint.findMany({with:{tables:{columns:{tableId:!0}}}})]),i=(0,h.kq)(c.map(a=>({id:a.id,name:a.name,domain:a.domain,columnCount:a.columns.length})),d.map(a=>({id:a.id,method:a.method,path:a.path,uses:a.tables.map(a=>({tableId:a.tableId}))})),{viewportAspect:b}),j=0;for(let b of c){let c=i.tables.get(b.id);c&&(Math.round(c.x)!==Math.round(b.x)||Math.round(c.y)!==Math.round(b.y))&&(await a.update(g.dbTable).set({x:c.x,y:c.y}).where((0,e.eq)(g.dbTable.id,b.id)),j++)}for(let b of d){let c=i.endpoints.get(b.id);c&&(Math.round(c.x)!==Math.round(b.x)||Math.round(c.y)!==Math.round(b.y))&&(await a.update(g.endpoint).set({x:c.x,y:c.y}).where((0,e.eq)(g.endpoint.id,b.id)),j++)}return j}async function l(a=f.db){let b=i.zP.db;(0,i.VE)("db").sig===b||await a.query.dbTable.findFirst({columns:{id:!0}})&&(await k(a),(0,i.qT)("db",{sig:b}))}f=(j.then?(await j)():j)[0],d()}catch(a){d(a)}})},96976:(a,b,c)=>{c.d(b,{LT:()=>e,ez:()=>m,kq:()=>k,mn:()=>f,uQ:()=>l});var d=c(47782);let e=320;function f(a){return 36+30*Math.max(0,a)+16}let g=960,h=a=>(a??"").trim()||"—";function i(a,b){let c=new Map(a.map(a=>[a.id,a.name])),d=new Map;for(let a of b)for(let b of a.uses)c.has(b.tableId)&&d.set(b.tableId,(d.get(b.tableId)??0)+1);return new Map(b.map(a=>[a.id,function(a,b,c){let d=new Map;for(let c of a.uses)b.has(c.tableId)&&d.set(c.tableId,(d.get(c.tableId)??0)+1);let e=null;for(let[a,f]of d){if(null===e){e=a;continue}let g=d.get(e);if(f>g){e=a;continue}if(f<g)continue;let h=c?.get(a)??0,i=c?.get(e)??0;h<i?e=a:h===i&&0>b.get(a).localeCompare(b.get(e))&&(e=a)}return e}(a,c,d)]))}let j=(a,b)=>a.path.localeCompare(b.path)||a.method.localeCompare(b.method)||a.id.localeCompare(b.id);function k(a,b,c={}){let l=i(a,b),m=new Map,n=[];for(let a of[...b].sort(j)){let b=l.get(a.id)??null;if(b){let c=m.get(b);c?c.push(a):m.set(b,[a])}else n.push(a)}let o=a=>{let b=m.get(a.id)?.length??0;return f(a.columnCount)+(b?10+60*b:0)+30},p=Array.from(new Set(a.map(a=>h(a.domain)))),q=p.filter(a=>"—"!==a).sort(),r=p.includes("—")?[...q,"—"]:q,s=[];for(let b of r){let c=a.filter(a=>h(a.domain)===b).sort((a,b)=>a.name.localeCompare(b.name)),d=c.reduce((a,b)=>a+o(b),0),f=Math.max(1,Math.min(12,c.length,Math.round(Math.sqrt(d/e)))),g=Array(f).fill(0),i=new Map;for(let a of c){let b=0;for(let a=1;a<f;a++)g[a]<g[b]&&(b=a);i.set(a.id,{x:b*e,y:g[b]}),g[b]+=o(a)}s.push({d:b,w:f*e,h:Math.max(...g,0),tableLocal:i})}let t=(0,d.Xi)(s.map(a=>({id:a.d,w:a.w,h:a.h})),{gapX:84,gapY:72,viewportAspect:c.viewportAspect,minBandW:g,aspectSlack:1.7}),u=new Map,v=new Map,w=0;for(let b of s){let c=t.get(b.d);for(let d of a.filter(a=>b.tableLocal.has(a.id))){let a=b.tableLocal.get(d.id),e=c.x+a.x,g=c.y+a.y;u.set(d.id,{x:e,y:g}),(m.get(d.id)??[]).forEach((a,b)=>{v.set(a.id,{x:e,y:g+f(d.columnCount)+10+60*b})})}w=Math.max(w,c.y+b.h)}if(n.length){let a=w+72,b=Math.max(1,Math.min(4,Math.ceil(Math.sqrt(n.length/2))));n.forEach((c,d)=>{v.set(c.id,{x:d%b*300,y:a+60*Math.floor(d/b)})})}return{tables:u,endpoints:v}}function l(a,b,c){let d=i(b,c),g=new Map;for(let a of c){let b=d.get(a.id);b&&g.set(b,(g.get(b)??0)+1)}let j=a=>{let b=g.get(a.id)??0;return a.y+f(a.columnCount)+(b?10+60*b:0)},k=h(a.domain),l=b.filter(a=>h(a.domain)===k);if(!l.length){let a=b.length?Math.max(...b.map(j),...c.map(a=>a.y+60)):0;return{x:0,y:b.length||c.length?a+72:0}}let m=Math.min(...l.map(a=>a.x)),n=l.map(a=>Math.max(0,Math.round((a.x-m)/e))),o=Math.min(12,Math.max(...n)+1),p=Array(o).fill(Math.min(...l.map(a=>a.y)));l.forEach((a,b)=>{let c=Math.min(n[b],o-1);p[c]=Math.max(p[c],j(a)+30)});let q=0;for(let a=1;a<o;a++)p[a]<p[q]&&(q=a);return{x:m+q*e,y:p[q]}}function m(a,b,c){let d=i(b,[...c,a]),e=d.get(a.id),g=e?b.find(a=>a.id===e):void 0;if(g){let a=c.filter(a=>d.get(a.id)===g.id),b=g.y+f(g.columnCount)+10,e=a.length?Math.max(...a.map(a=>a.y))+60:b;return{x:g.x,y:e}}let h=[...b.map(a=>a.y+f(a.columnCount)),...c.map(a=>a.y+60)];return{x:0,y:h.length?Math.max(...h)+72:0}}}};
|