@longzai-intelligence-debts/ledger 0.0.2 → 0.0.3
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/dist/index.d.ts +171 -19
- package/dist/index.js +10 -8
- package/package.json +2 -2
package/dist/index.d.ts
CHANGED
|
@@ -224,12 +224,57 @@ type DebtsLintInput = {
|
|
|
224
224
|
* @returns lint 结果,违例空列表为通过
|
|
225
225
|
*/
|
|
226
226
|
declare function runDebtsLint(input: DebtsLintInput): DebtsLintResult;
|
|
227
|
+
/**
|
|
228
|
+
* normalize-header 迁移核
|
|
229
|
+
*
|
|
230
|
+
* 旧 blockquote 方言头部迁移为粗体标签正本形态:双方言解析头部九键,状态
|
|
231
|
+
* 值经词表映射补灯位,按规范序重排为正本行,H1 与正文原样保留。幂等即产
|
|
232
|
+
* 品等于原文时零变更。零丢失守卫即每字段值须在产物文本在场,命中失败拒绝
|
|
233
|
+
* 落盘。命令名与 issues 的 normalize-header 先例一致
|
|
234
|
+
*/
|
|
235
|
+
/**
|
|
236
|
+
* 迁移形态
|
|
237
|
+
*/
|
|
238
|
+
type NormalizeHeaderOutcome = 'rewritten' | 'unchanged' | 'failed';
|
|
239
|
+
/**
|
|
240
|
+
* 迁移结果
|
|
241
|
+
*/
|
|
242
|
+
type NormalizeHeaderResult = {
|
|
243
|
+
/**
|
|
244
|
+
* 迁移形态
|
|
245
|
+
*/
|
|
246
|
+
outcome: NormalizeHeaderOutcome;
|
|
247
|
+
/**
|
|
248
|
+
* 产物全文
|
|
249
|
+
*
|
|
250
|
+
* @remarks
|
|
251
|
+
* unchanged 与 failed 时为原文
|
|
252
|
+
*/
|
|
253
|
+
content: string;
|
|
254
|
+
/**
|
|
255
|
+
* 结果说明
|
|
256
|
+
*
|
|
257
|
+
* @remarks
|
|
258
|
+
* failed 含失败原因
|
|
259
|
+
*/
|
|
260
|
+
message: string;
|
|
261
|
+
};
|
|
262
|
+
/**
|
|
263
|
+
* 迁移单份债档头部
|
|
264
|
+
*
|
|
265
|
+
* @remarks
|
|
266
|
+
* 正本形态幂等零变更,状态值词表外或 H1 非法即 failed 不落盘
|
|
267
|
+
* @param content - 债档全文
|
|
268
|
+
* @returns 迁移结果
|
|
269
|
+
*/
|
|
270
|
+
declare function normalizeDebtHeader(content: string): NormalizeHeaderResult;
|
|
227
271
|
/**
|
|
228
272
|
* debt 文档解析器
|
|
229
273
|
*
|
|
230
274
|
* 判定全部基于本解析器产物,口径单一真源在 format.utils。解析头部即 H1
|
|
231
|
-
*
|
|
232
|
-
* lint
|
|
275
|
+
* 与元数据行全集,正本粗体标签形态与旧 blockquote 方言均通吃,正本优先
|
|
276
|
+
* 命中,旧方言行号入产物供 lint 方言执法与翻态核拦截消费,另扫描正文固
|
|
277
|
+
* 定节命中次序与第四节内容
|
|
233
278
|
*/
|
|
234
279
|
/**
|
|
235
280
|
* 解析后的 debt 头部与正文结构
|
|
@@ -307,10 +352,10 @@ type ParsedDebt = {
|
|
|
307
352
|
*/
|
|
308
353
|
waiveReason: string | null;
|
|
309
354
|
/**
|
|
310
|
-
*
|
|
355
|
+
* 头部元数据结束行下标
|
|
311
356
|
*
|
|
312
357
|
* @remarks
|
|
313
|
-
*
|
|
358
|
+
* 0 起算即首个非元数据非空行下标,正文起始参考,展示行号须加一
|
|
314
359
|
*/
|
|
315
360
|
headerEndLine: number;
|
|
316
361
|
/**
|
|
@@ -320,6 +365,14 @@ type ParsedDebt = {
|
|
|
320
365
|
* 0 表示状态行缺席,settle 与 waive 翻态定位用
|
|
321
366
|
*/
|
|
322
367
|
statusLineIndex: number;
|
|
368
|
+
/**
|
|
369
|
+
* 首个旧方言元数据行下标
|
|
370
|
+
*
|
|
371
|
+
* @remarks
|
|
372
|
+
* 0 表示头部无旧方言行,非零即头部存在 blockquote 旧方言,供 lint 的
|
|
373
|
+
* 方言执法与翻态核的方言拦截消费
|
|
374
|
+
*/
|
|
375
|
+
legacyHeaderLine: number;
|
|
323
376
|
/**
|
|
324
377
|
* 正文固定节命中次序
|
|
325
378
|
*
|
|
@@ -404,7 +457,9 @@ type SectionScanResult = {
|
|
|
404
457
|
* @remarks
|
|
405
458
|
* debts 定位:语义分型技术债注册表。与 records 的无分型通道不同,本域
|
|
406
459
|
* 头部元数据带类型与状态两个词表维度,正文带固定四节结构,生命周期翻态
|
|
407
|
-
* 仅经 settle 与 waive
|
|
460
|
+
* 仅经 settle 与 waive 两条通道。头部元数据行正本为粗体标签形态即
|
|
461
|
+
* `**键**: 值`,与 issues 头部元信息行风格一致,状态值带灯位前缀。
|
|
462
|
+
* blockquote 全角冒号为旧方言,读侧宽容兼容,迁移经 normalize-header
|
|
408
463
|
*/
|
|
409
464
|
/**
|
|
410
465
|
* 文件名形态
|
|
@@ -431,65 +486,128 @@ declare const DEBT_H1_PATTERN: RegExp;
|
|
|
431
486
|
* 债务类型行形态
|
|
432
487
|
*
|
|
433
488
|
* @remarks
|
|
434
|
-
*
|
|
489
|
+
* 粗体标签元数据行,值为类型中文名
|
|
435
490
|
*/
|
|
436
491
|
declare const TYPE_LINE_PATTERN: RegExp;
|
|
437
492
|
/**
|
|
438
493
|
* 记录日期行形态
|
|
439
494
|
*
|
|
440
495
|
* @remarks
|
|
441
|
-
*
|
|
496
|
+
* 粗体标签元数据行,YYYY-MM-DD
|
|
442
497
|
*/
|
|
443
498
|
declare const DATE_LINE_PATTERN: RegExp;
|
|
444
499
|
/**
|
|
445
500
|
* 状态行形态
|
|
446
501
|
*
|
|
447
502
|
* @remarks
|
|
448
|
-
*
|
|
503
|
+
* 粗体标签元数据行,值为灯位状态词表值
|
|
449
504
|
*/
|
|
450
505
|
declare const STATUS_LINE_PATTERN: RegExp;
|
|
451
506
|
/**
|
|
452
507
|
* 来源行形态
|
|
453
508
|
*
|
|
454
509
|
* @remarks
|
|
455
|
-
*
|
|
510
|
+
* 粗体标签元数据行,非空
|
|
456
511
|
*/
|
|
457
512
|
declare const SOURCE_LINE_PATTERN: RegExp;
|
|
458
513
|
/**
|
|
459
514
|
* 关联行形态
|
|
460
515
|
*
|
|
461
516
|
* @remarks
|
|
462
|
-
*
|
|
517
|
+
* 粗体标签元数据行,可选,非空
|
|
463
518
|
*/
|
|
464
519
|
declare const REF_LINE_PATTERN: RegExp;
|
|
465
520
|
/**
|
|
466
521
|
* 清偿日期行形态
|
|
467
522
|
*
|
|
468
523
|
* @remarks
|
|
469
|
-
*
|
|
524
|
+
* 粗体标签元数据行,仅已清偿债在场,YYYY-MM-DD
|
|
470
525
|
*/
|
|
471
526
|
declare const SETTLE_DATE_LINE_PATTERN: RegExp;
|
|
472
527
|
/**
|
|
473
528
|
* 清偿记录行形态
|
|
474
529
|
*
|
|
475
530
|
* @remarks
|
|
476
|
-
*
|
|
531
|
+
* 粗体标签元数据行,已清偿债可选,指向操作细节正本
|
|
477
532
|
*/
|
|
478
533
|
declare const SETTLE_RECORD_LINE_PATTERN: RegExp;
|
|
479
534
|
/**
|
|
480
535
|
* 豁免日期行形态
|
|
481
536
|
*
|
|
482
537
|
* @remarks
|
|
483
|
-
*
|
|
538
|
+
* 粗体标签元数据行,仅已豁免债在场,YYYY-MM-DD
|
|
484
539
|
*/
|
|
485
540
|
declare const WAIVE_DATE_LINE_PATTERN: RegExp;
|
|
486
541
|
/**
|
|
487
542
|
* 豁免理由行形态
|
|
488
543
|
*
|
|
489
544
|
* @remarks
|
|
490
|
-
*
|
|
545
|
+
* 粗体标签元数据行,仅已豁免债在场,非空
|
|
491
546
|
*/
|
|
492
547
|
declare const WAIVE_REASON_LINE_PATTERN: RegExp;
|
|
548
|
+
/**
|
|
549
|
+
* 债务类型行旧方言形态
|
|
550
|
+
*
|
|
551
|
+
* @remarks
|
|
552
|
+
* blockquote 元数据行即历史正本,读侧宽容兼容,迁移经 normalize-header
|
|
553
|
+
*/
|
|
554
|
+
declare const LEGACY_TYPE_LINE_PATTERN: RegExp;
|
|
555
|
+
/**
|
|
556
|
+
* 记录日期行旧方言形态
|
|
557
|
+
*
|
|
558
|
+
* @remarks
|
|
559
|
+
* blockquote 元数据行即历史正本,读侧宽容兼容,迁移经 normalize-header
|
|
560
|
+
*/
|
|
561
|
+
declare const LEGACY_DATE_LINE_PATTERN: RegExp;
|
|
562
|
+
/**
|
|
563
|
+
* 状态行旧方言形态
|
|
564
|
+
*
|
|
565
|
+
* @remarks
|
|
566
|
+
* blockquote 元数据行即历史正本,值为无灯位旧词表值,读侧宽容兼容
|
|
567
|
+
*/
|
|
568
|
+
declare const LEGACY_STATUS_LINE_PATTERN: RegExp;
|
|
569
|
+
/**
|
|
570
|
+
* 来源行旧方言形态
|
|
571
|
+
*
|
|
572
|
+
* @remarks
|
|
573
|
+
* blockquote 元数据行即历史正本,读侧宽容兼容,迁移经 normalize-header
|
|
574
|
+
*/
|
|
575
|
+
declare const LEGACY_SOURCE_LINE_PATTERN: RegExp;
|
|
576
|
+
/**
|
|
577
|
+
* 关联行旧方言形态
|
|
578
|
+
*
|
|
579
|
+
* @remarks
|
|
580
|
+
* blockquote 元数据行即历史正本,读侧宽容兼容,迁移经 normalize-header
|
|
581
|
+
*/
|
|
582
|
+
declare const LEGACY_REF_LINE_PATTERN: RegExp;
|
|
583
|
+
/**
|
|
584
|
+
* 清偿日期行旧方言形态
|
|
585
|
+
*
|
|
586
|
+
* @remarks
|
|
587
|
+
* blockquote 元数据行即历史正本,读侧宽容兼容,迁移经 normalize-header
|
|
588
|
+
*/
|
|
589
|
+
declare const LEGACY_SETTLE_DATE_LINE_PATTERN: RegExp;
|
|
590
|
+
/**
|
|
591
|
+
* 清偿记录行旧方言形态
|
|
592
|
+
*
|
|
593
|
+
* @remarks
|
|
594
|
+
* blockquote 元数据行即历史正本,读侧宽容兼容,迁移经 normalize-header
|
|
595
|
+
*/
|
|
596
|
+
declare const LEGACY_SETTLE_RECORD_LINE_PATTERN: RegExp;
|
|
597
|
+
/**
|
|
598
|
+
* 豁免日期行旧方言形态
|
|
599
|
+
*
|
|
600
|
+
* @remarks
|
|
601
|
+
* blockquote 元数据行即历史正本,读侧宽容兼容,迁移经 normalize-header
|
|
602
|
+
*/
|
|
603
|
+
declare const LEGACY_WAIVE_DATE_LINE_PATTERN: RegExp;
|
|
604
|
+
/**
|
|
605
|
+
* 豁免理由行旧方言形态
|
|
606
|
+
*
|
|
607
|
+
* @remarks
|
|
608
|
+
* blockquote 元数据行即历史正本,读侧宽容兼容,迁移经 normalize-header
|
|
609
|
+
*/
|
|
610
|
+
declare const LEGACY_WAIVE_REASON_LINE_PATTERN: RegExp;
|
|
493
611
|
/**
|
|
494
612
|
* 头部元数据键:债务类型
|
|
495
613
|
*/
|
|
@@ -526,6 +644,18 @@ declare const WAIVE_DATE_LINE_KEY = "豁免日期";
|
|
|
526
644
|
* 头部元数据键:豁免理由
|
|
527
645
|
*/
|
|
528
646
|
declare const WAIVE_REASON_LINE_KEY = "豁免理由";
|
|
647
|
+
/**
|
|
648
|
+
* 渲染头部粗体标签元数据行
|
|
649
|
+
*
|
|
650
|
+
* @remarks
|
|
651
|
+
* 形态为 `**键**: 值` 即半角冒号加空格,与 issues 头部元信息行风格一致。
|
|
652
|
+
* 渲染器、翻态核、normalize 迁移核、桌面宿主与聚合的写侧共用本真源,
|
|
653
|
+
* 禁止各处手拼第二套形态
|
|
654
|
+
* @param key - 元数据键
|
|
655
|
+
* @param value - 元数据值
|
|
656
|
+
* @returns 头部元数据行全文
|
|
657
|
+
*/
|
|
658
|
+
declare function renderHeaderLine(key: string, value: string): string;
|
|
529
659
|
/**
|
|
530
660
|
* 债务类型键全集
|
|
531
661
|
*
|
|
@@ -561,11 +691,20 @@ type DebtStatusKey = (typeof DEBT_STATUS_KEYS)[number];
|
|
|
561
691
|
* 债务状态中文名正本词表
|
|
562
692
|
*
|
|
563
693
|
* @remarks
|
|
564
|
-
* open 未清偿:债在册待偿付。
|
|
565
|
-
*
|
|
566
|
-
*
|
|
694
|
+
* 值带灯位前缀,与 issues 状态行风格一致。open 未清偿:债在册待偿付。
|
|
695
|
+
* settled 已清偿:经 settle 翻态,须回填清偿日期与第四节清偿记录。
|
|
696
|
+
* waived 已豁免:经 waive 翻态,须携带豁免日期与豁免理由,理由须含
|
|
697
|
+
* 用户裁定
|
|
567
698
|
*/
|
|
568
699
|
declare const CANONICAL_DEBT_STATUS_LABELS: Record<DebtStatusKey, string>;
|
|
700
|
+
/**
|
|
701
|
+
* 债务状态中文名旧方言词表
|
|
702
|
+
*
|
|
703
|
+
* @remarks
|
|
704
|
+
* 无灯位纯中文历史形态,读侧反查宽容兼容,正本迁移经 normalize-header
|
|
705
|
+
* 映射灯位词表
|
|
706
|
+
*/
|
|
707
|
+
declare const LEGACY_DEBT_STATUS_LABELS: Record<DebtStatusKey, string>;
|
|
569
708
|
/**
|
|
570
709
|
* 正文固定节键全集
|
|
571
710
|
*
|
|
@@ -640,17 +779,30 @@ declare function debtTypeKeyFromLabel(label: string): DebtTypeKey | null;
|
|
|
640
779
|
/**
|
|
641
780
|
* 按中文名反查债务状态键
|
|
642
781
|
*
|
|
782
|
+
* @remarks
|
|
783
|
+
* 正本灯位词表与旧方言词表均通吃,正本优先命中
|
|
643
784
|
* @param label - 状态中文名
|
|
644
785
|
* @returns 命中的状态键,未命中为 null
|
|
645
786
|
*/
|
|
646
787
|
declare function debtStatusKeyFromLabel(label: string): DebtStatusKey | null;
|
|
788
|
+
/**
|
|
789
|
+
* 状态中文名归一为灯位正本词表值
|
|
790
|
+
*
|
|
791
|
+
* @remarks
|
|
792
|
+
* 旧方言无灯位值经本函数映射为正本值,正本值原样返回,供 normalize
|
|
793
|
+
* 迁移核消费
|
|
794
|
+
* @param label - 状态中文名,正本或旧方言形态
|
|
795
|
+
* @returns 灯位正本词表值,词表外为 null
|
|
796
|
+
*/
|
|
797
|
+
declare function canonicalizeDebtStatusLabel(label: string): string | null;
|
|
647
798
|
/**
|
|
648
799
|
* 债务状态翻转核
|
|
649
800
|
*
|
|
650
801
|
* settle 清偿与 waive 豁免共用的翻态内核:翻状态行值、在状态行后追加收口
|
|
651
802
|
* 元数据行。幂等守卫即目标态已达成时零变更返回,状态行零命中即拒绝假翻态。
|
|
652
803
|
* settle 前置门禁拦截占位收口,第四节清偿记录仍为占位时拒绝清偿,先回填
|
|
653
|
-
* 证据再收口。waive
|
|
804
|
+
* 证据再收口。waive 理由强制含用户裁定,非裁定不得豁免。头部为旧
|
|
805
|
+
* blockquote 方言时拒绝翻态,先经 normalize-header 迁移为正本形态
|
|
654
806
|
*/
|
|
655
807
|
/**
|
|
656
808
|
* 翻转成功结果
|
|
@@ -858,4 +1010,4 @@ type TemplateFieldDoc = {
|
|
|
858
1010
|
* 供 agent 与使用者程序化消费
|
|
859
1011
|
*/
|
|
860
1012
|
declare const TEMPLATE_FIELDS: readonly TemplateFieldDoc[];
|
|
861
|
-
export { ASCII_KEBAB_SLUG_PATTERN, CANONICAL_DEBT_STATUS_LABELS, CANONICAL_DEBT_TYPE_LABELS, DATE_LINE_KEY, DATE_LINE_PATTERN, DEBT_FILENAME_PATTERN, DEBT_H1_PATTERN, DEBT_STATUS_KEYS, DEBT_TYPE_KEYS, DebtParseIssue, DebtParseResult, DebtStatusKey, DebtTemplateValues, DebtTypeKey, DebtsLintInput, DebtsLintResult, DebtsLintViolation, FlipFailure, FlipOutcome, FlipSuccess, INDEX_LINK_PATTERN, IndexCheckFinding, IndexCheckInput, IndexCheckResult, IndexTableRowInput, ParsedDebt, REF_LINE_KEY, REF_LINE_PATTERN, SECTION_HEADER_PATTERNS, SECTION_KEYS, SECTION_ORDINALS, SECTION_PLACEHOLDER, SETTLE_DATE_LINE_KEY, SETTLE_DATE_LINE_PATTERN, SETTLE_RECORD_LINE_KEY, SETTLE_RECORD_LINE_PATTERN, SETTLE_SECTION_PLACEHOLDER, SOURCE_LINE_KEY, SOURCE_LINE_PATTERN, STATUS_LINE_KEY, STATUS_LINE_PATTERN, ScannedDebt, SectionScanResult, SettleInput, TEMPLATE_FIELDS, TYPE_LINE_KEY, TYPE_LINE_PATTERN, TemplateFieldDoc, WAIVE_DATE_LINE_KEY, WAIVE_DATE_LINE_PATTERN, WAIVE_REASON_LINE_KEY, WAIVE_REASON_LINE_PATTERN, WaiveInput, captureGroup, debtStatusKeyFromLabel, debtTypeKeyFromLabel, extractDebtKey, isRealCalendarDate, parseDebtDoc, renderDebtTemplate, renderDebtTemplateSkeleton, renderIndexTableRow, renderRegistryReadmeStub, runDebtsLint, runIndexCheck, scanDebtsDir, settleDebtDoc, waiveDebtDoc };
|
|
1013
|
+
export { ASCII_KEBAB_SLUG_PATTERN, CANONICAL_DEBT_STATUS_LABELS, CANONICAL_DEBT_TYPE_LABELS, DATE_LINE_KEY, DATE_LINE_PATTERN, DEBT_FILENAME_PATTERN, DEBT_H1_PATTERN, DEBT_STATUS_KEYS, DEBT_TYPE_KEYS, DebtParseIssue, DebtParseResult, DebtStatusKey, DebtTemplateValues, DebtTypeKey, DebtsLintInput, DebtsLintResult, DebtsLintViolation, FlipFailure, FlipOutcome, FlipSuccess, INDEX_LINK_PATTERN, IndexCheckFinding, IndexCheckInput, IndexCheckResult, IndexTableRowInput, LEGACY_DATE_LINE_PATTERN, LEGACY_DEBT_STATUS_LABELS, LEGACY_REF_LINE_PATTERN, LEGACY_SETTLE_DATE_LINE_PATTERN, LEGACY_SETTLE_RECORD_LINE_PATTERN, LEGACY_SOURCE_LINE_PATTERN, LEGACY_STATUS_LINE_PATTERN, LEGACY_TYPE_LINE_PATTERN, LEGACY_WAIVE_DATE_LINE_PATTERN, LEGACY_WAIVE_REASON_LINE_PATTERN, NormalizeHeaderOutcome, NormalizeHeaderResult, ParsedDebt, REF_LINE_KEY, REF_LINE_PATTERN, SECTION_HEADER_PATTERNS, SECTION_KEYS, SECTION_ORDINALS, SECTION_PLACEHOLDER, SETTLE_DATE_LINE_KEY, SETTLE_DATE_LINE_PATTERN, SETTLE_RECORD_LINE_KEY, SETTLE_RECORD_LINE_PATTERN, SETTLE_SECTION_PLACEHOLDER, SOURCE_LINE_KEY, SOURCE_LINE_PATTERN, STATUS_LINE_KEY, STATUS_LINE_PATTERN, ScannedDebt, SectionScanResult, SettleInput, TEMPLATE_FIELDS, TYPE_LINE_KEY, TYPE_LINE_PATTERN, TemplateFieldDoc, WAIVE_DATE_LINE_KEY, WAIVE_DATE_LINE_PATTERN, WAIVE_REASON_LINE_KEY, WAIVE_REASON_LINE_PATTERN, WaiveInput, canonicalizeDebtStatusLabel, captureGroup, debtStatusKeyFromLabel, debtTypeKeyFromLabel, extractDebtKey, isRealCalendarDate, normalizeDebtHeader, parseDebtDoc, renderDebtTemplate, renderDebtTemplateSkeleton, renderHeaderLine, renderIndexTableRow, renderRegistryReadmeStub, runDebtsLint, runIndexCheck, scanDebtsDir, settleDebtDoc, waiveDebtDoc };
|
package/dist/index.js
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
|
-
import"./rolldown-runtime-BqT_7tdF.js";import{existsSync as e,readFileSync as t,readdirSync as n}from"node:fs";import{join as r,posix as i}from"node:path";import{NUMBERED_SLUG_PATTERN as a,NUMBERED_SLUG_SOURCE as o,buildIndexLinkPattern as s,extractIndexRefs as c}from"@longzai-intelligence-docs/core";const l=RegExp(`^(\\d{3,4})-(${o})\\.md$`),u=a,d=/^# (\d{3,4}) — (.+)$/,f=/^> 债务类型:(.+)$/,
|
|
2
|
-
`),n=[],r=d.exec(t[0]??``);if(r===null)return n.push({line:1,message:`首行须为「# NNNN — 标题」形态 H1,编号入 H1,em dash 分隔`}),{debt:null,issues:n};let i=/* @__PURE__ */ new Map,a=0,o=1;for(;
|
|
3
|
-
`)}}function
|
|
4
|
-
`),a=i[
|
|
5
|
-
`)
|
|
6
|
-
`)
|
|
7
|
-
`)}function
|
|
8
|
-
`)}
|
|
1
|
+
import"./rolldown-runtime-BqT_7tdF.js";import{existsSync as e,readFileSync as t,readdirSync as n}from"node:fs";import{join as r,posix as i}from"node:path";import{NUMBERED_SLUG_PATTERN as a,NUMBERED_SLUG_SOURCE as o,buildIndexLinkPattern as s,extractIndexRefs as c}from"@longzai-intelligence-docs/core";const l=RegExp(`^(\\d{3,4})-(${o})\\.md$`),u=a,d=/^# (\d{3,4}) — (.+)$/,f=/^\*\*债务类型\*\*: (.+)$/,p=/^\*\*记录日期\*\*: (\d{4}-\d{2}-\d{2})$/,m=/^\*\*状态\*\*: (.+)$/,ee=/^\*\*来源\*\*: (.+)$/,h=/^\*\*关联\*\*: (.+)$/,te=/^\*\*清偿日期\*\*: (\d{4}-\d{2}-\d{2})$/,g=/^\*\*清偿记录\*\*: (.+)$/,_=/^\*\*豁免日期\*\*: (\d{4}-\d{2}-\d{2})$/,ne=/^\*\*豁免理由\*\*: (.+)$/,re=/^> 债务类型:(.+)$/,v=/^> 记录日期:(\d{4}-\d{2}-\d{2})$/,y=/^> 状态:(.+)$/,b=/^> 来源:(.+)$/,x=/^> 关联:(.+)$/,S=/^> 清偿日期:(\d{4}-\d{2}-\d{2})$/,C=/^> 清偿记录:(.+)$/,w=/^> 豁免日期:(\d{4}-\d{2}-\d{2})$/,T=/^> 豁免理由:(.+)$/,E=`债务类型`,D=`记录日期`,O=`状态`,k=`来源`,A=`关联`,j=`清偿日期`,M=`清偿记录`,N=`豁免日期`,P=`豁免理由`;function F(e,t){return`**${e}**: ${t}`}const I=[`transition`,`architecture`,`implementation`,`test`,`dependency`,`documentation`],L={transition:`过渡债`,architecture:`架构债`,implementation:`实现债`,test:`测试债`,dependency:`依赖债`,documentation:`文档债`},R=[`open`,`settled`,`waived`],z={open:`🔴 未清偿`,settled:`🟢 已清偿`,waived:`⚫ 已豁免`},B={open:`未清偿`,settled:`已清偿`,waived:`已豁免`},V=[`背景`,`债务事实`,`清偿路径`,`清偿记录`],H=[`一`,`二`,`三`,`四`],U=[/^## 一、背景$/,/^## 二、债务事实$/,/^## 三、清偿路径$/,/^## 四、清偿记录$/],W=`待补充`,G=`待收口后回填`,K=s({numberSource:`\\d{3,4}`,slugSource:o});function q(e,t){if(e===null||e[t]===void 0)throw Error(`正则捕获组 ${t} 未命中,格式口径内部错误`);return e[t]}function J(e){let t=/^(\d{1,4})[-._]/.exec(e);return t===null?null:q(t,1)}function Y(e){let[t,n,r]=e.split(`-`).map(e=>Number.parseInt(e,10));if(t===void 0||n===void 0||r===void 0)return!1;let i=new Date(Date.UTC(t,n-1,r));return i.getUTCFullYear()===t&&i.getUTCMonth()===n-1&&i.getUTCDate()===r}function X(e){for(let t of I)if(L[t]===e)return t;return null}function Z(e){for(let t of R)if(z[t]===e||B[t]===e)return t;return null}function ie(e){let t=Z(e);return t===null?null:z[t]}function Q(e){return ae(e)?n(e).filter(e=>e.endsWith(`.md`)&&e!==`README.md`).map(t=>({basename:t,key:J(t),absPath:r(e,t)})).sort((e,t)=>(e.key??`zzzz`).localeCompare(t.key??`zzzz`)):[]}function ae(e){try{return n(e).length>=0}catch{return!1}}function $(e){let t=e.split(`
|
|
2
|
+
`),n=[],r=d.exec(t[0]??``);if(r===null)return n.push({line:1,message:`首行须为「# NNNN — 标题」形态 H1,编号入 H1,em dash 分隔`}),{debt:null,issues:n};let i=/* @__PURE__ */ new Map,a=0,o=0,s=1;for(;s<t.length;){let e=t[s]??``;if(e.trim()===``){s+=1;continue}let n=[{pattern:f,key:E,legacy:!1},{pattern:p,key:D,legacy:!1},{pattern:m,key:O,legacy:!1},{pattern:ee,key:k,legacy:!1},{pattern:h,key:A,legacy:!1},{pattern:te,key:j,legacy:!1},{pattern:g,key:M,legacy:!1},{pattern:_,key:N,legacy:!1},{pattern:ne,key:P,legacy:!1},{pattern:re,key:E,legacy:!0},{pattern:v,key:D,legacy:!0},{pattern:y,key:O,legacy:!0},{pattern:b,key:k,legacy:!0},{pattern:x,key:A,legacy:!0},{pattern:S,key:j,legacy:!0},{pattern:C,key:M,legacy:!0},{pattern:w,key:N,legacy:!0},{pattern:T,key:P,legacy:!0}],r=!1;for(let{pattern:t,key:c,legacy:l}of n){let n=t.exec(e);if(n!==null){i.set(c,q(n,1)),c===`状态`&&(a=s),l&&o===0&&(o=s),r=!0;break}}if(r)s+=1;else break}let{sectionHits:c,settleSectionContent:l}=oe(t);return{debt:{number:q(r,1),title:q(r,2),typeLabel:i.get(`债务类型`)??null,date:i.get(`记录日期`)??null,statusLabel:i.get(`状态`)??null,source:i.get(`来源`)??null,ref:i.get(`关联`)??null,settleDate:i.get(`清偿日期`)??null,settleRecord:i.get(`清偿记录`)??null,waiveDate:i.get(`豁免日期`)??null,waiveReason:i.get(`豁免理由`)??null,headerEndLine:s,statusLineIndex:a,legacyHeaderLine:o,sectionHits:c,settleSectionContent:l},issues:n}}function oe(e){let t=[],n=-1;for(let r=0;r<e.length;r+=1){let i=e[r]??``;for(let e=0;e<U.length;e+=1)U[e]?.test(i)===!0&&(t.push(e),e===3&&(n=r+1))}let r=[];if(n>=0)for(let t=n;t<e.length;t+=1){let n=e[t]??``;if(n.startsWith(`## `))break;n.trim()!==``&&r.push(n.trim())}return{sectionHits:t,settleSectionContent:r.length===0?null:r.join(`
|
|
3
|
+
`)}}function se(e){return`| ${e.number} | [${e.title}](./${e.target}) | ${e.typeLabel} | ${e.statusLabel} |`}function ce(n){let i=[],a=Q(n.registryDirAbs).filter(e=>l.test(e.basename)),o=new Map(a.map(e=>{let t=l.exec(e.basename);return[t===null?e.key??e.basename:q(t,1),e]})),s=r(n.registryDirAbs,`README.md`),u=e(s)?c(t(s,`utf8`),K):/* @__PURE__ */ new Map;e(s)||i.push({kind:`readme-missing`,file:`README.md`,message:`注册表 README 未建,init 可落存根,索引行人工登记`});let d=[];for(let e of a){let n=l.exec(e.basename);if(n===null)continue;let r=q(n,1),a=q(n,2),o=$(t(e.absPath,`utf8`));d.push(se({number:r,title:o.debt?.title??a,target:e.basename,typeLabel:o.debt?.typeLabel??`未知类型`,statusLabel:o.debt?.statusLabel??`未知状态`})),u.has(r)?u.get(r)!==a&&i.push({kind:`slug-drift`,file:e.basename,message:`索引 slug 漂移:索引指向 ${r}-${u.get(r)}.md,实际为 ${e.basename}`}):i.push({kind:`missing`,file:e.basename,message:`索引缺行:${e.basename},期望行见报文,人工登记`})}for(let[e,t]of u)o.has(e)||i.push({kind:`stale`,file:`${e}-${t}.md`,message:`索引多行:引用 ${e}-${t}.md 但文件不存在,删除索引行或补文件`});return{ok:i.length===0,findings:i,expectedLines:d,fileCount:a.length,indexedCount:u.size}}function le(e){let n=[],r=0,a=0;for(let r of e.config.scopes){let o=Q(pe(e.root,r.registryDir));a+=o.length;for(let e of o)ue(n,i.join(r.registryDir,e.basename),e.basename,t(e.absPath,`utf8`))}let o=new Set(e.config.lint.baseline.map(e=>`${e.file}|${e.rule}`));return{violations:n.filter(e=>{let t=o.has(`${e.file}|${e.rule}`);return t&&(r+=1),!t}),fileCount:a,exemptedCount:r}}function ue(e,t,n,r){let i=l.exec(n);if(i===null){e.push({rule:`D-FILENAME`,file:t,line:0,message:`文件名须为「NNNN-<slug>.md」形态,编号 3-4 位零填充加 ASCII kebab`});return}let a=$(r);if(a.debt===null)for(let n of a.issues)e.push({rule:`D-H1`,file:t,line:n.line,message:n.message});else a.debt.number!==i[1]&&e.push({rule:`D-H1-NUMBER`,file:t,line:1,message:`H1 编号「${a.debt.number}」与文件名编号「${i[1]}」不一致`}),a.debt.legacyHeaderLine!==0&&e.push({rule:`D-HEADER-DIALECT`,file:t,line:a.debt.legacyHeaderLine+1,message:`头部元数据行为旧 blockquote 方言,运行 lzi-debts normalize-header 迁移为粗体标签正本形态`}),a.debt.typeLabel===null?e.push({rule:`D-TYPE-LINE`,file:t,line:a.debt.headerEndLine+1,message:`头部缺「**债务类型**: <类型中文名>」元数据行`}):X(a.debt.typeLabel)===null&&e.push({rule:`D-TYPE-LINE`,file:t,line:2,message:`债务类型「${a.debt.typeLabel}」不在词表内,合法值为 ${Object.values(L).join(`、`)}`}),a.debt.date===null?e.push({rule:`D-DATE-LINE`,file:t,line:a.debt.headerEndLine+1,message:`头部缺「**记录日期**: YYYY-MM-DD」元数据行`}):Y(a.debt.date)||e.push({rule:`D-DATE-REAL`,file:t,line:2,message:`记录日期「${a.debt.date}」非真实日历日期`}),a.debt.statusLabel===null?e.push({rule:`D-STATUS-LINE`,file:t,line:a.debt.headerEndLine+1,message:`头部缺「**状态**: <灯位状态词表值>」元数据行`}):Z(a.debt.statusLabel)===null&&e.push({rule:`D-STATUS-LINE`,file:t,line:2,message:`状态「${a.debt.statusLabel}」不在词表内,合法值为 ${Object.values(z).join(`、`)}`}),a.debt.source===null&&e.push({rule:`D-SOURCE-LINE`,file:t,line:a.debt.headerEndLine+1,message:`头部缺「**来源**: <出处>」元数据行`}),de(e,t,a.debt.sectionHits),fe(e,t,a.debt)}function de(e,t,n){for(let r=0;r<V.length;r+=1)n.includes(r)||e.push({rule:`D-SECTION-MISSING`,file:t,line:0,message:`正文缺固定节「${V[r]}」`});let r=-1;for(let i of n){if(i<=r){e.push({rule:`D-SECTION-ORDER`,file:t,line:0,message:`正文固定节乱序或重复,规范次序为背景、债务事实、清偿路径、清偿记录`});break}r=i}}function fe(e,t,n){let r=n.statusLabel===null?null:Z(n.statusLabel);r===`open`?(n.settleDate!==null||n.waiveDate!==null)&&e.push({rule:`D-SETTLE-CONSISTENCY`,file:t,line:2,message:`未清偿债不得携带清偿日期或豁免日期元数据行,翻态仅经 settle 与 waive 通道`}):r===`settled`?(n.settleDate===null?e.push({rule:`D-SETTLE-CONSISTENCY`,file:t,line:2,message:`已清偿债缺「**清偿日期**: YYYY-MM-DD」元数据行`}):Y(n.settleDate)||e.push({rule:`D-SETTLE-CONSISTENCY`,file:t,line:2,message:`清偿日期「${n.settleDate}」非真实日历日期`}),(n.settleSectionContent===null||n.settleSectionContent===`待收口后回填`)&&e.push({rule:`D-SETTLE-CONSISTENCY`,file:t,line:0,message:`已清偿债第四节清偿记录须回填实文,不得保留占位`})):r===`waived`&&(n.waiveDate===null?e.push({rule:`D-SETTLE-CONSISTENCY`,file:t,line:2,message:`已豁免债缺「**豁免日期**: YYYY-MM-DD」元数据行`}):Y(n.waiveDate)||e.push({rule:`D-SETTLE-CONSISTENCY`,file:t,line:2,message:`豁免日期「${n.waiveDate}」非真实日历日期`}),n.waiveReason===null&&e.push({rule:`D-SETTLE-CONSISTENCY`,file:t,line:2,message:`已豁免债缺「**豁免理由**: <理由>」元数据行,理由须含用户裁定`}))}function pe(e,t){return`${e.replace(/\/+$/,``)}/${t}`}function me(e){let t=$(e);if(t.debt===null)return{outcome:`failed`,content:e,message:`H1 非法,无法定位头部迁移锚点`};if(t.debt.statusLabel===null)return{outcome:`failed`,content:e,message:`状态行缺席,灯位词表映射无输入`};let n=ie(t.debt.statusLabel);if(n===null)return{outcome:`failed`,content:e,message:`状态「${t.debt.statusLabel}」不在词表内,无法映射灯位词表`};let r=[{key:E,value:t.debt.typeLabel},{key:D,value:t.debt.date},{key:O,value:n},{key:j,value:t.debt.settleDate},{key:M,value:t.debt.settleRecord},{key:N,value:t.debt.waiveDate},{key:P,value:t.debt.waiveReason},{key:k,value:t.debt.source},{key:A,value:t.debt.ref}].filter(e=>e.value!==null),i=e.split(`
|
|
4
|
+
`),a=[i[0]??``,``,...r.map(e=>F(e.key,e.value)),``,...i.slice(t.debt.headerEndLine)].join(`
|
|
5
|
+
`),o=r.filter(e=>!a.includes(F(e.key,e.value)));return o.length>0?{outcome:`failed`,content:e,message:`零丢失守卫失败:字段 ${o.map(e=>e.key).join(`、`)} 未在产物在场`}:a===e?{outcome:`unchanged`,content:e,message:`头部已是粗体标签正本形态`}:{outcome:`rewritten`,content:a,message:`头部已迁移为粗体标签正本形态`}}function he(e){let t=$(e.content);if(t.debt===null)return{ok:!1,error:`债档 H1 非法,无法定位翻态锚点`};if(t.debt.legacyHeaderLine!==0)return{ok:!1,error:`头部元数据行为旧 blockquote 方言,先运行 lzi-debts normalize-header 迁移再翻态`};if(t.debt.statusLabel===z.settled)return{ok:!0,content:e.content,changed:!1};if(t.debt.statusLabel!==z.open)return{ok:!1,error:`状态为「${t.debt.statusLabel}」,仅未清偿债可清偿`};if(t.debt.settleSectionContent===null||t.debt.settleSectionContent===`待收口后回填`)return{ok:!1,error:`第四节清偿记录仍为占位,先回填清偿证据再执行 settle`};let n=[F(j,e.date)];return e.settleRecord!==void 0&&n.push(F(M,e.settleRecord)),{ok:!0,content:_e(e.content,t.debt.statusLineIndex,z.settled,n),changed:!0}}function ge(e){let t=$(e.content);if(t.debt===null)return{ok:!1,error:`债档 H1 非法,无法定位翻态锚点`};if(t.debt.legacyHeaderLine!==0)return{ok:!1,error:`头部元数据行为旧 blockquote 方言,先运行 lzi-debts normalize-header 迁移再翻态`};if(t.debt.statusLabel===z.waived)return{ok:!0,content:e.content,changed:!1};if(t.debt.statusLabel!==z.open)return{ok:!1,error:`状态为「${t.debt.statusLabel}」,仅未清偿债可豁免`};if(!e.reason.includes(`用户裁定`))return{ok:!1,error:`豁免理由须含「用户裁定」,非裁定不得豁免`};let n=[F(N,e.date),F(P,e.reason)];return{ok:!0,content:_e(e.content,t.debt.statusLineIndex,z.waived,n),changed:!0}}function _e(e,t,n,r){let i=e.split(`
|
|
6
|
+
`),a=i[t];if(a===void 0||!m.test(a))throw Error(`状态行定位失败,拒绝假翻态`);return i[t]=F(O,n),i.splice(t+1,0,...r),i.join(`
|
|
7
|
+
`)}function ve(e,t,n,r,i,a){let o=[`# ${e} — ${t}`,``,F(E,n),F(D,r),F(O,z.open),F(k,i)];return a!==void 0&&o.push(F(A,a)),o}function ye(){let e=[];for(let t=0;t<V.length;t+=1){let n=V[t],r=H[t],i=t===3?G:W;e.push(`## ${r}、${n}`,``,i,``)}return e}function be(){return[...ve(`<NNNN>`,`<一句话标题>`,`<债务类型中文名>`,`<YYYY-MM-DD>`,`<出处与日期>`,`<可选:关联条目链接,缺席省略本行>`),``,...ye()].join(`
|
|
8
|
+
`)}function xe(e){return[...ve(e.number,e.title,L[e.type],e.date,e.source,e.ref),``,...ye()].join(`
|
|
9
|
+
`)}function Se(e){return[`# ${e} debts 注册表`,``,"本目录是 lzi-debts 技术债注册表,文件名 `NNNN-<slug>.md`,编号独立序列。",``,`debts 定位:**语义分型的技术债注册表**,一债一档带生命周期。所有过渡措施必须立档,无档过渡即违规。`,``,`## 债务类型词表`,``,"- `transition` 过渡债:过渡期措施,含双轨回落锚点与兼容垫片,清偿路径节必须写明退役判据","- `architecture` 架构债:分层越界、所有权错位、拓扑简化","- `implementation` 实现债:已知次优实现","- `test` 测试债:关键路径缺测或测试薄弱","- `dependency` 依赖债:钉版、过期、重复依赖","- `documentation` 文档债:文档缺失或与实现漂移",``,`## 状态词表`,``,"- `🔴 未清偿`:债在册待偿付","- `🟢 已清偿`:经 `settle` 翻态,第四节须回填清偿记录","- `⚫ 已豁免`:经 `waive` 翻态,理由须含用户裁定",``,`## 建档与收口`,``,"- `lzi-debts create --title <t> --type <key> --source <src>` 取号经 numbering 插件,写入时刻确定,禁止手工定号","- `lzi-debts settle --number <n>` 先回填第四节清偿记录再清偿翻态","- `lzi-debts waive --number <n> --reason <r>` 豁免理由须含用户裁定","- `lzi-debts normalize-header` 旧 blockquote 方言头部迁移为粗体标签正本形态","- 标准模板:`lzi-debts template`,字段契约 `--format json`",``,`## 索引`,``,"- 索引行**人工登记**,工具只检查不写入:`lzi-debts index check` 报差量并附期望行",``,`| 编号 | 标题 | 类型 | 状态 |`,`| --- | --- | --- | --- |`,``,`## 头部元数据`,``,"- `**债务类型**: <类型中文名>` 强制","- `**记录日期**: YYYY-MM-DD` 强制","- `**状态**: <灯位状态词表值>` 强制","- `**来源**: <出处与日期>` 强制","- `**关联**: <条目链接>` 可选",``].join(`
|
|
10
|
+
`)}const Ce=[{name:`number`,required:!0,description:`scope 内编号,3-4 位零填充,由编号门禁取号分配,写入时刻确定`},{name:`slug`,required:!0,description:`ASCII kebab slug,小写字母、数字与连字符,禁中文,中文标题须显式 --slug`},{name:`title`,required:!0,description:`一句话标题`},{name:`债务类型`,required:!0,description:`封闭词表键即 transition、architecture、implementation、test、dependency、documentation,头部元数据行写对应中文名`},{name:`记录日期`,required:!0,description:`YYYY-MM-DD,头部粗体标签元数据行,强制`},{name:`状态`,required:!0,description:`三值灯位词表即 🔴 未清偿、🟢 已清偿、⚫ 已豁免,建档固定 🔴 未清偿,翻态仅经 settle 与 waive 通道`},{name:`来源`,required:!0,description:`出处与日期,头部粗体标签元数据行,强制`},{name:`关联`,required:!1,description:`关联条目链接,头部粗体标签元数据行,缺席省略整行`},{name:`正文四节`,required:!0,description:`固定四节即背景、债务事实、清偿路径、清偿记录,建档为占位,内容随立档与收口回填`}];export{u as ASCII_KEBAB_SLUG_PATTERN,z as CANONICAL_DEBT_STATUS_LABELS,L as CANONICAL_DEBT_TYPE_LABELS,D as DATE_LINE_KEY,p as DATE_LINE_PATTERN,l as DEBT_FILENAME_PATTERN,d as DEBT_H1_PATTERN,R as DEBT_STATUS_KEYS,I as DEBT_TYPE_KEYS,K as INDEX_LINK_PATTERN,v as LEGACY_DATE_LINE_PATTERN,B as LEGACY_DEBT_STATUS_LABELS,x as LEGACY_REF_LINE_PATTERN,S as LEGACY_SETTLE_DATE_LINE_PATTERN,C as LEGACY_SETTLE_RECORD_LINE_PATTERN,b as LEGACY_SOURCE_LINE_PATTERN,y as LEGACY_STATUS_LINE_PATTERN,re as LEGACY_TYPE_LINE_PATTERN,w as LEGACY_WAIVE_DATE_LINE_PATTERN,T as LEGACY_WAIVE_REASON_LINE_PATTERN,A as REF_LINE_KEY,h as REF_LINE_PATTERN,U as SECTION_HEADER_PATTERNS,V as SECTION_KEYS,H as SECTION_ORDINALS,W as SECTION_PLACEHOLDER,j as SETTLE_DATE_LINE_KEY,te as SETTLE_DATE_LINE_PATTERN,M as SETTLE_RECORD_LINE_KEY,g as SETTLE_RECORD_LINE_PATTERN,G as SETTLE_SECTION_PLACEHOLDER,k as SOURCE_LINE_KEY,ee as SOURCE_LINE_PATTERN,O as STATUS_LINE_KEY,m as STATUS_LINE_PATTERN,Ce as TEMPLATE_FIELDS,E as TYPE_LINE_KEY,f as TYPE_LINE_PATTERN,N as WAIVE_DATE_LINE_KEY,_ as WAIVE_DATE_LINE_PATTERN,P as WAIVE_REASON_LINE_KEY,ne as WAIVE_REASON_LINE_PATTERN,ie as canonicalizeDebtStatusLabel,q as captureGroup,Z as debtStatusKeyFromLabel,X as debtTypeKeyFromLabel,J as extractDebtKey,Y as isRealCalendarDate,me as normalizeDebtHeader,$ as parseDebtDoc,xe as renderDebtTemplate,be as renderDebtTemplateSkeleton,F as renderHeaderLine,se as renderIndexTableRow,Se as renderRegistryReadmeStub,le as runDebtsLint,ce as runIndexCheck,Q as scanDebtsDir,he as settleDebtDoc,ge as waiveDebtDoc};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@longzai-intelligence-debts/ledger",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.3",
|
|
4
4
|
"description": "Longzai Intelligence Debts 注册表引擎",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"debts",
|
|
@@ -37,7 +37,7 @@
|
|
|
37
37
|
"test:coverage": "bun test --coverage"
|
|
38
38
|
},
|
|
39
39
|
"dependencies": {
|
|
40
|
-
"@longzai-intelligence-debts/config": "0.0.
|
|
40
|
+
"@longzai-intelligence-debts/config": "0.0.3",
|
|
41
41
|
"@longzai-intelligence-docs/core": "0.0.22"
|
|
42
42
|
},
|
|
43
43
|
"devDependencies": {
|