Skip to content

Commit

Permalink
unify keepDefaultPlugins & overrideDefaultPlugins options in some plu…
Browse files Browse the repository at this point in the history
…gins
  • Loading branch information
oscarotero committed Jul 29, 2023
1 parent 99c1a76 commit ade0c33
Show file tree
Hide file tree
Showing 5 changed files with 75 additions and 47 deletions.
25 changes: 21 additions & 4 deletions MIGRATION.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,10 +25,6 @@
files like `netlify.toml`. For example: `page.tmpl.toml`.
- Yes.

## `markdown` Plugin

- Disable indented code blocks by default #376

## `jsx` Plugin

- Removed `window.React` #332.
Expand All @@ -44,3 +40,24 @@
## `windi_css` Plugin

- Replaced with `unocss`.

## `markdown` Plugin

- Disable indented code blocks by default #376
- New option `useDefaultPlugins` that it's `true` by default.
- Removed `keepDefaultPlugins`

## `postcss` Plugin

- New option `useDefaultPlugins` that it's `true` by default.
- Removed `keepDefaultPlugins`

## `mdx` Plugin

- New option `useDefaultPlugins` that it's `true` by default.
- Removed `overrideDefaultPlugins`

## `remark` Plugin

- New option `useDefaultPlugins` that it's `true` by default.
- Removed `overrideDefaultPlugins`
20 changes: 11 additions & 9 deletions plugins/markdown.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,8 @@ export interface Options {
// deno-lint-ignore no-explicit-any
rules: Record<string, (...args: any[]) => any>;

/** Set `true` append your plugins to the defaults */
keepDefaultPlugins: boolean;
/** Set `false` to remove the default plugins */
useDefaultPlugins: boolean;
}

// Default options
Expand All @@ -33,14 +33,16 @@ export const defaults: Options = {
options: {
html: true,
},
plugins: [
markdownItAttrs,
markdownItDeflist,
],
plugins: [],
rules: {},
keepDefaultPlugins: false,
useDefaultPlugins: true,
};

const defaultPlugins = [
markdownItAttrs,
markdownItDeflist,
];

