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 98 99 100 101 102 103 104 105 106 107 108 | 1x 1x 1x 1x 1x 1x 2x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 5x 1x 1x 1x 1x 5x | import { join, normalize, resolve } from '@angular-devkit/core';
import { Inject, Injectable } from 'static-injector';
import ts from 'typescript';
import { MetaCollection, ResolvedDataGroup } from '../mini-program-compiler';
import { GLOBAL_TEMPLATE_SUFFIX, LIBRARY_OUTPUT_ROOTDIR } from './const';
import { getUseComponents } from './merge-using-component-path';
import {
ENTRY_FILE_TOKEN,
ENTRY_POINT_TOKEN,
RESOLVED_DATA_GROUP_TOKEN,
} from './token';
import { ExtraTemplateData } from './type';
@Injectable()
export class OutputTemplateMetadataService {
private selfUseComponents!: Record<string, string>;
private selfMetaCollection!: MetaCollection;
constructor(
@Inject(ENTRY_FILE_TOKEN) private entryFile: string,
@Inject(RESOLVED_DATA_GROUP_TOKEN)
private dataGroup: ResolvedDataGroup,
@Inject(ENTRY_POINT_TOKEN) private entryPoint: string
) {}
run(fileName: string, data: string, sourceFile: ts.SourceFile) {
const list = data.split(/\n|\r\n/g);
list.splice(
list.length - 1,
0,
`${this.getSelfTemplate()};${this.getLibraryTemplate()}`
);
return list.join('\n');
}
private getSelfTemplate() {
const selfMetaCollection = this.dataGroup.otherMetaCollectionGroup['$self'];
Iif (!selfMetaCollection) {
return '';
}
this.selfMetaCollection = selfMetaCollection;
const templateStr = selfMetaCollection.templateList
.map((item) => item.content)
.join('');
const extraTemplateData: ExtraTemplateData = {
template: templateStr,
outputPath: resolve(
normalize('/'),
join(normalize(LIBRARY_OUTPUT_ROOTDIR), this.entryPoint, 'self')
),
};
delete this.dataGroup.otherMetaCollectionGroup['$self'];
return `let $self_${GLOBAL_TEMPLATE_SUFFIX}=${JSON.stringify(
extraTemplateData
)}`;
}
private getLibraryTemplate() {
Eif (!Object.keys(this.dataGroup.otherMetaCollectionGroup).length) {
return '';
}
const obj: Record<string, ExtraTemplateData> = {};
for (const key in this.dataGroup.otherMetaCollectionGroup) {
if (
Object.prototype.hasOwnProperty.call(
this.dataGroup.otherMetaCollectionGroup,
key
)
) {
const element = this.dataGroup.otherMetaCollectionGroup[key];
const templateStr = element.templateList
.map((item) => item.content)
.join('');
const useComponents = getUseComponents(
Array.from(element.libraryPath),
Array.from(element.localPath),
this.entryPoint
);
const extraTemplateData: ExtraTemplateData = {
template: templateStr,
useComponents: useComponents,
};
obj[key] = extraTemplateData;
}
}
return `let library_${GLOBAL_TEMPLATE_SUFFIX}=${JSON.stringify(obj)}`;
}
getSelfUseComponents() {
if (!this.selfUseComponents) {
const selfMetaCollection =
this.selfMetaCollection ||
this.dataGroup.otherMetaCollectionGroup['$self'];
Iif (!selfMetaCollection) {
return {};
}
const useComponents = getUseComponents(
Array.from(selfMetaCollection.libraryPath),
Array.from(selfMetaCollection.localPath),
this.entryPoint
);
this.selfUseComponents = useComponents;
}
return this.selfUseComponents;
}
}
|