@longzai-intelligence-docs/core 0.0.12 → 0.0.14
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 +114 -1
- package/dist/index.js +1 -1
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -354,6 +354,119 @@ declare function titleToKebabSlug(title: string): string;
|
|
|
354
354
|
*/
|
|
355
355
|
declare function violatesSlugDigitPolicy(slug: string, policy: SlugDigitPolicy): boolean;
|
|
356
356
|
//#endregion
|
|
357
|
+
//#region src/registry-index.constants.d.ts
|
|
358
|
+
/**
|
|
359
|
+
* 注册表索引行口径常量——docs 域 README 索引单一真源
|
|
360
|
+
*
|
|
361
|
+
* 登记表家族各仓 README 索引行的行首标记、链接文本编号分隔、摘要分隔与
|
|
362
|
+
* 目标前缀集中于此。docs 家族各工具的索引差量检查与期望行渲染一律消费本
|
|
363
|
+
* 模块,杜绝各仓自持口径漂移
|
|
364
|
+
*
|
|
365
|
+
* @remarks
|
|
366
|
+
* 形态正本为 records 引擎现行编号域方言——编号与标题入链接文本、日期与
|
|
367
|
+
* 状态不出索引,比对锚为链接目标即编号加 slug,链接文本形态宽容
|
|
368
|
+
*/
|
|
369
|
+
/**
|
|
370
|
+
* 索引行行首标记——markdown 无序列表项
|
|
371
|
+
*/
|
|
372
|
+
declare const INDEX_LIST_PREFIX = "- ";
|
|
373
|
+
/**
|
|
374
|
+
* 链接文本编号分隔——编号域方言链接文本内编号与标题间的 em dash 分隔
|
|
375
|
+
*/
|
|
376
|
+
declare const INDEX_TEXT_DASH = " — ";
|
|
377
|
+
/**
|
|
378
|
+
* 摘要分隔——链接与一句话摘要间的分隔,pitfalls 方言消费
|
|
379
|
+
*/
|
|
380
|
+
declare const INDEX_SUMMARY_SEPARATOR = " - ";
|
|
381
|
+
/**
|
|
382
|
+
* 编号域目标前缀——编号域方言链接目标的 `./` 目录内相对前缀
|
|
383
|
+
*
|
|
384
|
+
* @remarks
|
|
385
|
+
* 无编号方言不加前缀,两形态分别沿 records 与 pitfalls 两引擎现行
|
|
386
|
+
* 渲染正本
|
|
387
|
+
*/
|
|
388
|
+
declare const INDEX_TARGET_PREFIX = "./";
|
|
389
|
+
//#endregion
|
|
390
|
+
//#region src/registry-index.core.d.ts
|
|
391
|
+
/**
|
|
392
|
+
* 注册表索引行核心原语——宽口径模式工厂、提取与期望行渲染
|
|
393
|
+
*
|
|
394
|
+
* 与 registry-index.constants 同为 docs 域 README 索引单一真源的两面:常量
|
|
395
|
+
* 承载口径记号,本模块承载判定与渲染。家族工具的 index check 与 README 存根
|
|
396
|
+
* 渲染消费此处原语
|
|
397
|
+
*
|
|
398
|
+
* @remarks
|
|
399
|
+
* 宽口径锚定模型——比对锚为链接目标即编号加 slug,链接文本形态宽容,
|
|
400
|
+
* decision 的编号裸文本方言与 records 的编号入链接文本方言均天然可匹配,
|
|
401
|
+
* 存量仓索引无需改写即可被统一机制校验
|
|
402
|
+
*/
|
|
403
|
+
/**
|
|
404
|
+
* 索引链接模式工厂入参
|
|
405
|
+
*/
|
|
406
|
+
type IndexLinkPatternInput = {
|
|
407
|
+
/**
|
|
408
|
+
* 编号段源串——编号域方言的链接目标编号段,无编号方言省略
|
|
409
|
+
*/
|
|
410
|
+
numberSource?: string;
|
|
411
|
+
/**
|
|
412
|
+
* slug 段源串——链接目标 slug 段形态源,消费 slug 风格基础模块源串
|
|
413
|
+
*/
|
|
414
|
+
slugSource: string;
|
|
415
|
+
};
|
|
416
|
+
/**
|
|
417
|
+
* 构造宽口径索引链接模式——锚定链接目标,链接文本形态宽容
|
|
418
|
+
*
|
|
419
|
+
* 编号域方言返回两捕获组即目标编号与目标 slug,无编号方言返回链接文本与
|
|
420
|
+
* 目标 slug 两捕获组。产出的模式非全局,`extractIndexRefs` 消费时自建全局
|
|
421
|
+
* 实例,避免模块级正则共享 lastIndex 状态
|
|
422
|
+
*
|
|
423
|
+
* @param input - 方言形态源入参
|
|
424
|
+
* @returns 索引链接匹配模式
|
|
425
|
+
*/
|
|
426
|
+
declare function buildIndexLinkPattern(input: IndexLinkPatternInput): RegExp;
|
|
427
|
+
/**
|
|
428
|
+
* 提取 README 内容中的索引引用集——首捕获组对次捕获组
|
|
429
|
+
*
|
|
430
|
+
* 编号域方言产出目标编号对目标 slug 的映射,无编号方言产出链接文本对目标
|
|
431
|
+
* slug 的映射,重复引用以后者为准
|
|
432
|
+
*
|
|
433
|
+
* @param content - README 全文
|
|
434
|
+
* @param pattern - `buildIndexLinkPattern` 产出的方言模式
|
|
435
|
+
* @returns 首捕获组键对次捕获组值的映射
|
|
436
|
+
*/
|
|
437
|
+
declare function extractIndexRefs(content: string, pattern: RegExp): Map<string, string>;
|
|
438
|
+
/**
|
|
439
|
+
* 索引期望行渲染入参
|
|
440
|
+
*/
|
|
441
|
+
type IndexListLineInput = {
|
|
442
|
+
/**
|
|
443
|
+
* 编号——编号域方言链接文本的编号段,无编号方言省略
|
|
444
|
+
*/
|
|
445
|
+
number?: string;
|
|
446
|
+
/**
|
|
447
|
+
* 标题——链接文本主体,无编号语义域为 slug 或标题
|
|
448
|
+
*/
|
|
449
|
+
title: string;
|
|
450
|
+
/**
|
|
451
|
+
* 目标——链接目标文件基名
|
|
452
|
+
*/
|
|
453
|
+
target: string;
|
|
454
|
+
/**
|
|
455
|
+
* 一句话摘要——可选,链接后的摘要段,pitfalls 方言消费
|
|
456
|
+
*/
|
|
457
|
+
summary?: string;
|
|
458
|
+
};
|
|
459
|
+
/**
|
|
460
|
+
* 渲染索引期望行——records 编号域方言为正本
|
|
461
|
+
*
|
|
462
|
+
* 编号域产出 `- NNNN — 标题` 链接文本加 `./` 前缀目标,无编号方言产出裸
|
|
463
|
+
* 链接文本加裸目标,摘要段按需追加。期望行即完整可粘贴行,人工登记消费
|
|
464
|
+
*
|
|
465
|
+
* @param input - 期望行渲染入参
|
|
466
|
+
* @returns 索引行全文
|
|
467
|
+
*/
|
|
468
|
+
declare function renderIndexListLine(input: IndexListLineInput): string;
|
|
469
|
+
//#endregion
|
|
357
470
|
//#region src/load-plugin.utils.d.ts
|
|
358
471
|
/**
|
|
359
472
|
* 外部插件装载失败错误
|
|
@@ -624,4 +737,4 @@ type PaginatedResult<T> = {
|
|
|
624
737
|
};
|
|
625
738
|
};
|
|
626
739
|
//#endregion
|
|
627
|
-
export { DOCS_REGISTRY_DECLARATION_DIR, DOCS_REGISTRY_REPO_NAME, DOCS_REGISTRY_ROOT_ENV_KEY, type DocCategory, type DocCategoryEntry, DocCategoryEntrySchema, DocCategorySchema, type DocVersion, DocVersionSchema, type DocsPlugin, type DocsPluginCommandFactory, type DocsPluginContext, type DocsPluginHooks, type DocsPluginProvides, IDENTIFIER_KEBAB_PATTERN, IDENTIFIER_KEBAB_SOURCE, NUMBERED_SLUG_PATTERN, NUMBERED_SLUG_SOURCE, type PaginatedResult, type PluginEntry, PluginEntrySchema, PluginLoadError, SEMANTIC_SLUG_PATTERN, SEMANTIC_SLUG_SOURCE, SLUG_DIGIT_POLICIES, type SlugDigitPolicy, type TruthSourceEntry, TruthSourceEntrySchema, type TruthSourceProbe, type TruthSourceRender, type WaiverEntry, type WaiverEvaluation, buildServiceRegistry, containsDigit, defineDocCategory, definePlugin, definePluginEntry, defineTruthSourceEntry, evaluateWaivers, extractSlugSegment, loadExternalPlugin, pluginCommand, resolveConsumedServices, runPipelineHooks, titleToKebabSlug, validateWaiverEntries, violatesSlugDigitPolicy };
|
|
740
|
+
export { DOCS_REGISTRY_DECLARATION_DIR, DOCS_REGISTRY_REPO_NAME, DOCS_REGISTRY_ROOT_ENV_KEY, type DocCategory, type DocCategoryEntry, DocCategoryEntrySchema, DocCategorySchema, type DocVersion, DocVersionSchema, type DocsPlugin, type DocsPluginCommandFactory, type DocsPluginContext, type DocsPluginHooks, type DocsPluginProvides, IDENTIFIER_KEBAB_PATTERN, IDENTIFIER_KEBAB_SOURCE, INDEX_LIST_PREFIX, INDEX_SUMMARY_SEPARATOR, INDEX_TARGET_PREFIX, INDEX_TEXT_DASH, type IndexLinkPatternInput, type IndexListLineInput, NUMBERED_SLUG_PATTERN, NUMBERED_SLUG_SOURCE, type PaginatedResult, type PluginEntry, PluginEntrySchema, PluginLoadError, SEMANTIC_SLUG_PATTERN, SEMANTIC_SLUG_SOURCE, SLUG_DIGIT_POLICIES, type SlugDigitPolicy, type TruthSourceEntry, TruthSourceEntrySchema, type TruthSourceProbe, type TruthSourceRender, type WaiverEntry, type WaiverEvaluation, buildIndexLinkPattern, buildServiceRegistry, containsDigit, defineDocCategory, definePlugin, definePluginEntry, defineTruthSourceEntry, evaluateWaivers, extractIndexRefs, extractSlugSegment, loadExternalPlugin, pluginCommand, renderIndexListLine, resolveConsumedServices, runPipelineHooks, titleToKebabSlug, validateWaiverEntries, violatesSlugDigitPolicy };
|
package/dist/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import"./rolldown-runtime-BqT_7tdF.js";import{createRequire as e}from"node:module";import*as t from"node:path";import{pathToFileURL as n}from"node:url";import*as r from"zod";const i=`[a-z]+(?:-[a-z]+)*`,a=/^[a-z]+(?:-[a-z]+)*$/,o=`[a-z0-9]+(?:-[a-z0-9]+)*`,s=/^[a-z0-9]+(?:-[a-z0-9]+)*$/,c=`[a-z][a-z0-9-]*`,l=/^[a-z][a-z0-9-]*$/,u=[`forbid`,`allow`];function d(e){return{name:e.name,description:e.description,arguments:e.arguments,options:e.options,schema:e.schema,action:async(t,n)=>{await e.action(e.schema.parse(t),n)}}}function f(e){if(!l.test(e.name))throw Error(`插件名须为 kebab-case(小写字母开头,仅小写字母/数字/连字符):${e.name}`);if(e.version.trim()===``)throw Error(`插件 ${e.name} 的 version 不得为空`);if(e.commands.length===0)throw Error(`插件 ${e.name} 须至少声明一个命令工厂`);return e}function p(e){let t={},n=[];for(let r of e){let e=r.provides??{};for(let[i,a]of Object.entries(e))
|
|
1
|
+
import"./rolldown-runtime-BqT_7tdF.js";import{createRequire as e}from"node:module";import*as t from"node:path";import{pathToFileURL as n}from"node:url";import*as r from"zod";const i=`[a-z]+(?:-[a-z]+)*`,a=/^[a-z]+(?:-[a-z]+)*$/,o=`[a-z0-9]+(?:-[a-z0-9]+)*`,s=/^[a-z0-9]+(?:-[a-z0-9]+)*$/,c=`[a-z][a-z0-9-]*`,l=/^[a-z][a-z0-9-]*$/,u=[`forbid`,`allow`];function d(e){return{name:e.name,description:e.description,arguments:e.arguments,options:e.options,schema:e.schema,action:async(t,n)=>{await e.action(e.schema.parse(t),n)}}}function f(e){if(!l.test(e.name))throw Error(`插件名须为 kebab-case(小写字母开头,仅小写字母/数字/连字符):${e.name}`);if(e.version.trim()===``)throw Error(`插件 ${e.name} 的 version 不得为空`);if(e.commands.length===0)throw Error(`插件 ${e.name} 须至少声明一个命令工厂`);return e}function p(e){let t={},n=[];for(let r of e){let e=r.provides??{};for(let[i,a]of Object.entries(e))i in t?n.push(`服务「${i}」被重复提供(${i} 已在册,${r.name} 重复声明)`):t[i]=a}for(let r of e){let e=r.consumes??[];for(let i of e)i in t||n.push(`插件「${r.name}」消费的服务「${i}」无提供方(在册服务:${Object.keys(t).join(`、`)||`无`})`)}return{services:t,errors:n}}function m(e,t){let n={};for(let r of e.consumes??[])n[r]=t[r];return n}async function h(e,t){for(let n of e){let e=n[t];e!==void 0&&await e()}}function g(e){let t=[],n=/* @__PURE__ */ new Set;for(let r of e)r.target.trim()===``&&t.push(`豁免条目 target 不得为空`),r.reason.trim()===``&&t.push(`豁免条目「${r.target}」reason 不得为空`),r.issue.trim()===``&&t.push(`豁免条目「${r.target}」issue 收编指针不得为空`),n.has(r.target)&&t.push(`豁免条目「${r.target}」重复登记`),n.add(r.target);return t}function _(e,t){let n=g(t);if(n.length>0)throw Error(`豁免条目形状非法,拒绝判定:${n.join(`;`)}`);let r=new Set(e),i=[],a=[],o=/* @__PURE__ */ new Set;for(let e of t)r.has(e.target)?(i.push(e),o.add(e.target)):a.push(e);return{suppressed:i,active:e.filter(e=>!o.has(e)),stale:a}}function v(e){return/\d/.test(e)}function y(e){let t=/^\d+[-._ ](.+)\.[^.]+$/.exec(e);return t===null?null:t[1]??``}function b(e){return e.toLowerCase().replace(/[\s_]+/g,`-`).replace(/[^a-z0-9-]/g,``).replace(/-+/g,`-`).replace(/^-|-$/g,``)}function x(e,t){return t===`forbid`&&v(e)}const S=`- `,C=` — `,w=` - `,T=`./`;function E(e){return e.numberSource===void 0?RegExp(`\\[([^\\]\\n]+)\\]\\((?:\\.\\/)?(${e.slugSource})\\.md\\)`):RegExp(`\\[[^\\]\\n]*\\]\\((?:\\.\\/)?(${e.numberSource})-(${e.slugSource})\\.md\\)`)}function D(e,t){let n=e[t];if(n===void 0)throw Error(`索引链接捕获组 ${t} 未命中——模式内部口径错误`);return n}function O(e,t){let n=/* @__PURE__ */ new Map;for(let r of e.matchAll(new RegExp(t.source,`g`)))n.set(D(r,1),D(r,2));return n}function k(e){return`- [${e.number===void 0?e.title:`${e.number}${C}${e.title}`}](${e.number===void 0?e.target:`./${e.target}`})${e.summary===void 0?``:` - ${e.summary}`}`}var A=class extends Error{entry;constructor(e,t){super(`外部插件「${e}」装载失败:${t}`),this.name=`PluginLoadError`,this.entry=e}};const j=r.object({name:r.string().regex(l,`name 须为 kebab-case 非空字符串`),version:r.string().min(1,`version 须为非空字符串`),commands:r.custom(e=>Array.isArray(e)&&e.length>0&&e.every(e=>typeof e==`function`),`commands 须为非空的命令工厂函数数组`),provides:r.custom(e=>typeof e==`object`&&!!e&&!Array.isArray(e),`provides 存在时须为对象(服务名 → API 对象)`).optional(),consumes:r.array(r.string()).optional(),hooks:r.custom(e=>typeof e==`object`&&!!e&&Object.values(e).every(e=>e===void 0||typeof e==`function`),`hooks 存在时须为对象且各钩子为函数`).optional(),configSchema:r.custom(e=>typeof e==`object`&&!!e&&`parse`in e,`configSchema 存在时须为具备 parse 方法的 zod schema`).optional()});function M(r,i){let a=e(t.join(i,`package.json`));return r.startsWith(`./`)||r.startsWith(`../`)?n(t.resolve(i,r)).href:n(a.resolve(r)).href}function N(e){return typeof e==`object`&&!!e&&`default`in e}async function P(e,t){let n=await import(M(e,t)).catch(t=>{throw new A(e,`模块不可达(${t instanceof Error?t.message:String(t)})`)}),r=N(n)?n.default:n,i=j.safeParse(r);if(!i.success)throw new A(e,i.error.issues.map(e=>e.message).join(`;`));return i.data}const F=r.strictObject({name:r.string().regex(l,`name 须为 kebab-case 非空字符串`),status:r.enum([`登记中`,`已发布`]),holdingRepo:r.string().min(1,`holdingRepo 须为非空字符串(自持仓仓名)`),entryPackage:r.string().min(1).optional(),version:r.string().min(1).optional(),compatibleRange:r.string().min(1).optional(),docs:r.string().min(1).optional(),summary:r.string().min(1,`summary 须为非空一句话职能`)}).refine(e=>e.status!==`已发布`||e.entryPackage!==void 0,{error:`已发布条目必须携带 entryPackage`,path:[`entryPackage`]}).refine(e=>e.status!==`已发布`||e.version!==void 0,{error:`已发布条目必须携带 version`,path:[`version`]}),I=r.strictObject({category:r.string().regex(l,`category 须为 kebab-case 非空字符串`),names:r.array(r.string().regex(l,`文档名须为 kebab-case 非空字符串`)).min(1,`names 须为非空数组`)}).refine(e=>new Set(e.names).size===e.names.length,{error:`names 不得重复`,path:[`names`]}),L=r.strictObject({artifact:r.string().min(1,`artifact 须为非空产物路径或形态描述`),mechanism:r.string().min(1,`mechanism 须为非空生成机制描述`),handEdit:r.enum([`禁手编`,`可手编`]),marker:r.string().min(1).optional()}),R=r.strictObject({path:r.string().min(1,`path 须为非空仓内相对路径`)}),z=r.strictObject({path:r.string().min(1,`path 须为非空仓内相对路径`)}),B=r.strictObject({path:r.string().min(1,`path 须为非空仓内相对路径`),contains:r.string().min(1,`contains 须为非空标记子串`)}),V=r.strictObject({repo:r.string().min(1,`repo 须为非空探针目标仓名`),requires:r.array(R).min(1).optional(),ifPresent:r.array(z).min(1).optional(),markerIn:r.array(B).min(1).optional()}).refine(e=>e.requires!==void 0||e.ifPresent!==void 0||e.markerIn!==void 0,{error:`探针至少须声明 requires / ifPresent / markerIn 之一`,path:[`requires`]}),H=r.strictObject({name:r.string().regex(l,`name 须为 kebab-case 非空字符串`),summary:r.string().min(1,`summary 须为非空一句话职能`),status:r.enum([`登记中`,`已确认`]),truthSource:r.strictObject({repo:r.string().min(1,`repo 须为非空真源仓或仓族描述`),path:r.string().min(1,`path 须为非空真源路径`)}),renders:r.array(L).min(1).optional(),distribution:r.string().min(1).optional(),consumers:r.array(r.string().min(1)).min(1,`consumers 须为非空消费面清单`),probes:r.array(V).min(1).optional(),notes:r.string().min(1).optional()});function U(e){let t=F.safeParse(e);if(!t.success)throw Error(`插件登记条目非法:${t.error.issues.map(e=>`${e.path.join(`.`)||`(root)`}——${e.message}`).join(`;`)}`);return t.data}function W(e){let t=I.safeParse(e);if(!t.success)throw Error(`文档目录条目非法:${t.error.issues.map(e=>`${e.path.join(`.`)||`(root)`}——${e.message}`).join(`;`)}`);return t.data}function G(e){let t=H.safeParse(e);if(!t.success)throw Error(`真源登记条目非法:${t.error.issues.map(e=>`${e.path.join(`.`)||`(root)`}——${e.message}`).join(`;`)}`);return t.data}const K=`longzai-intelligence-docs-registry`,q=`LZI_DOCS_REGISTRY_ROOT`,J=`registry`,Y=r.object({id:r.string(),name:r.string().min(1,`分类名称不能为空`),slug:r.string().min(1,`分类标识不能为空`),description:r.string().nullable(),parentId:r.string().nullable(),sortOrder:r.number().int().min(0),createdAt:r.string(),updatedAt:r.string()}),X=r.object({id:r.string(),docId:r.string(),version:r.string().min(1,`版本号不能为空`),content:r.string(),createdAt:r.string(),updatedAt:r.string()});export{J as DOCS_REGISTRY_DECLARATION_DIR,K as DOCS_REGISTRY_REPO_NAME,q as DOCS_REGISTRY_ROOT_ENV_KEY,I as DocCategoryEntrySchema,Y as DocCategorySchema,X as DocVersionSchema,l as IDENTIFIER_KEBAB_PATTERN,c as IDENTIFIER_KEBAB_SOURCE,S as INDEX_LIST_PREFIX,w as INDEX_SUMMARY_SEPARATOR,T as INDEX_TARGET_PREFIX,C as INDEX_TEXT_DASH,s as NUMBERED_SLUG_PATTERN,o as NUMBERED_SLUG_SOURCE,F as PluginEntrySchema,A as PluginLoadError,a as SEMANTIC_SLUG_PATTERN,i as SEMANTIC_SLUG_SOURCE,u as SLUG_DIGIT_POLICIES,H as TruthSourceEntrySchema,E as buildIndexLinkPattern,p as buildServiceRegistry,v as containsDigit,W as defineDocCategory,f as definePlugin,U as definePluginEntry,G as defineTruthSourceEntry,_ as evaluateWaivers,O as extractIndexRefs,y as extractSlugSegment,P as loadExternalPlugin,d as pluginCommand,k as renderIndexListLine,m as resolveConsumedServices,h as runPipelineHooks,b as titleToKebabSlug,g as validateWaiverEntries,x as violatesSlugDigitPolicy};
|