Skip to content

Commit 1518a7b

Browse files
committed
fix(super-editor): avoid eager story-runtime imports in story editor setup
1 parent 7263798 commit 1518a7b

9 files changed

Lines changed: 17 additions & 11 deletions

File tree

packages/super-editor/src/core/story-editor-factory.ts

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
import type { Editor } from './Editor.js';
22
import type { EditorOptions } from './types/EditorConfig.js';
3-
import { Editor as SuperEditor } from './Editor.js';
4-
import { getStarterExtensions } from '../extensions/index.js';
53

64
/**
75
* Options for creating a story editor (header, footer, footnote, endnote, etc.).
@@ -128,13 +126,20 @@ export function createStoryEditor(
128126
// through the image extension's storage shape.
129127
const imageStorage = parentEditor.storage?.image as { media?: Record<string, unknown> } | undefined;
130128
const media = imageStorage?.media ?? parentEditor.options.media ?? {};
129+
const inheritedExtensions = parentEditor.options.extensions?.length
130+
? [...parentEditor.options.extensions]
131+
: undefined;
132+
const StoryEditorClass = parentEditor.constructor as new (options: Partial<EditorOptions>) => Editor;
131133

132-
const storyEditor = new SuperEditor({
134+
const storyEditor = new StoryEditorClass({
133135
role: parentEditor.options.role,
134136
loadFromSchema: true,
135137
mode: 'docx',
136138
content,
137-
extensions: getStarterExtensions(),
139+
// Reuse the parent's extension definitions instead of importing the
140+
// starter bundle here, which keeps story-runtime resolution from
141+
// eagerly pulling the full UI extension graph into headless callers.
142+
extensions: inheritedExtensions,
138143
documentId,
139144
media,
140145
mediaFiles: media,

packages/super-editor/src/document-api-adapters/assemble-adapters.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ import { previewPlan } from './plan-engine/preview.js';
9797
import { queryMatchAdapter } from './plan-engine/query-match-adapter.js';
9898
import { resolveRange } from './helpers/range-resolver.js';
9999
import { initRevision, trackRevisions } from './plan-engine/revision-tracker.js';
100-
import { initStoryRevisionStore } from './story-runtime/index.js';
100+
import { initStoryRevisionStore } from './story-runtime/story-revision-store.js';
101101
import { registerBuiltInExecutors } from './plan-engine/register-executors.js';
102102
import { registerPartDescriptor } from '../core/parts/registry/part-registry.js';
103103
import { stylesPartDescriptor } from '../core/parts/adapters/styles-part-descriptor.js';

packages/super-editor/src/document-api-adapters/find-adapter.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import { buildResolvedHandle, buildDiscoveryItem, buildDiscoveryResult } from '@
1212
import { DocumentApiAdapterError } from './errors.js';
1313
import { dedupeDiagnostics } from './helpers/adapter-utils.js';
1414
import { getBlockIndex, getInlineIndex } from './helpers/index-cache.js';
15-
import { resolveStoryRuntime } from './story-runtime/index.js';
15+
import { resolveStoryRuntime } from './story-runtime/resolve-story-runtime.js';
1616
import { findInlineByAnchor } from './helpers/inline-address-resolver.js';
1717
import { findBlockByIdStrict, findBlockByNodeIdOnly } from './helpers/node-address-resolver.js';
1818
import { resolveIncludedNodes } from './helpers/node-info-resolver.js';

packages/super-editor/src/document-api-adapters/get-html-adapter.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import type { Editor } from '../core/Editor.js';
22
import type { GetHtmlInput } from '@superdoc/document-api';
3-
import { resolveStoryRuntime } from './story-runtime/index.js';
3+
import { resolveStoryRuntime } from './story-runtime/resolve-story-runtime.js';
44

55
const DEFAULT_UNFLATTEN_LISTS = true;
66

packages/super-editor/src/document-api-adapters/get-markdown-adapter.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import remarkStringify from 'remark-stringify';
44
import type { Editor } from '../core/Editor.js';
55
import type { GetMarkdownInput } from '@superdoc/document-api';
66
import { proseMirrorDocToMdast } from '../core/helpers/markdown/proseMirrorToMdast.js';
7-
import { resolveStoryRuntime } from './story-runtime/index.js';
7+
import { resolveStoryRuntime } from './story-runtime/resolve-story-runtime.js';
88

99
const remarkProcessor = unified().use(remarkGfm).use(remarkStringify, { bullet: '-', fences: true });
1010

packages/super-editor/src/document-api-adapters/get-node-adapter.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import { getBlockIndex, getInlineIndex } from './helpers/index-cache.js';
66
import { findInlineByAnchor } from './helpers/inline-address-resolver.js';
77
import { projectContentNode, projectInlineNode, projectMarkBasedInline } from './helpers/sd-projection.js';
88
import { DocumentApiAdapterError } from './errors.js';
9-
import { resolveStoryRuntime } from './story-runtime/index.js';
9+
import { resolveStoryRuntime } from './story-runtime/resolve-story-runtime.js';
1010

1111
function findBlocksByTypeAndId(blockIndex: BlockIndex, nodeType: BlockNodeType, nodeId: string): BlockCandidate[] {
1212
// Fast path: check the byId map which includes alias entries (e.g., sdBlockId

packages/super-editor/src/document-api-adapters/get-text-adapter.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import type { Editor } from '../core/Editor.js';
22
import type { GetTextInput } from '@superdoc/document-api';
3-
import { resolveStoryRuntime } from './story-runtime/index.js';
3+
import { resolveStoryRuntime } from './story-runtime/resolve-story-runtime.js';
44

55
/**
66
* Return the full document text content from the ProseMirror document.

packages/super-editor/src/document-api-adapters/plan-engine/query-match-adapter.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ import {
4848
} from './match-style-helpers.js';
4949
import type { OoxmlResolverParams, ParagraphProperties } from '@superdoc/style-engine/ooxml';
5050
import { readTranslatedLinkedStyles } from '../../core/parts/adapters/styles-read.js';
51-
import { resolveStoryRuntime } from '../story-runtime/index.js';
51+
import { resolveStoryRuntime } from '../story-runtime/resolve-story-runtime.js';
5252
import { encodeV4Ref } from '../story-runtime/story-ref-codec.js';
5353

5454
// ---------------------------------------------------------------------------

packages/super-editor/src/extensions/pagination/pagination-helpers.test.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ import { createHeaderFooterEditor } from './pagination-helpers.js';
4545

4646
function createParentEditor() {
4747
return {
48+
constructor: MockEditor,
4849
options: {
4950
role: 'editor',
5051
fonts: {},

0 commit comments

Comments
 (0)