build(aio): allow render-examples to complete even if examples are broken
By setting `renderExamples.ignoreBrokenExamples = true` the doc-gen will not fail if there is something wrong with an example. Instead it will just log a warning.
This commit is contained in:
		
							parent
							
								
									feae55b264
								
							
						
					
					
						commit
						3a03ff6b2d
					
				| @ -4,10 +4,11 @@ const { parseAttributes, renderAttributes } = require('../../helpers/utils'); | |||||||
|  * Search the renderedContent looking for code examples that have a path (and optionally a region) attribute. |  * Search the renderedContent looking for code examples that have a path (and optionally a region) attribute. | ||||||
|  * When they are found replace their content with the appropriate doc-region parsed previously from an example file. |  * When they are found replace their content with the appropriate doc-region parsed previously from an example file. | ||||||
|  */ |  */ | ||||||
| module.exports = function renderExamples(getExampleRegion) { | module.exports = function renderExamples(getExampleRegion, log, createDocMessage) { | ||||||
|   return { |   return { | ||||||
|     $runAfter: ['docs-rendered'], |     $runAfter: ['docs-rendered'], | ||||||
|     $runBefore: ['writing-files'], |     $runBefore: ['writing-files'], | ||||||
|  |     ignoreBrokenExamples: false, | ||||||
|     $process: function(docs) { |     $process: function(docs) { | ||||||
|       docs.forEach(doc => { |       docs.forEach(doc => { | ||||||
|         if (doc.renderedContent) { |         if (doc.renderedContent) { | ||||||
| @ -17,34 +18,41 @@ module.exports = function renderExamples(getExampleRegion) { | |||||||
|             (original, openingTag, attributes, closingTag) => { |             (original, openingTag, attributes, closingTag) => { | ||||||
|               const attrMap = parseAttributes(attributes); |               const attrMap = parseAttributes(attributes); | ||||||
|               if (attrMap.path) { |               if (attrMap.path) { | ||||||
|                 if (closingTag !== openingTag) { |                 try { | ||||||
|                   // The markdown renderer will wrap what it thinks is a paragraph in `<p>` and `</p>` tags.
 |                   if (closingTag !== openingTag) { | ||||||
|                   // If you do not leave a blank line between a paragraph of text and a `<code-example>` then
 |                     // The markdown renderer will wrap what it thinks is a paragraph in `<p>` and `</p>` tags.
 | ||||||
|                   // the markdown renderer may add a paragraph marker "in-between" the opening and closing
 |                     // If you do not leave a blank line between a paragraph of text and a `<code-example>` then
 | ||||||
|                   // tags of the code-example. For example:
 |                     // the markdown renderer may add a paragraph marker "in-between" the opening and closing
 | ||||||
|                   //
 |                     // tags of the code-example. For example:
 | ||||||
|                   // ```
 |                     //
 | ||||||
|                   // Some paragraph
 |                     // ```
 | ||||||
|                   // <code-example path="...">
 |                     // Some paragraph
 | ||||||
|                   //
 |                     // <code-example path="...">
 | ||||||
|                   // </code-example>
 |                     //
 | ||||||
|                   // ```
 |                     // </code-example>
 | ||||||
|                   //
 |                     // ```
 | ||||||
|                   // will be rendered as:
 |                     //
 | ||||||
|                   //
 |                     // will be rendered as:
 | ||||||
|                   // ```
 |                     //
 | ||||||
|                   // <p>Some paragraph
 |                     // ```
 | ||||||
|                   // <code-example path="...">
 |                     // <p>Some paragraph
 | ||||||
|                   // </p>
 |                     // <code-example path="...">
 | ||||||
|                   // </code-example>
 |                     // </p>
 | ||||||
|                   // ```
 |                     // </code-example>
 | ||||||
|                   throw new Error( |                     // ```
 | ||||||
|                     'Badly formed example: ' + original + ' - closing tag does not match opening tag.\n' + |                     throw new Error( | ||||||
|                     ' - Perhaps you forgot to put a blank line before the example?'); |                       'Badly formed example: ' + original + ' - closing tag does not match opening tag.\n' + | ||||||
|  |                       ' - Perhaps you forgot to put a blank line before the example?'); | ||||||
|  |                   } | ||||||
|  |                   // We found a path attribute so look up the example and rebuild the HTML
 | ||||||
|  |                   const exampleContent = getExampleRegion(doc, attrMap.path, attrMap.region); | ||||||
|  |                   return `<${openingTag}${renderAttributes(attrMap)}>\n${exampleContent}\n</${openingTag}>`; | ||||||
|  |                 } catch(e) { | ||||||
|  |                   log.warn(createDocMessage(e.message, doc)); | ||||||
|  |                   if (!this.ignoreBrokenExamples) { | ||||||
|  |                     throw e; | ||||||
|  |                   } | ||||||
|                 } |                 } | ||||||
|                 // We found a path attribute so look up the example and rebuild the HTML
 |  | ||||||
|                 const exampleContent = getExampleRegion(doc, attrMap.path, attrMap.region); |  | ||||||
|                 return `<${openingTag}${renderAttributes(attrMap)}>\n${exampleContent}\n</${openingTag}>`; |  | ||||||
|               } |               } | ||||||
|               // No path attribute so just ignore this one
 |               // No path attribute so just ignore this one
 | ||||||
|               return original; |               return original; | ||||||
| @ -54,4 +62,3 @@ module.exports = function renderExamples(getExampleRegion) { | |||||||
|     } |     } | ||||||
|   }; |   }; | ||||||
| }; | }; | ||||||
| 
 |  | ||||||
|  | |||||||
| @ -2,7 +2,7 @@ var testPackage = require('../../helpers/test-package'); | |||||||
| var Dgeni = require('dgeni'); | var Dgeni = require('dgeni'); | ||||||
| 
 | 
 | ||||||
| describe('renderExamples processor', () => { | describe('renderExamples processor', () => { | ||||||
|   var injector, processor, exampleMap, collectExamples; |   var injector, processor, exampleMap, collectExamples, log; | ||||||
| 
 | 
 | ||||||
|   beforeEach(function() { |   beforeEach(function() { | ||||||
|     const dgeni = new Dgeni([testPackage('examples-package', true)]); |     const dgeni = new Dgeni([testPackage('examples-package', true)]); | ||||||
| @ -12,6 +12,7 @@ describe('renderExamples processor', () => { | |||||||
|     processor = injector.get('renderExamples'); |     processor = injector.get('renderExamples'); | ||||||
|     collectExamples = injector.get('collectExamples'); |     collectExamples = injector.get('collectExamples'); | ||||||
|     exampleMap = injector.get('exampleMap'); |     exampleMap = injector.get('exampleMap'); | ||||||
|  |     log = injector.get('log'); | ||||||
| 
 | 
 | ||||||
|     collectExamples.exampleFolders = ['examples']; |     collectExamples.exampleFolders = ['examples']; | ||||||
|     exampleMap['examples'] = { |     exampleMap['examples'] = { | ||||||
| @ -97,6 +98,25 @@ describe('renderExamples processor', () => { | |||||||
|           'Badly formed example: <' + CODE_TAG + ' path="test/url"></p> - closing tag does not match opening tag.\n' + |           'Badly formed example: <' + CODE_TAG + ' path="test/url"></p> - closing tag does not match opening tag.\n' + | ||||||
|           ' - Perhaps you forgot to put a blank line before the example?'); |           ' - Perhaps you forgot to put a blank line before the example?'); | ||||||
|       }); |       }); | ||||||
|  | 
 | ||||||
|  |       it('should not throw if `ignoreBrokenExamples` is set to true', () => { | ||||||
|  |         processor.ignoreBrokenExamples = true; | ||||||
|  |         const docs = [ | ||||||
|  |           { renderedContent: `<${CODE_TAG} path="test/url"></p></${CODE_TAG}>`}, | ||||||
|  |           { renderedContent: `<${CODE_TAG} path="test/url" region="missing"></${CODE_TAG}>`}, | ||||||
|  |           { renderedContent: `<${CODE_TAG} path="missing/url"></${CODE_TAG}>`} | ||||||
|  |         ]; | ||||||
|  |         expect(() => processor.$process(docs)).not.toThrow(); | ||||||
|  |         expect(log.warn).toHaveBeenCalledWith( | ||||||
|  |           'Badly formed example: <' + CODE_TAG + ' path="test/url"></p> - closing tag does not match opening tag.\n' + | ||||||
|  |           ' - Perhaps you forgot to put a blank line before the example? - doc'); | ||||||
|  |         expect(log.warn).toHaveBeenCalledWith( | ||||||
|  |           'Missing example region... relativePath: "test/url", region: "missing". - doc\n' + | ||||||
|  |           'Regions available are: "", "region-1" - doc'); | ||||||
|  |         expect(log.warn).toHaveBeenCalledWith( | ||||||
|  |           'Missing example file... relativePath: "missing/url". - doc\n' + | ||||||
|  |           'Example files can be found in the following relative paths: "examples" - doc'); | ||||||
|  |       }); | ||||||
|     }) |     }) | ||||||
|   ); |   ); | ||||||
| }); | }); | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user