fix: fix a lot of declaration semantic errors (#7194)

This commit is contained in:
Joshua Chen 2022-04-17 23:44:20 +08:00 committed by GitHub
parent b154318c28
commit 7f06857e46
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
8 changed files with 62 additions and 61 deletions

View file

@ -8,14 +8,14 @@
// TODO Types provided by MDX 2.0 https://github.com/mdx-js/mdx/blob/main/packages/mdx/types/index.d.ts
declare module '@mdx-js/mdx' {
import type {Processor} from 'unified';
import type {RemarkOrRehypePlugin} from '@docusaurus/mdx-loader';
import type {MDXPlugin} from '@docusaurus/mdx-loader';
export type Options = {
filepath?: string;
skipExport?: boolean;
wrapExport?: string;
remarkPlugins?: RemarkOrRehypePlugin[];
rehypePlugins?: RemarkOrRehypePlugin[];
remarkPlugins?: MDXPlugin[];
rehypePlugins?: MDXPlugin[];
};
export function sync(content: string, options?: Options): string;
@ -23,6 +23,6 @@ declare module '@mdx-js/mdx' {
export function createCompiler(options?: Options): Processor;
export default function mdx(
content: string,
options?: mdx.Options,
options?: Options,
): Promise<string>;
}

View file

@ -7,11 +7,7 @@
import {Feed, type Author as FeedAuthor, type Item as FeedItem} from 'feed';
import type {BlogPost} from './types';
import {
normalizeUrl,
mapAsyncSequential,
readOutputHTMLFile,
} from '@docusaurus/utils';
import {normalizeUrl, readOutputHTMLFile} from '@docusaurus/utils';
import {load as cheerioLoad} from 'cheerio';
import type {DocusaurusConfig} from '@docusaurus/types';
import path from 'path';
@ -61,46 +57,48 @@ async function generateBlogFeed({
return {name: author.name, link: author.url, email: author.email};
}
await mapAsyncSequential(blogPosts, async (post) => {
const {
id,
metadata: {
await Promise.all(
blogPosts.map(async (post) => {
const {
id,
metadata: {
title: metadataTitle,
permalink,
date,
description,
authors,
tags,
},
} = post;
const content = await readOutputHTMLFile(
permalink.replace(siteConfig.baseUrl, ''),
outDir,
siteConfig.trailingSlash,
);
const $ = cheerioLoad(content);
const feedItem: FeedItem = {
title: metadataTitle,
permalink,
id,
link: normalizeUrl([siteUrl, permalink]),
date,
description,
authors,
tags,
},
} = post;
// Atom feed demands the "term", while other feeds use "name"
category: tags.map((tag) => ({name: tag.label, term: tag.label})),
content: $(`#${blogPostContainerID}`).html()!,
};
const content = await readOutputHTMLFile(
permalink.replace(siteConfig.baseUrl, ''),
outDir,
siteConfig.trailingSlash,
);
const $ = cheerioLoad(content);
// json1() method takes the first item of authors array
// it causes an error when authors array is empty
const feedItemAuthors = authors.map(toFeedAuthor);
if (feedItemAuthors.length > 0) {
feedItem.author = feedItemAuthors;
}
const feedItem: FeedItem = {
title: metadataTitle,
id,
link: normalizeUrl([siteUrl, permalink]),
date,
description,
// Atom feed demands the "term", while other feeds use "name"
category: tags.map((tag) => ({name: tag.label, term: tag.label})),
content: $(`#${blogPostContainerID}`).html()!,
};
// json1() method takes the first item of authors array
// it causes an error when authors array is empty
const feedItemAuthors = authors.map(toFeedAuthor);
if (feedItemAuthors.length > 0) {
feedItem.author = feedItemAuthors;
}
feed.addItem(feedItem);
});
return feedItem;
}),
).then((items) => items.forEach(feed.addItem));
return feed;
}

View file

@ -42,7 +42,8 @@ declare module '@endiliey/react-ideal-image' {
type ThemeKey = 'placeholder' | 'img' | 'icon' | 'noscript';
export interface ImageProps extends ComponentProps<'img'> {
export interface ImageProps
extends Omit<ComponentProps<'img'>, 'srcSet' | 'placeholder'> {
/**
* This function decides what icon to show based on the current state of the
* component.

View file

@ -66,7 +66,7 @@ declare module '@docusaurus/plugin-pwa' {
tagName: string;
href?: string;
content?: string;
[attributeName: string]: string | boolean;
[attributeName: string]: string | boolean | undefined;
}[];
/**
* Useful for additional Workbox rules. You can do whatever a service worker

View file

@ -9,7 +9,8 @@
/// <reference types="@docusaurus/module-type-aliases" />
declare module '@theme-init/CodeBlock' {
import type CodeBlock, {Props as BaseProps} from '@theme/CodeBlock';
import type CodeBlock from '@theme/CodeBlock';
import type {Props as BaseProps} from '@theme/CodeBlock';
export interface Props extends BaseProps {
live?: boolean;

View file

@ -145,7 +145,7 @@ async function buildLocale({
new ReactLoadableSSRAddon({
filename: clientManifestPath,
}),
].filter(Boolean),
].filter(<T>(x: T | undefined | false): x is T => Boolean(x)),
},
);

View file

@ -236,7 +236,7 @@ You can also set the deploymentBranch property in docusaurus.config.js .`);
if (!cliOptions.skipBuild) {
// Build site, then push to deploymentBranch branch of specified repo.
try {
await runDeploy(await build(siteDir, cliOptions, false));
await build(siteDir, cliOptions, false).then(runDeploy);
} catch (err) {
logger.error('Deployment of the build output failed.');
throw err;

View file

@ -8,6 +8,8 @@
declare module 'remark-admonitions';
declare module 'react-loadable-ssr-addon-v5-slorber' {
import type {WebpackPluginInstance, Compiler} from 'webpack';
type Asset = {
file: string;
hash: string;
@ -26,15 +28,14 @@ declare module 'react-loadable-ssr-addon-v5-slorber' {
modulesToBeLoaded: string[],
): {js: Asset[]; css: Asset[]};
type ReactLoadableSSRAddon = {
new (props: {filename: string});
};
const plugin: ReactLoadableSSRAddon;
export default plugin;
export default class ReactLoadableSSRAddon implements WebpackPluginInstance {
constructor(props: {filename: string});
apply(compiler: Compiler): void;
}
}
declare module '@slorber/static-site-generator-webpack-plugin' {
import type {WebpackPluginInstance, Compiler} from 'webpack';
import type {HelmetServerState} from 'react-helmet-async';
export type Locals = {
@ -53,18 +54,18 @@ declare module '@slorber/static-site-generator-webpack-plugin' {
noIndex: boolean;
};
type StaticSiteGeneratorPlugin = {
new (props: {
export default class StaticSiteGeneratorPlugin
implements WebpackPluginInstance
{
constructor(props: {
entry: string;
locals: Locals;
paths: string[];
preferFoldersOutput?: boolean;
globals: {[key: string]: unknown};
});
};
const plugin: StaticSiteGeneratorPlugin;
export default plugin;
apply(compiler: Compiler): void;
}
}
declare module 'webpack/lib/HotModuleReplacementPlugin' {