@tom2012/cc-web 2026.5.15-g → 2026.5.16-b
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 +1 -1
- package/backend/dist/tracks/__tests__/verify-track-cancel.d.ts +23 -0
- package/backend/dist/tracks/__tests__/verify-track-cancel.d.ts.map +1 -0
- package/backend/dist/tracks/__tests__/verify-track-cancel.js +153 -0
- package/backend/dist/tracks/__tests__/verify-track-cancel.js.map +1 -0
- package/backend/dist/tracks/registry.d.ts.map +1 -1
- package/backend/dist/tracks/registry.js +47 -1
- package/backend/dist/tracks/registry.js.map +1 -1
- package/backend/dist/tracks/track-runner.d.ts +7 -0
- package/backend/dist/tracks/track-runner.d.ts.map +1 -1
- package/backend/dist/tracks/track-runner.js +25 -1
- package/backend/dist/tracks/track-runner.js.map +1 -1
- package/frontend/dist/assets/{ChatOverlay-BigXori6.js → ChatOverlay-BK7ylWXg.js} +1 -1
- package/frontend/dist/assets/{GraphPreview-BkPky-TI.js → GraphPreview-T95ywRPB.js} +2 -2
- package/frontend/dist/assets/{MobilePage-IGjtsg4k.js → MobilePage-BLVs9_5k.js} +3 -3
- package/frontend/dist/assets/{OfficePreview-k40TguA5.js → OfficePreview-CKseq-SI.js} +2 -2
- package/frontend/dist/assets/{PdfPreview-Cf8-GCtH.js → PdfPreview-ceRqAiRR.js} +1 -1
- package/frontend/dist/assets/{ProjectPage-BfRSuGNi.js → ProjectPage-5zeDKF0E.js} +5 -5
- package/frontend/dist/assets/{SettingsPage-CVZcaQ3R.js → SettingsPage-DOUbFJgH.js} +1 -1
- package/frontend/dist/assets/{SkillHubPage-BpRh93-z.js → SkillHubPage-C5PQe1qz.js} +1 -1
- package/frontend/dist/assets/{TrackEditor-BxTMmmLm.js → TrackEditor-CXn9A5LH.js} +3 -3
- package/frontend/dist/assets/TrackVisualEditor-D7Nj1dV-.js +2 -0
- package/frontend/dist/assets/{chevron-down-Dys4vcAs.js → chevron-down-B5k9UZaS.js} +1 -1
- package/frontend/dist/assets/{cssMode-BELivHMu.js → cssMode-UDf13VxV.js} +1 -1
- package/frontend/dist/assets/{editor.main-CKVebMR9.js → editor.main-DL1nkpnc.js} +7 -7
- package/frontend/dist/assets/{freemarker2-TNJanLhm.js → freemarker2-CBpHtauL.js} +1 -1
- package/frontend/dist/assets/{handlebars-B3v55Vhh.js → handlebars-DR18oibx.js} +1 -1
- package/frontend/dist/assets/{html-BQpZAffq.js → html-R-xYVcDJ.js} +1 -1
- package/frontend/dist/assets/{htmlMode-CdyV2SNL.js → htmlMode-CIT_YpSc.js} +1 -1
- package/frontend/dist/assets/index-BD_QmGXq.css +1 -0
- package/frontend/dist/assets/{index-y1WxRtWz.js → index-BOt8Hwdx.js} +1 -1
- package/frontend/dist/assets/{index-BXSNl9gW.js → index-B_HwDnfi.js} +1 -1
- package/frontend/dist/assets/{index-CRx61OUk.js → index-CfixATeo.js} +1 -1
- package/frontend/dist/assets/{index-Dyb7Lej-.js → index-CoQOKlkh.js} +2 -2
- package/frontend/dist/assets/{javascript-fg8xZnXs.js → javascript-Cy29oO-Z.js} +1 -1
- package/frontend/dist/assets/{jsonMode-Bnr3fl29.js → jsonMode-BB1s4t8K.js} +1 -1
- package/frontend/dist/assets/{jszip.min-CW5dbhJE.js → jszip.min-C28kgKJw.js} +1 -1
- package/frontend/dist/assets/{liquid-cd7iiptp.js → liquid-DK8aRC0y.js} +1 -1
- package/frontend/dist/assets/{mdx-Bi-AeiES.js → mdx-Dj-K4EeA.js} +1 -1
- package/frontend/dist/assets/{python-CwYGkoEx.js → python-ukYfDUCJ.js} +1 -1
- package/frontend/dist/assets/{razor-BxDZcept.js → razor-BTYacRNO.js} +1 -1
- package/frontend/dist/assets/{select-Bm9XoR-Q.js → select-Bs4K8_uQ.js} +1 -1
- package/frontend/dist/assets/{tsMode-CGypMWLJ.js → tsMode-CShWyfNw.js} +1 -1
- package/frontend/dist/assets/{typescript-BPBAfhzM.js → typescript-CDgMSZwF.js} +1 -1
- package/frontend/dist/assets/{user-Bg3xPKf3.js → user-DCEdR_h8.js} +1 -1
- package/frontend/dist/assets/{xml-BsI1h9KH.js → xml-DF-swCPQ.js} +1 -1
- package/frontend/dist/assets/{yaml-DXaWyEXz.js → yaml-S7G1WVd6.js} +1 -1
- package/frontend/dist/index.html +2 -2
- package/package.json +1 -1
- package/frontend/dist/assets/index-BmPb0Wl1.css +0 -1
package/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
A self-hosted web application (distributed as npm package) that provides a browser-based interface for [Claude Code](https://docs.anthropic.com/en/docs/claude-code) CLI sessions. Create projects, each with a persistent terminal running Claude Code, and interact with them through a real-time terminal UI.
|
|
4
4
|
|
|
5
|
-
**Current version**: v2026.5.
|
|
5
|
+
**Current version**: v2026.5.16-b | [GitHub](https://github.com/zbc0315/cc-web) | MIT License
|
|
6
6
|
|
|
7
7
|
## Features
|
|
8
8
|
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Regression test for the v-15-f/g daemon-crash bug:
|
|
3
|
+
*
|
|
4
|
+
* POST /tracks/abort while a track is suspended in __ccweb_ask_user
|
|
5
|
+
* used to bubble the reject up through bridge.requestInput →
|
|
6
|
+
* builtin → train.runFile → runner.run → registry.start's `void
|
|
7
|
+
* runner.run(...).then(...)`. Because that .then had no .catch, the
|
|
8
|
+
* rejection escaped as `unhandledRejection`, and the global fatal
|
|
9
|
+
* handler in logger.ts called process.exit(1) — ccweb daemon died.
|
|
10
|
+
*
|
|
11
|
+
* This script:
|
|
12
|
+
* 1. Installs an unhandledRejection listener that flips a flag.
|
|
13
|
+
* 2. Starts a registry-driven track that blocks on __ccweb_ask_user.
|
|
14
|
+
* 3. Calls registry.abort() once the ask_user push fires.
|
|
15
|
+
* 4. Verifies:
|
|
16
|
+
* - flag stays false (no escaping promise)
|
|
17
|
+
* - registry.getState() reports status === 'cancelled'
|
|
18
|
+
* - track_run_complete broadcast has ok=false, errorType=UserCancelError
|
|
19
|
+
*
|
|
20
|
+
* Run: cd backend && npx ts-node src/tracks/__tests__/verify-track-cancel.ts
|
|
21
|
+
*/
|
|
22
|
+
export {};
|
|
23
|
+
//# sourceMappingURL=verify-track-cancel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verify-track-cancel.d.ts","sourceRoot":"","sources":["../../../src/tracks/__tests__/verify-track-cancel.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG"}
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Regression test for the v-15-f/g daemon-crash bug:
|
|
4
|
+
*
|
|
5
|
+
* POST /tracks/abort while a track is suspended in __ccweb_ask_user
|
|
6
|
+
* used to bubble the reject up through bridge.requestInput →
|
|
7
|
+
* builtin → train.runFile → runner.run → registry.start's `void
|
|
8
|
+
* runner.run(...).then(...)`. Because that .then had no .catch, the
|
|
9
|
+
* rejection escaped as `unhandledRejection`, and the global fatal
|
|
10
|
+
* handler in logger.ts called process.exit(1) — ccweb daemon died.
|
|
11
|
+
*
|
|
12
|
+
* This script:
|
|
13
|
+
* 1. Installs an unhandledRejection listener that flips a flag.
|
|
14
|
+
* 2. Starts a registry-driven track that blocks on __ccweb_ask_user.
|
|
15
|
+
* 3. Calls registry.abort() once the ask_user push fires.
|
|
16
|
+
* 4. Verifies:
|
|
17
|
+
* - flag stays false (no escaping promise)
|
|
18
|
+
* - registry.getState() reports status === 'cancelled'
|
|
19
|
+
* - track_run_complete broadcast has ok=false, errorType=UserCancelError
|
|
20
|
+
*
|
|
21
|
+
* Run: cd backend && npx ts-node src/tracks/__tests__/verify-track-cancel.ts
|
|
22
|
+
*/
|
|
23
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
24
|
+
if (k2 === undefined) k2 = k;
|
|
25
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
26
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
27
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
28
|
+
}
|
|
29
|
+
Object.defineProperty(o, k2, desc);
|
|
30
|
+
}) : (function(o, m, k, k2) {
|
|
31
|
+
if (k2 === undefined) k2 = k;
|
|
32
|
+
o[k2] = m[k];
|
|
33
|
+
}));
|
|
34
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
35
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
36
|
+
}) : function(o, v) {
|
|
37
|
+
o["default"] = v;
|
|
38
|
+
});
|
|
39
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
40
|
+
var ownKeys = function(o) {
|
|
41
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
42
|
+
var ar = [];
|
|
43
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
44
|
+
return ar;
|
|
45
|
+
};
|
|
46
|
+
return ownKeys(o);
|
|
47
|
+
};
|
|
48
|
+
return function (mod) {
|
|
49
|
+
if (mod && mod.__esModule) return mod;
|
|
50
|
+
var result = {};
|
|
51
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
52
|
+
__setModuleDefault(result, mod);
|
|
53
|
+
return result;
|
|
54
|
+
};
|
|
55
|
+
})();
|
|
56
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
57
|
+
const fs = __importStar(require("fs/promises"));
|
|
58
|
+
const os = __importStar(require("os"));
|
|
59
|
+
const path = __importStar(require("path"));
|
|
60
|
+
const __1 = require("..");
|
|
61
|
+
let failed = 0;
|
|
62
|
+
function check(name, cond, msg) {
|
|
63
|
+
if (cond) {
|
|
64
|
+
console.log(` ✓ ${name}`);
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
failed++;
|
|
68
|
+
console.error(` ✗ ${name}${msg ? ': ' + msg : ''}`);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
async function writeWf(p, w) {
|
|
72
|
+
await fs.writeFile(p, JSON.stringify(w, null, 2), 'utf8');
|
|
73
|
+
}
|
|
74
|
+
async function testAbortDuringAskUser() {
|
|
75
|
+
console.log('\n=== abort during pending ask_user (regression v-15-f/g) ===');
|
|
76
|
+
let unhandled = null;
|
|
77
|
+
const onUnhandled = (reason) => {
|
|
78
|
+
unhandled = reason;
|
|
79
|
+
};
|
|
80
|
+
process.on('unhandledRejection', onUnhandled);
|
|
81
|
+
try {
|
|
82
|
+
const tmpDir = await fs.mkdtemp(path.join(os.tmpdir(), 'ccweb-cancel-'));
|
|
83
|
+
const projectDir = path.join(tmpDir, 'proj');
|
|
84
|
+
await fs.mkdir(path.join(projectDir, '.ccweb'), { recursive: true });
|
|
85
|
+
const wfPath = path.join(projectDir, '.ccweb', 'workflow_data.json');
|
|
86
|
+
await writeWf(wfPath, { constants: {}, variables: {}, task_progress: [] });
|
|
87
|
+
(0, __1.saveTrack)(projectDir, 'pause.tr', `func main() -> any {
|
|
88
|
+
let r = __ccweb_ask_user({
|
|
89
|
+
fields: [
|
|
90
|
+
{ key: "decision", label: "go?", type: "enum", variants: ["yes","no"] }
|
|
91
|
+
]
|
|
92
|
+
})
|
|
93
|
+
return r.decision
|
|
94
|
+
}
|
|
95
|
+
export main
|
|
96
|
+
`);
|
|
97
|
+
const trackAbs = path.join(projectDir, '.ccweb', 'tracks', 'pause.tr');
|
|
98
|
+
const broadcastEvents = [];
|
|
99
|
+
const registry = (0, __1.createTrackRegistry)({
|
|
100
|
+
getProjectFolder: (id) => (id === 'proj' ? projectDir : null),
|
|
101
|
+
injectIntoPty: () => { },
|
|
102
|
+
broadcast: (_projectId, msg) => {
|
|
103
|
+
broadcastEvents.push({ msg });
|
|
104
|
+
},
|
|
105
|
+
});
|
|
106
|
+
const start = await registry.start('proj', trackAbs, 'pause.tr', []);
|
|
107
|
+
check('registry.start ok', start.ok);
|
|
108
|
+
// Wait until the bridge actually pushed the ask_user event — that's
|
|
109
|
+
// the signal that bridge.requestInput is parked on the Promise and
|
|
110
|
+
// the abort path will trip the signalHandler reject.
|
|
111
|
+
const startTs = Date.now();
|
|
112
|
+
while (broadcastEvents.find((e) => e.msg.type === 'track_ask_user') === undefined &&
|
|
113
|
+
Date.now() - startTs < 8000) {
|
|
114
|
+
await new Promise((r) => setTimeout(r, 20));
|
|
115
|
+
}
|
|
116
|
+
check('track_ask_user broadcast fired before abort', broadcastEvents.find((e) => e.msg.type === 'track_ask_user') !== undefined);
|
|
117
|
+
check('ask_user is pending before abort', registry.getPendingAskUser('proj') !== null);
|
|
118
|
+
// The actual abort — this is what used to crash ccweb.
|
|
119
|
+
const aborted = registry.abort('proj');
|
|
120
|
+
check('registry.abort returned true', aborted);
|
|
121
|
+
// Give the promise chain enough ticks to settle and the fatal
|
|
122
|
+
// handler enough chance to fire if it would have.
|
|
123
|
+
await new Promise((r) => setTimeout(r, 200));
|
|
124
|
+
check('no unhandledRejection escaped (would have killed ccweb)', unhandled === null, unhandled instanceof Error ? unhandled.message : String(unhandled));
|
|
125
|
+
const finalState = registry.getState('proj');
|
|
126
|
+
check('final state non-null', finalState !== null);
|
|
127
|
+
check('final status is cancelled (not failed/running)', finalState?.status === 'cancelled', `got: ${finalState?.status}`);
|
|
128
|
+
check('final error.errorType is UserCancelError', finalState?.error?.errorType === 'UserCancelError', `got: ${finalState?.error?.errorType}`);
|
|
129
|
+
check('isRunning false after abort', !registry.isRunning('proj'));
|
|
130
|
+
const completes = broadcastEvents.filter((e) => e.msg.type === 'track_run_complete');
|
|
131
|
+
check('exactly one track_run_complete broadcast', completes.length === 1, `got ${completes.length}`);
|
|
132
|
+
if (completes.length === 1) {
|
|
133
|
+
const c = completes[0].msg;
|
|
134
|
+
check('track_run_complete ok=false', c.ok === false);
|
|
135
|
+
check('track_run_complete errorType=UserCancelError', c.error?.errorType === 'UserCancelError', `got: ${c.error?.errorType}`);
|
|
136
|
+
}
|
|
137
|
+
await fs.rm(tmpDir, { recursive: true, force: true });
|
|
138
|
+
}
|
|
139
|
+
finally {
|
|
140
|
+
process.off('unhandledRejection', onUnhandled);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
async function main() {
|
|
144
|
+
console.log('=== verify-track-cancel ===');
|
|
145
|
+
await testAbortDuringAskUser();
|
|
146
|
+
console.log(`\n${failed === 0 ? '✅ ALL CANCEL CHECKS PASSED' : `❌ ${failed} CHECK(S) FAILED`}`);
|
|
147
|
+
process.exit(failed === 0 ? 0 : 1);
|
|
148
|
+
}
|
|
149
|
+
main().catch((e) => {
|
|
150
|
+
console.error('verify-track-cancel crashed:', e);
|
|
151
|
+
process.exit(2);
|
|
152
|
+
});
|
|
153
|
+
//# sourceMappingURL=verify-track-cancel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verify-track-cancel.js","sourceRoot":"","sources":["../../../src/tracks/__tests__/verify-track-cancel.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/tracks/registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAMH,OAAO,EAA2C,KAAK,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AAClG,OAAO,KAAK,EAAE,aAAa,EAAkB,MAAM,SAAS,CAAA;AAE5D,MAAM,WAAW,iBAAiB;IAChC,6DAA6D;IAC7D,gBAAgB,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAA;IACtD,qDAAqD;IACrD,aAAa,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA;IACxE,wEAAwE;IACxE,SAAS,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAA;IACxE,8BAA8B;IAC9B,MAAM,CAAC,EAAE;QACP,KAAK,CAAC,EAAE,SAAS,CAAA;QACjB,IAAI,CAAC,EAAE,SAAS,CAAA;QAChB,IAAI,CAAC,EAAE,SAAS,CAAA;QAChB,KAAK,CAAC,EAAE,SAAS,CAAA;KAClB,CAAA;CACF;AAMD,UAAU,SAAS;IACjB,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACjC,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAA;CACxC;AAkBD,MAAM,WAAW,aAAa;IAC5B,yBAAyB;IACzB,KAAK,CACH,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,EACpB,aAAa,EAAE,MAAM,EACrB,IAAI,CAAC,EAAE,OAAO,EAAE,GACf,OAAO,CAAC;QAAE,EAAE,EAAE,IAAI,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG;QAAE,EAAE,EAAE,KAAK,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IAEvE,8CAA8C;IAC9C,KAAK,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAA;IAEjC,wDAAwD;IACxD,WAAW,CACT,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B;QAAE,EAAE,EAAE,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IAEpC,qEAAqE;IACrE,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAAA;IAEjD,iEAAiE;IACjE,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAA;IAErC,+CAA+C;IAC/C,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG;QACpC,KAAK,EAAE,MAAM,CAAA;QACb,SAAS,EAAE,MAAM,CAAA;QACjB,MAAM,EAAE,gBAAgB,EAAE,CAAA;KAC3B,GAAG,IAAI,CAAA;CACT;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,iBAAiB,GAAG,aAAa,
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/tracks/registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAMH,OAAO,EAA2C,KAAK,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AAClG,OAAO,KAAK,EAAE,aAAa,EAAkB,MAAM,SAAS,CAAA;AAE5D,MAAM,WAAW,iBAAiB;IAChC,6DAA6D;IAC7D,gBAAgB,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAA;IACtD,qDAAqD;IACrD,aAAa,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA;IACxE,wEAAwE;IACxE,SAAS,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAA;IACxE,8BAA8B;IAC9B,MAAM,CAAC,EAAE;QACP,KAAK,CAAC,EAAE,SAAS,CAAA;QACjB,IAAI,CAAC,EAAE,SAAS,CAAA;QAChB,IAAI,CAAC,EAAE,SAAS,CAAA;QAChB,KAAK,CAAC,EAAE,SAAS,CAAA;KAClB,CAAA;CACF;AAMD,UAAU,SAAS;IACjB,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACjC,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAA;CACxC;AAkBD,MAAM,WAAW,aAAa;IAC5B,yBAAyB;IACzB,KAAK,CACH,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,EACpB,aAAa,EAAE,MAAM,EACrB,IAAI,CAAC,EAAE,OAAO,EAAE,GACf,OAAO,CAAC;QAAE,EAAE,EAAE,IAAI,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG;QAAE,EAAE,EAAE,KAAK,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IAEvE,8CAA8C;IAC9C,KAAK,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAA;IAEjC,wDAAwD;IACxD,WAAW,CACT,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B;QAAE,EAAE,EAAE,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IAEpC,qEAAqE;IACrE,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAAA;IAEjD,iEAAiE;IACjE,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAA;IAErC,+CAA+C;IAC/C,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG;QACpC,KAAK,EAAE,MAAM,CAAA;QACb,SAAS,EAAE,MAAM,CAAA;QACjB,MAAM,EAAE,gBAAgB,EAAE,CAAA;KAC3B,GAAG,IAAI,CAAA;CACT;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,iBAAiB,GAAG,aAAa,CAoK1E"}
|
|
@@ -77,6 +77,12 @@ function createTrackRegistry(deps) {
|
|
|
77
77
|
watcher,
|
|
78
78
|
logger: deps.logger,
|
|
79
79
|
askUserBridge: bridge,
|
|
80
|
+
// Pin the runner's runId to the one registry hands out, so
|
|
81
|
+
// bridge.pending keys, registry.entry.runId, the runId returned
|
|
82
|
+
// to the route, and state.runId all match. Pre-fix mismatch
|
|
83
|
+
// made getPendingAskUser/submitInput/cancelAllForRun no-ops
|
|
84
|
+
// since they looked up the wrong key.
|
|
85
|
+
runId,
|
|
80
86
|
onState: (state) => {
|
|
81
87
|
// Ignore late callbacks from a previous run — only the run
|
|
82
88
|
// whose runId matches the entry's current runId is allowed
|
|
@@ -101,7 +107,17 @@ function createTrackRegistry(deps) {
|
|
|
101
107
|
};
|
|
102
108
|
projects.set(projectId, entry);
|
|
103
109
|
// Fire and forget — the run resolves later; route returns immediately.
|
|
104
|
-
|
|
110
|
+
//
|
|
111
|
+
// The .catch is defense-in-depth: track-runner converts its own
|
|
112
|
+
// exceptions to TrackRunResult, so .then's callback handles every
|
|
113
|
+
// expected outcome. But if track-runner ever throws (host bug, OOM,
|
|
114
|
+
// future refactor), there's no .catch to break a rejected promise
|
|
115
|
+
// chain — it escapes to logger.ts's unhandledRejection handler
|
|
116
|
+
// which process.exit(1)s the entire daemon. The .catch keeps that
|
|
117
|
+
// class of bug from killing ccweb.
|
|
118
|
+
void runner
|
|
119
|
+
.run(absTrackPath, args)
|
|
120
|
+
.then((result) => {
|
|
105
121
|
const e = projects.get(projectId);
|
|
106
122
|
if (e && e.runId === runId) {
|
|
107
123
|
e.inFlight = false;
|
|
@@ -112,6 +128,36 @@ function createTrackRegistry(deps) {
|
|
|
112
128
|
value: result.value,
|
|
113
129
|
error: result.error,
|
|
114
130
|
});
|
|
131
|
+
})
|
|
132
|
+
.catch((err) => {
|
|
133
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
134
|
+
deps.logger?.error?.({ projectId, runId, err: message }, '[TrackRegistry] run threw — converted to failed event');
|
|
135
|
+
// Synthesize a terminal state so isRunning() returns false and
|
|
136
|
+
// the frontend's track_status_change consumers see a definite
|
|
137
|
+
// end-of-run, not a stuck 'running'. Without this, runner-level
|
|
138
|
+
// bugs that future-broke runner's NEVER-THROW contract would
|
|
139
|
+
// leave the project stuck (entry.lastState would stay null/running).
|
|
140
|
+
const e = projects.get(projectId);
|
|
141
|
+
const failedState = {
|
|
142
|
+
runId,
|
|
143
|
+
trackFilename: e?.trackFilename ?? '',
|
|
144
|
+
startedAt: e?.lastState?.startedAt ?? Date.now(),
|
|
145
|
+
status: 'failed',
|
|
146
|
+
endedAt: Date.now(),
|
|
147
|
+
error: { errorType: 'RunnerThrew', message },
|
|
148
|
+
};
|
|
149
|
+
if (e && e.runId === runId) {
|
|
150
|
+
e.inFlight = false;
|
|
151
|
+
e.lastState = failedState;
|
|
152
|
+
}
|
|
153
|
+
emit(projectId, 'track_status_change', {
|
|
154
|
+
state: failedState,
|
|
155
|
+
});
|
|
156
|
+
emit(projectId, 'track_run_complete', {
|
|
157
|
+
ok: false,
|
|
158
|
+
value: null,
|
|
159
|
+
error: { errorType: 'RunnerThrew', message },
|
|
160
|
+
});
|
|
115
161
|
});
|
|
116
162
|
return { ok: true, runId };
|
|
117
163
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/tracks/registry.ts"],"names":[],"mappings":";AAAA;;;;;;;;;GASG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmFH,
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/tracks/registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -40,6 +40,13 @@ export interface TrackRunnerDeps {
|
|
|
40
40
|
* "Undefined identifier '__ccweb_ask_user'".
|
|
41
41
|
*/
|
|
42
42
|
askUserBridge?: AskUserBridge;
|
|
43
|
+
/**
|
|
44
|
+
* Pre-allocated runId. The caller (registry) needs to know the runId
|
|
45
|
+
* synchronously before run() awaits, so it can route submitInput /
|
|
46
|
+
* getPendingAskUser to the right bridge entry. If omitted, runner
|
|
47
|
+
* generates one. Used so registry.entry.runId === bridge pending key.
|
|
48
|
+
*/
|
|
49
|
+
runId?: string;
|
|
43
50
|
}
|
|
44
51
|
export interface TrackRunResult {
|
|
45
52
|
ok: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"track-runner.d.ts","sourceRoot":"","sources":["../../src/tracks/track-runner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAGL,KAAK,gBAAgB,EACtB,MAAM,uBAAuB,CAAA;AAC9B,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAA;AAClE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAC5C,OAAO,EAEL,KAAK,aAAa,EACnB,MAAM,mBAAmB,CAAA;AAE1B,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,gBAAgB,CAAC,UAAU,CAAC,CAAA;IACtC,OAAO,EAAE,mBAAmB,CAAA;IAC5B,8CAA8C;IAC9C,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,kDAAkD;IAClD,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAC5B,qBAAqB;IACrB,MAAM,CAAC,EAAE,gBAAgB,CAAC,QAAQ,CAAC,CAAA;IACnC,qDAAqD;IACrD,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,CAAA;IACxC;;;;;OAKG;IACH,aAAa,CAAC,EAAE,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"track-runner.d.ts","sourceRoot":"","sources":["../../src/tracks/track-runner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAGL,KAAK,gBAAgB,EACtB,MAAM,uBAAuB,CAAA;AAC9B,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAA;AAClE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAC5C,OAAO,EAEL,KAAK,aAAa,EACnB,MAAM,mBAAmB,CAAA;AAE1B,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,gBAAgB,CAAC,UAAU,CAAC,CAAA;IACtC,OAAO,EAAE,mBAAmB,CAAA;IAC5B,8CAA8C;IAC9C,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,kDAAkD;IAClD,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAC5B,qBAAqB;IACrB,MAAM,CAAC,EAAE,gBAAgB,CAAC,QAAQ,CAAC,CAAA;IACnC,qDAAqD;IACrD,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,CAAA;IACxC;;;;;OAKG;IACH,aAAa,CAAC,EAAE,aAAa,CAAA;IAC7B;;;;;OAKG;IACH,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,OAAO,CAAA;IACX,KAAK,EAAE,OAAO,CAAA;IACd,KAAK,CAAC,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;CAC9D;AAyBD,MAAM,WAAW,WAAW;IAC1B,gFAAgF;IAChF,GAAG,CAAC,YAAY,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,cAAc,CAAC,CAAA;IACpE,+BAA+B;IAC/B,MAAM,IAAI,IAAI,CAAA;IACd,8BAA8B;IAC9B,QAAQ,IAAI,aAAa,GAAG,IAAI,CAAA;CACjC;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,eAAe,GAAG,WAAW,CA4IpE"}
|
|
@@ -43,7 +43,7 @@ function createTrackRunner(deps) {
|
|
|
43
43
|
return {
|
|
44
44
|
async run(absTrackPath, args = []) {
|
|
45
45
|
const train = await loadTrain();
|
|
46
|
-
const runId = `track-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;
|
|
46
|
+
const runId = deps.runId ?? `track-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;
|
|
47
47
|
state = {
|
|
48
48
|
runId,
|
|
49
49
|
trackFilename: absTrackPath.split('/').pop() ?? absTrackPath,
|
|
@@ -111,6 +111,30 @@ function createTrackRunner(deps) {
|
|
|
111
111
|
});
|
|
112
112
|
return { ok: true, value: result.value };
|
|
113
113
|
}
|
|
114
|
+
catch (err) {
|
|
115
|
+
// NEVER-THROW contract: runFile / builtin / adapter throws (incl.
|
|
116
|
+
// ask_user reject during abort) MUST be converted into TrackRunResult.
|
|
117
|
+
// Without this catch the throw escapes runner.run, registry.ts's
|
|
118
|
+
// `void runner.run(...).then(...)` has no .catch, and the global
|
|
119
|
+
// unhandledRejection handler (logger.ts) calls process.exit(1).
|
|
120
|
+
// → entire ccweb daemon dies whenever a track with pending ask_user
|
|
121
|
+
// is aborted. (Repro: v-15-f / v-15-g logs, 2026-05-16 07:35 / 07:36.)
|
|
122
|
+
const aborted = abortController?.signal.aborted ?? false;
|
|
123
|
+
const e = err;
|
|
124
|
+
const errObj = aborted
|
|
125
|
+
? {
|
|
126
|
+
errorType: 'UserCancelError',
|
|
127
|
+
message: e?.message ?? 'cancelled',
|
|
128
|
+
}
|
|
129
|
+
: {
|
|
130
|
+
errorType: e?.errorType ?? 'RuntimeError',
|
|
131
|
+
message: e?.message ?? String(err),
|
|
132
|
+
code: e?.code,
|
|
133
|
+
};
|
|
134
|
+
const finalStatus = aborted ? 'cancelled' : 'failed';
|
|
135
|
+
updateState({ status: finalStatus, endedAt: Date.now(), error: errObj });
|
|
136
|
+
return { ok: false, value: null, error: errObj };
|
|
137
|
+
}
|
|
114
138
|
finally {
|
|
115
139
|
deps.watcher.stop();
|
|
116
140
|
if (deps.askUserBridge && state) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"track-runner.js","sourceRoot":"","sources":["../../src/tracks/track-runner.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;GAkBG;;
|
|
1
|
+
{"version":3,"file":"track-runner.js","sourceRoot":"","sources":["../../src/tracks/track-runner.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{bA as e,bB as t,r as n,bC as r,c as a,h as i,bD as o,bE as s,j as l,W as c,d as u,aE as d,bF as p,t as m,A as g,p as h,aY as f,bG as b,a as y,a0 as E,a2 as v,Z as S,Y as w,a1 as k,V as x,bf as T,aG as A,bu as _,bv as I,i as N,bH as R,bI as C,s as O,bJ as L,bK as D,bw as M,bL as P,by as F,S as B,l as U,o as z}from"./index-
|
|
1
|
+
import{bA as e,bB as t,r as n,bC as r,c as a,h as i,bD as o,bE as s,j as l,W as c,d as u,aE as d,bF as p,t as m,A as g,p as h,aY as f,bG as b,a as y,a0 as E,a2 as v,Z as S,Y as w,a1 as k,V as x,bf as T,aG as A,bu as _,bv as I,i as N,bH as R,bI as C,s as O,bJ as L,bK as D,bw as M,bL as P,by as F,S as B,l as U,o as z}from"./index-CoQOKlkh.js";import{C as $}from"./chevron-down-B5k9UZaS.js";import{a as G,C as j,u as H,c as q}from"./index-BOt8Hwdx.js";function V(){!e.current&&t();const[a]=n.useState(r.current);return a}
|
|
2
2
|
/**
|
|
3
3
|
* @license lucide-react v0.309.0 - ISC
|
|
4
4
|
*
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import{c as e,r as t,b as n,j as i,aE as r,B as o,R as a}from"./index-
|
|
1
|
+
import{c as e,r as t,b as n,j as i,aE as r,B as o,R as a}from"./index-CoQOKlkh.js";import{Z as l,a as s}from"./ProjectPage-5zeDKF0E.js";import"./purify.es-CgRAQgUo.js";import"./ChatOverlay-BK7ylWXg.js";import"./chevron-down-B5k9UZaS.js";import"./index-BOt8Hwdx.js";import"./select-Bs4K8_uQ.js";import"./user-DCEdR_h8.js";
|
|
2
2
|
/**
|
|
3
3
|
* @license lucide-react v0.309.0 - ISC
|
|
4
4
|
*
|
|
5
5
|
* This source code is licensed under the ISC license.
|
|
6
6
|
* See the LICENSE file in the root directory of this source tree.
|
|
7
7
|
*/const c=e("Maximize2",[["polyline",{points:"15 3 21 3 21 9",key:"mznyad"}],["polyline",{points:"9 21 3 21 3 15",key:"1avn1i"}],["line",{x1:"21",x2:"14",y1:"3",y2:"10",key:"ota7mn"}],["line",{x1:"3",x2:"10",y1:"21",y2:"14",key:"1atl0r"}]]);
|
|
8
|
-
/*! js-yaml 4.1.1 https://github.com/nodeca/js-yaml @license MIT */function u(e){return null==e}var p={isNothing:u,isObject:function(e){return"object"==typeof e&&null!==e},toArray:function(e){return Array.isArray(e)?e:u(e)?[]:[e]},repeat:function(e,t){var n,i="";for(n=0;n<t;n+=1)i+=e;return i},isNegativeZero:function(e){return 0===e&&Number.NEGATIVE_INFINITY===1/e},extend:function(e,t){var n,i,r,o;if(t)for(n=0,i=(o=Object.keys(t)).length;n<i;n+=1)e[r=o[n]]=t[r];return e}};function f(e,t){var n="",i=e.reason||"(unknown reason)";return e.mark?(e.mark.name&&(n+='in "'+e.mark.name+'" '),n+="("+(e.mark.line+1)+":"+(e.mark.column+1)+")",!t&&e.mark.snippet&&(n+="\n\n"+e.mark.snippet),i+" "+n):i}function d(e,t){Error.call(this),this.name="YAMLException",this.reason=e,this.mark=t,this.message=f(this,!1),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=(new Error).stack||""}d.prototype=Object.create(Error.prototype),d.prototype.constructor=d,d.prototype.toString=function(e){return this.name+": "+f(this,e)};var h=d;function m(e,t,n,i,r){var o="",a="",l=Math.floor(r/2)-1;return i-t>l&&(t=i-l+(o=" ... ").length),n-i>l&&(n=i+l-(a=" ...").length),{str:o+e.slice(t,n).replace(/\t/g,"→")+a,pos:i-t+o.length}}function g(e,t){return p.repeat(" ",t-e.length)+e}var y=function(e,t){if(t=Object.create(t||null),!e.buffer)return null;t.maxLength||(t.maxLength=79),"number"!=typeof t.indent&&(t.indent=1),"number"!=typeof t.linesBefore&&(t.linesBefore=3),"number"!=typeof t.linesAfter&&(t.linesAfter=2);for(var n,i=/\r?\n|\r|\0/g,r=[0],o=[],a=-1;n=i.exec(e.buffer);)o.push(n.index),r.push(n.index+n[0].length),e.position<=n.index&&a<0&&(a=r.length-2);a<0&&(a=r.length-1);var l,s,c="",u=Math.min(e.line+t.linesAfter,o.length).toString().length,f=t.maxLength-(t.indent+u+3);for(l=1;l<=t.linesBefore&&!(a-l<0);l++)s=m(e.buffer,r[a-l],o[a-l],e.position-(r[a]-r[a-l]),f),c=p.repeat(" ",t.indent)+g((e.line-l+1).toString(),u)+" | "+s.str+"\n"+c;for(s=m(e.buffer,r[a],o[a],e.position,f),c+=p.repeat(" ",t.indent)+g((e.line+1).toString(),u)+" | "+s.str+"\n",c+=p.repeat("-",t.indent+u+3+s.pos)+"^\n",l=1;l<=t.linesAfter&&!(a+l>=o.length);l++)s=m(e.buffer,r[a+l],o[a+l],e.position-(r[a]-r[a+l]),f),c+=p.repeat(" ",t.indent)+g((e.line+l+1).toString(),u)+" | "+s.str+"\n";return c.replace(/\n$/,"")},x=["kind","multi","resolve","construct","instanceOf","predicate","represent","representName","defaultStyle","styleAliases"],b=["scalar","sequence","mapping"];var A=function(e,t){var n,i;if(t=t||{},Object.keys(t).forEach(function(t){if(-1===x.indexOf(t))throw new h('Unknown option "'+t+'" is met in definition of "'+e+'" YAML type.')}),this.options=t,this.tag=e,this.kind=t.kind||null,this.resolve=t.resolve||function(){return!0},this.construct=t.construct||function(e){return e},this.instanceOf=t.instanceOf||null,this.predicate=t.predicate||null,this.represent=t.represent||null,this.representName=t.representName||null,this.defaultStyle=t.defaultStyle||null,this.multi=t.multi||!1,this.styleAliases=(n=t.styleAliases||null,i={},null!==n&&Object.keys(n).forEach(function(e){n[e].forEach(function(t){i[String(t)]=e})}),i),-1===b.indexOf(this.kind))throw new h('Unknown kind "'+this.kind+'" is specified for "'+e+'" YAML type.')};function v(e,t){var n=[];return e[t].forEach(function(e){var t=n.length;n.forEach(function(n,i){n.tag===e.tag&&n.kind===e.kind&&n.multi===e.multi&&(t=i)}),n[t]=e}),n}function k(e){return this.extend(e)}k.prototype.extend=function(e){var t=[],n=[];if(e instanceof A)n.push(e);else if(Array.isArray(e))n=n.concat(e);else{if(!e||!Array.isArray(e.implicit)&&!Array.isArray(e.explicit))throw new h("Schema.extend argument should be a Type, [ Type ], or a schema definition ({ implicit: [...], explicit: [...] })");e.implicit&&(t=t.concat(e.implicit)),e.explicit&&(n=n.concat(e.explicit))}t.forEach(function(e){if(!(e instanceof A))throw new h("Specified list of YAML types (or a single Type object) contains a non-Type object.");if(e.loadKind&&"scalar"!==e.loadKind)throw new h("There is a non-scalar type in the implicit list of a schema. Implicit resolving of such types is not supported.");if(e.multi)throw new h("There is a multi type in the implicit list of a schema. Multi tags can only be listed as explicit.")}),n.forEach(function(e){if(!(e instanceof A))throw new h("Specified list of YAML types (or a single Type object) contains a non-Type object.")});var i=Object.create(k.prototype);return i.implicit=(this.implicit||[]).concat(t),i.explicit=(this.explicit||[]).concat(n),i.compiledImplicit=v(i,"implicit"),i.compiledExplicit=v(i,"explicit"),i.compiledTypeMap=function(){var e,t,n={scalar:{},sequence:{},mapping:{},fallback:{},multi:{scalar:[],sequence:[],mapping:[],fallback:[]}};function i(e){e.multi?(n.multi[e.kind].push(e),n.multi.fallback.push(e)):n[e.kind][e.tag]=n.fallback[e.tag]=e}for(e=0,t=arguments.length;e<t;e+=1)arguments[e].forEach(i);return n}(i.compiledImplicit,i.compiledExplicit),i};var w=new k({explicit:[new A("tag:yaml.org,2002:str",{kind:"scalar",construct:function(e){return null!==e?e:""}}),new A("tag:yaml.org,2002:seq",{kind:"sequence",construct:function(e){return null!==e?e:[]}}),new A("tag:yaml.org,2002:map",{kind:"mapping",construct:function(e){return null!==e?e:{}}})]});var C=new A("tag:yaml.org,2002:null",{kind:"scalar",resolve:function(e){if(null===e)return!0;var t=e.length;return 1===t&&"~"===e||4===t&&("null"===e||"Null"===e||"NULL"===e)},construct:function(){return null},predicate:function(e){return null===e},represent:{canonical:function(){return"~"},lowercase:function(){return"null"},uppercase:function(){return"NULL"},camelcase:function(){return"Null"},empty:function(){return""}},defaultStyle:"lowercase"});var j=new A("tag:yaml.org,2002:bool",{kind:"scalar",resolve:function(e){if(null===e)return!1;var t=e.length;return 4===t&&("true"===e||"True"===e||"TRUE"===e)||5===t&&("false"===e||"False"===e||"FALSE"===e)},construct:function(e){return"true"===e||"True"===e||"TRUE"===e},predicate:function(e){return"[object Boolean]"===Object.prototype.toString.call(e)},represent:{lowercase:function(e){return e?"true":"false"},uppercase:function(e){return e?"TRUE":"FALSE"},camelcase:function(e){return e?"True":"False"}},defaultStyle:"lowercase"});function I(e){return 48<=e&&e<=57||65<=e&&e<=70||97<=e&&e<=102}function N(e){return 48<=e&&e<=55}function S(e){return 48<=e&&e<=57}var M=new A("tag:yaml.org,2002:int",{kind:"scalar",resolve:function(e){if(null===e)return!1;var t,n=e.length,i=0,r=!1;if(!n)return!1;if("-"!==(t=e[i])&&"+"!==t||(t=e[++i]),"0"===t){if(i+1===n)return!0;if("b"===(t=e[++i])){for(i++;i<n;i++)if("_"!==(t=e[i])){if("0"!==t&&"1"!==t)return!1;r=!0}return r&&"_"!==t}if("x"===t){for(i++;i<n;i++)if("_"!==(t=e[i])){if(!I(e.charCodeAt(i)))return!1;r=!0}return r&&"_"!==t}if("o"===t){for(i++;i<n;i++)if("_"!==(t=e[i])){if(!N(e.charCodeAt(i)))return!1;r=!0}return r&&"_"!==t}}if("_"===t)return!1;for(;i<n;i++)if("_"!==(t=e[i])){if(!S(e.charCodeAt(i)))return!1;r=!0}return!(!r||"_"===t)},construct:function(e){var t,n=e,i=1;if(-1!==n.indexOf("_")&&(n=n.replace(/_/g,"")),"-"!==(t=n[0])&&"+"!==t||("-"===t&&(i=-1),t=(n=n.slice(1))[0]),"0"===n)return 0;if("0"===t){if("b"===n[1])return i*parseInt(n.slice(2),2);if("x"===n[1])return i*parseInt(n.slice(2),16);if("o"===n[1])return i*parseInt(n.slice(2),8)}return i*parseInt(n,10)},predicate:function(e){return"[object Number]"===Object.prototype.toString.call(e)&&e%1==0&&!p.isNegativeZero(e)},represent:{binary:function(e){return e>=0?"0b"+e.toString(2):"-0b"+e.toString(2).slice(1)},octal:function(e){return e>=0?"0o"+e.toString(8):"-0o"+e.toString(8).slice(1)},decimal:function(e){return e.toString(10)},hexadecimal:function(e){return e>=0?"0x"+e.toString(16).toUpperCase():"-0x"+e.toString(16).toUpperCase().slice(1)}},defaultStyle:"decimal",styleAliases:{binary:[2,"bin"],octal:[8,"oct"],decimal:[10,"dec"],hexadecimal:[16,"hex"]}}),O=new RegExp("^(?:[-+]?(?:[0-9][0-9_]*)(?:\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?|\\.[0-9_]+(?:[eE][-+]?[0-9]+)?|[-+]?\\.(?:inf|Inf|INF)|\\.(?:nan|NaN|NAN))$");var T=/^[-+]?[0-9]+e/;var E=new A("tag:yaml.org,2002:float",{kind:"scalar",resolve:function(e){return null!==e&&!(!O.test(e)||"_"===e[e.length-1])},construct:function(e){var t,n;return n="-"===(t=e.replace(/_/g,"").toLowerCase())[0]?-1:1,"+-".indexOf(t[0])>=0&&(t=t.slice(1)),".inf"===t?1===n?Number.POSITIVE_INFINITY:Number.NEGATIVE_INFINITY:".nan"===t?NaN:n*parseFloat(t,10)},predicate:function(e){return"[object Number]"===Object.prototype.toString.call(e)&&(e%1!=0||p.isNegativeZero(e))},represent:function(e,t){var n;if(isNaN(e))switch(t){case"lowercase":return".nan";case"uppercase":return".NAN";case"camelcase":return".NaN"}else if(Number.POSITIVE_INFINITY===e)switch(t){case"lowercase":return".inf";case"uppercase":return".INF";case"camelcase":return".Inf"}else if(Number.NEGATIVE_INFINITY===e)switch(t){case"lowercase":return"-.inf";case"uppercase":return"-.INF";case"camelcase":return"-.Inf"}else if(p.isNegativeZero(e))return"-0.0";return n=e.toString(10),T.test(n)?n.replace("e",".e"):n},defaultStyle:"lowercase"}),L=w.extend({implicit:[C,j,M,E]}),F=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9])-([0-9][0-9])$"),_=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9]?)-([0-9][0-9]?)(?:[Tt]|[ \\t]+)([0-9][0-9]?):([0-9][0-9]):([0-9][0-9])(?:\\.([0-9]*))?(?:[ \\t]*(Z|([-+])([0-9][0-9]?)(?::([0-9][0-9]))?))?$");var $=new A("tag:yaml.org,2002:timestamp",{kind:"scalar",resolve:function(e){return null!==e&&(null!==F.exec(e)||null!==_.exec(e))},construct:function(e){var t,n,i,r,o,a,l,s,c=0,u=null;if(null===(t=F.exec(e))&&(t=_.exec(e)),null===t)throw new Error("Date resolve error");if(n=+t[1],i=+t[2]-1,r=+t[3],!t[4])return new Date(Date.UTC(n,i,r));if(o=+t[4],a=+t[5],l=+t[6],t[7]){for(c=t[7].slice(0,3);c.length<3;)c+="0";c=+c}return t[9]&&(u=6e4*(60*+t[10]+ +(t[11]||0)),"-"===t[9]&&(u=-u)),s=new Date(Date.UTC(n,i,r,o,a,l,c)),u&&s.setTime(s.getTime()-u),s},instanceOf:Date,represent:function(e){return e.toISOString()}});var Y=new A("tag:yaml.org,2002:merge",{kind:"scalar",resolve:function(e){return"<<"===e||null===e}}),D="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\n\r";var U=new A("tag:yaml.org,2002:binary",{kind:"scalar",resolve:function(e){if(null===e)return!1;var t,n,i=0,r=e.length,o=D;for(n=0;n<r;n++)if(!((t=o.indexOf(e.charAt(n)))>64)){if(t<0)return!1;i+=6}return i%8==0},construct:function(e){var t,n,i=e.replace(/[\r\n=]/g,""),r=i.length,o=D,a=0,l=[];for(t=0;t<r;t++)t%4==0&&t&&(l.push(a>>16&255),l.push(a>>8&255),l.push(255&a)),a=a<<6|o.indexOf(i.charAt(t));return 0===(n=r%4*6)?(l.push(a>>16&255),l.push(a>>8&255),l.push(255&a)):18===n?(l.push(a>>10&255),l.push(a>>2&255)):12===n&&l.push(a>>4&255),new Uint8Array(l)},predicate:function(e){return"[object Uint8Array]"===Object.prototype.toString.call(e)},represent:function(e){var t,n,i="",r=0,o=e.length,a=D;for(t=0;t<o;t++)t%3==0&&t&&(i+=a[r>>18&63],i+=a[r>>12&63],i+=a[r>>6&63],i+=a[63&r]),r=(r<<8)+e[t];return 0===(n=o%3)?(i+=a[r>>18&63],i+=a[r>>12&63],i+=a[r>>6&63],i+=a[63&r]):2===n?(i+=a[r>>10&63],i+=a[r>>4&63],i+=a[r<<2&63],i+=a[64]):1===n&&(i+=a[r>>2&63],i+=a[r<<4&63],i+=a[64],i+=a[64]),i}}),q=Object.prototype.hasOwnProperty,R=Object.prototype.toString;var B=new A("tag:yaml.org,2002:omap",{kind:"sequence",resolve:function(e){if(null===e)return!0;var t,n,i,r,o,a=[],l=e;for(t=0,n=l.length;t<n;t+=1){if(i=l[t],o=!1,"[object Object]"!==R.call(i))return!1;for(r in i)if(q.call(i,r)){if(o)return!1;o=!0}if(!o)return!1;if(-1!==a.indexOf(r))return!1;a.push(r)}return!0},construct:function(e){return null!==e?e:[]}}),z=Object.prototype.toString;var W=new A("tag:yaml.org,2002:pairs",{kind:"sequence",resolve:function(e){if(null===e)return!0;var t,n,i,r,o,a=e;for(o=new Array(a.length),t=0,n=a.length;t<n;t+=1){if(i=a[t],"[object Object]"!==z.call(i))return!1;if(1!==(r=Object.keys(i)).length)return!1;o[t]=[r[0],i[r[0]]]}return!0},construct:function(e){if(null===e)return[];var t,n,i,r,o,a=e;for(o=new Array(a.length),t=0,n=a.length;t<n;t+=1)i=a[t],r=Object.keys(i),o[t]=[r[0],i[r[0]]];return o}}),P=Object.prototype.hasOwnProperty;var G=new A("tag:yaml.org,2002:set",{kind:"mapping",resolve:function(e){if(null===e)return!0;var t,n=e;for(t in n)if(P.call(n,t)&&null!==n[t])return!1;return!0},construct:function(e){return null!==e?e:{}}}),Z=L.extend({implicit:[$,Y],explicit:[U,B,W,G]}),V=Object.prototype.hasOwnProperty,X=/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F-\x84\x86-\x9F\uFFFE\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/,H=/[\x85\u2028\u2029]/,K=/[,\[\]\{\}]/,J=/^(?:!|!!|![a-z\-]+!)$/i,Q=/^(?:!|[^,\[\]\{\}])(?:%[0-9a-f]{2}|[0-9a-z\-#;\/\?:@&=\+\$,_\.!~\*'\(\)\[\]])*$/i;function ee(e){return Object.prototype.toString.call(e)}function te(e){return 10===e||13===e}function ne(e){return 9===e||32===e}function ie(e){return 9===e||32===e||10===e||13===e}function re(e){return 44===e||91===e||93===e||123===e||125===e}function oe(e){var t;return 48<=e&&e<=57?e-48:97<=(t=32|e)&&t<=102?t-97+10:-1}function ae(e){return 120===e?2:117===e?4:85===e?8:0}function le(e){return 48<=e&&e<=57?e-48:-1}function se(e){return 48===e?"\0":97===e?"":98===e?"\b":116===e||9===e?"\t":110===e?"\n":118===e?"\v":102===e?"\f":114===e?"\r":101===e?"":32===e?" ":34===e?'"':47===e?"/":92===e?"\\":78===e?"
":95===e?" ":76===e?"\u2028":80===e?"\u2029":""}function ce(e){return e<=65535?String.fromCharCode(e):String.fromCharCode(55296+(e-65536>>10),56320+(e-65536&1023))}function ue(e,t,n){"__proto__"===t?Object.defineProperty(e,t,{configurable:!0,enumerable:!0,writable:!0,value:n}):e[t]=n}for(var pe=new Array(256),fe=new Array(256),de=0;de<256;de++)pe[de]=se(de)?1:0,fe[de]=se(de);function he(e,t){this.input=e,this.filename=t.filename||null,this.schema=t.schema||Z,this.onWarning=t.onWarning||null,this.legacy=t.legacy||!1,this.json=t.json||!1,this.listener=t.listener||null,this.implicitTypes=this.schema.compiledImplicit,this.typeMap=this.schema.compiledTypeMap,this.length=e.length,this.position=0,this.line=0,this.lineStart=0,this.lineIndent=0,this.firstTabInLine=-1,this.documents=[]}function me(e,t){var n={name:e.filename,buffer:e.input.slice(0,-1),position:e.position,line:e.line,column:e.position-e.lineStart};return n.snippet=y(n),new h(t,n)}function ge(e,t){throw me(e,t)}function ye(e,t){e.onWarning&&e.onWarning.call(null,me(e,t))}var xe={YAML:function(e,t,n){var i,r,o;null!==e.version&&ge(e,"duplication of %YAML directive"),1!==n.length&&ge(e,"YAML directive accepts exactly one argument"),null===(i=/^([0-9]+)\.([0-9]+)$/.exec(n[0]))&&ge(e,"ill-formed argument of the YAML directive"),r=parseInt(i[1],10),o=parseInt(i[2],10),1!==r&&ge(e,"unacceptable YAML version of the document"),e.version=n[0],e.checkLineBreaks=o<2,1!==o&&2!==o&&ye(e,"unsupported YAML version of the document")},TAG:function(e,t,n){var i,r;2!==n.length&&ge(e,"TAG directive accepts exactly two arguments"),i=n[0],r=n[1],J.test(i)||ge(e,"ill-formed tag handle (first argument) of the TAG directive"),V.call(e.tagMap,i)&&ge(e,'there is a previously declared suffix for "'+i+'" tag handle'),Q.test(r)||ge(e,"ill-formed tag prefix (second argument) of the TAG directive");try{r=decodeURIComponent(r)}catch(o){ge(e,"tag prefix is malformed: "+r)}e.tagMap[i]=r}};function be(e,t,n,i){var r,o,a,l;if(t<n){if(l=e.input.slice(t,n),i)for(r=0,o=l.length;r<o;r+=1)9===(a=l.charCodeAt(r))||32<=a&&a<=1114111||ge(e,"expected valid JSON character");else X.test(l)&&ge(e,"the stream contains non-printable characters");e.result+=l}}function Ae(e,t,n,i){var r,o,a,l;for(p.isObject(n)||ge(e,"cannot merge mappings; the provided source object is unacceptable"),a=0,l=(r=Object.keys(n)).length;a<l;a+=1)o=r[a],V.call(t,o)||(ue(t,o,n[o]),i[o]=!0)}function ve(e,t,n,i,r,o,a,l,s){var c,u;if(Array.isArray(r))for(c=0,u=(r=Array.prototype.slice.call(r)).length;c<u;c+=1)Array.isArray(r[c])&&ge(e,"nested arrays are not supported inside keys"),"object"==typeof r&&"[object Object]"===ee(r[c])&&(r[c]="[object Object]");if("object"==typeof r&&"[object Object]"===ee(r)&&(r="[object Object]"),r=String(r),null===t&&(t={}),"tag:yaml.org,2002:merge"===i)if(Array.isArray(o))for(c=0,u=o.length;c<u;c+=1)Ae(e,t,o[c],n);else Ae(e,t,o,n);else e.json||V.call(n,r)||!V.call(t,r)||(e.line=a||e.line,e.lineStart=l||e.lineStart,e.position=s||e.position,ge(e,"duplicated mapping key")),ue(t,r,o),delete n[r];return t}function ke(e){var t;10===(t=e.input.charCodeAt(e.position))?e.position++:13===t?(e.position++,10===e.input.charCodeAt(e.position)&&e.position++):ge(e,"a line break is expected"),e.line+=1,e.lineStart=e.position,e.firstTabInLine=-1}function we(e,t,n){for(var i=0,r=e.input.charCodeAt(e.position);0!==r;){for(;ne(r);)9===r&&-1===e.firstTabInLine&&(e.firstTabInLine=e.position),r=e.input.charCodeAt(++e.position);if(t&&35===r)do{r=e.input.charCodeAt(++e.position)}while(10!==r&&13!==r&&0!==r);if(!te(r))break;for(ke(e),r=e.input.charCodeAt(e.position),i++,e.lineIndent=0;32===r;)e.lineIndent++,r=e.input.charCodeAt(++e.position)}return-1!==n&&0!==i&&e.lineIndent<n&&ye(e,"deficient indentation"),i}function Ce(e){var t,n=e.position;return!(45!==(t=e.input.charCodeAt(n))&&46!==t||t!==e.input.charCodeAt(n+1)||t!==e.input.charCodeAt(n+2)||(n+=3,0!==(t=e.input.charCodeAt(n))&&!ie(t)))}function je(e,t){1===t?e.result+=" ":t>1&&(e.result+=p.repeat("\n",t-1))}function Ie(e,t){var n,i,r=e.tag,o=e.anchor,a=[],l=!1;if(-1!==e.firstTabInLine)return!1;for(null!==e.anchor&&(e.anchorMap[e.anchor]=a),i=e.input.charCodeAt(e.position);0!==i&&(-1!==e.firstTabInLine&&(e.position=e.firstTabInLine,ge(e,"tab characters must not be used in indentation")),45===i)&&ie(e.input.charCodeAt(e.position+1));)if(l=!0,e.position++,we(e,!0,-1)&&e.lineIndent<=t)a.push(null),i=e.input.charCodeAt(e.position);else if(n=e.line,Me(e,t,3,!1,!0),a.push(e.result),we(e,!0,-1),i=e.input.charCodeAt(e.position),(e.line===n||e.lineIndent>t)&&0!==i)ge(e,"bad indentation of a sequence entry");else if(e.lineIndent<t)break;return!!l&&(e.tag=r,e.anchor=o,e.kind="sequence",e.result=a,!0)}function Ne(e){var t,n,i,r,o=!1,a=!1;if(33!==(r=e.input.charCodeAt(e.position)))return!1;if(null!==e.tag&&ge(e,"duplication of a tag property"),60===(r=e.input.charCodeAt(++e.position))?(o=!0,r=e.input.charCodeAt(++e.position)):33===r?(a=!0,n="!!",r=e.input.charCodeAt(++e.position)):n="!",t=e.position,o){do{r=e.input.charCodeAt(++e.position)}while(0!==r&&62!==r);e.position<e.length?(i=e.input.slice(t,e.position),r=e.input.charCodeAt(++e.position)):ge(e,"unexpected end of the stream within a verbatim tag")}else{for(;0!==r&&!ie(r);)33===r&&(a?ge(e,"tag suffix cannot contain exclamation marks"):(n=e.input.slice(t-1,e.position+1),J.test(n)||ge(e,"named tag handle cannot contain such characters"),a=!0,t=e.position+1)),r=e.input.charCodeAt(++e.position);i=e.input.slice(t,e.position),K.test(i)&&ge(e,"tag suffix cannot contain flow indicator characters")}i&&!Q.test(i)&&ge(e,"tag name cannot contain such characters: "+i);try{i=decodeURIComponent(i)}catch(l){ge(e,"tag name is malformed: "+i)}return o?e.tag=i:V.call(e.tagMap,n)?e.tag=e.tagMap[n]+i:"!"===n?e.tag="!"+i:"!!"===n?e.tag="tag:yaml.org,2002:"+i:ge(e,'undeclared tag handle "'+n+'"'),!0}function Se(e){var t,n;if(38!==(n=e.input.charCodeAt(e.position)))return!1;for(null!==e.anchor&&ge(e,"duplication of an anchor property"),n=e.input.charCodeAt(++e.position),t=e.position;0!==n&&!ie(n)&&!re(n);)n=e.input.charCodeAt(++e.position);return e.position===t&&ge(e,"name of an anchor node must contain at least one character"),e.anchor=e.input.slice(t,e.position),!0}function Me(e,t,n,i,r){var o,a,l,s,c,u,f,d,h,m=1,g=!1,y=!1;if(null!==e.listener&&e.listener("open",e),e.tag=null,e.anchor=null,e.kind=null,e.result=null,o=a=l=4===n||3===n,i&&we(e,!0,-1)&&(g=!0,e.lineIndent>t?m=1:e.lineIndent===t?m=0:e.lineIndent<t&&(m=-1)),1===m)for(;Ne(e)||Se(e);)we(e,!0,-1)?(g=!0,l=o,e.lineIndent>t?m=1:e.lineIndent===t?m=0:e.lineIndent<t&&(m=-1)):l=!1;if(l&&(l=g||r),1!==m&&4!==n||(d=1===n||2===n?t:t+1,h=e.position-e.lineStart,1===m?l&&(Ie(e,h)||function(e,t,n){var i,r,o,a,l,s,c,u=e.tag,p=e.anchor,f={},d=Object.create(null),h=null,m=null,g=null,y=!1,x=!1;if(-1!==e.firstTabInLine)return!1;for(null!==e.anchor&&(e.anchorMap[e.anchor]=f),c=e.input.charCodeAt(e.position);0!==c;){if(y||-1===e.firstTabInLine||(e.position=e.firstTabInLine,ge(e,"tab characters must not be used in indentation")),i=e.input.charCodeAt(e.position+1),o=e.line,63!==c&&58!==c||!ie(i)){if(a=e.line,l=e.lineStart,s=e.position,!Me(e,n,2,!1,!0))break;if(e.line===o){for(c=e.input.charCodeAt(e.position);ne(c);)c=e.input.charCodeAt(++e.position);if(58===c)ie(c=e.input.charCodeAt(++e.position))||ge(e,"a whitespace character is expected after the key-value separator within a block mapping"),y&&(ve(e,f,d,h,m,null,a,l,s),h=m=g=null),x=!0,y=!1,r=!1,h=e.tag,m=e.result;else{if(!x)return e.tag=u,e.anchor=p,!0;ge(e,"can not read an implicit mapping pair; a colon is missed")}}else{if(!x)return e.tag=u,e.anchor=p,!0;ge(e,"can not read a block mapping entry; a multiline key may not be an implicit key")}}else 63===c?(y&&(ve(e,f,d,h,m,null,a,l,s),h=m=g=null),x=!0,y=!0,r=!0):y?(y=!1,r=!0):ge(e,"incomplete explicit mapping pair; a key node is missed; or followed by a non-tabulated empty line"),e.position+=1,c=i;if((e.line===o||e.lineIndent>t)&&(y&&(a=e.line,l=e.lineStart,s=e.position),Me(e,t,4,!0,r)&&(y?m=e.result:g=e.result),y||(ve(e,f,d,h,m,g,a,l,s),h=m=g=null),we(e,!0,-1),c=e.input.charCodeAt(e.position)),(e.line===o||e.lineIndent>t)&&0!==c)ge(e,"bad indentation of a mapping entry");else if(e.lineIndent<t)break}return y&&ve(e,f,d,h,m,null,a,l,s),x&&(e.tag=u,e.anchor=p,e.kind="mapping",e.result=f),x}(e,h,d))||function(e,t){var n,i,r,o,a,l,s,c,u,p,f,d,h=!0,m=e.tag,g=e.anchor,y=Object.create(null);if(91===(d=e.input.charCodeAt(e.position)))a=93,c=!1,o=[];else{if(123!==d)return!1;a=125,c=!0,o={}}for(null!==e.anchor&&(e.anchorMap[e.anchor]=o),d=e.input.charCodeAt(++e.position);0!==d;){if(we(e,!0,t),(d=e.input.charCodeAt(e.position))===a)return e.position++,e.tag=m,e.anchor=g,e.kind=c?"mapping":"sequence",e.result=o,!0;h?44===d&&ge(e,"expected the node content, but found ','"):ge(e,"missed comma between flow collection entries"),f=null,l=s=!1,63===d&&ie(e.input.charCodeAt(e.position+1))&&(l=s=!0,e.position++,we(e,!0,t)),n=e.line,i=e.lineStart,r=e.position,Me(e,t,1,!1,!0),p=e.tag,u=e.result,we(e,!0,t),d=e.input.charCodeAt(e.position),!s&&e.line!==n||58!==d||(l=!0,d=e.input.charCodeAt(++e.position),we(e,!0,t),Me(e,t,1,!1,!0),f=e.result),c?ve(e,o,y,p,u,f,n,i,r):l?o.push(ve(e,null,y,p,u,f,n,i,r)):o.push(u),we(e,!0,t),44===(d=e.input.charCodeAt(e.position))?(h=!0,d=e.input.charCodeAt(++e.position)):h=!1}ge(e,"unexpected end of the stream within a flow collection")}(e,d)?y=!0:(a&&function(e,t){var n,i,r,o,a=1,l=!1,s=!1,c=t,u=0,f=!1;if(124===(o=e.input.charCodeAt(e.position)))i=!1;else{if(62!==o)return!1;i=!0}for(e.kind="scalar",e.result="";0!==o;)if(43===(o=e.input.charCodeAt(++e.position))||45===o)1===a?a=43===o?3:2:ge(e,"repeat of a chomping mode identifier");else{if(!((r=le(o))>=0))break;0===r?ge(e,"bad explicit indentation width of a block scalar; it cannot be less than one"):s?ge(e,"repeat of an indentation width identifier"):(c=t+r-1,s=!0)}if(ne(o)){do{o=e.input.charCodeAt(++e.position)}while(ne(o));if(35===o)do{o=e.input.charCodeAt(++e.position)}while(!te(o)&&0!==o)}for(;0!==o;){for(ke(e),e.lineIndent=0,o=e.input.charCodeAt(e.position);(!s||e.lineIndent<c)&&32===o;)e.lineIndent++,o=e.input.charCodeAt(++e.position);if(!s&&e.lineIndent>c&&(c=e.lineIndent),te(o))u++;else{if(e.lineIndent<c){3===a?e.result+=p.repeat("\n",l?1+u:u):1===a&&l&&(e.result+="\n");break}for(i?ne(o)?(f=!0,e.result+=p.repeat("\n",l?1+u:u)):f?(f=!1,e.result+=p.repeat("\n",u+1)):0===u?l&&(e.result+=" "):e.result+=p.repeat("\n",u):e.result+=p.repeat("\n",l?1+u:u),l=!0,s=!0,u=0,n=e.position;!te(o)&&0!==o;)o=e.input.charCodeAt(++e.position);be(e,n,e.position,!1)}}return!0}(e,d)||function(e,t){var n,i,r;if(39!==(n=e.input.charCodeAt(e.position)))return!1;for(e.kind="scalar",e.result="",e.position++,i=r=e.position;0!==(n=e.input.charCodeAt(e.position));)if(39===n){if(be(e,i,e.position,!0),39!==(n=e.input.charCodeAt(++e.position)))return!0;i=e.position,e.position++,r=e.position}else te(n)?(be(e,i,r,!0),je(e,we(e,!1,t)),i=r=e.position):e.position===e.lineStart&&Ce(e)?ge(e,"unexpected end of the document within a single quoted scalar"):(e.position++,r=e.position);ge(e,"unexpected end of the stream within a single quoted scalar")}(e,d)||function(e,t){var n,i,r,o,a,l;if(34!==(l=e.input.charCodeAt(e.position)))return!1;for(e.kind="scalar",e.result="",e.position++,n=i=e.position;0!==(l=e.input.charCodeAt(e.position));){if(34===l)return be(e,n,e.position,!0),e.position++,!0;if(92===l){if(be(e,n,e.position,!0),te(l=e.input.charCodeAt(++e.position)))we(e,!1,t);else if(l<256&&pe[l])e.result+=fe[l],e.position++;else if((a=ae(l))>0){for(r=a,o=0;r>0;r--)(a=oe(l=e.input.charCodeAt(++e.position)))>=0?o=(o<<4)+a:ge(e,"expected hexadecimal character");e.result+=ce(o),e.position++}else ge(e,"unknown escape sequence");n=i=e.position}else te(l)?(be(e,n,i,!0),je(e,we(e,!1,t)),n=i=e.position):e.position===e.lineStart&&Ce(e)?ge(e,"unexpected end of the document within a double quoted scalar"):(e.position++,i=e.position)}ge(e,"unexpected end of the stream within a double quoted scalar")}(e,d)?y=!0:!function(e){var t,n,i;if(42!==(i=e.input.charCodeAt(e.position)))return!1;for(i=e.input.charCodeAt(++e.position),t=e.position;0!==i&&!ie(i)&&!re(i);)i=e.input.charCodeAt(++e.position);return e.position===t&&ge(e,"name of an alias node must contain at least one character"),n=e.input.slice(t,e.position),V.call(e.anchorMap,n)||ge(e,'unidentified alias "'+n+'"'),e.result=e.anchorMap[n],we(e,!0,-1),!0}(e)?function(e,t,n){var i,r,o,a,l,s,c,u,p=e.kind,f=e.result;if(ie(u=e.input.charCodeAt(e.position))||re(u)||35===u||38===u||42===u||33===u||124===u||62===u||39===u||34===u||37===u||64===u||96===u)return!1;if((63===u||45===u)&&(ie(i=e.input.charCodeAt(e.position+1))||n&&re(i)))return!1;for(e.kind="scalar",e.result="",r=o=e.position,a=!1;0!==u;){if(58===u){if(ie(i=e.input.charCodeAt(e.position+1))||n&&re(i))break}else if(35===u){if(ie(e.input.charCodeAt(e.position-1)))break}else{if(e.position===e.lineStart&&Ce(e)||n&&re(u))break;if(te(u)){if(l=e.line,s=e.lineStart,c=e.lineIndent,we(e,!1,-1),e.lineIndent>=t){a=!0,u=e.input.charCodeAt(e.position);continue}e.position=o,e.line=l,e.lineStart=s,e.lineIndent=c;break}}a&&(be(e,r,o,!1),je(e,e.line-l),r=o=e.position,a=!1),ne(u)||(o=e.position+1),u=e.input.charCodeAt(++e.position)}return be(e,r,o,!1),!!e.result||(e.kind=p,e.result=f,!1)}(e,d,1===n)&&(y=!0,null===e.tag&&(e.tag="?")):(y=!0,null===e.tag&&null===e.anchor||ge(e,"alias node should not have any properties")),null!==e.anchor&&(e.anchorMap[e.anchor]=e.result)):0===m&&(y=l&&Ie(e,h))),null===e.tag)null!==e.anchor&&(e.anchorMap[e.anchor]=e.result);else if("?"===e.tag){for(null!==e.result&&"scalar"!==e.kind&&ge(e,'unacceptable node kind for !<?> tag; it should be "scalar", not "'+e.kind+'"'),s=0,c=e.implicitTypes.length;s<c;s+=1)if((f=e.implicitTypes[s]).resolve(e.result)){e.result=f.construct(e.result),e.tag=f.tag,null!==e.anchor&&(e.anchorMap[e.anchor]=e.result);break}}else if("!"!==e.tag){if(V.call(e.typeMap[e.kind||"fallback"],e.tag))f=e.typeMap[e.kind||"fallback"][e.tag];else for(f=null,s=0,c=(u=e.typeMap.multi[e.kind||"fallback"]).length;s<c;s+=1)if(e.tag.slice(0,u[s].tag.length)===u[s].tag){f=u[s];break}f||ge(e,"unknown tag !<"+e.tag+">"),null!==e.result&&f.kind!==e.kind&&ge(e,"unacceptable node kind for !<"+e.tag+'> tag; it should be "'+f.kind+'", not "'+e.kind+'"'),f.resolve(e.result,e.tag)?(e.result=f.construct(e.result,e.tag),null!==e.anchor&&(e.anchorMap[e.anchor]=e.result)):ge(e,"cannot resolve a node with !<"+e.tag+"> explicit tag")}return null!==e.listener&&e.listener("close",e),null!==e.tag||null!==e.anchor||y}function Oe(e){var t,n,i,r,o=e.position,a=!1;for(e.version=null,e.checkLineBreaks=e.legacy,e.tagMap=Object.create(null),e.anchorMap=Object.create(null);0!==(r=e.input.charCodeAt(e.position))&&(we(e,!0,-1),r=e.input.charCodeAt(e.position),!(e.lineIndent>0||37!==r));){for(a=!0,r=e.input.charCodeAt(++e.position),t=e.position;0!==r&&!ie(r);)r=e.input.charCodeAt(++e.position);for(i=[],(n=e.input.slice(t,e.position)).length<1&&ge(e,"directive name must not be less than one character in length");0!==r;){for(;ne(r);)r=e.input.charCodeAt(++e.position);if(35===r){do{r=e.input.charCodeAt(++e.position)}while(0!==r&&!te(r));break}if(te(r))break;for(t=e.position;0!==r&&!ie(r);)r=e.input.charCodeAt(++e.position);i.push(e.input.slice(t,e.position))}0!==r&&ke(e),V.call(xe,n)?xe[n](e,n,i):ye(e,'unknown document directive "'+n+'"')}we(e,!0,-1),0===e.lineIndent&&45===e.input.charCodeAt(e.position)&&45===e.input.charCodeAt(e.position+1)&&45===e.input.charCodeAt(e.position+2)?(e.position+=3,we(e,!0,-1)):a&&ge(e,"directives end mark is expected"),Me(e,e.lineIndent-1,4,!1,!0),we(e,!0,-1),e.checkLineBreaks&&H.test(e.input.slice(o,e.position))&&ye(e,"non-ASCII line breaks are interpreted as content"),e.documents.push(e.result),e.position===e.lineStart&&Ce(e)?46===e.input.charCodeAt(e.position)&&(e.position+=3,we(e,!0,-1)):e.position<e.length-1&&ge(e,"end of the stream or a document separator is expected")}var Te={load:function(e,t){var n=function(e,t){t=t||{},0!==(e=String(e)).length&&(10!==e.charCodeAt(e.length-1)&&13!==e.charCodeAt(e.length-1)&&(e+="\n"),65279===e.charCodeAt(0)&&(e=e.slice(1)));var n=new he(e,t),i=e.indexOf("\0");for(-1!==i&&(n.position=i,ge(n,"null byte is not allowed in input")),n.input+="\0";32===n.input.charCodeAt(n.position);)n.lineIndent+=1,n.position+=1;for(;n.position<n.length-1;)Oe(n);return n.documents}(e,t);if(0!==n.length){if(1===n.length)return n[0];throw new h("expected a single document in the stream, but found more")}}}.load;function Ee(e){var t;const n=e.pages||[],i=e.relations||[];if(0===n.length)return{nodes:[],edges:[]};const r=new Map,o=new Map;for(const d of n)r.set(d.id,[]),o.set(d.id,0);for(const d of i)null==(t=r.get(d.from))||t.push(d.to),o.set(d.to,(o.get(d.to)||0)+1);const a=new Map,l=[];for(const d of n)0===(o.get(d.id)||0)&&(l.push(d.id),a.set(d.id,0));let s=0;for(;l.length>0;){const e=l.shift(),t=a.get(e)||0;for(const n of r.get(e)||[]){const e=t+1;e>(a.get(n)||0)&&(a.set(n,e),e>s&&(s=e));const i=(o.get(n)||1)-1;o.set(n,i),i<=0&&l.push(n)}}for(const d of n)a.has(d.id)||a.set(d.id,s+1);const c=new Map;for(const d of n){const e=a.get(d.id)||0;c.has(e)||c.set(e,[]),c.get(e).push(d.id)}const u=[],p=new Map(n.map(e=>[e.id,e]));for(const[d,h]of c){const e=-(160*h.length+60*(h.length-1))/2;h.forEach((t,n)=>{const i=p.get(t);u.push({id:t,title:(null==i?void 0:i.title)||t,x:e+220*n+80,y:130*d,layer:d})})}const f=i.map(e=>({from:e.from,to:e.to,label:e.label}));return{nodes:u,edges:f}}const Le=["#3b82f6","#8b5cf6","#ec4899","#f59e0b","#10b981","#06b6d4","#f97316","#6366f1"];function Fe({folderPath:e}){const[u,p]=t.useState(null),[f,d]=t.useState(!0),[h,m]=t.useState(null),[g,y]=t.useState(1),[x,b]=t.useState({x:0,y:0}),A=t.useRef(!1),v=t.useRef({x:0,y:0}),[,k]=t.useState(0),w=t.useRef(null),C=t.useRef(null),j=`${e}/.notebook/graph.yaml`,I=t.useCallback(async()=>{d(!0),m(null);try{const e=await n(j);if(!e.content)return m("graph.yaml is empty"),void p(null);const t=Te(e.content);p(t),y(1),b({x:0,y:0})}catch{m("Cannot read .notebook/graph.yaml"),p(null)}finally{d(!1)}},[j]);t.useEffect(()=>{I()},[I]);const N=t.useCallback(e=>{e.preventDefault();const t=e.deltaY>0?-.1:.1;y(e=>Math.max(.2,Math.min(3,e+t)))},[]),S=t.useCallback(e=>{0===e.button&&(A.current=!0,k(e=>e+1),b(t=>(v.current={x:e.clientX-t.x,y:e.clientY-t.y},t)))},[]),M=t.useCallback(e=>{A.current&&b({x:e.clientX-v.current.x,y:e.clientY-v.current.y})},[]),O=t.useCallback(()=>{A.current=!1,k(e=>e+1)},[]),T=t.useCallback(()=>{if(!u||!C.current)return;const{nodes:e}=Ee(u);if(0===e.length)return;const t=Math.min(...e.map(e=>e.x))-100,n=Math.max(...e.map(e=>e.x))+100,i=Math.min(...e.map(e=>e.y))-40,r=Math.max(...e.map(e=>e.y))+60,o=n-t,a=r-i,l=C.current.clientWidth,s=C.current.clientHeight,c=.9*Math.min(l/o,s/a,1.5);y(c),b({x:l/2-(t+n)/2*c,y:s/2-(i+r)/2*c})},[u]),{nodes:E,edges:L}=t.useMemo(()=>u?Ee(u):{nodes:[],edges:[]},[u]),F=t.useMemo(()=>new Map(E.map(e=>[e.id,e])),[E]);return t.useEffect(()=>{if(u&&!f){const e=setTimeout(T,50);return()=>clearTimeout(e)}},[u,f,T]),f?i.jsx("div",{className:"flex items-center justify-center h-full text-muted-foreground",children:i.jsx(r,{className:"h-5 w-5 animate-spin"})}):h||!u?i.jsxs("div",{className:"flex flex-col items-center justify-center h-full gap-2 text-muted-foreground text-sm px-4 text-center",children:[i.jsx("p",{children:h||"No graph data"}),i.jsxs(o,{variant:"ghost",size:"sm",onClick:()=>{I()},children:[i.jsx(a,{className:"h-3 w-3 mr-1"})," Retry"]})]}):i.jsxs("div",{className:"flex flex-col h-full",children:[i.jsxs("div",{className:"flex items-center gap-1 px-2 py-1 border-b shrink-0",children:[i.jsxs("span",{className:"text-xs text-muted-foreground mr-auto",children:[E.length," pages, ",L.length," relations"]}),i.jsx(o,{variant:"ghost",size:"icon",className:"h-6 w-6",onClick:()=>y(e=>Math.min(3,e+.2)),children:i.jsx(l,{className:"h-3 w-3"})}),i.jsx(o,{variant:"ghost",size:"icon",className:"h-6 w-6",onClick:()=>y(e=>Math.max(.2,e-.2)),children:i.jsx(s,{className:"h-3 w-3"})}),i.jsx(o,{variant:"ghost",size:"icon",className:"h-6 w-6",onClick:T,children:i.jsx(c,{className:"h-3 w-3"})}),i.jsx(o,{variant:"ghost",size:"icon",className:"h-6 w-6",onClick:()=>{I()},children:i.jsx(a,{className:"h-3 w-3"})})]}),i.jsx("div",{ref:C,className:"flex-1 overflow-hidden cursor-grab active:cursor-grabbing bg-muted/30",onWheel:N,onMouseDown:S,onMouseMove:M,onMouseUp:O,onMouseLeave:O,children:i.jsxs("svg",{ref:w,width:"100%",height:"100%",style:{userSelect:"none"},children:[i.jsx("defs",{children:i.jsx("marker",{id:"arrowhead",viewBox:"0 0 10 7",refX:"10",refY:"3.5",markerWidth:"8",markerHeight:"6",orient:"auto",children:i.jsx("polygon",{points:"0 0, 10 3.5, 0 7",className:"fill-muted-foreground/60"})})}),i.jsxs("g",{transform:`translate(${x.x}, ${x.y}) scale(${g})`,children:[L.map((e,t)=>{const n=F.get(e.from),r=F.get(e.to);if(!n||!r)return null;const o=n.y+20,a=r.y-20,l=(o+a)/2;return i.jsxs("g",{children:[i.jsx("path",{d:`M ${n.x} ${o} C ${n.x} ${l}, ${r.x} ${l}, ${r.x} ${a}`,fill:"none",className:"stroke-muted-foreground/40",strokeWidth:1.5,markerEnd:"url(#arrowhead)"}),e.label&&i.jsx("text",{x:(n.x+r.x)/2,y:l-4,textAnchor:"middle",className:"fill-muted-foreground/60",fontSize:9,children:e.label})]},`edge-${t}`)}),E.map(e=>{const t=Le[e.layer%Le.length];return i.jsxs("g",{transform:`translate(${e.x-70}, ${e.y-18})`,children:[i.jsx("rect",{width:140,height:36,rx:8,fill:t,fillOpacity:.15,stroke:t,strokeWidth:1.5}),i.jsx("text",{x:70,y:19,textAnchor:"middle",dominantBaseline:"middle",className:"fill-foreground",fontSize:11,fontWeight:500,children:e.title.length>14?e.title.slice(0,13)+"…":e.title})]},e.id)})]})]})})]})}export{Fe as GraphPreview};
|
|
8
|
+
/*! js-yaml 4.1.1 https://github.com/nodeca/js-yaml @license MIT */function u(e){return null==e}var p={isNothing:u,isObject:function(e){return"object"==typeof e&&null!==e},toArray:function(e){return Array.isArray(e)?e:u(e)?[]:[e]},repeat:function(e,t){var n,i="";for(n=0;n<t;n+=1)i+=e;return i},isNegativeZero:function(e){return 0===e&&Number.NEGATIVE_INFINITY===1/e},extend:function(e,t){var n,i,r,o;if(t)for(n=0,i=(o=Object.keys(t)).length;n<i;n+=1)e[r=o[n]]=t[r];return e}};function f(e,t){var n="",i=e.reason||"(unknown reason)";return e.mark?(e.mark.name&&(n+='in "'+e.mark.name+'" '),n+="("+(e.mark.line+1)+":"+(e.mark.column+1)+")",!t&&e.mark.snippet&&(n+="\n\n"+e.mark.snippet),i+" "+n):i}function d(e,t){Error.call(this),this.name="YAMLException",this.reason=e,this.mark=t,this.message=f(this,!1),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=(new Error).stack||""}d.prototype=Object.create(Error.prototype),d.prototype.constructor=d,d.prototype.toString=function(e){return this.name+": "+f(this,e)};var h=d;function g(e,t,n,i,r){var o="",a="",l=Math.floor(r/2)-1;return i-t>l&&(t=i-l+(o=" ... ").length),n-i>l&&(n=i+l-(a=" ...").length),{str:o+e.slice(t,n).replace(/\t/g,"→")+a,pos:i-t+o.length}}function m(e,t){return p.repeat(" ",t-e.length)+e}var y=function(e,t){if(t=Object.create(t||null),!e.buffer)return null;t.maxLength||(t.maxLength=79),"number"!=typeof t.indent&&(t.indent=1),"number"!=typeof t.linesBefore&&(t.linesBefore=3),"number"!=typeof t.linesAfter&&(t.linesAfter=2);for(var n,i=/\r?\n|\r|\0/g,r=[0],o=[],a=-1;n=i.exec(e.buffer);)o.push(n.index),r.push(n.index+n[0].length),e.position<=n.index&&a<0&&(a=r.length-2);a<0&&(a=r.length-1);var l,s,c="",u=Math.min(e.line+t.linesAfter,o.length).toString().length,f=t.maxLength-(t.indent+u+3);for(l=1;l<=t.linesBefore&&!(a-l<0);l++)s=g(e.buffer,r[a-l],o[a-l],e.position-(r[a]-r[a-l]),f),c=p.repeat(" ",t.indent)+m((e.line-l+1).toString(),u)+" | "+s.str+"\n"+c;for(s=g(e.buffer,r[a],o[a],e.position,f),c+=p.repeat(" ",t.indent)+m((e.line+1).toString(),u)+" | "+s.str+"\n",c+=p.repeat("-",t.indent+u+3+s.pos)+"^\n",l=1;l<=t.linesAfter&&!(a+l>=o.length);l++)s=g(e.buffer,r[a+l],o[a+l],e.position-(r[a]-r[a+l]),f),c+=p.repeat(" ",t.indent)+m((e.line+l+1).toString(),u)+" | "+s.str+"\n";return c.replace(/\n$/,"")},x=["kind","multi","resolve","construct","instanceOf","predicate","represent","representName","defaultStyle","styleAliases"],b=["scalar","sequence","mapping"];var A=function(e,t){var n,i;if(t=t||{},Object.keys(t).forEach(function(t){if(-1===x.indexOf(t))throw new h('Unknown option "'+t+'" is met in definition of "'+e+'" YAML type.')}),this.options=t,this.tag=e,this.kind=t.kind||null,this.resolve=t.resolve||function(){return!0},this.construct=t.construct||function(e){return e},this.instanceOf=t.instanceOf||null,this.predicate=t.predicate||null,this.represent=t.represent||null,this.representName=t.representName||null,this.defaultStyle=t.defaultStyle||null,this.multi=t.multi||!1,this.styleAliases=(n=t.styleAliases||null,i={},null!==n&&Object.keys(n).forEach(function(e){n[e].forEach(function(t){i[String(t)]=e})}),i),-1===b.indexOf(this.kind))throw new h('Unknown kind "'+this.kind+'" is specified for "'+e+'" YAML type.')};function v(e,t){var n=[];return e[t].forEach(function(e){var t=n.length;n.forEach(function(n,i){n.tag===e.tag&&n.kind===e.kind&&n.multi===e.multi&&(t=i)}),n[t]=e}),n}function k(e){return this.extend(e)}k.prototype.extend=function(e){var t=[],n=[];if(e instanceof A)n.push(e);else if(Array.isArray(e))n=n.concat(e);else{if(!e||!Array.isArray(e.implicit)&&!Array.isArray(e.explicit))throw new h("Schema.extend argument should be a Type, [ Type ], or a schema definition ({ implicit: [...], explicit: [...] })");e.implicit&&(t=t.concat(e.implicit)),e.explicit&&(n=n.concat(e.explicit))}t.forEach(function(e){if(!(e instanceof A))throw new h("Specified list of YAML types (or a single Type object) contains a non-Type object.");if(e.loadKind&&"scalar"!==e.loadKind)throw new h("There is a non-scalar type in the implicit list of a schema. Implicit resolving of such types is not supported.");if(e.multi)throw new h("There is a multi type in the implicit list of a schema. Multi tags can only be listed as explicit.")}),n.forEach(function(e){if(!(e instanceof A))throw new h("Specified list of YAML types (or a single Type object) contains a non-Type object.")});var i=Object.create(k.prototype);return i.implicit=(this.implicit||[]).concat(t),i.explicit=(this.explicit||[]).concat(n),i.compiledImplicit=v(i,"implicit"),i.compiledExplicit=v(i,"explicit"),i.compiledTypeMap=function(){var e,t,n={scalar:{},sequence:{},mapping:{},fallback:{},multi:{scalar:[],sequence:[],mapping:[],fallback:[]}};function i(e){e.multi?(n.multi[e.kind].push(e),n.multi.fallback.push(e)):n[e.kind][e.tag]=n.fallback[e.tag]=e}for(e=0,t=arguments.length;e<t;e+=1)arguments[e].forEach(i);return n}(i.compiledImplicit,i.compiledExplicit),i};var w=new k({explicit:[new A("tag:yaml.org,2002:str",{kind:"scalar",construct:function(e){return null!==e?e:""}}),new A("tag:yaml.org,2002:seq",{kind:"sequence",construct:function(e){return null!==e?e:[]}}),new A("tag:yaml.org,2002:map",{kind:"mapping",construct:function(e){return null!==e?e:{}}})]});var C=new A("tag:yaml.org,2002:null",{kind:"scalar",resolve:function(e){if(null===e)return!0;var t=e.length;return 1===t&&"~"===e||4===t&&("null"===e||"Null"===e||"NULL"===e)},construct:function(){return null},predicate:function(e){return null===e},represent:{canonical:function(){return"~"},lowercase:function(){return"null"},uppercase:function(){return"NULL"},camelcase:function(){return"Null"},empty:function(){return""}},defaultStyle:"lowercase"});var j=new A("tag:yaml.org,2002:bool",{kind:"scalar",resolve:function(e){if(null===e)return!1;var t=e.length;return 4===t&&("true"===e||"True"===e||"TRUE"===e)||5===t&&("false"===e||"False"===e||"FALSE"===e)},construct:function(e){return"true"===e||"True"===e||"TRUE"===e},predicate:function(e){return"[object Boolean]"===Object.prototype.toString.call(e)},represent:{lowercase:function(e){return e?"true":"false"},uppercase:function(e){return e?"TRUE":"FALSE"},camelcase:function(e){return e?"True":"False"}},defaultStyle:"lowercase"});function I(e){return 48<=e&&e<=57||65<=e&&e<=70||97<=e&&e<=102}function N(e){return 48<=e&&e<=55}function S(e){return 48<=e&&e<=57}var M=new A("tag:yaml.org,2002:int",{kind:"scalar",resolve:function(e){if(null===e)return!1;var t,n=e.length,i=0,r=!1;if(!n)return!1;if("-"!==(t=e[i])&&"+"!==t||(t=e[++i]),"0"===t){if(i+1===n)return!0;if("b"===(t=e[++i])){for(i++;i<n;i++)if("_"!==(t=e[i])){if("0"!==t&&"1"!==t)return!1;r=!0}return r&&"_"!==t}if("x"===t){for(i++;i<n;i++)if("_"!==(t=e[i])){if(!I(e.charCodeAt(i)))return!1;r=!0}return r&&"_"!==t}if("o"===t){for(i++;i<n;i++)if("_"!==(t=e[i])){if(!N(e.charCodeAt(i)))return!1;r=!0}return r&&"_"!==t}}if("_"===t)return!1;for(;i<n;i++)if("_"!==(t=e[i])){if(!S(e.charCodeAt(i)))return!1;r=!0}return!(!r||"_"===t)},construct:function(e){var t,n=e,i=1;if(-1!==n.indexOf("_")&&(n=n.replace(/_/g,"")),"-"!==(t=n[0])&&"+"!==t||("-"===t&&(i=-1),t=(n=n.slice(1))[0]),"0"===n)return 0;if("0"===t){if("b"===n[1])return i*parseInt(n.slice(2),2);if("x"===n[1])return i*parseInt(n.slice(2),16);if("o"===n[1])return i*parseInt(n.slice(2),8)}return i*parseInt(n,10)},predicate:function(e){return"[object Number]"===Object.prototype.toString.call(e)&&e%1==0&&!p.isNegativeZero(e)},represent:{binary:function(e){return e>=0?"0b"+e.toString(2):"-0b"+e.toString(2).slice(1)},octal:function(e){return e>=0?"0o"+e.toString(8):"-0o"+e.toString(8).slice(1)},decimal:function(e){return e.toString(10)},hexadecimal:function(e){return e>=0?"0x"+e.toString(16).toUpperCase():"-0x"+e.toString(16).toUpperCase().slice(1)}},defaultStyle:"decimal",styleAliases:{binary:[2,"bin"],octal:[8,"oct"],decimal:[10,"dec"],hexadecimal:[16,"hex"]}}),O=new RegExp("^(?:[-+]?(?:[0-9][0-9_]*)(?:\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?|\\.[0-9_]+(?:[eE][-+]?[0-9]+)?|[-+]?\\.(?:inf|Inf|INF)|\\.(?:nan|NaN|NAN))$");var T=/^[-+]?[0-9]+e/;var E=new A("tag:yaml.org,2002:float",{kind:"scalar",resolve:function(e){return null!==e&&!(!O.test(e)||"_"===e[e.length-1])},construct:function(e){var t,n;return n="-"===(t=e.replace(/_/g,"").toLowerCase())[0]?-1:1,"+-".indexOf(t[0])>=0&&(t=t.slice(1)),".inf"===t?1===n?Number.POSITIVE_INFINITY:Number.NEGATIVE_INFINITY:".nan"===t?NaN:n*parseFloat(t,10)},predicate:function(e){return"[object Number]"===Object.prototype.toString.call(e)&&(e%1!=0||p.isNegativeZero(e))},represent:function(e,t){var n;if(isNaN(e))switch(t){case"lowercase":return".nan";case"uppercase":return".NAN";case"camelcase":return".NaN"}else if(Number.POSITIVE_INFINITY===e)switch(t){case"lowercase":return".inf";case"uppercase":return".INF";case"camelcase":return".Inf"}else if(Number.NEGATIVE_INFINITY===e)switch(t){case"lowercase":return"-.inf";case"uppercase":return"-.INF";case"camelcase":return"-.Inf"}else if(p.isNegativeZero(e))return"-0.0";return n=e.toString(10),T.test(n)?n.replace("e",".e"):n},defaultStyle:"lowercase"}),L=w.extend({implicit:[C,j,M,E]}),F=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9])-([0-9][0-9])$"),_=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9]?)-([0-9][0-9]?)(?:[Tt]|[ \\t]+)([0-9][0-9]?):([0-9][0-9]):([0-9][0-9])(?:\\.([0-9]*))?(?:[ \\t]*(Z|([-+])([0-9][0-9]?)(?::([0-9][0-9]))?))?$");var $=new A("tag:yaml.org,2002:timestamp",{kind:"scalar",resolve:function(e){return null!==e&&(null!==F.exec(e)||null!==_.exec(e))},construct:function(e){var t,n,i,r,o,a,l,s,c=0,u=null;if(null===(t=F.exec(e))&&(t=_.exec(e)),null===t)throw new Error("Date resolve error");if(n=+t[1],i=+t[2]-1,r=+t[3],!t[4])return new Date(Date.UTC(n,i,r));if(o=+t[4],a=+t[5],l=+t[6],t[7]){for(c=t[7].slice(0,3);c.length<3;)c+="0";c=+c}return t[9]&&(u=6e4*(60*+t[10]+ +(t[11]||0)),"-"===t[9]&&(u=-u)),s=new Date(Date.UTC(n,i,r,o,a,l,c)),u&&s.setTime(s.getTime()-u),s},instanceOf:Date,represent:function(e){return e.toISOString()}});var Y=new A("tag:yaml.org,2002:merge",{kind:"scalar",resolve:function(e){return"<<"===e||null===e}}),D="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\n\r";var U=new A("tag:yaml.org,2002:binary",{kind:"scalar",resolve:function(e){if(null===e)return!1;var t,n,i=0,r=e.length,o=D;for(n=0;n<r;n++)if(!((t=o.indexOf(e.charAt(n)))>64)){if(t<0)return!1;i+=6}return i%8==0},construct:function(e){var t,n,i=e.replace(/[\r\n=]/g,""),r=i.length,o=D,a=0,l=[];for(t=0;t<r;t++)t%4==0&&t&&(l.push(a>>16&255),l.push(a>>8&255),l.push(255&a)),a=a<<6|o.indexOf(i.charAt(t));return 0===(n=r%4*6)?(l.push(a>>16&255),l.push(a>>8&255),l.push(255&a)):18===n?(l.push(a>>10&255),l.push(a>>2&255)):12===n&&l.push(a>>4&255),new Uint8Array(l)},predicate:function(e){return"[object Uint8Array]"===Object.prototype.toString.call(e)},represent:function(e){var t,n,i="",r=0,o=e.length,a=D;for(t=0;t<o;t++)t%3==0&&t&&(i+=a[r>>18&63],i+=a[r>>12&63],i+=a[r>>6&63],i+=a[63&r]),r=(r<<8)+e[t];return 0===(n=o%3)?(i+=a[r>>18&63],i+=a[r>>12&63],i+=a[r>>6&63],i+=a[63&r]):2===n?(i+=a[r>>10&63],i+=a[r>>4&63],i+=a[r<<2&63],i+=a[64]):1===n&&(i+=a[r>>2&63],i+=a[r<<4&63],i+=a[64],i+=a[64]),i}}),q=Object.prototype.hasOwnProperty,R=Object.prototype.toString;var B=new A("tag:yaml.org,2002:omap",{kind:"sequence",resolve:function(e){if(null===e)return!0;var t,n,i,r,o,a=[],l=e;for(t=0,n=l.length;t<n;t+=1){if(i=l[t],o=!1,"[object Object]"!==R.call(i))return!1;for(r in i)if(q.call(i,r)){if(o)return!1;o=!0}if(!o)return!1;if(-1!==a.indexOf(r))return!1;a.push(r)}return!0},construct:function(e){return null!==e?e:[]}}),z=Object.prototype.toString;var W=new A("tag:yaml.org,2002:pairs",{kind:"sequence",resolve:function(e){if(null===e)return!0;var t,n,i,r,o,a=e;for(o=new Array(a.length),t=0,n=a.length;t<n;t+=1){if(i=a[t],"[object Object]"!==z.call(i))return!1;if(1!==(r=Object.keys(i)).length)return!1;o[t]=[r[0],i[r[0]]]}return!0},construct:function(e){if(null===e)return[];var t,n,i,r,o,a=e;for(o=new Array(a.length),t=0,n=a.length;t<n;t+=1)i=a[t],r=Object.keys(i),o[t]=[r[0],i[r[0]]];return o}}),P=Object.prototype.hasOwnProperty;var G=new A("tag:yaml.org,2002:set",{kind:"mapping",resolve:function(e){if(null===e)return!0;var t,n=e;for(t in n)if(P.call(n,t)&&null!==n[t])return!1;return!0},construct:function(e){return null!==e?e:{}}}),Z=L.extend({implicit:[$,Y],explicit:[U,B,W,G]}),V=Object.prototype.hasOwnProperty,X=/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F-\x84\x86-\x9F\uFFFE\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/,H=/[\x85\u2028\u2029]/,K=/[,\[\]\{\}]/,J=/^(?:!|!!|![a-z\-]+!)$/i,Q=/^(?:!|[^,\[\]\{\}])(?:%[0-9a-f]{2}|[0-9a-z\-#;\/\?:@&=\+\$,_\.!~\*'\(\)\[\]])*$/i;function ee(e){return Object.prototype.toString.call(e)}function te(e){return 10===e||13===e}function ne(e){return 9===e||32===e}function ie(e){return 9===e||32===e||10===e||13===e}function re(e){return 44===e||91===e||93===e||123===e||125===e}function oe(e){var t;return 48<=e&&e<=57?e-48:97<=(t=32|e)&&t<=102?t-97+10:-1}function ae(e){return 120===e?2:117===e?4:85===e?8:0}function le(e){return 48<=e&&e<=57?e-48:-1}function se(e){return 48===e?"\0":97===e?"":98===e?"\b":116===e||9===e?"\t":110===e?"\n":118===e?"\v":102===e?"\f":114===e?"\r":101===e?"":32===e?" ":34===e?'"':47===e?"/":92===e?"\\":78===e?"
":95===e?" ":76===e?"\u2028":80===e?"\u2029":""}function ce(e){return e<=65535?String.fromCharCode(e):String.fromCharCode(55296+(e-65536>>10),56320+(e-65536&1023))}function ue(e,t,n){"__proto__"===t?Object.defineProperty(e,t,{configurable:!0,enumerable:!0,writable:!0,value:n}):e[t]=n}for(var pe=new Array(256),fe=new Array(256),de=0;de<256;de++)pe[de]=se(de)?1:0,fe[de]=se(de);function he(e,t){this.input=e,this.filename=t.filename||null,this.schema=t.schema||Z,this.onWarning=t.onWarning||null,this.legacy=t.legacy||!1,this.json=t.json||!1,this.listener=t.listener||null,this.implicitTypes=this.schema.compiledImplicit,this.typeMap=this.schema.compiledTypeMap,this.length=e.length,this.position=0,this.line=0,this.lineStart=0,this.lineIndent=0,this.firstTabInLine=-1,this.documents=[]}function ge(e,t){var n={name:e.filename,buffer:e.input.slice(0,-1),position:e.position,line:e.line,column:e.position-e.lineStart};return n.snippet=y(n),new h(t,n)}function me(e,t){throw ge(e,t)}function ye(e,t){e.onWarning&&e.onWarning.call(null,ge(e,t))}var xe={YAML:function(e,t,n){var i,r,o;null!==e.version&&me(e,"duplication of %YAML directive"),1!==n.length&&me(e,"YAML directive accepts exactly one argument"),null===(i=/^([0-9]+)\.([0-9]+)$/.exec(n[0]))&&me(e,"ill-formed argument of the YAML directive"),r=parseInt(i[1],10),o=parseInt(i[2],10),1!==r&&me(e,"unacceptable YAML version of the document"),e.version=n[0],e.checkLineBreaks=o<2,1!==o&&2!==o&&ye(e,"unsupported YAML version of the document")},TAG:function(e,t,n){var i,r;2!==n.length&&me(e,"TAG directive accepts exactly two arguments"),i=n[0],r=n[1],J.test(i)||me(e,"ill-formed tag handle (first argument) of the TAG directive"),V.call(e.tagMap,i)&&me(e,'there is a previously declared suffix for "'+i+'" tag handle'),Q.test(r)||me(e,"ill-formed tag prefix (second argument) of the TAG directive");try{r=decodeURIComponent(r)}catch(o){me(e,"tag prefix is malformed: "+r)}e.tagMap[i]=r}};function be(e,t,n,i){var r,o,a,l;if(t<n){if(l=e.input.slice(t,n),i)for(r=0,o=l.length;r<o;r+=1)9===(a=l.charCodeAt(r))||32<=a&&a<=1114111||me(e,"expected valid JSON character");else X.test(l)&&me(e,"the stream contains non-printable characters");e.result+=l}}function Ae(e,t,n,i){var r,o,a,l;for(p.isObject(n)||me(e,"cannot merge mappings; the provided source object is unacceptable"),a=0,l=(r=Object.keys(n)).length;a<l;a+=1)o=r[a],V.call(t,o)||(ue(t,o,n[o]),i[o]=!0)}function ve(e,t,n,i,r,o,a,l,s){var c,u;if(Array.isArray(r))for(c=0,u=(r=Array.prototype.slice.call(r)).length;c<u;c+=1)Array.isArray(r[c])&&me(e,"nested arrays are not supported inside keys"),"object"==typeof r&&"[object Object]"===ee(r[c])&&(r[c]="[object Object]");if("object"==typeof r&&"[object Object]"===ee(r)&&(r="[object Object]"),r=String(r),null===t&&(t={}),"tag:yaml.org,2002:merge"===i)if(Array.isArray(o))for(c=0,u=o.length;c<u;c+=1)Ae(e,t,o[c],n);else Ae(e,t,o,n);else e.json||V.call(n,r)||!V.call(t,r)||(e.line=a||e.line,e.lineStart=l||e.lineStart,e.position=s||e.position,me(e,"duplicated mapping key")),ue(t,r,o),delete n[r];return t}function ke(e){var t;10===(t=e.input.charCodeAt(e.position))?e.position++:13===t?(e.position++,10===e.input.charCodeAt(e.position)&&e.position++):me(e,"a line break is expected"),e.line+=1,e.lineStart=e.position,e.firstTabInLine=-1}function we(e,t,n){for(var i=0,r=e.input.charCodeAt(e.position);0!==r;){for(;ne(r);)9===r&&-1===e.firstTabInLine&&(e.firstTabInLine=e.position),r=e.input.charCodeAt(++e.position);if(t&&35===r)do{r=e.input.charCodeAt(++e.position)}while(10!==r&&13!==r&&0!==r);if(!te(r))break;for(ke(e),r=e.input.charCodeAt(e.position),i++,e.lineIndent=0;32===r;)e.lineIndent++,r=e.input.charCodeAt(++e.position)}return-1!==n&&0!==i&&e.lineIndent<n&&ye(e,"deficient indentation"),i}function Ce(e){var t,n=e.position;return!(45!==(t=e.input.charCodeAt(n))&&46!==t||t!==e.input.charCodeAt(n+1)||t!==e.input.charCodeAt(n+2)||(n+=3,0!==(t=e.input.charCodeAt(n))&&!ie(t)))}function je(e,t){1===t?e.result+=" ":t>1&&(e.result+=p.repeat("\n",t-1))}function Ie(e,t){var n,i,r=e.tag,o=e.anchor,a=[],l=!1;if(-1!==e.firstTabInLine)return!1;for(null!==e.anchor&&(e.anchorMap[e.anchor]=a),i=e.input.charCodeAt(e.position);0!==i&&(-1!==e.firstTabInLine&&(e.position=e.firstTabInLine,me(e,"tab characters must not be used in indentation")),45===i)&&ie(e.input.charCodeAt(e.position+1));)if(l=!0,e.position++,we(e,!0,-1)&&e.lineIndent<=t)a.push(null),i=e.input.charCodeAt(e.position);else if(n=e.line,Me(e,t,3,!1,!0),a.push(e.result),we(e,!0,-1),i=e.input.charCodeAt(e.position),(e.line===n||e.lineIndent>t)&&0!==i)me(e,"bad indentation of a sequence entry");else if(e.lineIndent<t)break;return!!l&&(e.tag=r,e.anchor=o,e.kind="sequence",e.result=a,!0)}function Ne(e){var t,n,i,r,o=!1,a=!1;if(33!==(r=e.input.charCodeAt(e.position)))return!1;if(null!==e.tag&&me(e,"duplication of a tag property"),60===(r=e.input.charCodeAt(++e.position))?(o=!0,r=e.input.charCodeAt(++e.position)):33===r?(a=!0,n="!!",r=e.input.charCodeAt(++e.position)):n="!",t=e.position,o){do{r=e.input.charCodeAt(++e.position)}while(0!==r&&62!==r);e.position<e.length?(i=e.input.slice(t,e.position),r=e.input.charCodeAt(++e.position)):me(e,"unexpected end of the stream within a verbatim tag")}else{for(;0!==r&&!ie(r);)33===r&&(a?me(e,"tag suffix cannot contain exclamation marks"):(n=e.input.slice(t-1,e.position+1),J.test(n)||me(e,"named tag handle cannot contain such characters"),a=!0,t=e.position+1)),r=e.input.charCodeAt(++e.position);i=e.input.slice(t,e.position),K.test(i)&&me(e,"tag suffix cannot contain flow indicator characters")}i&&!Q.test(i)&&me(e,"tag name cannot contain such characters: "+i);try{i=decodeURIComponent(i)}catch(l){me(e,"tag name is malformed: "+i)}return o?e.tag=i:V.call(e.tagMap,n)?e.tag=e.tagMap[n]+i:"!"===n?e.tag="!"+i:"!!"===n?e.tag="tag:yaml.org,2002:"+i:me(e,'undeclared tag handle "'+n+'"'),!0}function Se(e){var t,n;if(38!==(n=e.input.charCodeAt(e.position)))return!1;for(null!==e.anchor&&me(e,"duplication of an anchor property"),n=e.input.charCodeAt(++e.position),t=e.position;0!==n&&!ie(n)&&!re(n);)n=e.input.charCodeAt(++e.position);return e.position===t&&me(e,"name of an anchor node must contain at least one character"),e.anchor=e.input.slice(t,e.position),!0}function Me(e,t,n,i,r){var o,a,l,s,c,u,f,d,h,g=1,m=!1,y=!1;if(null!==e.listener&&e.listener("open",e),e.tag=null,e.anchor=null,e.kind=null,e.result=null,o=a=l=4===n||3===n,i&&we(e,!0,-1)&&(m=!0,e.lineIndent>t?g=1:e.lineIndent===t?g=0:e.lineIndent<t&&(g=-1)),1===g)for(;Ne(e)||Se(e);)we(e,!0,-1)?(m=!0,l=o,e.lineIndent>t?g=1:e.lineIndent===t?g=0:e.lineIndent<t&&(g=-1)):l=!1;if(l&&(l=m||r),1!==g&&4!==n||(d=1===n||2===n?t:t+1,h=e.position-e.lineStart,1===g?l&&(Ie(e,h)||function(e,t,n){var i,r,o,a,l,s,c,u=e.tag,p=e.anchor,f={},d=Object.create(null),h=null,g=null,m=null,y=!1,x=!1;if(-1!==e.firstTabInLine)return!1;for(null!==e.anchor&&(e.anchorMap[e.anchor]=f),c=e.input.charCodeAt(e.position);0!==c;){if(y||-1===e.firstTabInLine||(e.position=e.firstTabInLine,me(e,"tab characters must not be used in indentation")),i=e.input.charCodeAt(e.position+1),o=e.line,63!==c&&58!==c||!ie(i)){if(a=e.line,l=e.lineStart,s=e.position,!Me(e,n,2,!1,!0))break;if(e.line===o){for(c=e.input.charCodeAt(e.position);ne(c);)c=e.input.charCodeAt(++e.position);if(58===c)ie(c=e.input.charCodeAt(++e.position))||me(e,"a whitespace character is expected after the key-value separator within a block mapping"),y&&(ve(e,f,d,h,g,null,a,l,s),h=g=m=null),x=!0,y=!1,r=!1,h=e.tag,g=e.result;else{if(!x)return e.tag=u,e.anchor=p,!0;me(e,"can not read an implicit mapping pair; a colon is missed")}}else{if(!x)return e.tag=u,e.anchor=p,!0;me(e,"can not read a block mapping entry; a multiline key may not be an implicit key")}}else 63===c?(y&&(ve(e,f,d,h,g,null,a,l,s),h=g=m=null),x=!0,y=!0,r=!0):y?(y=!1,r=!0):me(e,"incomplete explicit mapping pair; a key node is missed; or followed by a non-tabulated empty line"),e.position+=1,c=i;if((e.line===o||e.lineIndent>t)&&(y&&(a=e.line,l=e.lineStart,s=e.position),Me(e,t,4,!0,r)&&(y?g=e.result:m=e.result),y||(ve(e,f,d,h,g,m,a,l,s),h=g=m=null),we(e,!0,-1),c=e.input.charCodeAt(e.position)),(e.line===o||e.lineIndent>t)&&0!==c)me(e,"bad indentation of a mapping entry");else if(e.lineIndent<t)break}return y&&ve(e,f,d,h,g,null,a,l,s),x&&(e.tag=u,e.anchor=p,e.kind="mapping",e.result=f),x}(e,h,d))||function(e,t){var n,i,r,o,a,l,s,c,u,p,f,d,h=!0,g=e.tag,m=e.anchor,y=Object.create(null);if(91===(d=e.input.charCodeAt(e.position)))a=93,c=!1,o=[];else{if(123!==d)return!1;a=125,c=!0,o={}}for(null!==e.anchor&&(e.anchorMap[e.anchor]=o),d=e.input.charCodeAt(++e.position);0!==d;){if(we(e,!0,t),(d=e.input.charCodeAt(e.position))===a)return e.position++,e.tag=g,e.anchor=m,e.kind=c?"mapping":"sequence",e.result=o,!0;h?44===d&&me(e,"expected the node content, but found ','"):me(e,"missed comma between flow collection entries"),f=null,l=s=!1,63===d&&ie(e.input.charCodeAt(e.position+1))&&(l=s=!0,e.position++,we(e,!0,t)),n=e.line,i=e.lineStart,r=e.position,Me(e,t,1,!1,!0),p=e.tag,u=e.result,we(e,!0,t),d=e.input.charCodeAt(e.position),!s&&e.line!==n||58!==d||(l=!0,d=e.input.charCodeAt(++e.position),we(e,!0,t),Me(e,t,1,!1,!0),f=e.result),c?ve(e,o,y,p,u,f,n,i,r):l?o.push(ve(e,null,y,p,u,f,n,i,r)):o.push(u),we(e,!0,t),44===(d=e.input.charCodeAt(e.position))?(h=!0,d=e.input.charCodeAt(++e.position)):h=!1}me(e,"unexpected end of the stream within a flow collection")}(e,d)?y=!0:(a&&function(e,t){var n,i,r,o,a=1,l=!1,s=!1,c=t,u=0,f=!1;if(124===(o=e.input.charCodeAt(e.position)))i=!1;else{if(62!==o)return!1;i=!0}for(e.kind="scalar",e.result="";0!==o;)if(43===(o=e.input.charCodeAt(++e.position))||45===o)1===a?a=43===o?3:2:me(e,"repeat of a chomping mode identifier");else{if(!((r=le(o))>=0))break;0===r?me(e,"bad explicit indentation width of a block scalar; it cannot be less than one"):s?me(e,"repeat of an indentation width identifier"):(c=t+r-1,s=!0)}if(ne(o)){do{o=e.input.charCodeAt(++e.position)}while(ne(o));if(35===o)do{o=e.input.charCodeAt(++e.position)}while(!te(o)&&0!==o)}for(;0!==o;){for(ke(e),e.lineIndent=0,o=e.input.charCodeAt(e.position);(!s||e.lineIndent<c)&&32===o;)e.lineIndent++,o=e.input.charCodeAt(++e.position);if(!s&&e.lineIndent>c&&(c=e.lineIndent),te(o))u++;else{if(e.lineIndent<c){3===a?e.result+=p.repeat("\n",l?1+u:u):1===a&&l&&(e.result+="\n");break}for(i?ne(o)?(f=!0,e.result+=p.repeat("\n",l?1+u:u)):f?(f=!1,e.result+=p.repeat("\n",u+1)):0===u?l&&(e.result+=" "):e.result+=p.repeat("\n",u):e.result+=p.repeat("\n",l?1+u:u),l=!0,s=!0,u=0,n=e.position;!te(o)&&0!==o;)o=e.input.charCodeAt(++e.position);be(e,n,e.position,!1)}}return!0}(e,d)||function(e,t){var n,i,r;if(39!==(n=e.input.charCodeAt(e.position)))return!1;for(e.kind="scalar",e.result="",e.position++,i=r=e.position;0!==(n=e.input.charCodeAt(e.position));)if(39===n){if(be(e,i,e.position,!0),39!==(n=e.input.charCodeAt(++e.position)))return!0;i=e.position,e.position++,r=e.position}else te(n)?(be(e,i,r,!0),je(e,we(e,!1,t)),i=r=e.position):e.position===e.lineStart&&Ce(e)?me(e,"unexpected end of the document within a single quoted scalar"):(e.position++,r=e.position);me(e,"unexpected end of the stream within a single quoted scalar")}(e,d)||function(e,t){var n,i,r,o,a,l;if(34!==(l=e.input.charCodeAt(e.position)))return!1;for(e.kind="scalar",e.result="",e.position++,n=i=e.position;0!==(l=e.input.charCodeAt(e.position));){if(34===l)return be(e,n,e.position,!0),e.position++,!0;if(92===l){if(be(e,n,e.position,!0),te(l=e.input.charCodeAt(++e.position)))we(e,!1,t);else if(l<256&&pe[l])e.result+=fe[l],e.position++;else if((a=ae(l))>0){for(r=a,o=0;r>0;r--)(a=oe(l=e.input.charCodeAt(++e.position)))>=0?o=(o<<4)+a:me(e,"expected hexadecimal character");e.result+=ce(o),e.position++}else me(e,"unknown escape sequence");n=i=e.position}else te(l)?(be(e,n,i,!0),je(e,we(e,!1,t)),n=i=e.position):e.position===e.lineStart&&Ce(e)?me(e,"unexpected end of the document within a double quoted scalar"):(e.position++,i=e.position)}me(e,"unexpected end of the stream within a double quoted scalar")}(e,d)?y=!0:!function(e){var t,n,i;if(42!==(i=e.input.charCodeAt(e.position)))return!1;for(i=e.input.charCodeAt(++e.position),t=e.position;0!==i&&!ie(i)&&!re(i);)i=e.input.charCodeAt(++e.position);return e.position===t&&me(e,"name of an alias node must contain at least one character"),n=e.input.slice(t,e.position),V.call(e.anchorMap,n)||me(e,'unidentified alias "'+n+'"'),e.result=e.anchorMap[n],we(e,!0,-1),!0}(e)?function(e,t,n){var i,r,o,a,l,s,c,u,p=e.kind,f=e.result;if(ie(u=e.input.charCodeAt(e.position))||re(u)||35===u||38===u||42===u||33===u||124===u||62===u||39===u||34===u||37===u||64===u||96===u)return!1;if((63===u||45===u)&&(ie(i=e.input.charCodeAt(e.position+1))||n&&re(i)))return!1;for(e.kind="scalar",e.result="",r=o=e.position,a=!1;0!==u;){if(58===u){if(ie(i=e.input.charCodeAt(e.position+1))||n&&re(i))break}else if(35===u){if(ie(e.input.charCodeAt(e.position-1)))break}else{if(e.position===e.lineStart&&Ce(e)||n&&re(u))break;if(te(u)){if(l=e.line,s=e.lineStart,c=e.lineIndent,we(e,!1,-1),e.lineIndent>=t){a=!0,u=e.input.charCodeAt(e.position);continue}e.position=o,e.line=l,e.lineStart=s,e.lineIndent=c;break}}a&&(be(e,r,o,!1),je(e,e.line-l),r=o=e.position,a=!1),ne(u)||(o=e.position+1),u=e.input.charCodeAt(++e.position)}return be(e,r,o,!1),!!e.result||(e.kind=p,e.result=f,!1)}(e,d,1===n)&&(y=!0,null===e.tag&&(e.tag="?")):(y=!0,null===e.tag&&null===e.anchor||me(e,"alias node should not have any properties")),null!==e.anchor&&(e.anchorMap[e.anchor]=e.result)):0===g&&(y=l&&Ie(e,h))),null===e.tag)null!==e.anchor&&(e.anchorMap[e.anchor]=e.result);else if("?"===e.tag){for(null!==e.result&&"scalar"!==e.kind&&me(e,'unacceptable node kind for !<?> tag; it should be "scalar", not "'+e.kind+'"'),s=0,c=e.implicitTypes.length;s<c;s+=1)if((f=e.implicitTypes[s]).resolve(e.result)){e.result=f.construct(e.result),e.tag=f.tag,null!==e.anchor&&(e.anchorMap[e.anchor]=e.result);break}}else if("!"!==e.tag){if(V.call(e.typeMap[e.kind||"fallback"],e.tag))f=e.typeMap[e.kind||"fallback"][e.tag];else for(f=null,s=0,c=(u=e.typeMap.multi[e.kind||"fallback"]).length;s<c;s+=1)if(e.tag.slice(0,u[s].tag.length)===u[s].tag){f=u[s];break}f||me(e,"unknown tag !<"+e.tag+">"),null!==e.result&&f.kind!==e.kind&&me(e,"unacceptable node kind for !<"+e.tag+'> tag; it should be "'+f.kind+'", not "'+e.kind+'"'),f.resolve(e.result,e.tag)?(e.result=f.construct(e.result,e.tag),null!==e.anchor&&(e.anchorMap[e.anchor]=e.result)):me(e,"cannot resolve a node with !<"+e.tag+"> explicit tag")}return null!==e.listener&&e.listener("close",e),null!==e.tag||null!==e.anchor||y}function Oe(e){var t,n,i,r,o=e.position,a=!1;for(e.version=null,e.checkLineBreaks=e.legacy,e.tagMap=Object.create(null),e.anchorMap=Object.create(null);0!==(r=e.input.charCodeAt(e.position))&&(we(e,!0,-1),r=e.input.charCodeAt(e.position),!(e.lineIndent>0||37!==r));){for(a=!0,r=e.input.charCodeAt(++e.position),t=e.position;0!==r&&!ie(r);)r=e.input.charCodeAt(++e.position);for(i=[],(n=e.input.slice(t,e.position)).length<1&&me(e,"directive name must not be less than one character in length");0!==r;){for(;ne(r);)r=e.input.charCodeAt(++e.position);if(35===r){do{r=e.input.charCodeAt(++e.position)}while(0!==r&&!te(r));break}if(te(r))break;for(t=e.position;0!==r&&!ie(r);)r=e.input.charCodeAt(++e.position);i.push(e.input.slice(t,e.position))}0!==r&&ke(e),V.call(xe,n)?xe[n](e,n,i):ye(e,'unknown document directive "'+n+'"')}we(e,!0,-1),0===e.lineIndent&&45===e.input.charCodeAt(e.position)&&45===e.input.charCodeAt(e.position+1)&&45===e.input.charCodeAt(e.position+2)?(e.position+=3,we(e,!0,-1)):a&&me(e,"directives end mark is expected"),Me(e,e.lineIndent-1,4,!1,!0),we(e,!0,-1),e.checkLineBreaks&&H.test(e.input.slice(o,e.position))&&ye(e,"non-ASCII line breaks are interpreted as content"),e.documents.push(e.result),e.position===e.lineStart&&Ce(e)?46===e.input.charCodeAt(e.position)&&(e.position+=3,we(e,!0,-1)):e.position<e.length-1&&me(e,"end of the stream or a document separator is expected")}var Te={load:function(e,t){var n=function(e,t){t=t||{},0!==(e=String(e)).length&&(10!==e.charCodeAt(e.length-1)&&13!==e.charCodeAt(e.length-1)&&(e+="\n"),65279===e.charCodeAt(0)&&(e=e.slice(1)));var n=new he(e,t),i=e.indexOf("\0");for(-1!==i&&(n.position=i,me(n,"null byte is not allowed in input")),n.input+="\0";32===n.input.charCodeAt(n.position);)n.lineIndent+=1,n.position+=1;for(;n.position<n.length-1;)Oe(n);return n.documents}(e,t);if(0!==n.length){if(1===n.length)return n[0];throw new h("expected a single document in the stream, but found more")}}}.load;function Ee(e){var t;const n=e.pages||[],i=e.relations||[];if(0===n.length)return{nodes:[],edges:[]};const r=new Map,o=new Map;for(const d of n)r.set(d.id,[]),o.set(d.id,0);for(const d of i)null==(t=r.get(d.from))||t.push(d.to),o.set(d.to,(o.get(d.to)||0)+1);const a=new Map,l=[];for(const d of n)0===(o.get(d.id)||0)&&(l.push(d.id),a.set(d.id,0));let s=0;for(;l.length>0;){const e=l.shift(),t=a.get(e)||0;for(const n of r.get(e)||[]){const e=t+1;e>(a.get(n)||0)&&(a.set(n,e),e>s&&(s=e));const i=(o.get(n)||1)-1;o.set(n,i),i<=0&&l.push(n)}}for(const d of n)a.has(d.id)||a.set(d.id,s+1);const c=new Map;for(const d of n){const e=a.get(d.id)||0;c.has(e)||c.set(e,[]),c.get(e).push(d.id)}const u=[],p=new Map(n.map(e=>[e.id,e]));for(const[d,h]of c){const e=-(160*h.length+60*(h.length-1))/2;h.forEach((t,n)=>{const i=p.get(t);u.push({id:t,title:(null==i?void 0:i.title)||t,x:e+220*n+80,y:130*d,layer:d})})}const f=i.map(e=>({from:e.from,to:e.to,label:e.label}));return{nodes:u,edges:f}}const Le=["#3b82f6","#8b5cf6","#ec4899","#f59e0b","#10b981","#06b6d4","#f97316","#6366f1"];function Fe({folderPath:e}){const[u,p]=t.useState(null),[f,d]=t.useState(!0),[h,g]=t.useState(null),[m,y]=t.useState(1),[x,b]=t.useState({x:0,y:0}),A=t.useRef(!1),v=t.useRef({x:0,y:0}),[,k]=t.useState(0),w=t.useRef(null),C=t.useRef(null),j=`${e}/.notebook/graph.yaml`,I=t.useCallback(async()=>{d(!0),g(null);try{const e=await n(j);if(!e.content)return g("graph.yaml is empty"),void p(null);const t=Te(e.content);p(t),y(1),b({x:0,y:0})}catch{g("Cannot read .notebook/graph.yaml"),p(null)}finally{d(!1)}},[j]);t.useEffect(()=>{I()},[I]);const N=t.useCallback(e=>{e.preventDefault();const t=e.deltaY>0?-.1:.1;y(e=>Math.max(.2,Math.min(3,e+t)))},[]),S=t.useCallback(e=>{0===e.button&&(A.current=!0,k(e=>e+1),b(t=>(v.current={x:e.clientX-t.x,y:e.clientY-t.y},t)))},[]),M=t.useCallback(e=>{A.current&&b({x:e.clientX-v.current.x,y:e.clientY-v.current.y})},[]),O=t.useCallback(()=>{A.current=!1,k(e=>e+1)},[]),T=t.useCallback(()=>{if(!u||!C.current)return;const{nodes:e}=Ee(u);if(0===e.length)return;const t=Math.min(...e.map(e=>e.x))-100,n=Math.max(...e.map(e=>e.x))+100,i=Math.min(...e.map(e=>e.y))-40,r=Math.max(...e.map(e=>e.y))+60,o=n-t,a=r-i,l=C.current.clientWidth,s=C.current.clientHeight,c=.9*Math.min(l/o,s/a,1.5);y(c),b({x:l/2-(t+n)/2*c,y:s/2-(i+r)/2*c})},[u]),{nodes:E,edges:L}=t.useMemo(()=>u?Ee(u):{nodes:[],edges:[]},[u]),F=t.useMemo(()=>new Map(E.map(e=>[e.id,e])),[E]);return t.useEffect(()=>{if(u&&!f){const e=setTimeout(T,50);return()=>clearTimeout(e)}},[u,f,T]),f?i.jsx("div",{className:"flex items-center justify-center h-full text-muted-foreground",children:i.jsx(r,{className:"h-5 w-5 animate-spin"})}):h||!u?i.jsxs("div",{className:"flex flex-col items-center justify-center h-full gap-2 text-muted-foreground text-sm px-4 text-center",children:[i.jsx("p",{children:h||"No graph data"}),i.jsxs(o,{variant:"ghost",size:"sm",onClick:()=>{I()},children:[i.jsx(a,{className:"h-3 w-3 mr-1"})," Retry"]})]}):i.jsxs("div",{className:"flex flex-col h-full",children:[i.jsxs("div",{className:"flex items-center gap-1 px-2 py-1 border-b shrink-0",children:[i.jsxs("span",{className:"text-xs text-muted-foreground mr-auto",children:[E.length," pages, ",L.length," relations"]}),i.jsx(o,{variant:"ghost",size:"icon",className:"h-6 w-6",onClick:()=>y(e=>Math.min(3,e+.2)),children:i.jsx(l,{className:"h-3 w-3"})}),i.jsx(o,{variant:"ghost",size:"icon",className:"h-6 w-6",onClick:()=>y(e=>Math.max(.2,e-.2)),children:i.jsx(s,{className:"h-3 w-3"})}),i.jsx(o,{variant:"ghost",size:"icon",className:"h-6 w-6",onClick:T,children:i.jsx(c,{className:"h-3 w-3"})}),i.jsx(o,{variant:"ghost",size:"icon",className:"h-6 w-6",onClick:()=>{I()},children:i.jsx(a,{className:"h-3 w-3"})})]}),i.jsx("div",{ref:C,className:"flex-1 overflow-hidden cursor-grab active:cursor-grabbing bg-muted/30",onWheel:N,onMouseDown:S,onMouseMove:M,onMouseUp:O,onMouseLeave:O,children:i.jsxs("svg",{ref:w,width:"100%",height:"100%",style:{userSelect:"none"},children:[i.jsx("defs",{children:i.jsx("marker",{id:"arrowhead",viewBox:"0 0 10 7",refX:"10",refY:"3.5",markerWidth:"8",markerHeight:"6",orient:"auto",children:i.jsx("polygon",{points:"0 0, 10 3.5, 0 7",className:"fill-muted-foreground/60"})})}),i.jsxs("g",{transform:`translate(${x.x}, ${x.y}) scale(${m})`,children:[L.map((e,t)=>{const n=F.get(e.from),r=F.get(e.to);if(!n||!r)return null;const o=n.y+20,a=r.y-20,l=(o+a)/2;return i.jsxs("g",{children:[i.jsx("path",{d:`M ${n.x} ${o} C ${n.x} ${l}, ${r.x} ${l}, ${r.x} ${a}`,fill:"none",className:"stroke-muted-foreground/40",strokeWidth:1.5,markerEnd:"url(#arrowhead)"}),e.label&&i.jsx("text",{x:(n.x+r.x)/2,y:l-4,textAnchor:"middle",className:"fill-muted-foreground/60",fontSize:9,children:e.label})]},`edge-${t}`)}),E.map(e=>{const t=Le[e.layer%Le.length];return i.jsxs("g",{transform:`translate(${e.x-70}, ${e.y-18})`,children:[i.jsx("rect",{width:140,height:36,rx:8,fill:t,fillOpacity:.15,stroke:t,strokeWidth:1.5}),i.jsx("text",{x:70,y:19,textAnchor:"middle",dominantBaseline:"middle",className:"fill-foreground",fontSize:11,fontWeight:500,children:e.title.length>14?e.title.slice(0,13)+"…":e.title})]},e.id)})]})]})})]})}export{Fe as GraphPreview};
|