Skip to content

Commit fcc4d35

Browse files
committed
feat(core): move plugins sorting to the extension builder
1 parent 66de15e commit fcc4d35

File tree

4 files changed

+27
-15
lines changed

4 files changed

+27
-15
lines changed

src/core/ExtensionBuilder.test.ts

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,25 @@ describe('ExtensionBuilder', () => {
7474
expect(plugins.length).toBe(2);
7575
});
7676

77+
it('should sort plugins by priority', () => {
78+
const plugin0 = new Plugin({});
79+
const plugin1 = new Plugin({});
80+
const plugin2 = new Plugin({});
81+
const plugin3 = new Plugin({});
82+
const plugins = new ExtensionBuilder()
83+
.addPlugin(() => plugin3, ExtensionBuilder.PluginPriority.VeryLow)
84+
.addPlugin(() => plugin1)
85+
.addPlugin(() => plugin0, ExtensionBuilder.PluginPriority.VeryHigh)
86+
.addPlugin(() => plugin2)
87+
.build()
88+
.plugins({} as ExtensionDeps);
89+
90+
expect(plugins.indexOf(plugin0)).toBe(0);
91+
expect(plugins.indexOf(plugin1)).toBe(1);
92+
expect(plugins.indexOf(plugin2)).toBe(2);
93+
expect(plugins.indexOf(plugin3)).toBe(3);
94+
});
95+
7796
it('should add actions', () => {
7897
const actions = new ExtensionBuilder()
7998
.addAction('action1', () => ({

src/core/ExtensionBuilder.ts

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -146,17 +146,14 @@ export class ExtensionBuilder {
146146
return map;
147147
},
148148
plugins: (deps) => {
149-
// TODO: sort plugins here after WIKI-16660
150-
return plugins.reduce<{plugin: Plugin; priority: number}[]>(
151-
(acc, {cb, priority}) => {
149+
return plugins
150+
.sort((a, b) => b.priority - a.priority)
151+
.reduce<Plugin[]>((acc, {cb}) => {
152152
const res = cb(deps);
153-
if (Array.isArray(res))
154-
acc.push(...res.map((plugin) => ({plugin, priority})));
155-
else acc.push({plugin: res, priority});
153+
if (Array.isArray(res)) acc.push(...res);
154+
else acc.push(res);
156155
return acc;
157-
},
158-
[],
159-
);
156+
}, []);
160157
},
161158
actions: (deps) =>
162159
actions.reduce((obj, [name, cb]) => {

src/core/ExtensionsManager.ts

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -124,13 +124,9 @@ export class ExtensionsManager {
124124
}
125125

126126
private createDerived() {
127-
const plugins: {plugin: Plugin; priority: number}[] = [];
128-
plugins.push(...this.#spec.plugins(this.#deps));
127+
this.#plugins = this.#spec.plugins(this.#deps);
129128
Object.assign(this.#actions, this.#spec.actions(this.#deps));
130129

131-
// TODO: move sorting to ExtensionBuilder after WIKI-16660
132-
this.#plugins = plugins.sort((a, b) => b.priority - a.priority).map((item) => item.plugin);
133-
134130
for (const [name, view] of this.#nodeViewCreators) {
135131
this.#nodeViews[name] = view(this.#deps);
136132
}

src/core/types/extension.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ export type ExtensionSpec = {
1717
configureMd(md: MarkdownIt): MarkdownIt;
1818
nodes(): OrderedMap<YENodeSpec>;
1919
marks(): OrderedMap<YEMarkSpec>;
20-
plugins(deps: ExtensionDeps): {plugin: Plugin; priority: number}[];
20+
plugins(deps: ExtensionDeps): Plugin[];
2121
actions(deps: ExtensionDeps): Record<string, ActionSpec>;
2222
};
2323

0 commit comments

Comments
 (0)