From dd4e3f870461676e374affb3f00dd97637be701f Mon Sep 17 00:00:00 2001 From: Peter Bacon Darwin Date: Sat, 1 Apr 2017 07:01:44 +0100 Subject: [PATCH] build(aio): copy content image assets --- aio/transforms/angular.io-package/index.js | 14 +++++++--- .../processors/copyContentAssets.js | 12 +++++++++ .../processors/copyContentAssets.spec.js | 27 +++++++++++++++++++ .../angular.io-package/services/copyFolder.js | 5 ++++ 4 files changed, 55 insertions(+), 3 deletions(-) create mode 100644 aio/transforms/angular.io-package/processors/copyContentAssets.js create mode 100644 aio/transforms/angular.io-package/processors/copyContentAssets.spec.js create mode 100644 aio/transforms/angular.io-package/services/copyFolder.js diff --git a/aio/transforms/angular.io-package/index.js b/aio/transforms/angular.io-package/index.js index fb089ff150..35a563ef5a 100644 --- a/aio/transforms/angular.io-package/index.js +++ b/aio/transforms/angular.io-package/index.js @@ -24,7 +24,8 @@ const API_SOURCE_PATH = path.resolve(PROJECT_ROOT, 'packages'); const AIO_PATH = path.resolve(PROJECT_ROOT, 'aio'); const CONTENTS_PATH = path.resolve(AIO_PATH, 'content'); const TEMPLATES_PATH = path.resolve(AIO_PATH, 'transforms/templates'); -const OUTPUT_PATH = path.resolve(AIO_PATH, 'src/content/docs'); +const OUTPUT_PATH = path.resolve(AIO_PATH, 'src/content'); +const DOCS_OUTPUT_PATH = path.resolve(OUTPUT_PATH, 'docs'); module.exports = new Package( @@ -51,11 +52,12 @@ module.exports = .processor(require('./processors/filterIgnoredDocs')) .processor(require('./processors/fixInternalDocumentLinks')) .processor(require('./processors/processNavigationMap')) + .processor(require('./processors/copyContentAssets')) // overrides base packageInfo and returns the one for the 'angular/angular' repo. .factory('packageInfo', function() { return require(path.resolve(PROJECT_ROOT, 'package.json')); }) - .factory(require('./readers/json')) + .factory(require('./services/copyFolder')) .config(function(checkAnchorLinksProcessor, log) { // TODO: re-enable @@ -168,7 +170,7 @@ module.exports = }) // Where do we write the output files? - .config(function(writeFilesProcessor) { writeFilesProcessor.outputFolder = OUTPUT_PATH; }) + .config(function(writeFilesProcessor) { writeFilesProcessor.outputFolder = DOCS_OUTPUT_PATH; }) // Target environments @@ -292,6 +294,12 @@ module.exports = convertToJsonProcessor.docTypes = EXPORT_DOC_TYPES.concat([ 'content', 'decorator', 'directive', 'pipe', 'module' ]); + }) + + .config(function(copyContentAssetsProcessor) { + copyContentAssetsProcessor.assetMappings.push( + { from: path.resolve(CONTENTS_PATH, 'images'), to: path.resolve(OUTPUT_PATH, 'images') } + ); }); diff --git a/aio/transforms/angular.io-package/processors/copyContentAssets.js b/aio/transforms/angular.io-package/processors/copyContentAssets.js new file mode 100644 index 0000000000..f8b9a56ec1 --- /dev/null +++ b/aio/transforms/angular.io-package/processors/copyContentAssets.js @@ -0,0 +1,12 @@ + +module.exports = function copyContentAssetsProcessor(copyFolder) { + return { + $runAfter: ['files-written'], + assetMappings: [], + $process() { + this.assetMappings.forEach(map => { + copyFolder(map.from, map.to); + }); + } + }; +}; diff --git a/aio/transforms/angular.io-package/processors/copyContentAssets.spec.js b/aio/transforms/angular.io-package/processors/copyContentAssets.spec.js new file mode 100644 index 0000000000..9d6fa25aa3 --- /dev/null +++ b/aio/transforms/angular.io-package/processors/copyContentAssets.spec.js @@ -0,0 +1,27 @@ +const testPackage = require('../../helpers/test-package'); +const Dgeni = require('dgeni'); +const factory = require('./copyContentAssets'); + +fdescribe('extractDecoratedClasses processor', function() { + let dgeni, injector, processor; + + beforeEach(function() { + dgeni = new Dgeni([testPackage('angular.io-package')]); + injector = dgeni.configureInjector(); + processor = injector.get('copyContentAssetsProcessor'); + }); + + it('should exist', () => { + expect(processor).toBeDefined(); + }); + + it('should call copyFolder with each mapping', () => { + const mockCopyFolder = jasmine.createSpy(); + processor = factory(mockCopyFolder); + processor.assetMappings.push({ from: 'a/b/c', to: 'x/y/z' }); + processor.assetMappings.push({ from: '1/2/3', to: '4/5/6' }); + processor.$process(); + expect(mockCopyFolder).toHaveBeenCalledWith('a/b/c', 'x/y/z'); + expect(mockCopyFolder).toHaveBeenCalledWith('1/2/3', '4/5/6'); + }); +}); \ No newline at end of file diff --git a/aio/transforms/angular.io-package/services/copyFolder.js b/aio/transforms/angular.io-package/services/copyFolder.js new file mode 100644 index 0000000000..f6d848b427 --- /dev/null +++ b/aio/transforms/angular.io-package/services/copyFolder.js @@ -0,0 +1,5 @@ +const {cp} = require('shelljs'); + +module.exports = function copyFolder() { + return (from, to) => cp('-rf', from, to); +};