interface MarkdownItEngine {
render: (input: string, env?: Record<string, unknown>) => string;
}
Expand Down Expand Up @@ -73,8 +75,8 @@ export class MarkdownEngine implements Engine {
export default function (userOptions?: DeepPartial<Options>) {
const options = merge(defaults, userOptions);

if (options.keepDefaultPlugins && userOptions?.plugins?.length) {
options.plugins = defaults.plugins.concat(userOptions.plugins);
if (options.useDefaultPlugins) {
options.plugins.unshift(...defaultPlugins);
}

return function (site: Site) {
Expand Down
21 changes: 13 additions & 8 deletions plugins/mdx.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,14 +13,14 @@ export interface Options {

/** List of remark plugins to use */
// deno-lint-ignore no-explicit-any
remarkPlugins?: any[];
remarkPlugins: any[];

/** List of rehype plugins to use */
// deno-lint-ignore no-explicit-any
rehypePlugins?: any[];
rehypePlugins: any[];

/** Flag to override the default plugins */
overrideDefaultPlugins?: boolean;
/** Set `false` to remove the default plugins */
useDefaultPlugins: boolean;

/** Optional pragma to add to the code evaluation */
pragma?: string;
Expand All @@ -32,10 +32,15 @@ export interface Options {
// Default options
export const defaults: Options = {
extensions: [".mdx"],
// By default, GitHub-flavored markdown is enabled
remarkPlugins: [remarkGfm],
remarkPlugins: [],
rehypePlugins: [],
useDefaultPlugins: true,
};

const remarkDefaultPlugins = [
remarkGfm,
];

/** Template engine to render Markdown files with Remark */
export class MDXEngine implements Engine<string | { toString(): string }> {
baseUrl: string;
Expand Down Expand Up @@ -97,8 +102,8 @@ export default async function (${destructure}) {
export default function (userOptions?: Partial<Options>) {
const options = merge(defaults, userOptions);

if (options.remarkPlugins && !options.overrideDefaultPlugins) {
options.remarkPlugins.push(...defaults.remarkPlugins!);
if (options.useDefaultPlugins) {
options.remarkPlugins.unshift(...remarkDefaultPlugins);
}

return function (site: Site) {
Expand Down
26 changes: 14 additions & 12 deletions plugins/postcss.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,22 +21,24 @@ export interface Options {
/** Plugins to use by postcss */
plugins: unknown[];

/** Set `true` append your plugins to the defaults */
keepDefaultPlugins: boolean;
/** Set `false` to remove the default plugins */
useDefaultPlugins: boolean;
}

// Default options
export const defaults: Options = {
extensions: [".css"],
includes: false,
plugins: [
// @ts-expect-error: postcss-nesting provides wrong types under node16 module resolution: https://github.com/csstools/postcss-plugins/issues/1031
postcssNesting(),
autoprefixer(),
],
keepDefaultPlugins: false,
plugins: [],
useDefaultPlugins: true,
};

const defaultPlugins = [
// @ts-expect-error: postcss-nesting provides wrong types under node16 module resolution: https://github.com/csstools/postcss-plugins/issues/1031
postcssNesting(),
autoprefixer(),
];

/** A plugin to load all CSS files and process them using PostCSS */
export default function (userOptions?: Partial<Options>) {
return (site: Site) => {
Expand All @@ -45,12 +47,12 @@ export default function (userOptions?: Partial<Options>) {
userOptions,
);

if (options.keepDefaultPlugins && userOptions?.plugins?.length) {
options.plugins = defaults.plugins.concat(userOptions.plugins);
}

const plugins = [...options.plugins];

if (options.useDefaultPlugins) {
plugins.unshift(...defaultPlugins);
}

if (options.includes) {
site.includes(options.extensions, options.includes, false);

Expand Down
30 changes: 16 additions & 14 deletions plugins/remark.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,26 +17,31 @@ export interface Options {
extensions: string[];

/** List of remark plugins to use */
remarkPlugins?: unknown[];
remarkPlugins: unknown[];

/** List of rehype plugins to use */
rehypePlugins?: unknown[];
rehypePlugins: unknown[];

/** Flag to turn on HTML sanitization to prevent XSS */
sanitize?: boolean;
sanitize: boolean;

/** Flag to override the default plugins */
overrideDefaultPlugins?: boolean;
/** Set `false` to remove the default plugins */
useDefaultPlugins: boolean;
}

// Default options
export const defaults: Options = {
extensions: [".md"],
// By default, GitHub-flavored markdown is enabled
remarkPlugins: [remarkGfm],
remarkPlugins: [],
rehypePlugins: [],
sanitize: false,
useDefaultPlugins: true,
};

const remarkDefaultPlugins = [
remarkGfm,
];

/** Template engine to render Markdown files with Remark */
export class MarkdownEngine implements Engine {
engine: unified.Processor;
Expand Down Expand Up @@ -83,15 +88,12 @@ export default function (userOptions?: Partial<Options>) {
// Add remark-parse to generate MDAST
plugins.push(remarkParse);

if (!options.overrideDefaultPlugins) {
// Add default remark plugins
defaults.remarkPlugins?.forEach((defaultPlugin) =>
plugins.push(defaultPlugin)
);
if (options.useDefaultPlugins) {
options.remarkPlugins.unshift(...remarkDefaultPlugins);
}

// Add remark plugins
options.remarkPlugins?.forEach((plugin) => plugins.push(plugin));
plugins.push(...options.remarkPlugins);

// Add remark-rehype to generate HAST
plugins.push([remarkRehype, { allowDangerousHtml: true }]);
Expand All @@ -102,7 +104,7 @@ export default function (userOptions?: Partial<Options>) {
}

// Add rehype plugins
options.rehypePlugins?.forEach((plugin) => plugins.push(plugin));
plugins.push(...options.rehypePlugins);

if (options.sanitize) {
// Add rehype-sanitize to make sure HTML is safe
Expand Down

0 comments on commit ade0c33

Please sign in to comment.