@lancc/cmark 1.2.0 → 1.2.1
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/CHANGELOG.md +8 -0
- package/LICENSE +21 -21
- package/README.md +47 -107
- package/assets/abnfDiagram-WEYOIA3C-CKV_7Upb.js +1 -0
- package/assets/architectureDiagram-ZHVYKT53-BvLudDvk.js +1 -0
- package/assets/blockDiagram-RJAE7QA3--gzkMGi2.js +1 -0
- package/assets/c4Diagram-XDPPPE54-ByfRiJGR.js +1 -0
- package/assets/chunk-2E7WHVMD-TfbC_dmh.js +1 -0
- package/assets/chunk-2Q5K7J3B-0YJgChVo.js +1 -0
- package/assets/chunk-4EMNKR2T-DHoYW7g5.js +1 -0
- package/assets/chunk-55XCU76K-Cq25Yw_G.js +1 -0
- package/assets/chunk-5VM5RSS4-CJaRXFHK.js +1 -0
- package/assets/chunk-JWPE2WC7-BP2iXBhe.js +1 -0
- package/assets/chunk-VQ5W62QI-B95zur4F.js +1 -0
- package/assets/chunk-XXDRQBXY-Ct0MhvQo.js +1 -0
- package/assets/chunk-ZCHMQSOR-C5VhW-wL.js +2 -0
- package/assets/classDiagram-v2-4MYWR3UA-C1G-Vkj0.js +1 -0
- package/assets/cose-bilkent-JH36ORCC-qIQoIBv0.js +1 -0
- package/assets/cynefin-EF2NZ3EQ-CR1E3YiZ.js +1 -0
- package/assets/cynefinDiagram-WF24UDRP-DaJFvZ3b.js +1 -0
- package/assets/cytoscape.esm-SjxgSg6I.js +9 -0
- package/assets/dagre-NK4GIZVX-BFRQhpii.js +1 -0
- package/assets/diagram-CBK3MWTC-DlueL6XZ.js +1 -0
- package/assets/diagram-I5XIIV2D-bITyafYX.js +1 -0
- package/assets/diagram-ODIL2UCW-Dlb4hg_-.js +1 -0
- package/assets/diagram-PFBEJUXE-CRfen0O7.js +1 -0
- package/assets/diagram-RJA3I4VV-CK-FlhGV.js +1 -0
- package/assets/diagram-TYUNFSNR-DmgVsxqa.js +1 -0
- package/assets/ebnfDiagram-V4P3TTPT-B9KGI9eQ.js +1 -0
- package/assets/echarts-CytsvCdp.js +25 -0
- package/assets/elk-QONTBCTQ-VgDftvsU.js +1 -0
- package/assets/erDiagram-KYQIGQAA-DkpP7sS4.js +1 -0
- package/assets/flowDiagram-IUGLLWBU-CRXa9Kxy.js +1 -0
- package/assets/ganttDiagram-R7GPNTJY-Cu2I55Wb.js +1 -0
- package/assets/gitGraphDiagram-PDYL7XHY-CwSo663I.js +1 -0
- package/assets/graph-Dz7AM1Q5.js +1 -0
- package/assets/index-BJ-NdQc4.js +100 -0
- package/assets/infoDiagram-MVDRKAX5-D3Qknzuo.js +1 -0
- package/assets/ishikawaDiagram-HPEHV2GE-9qYT75tk.js +1 -0
- package/assets/journeyDiagram-BOSHW7O7-DeSrJg9o.js +1 -0
- package/assets/kanban-definition-FNSA4HC5-DINkB6G7.js +1 -0
- package/assets/katex-DN8cTsI3.js +1 -0
- package/assets/markdown-S2mWvoE-.js +5 -0
- package/assets/mermaid-T_6Ze_cT.js +7 -0
- package/assets/mindmap-definition-6OY57UG3-DW5hqiAe.js +1 -0
- package/assets/pegDiagram-ECIUJNBX-BWy_tkzy.js +1 -0
- package/assets/pieDiagram-GNMPY74T-CniJbr6l.js +1 -0
- package/assets/quadrantDiagram-D57K4MC3-BVnDJkCv.js +1 -0
- package/assets/railroadDiagram-Y72NRBL7-BNKZpJJb.js +1 -0
- package/assets/requirementDiagram-EQYSW5RA-BETipHj0.js +1 -0
- package/assets/sankeyDiagram-SY24JHO5-ByEYqT7T.js +1 -0
- package/assets/sequenceDiagram-BLEHNHQU-BqCJ2tKG.js +1 -0
- package/assets/sizeCapture-INFHLROL-DlhrWFj-.js +1 -0
- package/assets/stateDiagram-v2-A6IESKWZ-DJUBWLTP.js +1 -0
- package/assets/swimlanes-B3ENRKFQ-D7k7tF5U.js +1 -0
- package/assets/swimlanesDiagram-AYQRV4AK-DoQBgB9o.js +1 -0
- package/assets/timeline-definition-JXYKGLGB-BCNhwnn6.js +1 -0
- package/assets/usecaseDiagram-WPOLBNNX-DRa_Rgl3.js +1 -0
- package/assets/vennDiagram-Q3Y3IDCW-Ba2eaO68.js +1 -0
- package/assets/wardleyDiagram-IVAIDKWA-W_i9vzY-.js +1 -0
- package/assets/xychartDiagram-4URNHDU4-ByfaGjvc.js +1 -0
- package/index.html +3 -3
- package/package.json +1 -1
- package/plugin.json +1 -1
- package/preload/git-panel.js +29 -5
- package/preload/git-service.js +48 -15
- package/preload/remote-setup.js +66 -33
- package/preload/remote-wizard.js +2 -0
- package/preload.js +30 -0
- package/assets/abnfDiagram-WEYOIA3C-BgXsTF7a.js +0 -1
- package/assets/architectureDiagram-ZHVYKT53-BsCWa_qC.js +0 -36
- package/assets/blockDiagram-RJAE7QA3-wbIxEiYN.js +0 -140
- package/assets/c4Diagram-XDPPPE54-5zdyxFvA.js +0 -38
- package/assets/chunk-2E7WHVMD-F85Lca-i.js +0 -88
- package/assets/chunk-2Q5K7J3B-CjpAZ0OI.js +0 -1
- package/assets/chunk-4EMNKR2T-C8Kbh83c.js +0 -1
- package/assets/chunk-55XCU76K-BINcFiLN.js +0 -1
- package/assets/chunk-5VM5RSS4-Diy5h2LS.js +0 -15
- package/assets/chunk-JWPE2WC7-BXnjDdh1.js +0 -1
- package/assets/chunk-VQ5W62QI-BM7ZZo1I.js +0 -1
- package/assets/chunk-XXDRQBXY-CW8CjB1w.js +0 -1
- package/assets/chunk-ZCHMQSOR-C7ATz1L1.js +0 -2
- package/assets/classDiagram-v2-4MYWR3UA-CMoqNk-b.js +0 -217
- package/assets/cose-bilkent-JH36ORCC-6rqR5iJk.js +0 -1
- package/assets/cynefin-EF2NZ3EQ-DypLIJxl.js +0 -141
- package/assets/cynefinDiagram-WF24UDRP-8b2CEBlR.js +0 -62
- package/assets/cytoscape.esm-CjX6Hyah.js +0 -331
- package/assets/dagre-NK4GIZVX-Dv6vuUbR.js +0 -4
- package/assets/diagram-CBK3MWTC-DJgMDeYd.js +0 -24
- package/assets/diagram-I5XIIV2D-BB9cMoRW.js +0 -24
- package/assets/diagram-ODIL2UCW-BVcRtsdy.js +0 -30
- package/assets/diagram-PFBEJUXE-BbGSOtJx.js +0 -3
- package/assets/diagram-RJA3I4VV-CzkY_8Fo.js +0 -41
- package/assets/diagram-TYUNFSNR-YTl5QdfL.js +0 -200
- package/assets/ebnfDiagram-V4P3TTPT-COVjPAjE.js +0 -1
- package/assets/echarts-BAPDkhe3.js +0 -61
- package/assets/elk-QONTBCTQ-DHsjY8Z_.js +0 -27
- package/assets/erDiagram-KYQIGQAA-CUAbTUl1.js +0 -99
- package/assets/flowDiagram-IUGLLWBU-CWsiqTQC.js +0 -213
- package/assets/ganttDiagram-R7GPNTJY-DetBW0Wm.js +0 -292
- package/assets/gitGraphDiagram-PDYL7XHY-ByrdgJmw.js +0 -106
- package/assets/graph-D8UmR1vK.js +0 -1
- package/assets/index-B17NCAw4.js +0 -758
- package/assets/infoDiagram-MVDRKAX5-BM48fjhU.js +0 -2
- package/assets/ishikawaDiagram-HPEHV2GE-DtHYywHZ.js +0 -70
- package/assets/journeyDiagram-BOSHW7O7-DJ1LiRh3.js +0 -139
- package/assets/kanban-definition-FNSA4HC5-DPPt8pwJ.js +0 -89
- package/assets/katex-CQL9J12G.js +0 -257
- package/assets/markdown-DVehI1Sg.js +0 -314
- package/assets/mermaid-C_q9pug0.js +0 -312
- package/assets/mindmap-definition-6OY57UG3-zbqYOEY6.js +0 -98
- package/assets/pegDiagram-ECIUJNBX-e7QG7TMq.js +0 -1
- package/assets/pieDiagram-GNMPY74T-Duf6YP0N.js +0 -39
- package/assets/quadrantDiagram-D57K4MC3-B2eYoUUy.js +0 -7
- package/assets/railroadDiagram-Y72NRBL7-BWCzPcI_.js +0 -1
- package/assets/requirementDiagram-EQYSW5RA-HhPMEqB1.js +0 -84
- package/assets/sankeyDiagram-SY24JHO5-CMUTwFBB.js +0 -40
- package/assets/sequenceDiagram-BLEHNHQU-C9wR2ll7.js +0 -169
- package/assets/sizeCapture-INFHLROL-DXfz37S6.js +0 -1
- package/assets/stateDiagram-v2-A6IESKWZ-D_gtonhE.js +0 -291
- package/assets/swimlanes-B3ENRKFQ-DdJOuuMV.js +0 -1
- package/assets/swimlanesDiagram-AYQRV4AK-BWt3HxHV.js +0 -8
- package/assets/timeline-definition-JXYKGLGB-DQsdwJe-.js +0 -120
- package/assets/usecaseDiagram-WPOLBNNX-DTRyFq7d.js +0 -370
- package/assets/vennDiagram-Q3Y3IDCW-dihYszm0.js +0 -34
- package/assets/wardleyDiagram-IVAIDKWA-BoPpgYfK.js +0 -78
- package/assets/xychartDiagram-4URNHDU4-DoLjYxeB.js +0 -7
package/preload/remote-setup.js
CHANGED
|
@@ -231,12 +231,24 @@ function giteeCreateRepo (token, name, isPrivate) {
|
|
|
231
231
|
}
|
|
232
232
|
|
|
233
233
|
/* ---------------- git 绑定 ---------------- */
|
|
234
|
-
|
|
234
|
+
// Gitee 的 HTTPS 用户名是强校验的:必须与令牌所有者一致,否则回 403
|
|
235
|
+
// 「The token username invalid」(x-access-token 只有 GitHub 认)。
|
|
236
|
+
// 用户名优先级:调用方给的 login > 从仓库地址推断的 owner > x-access-token
|
|
237
|
+
const SAFE_USER = /^[A-Za-z0-9._-]{1,64}$/
|
|
238
|
+
function userForUrl (url) {
|
|
239
|
+
const m = /^https?:\/\/(?:[^@/]+@)?([^/:]+)(?::\d+)?\/([^/]+)\//.exec(String(url || ''))
|
|
240
|
+
if (m && /(^|\.)gitee\.com$/i.test(m[1]) && SAFE_USER.test(m[2])) return m[2]
|
|
241
|
+
return 'x-access-token'
|
|
242
|
+
}
|
|
243
|
+
function tokenHelper (username) {
|
|
244
|
+
const u = SAFE_USER.test(String(username || '')) ? String(username) : 'x-access-token'
|
|
245
|
+
return '!f() { echo username=' + u + '; echo password=$CMARK_GIT_TOKEN; }; f'
|
|
246
|
+
}
|
|
235
247
|
|
|
236
|
-
function git (args, cwd, token, timeout) {
|
|
248
|
+
function git (args, cwd, token, timeout, username) {
|
|
237
249
|
return new Promise(function (resolve) {
|
|
238
250
|
const pre = token
|
|
239
|
-
? ['-c', 'core.quotepath=false', '-c', 'credential.helper=', '-c', 'credential.helper=' +
|
|
251
|
+
? ['-c', 'core.quotepath=false', '-c', 'credential.helper=', '-c', 'credential.helper=' + tokenHelper(username)]
|
|
240
252
|
: ['-c', 'core.quotepath=false', '-c', 'credential.helper=', '-c', 'credential.helper=manager']
|
|
241
253
|
execFile('git', pre.concat(args), {
|
|
242
254
|
cwd: cwd,
|
|
@@ -279,6 +291,9 @@ async function bind (o) {
|
|
|
279
291
|
const dir = opt.dir
|
|
280
292
|
const url = opt.url
|
|
281
293
|
const token = opt.token
|
|
294
|
+
// Gitee 必须用令牌所有者的用户名校验;调用方(向导)拿到的是 login,
|
|
295
|
+
// 老路径/手填地址没有 login 时用仓库地址里的 owner 兜底
|
|
296
|
+
const username = opt.username || userForUrl(url)
|
|
282
297
|
if (!dir || !url || !token) return { ok: false, message: '参数不完整' }
|
|
283
298
|
if (!fs.existsSync(dir)) {
|
|
284
299
|
try { fs.mkdirSync(dir, { recursive: true }) } catch (e) {
|
|
@@ -287,6 +302,25 @@ async function bind (o) {
|
|
|
287
302
|
}
|
|
288
303
|
|
|
289
304
|
const steps = []
|
|
305
|
+
// 首推:本地还没有提交就先提交,然后 push -u origin main。
|
|
306
|
+
// 全新仓库和「选了已有仓库但远端是空的」两种情况共用。
|
|
307
|
+
async function firstPush () {
|
|
308
|
+
const hasCommit = await git(['rev-parse', '--verify', 'HEAD'], dir)
|
|
309
|
+
if (!hasCommit.ok) {
|
|
310
|
+
const addAll = await git(['add', '-A', '--', '.'], dir)
|
|
311
|
+
if (!addAll.ok) return { ok: false, message: '暂存失败:' + addAll.message, steps: steps }
|
|
312
|
+
const commit = await git(['commit', '-m', '初始化笔记仓库'], dir)
|
|
313
|
+
if (!commit.ok && !/nothing to commit/i.test(commit.message)) {
|
|
314
|
+
return { ok: false, message: '提交失败:' + commit.message, steps: steps }
|
|
315
|
+
}
|
|
316
|
+
steps.push('commit')
|
|
317
|
+
}
|
|
318
|
+
const push = await git(['push', '-u', 'origin', 'main'], dir, token, 180000, username)
|
|
319
|
+
if (!push.ok) return { ok: false, message: '首次推送失败:' + push.message, steps: steps }
|
|
320
|
+
steps.push('push')
|
|
321
|
+
return { ok: true }
|
|
322
|
+
}
|
|
323
|
+
|
|
290
324
|
if (!isRepo(dir)) {
|
|
291
325
|
const init = await git(['init', '-b', 'main'], dir)
|
|
292
326
|
if (!init.ok) return { ok: false, message: 'git init 失败:' + init.message }
|
|
@@ -306,42 +340,41 @@ async function bind (o) {
|
|
|
306
340
|
|
|
307
341
|
if (opt.existing) {
|
|
308
342
|
// 远程已有仓库:把内容拉下来(只能 fast-forward,避免覆盖本地笔记)
|
|
309
|
-
const fetch = await git(['fetch', 'origin'], dir, token, 180000)
|
|
343
|
+
const fetch = await git(['fetch', 'origin'], dir, token, 180000, username)
|
|
310
344
|
if (!fetch.ok) return { ok: false, message: '拉取失败:' + fetch.message, steps: steps }
|
|
311
345
|
steps.push('fetch')
|
|
312
346
|
|
|
313
|
-
//
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
347
|
+
// 「使用已有仓库」也可能选到刚建好、还没推过东西的空仓库(auto_init:false 没有任何分支):
|
|
348
|
+
// 这种情况下 fetch 会成功但拉不到任何引用,接着 merge origin/main 必然失败。
|
|
349
|
+
// 所以要显式分叉到首推,而不是让用户看到「合并失败」这种莫名报错。
|
|
350
|
+
const heads = await git(['ls-remote', '--heads', 'origin'], dir, token, 60000, username)
|
|
351
|
+
const hasRemoteHeads = heads.ok && String(heads.data || '').trim() !== ''
|
|
352
|
+
if (!hasRemoteHeads) {
|
|
353
|
+
const fp = await firstPush()
|
|
354
|
+
if (!fp.ok) return fp
|
|
355
|
+
} else {
|
|
356
|
+
// 远端默认分支不一定是 main(Gitee 新建仓库默认 master),按远端 HEAD 指向来合并
|
|
357
|
+
let remoteBranch = 'main'
|
|
358
|
+
try {
|
|
359
|
+
const sym = await git(['ls-remote', '--symref', 'origin', 'HEAD'], dir, token, 60000, username)
|
|
360
|
+
const m = sym.ok ? /ref:\s+refs\/heads\/(\S+)\s+HEAD/.exec(sym.data || '') : null
|
|
361
|
+
if (m && m[1]) remoteBranch = m[1]
|
|
362
|
+
} catch (e) {}
|
|
320
363
|
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
364
|
+
if (remoteBranch !== 'main') {
|
|
365
|
+
// 本地是 main、远程是别的名字:把本地主干指到远程分支,避免两个平行根
|
|
366
|
+
await git(['branch', '-M', remoteBranch], dir)
|
|
367
|
+
}
|
|
368
|
+
const merge = await git(['merge', '--ff-only', 'origin/' + remoteBranch], dir, token, 60000, username)
|
|
369
|
+
if (!merge.ok) {
|
|
370
|
+
return { ok: false, message: '合并远端分支 ' + remoteBranch + ' 失败:' + merge.message, steps: steps }
|
|
371
|
+
}
|
|
372
|
+
steps.push('merge')
|
|
328
373
|
}
|
|
329
|
-
steps.push('merge')
|
|
330
374
|
} else {
|
|
331
375
|
// 全新仓库:提交本地内容后首次推送
|
|
332
|
-
const
|
|
333
|
-
if (!
|
|
334
|
-
const addAll = await git(['add', '-A', '--', '.'], dir)
|
|
335
|
-
if (!addAll.ok) return { ok: false, message: '暂存失败:' + addAll.message }
|
|
336
|
-
const commit = await git(['commit', '-m', '初始化笔记仓库'], dir)
|
|
337
|
-
if (!commit.ok && !/nothing to commit/i.test(commit.message)) {
|
|
338
|
-
return { ok: false, message: '提交失败:' + commit.message }
|
|
339
|
-
}
|
|
340
|
-
steps.push('commit')
|
|
341
|
-
}
|
|
342
|
-
const push = await git(['push', '-u', 'origin', 'main'], dir, token, 180000)
|
|
343
|
-
if (!push.ok) return { ok: false, message: '首次推送失败:' + push.message, steps: steps }
|
|
344
|
-
steps.push('push')
|
|
376
|
+
const fp = await firstPush()
|
|
377
|
+
if (!fp.ok) return fp
|
|
345
378
|
}
|
|
346
379
|
|
|
347
380
|
// dir 是工作区(仓库根)。笔记目录若已经在它之内就保持不动,
|
|
@@ -354,7 +387,7 @@ async function bind (o) {
|
|
|
354
387
|
keepWs = !!curWs && !rel.startsWith('..') && !path.isAbsolute(rel)
|
|
355
388
|
} catch (e) { keepWs = false }
|
|
356
389
|
patchCfg(Object.assign({ repoDir: dir, initialized: true }, keepWs ? {} : { workspace: dir }))
|
|
357
|
-
const savedRes = wsPrefs.patch(dir, { remoteToken: { provider: opt.provider || '', token: token, url: url } })
|
|
390
|
+
const savedRes = wsPrefs.patch(dir, { remoteToken: { provider: opt.provider || '', token: token, url: url, username: username } })
|
|
358
391
|
const saved = !!(savedRes && savedRes.ok)
|
|
359
392
|
return { ok: saved, steps: steps, message: saved ? '' : ((savedRes && savedRes.message) || '写入配置失败') }
|
|
360
393
|
}
|
package/preload/remote-wizard.js
CHANGED
|
@@ -280,6 +280,8 @@ module.exports = function attachRemoteWizard (win) {
|
|
|
280
280
|
provider: state.provider,
|
|
281
281
|
url: c.url,
|
|
282
282
|
token: state.token,
|
|
283
|
+
// Gitee 的 HTTPS 用户名必须等于令牌所有者(state.login 来自 /api/v5/user)
|
|
284
|
+
username: state.login,
|
|
283
285
|
dir: ws,
|
|
284
286
|
existing: !isNew
|
|
285
287
|
}).then(function (b) {
|
package/preload.js
CHANGED
|
@@ -93,6 +93,16 @@ function themeMode () {
|
|
|
93
93
|
|
|
94
94
|
function resolveTheme (mode) {
|
|
95
95
|
if (mode === 'light' || mode === 'dark') return mode
|
|
96
|
+
// system:优先跟随宿主(ZTools/uTools 的主题设置,而宿主自己也可以设为跟随系统)。
|
|
97
|
+
// 为什么不用 prefers-color-scheme:宿主的标题栏是它自己的 UI,颜色由宿主的主题决定,
|
|
98
|
+
// 插件改不了;只有让「跟随」这一档跟宿主同源,插件页面和顶部那条才不会一深一浅。
|
|
99
|
+
// preload 跑在 document-start,宿主可能还没注入 window.ztools(host shim 会先给 no-op),
|
|
100
|
+
// 此时拿到的是 undefined,必须回退到系统媒体查询。
|
|
101
|
+
try {
|
|
102
|
+
const z = window.ztools
|
|
103
|
+
const v = z && typeof z.isDarkColors === 'function' ? z.isDarkColors() : undefined
|
|
104
|
+
if (typeof v === 'boolean') return v ? 'dark' : 'light'
|
|
105
|
+
} catch (e) {}
|
|
96
106
|
try {
|
|
97
107
|
return typeof matchMedia === 'function' && matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light'
|
|
98
108
|
} catch (e) {
|
|
@@ -159,6 +169,26 @@ try {
|
|
|
159
169
|
else if (mq.addListener) mq.addListener(onChange)
|
|
160
170
|
} catch (e) {}
|
|
161
171
|
|
|
172
|
+
// 「跟随」这一档还要跟宿主的主题变化走:用户在 ZTools 里切浅/深时,
|
|
173
|
+
// 插件页面要跟着换,否则会出现「顶部变了、页面没变」的反向不一致。
|
|
174
|
+
// preload 早期宿主可能还没注入,所以延后一段时间再注册一次。
|
|
175
|
+
function watchHostTheme () {
|
|
176
|
+
try {
|
|
177
|
+
const z = window.ztools
|
|
178
|
+
if (!z || typeof z.onThemeChange !== 'function') return false
|
|
179
|
+
z.onThemeChange(function () { if (themeMode() === 'system') applyTheme() })
|
|
180
|
+
return true
|
|
181
|
+
} catch (e) {
|
|
182
|
+
return false
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
if (!watchHostTheme()) {
|
|
186
|
+
setTimeout(watchHostTheme, 600)
|
|
187
|
+
setTimeout(watchHostTheme, 2000)
|
|
188
|
+
}
|
|
189
|
+
// 宿主注入晚于首帧时,system 档的首帧可能按系统色算错了,补算一次
|
|
190
|
+
setTimeout(function () { if (themeMode() === 'system') applyTheme() }, 300)
|
|
191
|
+
|
|
162
192
|
// 工作区未设置或不存在时,退到 ~/Documents/CMark,不弹任何框
|
|
163
193
|
let workspace = config.workspace
|
|
164
194
|
if (!workspace || !fs.existsSync(workspace)) {
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{g as p,r as u,d as a}from"./chunk-2E7WHVMD-F85Lca-i.js";import{p as f}from"./chunk-JWPE2WC7-BXnjDdh1.js";import{_ as n,l as o}from"./mermaid-C_q9pug0.js";import{M as c,b as d}from"./cynefin-EF2NZ3EQ-DypLIJxl.js";import"./markdown-DVehI1Sg.js";var v=d().RailroadAbnf.parser.LangiumParser,i=n(e=>{const r=e.alternatives.map(g);return r.length===1?r[0]:{type:"choice",alternatives:r}},"transformAlternation"),g=n(e=>{const r=e.elements.map(y);return r.length===1?r[0]:{type:"sequence",elements:r}},"transformConcatenation"),b=n(e=>{if(e.includes("*")){const[t,s]=e.split("*"),l=t?parseInt(t,10):0,m=s?parseInt(s,10):1/0;return{min:l,max:m}}const r=parseInt(e,10);return{min:r,max:r}},"parseRepeat"),y=n(e=>{const r=A(e.primary);if(!e.repeat)return r;const{min:t,max:s}=b(e.repeat);return t===0&&s===1?{type:"optional",element:r}:{type:"repetition",element:r,min:t,max:s}},"transformElement"),A=n(e=>{switch(e.$type){case"AbnfStringLiteral":return{type:"terminal",value:e.value};case"AbnfNumVal":return{type:"terminal",value:e.value};case"AbnfRuleName":return{type:"nonterminal",name:e.name};case"AbnfGroup":return i(e.element);case"AbnfOptionalGroup":return{type:"optional",element:i(e.element)};default:throw new Error(`Unsupported ABNF primary node: ${e.$type}`)}},"transformPrimary"),P=n(e=>({name:e.name,definition:i(e.definition)}),"transformRule"),h=n(e=>{f(e,a),e.title&&a.setTitle(e.title),e.rules.map(r=>a.addRule(P(r)))},"populateDb"),R={parse:n(e=>{a.clear(),o.debug("[ABNF Parser] Starting Langium parse");const r=v.parse(e);if(r.lexerErrors.length>0||r.parserErrors.length>0)throw new c(r);const t=r.value;o.debug("[ABNF Parser] Parsed rules:",t.rules.length),h(t),o.debug("[ABNF Parser] Parse complete")},"parse"),parser:{yy:a}},B={parser:R,db:a,renderer:u,styles:p};export{B as diagram};
|