@abstractframework/continuum 0.3.1 → 0.4.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 +11 -3
- package/bin/cli.js +16 -160
- package/bin/hub_proxy.js +52 -43
- package/bin/request_gate.js +43 -0
- package/bin/server.js +232 -0
- package/bin/settings.js +45 -28
- package/dist/assets/{abnfDiagram-VRR7QNED-DkP5u0Ku.js → abnfDiagram-VRR7QNED-CptTkH57.js} +2 -2
- package/dist/assets/{arc-vxPq5BjA.js → arc-oQ5R3mHX.js} +2 -2
- package/dist/assets/{architectureDiagram-ZJ3FMSHR-ku0NT7zM.js → architectureDiagram-ZJ3FMSHR-Bn00f0nM.js} +2 -2
- package/dist/assets/{blockDiagram-677ZJIJ3-DXQQcNdo.js → blockDiagram-677ZJIJ3-BgQg2xzI.js} +2 -2
- package/dist/assets/{c4Diagram-LMCZKHZV-DuZ33cED.js → c4Diagram-LMCZKHZV-DSrFKkwF.js} +2 -2
- package/dist/assets/channel-BBUeEZaL.js +2 -0
- package/dist/assets/{chunk-2Q5K7J3B-BGWsS7uu.js → chunk-2Q5K7J3B-D8JcDR0u.js} +2 -2
- package/dist/assets/{chunk-32BRIVSS-BgokockY.js → chunk-32BRIVSS-Di3jxbyw.js} +2 -2
- package/dist/assets/{chunk-5VM5RSS4-OLY5jTMg.js → chunk-5VM5RSS4-xA0TZltq.js} +2 -2
- package/dist/assets/{chunk-EX3LRPZG-BWHQVZSz.js → chunk-EX3LRPZG-BkNMQroi.js} +2 -2
- package/dist/assets/{chunk-JWPE2WC7-CuM7Hcrw.js → chunk-JWPE2WC7-DaTATpXD.js} +2 -2
- package/dist/assets/{chunk-MOJQB5TN-DI56DwNK.js → chunk-MOJQB5TN-CzzOSJWb.js} +2 -2
- package/dist/assets/{chunk-RYQCIY6F-phvbPmeC.js → chunk-RYQCIY6F-DAhqq1xl.js} +2 -2
- package/dist/assets/{chunk-V7JOEXUC-Cv7eW1t4.js → chunk-V7JOEXUC-D88CIHey.js} +2 -2
- package/dist/assets/{chunk-VR4S4FIN-D8k2SzA3.js → chunk-VR4S4FIN-CV5xjwAx.js} +2 -2
- package/dist/assets/{chunk-XXDRQBXY-DZy8Plz8.js → chunk-XXDRQBXY-CHnfAGOy.js} +2 -2
- package/dist/assets/classDiagram-OUVF2IWQ-GIwsZVZi.js +2 -0
- package/dist/assets/classDiagram-v2-EOCWNBFH-GIwsZVZi.js +2 -0
- package/dist/assets/{cose-bilkent-JH36ORCC-CiwWaVUb.js → cose-bilkent-JH36ORCC-BgTNPlnQ.js} +2 -2
- package/dist/assets/{cynefin-VYW2F7L2-Cz79Fwdx.js → cynefin-VYW2F7L2-DFRQoaMD.js} +3 -3
- package/dist/assets/{cynefinDiagram-TSTJHNR4-DYlkii-x.js → cynefinDiagram-TSTJHNR4-DA2MOQXI.js} +2 -2
- package/dist/assets/{dagre-VKFMJZFB-Cumo7o1R.js → dagre-VKFMJZFB-BUIShmyq.js} +2 -2
- package/dist/assets/{diagram-FQU43EPY-Dorm69_e.js → diagram-FQU43EPY-DVjgItuu.js} +2 -2
- package/dist/assets/{diagram-G47NLZAW-Bhtzc4JU.js → diagram-G47NLZAW-eJSMzGjb.js} +2 -2
- package/dist/assets/{diagram-NH7WQ7WH-DJF-iHCK.js → diagram-NH7WQ7WH-uJNNsz13.js} +2 -2
- package/dist/assets/{diagram-OA4YK3LP-8mQ4915-.js → diagram-OA4YK3LP-xmJewu37.js} +2 -2
- package/dist/assets/{diagram-WEI45ONY-C4Bv6dbm.js → diagram-WEI45ONY-CaXYx2ei.js} +2 -2
- package/dist/assets/{ebnfDiagram-CCIWWBDH-DzagnQVX.js → ebnfDiagram-CCIWWBDH-BrgvjnU5.js} +2 -2
- package/dist/assets/{erDiagram-Q63AITRT-BbkYElA6.js → erDiagram-Q63AITRT-CFF8G5wJ.js} +2 -2
- package/dist/assets/{flowDiagram-23GEKE2U-OcR4vkjk.js → flowDiagram-23GEKE2U-W02vEFp0.js} +2 -2
- package/dist/assets/{ganttDiagram-NO4QXBWP-DyAPiIdB.js → ganttDiagram-NO4QXBWP-CRV1W7ht.js} +2 -2
- package/dist/assets/{gitGraphDiagram-IHSO6WYX-pymEefZi.js → gitGraphDiagram-IHSO6WYX-CAe9Kkrb.js} +2 -2
- package/dist/assets/index-Cn7OlSFa.js +121 -0
- package/dist/assets/index-D1NTcviR.css +1 -0
- package/dist/assets/{infoDiagram-FWYZ7A6U-Dh41Som-.js → infoDiagram-FWYZ7A6U-DzPZb8XV.js} +2 -2
- package/dist/assets/{ishikawaDiagram-FXEZZL3T-Xc9vuvPV.js → ishikawaDiagram-FXEZZL3T-CUSZtsJ2.js} +2 -2
- package/dist/assets/{journeyDiagram-5HDEW3XC-bJ0gK8bC.js → journeyDiagram-5HDEW3XC-Ce4DZjHq.js} +2 -2
- package/dist/assets/{kanban-definition-HUTT4EX6-Cu1Zn3KW.js → kanban-definition-HUTT4EX6-B2aNvJXN.js} +2 -2
- package/dist/assets/{linear-DrGsraGo.js → linear-Cy9Vf-l3.js} +2 -2
- package/dist/assets/{mermaid.core-CkQqPHPZ.js → mermaid.core-rvwxvqSK.js} +6 -6
- package/dist/assets/{mindmap-definition-LN4V7U3C-ZCEP6XWH.js → mindmap-definition-LN4V7U3C-LIaA-8NC.js} +2 -2
- package/dist/assets/{pegDiagram-2B236MQR-DjDrn07n.js → pegDiagram-2B236MQR-D3veo_Oo.js} +2 -2
- package/dist/assets/{pieDiagram-ENE6RG2P-oD3ciEy7.js → pieDiagram-ENE6RG2P-DryYCAYE.js} +2 -2
- package/dist/assets/{quadrantDiagram-ABIIQ3AL-CYbDYNM7.js → quadrantDiagram-ABIIQ3AL-CQY6rt5A.js} +2 -2
- package/dist/assets/{railroadDiagram-RFXS5EU6-DMcO7O0d.js → railroadDiagram-RFXS5EU6-0QiEYfyx.js} +2 -2
- package/dist/assets/{requirementDiagram-TGXJPOKE-DeeSIVn-.js → requirementDiagram-TGXJPOKE-CHk5lpA2.js} +2 -2
- package/dist/assets/{sankeyDiagram-HTMAVEWB-C43xzNvP.js → sankeyDiagram-HTMAVEWB-CYPx25gJ.js} +2 -2
- package/dist/assets/{sequenceDiagram-DBY2YBRQ-d3lj6z8y.js → sequenceDiagram-DBY2YBRQ-BSUr-JBi.js} +2 -2
- package/dist/assets/{sizeCapture-X5ZJPWSS-D4UyeLsX.js → sizeCapture-X5ZJPWSS-B6ZebkVB.js} +2 -2
- package/dist/assets/{stateDiagram-2N3HPSRC-Cq4YMMP1.js → stateDiagram-2N3HPSRC-Dmqo36MA.js} +2 -2
- package/dist/assets/stateDiagram-v2-6OUMAXLB-CwN_yVcy.js +2 -0
- package/dist/assets/swimlanes-5IMT3BWC-CuvrNUfQ.js +3 -0
- package/dist/assets/swimlanesDiagram-G3AALYLV-BFp8yG0X.js +9 -0
- package/dist/assets/{timeline-definition-FHXFAJF6-BN8oLdvs.js → timeline-definition-FHXFAJF6-DSmOxhA8.js} +2 -2
- package/dist/assets/{vennDiagram-L72KCM5P-BqAHS4HE.js → vennDiagram-L72KCM5P-DKkd_lMz.js} +2 -2
- package/dist/assets/{wardleyDiagram-EHGQE667-D2aA14yL.js → wardleyDiagram-EHGQE667-DYYxdBBD.js} +2 -2
- package/dist/assets/{xychartDiagram-FW5EYKEG-BkrnnKWS.js → xychartDiagram-FW5EYKEG-Qsc3YQdG.js} +2 -2
- package/dist/index.html +5 -2
- package/package.json +4 -4
- package/dist/assets/channel-tvH0KUyT.js +0 -2
- package/dist/assets/classDiagram-OUVF2IWQ-C0x6Ou39.js +0 -2
- package/dist/assets/classDiagram-v2-EOCWNBFH-C0x6Ou39.js +0 -2
- package/dist/assets/index-D0YdqMpf.css +0 -1
- package/dist/assets/index-DTn9k-3t.js +0 -123
- package/dist/assets/stateDiagram-v2-6OUMAXLB-DMVYrQgX.js +0 -2
- package/dist/assets/swimlanes-5IMT3BWC-CRbkVLoI.js +0 -3
- package/dist/assets/swimlanesDiagram-G3AALYLV-Bzg2g7oq.js +0 -9
package/bin/settings.js
CHANGED
|
@@ -22,6 +22,8 @@
|
|
|
22
22
|
import { chmodSync, existsSync, mkdirSync, readFileSync, renameSync, statSync, writeFileSync } from 'fs';
|
|
23
23
|
import { homedir } from 'os';
|
|
24
24
|
import { dirname, join } from 'path';
|
|
25
|
+
import { MountRequestError, resolveGatewayUrl } from '@abstractframework/app-server';
|
|
26
|
+
import { request_gate } from './request_gate.js';
|
|
25
27
|
|
|
26
28
|
const TRUE_VALUES = new Set(['1', 'true', 'yes', 'y', 'on']);
|
|
27
29
|
const FALSE_VALUES = new Set(['0', 'false', 'no', 'n', 'off']);
|
|
@@ -50,7 +52,12 @@ export const SETTINGS = [
|
|
|
50
52
|
{
|
|
51
53
|
key: 'gateway_url',
|
|
52
54
|
flag: '--gateway-url',
|
|
55
|
+
// The same spellings as every AbstractFramework app
|
|
56
|
+
// (@abstractframework/app-server parseAppFlags).
|
|
57
|
+
aliases: ['--gateway', '--url'],
|
|
53
58
|
type: 'url',
|
|
59
|
+
// With no flag, setting or environment: the gateway installed on this
|
|
60
|
+
// computer (~/.abstractframework/gateway.json), else this URL.
|
|
54
61
|
default: 'http://127.0.0.1:8080',
|
|
55
62
|
env: ['ABSTRACTCONTINUUM_GATEWAY_URL', 'ABSTRACTGATEWAY_URL'],
|
|
56
63
|
metavar: '<url>',
|
|
@@ -134,7 +141,7 @@ export const SETTINGS = [
|
|
|
134
141
|
export const UI_WRITABLE_KEYS = ['hub_seat'];
|
|
135
142
|
|
|
136
143
|
const BY_KEY = new Map(SETTINGS.map((s) => [s.key, s]));
|
|
137
|
-
const BY_FLAG = new Map(SETTINGS.
|
|
144
|
+
const BY_FLAG = new Map(SETTINGS.flatMap((s) => [s.flag, ...(s.aliases || [])].map((f) => [f, s])));
|
|
138
145
|
|
|
139
146
|
export function setting_spec(key) {
|
|
140
147
|
return BY_KEY.get(key) || null;
|
|
@@ -195,11 +202,16 @@ export function coerce(spec, raw) {
|
|
|
195
202
|
/**
|
|
196
203
|
* THE precedence function: flag > settings file > environment (legacy) >
|
|
197
204
|
* default, per key. Returns `{ [key]: { value, source } }` with source one
|
|
198
|
-
* of "flag" | "setting" | "env" | "default". An invalid file or
|
|
199
|
-
* is skipped (reported in `problems`) so one bad entry cannot
|
|
200
|
-
* server; an invalid FLAG never reaches here (parse_args refuses
|
|
205
|
+
* of "flag" | "setting" | "env" | "pointer" | "default". An invalid file or
|
|
206
|
+
* env value is skipped (reported in `problems`) so one bad entry cannot
|
|
207
|
+
* stop the server; an invalid FLAG never reaches here (parse_args refuses
|
|
208
|
+
* it).
|
|
209
|
+
*
|
|
210
|
+
* gateway_url with nothing chosen follows the kit's local gateway pointer
|
|
211
|
+
* (`~/.abstractframework/gateway.json` under `home`, source "pointer"),
|
|
212
|
+
* else the built-in default: the same reader as every other app.
|
|
201
213
|
*/
|
|
202
|
-
export function resolve_settings({ flags = {}, file = {}, env = {} } = {}) {
|
|
214
|
+
export function resolve_settings({ flags = {}, file = {}, env = {}, home, pointer } = {}) {
|
|
203
215
|
const out = {};
|
|
204
216
|
const problems = [];
|
|
205
217
|
for (const spec of SETTINGS) {
|
|
@@ -227,6 +239,10 @@ export function resolve_settings({ flags = {}, file = {}, env = {} } = {}) {
|
|
|
227
239
|
break;
|
|
228
240
|
}
|
|
229
241
|
}
|
|
242
|
+
if (!picked && k === 'gateway_url') {
|
|
243
|
+
const r = resolveGatewayUrl({ home, pointer, warn: (m) => problems.push(m) });
|
|
244
|
+
picked = { value: r.url, source: r.source === 'pointer' ? 'pointer' : 'default' };
|
|
245
|
+
}
|
|
230
246
|
if (!picked) picked = { value: spec.default, source: 'default' };
|
|
231
247
|
out[k] = picked;
|
|
232
248
|
}
|
|
@@ -276,7 +292,13 @@ export function display_value(spec, value) {
|
|
|
276
292
|
return String(value);
|
|
277
293
|
}
|
|
278
294
|
|
|
279
|
-
export const SOURCE_WORDS = {
|
|
295
|
+
export const SOURCE_WORDS = {
|
|
296
|
+
flag: 'launch flag',
|
|
297
|
+
setting: 'setting',
|
|
298
|
+
env: 'environment (legacy)',
|
|
299
|
+
pointer: 'the gateway installed on this computer',
|
|
300
|
+
default: 'default',
|
|
301
|
+
};
|
|
280
302
|
|
|
281
303
|
/**
|
|
282
304
|
* Parse argv. Shapes:
|
|
@@ -379,7 +401,7 @@ export function apply_session_proxy_gates(settings, env) {
|
|
|
379
401
|
* without a restart). Port, host, gateway URL and the sign-in gates are
|
|
380
402
|
* read once at start.
|
|
381
403
|
*/
|
|
382
|
-
export function createLiveSettings({ flags = {}, settingsPath, env = process.env, onProblem = () => {} }) {
|
|
404
|
+
export function createLiveSettings({ flags = {}, settingsPath, env = process.env, home, onProblem = () => {} }) {
|
|
383
405
|
let stamp = '';
|
|
384
406
|
let file = {};
|
|
385
407
|
let resolved = null;
|
|
@@ -398,7 +420,7 @@ export function createLiveSettings({ flags = {}, settingsPath, env = process.env
|
|
|
398
420
|
} catch (e) {
|
|
399
421
|
onProblem(`settings file ${settingsPath}: ${e.message}`);
|
|
400
422
|
}
|
|
401
|
-
const r = resolve_settings({ flags, file, env });
|
|
423
|
+
const r = resolve_settings({ flags, file, env, home });
|
|
402
424
|
for (const p of r.problems) onProblem(p);
|
|
403
425
|
resolved = r.settings;
|
|
404
426
|
return resolved;
|
|
@@ -421,21 +443,6 @@ function send_json(res, status, body) {
|
|
|
421
443
|
res.end(JSON.stringify(body));
|
|
422
444
|
}
|
|
423
445
|
|
|
424
|
-
function is_loopback_peer(req) {
|
|
425
|
-
const peer = String(req.socket && req.socket.remoteAddress ? req.socket.remoteAddress : '');
|
|
426
|
-
return peer === '127.0.0.1' || peer === '::1' || peer === '::ffff:127.0.0.1' || peer === '';
|
|
427
|
-
}
|
|
428
|
-
|
|
429
|
-
function same_origin(req) {
|
|
430
|
-
const origin = String((req.headers && req.headers.origin) || '').trim();
|
|
431
|
-
if (!origin) return true;
|
|
432
|
-
try {
|
|
433
|
-
return new URL(origin).host.toLowerCase() === String((req.headers && req.headers.host) || '').trim().toLowerCase();
|
|
434
|
-
} catch {
|
|
435
|
-
return false;
|
|
436
|
-
}
|
|
437
|
-
}
|
|
438
|
-
|
|
439
446
|
/** Public view: every setting with its source; secrets as presence only. */
|
|
440
447
|
export function settings_view(live, extra = {}) {
|
|
441
448
|
const s = live.get();
|
|
@@ -449,9 +456,11 @@ export function settings_view(live, extra = {}) {
|
|
|
449
456
|
|
|
450
457
|
/**
|
|
451
458
|
* GET/PUT /api/continuum/settings — the Settings page's door to this
|
|
452
|
-
* server's own settings. Local only: the
|
|
453
|
-
* (
|
|
454
|
-
*
|
|
459
|
+
* server's own settings. Local only: the BROWSER must run on this computer
|
|
460
|
+
* (bin/request_gate.js — behind the gateway's /apps/continuum/ that is the
|
|
461
|
+
* forwarded client address, never the socket peer; the same gate as the hub
|
|
462
|
+
* proxy, which this seat setting steers) and a browser Origin must match
|
|
463
|
+
* the host it addressed. PUT takes `{ hub_seat: "<seat>" }`
|
|
455
464
|
* or `{ hub_seat: null }` (back to the default) and persists to the
|
|
456
465
|
* settings file.
|
|
457
466
|
*/
|
|
@@ -462,11 +471,19 @@ export function createSettingsRoute({ live, extra = () => ({}) }) {
|
|
|
462
471
|
path: SETTINGS_ROUTE,
|
|
463
472
|
handle(req, res, pathname) {
|
|
464
473
|
if (pathname !== SETTINGS_ROUTE) return false;
|
|
465
|
-
|
|
474
|
+
let gate;
|
|
475
|
+
try {
|
|
476
|
+
gate = request_gate(req);
|
|
477
|
+
} catch (e) {
|
|
478
|
+
if (!(e instanceof MountRequestError)) throw e;
|
|
479
|
+
send_json(res, e.status, { error: 'bad_request', detail: e.message });
|
|
480
|
+
return true;
|
|
481
|
+
}
|
|
482
|
+
if (!gate.loopback) {
|
|
466
483
|
send_json(res, 403, { error: 'settings_non_loopback', detail: "Continuum's settings can only be changed from the computer it runs on." });
|
|
467
484
|
return true;
|
|
468
485
|
}
|
|
469
|
-
if (!same_origin
|
|
486
|
+
if (!gate.same_origin) {
|
|
470
487
|
send_json(res, 403, { error: 'settings_cross_origin', detail: 'Cross-origin requests to the settings route are refused.' });
|
|
471
488
|
return true;
|
|
472
489
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{g as p,r as u,d as a}from"./chunk-MOJQB5TN-
|
|
2
|
-
//# sourceMappingURL=abnfDiagram-VRR7QNED-
|
|
1
|
+
import{g as p,r as u,d as a}from"./chunk-MOJQB5TN-CzzOSJWb.js";import{p as f}from"./chunk-JWPE2WC7-DaTATpXD.js";import{_ as n,l as o}from"./mermaid.core-rvwxvqSK.js";import{M as c,b as d}from"./cynefin-VYW2F7L2-DFRQoaMD.js";import"./index-Cn7OlSFa.js";var v=d().RailroadAbnf.parser.LangiumParser,i=n(e=>{const r=e.alternatives.map(g);return r.length===1?r[0]:{type:"choice",alternatives:r}},"transformAlternation"),g=n(e=>{const r=e.elements.map(y);return r.length===1?r[0]:{type:"sequence",elements:r}},"transformConcatenation"),b=n(e=>{if(e.includes("*")){const[t,s]=e.split("*"),l=t?parseInt(t,10):0,m=s?parseInt(s,10):1/0;return{min:l,max:m}}const r=parseInt(e,10);return{min:r,max:r}},"parseRepeat"),y=n(e=>{const r=A(e.primary);if(!e.repeat)return r;const{min:t,max:s}=b(e.repeat);return t===0&&s===1?{type:"optional",element:r}:{type:"repetition",element:r,min:t,max:s}},"transformElement"),A=n(e=>{switch(e.$type){case"AbnfStringLiteral":return{type:"terminal",value:e.value};case"AbnfNumVal":return{type:"terminal",value:e.value};case"AbnfRuleName":return{type:"nonterminal",name:e.name};case"AbnfGroup":return i(e.element);case"AbnfOptionalGroup":return{type:"optional",element:i(e.element)};default:throw new Error(`Unsupported ABNF primary node: ${e.$type}`)}},"transformPrimary"),P=n(e=>({name:e.name,definition:i(e.definition)}),"transformRule"),h=n(e=>{f(e,a),e.title&&a.setTitle(e.title),e.rules.map(r=>a.addRule(P(r)))},"populateDb"),R={parse:n(e=>{a.clear(),o.debug("[ABNF Parser] Starting Langium parse");const r=v.parse(e);if(r.lexerErrors.length>0||r.parserErrors.length>0)throw new c(r);const t=r.value;o.debug("[ABNF Parser] Parsed rules:",t.rules.length),h(t),o.debug("[ABNF Parser] Parse complete")},"parse"),parser:{yy:a}},B={parser:R,db:a,renderer:u,styles:p};export{B as diagram};
|
|
2
|
+
//# sourceMappingURL=abnfDiagram-VRR7QNED-CptTkH57.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{Y as ln,$ as an,a0 as F,a1 as q,a2 as j,a3 as un,a4 as y,a5 as tn,a6 as J,a7 as _,a8 as rn,a9 as o,aa as on,ab as sn,ac as fn}from"./mermaid.core-
|
|
2
|
-
//# sourceMappingURL=arc-
|
|
1
|
+
import{Y as ln,$ as an,a0 as F,a1 as q,a2 as j,a3 as un,a4 as y,a5 as tn,a6 as J,a7 as _,a8 as rn,a9 as o,aa as on,ab as sn,ac as fn}from"./mermaid.core-rvwxvqSK.js";function cn(l){return l.innerRadius}function yn(l){return l.outerRadius}function gn(l){return l.startAngle}function dn(l){return l.endAngle}function mn(l){return l&&l.padAngle}function pn(l,h,I,D,v,A,z,a){var O=I-l,i=D-h,n=z-v,d=a-A,u=d*O-n*i;if(!(u*u<y))return u=(n*(h-A)-d*(l-v))/u,[l+u*O,h+u*i]}function U(l,h,I,D,v,A,z){var a=l-I,O=h-D,i=(z?A:-A)/J(a*a+O*O),n=i*O,d=-i*a,u=l+n,s=h+d,f=I+n,c=D+d,B=(u+f)/2,t=(s+c)/2,m=f-u,g=c-s,R=m*m+g*g,T=v-A,P=u*c-f*s,S=(g<0?-1:1)*J(on(0,T*T*R-P*P)),Y=(P*g-m*S)/R,$=(-P*m-g*S)/R,w=(P*g+m*S)/R,p=(-P*m+g*S)/R,x=Y-B,e=$-t,r=w-B,C=p-t;return x*x+e*e>r*r+C*C&&(Y=w,$=p),{cx:Y,cy:$,x01:-n,y01:-d,x11:Y*(v/T-1),y11:$*(v/T-1)}}function hn(){var l=cn,h=yn,I=j(0),D=null,v=gn,A=dn,z=mn,a=null,O=ln(i);function i(){var n,d,u=+l.apply(this,arguments),s=+h.apply(this,arguments),f=v.apply(this,arguments)-un,c=A.apply(this,arguments)-un,B=rn(c-f),t=c>f;if(a||(a=n=O()),s<u&&(d=s,s=u,u=d),!(s>y))a.moveTo(0,0);else if(B>tn-y)a.moveTo(s*F(f),s*q(f)),a.arc(0,0,s,f,c,!t),u>y&&(a.moveTo(u*F(c),u*q(c)),a.arc(0,0,u,c,f,t));else{var m=f,g=c,R=f,T=c,P=B,S=B,Y=z.apply(this,arguments)/2,$=Y>y&&(D?+D.apply(this,arguments):J(u*u+s*s)),w=_(rn(s-u)/2,+I.apply(this,arguments)),p=w,x=w,e,r;if($>y){var C=sn($/u*q(Y)),K=sn($/s*q(Y));(P-=C*2)>y?(C*=t?1:-1,R+=C,T-=C):(P=0,R=T=(f+c)/2),(S-=K*2)>y?(K*=t?1:-1,m+=K,g-=K):(S=0,m=g=(f+c)/2)}var G=s*F(m),H=s*q(m),L=u*F(T),M=u*q(T);if(w>y){var N=s*F(g),Q=s*q(g),V=u*F(R),W=u*q(R),E;if(B<an)if(E=pn(G,H,V,W,N,Q,L,M)){var X=G-E[0],Z=H-E[1],b=N-E[0],k=Q-E[1],nn=1/q(fn((X*b+Z*k)/(J(X*X+Z*Z)*J(b*b+k*k)))/2),en=J(E[0]*E[0]+E[1]*E[1]);p=_(w,(u-en)/(nn-1)),x=_(w,(s-en)/(nn+1))}else p=x=0}S>y?x>y?(e=U(V,W,G,H,s,x,t),r=U(N,Q,L,M,s,x,t),a.moveTo(e.cx+e.x01,e.cy+e.y01),x<w?a.arc(e.cx,e.cy,x,o(e.y01,e.x01),o(r.y01,r.x01),!t):(a.arc(e.cx,e.cy,x,o(e.y01,e.x01),o(e.y11,e.x11),!t),a.arc(0,0,s,o(e.cy+e.y11,e.cx+e.x11),o(r.cy+r.y11,r.cx+r.x11),!t),a.arc(r.cx,r.cy,x,o(r.y11,r.x11),o(r.y01,r.x01),!t))):(a.moveTo(G,H),a.arc(0,0,s,m,g,!t)):a.moveTo(G,H),!(u>y)||!(P>y)?a.lineTo(L,M):p>y?(e=U(L,M,N,Q,u,-p,t),r=U(G,H,V,W,u,-p,t),a.lineTo(e.cx+e.x01,e.cy+e.y01),p<w?a.arc(e.cx,e.cy,p,o(e.y01,e.x01),o(r.y01,r.x01),!t):(a.arc(e.cx,e.cy,p,o(e.y01,e.x01),o(e.y11,e.x11),!t),a.arc(0,0,u,o(e.cy+e.y11,e.cx+e.x11),o(r.cy+r.y11,r.cx+r.x11),t),a.arc(r.cx,r.cy,p,o(r.y11,r.x11),o(r.y01,r.x01),!t))):a.arc(0,0,u,T,R,t)}if(a.closePath(),n)return a=null,n+""||null}return i.centroid=function(){var n=(+l.apply(this,arguments)+ +h.apply(this,arguments))/2,d=(+v.apply(this,arguments)+ +A.apply(this,arguments))/2-an/2;return[F(d)*n,q(d)*n]},i.innerRadius=function(n){return arguments.length?(l=typeof n=="function"?n:j(+n),i):l},i.outerRadius=function(n){return arguments.length?(h=typeof n=="function"?n:j(+n),i):h},i.cornerRadius=function(n){return arguments.length?(I=typeof n=="function"?n:j(+n),i):I},i.padRadius=function(n){return arguments.length?(D=n==null?null:typeof n=="function"?n:j(+n),i):D},i.startAngle=function(n){return arguments.length?(v=typeof n=="function"?n:j(+n),i):v},i.endAngle=function(n){return arguments.length?(A=typeof n=="function"?n:j(+n),i):A},i.padAngle=function(n){return arguments.length?(z=typeof n=="function"?n:j(+n),i):z},i.context=function(n){return arguments.length?(a=n??null,i):a},i}export{hn as d};
|
|
2
|
+
//# sourceMappingURL=arc-oQ5R3mHX.js.map
|