@zzclub/pipeline 0.10.0 → 0.10.2

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.
Files changed (123) hide show
  1. package/README.md +113 -8
  2. package/package.json +4 -4
  3. package/src/adapter-types.ts +21 -0
  4. package/src/adapters/builtin-markdown-renderer.ts +7 -0
  5. package/src/cli.ts +5 -1
  6. package/src/commands/ingest-handoff.ts +1 -21
  7. package/src/commands/prepare-finalize.ts +2 -1
  8. package/src/commands/prepare.ts +30 -19
  9. package/src/commands/publish.ts +2 -3
  10. package/src/commands/reconcile.ts +3 -5
  11. package/src/commands/render.ts +2 -1
  12. package/src/commands/republish.ts +2 -3
  13. package/src/commands/reset.ts +9 -1
  14. package/src/commands/review.ts +3 -2
  15. package/src/commands/sync-blog.ts +2 -1
  16. package/src/commands/wechat-export.test.ts +41 -0
  17. package/src/commands/wechat-export.ts +156 -20
  18. package/src/commands/wechat-preview.ts +160 -0
  19. package/src/config.ts +12 -0
  20. package/src/imgx/runtime.ts +31 -3
  21. package/src/logger.test.ts +56 -0
  22. package/src/logger.ts +178 -0
  23. package/src/plugins.ts +2 -0
  24. package/src/providers/blog.ts +1 -2
  25. package/src/providers/index.ts +35 -3
  26. package/src/publish-targets.ts +4 -5
  27. package/src/routes.ts +9 -1
  28. package/src/schema/config.ts +2 -0
  29. package/src/state.ts +24 -0
  30. package/src/task-manager.test.ts +57 -0
  31. package/src/task-manager.ts +23 -5
  32. package/src/wechat-preview/assets/browser-dist/.vite/manifest.json +1 -302
  33. package/src/wechat-preview/assets/browser-dist/editor-export.js +500 -958
  34. package/src/wechat-preview/browser/assets.d.ts +9 -0
  35. package/src/wechat-preview/browser/editor-export.css +5 -326
  36. package/src/wechat-preview/browser/editor-export.ts +30 -65
  37. package/src/wechat-preview/bundle-stale.test.ts +52 -0
  38. package/src/wechat-preview/fixtures/all-nodes.md +68 -0
  39. package/src/wechat-preview/index.test.ts +17 -0
  40. package/src/wechat-preview/index.ts +424 -180
  41. package/src/wechat-preview/server/client.ts +164 -0
  42. package/src/wechat-preview/server/http.ts +229 -0
  43. package/src/wechat-preview/server/index.ts +33 -0
  44. package/src/wechat-preview/server/local-file.test.ts +52 -0
  45. package/src/wechat-preview/server/local-file.ts +116 -0
  46. package/src/wechat-preview/server/paths.ts +80 -0
  47. package/src/wechat-preview/server/registry.test.ts +60 -0
  48. package/src/wechat-preview/server/registry.ts +118 -0
  49. package/src/wechat-preview/server/singleton.ts +118 -0
  50. package/src/wechat-preview/server/types.ts +61 -0
  51. package/src/wechat-preview/server/ui.ts +324 -0
  52. package/src/wechat-preview/themes.ts +58 -45
  53. package/src/wechat-preview/wechat-export.integration.test.ts +94 -0
  54. package/src/wechat-preview/wechat-renderer.links.test.ts +44 -0
  55. package/src/wechat-preview/wechat-renderer.test.ts +50 -0
  56. package/src/wechat-preview/wechat-renderer.ts +698 -0
  57. package/src/wechat-preview.test.ts +25 -41
  58. package/src/workflow-materials.test.ts +52 -1
  59. package/src/workflow-materials.ts +12 -0
  60. package/src/workflow.test.ts +105 -5
  61. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
  62. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
  63. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
  64. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
  65. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
  66. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
  67. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
  68. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
  69. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
  70. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
  71. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
  72. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
  73. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
  74. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
  75. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
  76. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
  77. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
  78. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
  79. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
  80. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
  81. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
  82. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
  83. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
  84. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
  85. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
  86. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
  87. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
  88. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
  89. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
  90. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
  91. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
  92. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
  93. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
  94. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
  95. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
  96. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
  97. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
  98. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
  99. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
  100. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
  101. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
  102. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
  103. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
  104. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
  105. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
  106. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
  107. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
  108. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
  109. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
  110. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
  111. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
  112. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
  113. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
  114. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
  115. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
  116. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
  117. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
  118. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
  119. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
  120. package/src/wechat-preview/assets/browser-dist/assets/style-vhHYSP8T.css +0 -1
  121. package/src/wechat-preview/assets/fonts/SweiCurveLegCJKsc-Regular.woff +0 -0
  122. package/src/wechat-preview/wechat-formatter.test.ts +0 -287
  123. package/src/wechat-preview/wechat-formatter.ts +0 -1531
