MCPcopy
hub / github.com/udecode/plate / resolvePlugin

Function resolvePlugin

packages/core/src/internal/plugin/resolvePlugin.ts:34–110  ·  view source on GitHub ↗
(
  editor: SlateEditor,
  _plugin: P
)

Source from the content-addressed store, hash-verified

32 * const resolvedPlugin = resolvePlugin(editor, plugin);
33 */
34export const resolvePlugin = <P extends AnySlatePlugin>(
35 editor: SlateEditor,
36 _plugin: P
37): P => {
38 // Create a deep clone of the plugin
39 let plugin = mergePlugins({}, _plugin) as P;
40
41 plugin.__resolved = true;
42
43 // Apply the stored configuration first
44 if (plugin.__configuration) {
45 const rawConfigResult = plugin.__configuration(
46 getEditorPlugin(editor, plugin as any)
47 ) as any;
48 // Copy before mutating: the user's config object is captured by closure
49 // and reused across editor instances, so mutating it would clear
50 // inputRules on subsequent resolutions.
51 const { inputRules: configInputRules, ...configResult } = rawConfigResult;
52
53 if (configInputRules !== undefined) {
54 const normalizedInputRules =
55 normalizeConfiguredInputRules(configInputRules);
56
57 (plugin as any).__configuredInputRules = [
58 ...normalizeConfiguredInputRules(
59 (plugin as any).__configuredInputRules
60 ),
61 ...normalizedInputRules,
62 ];
63 }
64
65 plugin = mergePlugins(plugin, configResult);
66
67 (plugin as any).__configuration = undefined;
68 }
69 // Apply all stored extensions
70 if (plugin.__extensions && plugin.__extensions.length > 0) {
71 for (const extension of plugin.__extensions) {
72 plugin = mergePlugins(
73 plugin,
74 extension(getEditorPlugin(editor, plugin as any))
75 );
76 }
77 plugin.__extensions = [];
78 }
79
80 const targetPluginToInject = plugin.inject?.targetPluginToInject;
81 const targetPlugins = plugin.inject?.targetPlugins;
82
83 if (targetPluginToInject && targetPlugins && targetPlugins.length > 0) {
84 plugin.inject = plugin.inject || {};
85 plugin.inject.plugins = merge(
86 {},
87 plugin.inject.plugins,
88 Object.fromEntries(
89 targetPlugins.map((targetPlugin) => {
90 const injectedPlugin = targetPluginToInject({
91 ...getEditorPlugin(editor, plugin as any),

Callers 4

getSlatePluginFunction · 0.90
processPluginFunction · 0.90
resolvePluginTestFunction · 0.90

Calls 4

mergePluginsFunction · 0.90
getEditorPluginFunction · 0.90
validatePluginFunction · 0.85

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…