Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 | 1x 1x 1x 11x 9x 9x 10x 10x 10x 10x 10x 150x 150x 150x 10x 10x 10x 10x 10x 150x 140x 10x 10x 9x 10x 10x 9x 10x | /* eslint-disable @typescript-eslint/no-explicit-any */
import { Injectable } from 'static-injector';
import * as webpack from 'webpack';
import { TemplateScopeSymbol } from './const';
export type TemplateScopeOutside = Omit<
LibraryTemplateScopeService,
Exclude<
keyof LibraryTemplateScopeService,
'setScopeLibraryUseComponents' | 'setScopeExtraUseComponents'
>
>;
export interface ExtraTemplateData {
useComponents: Record<string, string>;
templateList: string[];
configPath?: string;
templatePath?: string;
}
@Injectable()
export class LibraryTemplateScopeService {
private scopeExtraUseComponentsMap = new Map<string, ExtraTemplateData>();
private scopeLibraryUseComponentsMap = new Map<string, ExtraTemplateData[]>();
// 追加模板
constructor() {}
register(compilation: webpack.Compilation) {
(compilation as any)[TemplateScopeSymbol] = {
setScopeExtraUseComponents: this.setScopeExtraUseComponents,
setScopeLibraryUseComponents: this.setScopeLibraryUseComponents,
} as TemplateScopeOutside;
}
exportLibraryComponentConfig() {
const list: {
filePath: string;
content: { component: boolean; usingComponents: Record<string, string> };
}[] = [];
this.scopeLibraryUseComponentsMap.forEach((obj, libraryScope) => {
const extraData = this.scopeExtraUseComponentsMap.get(libraryScope) || {
useComponents: {},
};
// if (!extraData) {
// throw new Error(`没有找到${libraryScope}对应的配置`);
// }
for (const item of obj) {
const configPath = item.configPath!;
const usingComponents = {
...item.useComponents,
...extraData.useComponents,
};
list.push({
filePath: configPath,
content: { component: true, usingComponents: usingComponents },
});
}
});
return list;
}
exportLibraryTemplate() {
const fileGroup: Record<string, string> = {};
this.scopeLibraryUseComponentsMap.forEach((obj, libraryScope) => {
const extraData = this.scopeExtraUseComponentsMap.get(libraryScope) || {
templateList: [],
};
// if (!extraData) {
// throw new Error(`没有找到${libraryScope}对应的配置`);
// }
for (const item of obj) {
if (fileGroup[item.templatePath!]) {
continue;
}
fileGroup[item.templatePath!] = extraData.templateList.join('');
}
});
return fileGroup;
}
setScopeExtraUseComponents = (
libraryScope: string,
extraData: ExtraTemplateData
) => {
const data: ExtraTemplateData = this.scopeExtraUseComponentsMap.get(
libraryScope
) || { useComponents: {}, templateList: [] };
this.scopeExtraUseComponentsMap.set(libraryScope, {
useComponents: { ...data.useComponents, ...extraData.useComponents },
templateList: [...data.templateList, ...extraData.templateList],
});
};
setScopeLibraryUseComponents = (
libraryScope: string,
libraryUseComponents: ExtraTemplateData[]
) => {
this.scopeLibraryUseComponentsMap.set(libraryScope, libraryUseComponents);
};
}
|