@@ -141,8 +141,7 @@ export async function publishBlogRoute({
141
141
  lines.push(` - ${tag}`);
142
142
  }
143
143
  }
144
- const author = state.route.content_profile || "default";
145
- lines.push(`author: ${author}`);
144
+ lines.push("author: Kairos");
146
145
  lines.push("---");
147
146
 
148
147
  const bodyWithFrontmatter = `${lines.join("\n")}\n\n${stripFrontmatter(postContent)}`;
@@ -1,6 +1,10 @@
1
1
  import { readFile, writeFile } from "fs/promises";
2
2
  import { join } from "path";
3
- import { PipelineConfig, ResolvedWorkspacePaths } from "../config";
3
+ import {
4
+ resolveConfigRelativePath,
5
+ type PipelineConfig,
6
+ type ResolvedWorkspacePaths,
7
+ } from "../config";
4
8
  import { PublishResult, RenderAsset, RoutePrimary, WorkflowState } from "../state";
5
9
  import {
6
10
  injectIllustrationImages,
@@ -75,14 +79,42 @@ async function publishWechatArticleRoute({
75
79
  try {
76
80
  const markdownRenderer = await resolveMarkdownRenderer(config);
77
81
  const wxAccount = config.wx.accounts[account] ?? config.wx.accounts[config.wx.defaultAccount];
78
- const { html } = await markdownRenderer.render({
82
+ const rendered = await markdownRenderer.render({
79
83
  markdownPath: exportPostPath,
80
84
  outPath: workspacePaths.zotepadExportHtml,
81
85
  account,
82
86
  title: state.metadata.title,
83
- customCss: wxAccount?.customCss ?? null,
87
+ customCss: resolveConfigRelativePath(wxAccount?.customCss),
84
88
  themeOverrides: wxAccount?.theme,
85
89
  });
90
+ const { html } = rendered;
91
+
92
+ // Register with local preview server unless explicitly disabled.
93
+ if (process.env.ZZHUB_WECHAT_PREVIEW_ON_PUBLISH !== "0") {
94
+ try {
95
+ const { registerPreviewEntry } = await import("../wechat-preview/server");
96
+ await registerPreviewEntry(
97
+ {
98
+ title: `[publish] ${state.metadata.title || "untitled"}`,
99
+ account,
100
+ status: "success",
101
+ duration_ms: rendered.durationMs ?? 0,
102
+ markdown_path: exportPostPath,
103
+ html_path: workspacePaths.zotepadExportHtml,
104
+ preview_style: rendered.previewStyle,
105
+ html,
106
+ debug: {
107
+ bundle_rebuilt: rendered.bundleRebuilt,
108
+ bundle_stale: rendered.bundleStale,
109
+ },
110
+ },
111
+ { autoStart: process.env.ZZHUB_WECHAT_PREVIEW_AUTO_START !== "0" },
112
+ );
113
+ } catch {
114
+ // preview registration must never block publish
115
+ }
116
+ }
117
+
86
118
  const response = await createWechatDraft({
87
119
  account,
88
120
  title: state.metadata.title,
@@ -126,13 +126,12 @@ export function getStatePublishTargets(state: {
126
126
  publish_targets: PublishTarget[];
127
127
  route: { primary: RoutePrimary; extras: RoutePrimary[]; account: string };
128
128
  }): PublishTarget[] {
129
- const targets = [
130
- ...[state.route.primary, ...state.route.extras].map((route) => ({
129
+ const targets = state.publish_targets.length > 0
130
+ ? state.publish_targets
131
+ : [state.route.primary, ...state.route.extras].map((route) => ({
131
132
  route,
132
133
  account: state.route.account,
133
- })),
134
- ...state.publish_targets,
135
- ];
134
+ }));
136
135
  const seen = new Set<string>();
137
136
  return targets.filter((target) => {
138
137
  const key = `${target.route}@${target.account}`;
package/src/routes.ts CHANGED
@@ -205,12 +205,13 @@ export function routePlanFromTargets(
205
205
  ): { primary: RoutePrimary; extras: RoutePrimary[] } | null {
206
206
  const uniqueTargets = [...new Set(targets)];
207
207
  const wantsWechat = uniqueTargets.includes("wechat");
208
+ const wantsBlog = uniqueTargets.includes("blog");
208
209
 
209
210
  if (form === "article") {
210
211
  if (wantsWechat) {
211
212
  return {
212
213
  primary: "wechat-article",
213
- extras: [],
214
+ extras: wantsBlog ? ["blog"] : [],
214
215
  };
215
216
  }
216
217
  }
@@ -218,6 +219,13 @@ export function routePlanFromTargets(
218
219
  if (form === "newspic" && wantsWechat) {
219
220
  return {
220
221
  primary: "wechat-newspic",
222
+ extras: wantsBlog ? ["blog"] : [],
223
+ };
224
+ }
225
+
226
+ if (wantsBlog) {
227
+ return {
228
+ primary: "blog",
221
229
  extras: [],
222
230
  };
223
231
  }
@@ -39,6 +39,8 @@ const WechatExportThemeOverridesSchema = z.object({
39
39
  fontFamily: z.string().optional(),
40
40
  bodyColor: z.string().optional(),
41
41
  mutedColor: z.string().optional(),
42
+ h2Color: z.string().optional(),
43
+ h3Color: z.string().optional(),
42
44
  primaryColor: z.string().optional(),
43
45
  dividerColor: z.string().optional(),
44
46
  blockquoteBorderColor: z.string().optional(),
package/src/state.ts CHANGED
@@ -370,6 +370,30 @@ export function reenterPublish(state: WorkflowState): void {
370
370
  state.redo_hint = null;
371
371
  }
372
372
 
373
+ /**
374
+ * Reset every derived artifact when the core inputs (body, title, route, intent,
375
+ * explicit constraints) have changed. The run identity (run_id/workspace_root/
376
+ * state_path) and the current title are preserved; everything produced by
377
+ * prepare/render/publish is wiped so the workflow re-runs from prepare.
378
+ *
379
+ * Used by ingest-handoff resume when it detects an upstream input change.
380
+ */
381
+ export function resetDerivedState(state: WorkflowState): void {
382
+ state.mode = "active";
383
+ state.phase = defaultPhase();
384
+ state.asset_path = "";
385
+ state.formatted_body_path = null;
386
+ state.metadata = {
387
+ ...defaultMetadata(),
388
+ title: state.metadata.title,
389
+ };
390
+ state.artifacts = defaultArtifacts();
391
+ state.images = defaultImages();
392
+ state.publish = defaultPublish();
393
+ state.content_review = defaultContentReview();
394
+ state.redo_hint = null;
395
+ }
396
+
373
397
  // ── Run ID ────────────────────────────────────────────────────────
374
398
 
375
399
  /**
@@ -0,0 +1,57 @@
1
+ import { afterAll, describe, expect, test } from "bun:test";
2
+ import { mkdtemp, writeFile } from "fs/promises";
3
+ import { join } from "path";
4
+ import { tmpdir } from "os";
5
+
6
+ import { defaultState, writeState } from "./state";
7
+ import { loadTaskState } from "./task-manager";
8
+
9
+ const TEST_CONFIG_PATH = join(
10
+ tmpdir(),
11
+ `zzhub-pipeline-test-config-loadtask-${process.pid}.json`,
12
+ );
13
+ process.env.ZZHUB_PIPELINE_CONFIG = TEST_CONFIG_PATH;
14
+
15
+ async function makeTempDir(prefix: string): Promise<string> {
16
+ return mkdtemp(join(tmpdir(), prefix));
17
+ }
18
+
19
+ afterAll(async () => {
20
+ await writeFile(TEST_CONFIG_PATH, "{}", "utf-8").catch(() => undefined);
21
+ });
22
+
23
+ describe("loadTaskState", () => {
24
+ test("returns a reconciled view when body_inputs drift from the body on disk", async () => {
25
+ const workspace = await makeTempDir("zzhub-loadtask-");
26
+ const statePath = join(workspace, "workflow-state.json");
27
+ const bodyPath = join(workspace, "post.md");
28
+
29
+ const state = defaultState();
30
+ state.run_id = "run-loadtask";
31
+ state.workspace_root = workspace;
32
+ state.state_path = statePath;
33
+ state.source_body_path = bodyPath;
34
+ state.route.primary = "wechat-article";
35
+ state.intent.content_form = "article";
36
+ state.metadata.title = "T";
37
+ state.metadata.slug = "t";
38
+ state.metadata.date = "2026-04-10";
39
+ state.phase.prepare.status = "done";
40
+ // State claims one illustration input is pending, but the rewritten body
41
+ // no longer contains any markers.
42
+ state.images.body_inputs = {
43
+ scope: "article",
44
+ expected: 1,
45
+ received: [],
46
+ status: "pending",
47
+ layout: "staggered",
48
+ };
49
+ await writeFile(bodyPath, "# T\n\nBody without any markers", "utf-8");
50
+ await writeState(statePath, state);
51
+
52
+ const resolved = await loadTaskState(statePath);
53
+
54
+ expect(resolved.state.images.body_inputs.status).toBe("none");
55
+ expect(resolved.state.images.body_inputs.expected).toBe(0);
56
+ });
57
+ });
@@ -5,12 +5,26 @@ import { loadConfig, resolveWorkspacePaths, resolveWorkspaceRoot } from "./confi
5
5
  import {
6
6
  readResolvedState,
7
7
  type PhaseName,
8
+ type ResolvedState,
8
9
  type ValidationError,
9
10
  validateForPhase,
10
11
  type WorkflowState,
11
12
  } from "./state";
12
13
  import { reconcileStateArtifacts } from "./workflow-materials";
13
14
 
15
+ /**
16
+ * Load workflow state and apply in-memory artifact reconciliation so every
17
+ * command sees the same reconciled view of body_inputs/render_assets that
18
+ * `status` produces. Use this instead of `readResolvedState` in commands that
19
+ * read state and then make a decision based on it. `writeState`'s own
20
+ * optimistic re-read deliberately stays un-reconciled.
21
+ */
22
+ export async function loadTaskState(path: string): Promise<ResolvedState> {
23
+ const resolved = await readResolvedState(path);
24
+ await reconcileStateArtifacts(resolved.state);
25
+ return resolved;
26
+ }
27
+
14
28
  export type TaskFileSource = "run" | "canonical";
15
29
 
16
30
  export interface TaskGap {
@@ -491,14 +505,18 @@ function buildTaskStatus(summary: TaskSummary, state: WorkflowState): TaskStatus
491
505
  },
492
506
  };
493
507
  } else {
508
+ // Reached only when prepare/render/publish all report done (or aren't
509
+ // required) yet mode/phase hasn't advanced to done — an inconsistent state.
510
+ // Re-running prepare here would reenterPrepare and wipe render_assets,
511
+ // forcing a wasteful re-render. Route to a read-only checkpoint instead.
494
512
  nextAction = {
495
- action: "prepare",
496
- reason: "Task is active and should continue from the current phase.",
497
- executor: "cli",
498
- command: `zzhub-pipeline prepare --state "${summary.state_path}"`,
513
+ action: "checkpoint",
514
+ reason: "Phases report done but the task is not marked complete; inspect state before mutating it.",
515
+ executor: "repair",
516
+ command: `zzhub-pipeline checkpoint --state "${summary.state_path}"`,
499
517
  params: {
500
518
  state_path: summary.state_path,
501
- on_complete: "After the command succeeds, re-run status to determine the next step.",
519
+ on_complete: "Inspect the checkpoint output, then reset or repair the inconsistent phase before continuing.",
502
520
  },
503
521
  };
504
522
  }
@@ -1,309 +1,8 @@
1
1
  {
2
- "node_modules/katex/dist/fonts/KaTeX_AMS-Regular.ttf": {
3
- "file": "assets/KaTeX_AMS-Regular-DRggAlZN.ttf",
4
- "src": "node_modules/katex/dist/fonts/KaTeX_AMS-Regular.ttf"
5
- },
6
- "node_modules/katex/dist/fonts/KaTeX_AMS-Regular.woff": {
7
- "file": "assets/KaTeX_AMS-Regular-DMm9YOAa.woff",
8
- "src": "node_modules/katex/dist/fonts/KaTeX_AMS-Regular.woff"
9
- },
10
- "node_modules/katex/dist/fonts/KaTeX_AMS-Regular.woff2": {
11
- "file": "assets/KaTeX_AMS-Regular-BQhdFMY1.woff2",
12
- "src": "node_modules/katex/dist/fonts/KaTeX_AMS-Regular.woff2"
13
- },
14
- "node_modules/katex/dist/fonts/KaTeX_Caligraphic-Bold.ttf": {
15
- "file": "assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf",
16
- "src": "node_modules/katex/dist/fonts/KaTeX_Caligraphic-Bold.ttf"
17
- },
18
- "node_modules/katex/dist/fonts/KaTeX_Caligraphic-Bold.woff": {
19
- "file": "assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff",
20
- "src": "node_modules/katex/dist/fonts/KaTeX_Caligraphic-Bold.woff"
21
- },
22
- "node_modules/katex/dist/fonts/KaTeX_Caligraphic-Bold.woff2": {
23
- "file": "assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2",
24
- "src": "node_modules/katex/dist/fonts/KaTeX_Caligraphic-Bold.woff2"
25
- },
26
- "node_modules/katex/dist/fonts/KaTeX_Caligraphic-Regular.ttf": {
27
- "file": "assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf",
28
- "src": "node_modules/katex/dist/fonts/KaTeX_Caligraphic-Regular.ttf"
29
- },
30
- "node_modules/katex/dist/fonts/KaTeX_Caligraphic-Regular.woff": {
31
- "file": "assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff",
32
- "src": "node_modules/katex/dist/fonts/KaTeX_Caligraphic-Regular.woff"
33
- },
34
- "node_modules/katex/dist/fonts/KaTeX_Caligraphic-Regular.woff2": {
35
- "file": "assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2",
36
- "src": "node_modules/katex/dist/fonts/KaTeX_Caligraphic-Regular.woff2"
37
- },
38
- "node_modules/katex/dist/fonts/KaTeX_Fraktur-Bold.ttf": {
39
- "file": "assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf",
40
- "src": "node_modules/katex/dist/fonts/KaTeX_Fraktur-Bold.ttf"
41
- },
42
- "node_modules/katex/dist/fonts/KaTeX_Fraktur-Bold.woff": {
43
- "file": "assets/KaTeX_Fraktur-Bold-BsDP51OF.woff",
44
- "src": "node_modules/katex/dist/fonts/KaTeX_Fraktur-Bold.woff"
45
- },
46
- "node_modules/katex/dist/fonts/KaTeX_Fraktur-Bold.woff2": {
47
- "file": "assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2",
48
- "src": "node_modules/katex/dist/fonts/KaTeX_Fraktur-Bold.woff2"
49
- },
50
- "node_modules/katex/dist/fonts/KaTeX_Fraktur-Regular.ttf": {
51
- "file": "assets/KaTeX_Fraktur-Regular-CB_wures.ttf",
52
- "src": "node_modules/katex/dist/fonts/KaTeX_Fraktur-Regular.ttf"
53
- },
54
- "node_modules/katex/dist/fonts/KaTeX_Fraktur-Regular.woff": {
55
- "file": "assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff",
56
- "src": "node_modules/katex/dist/fonts/KaTeX_Fraktur-Regular.woff"
57
- },
58
- "node_modules/katex/dist/fonts/KaTeX_Fraktur-Regular.woff2": {
59
- "file": "assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2",
60
- "src": "node_modules/katex/dist/fonts/KaTeX_Fraktur-Regular.woff2"
61
- },
62
- "node_modules/katex/dist/fonts/KaTeX_Main-Bold.ttf": {
63
- "file": "assets/KaTeX_Main-Bold-waoOVXN0.ttf",
64
- "src": "node_modules/katex/dist/fonts/KaTeX_Main-Bold.ttf"
65
- },
66
- "node_modules/katex/dist/fonts/KaTeX_Main-Bold.woff": {
67
- "file": "assets/KaTeX_Main-Bold-Jm3AIy58.woff",
68
- "src": "node_modules/katex/dist/fonts/KaTeX_Main-Bold.woff"
69
- },
70
- "node_modules/katex/dist/fonts/KaTeX_Main-Bold.woff2": {
71
- "file": "assets/KaTeX_Main-Bold-Cx986IdX.woff2",
72
- "src": "node_modules/katex/dist/fonts/KaTeX_Main-Bold.woff2"
73
- },
74
- "node_modules/katex/dist/fonts/KaTeX_Main-BoldItalic.ttf": {
75
- "file": "assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf",
76
- "src": "node_modules/katex/dist/fonts/KaTeX_Main-BoldItalic.ttf"
77
- },
78
- "node_modules/katex/dist/fonts/KaTeX_Main-BoldItalic.woff": {
79
- "file": "assets/KaTeX_Main-BoldItalic-SpSLRI95.woff",
80
- "src": "node_modules/katex/dist/fonts/KaTeX_Main-BoldItalic.woff"
81
- },
82
- "node_modules/katex/dist/fonts/KaTeX_Main-BoldItalic.woff2": {
83
- "file": "assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2",
84
- "src": "node_modules/katex/dist/fonts/KaTeX_Main-BoldItalic.woff2"
85
- },
86
- "node_modules/katex/dist/fonts/KaTeX_Main-Italic.ttf": {
87
- "file": "assets/KaTeX_Main-Italic-3WenGoN9.ttf",
88
- "src": "node_modules/katex/dist/fonts/KaTeX_Main-Italic.ttf"
89
- },
90
- "node_modules/katex/dist/fonts/KaTeX_Main-Italic.woff": {
91
- "file": "assets/KaTeX_Main-Italic-BMLOBm91.woff",
92
- "src": "node_modules/katex/dist/fonts/KaTeX_Main-Italic.woff"
93
- },
94
- "node_modules/katex/dist/fonts/KaTeX_Main-Italic.woff2": {
95
- "file": "assets/KaTeX_Main-Italic-NWA7e6Wa.woff2",
96
- "src": "node_modules/katex/dist/fonts/KaTeX_Main-Italic.woff2"
97
- },
98
- "node_modules/katex/dist/fonts/KaTeX_Main-Regular.ttf": {
99
- "file": "assets/KaTeX_Main-Regular-ypZvNtVU.ttf",
100
- "src": "node_modules/katex/dist/fonts/KaTeX_Main-Regular.ttf"
101
- },
102
- "node_modules/katex/dist/fonts/KaTeX_Main-Regular.woff": {
103
- "file": "assets/KaTeX_Main-Regular-Dr94JaBh.woff",
104
- "src": "node_modules/katex/dist/fonts/KaTeX_Main-Regular.woff"
105
- },
106
- "node_modules/katex/dist/fonts/KaTeX_Main-Regular.woff2": {
107
- "file": "assets/KaTeX_Main-Regular-B22Nviop.woff2",
108
- "src": "node_modules/katex/dist/fonts/KaTeX_Main-Regular.woff2"
109
- },
110
- "node_modules/katex/dist/fonts/KaTeX_Math-BoldItalic.ttf": {
111
- "file": "assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf",
112
- "src": "node_modules/katex/dist/fonts/KaTeX_Math-BoldItalic.ttf"
113
- },
114
- "node_modules/katex/dist/fonts/KaTeX_Math-BoldItalic.woff": {
115
- "file": "assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff",
116
- "src": "node_modules/katex/dist/fonts/KaTeX_Math-BoldItalic.woff"
117
- },
118
- "node_modules/katex/dist/fonts/KaTeX_Math-BoldItalic.woff2": {
119
- "file": "assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2",
120
- "src": "node_modules/katex/dist/fonts/KaTeX_Math-BoldItalic.woff2"
121
- },
122
- "node_modules/katex/dist/fonts/KaTeX_Math-Italic.ttf": {
123
- "file": "assets/KaTeX_Math-Italic-flOr_0UB.ttf",
124
- "src": "node_modules/katex/dist/fonts/KaTeX_Math-Italic.ttf"
125
- },
126
- "node_modules/katex/dist/fonts/KaTeX_Math-Italic.woff": {
127
- "file": "assets/KaTeX_Math-Italic-DA0__PXp.woff",
128
- "src": "node_modules/katex/dist/fonts/KaTeX_Math-Italic.woff"
129
- },
130
- "node_modules/katex/dist/fonts/KaTeX_Math-Italic.woff2": {
131
- "file": "assets/KaTeX_Math-Italic-t53AETM-.woff2",
132
- "src": "node_modules/katex/dist/fonts/KaTeX_Math-Italic.woff2"
133
- },
134
- "node_modules/katex/dist/fonts/KaTeX_SansSerif-Bold.ttf": {
135
- "file": "assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf",
136
- "src": "node_modules/katex/dist/fonts/KaTeX_SansSerif-Bold.ttf"
137
- },
138
- "node_modules/katex/dist/fonts/KaTeX_SansSerif-Bold.woff": {
139
- "file": "assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff",
140
- "src": "node_modules/katex/dist/fonts/KaTeX_SansSerif-Bold.woff"
141
- },
142
- "node_modules/katex/dist/fonts/KaTeX_SansSerif-Bold.woff2": {
143
- "file": "assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2",
144
- "src": "node_modules/katex/dist/fonts/KaTeX_SansSerif-Bold.woff2"
145
- },
146
- "node_modules/katex/dist/fonts/KaTeX_SansSerif-Italic.ttf": {
147
- "file": "assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf",
148
- "src": "node_modules/katex/dist/fonts/KaTeX_SansSerif-Italic.ttf"
149
- },
150
- "node_modules/katex/dist/fonts/KaTeX_SansSerif-Italic.woff": {
151
- "file": "assets/KaTeX_SansSerif-Italic-DN2j7dab.woff",
152
- "src": "node_modules/katex/dist/fonts/KaTeX_SansSerif-Italic.woff"
153
- },
154
- "node_modules/katex/dist/fonts/KaTeX_SansSerif-Italic.woff2": {
155
- "file": "assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2",
156
- "src": "node_modules/katex/dist/fonts/KaTeX_SansSerif-Italic.woff2"
157
- },
158
- "node_modules/katex/dist/fonts/KaTeX_SansSerif-Regular.ttf": {
159
- "file": "assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf",
160
- "src": "node_modules/katex/dist/fonts/KaTeX_SansSerif-Regular.ttf"
161
- },
162
- "node_modules/katex/dist/fonts/KaTeX_SansSerif-Regular.woff": {
163
- "file": "assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff",
164
- "src": "node_modules/katex/dist/fonts/KaTeX_SansSerif-Regular.woff"
165
- },
166
- "node_modules/katex/dist/fonts/KaTeX_SansSerif-Regular.woff2": {
167
- "file": "assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2",
168
- "src": "node_modules/katex/dist/fonts/KaTeX_SansSerif-Regular.woff2"
169
- },
170
- "node_modules/katex/dist/fonts/KaTeX_Script-Regular.ttf": {
171
- "file": "assets/KaTeX_Script-Regular-C5JkGWo-.ttf",
172
- "src": "node_modules/katex/dist/fonts/KaTeX_Script-Regular.ttf"
173
- },
174
- "node_modules/katex/dist/fonts/KaTeX_Script-Regular.woff": {
175
- "file": "assets/KaTeX_Script-Regular-D5yQViql.woff",
176
- "src": "node_modules/katex/dist/fonts/KaTeX_Script-Regular.woff"
177
- },
178
- "node_modules/katex/dist/fonts/KaTeX_Script-Regular.woff2": {
179
- "file": "assets/KaTeX_Script-Regular-D3wIWfF6.woff2",
180
- "src": "node_modules/katex/dist/fonts/KaTeX_Script-Regular.woff2"
181
- },
182
- "node_modules/katex/dist/fonts/KaTeX_Size1-Regular.ttf": {
183
- "file": "assets/KaTeX_Size1-Regular-Dbsnue_I.ttf",
184
- "src": "node_modules/katex/dist/fonts/KaTeX_Size1-Regular.ttf"
185
- },
186
- "node_modules/katex/dist/fonts/KaTeX_Size1-Regular.woff": {
187
- "file": "assets/KaTeX_Size1-Regular-C195tn64.woff",
188
- "src": "node_modules/katex/dist/fonts/KaTeX_Size1-Regular.woff"
189
- },
190
- "node_modules/katex/dist/fonts/KaTeX_Size1-Regular.woff2": {
191
- "file": "assets/KaTeX_Size1-Regular-mCD8mA8B.woff2",
192
- "src": "node_modules/katex/dist/fonts/KaTeX_Size1-Regular.woff2"
193
- },
194
- "node_modules/katex/dist/fonts/KaTeX_Size2-Regular.ttf": {
195
- "file": "assets/KaTeX_Size2-Regular-B7gKUWhC.ttf",
196
- "src": "node_modules/katex/dist/fonts/KaTeX_Size2-Regular.ttf"
197
- },
198
- "node_modules/katex/dist/fonts/KaTeX_Size2-Regular.woff": {
199
- "file": "assets/KaTeX_Size2-Regular-oD1tc_U0.woff",
200
- "src": "node_modules/katex/dist/fonts/KaTeX_Size2-Regular.woff"
201
- },
202
- "node_modules/katex/dist/fonts/KaTeX_Size2-Regular.woff2": {
203
- "file": "assets/KaTeX_Size2-Regular-Dy4dx90m.woff2",
204
- "src": "node_modules/katex/dist/fonts/KaTeX_Size2-Regular.woff2"
205
- },
206
- "node_modules/katex/dist/fonts/KaTeX_Size3-Regular.ttf": {
207
- "file": "assets/KaTeX_Size3-Regular-DgpXs0kz.ttf",
208
- "src": "node_modules/katex/dist/fonts/KaTeX_Size3-Regular.ttf"
209
- },
210
- "node_modules/katex/dist/fonts/KaTeX_Size3-Regular.woff": {
211
- "file": "assets/KaTeX_Size3-Regular-CTq5MqoE.woff",
212
- "src": "node_modules/katex/dist/fonts/KaTeX_Size3-Regular.woff"
213
- },
214
- "node_modules/katex/dist/fonts/KaTeX_Size4-Regular.ttf": {
215
- "file": "assets/KaTeX_Size4-Regular-DWFBv043.ttf",
216
- "src": "node_modules/katex/dist/fonts/KaTeX_Size4-Regular.ttf"
217
- },
218
- "node_modules/katex/dist/fonts/KaTeX_Size4-Regular.woff": {
219
- "file": "assets/KaTeX_Size4-Regular-BF-4gkZK.woff",
220
- "src": "node_modules/katex/dist/fonts/KaTeX_Size4-Regular.woff"
221
- },
222
- "node_modules/katex/dist/fonts/KaTeX_Size4-Regular.woff2": {
223
- "file": "assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2",
224
- "src": "node_modules/katex/dist/fonts/KaTeX_Size4-Regular.woff2"
225
- },
226
- "node_modules/katex/dist/fonts/KaTeX_Typewriter-Regular.ttf": {
227
- "file": "assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf",
228
- "src": "node_modules/katex/dist/fonts/KaTeX_Typewriter-Regular.ttf"
229
- },
230
- "node_modules/katex/dist/fonts/KaTeX_Typewriter-Regular.woff": {
231
- "file": "assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff",
232
- "src": "node_modules/katex/dist/fonts/KaTeX_Typewriter-Regular.woff"
233
- },
234
- "node_modules/katex/dist/fonts/KaTeX_Typewriter-Regular.woff2": {
235
- "file": "assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2",
236
- "src": "node_modules/katex/dist/fonts/KaTeX_Typewriter-Regular.woff2"
237
- },
238
2
  "src/wechat-preview/browser/editor-export.ts": {
239
3
  "file": "editor-export.js",
240
4
  "name": "editor-export",
241
5
  "src": "src/wechat-preview/browser/editor-export.ts",
242
- "isEntry": true,
243
- "assets": [
244
- "assets/KaTeX_AMS-Regular-BQhdFMY1.woff2",
245
- "assets/KaTeX_AMS-Regular-DMm9YOAa.woff",
246
- "assets/KaTeX_AMS-Regular-DRggAlZN.ttf",
247
- "assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2",
248
- "assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff",
249
- "assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf",
250
- "assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2",
251
- "assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff",
252
- "assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf",
253
- "assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2",
254
- "assets/KaTeX_Fraktur-Bold-BsDP51OF.woff",
255
- "assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf",
256
- "assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2",
257
- "assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff",
258
- "assets/KaTeX_Fraktur-Regular-CB_wures.ttf",
259
- "assets/KaTeX_Main-Bold-Cx986IdX.woff2",
260
- "assets/KaTeX_Main-Bold-Jm3AIy58.woff",
261
- "assets/KaTeX_Main-Bold-waoOVXN0.ttf",
262
- "assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2",
263
- "assets/KaTeX_Main-BoldItalic-SpSLRI95.woff",
264
- "assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf",
265
- "assets/KaTeX_Main-Italic-NWA7e6Wa.woff2",
266
- "assets/KaTeX_Main-Italic-BMLOBm91.woff",
267
- "assets/KaTeX_Main-Italic-3WenGoN9.ttf",
268
- "assets/KaTeX_Main-Regular-B22Nviop.woff2",
269
- "assets/KaTeX_Main-Regular-Dr94JaBh.woff",
270
- "assets/KaTeX_Main-Regular-ypZvNtVU.ttf",
271
- "assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2",
272
- "assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff",
273
- "assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf",
274
- "assets/KaTeX_Math-Italic-t53AETM-.woff2",
275
- "assets/KaTeX_Math-Italic-DA0__PXp.woff",
276
- "assets/KaTeX_Math-Italic-flOr_0UB.ttf",
277
- "assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2",
278
- "assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff",
279
- "assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf",
280
- "assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2",
281
- "assets/KaTeX_SansSerif-Italic-DN2j7dab.woff",
282
- "assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf",
283
- "assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2",
284
- "assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff",
285
- "assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf",
286
- "assets/KaTeX_Script-Regular-D3wIWfF6.woff2",
287
- "assets/KaTeX_Script-Regular-D5yQViql.woff",
288
- "assets/KaTeX_Script-Regular-C5JkGWo-.ttf",
289
- "assets/KaTeX_Size1-Regular-mCD8mA8B.woff2",
290
- "assets/KaTeX_Size1-Regular-C195tn64.woff",
291
- "assets/KaTeX_Size1-Regular-Dbsnue_I.ttf",
292
- "assets/KaTeX_Size2-Regular-Dy4dx90m.woff2",
293
- "assets/KaTeX_Size2-Regular-oD1tc_U0.woff",
294
- "assets/KaTeX_Size2-Regular-B7gKUWhC.ttf",
295
- "assets/KaTeX_Size3-Regular-CTq5MqoE.woff",
296
- "assets/KaTeX_Size3-Regular-DgpXs0kz.ttf",
297
- "assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2",
298
- "assets/KaTeX_Size4-Regular-BF-4gkZK.woff",
299
- "assets/KaTeX_Size4-Regular-DWFBv043.ttf",
300
- "assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2",
301
- "assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff",
302
- "assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf"
303
- ]
304
- },
305
- "style.css": {
306
- "file": "assets/style-vhHYSP8T.css",
307
- "src": "style.css"
6
+ "isEntry": true
308
7
  }
309
8
  }