build(docs-infra): sort NgModule exports by id (#26051)
PR Close #26051
This commit is contained in:
parent
56c86c7e79
commit
7f1cace2a2
|
@ -2,22 +2,12 @@ module.exports = function processNgModuleDocs(getDocFromAlias, createDocMessage,
|
||||||
return {
|
return {
|
||||||
$runAfter: ['extractDecoratedClassesProcessor', 'computeIdsProcessor'],
|
$runAfter: ['extractDecoratedClassesProcessor', 'computeIdsProcessor'],
|
||||||
$runBefore: ['createSitemap'],
|
$runBefore: ['createSitemap'],
|
||||||
|
exportDocTypes: ['directive', 'pipe'],
|
||||||
$process(docs) {
|
$process(docs) {
|
||||||
docs.forEach(doc => {
|
|
||||||
if (doc.docType === 'ngmodule') {
|
|
||||||
Object.keys(doc.ngmoduleOptions).forEach(key => {
|
|
||||||
const value = doc.ngmoduleOptions[key];
|
|
||||||
if (value && !Array.isArray(value)) {
|
|
||||||
doc.ngmoduleOptions[key] = [value];
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// Match all the directives/pipes to their module
|
// Match all the directives/pipes to their module
|
||||||
const errors = [];
|
const errors = [];
|
||||||
docs.forEach(doc => {
|
docs.forEach(doc => {
|
||||||
if (['directive', 'pipe'].indexOf(doc.docType) !== -1) {
|
if (this.exportDocTypes.indexOf(doc.docType) !== -1) {
|
||||||
if (!doc.ngModules || doc.ngModules.length === 0) {
|
if (!doc.ngModules || doc.ngModules.length === 0) {
|
||||||
errors.push(createDocMessage(`"${doc.id}" has no @ngModule tag. Docs of type "${doc.docType}" must have this tag.`, doc));
|
errors.push(createDocMessage(`"${doc.id}" has no @ngModule tag. Docs of type "${doc.docType}" must have this tag.`, doc));
|
||||||
return;
|
return;
|
||||||
|
@ -38,7 +28,8 @@ module.exports = function processNgModuleDocs(getDocFromAlias, createDocMessage,
|
||||||
}
|
}
|
||||||
|
|
||||||
const ngModuleDoc = ngModuleDocs[0];
|
const ngModuleDoc = ngModuleDocs[0];
|
||||||
const container = ngModuleDoc[doc.docType + 's'] = ngModuleDoc[doc.docType + 's'] || [];
|
const containerName = getContainerName(doc.docType);
|
||||||
|
const container = ngModuleDoc[containerName] = ngModuleDoc[containerName] || [];
|
||||||
container.push(doc);
|
container.push(doc);
|
||||||
|
|
||||||
doc.ngModules[index] = ngModuleDoc;
|
doc.ngModules[index] = ngModuleDoc;
|
||||||
|
@ -50,6 +41,32 @@ module.exports = function processNgModuleDocs(getDocFromAlias, createDocMessage,
|
||||||
errors.forEach(error => log.error(error));
|
errors.forEach(error => log.error(error));
|
||||||
throw new Error('Failed to process NgModule relationships.');
|
throw new Error('Failed to process NgModule relationships.');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
docs.forEach(doc => {
|
||||||
|
if (doc.docType === 'ngmodule') {
|
||||||
|
Object.keys(doc.ngmoduleOptions).forEach(key => {
|
||||||
|
const value = doc.ngmoduleOptions[key];
|
||||||
|
if (value && !Array.isArray(value)) {
|
||||||
|
doc.ngmoduleOptions[key] = [value];
|
||||||
|
}
|
||||||
|
});
|
||||||
|
this.exportDocTypes.forEach(type => {
|
||||||
|
const containerName = getContainerName(type);
|
||||||
|
const container = doc[containerName];
|
||||||
|
if (container) {
|
||||||
|
container.sort(byId);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
function getContainerName(docType) {
|
||||||
|
return docType + 's';
|
||||||
|
}
|
||||||
|
|
||||||
|
function byId(a, b) {
|
||||||
|
return a.id > b.id ? 1 : -1;
|
||||||
|
}
|
||||||
|
|
|
@ -37,7 +37,7 @@ describe('processNgModuleDocs processor', () => {
|
||||||
expect(docs[0].ngmoduleOptions.c).toEqual([42]);
|
expect(docs[0].ngmoduleOptions.c).toEqual([42]);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should link directive/pipe docs with their NgModule docs', () => {
|
it('should link directive/pipe docs with their NgModule docs (sorted by id)', () => {
|
||||||
const aliasMap = injector.get('aliasMap');
|
const aliasMap = injector.get('aliasMap');
|
||||||
const ngModule1 = { docType: 'ngmodule', id: 'NgModule1', aliases: ['NgModule1'], ngmoduleOptions: {}};
|
const ngModule1 = { docType: 'ngmodule', id: 'NgModule1', aliases: ['NgModule1'], ngmoduleOptions: {}};
|
||||||
const ngModule2 = { docType: 'ngmodule', id: 'NgModule2', aliases: ['NgModule2'], ngmoduleOptions: {}};
|
const ngModule2 = { docType: 'ngmodule', id: 'NgModule2', aliases: ['NgModule2'], ngmoduleOptions: {}};
|
||||||
|
@ -50,7 +50,7 @@ describe('processNgModuleDocs processor', () => {
|
||||||
|
|
||||||
aliasMap.addDoc(ngModule1);
|
aliasMap.addDoc(ngModule1);
|
||||||
aliasMap.addDoc(ngModule2);
|
aliasMap.addDoc(ngModule2);
|
||||||
processor.$process([ngModule1, ngModule2, directive1, directive2, directive3, pipe1, pipe2, pipe3]);
|
processor.$process([ngModule1, pipe2, directive2, directive3, pipe1, ngModule2, directive1, pipe3]);
|
||||||
|
|
||||||
expect(ngModule1.directives).toEqual([directive1, directive3]);
|
expect(ngModule1.directives).toEqual([directive1, directive3]);
|
||||||
expect(ngModule1.pipes).toEqual([pipe1, pipe3]);
|
expect(ngModule1.pipes).toEqual([pipe1, pipe3]);
|
||||||
|
|
Loading…
Reference in New Issue