Skip to content

Commit 9978ea7

Browse files
committed
fix: improve typings for plugins-manager
1 parent d91e46b commit 9978ea7

File tree

7 files changed

+79
-62
lines changed

7 files changed

+79
-62
lines changed

.changeset/mean-hornets-visit.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
---
2+
'@rocket/cli': patch
3+
'@rocket/eleventy-plugin-mdjs-unified': patch
4+
'@mdjs/core': patch
5+
'plugins-manager': patch
6+
---
7+
8+
Improves typings for `addPlugin`

packages/cli/types/main.d.ts

Lines changed: 12 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -1,37 +1,23 @@
11
import { DevServerConfig } from '@web/dev-server';
22
import { CheckHtmlLinksCliOptions } from 'check-html-links/dist-types/types/main';
33
import { WatchOptions } from 'chokidar';
4-
5-
export interface RocketPreset {
6-
path: string;
7-
8-
adjustImagePresets?: (preset: { [key: string]: ImagePreset }) => { [key: string]: ImagePreset };
9-
10-
before11ty?: () => void | Promise<void>;
11-
12-
// TODO: improve all setup functions
13-
setupUnifiedPlugins?: function[];
14-
setupDevAndBuildPlugins?: function[];
15-
setupBuildPlugins?: function[];
16-
setupDevPlugins?: function[];
17-
setupCliPlugins?: function[];
18-
setupEleventyPlugins?: function[];
19-
setupEleventyComputedConfig?: function[];
20-
}
4+
export { ImagePreset, RocketPreset } from './preset';
215

226
interface RocketStartConfig {
237
createSocialMediaImages?: boolean;
248
}
259

