packages/plugin-react/src/html/index.ts (38 lines of code) (raw):
import { PluginAPI } from '@alicloud/console-toolkit-core';
type HtmlDataKey = 'head' | 'metas' | 'styles' | 'headscripts' | 'prescripts' | 'scripts';
export interface HtmlData {
head: string;
metas: string[];
styles: string[];
headscripts: string[];
prescripts: string[];
scripts: string[];
body: string;
}
export default function(api: PluginAPI) {
const htmlData: HtmlData = {
head: "",
metas: [],
styles: [],
headscripts: [],
prescripts: [],
scripts: [],
body: ''
};
const addToData = (name: HtmlDataKey) => (data: string) => {
const field = htmlData[name];
if (Array.isArray(field)) {
if (!field.includes(data)) field.push(data);
} else {
// @ts-ignore
htmlData[name] = data;
}
};
api.registerSyncAPI('addHtmlMeta', addToData('metas'));
api.registerSyncAPI('addHtmlStyle', addToData('styles'));
api.registerSyncAPI('addHtmlPrescript', addToData('prescripts'));
api.registerSyncAPI('addHtmlScript', addToData('scripts'));
api.registerSyncAPI('addHtmlHeadScript', addToData('headscripts'));
api.registerSyncAPI('getHtmlData', () => {
return htmlData;
});
}