Files
MorphDoc/packages/core/src/document-profile.ts
T
SkyJourney 83e6559c2c release: 发布 v0.5.1
新增能力:内置 4 套红头、3 套正式文档和 3 套标书主题,支持主题推荐页边距、页面装饰、页眉页脚和页码;增加结构化公文、项目报告及标书 Front Matter,内置 Fandol 中文字体、两份教程和 14 份主题示例。

桌面工作流:重组更多菜单,增加新建、保存、另存为快捷键和未保存确认;另存为后跟随新路径,主题示例自动切换主题,Desktop 发行包完整携带教程、示例与字体。

问题修复:修正红头标题居中与正式文档字体;围栏代码按正文宽度自动换行,长内容安全断行,至少两行即可在当前页分页,并统一保留 8px 左侧内容留白;Docker Web 镜像正确打包 samples。

兼容与部署:未声明主题推荐设置时继续使用 16mm 默认页边距;Web 隐藏不适用的另存为。正式镜像 yixiong/md-to-pdf:v0.5.1 内容 ID 为 sha256:72f519a69bfd6cb2f6df30c2be938e58ceb6f20e4748a32551874de3d436b276,Compose 健康运行。

验证结果:最终修复前 65 个测试文件、286 项测试通过,最终代码块与主题定向测试 27 项通过;全项目类型检查、生产构建和 git diff --check 通过。容器检出 14 套主题、17 份 Markdown,代码块回归 PDF 为 2 页且无越界。NSIS SHA-256 为 676CCE73D782B0B15AC6BC68F253CFBC4740383583E4DAA98F746EDF9999C5CC,ZIP SHA-256 为 82BF6ADF1200604F145CC86FA3ED193955CF6741EBEE3DF8953483515CFF621F。
2026-07-29 16:58:17 +08:00

100 lines
2.7 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import { z } from "zod";
const scalarTextSchema = (maximumLength: number) =>
z.preprocess(
(value) => {
if (
typeof value === "string" ||
typeof value === "number" ||
typeof value === "boolean"
) {
return String(value).trim();
}
return value;
},
z.string().min(1).max(maximumLength)
);
const shortTextSchema = scalarTextSchema(120);
const longTextSchema = scalarTextSchema(500);
const textListSchema = z.preprocess(
(value) =>
typeof value === "string"
? value
.split(/[,]/u)
.map((item) => item.trim())
.filter(Boolean)
: value,
z.array(shortTextSchema).max(30)
);
export const documentProfileNameSchema = z.enum([
"official",
"briefing",
"project-report",
"tender"
]);
const officialDocumentProfileSchema = z
.object({
profile: z.literal("official"),
issuer: shortTextSchema.optional(),
number: shortTextSchema.optional(),
secrecy: shortTextSchema.optional(),
urgency: shortTextSchema.optional(),
signatory: shortTextSchema.optional(),
date: shortTextSchema.optional(),
copyTo: textListSchema.optional(),
printingOffice: shortTextSchema.optional()
})
.strict();
const briefingDocumentProfileSchema = z
.object({
profile: z.literal("briefing"),
masthead: shortTextSchema.optional(),
issue: shortTextSchema.optional(),
publisher: shortTextSchema.optional(),
signatory: shortTextSchema.optional(),
date: shortTextSchema.optional(),
contact: longTextSchema.optional()
})
.strict();
const projectReportDocumentProfileSchema = z
.object({
profile: z.literal("project-report"),
projectName: longTextSchema.optional(),
documentType: shortTextSchema.optional(),
owner: longTextSchema.optional(),
preparedBy: longTextSchema.optional(),
version: shortTextSchema.optional(),
date: shortTextSchema.optional()
})
.strict();
const tenderDocumentProfileSchema = z
.object({
profile: z.literal("tender"),
copyMark: shortTextSchema.optional(),
projectName: longTextSchema.optional(),
projectNumber: shortTextSchema.optional(),
volume: shortTextSchema.optional(),
bidder: longTextSchema.optional(),
representative: shortTextSchema.optional(),
date: shortTextSchema.optional()
})
.strict();
export const documentProfileSchema = z.discriminatedUnion("profile", [
officialDocumentProfileSchema,
briefingDocumentProfileSchema,
projectReportDocumentProfileSchema,
tenderDocumentProfileSchema
]);
export type DocumentProfileName = z.infer<
typeof documentProfileNameSchema
>;
export type DocumentProfile = z.infer<typeof documentProfileSchema>;