26-
type ImageFormat = 'avif' | 'webp' | 'jpg' | 'jpeg' | 'png' | 'svg';
27-
28-
interface ImagePreset {
29-
widths: number[];
30-
formats: ImageFormat[];
31-
sizes: string;
32-
}
33-
34-
export interface RocketCliOptions {
10+
type PresetKeys =
11+
| 'before11ty'
12+
| 'setupUnifiedPlugins'
13+
| 'setupDevAndBuildPlugins'
14+
| 'setupBuildPlugins'
15+
| 'setupDevPlugins'
16+
| 'setupCliPlugins'
17+
| 'setupEleventyPlugins'
18+
| 'setupEleventyComputedConfig';
19+
20+
export interface RocketCliOptions extends Pick<RocketPreset, PresetKeys> {
3521
presets?: Array<RocketPreset>;
3622
pathPrefix?: string;
3723
serviceWorkerName?: string;
@@ -47,21 +33,10 @@ export interface RocketCliOptions {
4733

4834
chokidarConfig?: WatchOptions;
4935

50-
before11ty?: () => void | Promise<void>;
51-
5236
checkLinks?: Partial<CheckHtmlLinksCliOptions>;
5337

5438
start?: RocketStartConfig;
5539

56-
// TODO: improve all setup functions
57-
setupUnifiedPlugins?: function[];
58-
setupDevAndBuildPlugins?: function[];
59-
setupBuildPlugins?: function[];
60-
setupDevPlugins?: function[];
61-
setupCliPlugins?: function[];
62-
setupEleventyPlugins?: function[];
63-
setupEleventyComputedConfig?: function[];
64-
6540
// advanced
6641
devServer?: DevServerConfig;
6742
eleventy?: (eleventyConfig: any) => void; // TODO: improve

packages/cli/types/preset.d.ts

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
import { MetaPlugin } from 'plugins-manager';
2+
3+
type ImageFormat = 'avif' | 'webp' | 'jpg' | 'jpeg' | 'png' | 'svg';
4+
5+
export interface ImagePreset {
6+
widths: number[];
7+
formats: ImageFormat[];
8+
sizes: string;
9+
}
10+
11+
type ImagePresetHook = (preset: { [key: string]: ImagePreset }) => { [key: string]: ImagePreset };
12+
13+
export interface RocketPreset {
14+
path: string;
15+
16+
adjustImagePresets?: ImagePresetHook;
17+
18+
/** Hook that runs before rocket starts 11ty. Can be sync or async */
19+
before11ty?: () => void | Promise<void>;
20+
21+
// TODO: improve all setup functions
22+
setupUnifiedPlugins?: MetaPlugin[];
23+
setupDevAndBuildPlugins?: MetaPlugin[];
24+
setupBuildPlugins?: MetaPlugin[];
25+
setupDevPlugins?: MetaPlugin[];
26+
setupCliPlugins?: MetaPlugin[];
27+
setupEleventyPlugins?: MetaPlugin[];
28+
setupEleventyComputedConfig?: MetaPlugin[];
29+
}

packages/eleventy-plugin-mdjs-unified/types/code.d.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
import { MdjsProcessPlugin } from '@mdjs/core';
22
import { Node } from 'unist';
33

4-
export const setupUnifiedPluginsFn: (plugins: MdjsProcessPlugin[]) => MdjsProcessPlugin[];
4+
export type SetupUnifiedPluginsFn = (plugins: MdjsProcessPlugin[]) => MdjsProcessPlugin[];
55

66
export interface EleventyPluginMdjsUnified {
7-
setupUnifiedPlugins?: setupUnifiedPluginsFn[];
7+
setupUnifiedPlugins?: SetupUnifiedPluginsFn[];
88
}
99

1010
export interface NodeChildren extends Node {

packages/mdjs-core/types/code.d.ts

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
import unified from 'unified';
22

3+
import { MetaPlugin } from 'plugins-manager';
4+
35
export type StoryTypes = 'js' | 'html';
46

57
export interface MarkdownResult {
@@ -29,8 +31,4 @@ export interface ParseResult {
2931
};
3032
}
3133

32-
export interface MdjsProcessPlugin {
33-
name: string;
34-
plugin: unified.Plugin;
35-
options?: unified.Settings;
36-
}
34+
export type MdjsProcessPlugin = MetaPlugin<unified.Plugin, unified.Settings>;

packages/plugins-manager/src/addPlugin.js

Lines changed: 9 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,14 @@
11
/** @typedef {import('../types/main').MetaPlugin} MetaPlugin */
22

3-
/**
4-
* @param {object} options
5-
* @param {string} options.name
6-
* @param {any} options.plugin
7-
* @param {any} [options.options]
8-
* @param {string} [options.how]
9-
* @param {string} [options.location]
10-
*/
11-
export function addPlugin({
12-
name,
13-
plugin,
14-
options = undefined,
15-
how = 'after',
16-
location = 'bottom',
17-
}) {
3+
/** @type {import('../types/main').AddPluginType} */
4+
export function addPlugin(metaPluginAndOptions) {
5+
const {
6+
name,
7+
plugin,
8+
options = undefined,
9+
how = 'after',
10+
location = 'bottom',
11+
} = metaPluginAndOptions;
1812
/**
1913
* @param {MetaPlugin[]} plugins
2014
*/
Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,22 @@
1-
export interface MetaPlugin {
1+
type AnyFn = (...args: any[]) => any;
2+
3+
export interface MetaPlugin<F = AnyFn> {
24
name: string;
3-
plugin: any;
4-
options?: any;
5+
plugin: F extends (options?: infer O) => P ? F : any;
6+
options?: F extends (options: infer O) => P ? O : any;
57
}
68

79
export interface MetaPluginWrapable extends MetaPlugin {
810
__noWrap?: boolean;
911
}
12+
13+
interface AddPluginOptions {
14+
how?: 'after' | 'before' | 'fixed';
15+
location?: 'top' | 'bottom' | string;
16+
}
17+
18+
type AddPluginFn = (plugins: MetaPlugin[]) => MetaPlugin[];
19+
20+
export type AddPluginType = <F>(
21+
metaPluginAndOptions: MetaPlugin<F> & AddPluginOptions,
22+
) => AddPluginFn;

0 commit comments

Comments
 (0)